use strict; use lib qw(lib); use Config; use Symbol qw(gensym); my %prereqs = (); my %mp2 = ( mod_perl2 => 1.99022 ); my %mp1 = ( mod_perl => 0 ); my $at_min_ver = 1.34; my $mp_gen; # MOD_PERL_2_BUILD is set from building from mod_perl Makefile.PL which should # also set MP_APXS if ($ENV{MOD_PERL_2_BUILD}) { push @ARGV, "-apxs", $ENV{MP_APXS}; $mp_gen = satisfy_mp_generation(2); } else { $mp_gen = satisfy_mp_generation(); } %prereqs = ($mp_gen == 1 ? %mp1 : %mp2); my $HAS_APACHE_TEST = check_for_apache_test(); my $VERSION; set_apache_reload_version(); my %common_opts = ( VERSION => $VERSION, PREREQ_PM => \%prereqs, dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', PREOP => 'find $(DISTVNAME) -type d -print|xargs chmod 0755 && ' . 'find $(DISTVNAME) -type f -print|xargs chmod 0644', TO_UNIX => 'find $(DISTVNAME) -type f -print|xargs dos2unix' }, clean => { FILES => 't/TEST' }, ); ### MAINTAINER_BUILDING_RELEASE is hack ### for the Release Manager's use only. ### We will set it so that the resulting ### distribution will be called Apache-Reload-\d+.tar.gz ### and NOT Apache2-Reload-\d+.tar.gz ### This is for historical reasons and consistency if ($mp_gen == 1 || $ENV{MAINTAINER_BUILDING_RELEASE}) { require ExtUtils::MakeMaker; ExtUtils::MakeMaker::WriteMakefile( %common_opts, NAME => "Apache::Reload", ABSTRACT_FROM => 'lib/Apache/Reload.pm', ); } else { require ModPerl::MM; ModPerl::MM::WriteMakefile( %common_opts, NAME => "Apache2::Reload", ABSTRACT_FROM => 'lib/Apache2/Reload.pm', ); } sub check_for_apache_test { return unless eval { require Apache::Test; if ($Apache::Test::VERSION < $at_min_ver) { die "Apache::Test version is " . $Apache::Test::VERSION . ", minimum version required is $at_min_ver" . ", tests will be skipped\n"; } require Apache::TestMM; require Apache::TestRunPerl; 1; }; Apache::TestMM::filter_args(); my %args = @Apache::TestMM::Argv; Apache::TestRunPerl->generate_script(); return 1; } sub set_apache_reload_version { require Apache::Reload; $VERSION = $Apache::Reload::VERSION; my $fh = Symbol::gensym(); open $fh, 'Changes' or die "Can't open Changes: $!"; while (<$fh>) { if(/^=item.*-(dev|rc\d+)/) { $VERSION .= "-$1"; last; } last if /^=item/; } close $fh; } # 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.\n" . "Please specify MOD_PERL=1 or MOD_PERL=2 on the commandline\n"; } my $selected = 0; if ($wanted == 1) { require_mod_perl(1); 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_perl(2); if ($mod_perl::VERSION < 2.0) { die "You don't seem to have mod_perl 2.0 installed"; } $selected = 2; } else { require_mod_perl(); $selected = $mod_perl::VERSION >= 1.99 ? 2 : 1; warn "Using $mod_perl::VERSION\n"; } return $selected; } sub require_mod_perl { my($rversion) = @_; if (!$rversion || $rversion==1){ eval { require mod_perl }; if ($rversion == 1){ if ($@){ warn "Note: Did not find mod_perl installed\n"; } return; # do not die, let PREREQ_PM handle it } } if ($@ || !$rversion || $rversion==2){ eval { require mod_perl2 }; if ($rversion == 2){ if ($@){ warn "Note: Did not find mod_perl2 installed\n"; } return; # do not die, let PREREQ_PM handle it } } die "Can't find mod_perl installed\nThe error was: $@" if $@; } # 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; foreach my $key (@ARGV) { if ($key =~ /^MOD_PERL=(\d)$/) { $flag = $1; } } # check %ENV my $env = exists $ENV{MOD_PERL} ? $ENV{MOD_PERL} : 0; # check for contradicting requirements if ($env && $flag && $flag != $env) { die <catdir('..', 'lib'); unshift @INC, $mplib if -e File::Spec->catfile($mplib,'mod_perl2.pm'); my $atlib = File::Spec->catdir('../', 'Apache-Test', 'lib'); unshift @INC, $atlib if -d $atlib; } eval { require mod_perl2 }; unless ($@) { $wanted = 2; } } else { $wanted = 1; } } return $wanted; } package MY; sub postamble { my $self = shift; my $q = ($^O =~ /MSWin32/i ? '"' : "'"); my $string = $self->SUPER::postamble; $string .= <<"EOF"; tag : svn copy -m $q\$(VERSION_SYM) tag$q https://svn.apache.org/repos/asf/perl/Apache-Reload/trunk https://svn.apache.org/repos/asf/perl/Apache-Reload/tags/\$(VERSION_SYM) EOF return $string; } sub test { my $self = shift; eval { require Test::More } or return <Apache::TestMM::test(@_) if $HAS_APACHE_TEST; return <Apache::TestMM::clean(@_) if $HAS_APACHE_TEST; return $self->SUPER::clean(@_); } sub constants { my $self = shift; my $string = $self->MM::constants; # mp2 installs this into INSTALLSITEARCH, so in order to avoid # problems when users forget 'make install UNINST=1', trick MM into # installing pure perl modules to the sitearch location, when this is # not installed as a part of mp2 build if (!$ENV{MOD_PERL_2_BUILD}) { $string .= <<'EOI'; # install into the same location as mod_perl 2.0 INSTALLSITELIB = $(INSTALLSITEARCH) DESTINSTALLSITELIB = $(DESTINSTALLSITEARCH) EOI } $string; }