blob: 52618ff57ba658083a515a4d58472e8669e5c61d [file] [log] [blame]
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)};
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_perl";
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-perl-opts"} = "@ARGV" if @ARGV;
if (WIN32) {
require File::Basename;
unless ($args{'with-apache2'}) {
my @candidates = qw(with-apache2-apxs with-apache2-httpd
with-apr-config with-apu-config);
foreach my $opt(@candidates) {
next unless $args{$opt};
(my $d = File::Basename::dirname($args{$opt})) =~ s{(\\|/)bin}{};
if (-d $d) {
delete $args{$opt};
$args{'with-apache2'} = $d;
last;
}
}
}
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;
}