From 4c1ae1b5af850e98559d0cc74295e3bb043d8c8e Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Thu, 16 Feb 2006 10:35:18 -0500 Subject: ENH: fix for bug 2808, use dlopen on new OSX versions --- Source/cmDynamicLoader.cxx | 20 +++++++++----------- Source/cmDynamicLoader.h | 11 ++++++++--- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/Source/cmDynamicLoader.cxx b/Source/cmDynamicLoader.cxx index 4905531..8c80188 100644 --- a/Source/cmDynamicLoader.cxx +++ b/Source/cmDynamicLoader.cxx @@ -18,9 +18,9 @@ // This file is actually several different implementations. // 1. HP machines which uses shl_load -// 2. Apple OSX which uses NSLinkModule +// 2. Mac OS X 10.2.x and earlier which uses NSLinkModule // 3. Windows which uses LoadLibrary -// 4. Most unix systems which use dlopen (default ) +// 4. Most unix systems (including Mac OS X 10.3 and later) which use dlopen (default) // Each part of the ifdef contains a complete implementation for // the static methods of cmDynamicLoader. @@ -147,10 +147,10 @@ const char* cmDynamicLoader::LastError() // --------------------------------------------------------------- -// 2. Implementation for Darwin (including OSX) Machines - +// 2. Implementation for Mac OS X 10.2.x and earlier #ifdef __APPLE__ -#define CMDYNAMICLOADER_DEFINED +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1030 +#define CMDYNAMICLOADER_DEFINED 1 #include cmLibHandle cmDynamicLoader::OpenLibrary(const char* libname ) @@ -169,7 +169,7 @@ cmLibHandle cmDynamicLoader::OpenLibrary(const char* libname ) { return 0; } - lh = NSLinkModule(image, libname, TRUE); + lh = NSLinkModule(image, libname, NSLINKMODULE_OPTION_BINDNOW); if(lh) { cmDynamicLoaderCache::GetInstance()->CacheFile(libname, lh); @@ -179,10 +179,7 @@ cmLibHandle cmDynamicLoader::OpenLibrary(const char* libname ) int cmDynamicLoader::CloseLibrary(cmLibHandle lib) { - // we have to use lib because the macro may not... - (void)lib; - - NSUnLinkModule((NSModule)lib, FALSE); + NSUnLinkModule((NSModule)lib, NSUNLINKMODULE_OPTION_NONE); return 1; } @@ -208,6 +205,7 @@ const char* cmDynamicLoader::LastError() } #endif +#endif @@ -290,7 +288,7 @@ const char* cmDynamicLoader::LastError() // 4. Implementation for default UNIX machines. // if nothing has been defined then use this #ifndef CMDYNAMICLOADER_DEFINED -#define CMDYNAMICLOADER_DEFINED +#define CMDYNAMICLOADER_DEFINED 1 // Setup for most unix machines #include diff --git a/Source/cmDynamicLoader.h b/Source/cmDynamicLoader.h index 89e0c6f..3c7d3b4 100644 --- a/Source/cmDynamicLoader.h +++ b/Source/cmDynamicLoader.h @@ -28,14 +28,19 @@ // Ugly stuff for library handles // They are different on several different OS's #if defined(__hpux) -# include + #include typedef shl_t cmLibHandle; #elif defined(_WIN32) #include typedef HMODULE cmLibHandle; #elif defined(__APPLE__) - #include - typedef NSModule cmLibHandle; + #include + #if MAC_OS_X_VERSION_MIN_REQUIRED < 1030 + #include + typedef NSModule cmLibHandle; + #else + typedef void* cmLibHandle; + #endif #else typedef void* cmLibHandle; #endif -- cgit v0.12