perl-modperl-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From pgollu...@apache.org
Subject svn commit: r436716 - /perl/Apache-SizeLimit/trunk/Makefile.PL
Date Fri, 25 Aug 2006 08:38:03 GMT
Author: pgollucci
Date: Fri Aug 25 01:38:00 2006
New Revision: 436716

URL: http://svn.apache.org/viewvc?rev=436716&view=rev
Log:
Hybridize 

This code was shamelessly stolen from Apache::VMonitor and Apache::Peek



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

Modified: perl/Apache-SizeLimit/trunk/Makefile.PL
URL: http://svn.apache.org/viewvc/perl/Apache-SizeLimit/trunk/Makefile.PL?rev=436716&r1=436715&r2=436716&view=diff
==============================================================================
--- perl/Apache-SizeLimit/trunk/Makefile.PL (original)
+++ perl/Apache-SizeLimit/trunk/Makefile.PL Fri Aug 25 01:38:00 2006
@@ -1,9 +1,14 @@
 use strict;
 
 use Config;
-use ExtUtils::MakeMaker;
 
-my %prereqs = ( mod_perl => 0 );
+my %prereqs = ();
+my %mp2 = ( mod_perl2 => 1.99022 );
+my %mp1 = ( mod_perl  => 0 );
+
+
+my $mp_gen = satisfy_mp_generation();
+%prereqs = ($mp_gen == 1 ? %mp1 : %mp2);
 
 unless ( $ARGV[0] eq '--dist' ) {
     if ( $Config{'osname'} eq 'linux' ) {
@@ -22,12 +27,28 @@
 
 my $HAS_APACHE_TEST = check_for_apache_test();
 
-WriteMakefile( VERSION_FROM    => "lib/Apache/SizeLimit.pm",
-               NAME            => "Apache::SizeLimit",
-               PREREQ_PM       => \%prereqs,
-               ABSTRACT_FROM   => 'lib/Apache/SizeLimit.pm',
-               clean           => { FILES => 't/TEST' },
-             );
+my %common_opts = (
+                   VERSION_FROM    => "lib/Apache/SizeLimit.pm",
+                   NAME            => "Apache::SizeLimit",
+                   PREREQ_PM       => \%prereqs,
+                   ABSTRACT_FROM   => 'lib/Apache/SizeLimit.pm',
+                   clean           => { FILES => 't/TEST' },
+                  );
+
+if ($mp_gen == 1) {
+    require ExtUtils::MakeMaker;
+    ExtUtils::MakeMaker::WriteMakefile(
+                                       %common_opts,
+                                      );
+
+}
+else {
+    require ModPerl::MM;
+    ModPerl::MM::WriteMakefile(
+                               %common_opts,
+                              );
+}
+
 
 sub check_for_apache_test {
     return unless eval {
@@ -51,6 +72,126 @@
     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;
+    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 <<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 mp2, check for mp2
+            eval { require mod_perl2 } if ($@);
+            unless ($@) {
+                $wanted = 2;
+            }
+        }
+        else {
+            $wanted = 1;
+        }
+    }
+
+    return $wanted;
 }
 
 package MY;



Mime
View raw message