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;