blob: 126e307d520221f611321c853f8d284f51269ac3 [file] [log] [blame]
use ExtUtils::MakeMaker;
use strict;
use FindBin;
use 5.005;
use File::Path qw(mkpath);
use lib qw(Apache-Test/lib);
use constant MIN_A_T_VERSION => 1.13;
use constant HAS_APACHE_TEST => eval {
require Apache::Test &&
$Apache::Test::VERSION >= MIN_A_T_VERSION;
};
use constant WIN32 => ($^O eq "MSWin32") || $ENV{WIN32_TEST};
if (WIN32) {
win32_setup() unless ($ENV{APACHE} || grep /^-httpd$/, @ARGV);
}
# enable 'make test|clean'
if (HAS_APACHE_TEST) {
require Apache::TestMM;
Apache::TestMM->import(qw(test clean));
}
BEGIN {
unless (eval {require mod_perl}) {
die "Please install mod_perl: 1.25 < version < 1.99\n($@)";
}
if ($mod_perl::VERSION < 1.2402) {
die "Please upgrade mod_perl to 1.24_02 or greater";
}
elsif ($mod_perl::VERSION > 1.98) {
die "mod_perl 1.x ( < 1.99) is required";
}
}
my $conf_data = join '', <DATA>;
$conf_data =~ s|(blib/arch)|$FindBin::Bin/$1|;
if (HAS_APACHE_TEST) {
# accept the configs from command line
Apache::TestMM::filter_args();
Apache::TestMM::generate_script('t/TEST');
}
else {
print "\nskipping test setup... which requires Apache::Test " .
MIN_A_T_VERSION . " or higher\n";
*MY::test = sub {
return <<'EOF';
test : pure_all
@echo \*** This test suite requires Apache::Test available
@echo \*** available from CPAN
EOF
};
}
# prerequisites
my %require = (
"Apache::Test" => MIN_A_T_VERSION,
);
my $myVERSION = MM->parse_version('Request/Request.pm');
$myVERSION =~ s/(\d\d)(\d\d)$/$1_$2/;
my $lib;
check_compat();
if (WIN32) {
require Cwd;
my $cwd = Cwd::cwd();
$cwd =~ s#\\#/#g;
my $root = "$cwd/blib/arch/auto";
mkpath $root, 1, 0755 unless -d $root;
mkpath "$root/libapreq", 1, 0755 unless -d "$root/libapreq";
$lib = "$root/libapreq/libapreq.lib";
open (FILE, ">>$lib")
or die "Cannot touch $lib: $!\n";
close FILE;
require Apache::MyConfig;
$ENV{APREQ_LIB} = "$root/libapreq";
$ENV{AP_INC} = $Apache::MyConfig::Setup{APACHE_INC};
$ENV{MP_INC} = $Apache::MyConfig::Setup{MODPERL_INC};
$ENV{AP_LIB} = $Apache::MyConfig::Setup{APACHE_LIB};
$ENV{MP_LIB} = $Apache::MyConfig::Setup{MODPERL_LIB};
unless (-f "$ENV{MP_LIB}/mod_perl.so") {
die "Cannot find mod_perl.so in $ENV{MP_LIB}. " .
"Please build mod_perl first";
}
unless (-f "$ENV{AP_LIB}/ApacheCore.lib") {
die "Cannot find ApacheCore.lib in $ENV{AP_LIB}. " .
"Please build apache first.";
}
}
WriteMakefile(
NAME => 'libapreq',
VERSION => $myVERSION,
DIR => [qw(c Request Cookie)],
PREREQ_PM => \%require,
clean => {
FILES => "@{ clean_files() }",
},
);
sub clean_files {
return [qw( t/TEST )];
}
if (WIN32 and -e $lib) {
unlink $lib or die "Cannot unlink $lib: $!\n";
}
sub check_compat {
eval { require Apache::Request };
return if $@;
my $v = $Apache::Request::VERSION;
return if $v >= 0.2000;
print "libapreq is not compatible with Apache::Request version $v\n";
my $ans = prompt("Continue?", "n");
if ($ans =~ /^n/i) {
print "Aborting.\n";
exit;
}
}
sub MY::pasthru {
my $self = shift;
chomp(my $str = $self->MM::pasthru);
join $/, "$str\\", "\t".'DEFINE="$(DEFINE)"', "";
}
sub MY::postamble {
return <<'EOF';
cvs_tag :
cvs tag v$(VERSION_SYM) .
@echo update the VERSION in Apache/Request.pm now
EOF
}
sub win32_setup {
eval{ require Win32 };
die "The libwin32 package is needed" if $@;
require File::Spec;
my $apache;
my $exe = 'Apache.exe';
SEARCH: {
my $candidate;
for (File::Spec->path) {
$candidate = File::Spec->catfile($_, $exe);
if (-e $candidate and check_win32_apache($candidate)) {
$apache = $candidate;
last SEARCH;
}
}
my @drives = drives();
last SEARCH unless (@drives > 0);
for my $drive (@drives) {
for ('Apache', 'Program Files/Apache',
'Program Files/Apache Group/Apache') {
$candidate = File::Spec->catfile($drive, $_, $exe);
if (-e $candidate and check_win32_apache($candidate)) {
$apache = $candidate;
last SEARCH;
}
}
}
}
unless (-e $apache) {
$apache = prompt("Please supply the full path to Apache.exe:",
$apache);
}
if (-d $apache) {
$apache = File::Spec->catfile($apache, $exe);
}
die "Can't find Apache.exe!"
unless (-e $apache and check_win32_apache($apache));
$apache = Win32::GetShortPathName($apache);
$apache =~ s!\\!/!g;
push @ARGV, '-httpd', $apache;
print qq{Using "$apache".\n};
}
sub check_win32_apache {
my $apache = shift;
my $vers = qx{"$apache" -v};
return ($vers =~ m!Apache/1.3!) ? 1 : 0;
}
sub drives {
my @drives = ();
eval { require Win32API::File };
return map {"$_:\\"} ('C' .. 'Z') if $@;
my @r = Win32API::File::getLogicalDrives();
return unless @r > 0;
for (@r) {
my $t = Win32API::File::GetDriveType($_);
push @drives, $_ if ($t == 3 or $t == 4);
}
return @drives > 0 ? @drives : undef;
}
__DATA__
<Perl>
unshift @INC, "blib/arch";
</Perl>
PerlModule Apache::PerlRun
PerlModule Apache::Request
PerlModule Apache::Cookie
<FilesMatch "\.pl">
SetHandler perl-script
PerlHandler Apache::PerlRun
Options +ExecCGI
</FilesMatch>