The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;
use inc::Module::Install 0.77;

use ExtUtils::Liblist;
use Config;
use File::Spec::Functions;

my @inc = map { split } @Config{qw(usrinc incpath locincpth)};

sub has_lib { can_cc() and scalar grep { length } ExtUtils::Liblist->ext("-l$_[0]") }

sub has_bdb {
	can_use("BerkeleyDB")
		or
	can_cc() && (
		exists $ENV{BERKELEYDB_LIB}
			or
		-e '/usr/local/BerkeleyDB'
			or
		has_lib("db") or has_lib("libdb")
	);
}

sub has_uuid {
	return 0 unless can_cc();

	foreach my $inc ( @inc ) {
		return 1 if -e catfile($inc, qw(uuid uuid.h));
	}

	return 0;
}

sub has_dbd {
	can_use("DBD::SQLite")
		or
	can_use("DBD::Pg"),
		or
	scalar(can_use("DBD::mysql")),
}

sub has_couchdb {
	scalar can_use("AnyEvent::CouchDB"),
}

name 'Task-KiokuDB';
all_from 'lib/Task/KiokuDB.pm';

requires 'Test::use::ok';
requires 'KiokuDB';

feature 'CLI',
  -default       => 1,
  'KiokuDB::Cmd' => 0;

feature 'Files backend',
  -default                  => 1,
  'KiokuDB::Backend::Files' => 0;

feature 'XS acceleration for JSON',
  -default   => scalar(can_cc()),
  'JSON::XS' => 0;

feature 'YAML::XS for dump/load & MooseX::YAML',
  -default   => scalar(can_cc()),
  'YAML::XS' => 0;

feature 'MooseX::Storage integration',
  -default          => 0,
  'MooseX::Storage' => 0;

feature 'Berkeley DB backend',
  -default                => has_bdb(),
  'BerkeleyDB::Manager'   => 0,
  'KiokuDB::Backend::BDB' => 0;

feature 'DBI backend',
  -default                => has_dbd(),
  'KiokuDB::Backend::DBI' => 0;

feature 'CouchDB backend',
  -default                    => has_couchdb(),
  'KiokuDB::Backend::CouchDB' => 0;

feature 'libuuid based UUIDs',
  -default              => scalar( can_cc() && has_uuid() ),
  'Data::UUID::LibUUID' => 0;

feature 'generic user object',
	-default       => 0,
	'KiokuX::User' => 0;

feature 'generic model wrapper',
	-default        => 0,
	'KiokuX::Model' => 0;

feature 'Catalyst integration',
	-default                   => 0,
	'Catalyst::Model::KiokuDB' => 0;

auto_install;
WriteAll;