diff options
author | Mathieu Malaterre <mathieu.malaterre@gmail.com> | 2006-03-10 16:32:09 (GMT) |
---|---|---|
committer | Mathieu Malaterre <mathieu.malaterre@gmail.com> | 2006-03-10 16:32:09 (GMT) |
commit | 011de35360e8f3b22809f21055ccaff62ba7b212 (patch) | |
tree | 1abaa5b0be67e8962eef42e7de3c5b1f25ba0f1d /Source | |
parent | 6b47b288678569a630c14af24200ec6f3736218a (diff) | |
download | CMake-011de35360e8f3b22809f21055ccaff62ba7b212.zip CMake-011de35360e8f3b22809f21055ccaff62ba7b212.tar.gz CMake-011de35360e8f3b22809f21055ccaff62ba7b212.tar.bz2 |
ENH: Hopefully have the DynamicLoader to the proper thing.
Diffstat (limited to 'Source')
-rw-r--r-- | Source/kwsys/DynamicLoader.cxx | 20 | ||||
-rw-r--r-- | Source/kwsys/testDynamicLoader.cxx | 9 |
2 files changed, 23 insertions, 6 deletions
diff --git a/Source/kwsys/DynamicLoader.cxx b/Source/kwsys/DynamicLoader.cxx index 8584a84..cc6a1d5 100644 --- a/Source/kwsys/DynamicLoader.cxx +++ b/Source/kwsys/DynamicLoader.cxx @@ -220,12 +220,24 @@ int DynamicLoader::CloseLibrary(LibHandle lib) DynamicLoaderFunction DynamicLoader::GetSymbolAddress(LibHandle lib, const char* sym) { void *result; +#ifdef __BORLANDC__ + // Need to prepend symbols with '_' on borland compilers + size_t len = strlen(sym); + char *rsym = new char[len + 1 + 1]; + strcpy(rsym, "_"); + strcat(rsym+1, sym); +#else + const char *rsym = sym; +#endif #ifdef UNICODE wchar_t wsym[MB_CUR_MAX]; - mbstowcs(wsym, sym, MB_CUR_MAX); + mbstowcs(wsym, rsym, MB_CUR_MAX); result = GetProcAddress(lib, wsym); #else - result = (void*)GetProcAddress(lib, sym); + result = (void*)GetProcAddress(lib, rsym); +#endif +#ifdef __BORLANDC__ + delete[] rsym; #endif // Hack to cast pointer-to-data to pointer-to-function. return *reinterpret_cast<DynamicLoaderFunction*>(&result); @@ -317,7 +329,11 @@ const char* DynamicLoader::LibPrefix() //---------------------------------------------------------------------------- const char* DynamicLoader::LibExtension() { +#ifdef __CYGWIN__ + return ".dll"; +#else return ".so"; +#endif } //---------------------------------------------------------------------------- diff --git a/Source/kwsys/testDynamicLoader.cxx b/Source/kwsys/testDynamicLoader.cxx index ac553e2..23a422d 100644 --- a/Source/kwsys/testDynamicLoader.cxx +++ b/Source/kwsys/testDynamicLoader.cxx @@ -46,6 +46,7 @@ kwsys_stl::string GetLibName(const char* lname) */ int TestDynamicLoader(const char* libname, const char* symbol, int r1, int r2, int r3) { + //kwsys_ios::cerr << "Testing: " << libname << kwsys_ios::endl; kwsys::LibHandle l = kwsys::DynamicLoader::OpenLibrary(libname); // If result is incompatible with expectation just fails (xor): if( (r1 && !l) || (!r1 && l) ) @@ -85,10 +86,10 @@ int main(int , char *[]) res += TestDynamicLoader("libdl.so", "TestDynamicLoader",1,0,1); #endif // Now try on the generated library - //kwsys_stl::string libname = GetLibName("testDynload"); - //res += TestDynamicLoader(libname.c_str(), "dummy",1,0,1); - //res += TestDynamicLoader(libname.c_str(), "TestDynamicLoaderFunction",1,1,1); - //res += TestDynamicLoader(libname.c_str(), "TestDynamicLoaderData",1,1,1); + kwsys_stl::string libname = GetLibName("testDynload"); + res += TestDynamicLoader(libname.c_str(), "dummy",1,0,1); + res += TestDynamicLoader(libname.c_str(), "TestDynamicLoaderFunction",1,1,1); + res += TestDynamicLoader(libname.c_str(), "TestDynamicLoaderData",1,1,1); return res; } |