Apply NetBSD patch-ag: shared/static linking,
Jarkko Hietaniemi [Sun, 9 Dec 2001 21:49:06 +0000 (21:49 +0000)]
but make the change less intrusive on non-NetBSD.

p4raw-id: //depot/perl@13568

lib/ExtUtils/MM_Unix.pm

index 7951fc1..f04be9c 100644 (file)
@@ -1088,6 +1088,12 @@ $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists
     my $ldrun = qq{-rpath "$self->{LD_RUN_PATH}"}
        if ($^O eq 'irix' && $self->{LD_RUN_PATH});
 
+    my $libs = $self->{LDLOADLIBS};
+
+    if ($^O eq 'netbsd') {
+       $libs = '$(LLIBPERL)';
+    }
+
     # For example in AIX the shared objects/libraries from previous builds
     # linger quite a while in the shared dynalinker cache even when nobody
     # is using them.  This is painful if one for instance tries to restart
@@ -1096,8 +1102,9 @@ $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists
     push(@m,'  $(RM_F) $@
 ');
 
-    push(@m,'  LD_RUN_PATH="$(LD_RUN_PATH)" $(LD) '.$ldrun.' $(LDDLFLAGS) '.$ldfrom.
-               ' $(OTHERLDFLAGS) -o $@ $(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) $(PERL_ARCHIVE_AFTER) $(EXPORT_LIST)');
+    push(@m,
+'      LD_RUN_PATH="$(LD_RUN_PATH)" $(LD) '.$ldrun.' $(LDDLFLAGS) '.$ldfrom.
+' $(OTHERLDFLAGS) -o $@ $(MYEXTLIB) $(PERL_ARCHIVE) '.$libs.' $(PERL_ARCHIVE_AFTER) $(EXPORT_LIST)');
     push @m, '
        $(CHMOD) $(PERM_RWX) $@
 ';
@@ -3207,6 +3214,22 @@ Defines the realclean target.
 sub realclean {
     my($self, %attribs) = @_;
     my(@m);
+
+    # Set LLIBPERL to nothing on static perl platforms, and to the flags
+    # needed to link against the shared libperl library on shared perl
+    # platforms.  We peek at lddlflags to see if we need -Wl,-R or -R
+    # to add paths to the run-time library search path.
+    #
+    my($llibperl) = '';
+    if ($Config{'useshrplib'}) {
+       if ($Config{'lddlflags'} =~ /-Wl,-R/) {
+           $llibperl = '-L$(PERL_INC) -Wl,-R$(INSTALLARCHLIB)/CORE -lperl';
+       } elsif ($Config{'lddlflags'} =~ /-R/) {
+           $llibperl = '-L$(PERL_INC) -R$(INSTALLARCHLIB)/CORE -lperl';
+       }
+    }
+    push(@m,'LLIBPERL = '.$llibperl."\n");
+
     push(@m,'
 # Delete temporary files (via clean) and also delete installed files
 realclean purge ::  clean