stas 2004/01/02 17:17:33
Modified: xs/APR/APR Makefile.PL . Changes Log: On Solaris add a workaround for xs/APR/APR/Makefile.PL to build APR.so, correctly linked against apr and apr-util libs, by addding the missing -R paths corresponding to -L flags. EU::MM was adding them via LD_RUN_PATH instead of using -R, but since perl's lddflags may have -R it overrides LD_RUN_PATH. So explicitly add anything that may go into LD_RUN_PATH via -R. Also make sure that -R coming from Apache will appear first. Submitted by: Brad Lanam <[EMAIL PROTECTED]> Revision Changes Path 1.19 +33 -7 modperl-2.0/xs/APR/APR/Makefile.PL Index: Makefile.PL =================================================================== RCS file: /home/cvs/modperl-2.0/xs/APR/APR/Makefile.PL,v retrieving revision 1.18 retrieving revision 1.19 diff -u -u -r1.18 -r1.19 --- Makefile.PL 5 Nov 2003 08:29:17 -0000 1.18 +++ Makefile.PL 3 Jan 2004 01:17:33 -0000 1.19 @@ -6,10 +6,18 @@ use Apache::Build (); use Config; -use constant WIN32 => Apache::Build::WIN32; +use constant WIN32 => Apache::Build::WIN32; +use constant SOLARIS => $^O eq 'solaris'; + +my %args = ( + 'NAME' => 'APR', + 'VERSION_FROM' => 'APR.pm', +); my $libs = ''; -if (my $apr_bindir = ModPerl::BuildMM::build_config()->apr_bindir()) { +my $build = ModPerl::BuildMM::build_config(); + +if (my $apr_bindir = $build->apr_bindir()) { # XXX: this works only with libapr 0.9.2+ my $ext = WIN32 ? '.bat' : ''; @@ -24,8 +32,26 @@ $libs =~ s{(\w+)\.lib}{-l$1}g; } -ModPerl::BuildMM::WriteMakefile( - 'NAME' => 'APR', - 'VERSION_FROM' => 'APR.pm', - 'LIBS' => [$libs], -); +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; + +ModPerl::BuildMM::WriteMakefile(%args); 1.297 +8 -0 modperl-2.0/Changes Index: Changes =================================================================== RCS file: /home/cvs/modperl-2.0/Changes,v retrieving revision 1.296 retrieving revision 1.297 diff -u -u -r1.296 -r1.297 --- Changes 23 Dec 2003 04:28:00 -0000 1.296 +++ Changes 3 Jan 2004 01:17:33 -0000 1.297 @@ -12,6 +12,14 @@ =item 1.99_13-dev +On Solaris add a workaround for xs/APR/APR/Makefile.PL to build +APR.so, correctly linked against apr and apr-util libs, by addding the +missing -R paths corresponding to -L flags. EU::MM was adding them via +LD_RUN_PATH instead of using -R, but since perl's lddflags may have -R +it overrides LD_RUN_PATH. So explicitly add anything that may go into +LD_RUN_PATH via -R. Also make sure that -R coming from Apache will +appear first. [Brad Lanam <[EMAIL PROTECTED]>] + 'make dist' now generates and picks Apache-Test/META.yml which was always reported missing, as it was included in Apache-Test/MANIFEST [Stas]