summaryrefslogtreecommitdiffstats
path: root/Tests/Complex
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/Complex')
-rw-r--r--Tests/Complex/Executable/complex.cxx26
-rw-r--r--Tests/Complex/Library/CMakeLists.txt3
-rw-r--r--Tests/Complex/Library/moduleFile.c6
-rw-r--r--Tests/Complex/Library/moduleFile.h12
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();