use 5.005; use lib qw(../../lib); # Apache-Test/lib use Apache::TestMM qw(test clean); use Apache::TestMM (); use Apache::TestReport; use ExtUtils::MakeMaker (); my $mp_gen = satisfy_mp_generation(); warn "Goind to build against mod_perl/$mod_perl::VERSION Perl/$]\n"; Apache::TestMM::filter_args(); my @scripts = qw(t/TEST); for (@scripts) { Apache::TestMM::generate_script($_); } Apache::TestReport->generate_script; my @clean_files = (@scripts, qw(t/REPORT)); my %common_opts = ( NAME => 'Apache-TestMe', VERSION => '0.01', clean => { FILES => "@clean_files", }, ); if ($mp_gen == 1) { require ExtUtils::MakeMaker; ExtUtils::MakeMaker::WriteMakefile( %common_opts, ); } else { require ModPerl::MM; ModPerl::MM::WriteMakefile( %common_opts, ); } # If a specific generation was passed as an argument, # if satisfied # return the same generation # else # die # else @ARGV and %ENV will be checked for specific orders # if the specification will be found # if satisfied # return the specified generation # else # die # else if any mp generation is found # return it # else # die sub satisfy_mp_generation { my $wanted = shift || wanted_mp_generation(); unless ($wanted == 1 || $wanted == 2) { die "don't know anything about mod_perl generation: $wanted\n" . "currently supporting only generations 1 and 2"; } my $selected = 0; if ($wanted == 1) { require_mod_perl(); if ($mod_perl::VERSION >= 1.99) { # so we don't pick 2.0 version if 1.0 is wanted die "You don't seem to have mod_perl 1.0 installed"; } $selected = 1; } elsif ($wanted == 2) { #warn "Looking for mod_perl 2.0"; require_mod_perl2(); if ($mod_perl::VERSION < 1.99) { die "You don't seem to have mod_perl 2.0 installed"; } $selected = 2; } else { $selected = eval { require_mod_perl2() or require_mod_perl() }; warn "Using $mod_perl::VERSION\n"; } return $selected; } sub require_mod_perl { eval { require mod_perl }; die "Can't find mod_perl installed\nThe error was: $@" if $@; 1; } sub require_mod_perl2 { eval { require mod_perl2 }; die "Can't find mod_perl installed\nThe error was: $@" if $@; 2; } # the function looks at %ENV and Makefile.PL option to figure out # whether a specific mod_perl generation was requested. # It uses the following logic: # via options: # perl Makefile.PL MOD_PERL=2 # or via %ENV: # env MOD_PERL=1 perl Makefile.PL # # return value is: # 1 or 2 if the specification was found (mp 1 and mp 2 respectively) # 0 otherwise sub wanted_mp_generation { # check if we have a command line specification # flag: 0: unknown, 1: mp1, 2: mp2 my $flag = 0; my @pass; while (@ARGV) { my $key = shift @ARGV; if ($key =~ /^MOD_PERL=(\d)$/) { $flag = $1; } else { push @pass, $key; } } @ARGV = @pass; # check %ENV my $env = exists $ENV{MOD_PERL} ? $ENV{MOD_PERL} : 0; # check for contradicting requirements if ($env && $flag && $flag != $env) { die <= 1.99 ? 2 : 1; } } return $wanted; } # the function looks at %ENV and Makefile.PL option to figure out # whether a specific mod_perl generation was requested. # It uses the following logic: # via options: # perl Makefile.PL MOD_PERL=2 # or via %ENV: # env MOD_PERL=1 perl Makefile.PL # # return value is: # 1 or 2 if the specification was found (mp 1 and mp 2 respectively) # 0 otherwise sub wanted_mp_generation { # check if we have a command line specification # flag: 0: unknown, 1: mp1, 2: mp2 my $flag = 0; my @pass; while (@ARGV) { my $key = shift @ARGV; if ($key =~ /^MOD_PERL=(\d)$/) { $flag = $1; } else { push @pass, $key; } } @ARGV = @pass; # check %ENV my $env = exists $ENV{MOD_PERL} ? $ENV{MOD_PERL} : 0; # check for contradicting requirements if ($env && $flag && $flag != $env) { die <= 1.99 ? 2 : 1; } } return $wanted; }