HP-UX compilation fixes (thanks to Zdravko Bas)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1757 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
1999-02-23 17:51:46 +00:00
parent eb9bbf52b6
commit 8a0d4cf6c5
2 changed files with 48 additions and 14 deletions

View File

@@ -16,16 +16,20 @@
#pragma interface
#endif
#include <wx/setup.h>
#if wxUSE_DYNLIB_CLASS
#include <wx/string.h>
#include <wx/list.h>
#include <wx/hash.h>
// TODO should be done by configure
#if defined(__UNIX__) && !(defined(HAVE_DLOPEN) || defined(HAVE_SHLLOAD))
// this is normally done by configure, but I leave it here for now...
#if defined(__UNIX__) && !(defined(HAVE_DLOPEN) || defined(HAVE_SHL_LOAD))
#if defined(__LINUX__) || defined(__SOLARIS__) || defined(__SUNOS__) || defined(__FREEBSD__)
#define HAVE_DLOPEN
#elif defined(__HPUX__)
#define HAVE_SHLLOAD
#define HAVE_SHL_LOAD
#endif // Unix flavour
#endif // !Unix or already have some HAVE_xxx defined
@@ -33,10 +37,10 @@
#include <dlfcn.h>
typedef void *wxDllType;
#elif defined(HAVE_SHLLOAD)
#elif defined(HAVE_SHL_LOAD)
#include <dl.h>
typedef void *wxDllType;
typedef shl_t wxDllType;
#elif defined(__WINDOWS__)
#include <windows.h>
@@ -62,7 +66,7 @@ public:
wxHashTable classTable;
public:
wxLibrary(void *handle);
wxLibrary(wxDllType handle);
~wxLibrary();
// Get a symbol from the dynamic library
@@ -112,4 +116,6 @@ wxClassInfo *wxGetClassFirst() { \
return wxClassInfo::GetFirst(); \
}
#endif // wxUSE_DYNLIB_CLASS
#endif // _WX_DYNLIB_H__

View File

@@ -27,10 +27,13 @@
#pragma hdrstop
#endif //__BORLANDC__
#if wxUSE_DYNLIB_CLASS
#include "wx/dynlib.h"
#include "wx/filefn.h"
#include "wx/intl.h"
#include "wx/log.h"
#include "wx/tokenzr.h"
// ----------------------------------------------------------------------------
// conditional compilation
@@ -40,14 +43,14 @@
#define wxDllOpen(lib) dlopen(lib, RTLD_LAZY)
#define wxDllGetSymbol(handle, name) dlsym(handle, (char *)name)
#define wxDllClose dlclose
#elif defined(HAVE_SHLLOAD)
#define wxDllOpen(lib) shl_open(lib, BIND_DEFERRED, 0)
#elif defined(HAVE_SHL_LOAD)
#define wxDllOpen(lib) shl_load(lib, BIND_DEFERRED, 0)
#define wxDllClose shl_unload
static inline void *wxDllGetSymbol(shl_t *handle, const char *name)
static inline void *wxDllGetSymbol(shl_t handle, const char *name)
{
void *sym;
if ( shl_findsym(handle, name, TYPE_UNDEFINED, &sym) == 0 )
if ( shl_findsym(&handle, name, TYPE_UNDEFINED, &sym) == 0 )
return sym;
else
return (void *)0;
@@ -77,7 +80,11 @@ static wxString ConstructLibraryName(const wxString& basename)
wxString fullname(basename);
#if defined(__UNIX__)
#if defined(__HPUX__)
fullname << ".sl";
#else //__HPUX__
fullname << ".so";
#endif //__HPUX__
#elif defined(__WINDOWS__)
fullname << ".dll";
#endif
@@ -215,8 +222,27 @@ wxLibrary *wxLibraries::LoadLibrary(const wxString& name)
wxString lib_name = ConstructLibraryName(name);
#if defined(__UNIX__)
// TODO use LD_LIBRARY_PATH!
lib_name.Prepend("/lib");
// found the first file in LD_LIBRARY_PATH with this name
wxString libPath("/lib:/usr/lib"); // system path first
const char *envLibPath = getenv("LD_LIBRARY_PATH");
if ( envLibPath )
libPath << ':' << envLibPath;
wxStringTokenizer tokenizer(libPath, ':');
while ( tokenizer.HasMoreToken() )
{
wxString fullname(tokenizer.NextToken());
fullname << '/' << lib_name;
if ( wxFileExists(fullname) )
{
lib_name = fullname;
// found the library
break;
}
}
//else: not found in the path, leave the name as is (secutiry risk?)
#endif // __UNIX__
wxDllType handle;
@@ -269,3 +295,5 @@ wxObject *wxLibraries::CreateObject(const wxString& path)
}
return NULL;
}
#endif // wxUSE_DYNLIB_CLASS