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 '', ; $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__ unshift @INC, "blib/arch"; PerlModule Apache::PerlRun PerlModule Apache::Request PerlModule Apache::Cookie SetHandler perl-script PerlHandler Apache::PerlRun Options +ExecCGI