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

use 5.008000;
use ExtUtils::MakeMaker;

my %required_modules = (
	# voodoo-control uses CPAN under the hood to do some of it's work which is why it's listed here.
	'CPAN'                  => 1.9205,	
	'Apache::Session'       => 1.6,
	'Config::General'       => 2.27,
	'DBI'                   => 1.609,
	'Devel::StackTrace'     => 1.20,
	'Digest::MD5'           => 2.36,
	'Email::Valid'          => 0.15,
	'Exception::Class'      => 1.26,
	'Exception::Class::DBI' => 1.00,
	'File::Pid'             => 1.01,
	'HTML::Template'        => 2.7,
	'JSON::DWIW'            => 0.32,
	'Tie::Hash::Indexed'    => 0.05,    # Used by Table/Probe/MySQL.pm
	'Time::HiRes'           => 1.65,
	'XML::Checker'          => 0.13
);

my %optionals = (
	'Apache::Request'  => 1.33,
	'Apache::Cookie'   => 0,
	'Apache2::Request' => 2.08,
	'Apache2::Cookie'  => 2.08,

	'SOAP::Lite'            => 0.710,
	'Data::Structure::Util' => 0.15,

	'Pod::WSDL2'       => 0.06,	# prefer my forked version,
	'Pod::WSDL'        => 0.05,	# fallback to the main one if it's not installed

	'Log::Log4Perl'    => 1.24
);

eval {
	require "mod_perl2.pm";
};
if ($@) {
	eval {
		require "mod_perl.pm";
	};
}

print "mod_perl version: $mod_perl::VERSION\n";
if ($mod_perl::VERSION >= 1.99) {
	print "Adding prequisites for mod_perl Version 2 API...\n";
	add_mp2(\%required_modules);
}
elsif ($mod_perl::VERSION > 0) {
	print "Adding prequisites for mod_perl Version 1 API...\n";
	add_mp1(\%required_modules);
}
else {
	my $answer;
	print "\nCan't find mod_perl.pm or mod_perl2.pm, one of which is required.\n\n";
	while ($answer != /^[12]$/) {
		$answer = prompt("Do you want to use Apache 1.X or Apache 2.X? (1/2)",2);
		chomp($answer);
	}

	if ($answer == 1) {
		add_mp1(\%required_modules);
	}
	else {
		add_mp2(\%required_modules);
	}
}

eval { require SOAP::Transport::HTTP; };
if ($@) {
	print "\nApache::Voodoo can also optionally serve SOAP requests.\n";
	my $answer;
	while ($answer !~ /^[yn]/i) {
		$answer = prompt("Would you like me to add the dependencies to enable this feature? (y/n)",'y');
		chomp($answer);
	}

	if ($answer =~ /^y/i) {
		$required_modules{'SOAP::Lite'} = $optionals{'SOAP::Lite'};
		print "Adding prequisites for SOAP...\n";
	}
}
else {
	$required_modules{'SOAP::Lite'} = $optionals{'SOAP::Lite'};
}

if ($required_modules{'SOAP::Lite'}) {
	$required_modules{'Data::Structure::Util'} = $optionals{'Data::Structure::Util'};

	eval { require Pod::WSDL2; };
	if ($@) {
		$required_modules{'Pod::WSDL'}  = $optionals{'Pod::WSDL'};
	}
	else {
		print "Pod::WSDL2 found\n";
		$required_modules{'Pod::WSDL2'}  = $optionals{'Pod::WSDL2'};
	}
}

if (defined($required_modules{'Pod::WSDL'})) {
	# check to see if we have my version of Pod::WSDL installed
	eval {
		require Pod::WSDL2;
	};
	if (!$@) {
		# they do, remove this dependancy
		delete $required_modules{'Pod::WSDL'};
	}
}

eval { require Log::Log4perl; };
if ($@) {
	print "\nApache::Voodoo can log debugging message with Log4perl.\n";
	my $answer;
	while ($answer !~ /^[yn]/i) {
		$answer = prompt("Would you like me to add the dependencies to enable this feature? (y/n)",'y');
		chomp($answer);
	}

	if ($answer =~ /^y/i) {
		$required_modules{'Log::Log4perl'} = $optionals{'Log::Log4perl'};
		print "Adding prequisites for Log4perl...\n";
	}
}
else {
	$required_modules{'Log::Log4perl'} = $optionals{'Log::Log4perl'};
}


WriteMakefile(
	NAME          => 'Apache::Voodoo',
	VERSION_FROM  => 'lib/Apache/Voodoo.pm',
	PREREQ_PM     => \%required_modules,
	(
		$] >= 5.008 ?
		(ABSTRACT_FROM => 'lib/Apache/Voodoo.pod', # retrieve abstract from module
		AUTHOR         => 'Maverick Edwards <maverick@smurfbane.org>') : ()
	),
	INSTALLSCRIPT => $paths{'SBINDIR'},
	EXE_FILES => ['bin/voodoo-control']
	# PM_FILTER => $filter
);


sub add_mp1 {
	$req = shift;
	$req->{Apache::Request} = $optionals{Apache::Request};
	$req->{Apache::Cookie}  = $optionals{Apache::Cookie};
}

sub add_mp2 {
	$req = shift;
	$req->{Apache2::Request} = $optionals{Apache2::Request};
	$req->{Apache2::Cookie}  = $optionals{Apache2::Cookie};
}

################################################################################
# Copyright (c) 2005 Steven Edwards.  All rights reserved.
################################################################################