require 5.006; use strict; use warnings; use Getopt::Long qw(GetOptions); use Config; use constant PERL_PATH => $Config{perlpath}; # XXX use constant WIN32 => ($^O =~ /Win32/); sub test_prereq { system (PERL_PATH, "build/version_check.pl", @_) == 0 or warn "Please upgrade $_[0] first.\n"; } test_prereq perl => PERL_PATH; my %opts; undef @opts{qw(with-apache2-apxs with-apache1-apxs with-apache2-src with-perl with-apache2-httpd with-apr-config with-apu-config apxs with-expat with-mm-opts)}; undef @opts{qw(with-apache2)} if (WIN32); my @flags = qw/enable-maintainer-mode enable-perl-glue disable-perl-glue/; push @flags, qw/debug/ if (WIN32); my %args; # grab from @ARGV only the options that we expect GetOptions(\%args, (map "$_=s", keys %opts), @flags); $args{"with-perl"} = PERL_PATH; my $opts = ""; $opts .= "--enable-maintainer-mode " if $args{"enable-maintainer-mode"}; unless (exists $args{"disable-perl-glue"}) { $opts .= "--enable-perl-glue "; test_prereq "mod_perl2"; test_prereq "Apache::Test"; test_prereq "ExtUtils::MakeMaker"; test_prereq "ExtUtils::XSBuilder"; test_prereq "Test::More"; } $opts .= "--debug " if (WIN32 and $args{debug}); delete @args{@flags}; $args{"with-apache2-apxs"} = delete $args{apxs} if exists $args{apxs} and not exists $args{"with-apache2-apxs"}; $args{"with-apache2-apxs"} ||= eval { require Apache2::Build; Apache2::Build->build_config->{MP_APXS}; }; $args{"with-perl-opts"} = "@ARGV" if @ARGV; if (WIN32) { require File::Basename; require File::Spec; unless ($args{'with-apache2'}) { my @candidates = qw(with-apache2-apxs with-apache2-httpd with-apr-config with-apu-config); foreach my $opt(@candidates) { my $c = delete $args{$opt}; next unless $c; (my $dir = File::Basename::dirname($c)) =~ s{(\\|/)bin}{}; if (-d $dir) { $args{'with-apache2'} = $dir; last; } } unless ($args{'with-apache2'}) { my $mp_ap_prefix = eval { Apache2::Build->build_config->{MP_AP_PREFIX}; }; if ($mp_ap_prefix and -d $mp_ap_prefix) { $args{'with-apache2'} = $mp_ap_prefix; } } } unless (defined $args{'with-apache2-apxs'}) { $args{'with-apache2-apxs'} = File::Spec->catfile($args{'with-apache2'}, 'bin', 'apxs.bat'); } my @opts = map{qq/--$_="$args{$_}"/} keys %args; push @opts, (split ' ', $opts); my @args = (PERL_PATH, 'win32/Configure.pl', @opts); print "@args\n"; system(@args) == 0 or die "system @args failed: $?"; } else { $opts .= join " ", map {qq/--$_="$args{$_}"/} keys %args; my $cmd = "./configure $opts"; print "$cmd\n"; exec $cmd; }