blob: b37efec63a5b67bc9ad1d9f0ab09daaa3bee125d [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 = (
'NAME' => 'APR',
'VERSION_FROM' => 'APR.pm',
);
my $libs = '';
my $build = ModPerl::BuildMM::build_config();
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{(\w+)\.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 apru flags
$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} = $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";
} keys %src;
return $string;
}