Author: stas
Date: Thu Apr 28 07:05:46 2005
New Revision: 165141

URL: http://svn.apache.org/viewcvs?rev=165141&view=rev
Log:
improving DSO support on cygwin. The problem with cygwin is that it
behaves like windows (it's a posix layer over windows after
all). That's why we need to supply all symbols during linking time
just like on win32, by adding -lapr-0 -laprutil-0 and -lhttpd. On
windows, Apache supplies all the three libraries and it's easy to
link, but on cygwin apache doesn't play nice and doesn't supply
libhttpd. 
Submitted by: Nick *** <[EMAIL PROTECTED]>

Modified:
    perl/modperl/trunk/Changes
    perl/modperl/trunk/lib/Apache2/Build.pm

Modified: perl/modperl/trunk/Changes
URL: 
http://svn.apache.org/viewcvs/perl/modperl/trunk/Changes?rev=165141&r1=165140&r2=165141&view=diff
==============================================================================
--- perl/modperl/trunk/Changes (original)
+++ perl/modperl/trunk/Changes Thu Apr 28 07:05:46 2005
@@ -12,6 +12,15 @@
 
 =item 1.999_23-dev
 
+improving DSO support on cygwin. The problem with cygwin is that it
+behaves like windows (it's a posix layer over windows after
+all). That's why we need to supply all symbols during linking time
+just like on win32, by adding -lapr-0 -laprutil-0 and -lhttpd. On
+windows, Apache supplies all the three libraries and it's easy to
+link, but on cygwin apache doesn't play nice and doesn't supply
+libhttpd. This change adds libapr and libaprutil. [Nick ***
+<[EMAIL PROTECTED]>]
+
 improve the diagnostics when detecting mp2 < 1.999022, tell the user
 which files and/or dirs need to be removed [Stas]
 

Modified: perl/modperl/trunk/lib/Apache2/Build.pm
URL: 
http://svn.apache.org/viewcvs/perl/modperl/trunk/lib/Apache2/Build.pm?rev=165141&r1=165140&r2=165141&view=diff
==============================================================================
--- perl/modperl/trunk/lib/Apache2/Build.pm (original)
+++ perl/modperl/trunk/lib/Apache2/Build.pm Thu Apr 28 07:05:46 2005
@@ -40,7 +40,7 @@
 use constant REQUIRE_ITHREADS => grep { $^O eq $_ } qw(MSWin32);
 use constant PERL_HAS_ITHREADS =>
     $Config{useithreads} && ($Config{useithreads} eq 'define');
-use constant BUILD_APREXT => WIN32();
+use constant BUILD_APREXT => WIN32() || CYGWIN();
 
 use ModPerl::Code ();
 use ModPerl::BuildOptions ();
@@ -464,6 +464,10 @@
         $ldopts .= $self->gtop_ldopts;
     }
 
+    if (CYGWIN && $self->is_dynamic) {
+        $ldopts .= join ' ', '', $self->apru_link_flags;
+    }
+
     $config->{ldflags} = $ldflags; #reset
 
     # on Irix mod_perl.so needs to see the libperl.so symbols, which
@@ -1050,7 +1054,9 @@
 
     return @apru_link_flags if @apru_link_flags;
 
-    for ($self->apr_config_path, $self->apu_config_path) {
+    # first use apu_config_path and then apr_config_path in order to
+    # resolve the symbols right during linking
+    for ($self->apu_config_path, $self->apr_config_path) {
         if (my $link = $_ && -x $_ && qx{$_ --link-ld --libs}) {
             chomp $link;
             if ($self->httpd_is_source_tree) {
@@ -1538,6 +1544,11 @@
     "$self->{cwd}/src/modules/perl/$self->{MP_LIBNAME}.lib";
 }
 
+sub modperl_libs_cygwin {
+     my $self = shift;
+     "-L$self->{cwd}/src/modules/perl -l$self->{MP_LIBNAME}";
+}
+
 sub modperl_libs {
     my $self = shift;
     my $libs = \&{"modperl_libs_$^O"};
@@ -1566,6 +1577,20 @@
     return qq{ -L$dir -l$lib };
 }
 
+sub mp_apr_lib_cygwin {
+    my $self = shift;
+    my ($dir, $lib) = $self->mp_apr_blib();
+    $lib =~ s[^lib(\w+)$Config{lib_ext}$][$1];
+    my $libs = "-L$dir -l$lib";
+
+    # This is ugly, but is the only way to prevent the "undefined
+    # symbols" error
+    $libs .= join ' ', '', $self->apru_link_flags,
+        '-L' . catdir($self->perl_config('archlibexp'), 'CORE'), '-lperl';
+
+    $libs;
+}
+
 # linking used for the aprext lib used to build APR/APR::*
 sub mp_apr_lib {
     my $self = shift;
@@ -1798,6 +1823,17 @@
     my $self = shift;
     my $flags = $self->otherldflags_default;
     $flags .= ' -pdb:$(INST_ARCHAUTODIR)\$(BASEEXT).pdb' if $self->{MP_DEBUG};
+    $flags;
+}
+
+sub otherldflags_cygwin {
+    my $self = shift;
+    my $flags = $self->otherldflags_default;
+
+    unless ($self->{MP_STATIC_EXTS}) {
+        $flags .= join ' ', $self->apru_link_flags;
+    }
+
     $flags;
 }
 


Reply via email to