BSD run-time linkers apparently demand RPATH on .so objects [from HEAD].
authorAndy Polyakov <appro@openssl.org>
Sun, 16 Sep 2007 18:44:35 +0000 (18:44 +0000)
committerAndy Polyakov <appro@openssl.org>
Sun, 16 Sep 2007 18:44:35 +0000 (18:44 +0000)
PR: 1381

Configure

index ef8cb4befa8b5225a3aab03d5673f74b86296adb..07d5ea8e4c412cab1a7480525be9fa9dd4099e98 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -1221,8 +1221,11 @@ if (!$IsMK1MF)
        }
 
 $cpuid_obj.=" uplink.o uplink-cof.o" if ($cflags =~ /\-DOPENSSL_USE_APPLINK/);
-# Compiler fix-ups
-if ($target =~ /icc$/)
+
+#
+# Platform fix-ups
+#
+if ($target =~ /\-icc$/)       # Intel C compiler
        {
        my($iccver)=`$cc -V 2>&1`;
        if ($iccver =~ /Version ([0-9]+)\./)    { $iccver=$1; }
@@ -1236,6 +1239,19 @@ if ($target =~ /icc$/)
                }
        }
 
+# Unlike other OSes (like Solaris, Linux, Tru64, IRIX) BSD run-time
+# linkers (tested OpenBSD, NetBSD and FreeBSD) "demand" RPATH set on
+# .so objects. Apparently application RPATH is not global and does
+# not apply to .so linked with other .so. Problem manifests itself
+# when libssl.so fails to load libcrypto.so. One can argue that we
+# should engrave this into Makefile.shared rules or into BSD-* config
+# lines above. Meanwhile let's try to be cautious and pass -rpath to
+# linker only when --prefix is not /usr.
+if ($target =~ /^BSD\-/)
+       {
+       $shared_ldflag.=" -Wl,-rpath,\$(LIBRPATH)" if ($prefix !~ m|^/usr[/]*$|);
+       }
+
 if ($sys_id ne "")
        {
        #$cflags="-DOPENSSL_SYSNAME_$sys_id $cflags";