]> git.saurik.com Git - wxWidgets.git/commitdiff
HP-UX compilation fixes (thanks to Zdravko Bas)
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 23 Feb 1999 17:51:46 +0000 (17:51 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 23 Feb 1999 17:51:46 +0000 (17:51 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1757 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/dynlib.h
src/common/dynlib.cpp

index 0419db3579b7d0c287a1f652b6a1a3bd5c379839..98bc1839a60e1c62607d3cedc4d4f1a8644f914a 100644 (file)
     #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
 
     #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__
index ead9a1baef09c3791386aaea310a77a8395299a6..447fb80a87e7026eded1bc30861bd8ae218a354f 100644 (file)
   #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
     #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__)
-    fullname << ".so";
+    #if defined(__HPUX__)
+        fullname << ".sl";
+    #else      //__HPUX__
+        fullname << ".so";
+    #endif     //__HPUX__
 #elif defined(__WINDOWS__)
     fullname << ".dll";
 #endif
@@ -215,11 +222,30 @@ 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 ;
+    wxDllType handle;
 
 #if defined(__WXMAC__)
     FSSpec myFSSpec ;
@@ -269,3 +295,5 @@ wxObject *wxLibraries::CreateObject(const wxString& path)
     }
     return NULL;
 }
+
+#endif // wxUSE_DYNLIB_CLASS