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
This commit is contained in:
Václav Slavík
2013-06-11 16:46:49 +00:00
parent 1c47b9489d
commit 31f125ed00
5 changed files with 35 additions and 36 deletions

View File

@@ -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);
}
}
@@ -166,6 +162,29 @@ void *wxDynamicLibrary::GetSymbol(const wxString& name, bool *success) const
// informational methods
// ----------------------------------------------------------------------------
/*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,
@@ -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;
}