summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Ates <joseph.ates@msasafety.com>2016-01-23 06:53:29 -0500
committerAndreas Schneider <asn@cryptomilk.org>2016-02-10 13:26:45 +0100
commit044a1a11f891c1264281992f1a2121fb0856218c (patch)
treea7cf3628f78c79fed16d99a4d57528b43ae87b79
parentc35d3edecac0b5e5884f9e26ba9cf73753279ea3 (diff)
downloadcmocka-044a1a11f891c1264281992f1a2121fb0856218c.tar.gz
cmocka-044a1a11f891c1264281992f1a2121fb0856218c.tar.bz2
cmocka-044a1a11f891c1264281992f1a2121fb0856218c.zip
cmake: Add MinGW DLL Prefix Workaround
CMake assigns "lib" as the prefix to shared libraries on MinGW GCC, but MinGW does not expect such a prefix when linking to DLLs. By setting, CMAKE_SHARED_LIBRARY_PREFIX to "" the example tests were able to run with the exception of the calculator_test which segfaults (SIGSEGV) on the setjmp in test_divide_by_zero. This fault is specific to MinGW and does not occur within runs on Cygwin or Visual Studio. calculator_test was enabled only for static linking on MinGW Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
-rw-r--r--CMakeLists.txt5
-rw-r--r--example/CMakeLists.txt59
-rw-r--r--example/chef_wrap/CMakeLists.txt4
3 files changed, 43 insertions, 25 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4507444..478929d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -44,6 +44,11 @@ macro_ensure_out_of_source_build("${PROJECT_NAME} requires an out of source buil
include(ConfigureChecks.cmake)
configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
+# MinGW DLL Naming Workaround
+if (MINGW)
+ set(CMAKE_SHARED_LIBRARY_PREFIX "")
+endif (MINGW)
+
# check subdirectories
add_subdirectory(doc)
add_subdirectory(include)
diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt
index e46a4fc..4951733 100644
--- a/example/CMakeLists.txt
+++ b/example/CMakeLists.txt
@@ -13,7 +13,10 @@ set_source_files_properties(
PROPERTIES
COMPILE_DEFINITIONS UNIT_TESTING=1)
-if (WIN32)
+
+if (WIN32 OR CYGWIN OR MINGW)
+ set(CMOCKA_DLL_LIB ${CMAKE_BINARY_DIR}/src)
+ file(TO_NATIVE_PATH "${CMOCKA_DLL_PATH}" CMOCKA_DLL_PATH)
set(DLL_PATH_ENV "${CMOCKA_DLL_PATH};$ENV{PATH}")
#
@@ -22,7 +25,7 @@ if (WIN32)
# because of this we must protect the semicolons in the path
#
string(REPLACE ";" "\\;" DLL_PATH_ENV "${DLL_PATH_ENV}")
-endif (WIN32)
+endif (WIN32 OR CYGWIN OR MINGW)
### The most simple test
@@ -30,29 +33,40 @@ add_executable(simple_test simple_test.c)
target_link_libraries(simple_test ${CMOCKA_SHARED_LIBRARY})
add_test(simple_test ${CMAKE_CURRENT_BINARY_DIR}/simple_test)
-if (WIN32)
+if (WIN32 OR CYGWIN OR MINGW)
set_tests_properties(simple_test PROPERTIES ENVIRONMENT "PATH=${DLL_PATH_ENV}")
-endif (WIN32)
+endif (WIN32 OR CYGWIN OR MINGW)
### Calulator test
-if (NOT WIN32)
+#TODO investigate dll jmp issue on MinGW
+if (NOT MINGW OR WITH_STATIC_LIB)
add_executable(calculator_test calculator.c calculator_test.c)
- target_link_libraries(calculator_test ${CMOCKA_SHARED_LIBRARY})
-
add_test(calculator_test ${CMAKE_CURRENT_BINARY_DIR}/calculator_test)
-endif (NOT WIN32)
+ if (WIN32 OR CYGWIN)
+ set_tests_properties(calculator_test PROPERTIES ENVIRONMENT "PATH=${DLL_PATH_ENV}")
+ endif (WIN32 OR CYGWIN)
+
+ if (MINGW)
+ target_link_libraries(calculator_test ${CMOCKA_STATIC_LIBRARY})
+ else (MINGW)
+ target_link_libraries(calculator_test ${CMOCKA_SHARED_LIBRARY})
+ endif (MINGW)
+
+ if (WIN32 OR CYGWIN OR MINGW)
+ set_tests_properties(calculator_test PROPERTIES ENVIRONMENT "PATH=${DLL_PATH_ENV}")
+ endif (WIN32 OR CYGWIN OR MINGW)
+endif (NOT MINGW OR WITH_STATIC_LIB)
-# FIXME These tests fail on Windows when run with ctest but look correct excuted manually.
-if (NOT WIN32)
### Allocate module test
add_executable(allocate_module_test allocate_module.c allocate_module_test.c)
target_link_libraries(allocate_module_test ${CMOCKA_SHARED_LIBRARY})
# This is a test that should detect leaks and overflows and will fail for that
add_test(allocate_module_test ${CMAKE_CURRENT_BINARY_DIR}/allocate_module_test)
-if (WIN32)
+if (WIN32 OR CYGWIN OR MINGW)
set_tests_properties(allocate_module_test PROPERTIES ENVIRONMENT "PATH=${DLL_PATH_ENV}")
-endif (WIN32)
+endif (WIN32 OR CYGWIN OR MINGW)
+
set_tests_properties(
allocate_module_test
PROPERTIES
@@ -69,9 +83,9 @@ set_tests_properties(
PROPERTIES
WILL_FAIL 1
)
-if (WIN32)
+if (WIN32 OR CYGWIN OR MINGW)
set_tests_properties(assert_macro_test PROPERTIES ENVIRONMENT "PATH=${DLL_PATH_ENV}")
-endif (WIN32)
+endif (WIN32 OR CYGWIN OR MINGW)
### Assert module test
add_executable(assert_module_test assert_module.c assert_module_test.c)
@@ -83,28 +97,27 @@ set_tests_properties(
PROPERTIES
WILL_FAIL 1
)
-if (WIN32)
+if (WIN32 OR CYGWIN OR MINGW)
set_tests_properties(assert_module_test PROPERTIES ENVIRONMENT "PATH=${DLL_PATH_ENV}")
-endif (WIN32)
-endif (NOT WIN32) # FIXME FAIL
+endif (WIN32 OR CYGWIN OR MINGW)
### Customer database test
add_executable(customer_database_test customer_database.c customer_database_test.c)
target_link_libraries(customer_database_test ${CMOCKA_SHARED_LIBRARY})
add_test(customer_database_test ${CMAKE_CURRENT_BINARY_DIR}/customer_database_test)
-if (WIN32)
+if (WIN32 OR CYGWIN OR MINGW)
set_tests_properties(customer_database_test PROPERTIES ENVIRONMENT "PATH=${DLL_PATH_ENV}")
-endif (WIN32)
+endif (WIN32 OR CYGWIN OR MINGW)
### Key Value Test
add_executable(key_value_test key_value.c key_value_test.c)
target_link_libraries(key_value_test ${CMOCKA_SHARED_LIBRARY})
add_test(key_value_test ${CMAKE_CURRENT_BINARY_DIR}/key_value_test)
-if (WIN32)
+if (WIN32 OR CYGWIN OR MINGW)
set_tests_properties(key_value_test PROPERTIES ENVIRONMENT "PATH=${DLL_PATH_ENV}")
-endif (WIN32)
+endif (WIN32 OR CYGWIN OR MINGW)
### Product database test
add_executable(product_database_test product_database.c product_database_test.c)
@@ -117,9 +130,9 @@ set_tests_properties(
PASS_REGULAR_EXPRESSION
"\\[ FAILED \\] 2 test"
)
-if (WIN32)
+if (WIN32 OR CYGWIN OR MINGW)
set_tests_properties(product_database_test PROPERTIES ENVIRONMENT "PATH=${DLL_PATH_ENV}")
-endif (WIN32)
+endif (WIN32 OR CYGWIN OR MINGW)
# TODO Execute "$CMAKE_LINKER --help" and check for --wrap
if (${CMAKE_C_COMPILER_ID} MATCHES "(GNU|Clang)" AND NOT APPLE)
diff --git a/example/chef_wrap/CMakeLists.txt b/example/chef_wrap/CMakeLists.txt
index 5902438..68afec0 100644
--- a/example/chef_wrap/CMakeLists.txt
+++ b/example/chef_wrap/CMakeLists.txt
@@ -15,6 +15,6 @@ set_target_properties(waiter_test_wrap
PROPERTIES
LINK_FLAGS "-Wl,--wrap=chef_cook"
)
-if (WIN32)
+if (WIN32 OR MINGW OR CYGWIN)
set_tests_properties(waiter_test_wrap PROPERTIES ENVIRONMENT "PATH=${DLL_PATH_ENV}")
-endif (WIN32)
+endif (WIN32 OR MINGW OR CYGWIN)