From 31f125ed00f3391ba78371c7aa0b4919427050d8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Tue, 11 Jun 2013 16:46:49 +0000 Subject: [PATCH] Use correct extensions in wxDynamicLibrary::CanonicalizeName() on OS X. Contrary to the documentation, this function incorrectly appended the .bundle extension on OS X for libraries as well as modules. Fixed to use .dylib for libraries (wxDL_LIBRARY) and continue to use .bundle for loadable modules (wxDL_MODULE). Change GetDllExt() to take optional wxDynamicLibearyCategory argument. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74161 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/dynlib.h | 5 +---- src/common/dynlib.cpp | 51 +++++++++++++++++++++++++++++++------------------- src/common/dynload.cpp | 4 ++-- src/msw/dlmsw.cpp | 2 -- src/unix/dlunix.cpp | 9 --------- 5 files changed, 35 insertions(+), 36 deletions(-) diff --git a/include/wx/dynlib.h b/include/wx/dynlib.h index 359444c..142516f 100644 --- a/include/wx/dynlib.h +++ b/include/wx/dynlib.h @@ -232,7 +232,7 @@ public: static wxDllType GetProgramHandle(); // return the platform standard DLL extension (with leading dot) - static const wxString& GetDllExt() { return ms_dllext; } + static wxString GetDllExt(wxDynamicLibraryCategory cat = wxDL_LIBRARY); wxDynamicLibrary() : m_handle(0) { } wxDynamicLibrary(const wxString& libname, int flags = wxDL_DEFAULT) @@ -372,9 +372,6 @@ protected: #endif // wxHAVE_DYNLIB_ERROR - // platform specific shared lib suffix. - static const wxString ms_dllext; - // the handle to DLL or NULL wxDllType m_handle; diff --git a/src/common/dynlib.cpp b/src/common/dynlib.cpp index 0ebec2b..0d76254 100644 --- a/src/common/dynlib.cpp +++ b/src/common/dynlib.cpp @@ -54,10 +54,6 @@ WX_DEFINE_USER_EXPORTED_OBJARRAY(wxDynamicLibraryDetailsArray) // wxDynamicLibrary // --------------------------------------------------------------------------- -#if defined(__WXPM__) || defined(__EMX__) - const wxString wxDynamicLibrary::ms_dllext(wxT(".dll")); -#endif - // for MSW/Unix it is defined in platform-specific file #if !(defined(__WINDOWS__) || defined(__UNIX__)) || defined(__EMX__) @@ -83,7 +79,7 @@ bool wxDynamicLibrary::Load(const wxString& libnameOrig, int flags) wxFileName::SplitPath(libname, NULL, NULL, &ext); if ( ext.empty() ) { - libname += GetDllExt(); + libname += GetDllExt(wxDL_MODULE); } } @@ -167,6 +163,29 @@ void *wxDynamicLibrary::GetSymbol(const wxString& name, bool *success) const // ---------------------------------------------------------------------------- /*static*/ +wxString wxDynamicLibrary::GetDllExt(wxDynamicLibraryCategory cat) +{ + wxUnusedVar(cat); +#if defined(__WINDOWS__) || defined(__WXPM__) || defined(__EMX__) + return ".dll"; +#elif defined(__HPUX__) + return ".sl"; +#elif defined(__DARWIN__) + switch ( cat ) + { + case wxDL_LIBRARY: + return ".dylib"; + case wxDL_MODULE: + return ".bundle"; + } + wxFAIL_MSG("unreachable"); + return wxString(); // silence gcc warning +#else + return ".so"; +#endif +} + +/*static*/ wxString wxDynamicLibrary::CanonicalizeName(const wxString& name, wxDynamicLibraryCategory cat) @@ -177,24 +196,18 @@ wxDynamicLibrary::CanonicalizeName(const wxString& name, #if defined(__UNIX__) && !defined(__EMX__) switch ( cat ) { - default: - wxFAIL_MSG( wxT("unknown wxDynamicLibraryCategory value") ); - // fall through - - case wxDL_MODULE: - // don't do anything for modules, their names are arbitrary - break; - case wxDL_LIBRARY: - // library names should start with "lib" under Unix - nameCanonic = wxT("lib"); + // Library names should start with "lib" under Unix. + nameCanonic = "lib"; + break; + case wxDL_MODULE: + // Module names are arbitrary and should have no prefix added. break; } -#else // !__UNIX__ - wxUnusedVar(cat); -#endif // __UNIX__/!__UNIX__ +#endif + + nameCanonic << name << GetDllExt(cat); - nameCanonic << name << GetDllExt(); return nameCanonic; } diff --git a/src/common/dynload.cpp b/src/common/dynload.cpp index c2f1585..7d26dc3 100644 --- a/src/common/dynload.cpp +++ b/src/common/dynload.cpp @@ -284,7 +284,7 @@ wxPluginManager::LoadLibrary(const wxString &libname, int flags) wxString realname(libname); if( !(flags & wxDL_VERBATIM) ) - realname += wxDynamicLibrary::GetDllExt(); + realname += wxDynamicLibrary::GetDllExt(wxDL_MODULE); wxPluginLibrary *entry; @@ -343,7 +343,7 @@ bool wxPluginManager::UnloadLibrary(const wxString& libname) if ( !entry ) { - realname += wxDynamicLibrary::GetDllExt(); + realname += wxDynamicLibrary::GetDllExt(wxDL_MODULE); entry = FindByName(realname); } diff --git a/src/msw/dlmsw.cpp b/src/msw/dlmsw.cpp index 77338c0..5b028a4 100644 --- a/src/msw/dlmsw.cpp +++ b/src/msw/dlmsw.cpp @@ -29,8 +29,6 @@ #include "wx/msw/debughlp.h" #include "wx/filename.h" -const wxString wxDynamicLibrary::ms_dllext(wxT(".dll")); - // ---------------------------------------------------------------------------- // private classes // ---------------------------------------------------------------------------- diff --git a/src/unix/dlunix.cpp b/src/unix/dlunix.cpp index 5ca297a..e668a30 100644 --- a/src/unix/dlunix.cpp +++ b/src/unix/dlunix.cpp @@ -65,15 +65,6 @@ // constants // ---------------------------------------------------------------------------- -// standard shared libraries extensions for different Unix versions -#if defined(__HPUX__) - const wxString wxDynamicLibrary::ms_dllext(".sl"); -#elif defined(__DARWIN__) - const wxString wxDynamicLibrary::ms_dllext(".bundle"); -#else - const wxString wxDynamicLibrary::ms_dllext(".so"); -#endif - // ============================================================================ // wxDynamicLibrary implementation // ============================================================================ -- 2.7.4