All pastes #1237580 Raw Edit

MacOS lib loading

public text v1 · immutable
#1237580 ·published 2008-10-27 06:33 UTC
rendered paste body
From 0642571ecbc9fe7c2dc3f7be1e0906eae8ecfd60 Mon Sep 17 00:00:00 2001
From: JoLan <spam00fr@yahoo.fr>
Date: Thu, 23 Oct 2008 08:27:56 +0200
Subject: [PATCH] fixed script library loading for low_endian and MacOS

---
 src/framework/Platform/Define.h |    8 ++++++--
 src/game/ScriptCalls.cpp        |    9 +++++++--
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/framework/Platform/Define.h b/src/framework/Platform/Define.h
index 3f8cc15..d1d15fe 100644
--- a/src/framework/Platform/Define.h
+++ b/src/framework/Platform/Define.h
@@ -52,12 +52,16 @@
 #  define MANGOS_LOAD_LIBRARY(a) dlopen(a,RTLD_NOW)
 #  define MANGOS_CLOSE_LIBRARY dlclose
 #  define MANGOS_GET_PROC_ADDR dlsym
-#  if defined(__APPLE_CC__) && defined(BIG_ENDIAN)
+#  ifndef BIG_ENDIAN
 #    define MANGOS_IMPORT __attribute__ ((longcall))
 #  else
 #    define MANGOS_IMPORT __attribute__ ((cdecl))
 #  endif //__APPLE_CC__ && BIG_ENDIAN
-#  define MANGOS_SCRIPT_EXT ".so"
+#  ifdef __APPLE_CC__
+#    define MANGOS_SCRIPT_EXT ".dylib"
+#  else
+#    define MANGOS_SCRIPT_EXT ".so"
+#  endif //__APPLE_CC
 #  define MANGOS_SCRIPT_NAME "libmangosscript"
 #endif //PLATFORM
 
diff --git a/src/game/ScriptCalls.cpp b/src/game/ScriptCalls.cpp
index 00435fa..90892cc 100644
--- a/src/game/ScriptCalls.cpp
+++ b/src/game/ScriptCalls.cpp
@@ -45,8 +45,13 @@ bool LoadScriptingModule(char const* libName)
     std::string name = strlen(libName) ? libName : MANGOS_SCRIPT_NAME;
     name += MANGOS_SCRIPT_EXT;
 
-    testScript->hScriptsLib=MANGOS_LOAD_LIBRARY(name.c_str());
-
+    #if defined(__APPLE_CC__) 
+       name = "@executable_path/../lib/"+name;
+       testScript->hScriptsLib=dlopen(name.c_str(), RTLD_GLOBAL | RTLD_NOW);
+    #else
+       testScript->hScriptsLib=MANGOS_LOAD_LIBRARY(name.c_str());
+    #endif
+    
     if(!testScript->hScriptsLib )
     {
         printf("Error loading Scripts Library %s !\n",name.c_str());
-- 
1.6.0.2

From d69740da580bc7f7b0e863e8d98b12b6f8d45842 Mon Sep 17 00:00:00 2001
From: JoLan <spam00fr@yahoo.fr>
Date: Fri, 24 Oct 2008 09:34:40 +0200
Subject: [PATCH] MacOS : Load system-wide script library if not found in ../lib

---
 src/game/ScriptCalls.cpp |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/game/ScriptCalls.cpp b/src/game/ScriptCalls.cpp
index 90892cc..742b4cd 100644
--- a/src/game/ScriptCalls.cpp
+++ b/src/game/ScriptCalls.cpp
@@ -45,13 +45,15 @@ bool LoadScriptingModule(char const* libName)
     std::string name = strlen(libName) ? libName : MANGOS_SCRIPT_NAME;
     name += MANGOS_SCRIPT_EXT;
 
-    #if defined(__APPLE_CC__) 
-       name = "@executable_path/../lib/"+name;
-       testScript->hScriptsLib=dlopen(name.c_str(), RTLD_GLOBAL | RTLD_NOW);
+    #if defined(__APPLE_CC__)
+       std::string relative_name = "@executable_path/../lib/"+name; // dlopen dosent search mangos's lib
+       testScript->hScriptsLib=dlopen(relative_name.c_str(), RTLD_GLOBAL | RTLD_NOW);
+       if(!testScript->hScriptsLib )
+           testScript->hScriptsLib=dlopen(name.c_str(), RTLD_GLOBAL | RTLD_NOW);
     #else
        testScript->hScriptsLib=MANGOS_LOAD_LIBRARY(name.c_str());
     #endif
-    
+
     if(!testScript->hScriptsLib )
     {
         printf("Error loading Scripts Library %s !\n",name.c_str());
-- 
1.6.0.2