[asterisk-scf-commits] asterisk-scf/integration/ice.git branch "fix-apple-so" created.

Commits to the Asterisk SCF project code repositories asterisk-scf-commits at lists.digium.com
Tue Mar 15 14:00:34 CDT 2011


branch "fix-apple-so" has been created
        at  a3b413eee36959af8895d2b434911c28e761fc81 (commit)

- Log -----------------------------------------------------------------
commit a3b413eee36959af8895d2b434911c28e761fc81
Author: David M. Lee <dlee at digium.com>
Date:   Thu Jan 13 21:29:06 2011 -0600

    Fixed Apple module loading to prefer .so to .dylib.
    
    For Mac OSX, there's a distinction between shared libraries (.dylib)
    and loadable modules (.so).  While things work loading shared libraries
    instead of modules, it causes complications for folks using CMake to
    build their modules.
    * If they build as a module, then it has the .so extension and IceBox
      won't load it.
    * If they build as a library, now IceBbox will load it, but a Windows
      build will build it as a library, and generate a .LIB file that you
      really don't want.

diff --git a/cpp/src/Ice/DynamicLibrary.cpp b/cpp/src/Ice/DynamicLibrary.cpp
index c9be971..cbe3913 100644
--- a/cpp/src/Ice/DynamicLibrary.cpp
+++ b/cpp/src/Ice/DynamicLibrary.cpp
@@ -117,7 +117,7 @@ IceInternal::DynamicLibrary::loadEntryPoint(const string& entryPoint, bool useIc
     {
         lib += "." + version;
     }
-    lib += ".dylib";
+    lib += ".so"; // .so for loadable module on Mach-O
 #elif defined(__hpux)
     lib = "lib" + libName;
     if(!version.empty())
@@ -145,7 +145,27 @@ IceInternal::DynamicLibrary::loadEntryPoint(const string& entryPoint, bool useIc
 
     if(!load(lib))
     {
+#ifdef __APPLE__
+        string olderr = _err;
+        // Previous versions of Ice mistakenly loaded .dylib.  If it can't
+        // load a .so, fallback to loading a .dylib.  For more info on
+        // shared libraries (.dylib) vs. loadable modules (.so), see
+        // http://www.finkproject.org/doc/porting/shared.php
+        lib = "lib" + libName;
+        if(!version.empty())
+        {
+            lib += "." + version;
+        }
+        lib += ".dylib";
+        if(!load(lib))
+        {
+            // restore old error message
+            _err = olderr;
+            return 0;
+        }
+#else
         return 0;
+#endif
     }
 
     return getSymbol(funcName);

-----------------------------------------------------------------------


-- 
asterisk-scf/integration/ice.git



More information about the asterisk-scf-commits mailing list