You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl-cvs@perl.apache.org by ph...@apache.org on 2007/05/13 01:23:20 UTC

svn commit: r537526 - /perl/Apache-Reload/trunk/Makefile.PL

Author: phred
Date: Sat May 12 16:23:20 2007
New Revision: 537526

URL: http://svn.apache.org/viewvc?view=rev&rev=537526
Log:
Update Makefile.PL to use Apache::Test for testing.  Makefile.PL shamelessly
stolen from Apache::Sizelimit, and adopted to Apache::Reload codebase.

Modified:
    perl/Apache-Reload/trunk/Makefile.PL

Modified: perl/Apache-Reload/trunk/Makefile.PL
URL: http://svn.apache.org/viewvc/perl/Apache-Reload/trunk/Makefile.PL?view=diff&rev=537526&r1=537525&r2=537526
==============================================================================
--- perl/Apache-Reload/trunk/Makefile.PL (original)
+++ perl/Apache-Reload/trunk/Makefile.PL Sat May 12 16:23:20 2007
@@ -1,7 +1,239 @@
-use ExtUtils::MakeMaker;
-# See lib/ExtUtils/MakeMaker.pm for details of how to influence
-# the contents of the Makefile that is written.
-WriteMakefile(
-    'NAME'	=> 'Apache::Reload',
-    'VERSION_FROM' => 'lib/Apache/Reload.pm', # finds $VERSION
-);
+use strict;
+
+use Config;
+
+my %prereqs = ();
+my %mp2 = ( mod_perl2 => 1.99022 );
+my %mp1 = ( mod_perl  => 0 );
+
+my $mp_gen;
+if ($ENV{MOD_PERL_2_BUILD}) {
+    push @ARGV, "-apxs $ENV{MP_APXS}";
+    my $mp_gen = satisfy_mp_generation(2);
+}
+else {
+    $mp_gen = satisfy_mp_generation();
+}
+
+%prereqs = ($mp_gen == 1 ? %mp1 : %mp2);
+
+unless ( $ARGV[0] eq '--dist' || $ENV{MOD_PERL_2_BUILD} ) {
+    if ( $Config{'osname'} eq 'linux' ) {
+        $prereqs{'Linux::Pid'} = 0;
+        if ( -e '/proc/self/smaps' ) {
+            $prereqs{'Linux::Smaps'} = 0;
+        }
+    }
+    elsif ( $Config{'osname'} =~ /(bsd|aix)/i ) {
+        $prereqs{'BSD::Resource'} = 0;
+    }
+    elsif ( $Config{'osname'} eq 'MSWin32' ) {
+        $prereqs{'Win32::API'} = 0;
+    }
+}
+
+my $HAS_APACHE_TEST = check_for_apache_test();
+
+my %common_opts = (
+                   PREREQ_PM       => \%prereqs,
+                   clean           => { FILES => 't/TEST' },
+                  );
+
+if ($mp_gen == 1) {
+    require ExtUtils::MakeMaker;
+    ExtUtils::MakeMaker::WriteMakefile(
+                                       %common_opts,
+                                       VERSION_FROM    => "lib/Apache/Reload.pm",
+                                       NAME            => "Apache::Reload",
+                                       ABSTRACT_FROM   => 'lib/Apache/Reload.pm',
+                                      );
+
+}
+else {
+    require ModPerl::MM;
+    ModPerl::MM::WriteMakefile(
+                               %common_opts,
+                               VERSION_FROM    => "lib/Apache/Reload.pm",
+                               NAME            => "Apache::Reload",
+                               ABSTRACT_FROM   => 'lib/Apache/Reload.pm',
+                              );
+}
+
+if ($ENV{MOD_PERL_2_BUILD}) {
+    pop @ARGV;
+}
+
+sub check_for_apache_test {
+    return unless eval {
+        require Apache::Test;
+        require Apache::TestMM;
+        require Apache::TestRunPerl;
+        1;
+    };
+
+    Apache::TestMM::filter_args();
+
+    my %args = @Apache::TestMM::Argv;
+
+    return 0
+        unless (( Apache::TestConfig->can('custom_config_path')
+                  and -f Apache::TestConfig->custom_config_path())
+                or $args{apxs} or $args{httpd}
+                or $ENV{APACHE_TEST_HTTPD} or $ENV{APACHE_TEST_APXS});
+
+
+    Apache::TestRunPerl->generate_script();
+
+    return 1;
+}
+
+# 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_perl();
+        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 {
+    eval { require mod_perl };
+    eval { require mod_perl2 }  if ($@);
+    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 <<EOF;
+Can\'t decide which mod_perl version should be used, since you have
+supplied contradicting requirements:
+    enviroment variable MOD_PERL=$env
+    Makefile.PL option  MOD_PERL=$flag
+EOF
+    }
+
+    my $wanted = 0;
+    $wanted = 2 if $env == 2 || $flag == 2;
+    $wanted = 1 if $env == 1 || $flag == 1;
+
+    unless ($wanted) {
+        # if still unknown try to require mod_perl.pm
+        eval { require mod_perl };
+        if ($@) {
+            # if we don't have mp1, check for mp2
+            eval { require mod_perl2 } if ($@);
+            unless ($@) {
+                $wanted = 2;
+            }
+        }
+        else {
+            $wanted = 1;
+        }
+    }
+
+    return $wanted;
+}
+
+package MY;
+
+sub postamble {
+    my $self = shift;
+
+    my $string = $self->SUPER::postamble;
+
+    $string .= <<'EOF';
+tag :
+	svn copy https://svn.apache.org/repos/asf/perl/Apache-Reload/trunk https://svn.apache.org/repos/asf/perl/Apache-Reload/tags/$(VERSION_SYM)
+	@echo update lib/Apache/Reload.pm VERSION now
+EOF
+
+    return $string;
+}
+
+sub test {
+    my $self = shift;
+
+    eval { require Test::More } or return <<EOF;
+test::
+\t\@echo sorry, cannot run tests without Test::More
+EOF
+
+    return $self->Apache::TestMM::test(@_) if $HAS_APACHE_TEST;
+
+    return $self->SUPER::test(@_);
+}
+
+sub clean {
+    my $self = shift;
+
+    return $self->Apache::TestMM::clean(@_) if $HAS_APACHE_TEST;
+
+    return $self->SUPER::clean(@_);
+}