blob: edbd108e7c9de9e49eafdbf24092821b46dbf5e4 [file] [log] [blame]
use strict;
use warnings;
use lib qw(../lib);
use ModPerl::BuildMM ();
require ModPerl::Code;
use Apache2::Build ();
use Config;
use File::Spec::Functions;
use constant WIN32 => Apache2::Build::WIN32;
use constant CYGWIN => Apache2::Build::CYGWIN;
use constant SOLARIS => $^O eq 'solaris';
use constant BUILD_APREXT => Apache2::Build::BUILD_APREXT;
my %args;
%args = map { split /=/, $_, 2 } @ARGV;
$args{NAME} = 'APR';
$args{VERSION_FROM} = 'APR.pm';
my $libs = '';
$libs = delete $args{LIBS} if $args{LIBS};
my $build = ModPerl::BuildMM::build_config();
my $ccopts = $build->ccopts;
# avoid referencing &perl_module outside of mod_perl
$ccopts .= ' -DMP_IN_XS';
$args{CCFLAGS} = $ccopts;
my @apru_link_flags = $build->apru_link_flags;
$libs .= join ' ', @apru_link_flags if @apru_link_flags;
if (WIN32) {
$libs =~ s{/libpath:}{-L}g;
$libs =~ s{(\S+)\.lib}{-l$1}g;
}
if (BUILD_APREXT) {
my $mp_apr_lib = $build->mp_apr_lib;
if (CYGWIN) {
# For Cygwin compatibility, set $mp_apr_lib before the apache libs
$libs = qq{ $mp_apr_lib } . $libs;
} else {
$libs .= qq{ $mp_apr_lib };
}
}
if (SOLARIS && $libs) {
# EU::MM sets LD_RUN_PATH (for linking) based on -L options in LIBS.
# LD_RUN_PATH is getting overridden by the specified -R path.
# The -R specified is from the perl config's lddflags.
# Therefore -R has to be added with the appropriate paths rather
# than using LD_RUN_PATH, because it gets overridden.
# make sure that all -L, -R from libs are moved
# to the beginning of lddflags.
my $extralddflags = join " ", $libs =~ /(-[LR]\S+)/g;
# -R makes sure that these paths will be used
$extralddflags =~ s{-L(\S+)}{-L$1 -R$1}g;
$args{LDDLFLAGS} = "" unless exists $args{LDDLFLAGS};
$args{LDDLFLAGS} = join " ", $args{LDDLFLAGS}, $extralddflags,
$build->perl_config('lddlflags');
# -R are now copied to LDDFLAGS, but leave -L's in LIBS --
# EU::MM needs it.
$libs =~ s{-R\S+}{}g;
}
$args{LIBS} = [$libs] if $libs;
my $srcdir = '../../../src/modules/perl';
# link the following into APR.so so other APR:: modules can be used
# outside of httpd
my @names = ModPerl::Code::src_apr_ext();
my(@obj, @clean, %src);
for (@names) {
push @obj, join '.', $_, 'o';
my $cfile = join '.', $_, 'c';
push @clean, $cfile;
$src{$cfile} = "$srcdir/$cfile";
}
$args{OBJECT} = BUILD_APREXT() ? "APR.o" : "APR.o @obj";
$args{clean} = { FILES => "@clean" };
ModPerl::BuildMM::WriteMakefile(%args);
# avoid redefined warnings from imported postamble symbol from
# elsewhere in other Makefile.PL files
no warnings 'redefine';
sub MY::postamble {
my $self = shift;
my $string = $self->ModPerl::BuildMM::MY::postamble;
$string .= join '', map {
"$_: $src{$_}\n\t\$(CP) $src{$_} .\n";
} sort keys %src;
return $string;
}