123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- #include "kwsysPrivate.h"
- #include KWSYS_HEADER(DynamicLoader.hxx)
- #if defined(__BEOS__) || defined(__HAIKU__)
- #include <be/kernel/OS.h> /* disable_debugger() API. */
- #endif
- #if 0
- #include "DynamicLoader.hxx.in"
- #endif
- #include <iostream>
- #include <string>
- #include <testSystemTools.h>
- static std::string GetLibName(const char* lname)
- {
-
- std::string slname;
- slname = EXECUTABLE_OUTPUT_PATH;
- #ifdef CMAKE_INTDIR
- slname += "/";
- slname += CMAKE_INTDIR;
- #endif
- slname += "/";
- slname += kwsys::DynamicLoader::LibPrefix();
- slname += lname;
- slname += kwsys::DynamicLoader::LibExtension();
- return slname;
- }
- static int TestDynamicLoader(const char* libname, const char* symbol, int r1,
- int r2, int r3)
- {
- std::cerr << "Testing: " << libname << std::endl;
- kwsys::DynamicLoader::LibraryHandle l =
- kwsys::DynamicLoader::OpenLibrary(libname);
-
- if ((r1 && !l) || (!r1 && l)) {
- std::cerr << kwsys::DynamicLoader::LastError() << std::endl;
- return 1;
- }
- kwsys::DynamicLoader::SymbolPointer f =
- kwsys::DynamicLoader::GetSymbolAddress(l, symbol);
- if ((r2 && !f) || (!r2 && f)) {
- std::cerr << kwsys::DynamicLoader::LastError() << std::endl;
- return 1;
- }
- #ifndef __APPLE__
- int s = kwsys::DynamicLoader::CloseLibrary(l);
- if ((r3 && !s) || (!r3 && s)) {
- std::cerr << kwsys::DynamicLoader::LastError() << std::endl;
- return 1;
- }
- #else
- (void)r3;
- #endif
- return 0;
- }
- int testDynamicLoader(int argc, char* argv[])
- {
- #if defined(_WIN32)
- SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
- #elif defined(__BEOS__) || defined(__HAIKU__)
- disable_debugger(1);
- #endif
- int res = 0;
- if (argc == 3) {
-
- res = TestDynamicLoader(argv[1], argv[2], 1, 1, 1);
- return res;
- }
- #ifndef __SYLLABLE__
-
- res += TestDynamicLoader("azerty_", "foo_bar", 0, 0, 0);
-
- res += TestDynamicLoader(TEST_SYSTEMTOOLS_SOURCE_DIR "/testSystemTools.bin",
- "wp", 0, 0, 0);
- #endif
- #ifdef __linux__
-
-
- res += TestDynamicLoader("foobar.lib", "dlopen", 0, 1, 0);
- res += TestDynamicLoader("libdl.so", "dlopen", 1, 1, 1);
- res += TestDynamicLoader("libdl.so", "TestDynamicLoader", 1, 0, 1);
- #endif
-
- std::string libname = GetLibName(KWSYS_NAMESPACE_STRING "TestDynload");
- res += TestDynamicLoader(libname.c_str(), "dummy", 1, 0, 1);
- res += TestDynamicLoader(libname.c_str(), "TestDynamicLoaderSymbolPointer",
- 1, 1, 1);
- res += TestDynamicLoader(libname.c_str(), "_TestDynamicLoaderSymbolPointer",
- 1, 0, 1);
- res += TestDynamicLoader(libname.c_str(), "TestDynamicLoaderData", 1, 1, 1);
- res += TestDynamicLoader(libname.c_str(), "_TestDynamicLoaderData", 1, 0, 1);
- return res;
- }
|