فهرست منبع

macos: use @rpath as dynamic linker (#981)

DYLD_LIBRARY_PATH is "ignored when executing binaries protected by System Integrity Protection" (man dyld),
in some cases leading to "image not found" trying to load dynamic libraries.
nilason 4 سال پیش
والد
کامیت
b5eefc2b13
3فایلهای تغییر یافته به همراه17 افزوده شده و 13 حذف شده
  1. 7 6
      aclocal.m4
  2. 7 6
      configure
  3. 3 1
      lib/python/ctypes/loader.py

+ 7 - 6
aclocal.m4

@@ -507,12 +507,13 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [
             LDFLAGS="-Wl,--export-dynamic,--enable-runtime-pseudo-reloc"
             LD_LIBRARY_PATH_VAR="PATH"
             ;;
-	*-apple-darwin*)
-	    SHLIB_CFLAGS="-fno-common"
-	    SHLIB_SUFFIX=".dylib"
-	    SHLIB_LD="${CC} -dynamiclib -compatibility_version \${GRASS_VERSION_MAJOR}.\${GRASS_VERSION_MINOR} -current_version \${GRASS_VERSION_MAJOR}.\${GRASS_VERSION_MINOR} -install_name \${INST_DIR}/lib/lib\${LIB_NAME}\${SHLIB_SUFFIX}"
-	    LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH"
-	    ;;
+        *-apple-darwin*)
+            SHLIB_CFLAGS="-fno-common"
+            SHLIB_SUFFIX=".dylib"
+            SHLIB_LD="${CC} -dynamiclib -compatibility_version \${GRASS_VERSION_MAJOR}.\${GRASS_VERSION_MINOR} -current_version \${GRASS_VERSION_MAJOR}.\${GRASS_VERSION_MINOR} -install_name @rpath/lib\${LIB_NAME}\${SHLIB_SUFFIX}"
+            LDFLAGS="-Wl,-rpath,${INSTDIR}/lib,-rpath,\${GISBASE}/lib"
+            LD_LIBRARY_PATH_VAR="LD_RUN_PATH"
+            ;;
 	*-sun-solaris*)
 	    # Note: If _REENTRANT isn't defined, then Solaris
 	    # won't define thread-safe library routines.

+ 7 - 6
configure

@@ -1551,12 +1551,13 @@ ac_save_ldflags="$LDFLAGS"
             LDFLAGS="-Wl,--export-dynamic,--enable-runtime-pseudo-reloc"
             LD_LIBRARY_PATH_VAR="PATH"
             ;;
-	*-apple-darwin*)
-	    SHLIB_CFLAGS="-fno-common"
-	    SHLIB_SUFFIX=".dylib"
-	    SHLIB_LD="${CC} -dynamiclib -compatibility_version \${GRASS_VERSION_MAJOR}.\${GRASS_VERSION_MINOR} -current_version \${GRASS_VERSION_MAJOR}.\${GRASS_VERSION_MINOR} -install_name \${INST_DIR}/lib/lib\${LIB_NAME}\${SHLIB_SUFFIX}"
-	    LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH"
-	    ;;
+        *-apple-darwin*)
+            SHLIB_CFLAGS="-fno-common"
+            SHLIB_SUFFIX=".dylib"
+            SHLIB_LD="${CC} -dynamiclib -compatibility_version \${GRASS_VERSION_MAJOR}.\${GRASS_VERSION_MINOR} -current_version \${GRASS_VERSION_MAJOR}.\${GRASS_VERSION_MINOR} -install_name @rpath/lib\${LIB_NAME}\${SHLIB_SUFFIX}"
+            LDFLAGS="-Wl,-rpath,${INSTDIR}/lib,-rpath,\${GISBASE}/lib"
+            LD_LIBRARY_PATH_VAR="LD_RUN_PATH"
+            ;;
 	*-sun-solaris*)
 	    # Note: If _REENTRANT isn't defined, then Solaris
 	    # won't define thread-safe library routines.

+ 3 - 1
lib/python/ctypes/loader.py

@@ -124,7 +124,9 @@ class DarwinLibraryLoader(LibraryLoader):
         dyld_fallback_library_path = _environ_path("DYLD_FALLBACK_LIBRARY_PATH")
         if not dyld_fallback_library_path:
             dyld_fallback_library_path = [os.path.expanduser('~/lib'),
-                                          '/usr/local/lib', '/usr/lib']
+                                          '/usr/local/lib', '/usr/lib',
+                                          os.path.join(sys.prefix, 'lib')]
+        dyld_fallback_library_path.extend(_environ_path('LD_RUN_PATH'))
 
         dirs = []