diff options
Diffstat (limited to 'Tests/Complex')
-rw-r--r-- | Tests/Complex/Executable/complex.cxx | 26 | ||||
-rw-r--r-- | Tests/Complex/Library/CMakeLists.txt | 3 | ||||
-rw-r--r-- | Tests/Complex/Library/moduleFile.c | 6 | ||||
-rw-r--r-- | Tests/Complex/Library/moduleFile.h | 12 |
4 files changed, 46 insertions, 1 deletions
diff --git a/Tests/Complex/Executable/complex.cxx b/Tests/Complex/Executable/complex.cxx index d6d3839..730510d 100644 --- a/Tests/Complex/Executable/complex.cxx +++ b/Tests/Complex/Executable/complex.cxx @@ -10,6 +10,7 @@ extern "C" { } #include "cmStandardIncludes.h" #include "cmSystemTools.h" +#include "cmDynamicLoader.h" int cm_passed = 0; int cm_failed = 0; @@ -101,6 +102,31 @@ void TestDir(const char* filename) int main() { + std::string lib = BINARY_DIR; + lib += "/bin/"; + lib += cmDynamicLoader::LibPrefix(); + lib += "CMakeTestModule"; + lib += cmDynamicLoader::LibExtension(); + + cmLibHandle handle = cmDynamicLoader::OpenLibrary(lib.c_str()); + if(!handle) + { + cmFailed("Can not open CMakeTestModule"); + } + else + { + cmDynamicLoaderFunction fun = + cmDynamicLoader::GetSymbolAddress(handle, "ModuleFunction"); + typedef int (*TEST_FUNCTION)(); + TEST_FUNCTION testFun = (TEST_FUNCTION)fun; + int ret = (*testFun)(); + if(!ret) + { + cmFailed("ModuleFunction called from module did not return valid return"); + } + cmPassed("Module loaded and ModuleFunction called correctly"); + } + if(sharedFunction() != 1) { cmFailed("Call to sharedFunction from shared library failed."); diff --git a/Tests/Complex/Library/CMakeLists.txt b/Tests/Complex/Library/CMakeLists.txt index 9fccfc5..0df970b 100644 --- a/Tests/Complex/Library/CMakeLists.txt +++ b/Tests/Complex/Library/CMakeLists.txt @@ -38,6 +38,7 @@ ENDIF(WIN32) # SOURCE_FILES(SharedLibrarySources sharedFile) ADD_LIBRARY(CMakeTestLibraryShared SHARED ${SharedLibrarySources}) +ADD_LIBRARY(CMakeTestModule MODULE moduleFile.c) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTEST_C_FLAGS") ADD_LIBRARY(CMakeTestCLibraryShared SHARED testConly.c) SET_TARGET_PROPERTIES(CMakeTestCLibraryShared PROPERTIES FOO BAR) @@ -55,7 +56,7 @@ ENDIF(${FOO_BAR_VAR} MATCHES "BAR") # The 'complex' executable will then test if this file exists and remove it. # ADD_DEPENDENCIES(CMakeTestLibraryShared create_file) - +MESSAGE("complex bin dir is ${Complex_BINARY_DIR}") ADD_CUSTOM_COMMAND(COMMAND ${CREATE_FILE_EXE} ARGS "${Complex_BINARY_DIR}/Library/postbuild.txt" TARGET CMakeTestLibraryShared) diff --git a/Tests/Complex/Library/moduleFile.c b/Tests/Complex/Library/moduleFile.c new file mode 100644 index 0000000..608d750 --- /dev/null +++ b/Tests/Complex/Library/moduleFile.c @@ -0,0 +1,6 @@ +#include "moduleFile.h" + +int ModuleFunction() +{ + return 1; +} diff --git a/Tests/Complex/Library/moduleFile.h b/Tests/Complex/Library/moduleFile.h new file mode 100644 index 0000000..6b561e1 --- /dev/null +++ b/Tests/Complex/Library/moduleFile.h @@ -0,0 +1,12 @@ +#if defined(_WIN32) || defined(WIN32) /* Win32 version */ +#ifdef CMakeTestModule_EXPORTS +# define CMakeTest_EXPORT __declspec(dllexport) +#else +# define CMakeTest_EXPORT __declspec(dllimport) +#endif +#else +/* unix needs nothing */ +#define CMakeTest_EXPORT +#endif + +CMakeTest_EXPORT int ModuleFunction(); |