cmake: Fix executing test examples on Windows.
authorAndreas Schneider <asn@cryptomilk.org>
Thu, 12 Feb 2015 08:14:10 +0000 (09:14 +0100)
committerAndreas Schneider <asn@cryptomilk.org>
Thu, 12 Feb 2015 15:59:22 +0000 (16:59 +0100)
The executable need the path to dll set so they can be run successfully.

Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
example/CMakeLists.txt
example/chef_wrap/CMakeLists.txt
src/CMakeLists.txt

index 9e0889e..c343244 100644 (file)
@@ -13,17 +13,37 @@ set_source_files_properties(
     PROPERTIES
         COMPILE_DEFINITIONS UNIT_TESTING=1)
 
+if (WIN32)
+    set(DLL_PATH_ENV "${CMOCKA_DLL_PATH};$ENV{PATH}")
+
+    #
+    # IMPORTANT NOTE: The set_tests_properties(), below, internally
+    # stores its name/value pairs with a semicolon delimiter.
+    # because of this we must protect the semicolons in the path
+    #
+    string(REPLACE ";" "\\;" DLL_PATH_ENV "${DLL_PATH_ENV}")
+endif (WIN32)
+
+
 ### The most simple test
 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)
+    set_tests_properties(simple_test PROPERTIES ENVIRONMENT "PATH=${DLL_PATH_ENV}")
+endif (WIN32)
 
+### Calulator test
 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)
+if (WIN32)
+    set_tests_properties(calculator_test PROPERTIES ENVIRONMENT "PATH=${DLL_PATH_ENV}")
+endif (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})
 
@@ -35,7 +55,11 @@ set_tests_properties(
         PASS_REGULAR_EXPRESSION
         "\\[  FAILED  \\] 3 test"
 )
+if (WIN32)
+    set_tests_properties(allocate_module_test PROPERTIES ENVIRONMENT "PATH=${DLL_PATH_ENV}")
+endif (WIN32)
 
+### Assert macro test
 add_executable(assert_macro_test assert_macro.c assert_macro_test.c)
 target_link_libraries(assert_macro_test ${CMOCKA_SHARED_LIBRARY})
 
@@ -46,7 +70,11 @@ set_tests_properties(
         PASS_REGULAR_EXPRESSION
         "\\[  FAILED  \\] 2 test"
 )
+if (WIN32)
+    set_tests_properties(assert_macro_test PROPERTIES ENVIRONMENT "PATH=${DLL_PATH_ENV}")
+endif (WIN32)
 
+### Assert module test
 add_executable(assert_module_test assert_module.c assert_module_test.c)
 target_link_libraries(assert_module_test ${CMOCKA_SHARED_LIBRARY})
 
@@ -57,17 +85,29 @@ set_tests_properties(
         PASS_REGULAR_EXPRESSION
         "\\[  FAILED  \\] 2 test"
 )
+if (WIN32)
+    set_tests_properties(assert_module_test PROPERTIES ENVIRONMENT "PATH=${DLL_PATH_ENV}")
+endif (WIN32)
 
+### 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)
+    set_tests_properties(customer_database_test PROPERTIES ENVIRONMENT "PATH=${DLL_PATH_ENV}")
+endif (WIN32)
 
+### 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)
+    set_tests_properties(key_value_test PROPERTIES ENVIRONMENT "PATH=${DLL_PATH_ENV}")
+endif (WIN32)
 
+### Product database test
 add_executable(product_database_test product_database.c product_database_test.c)
 target_link_libraries(product_database_test ${CMOCKA_SHARED_LIBRARY})
 
@@ -78,6 +118,9 @@ set_tests_properties(
         PASS_REGULAR_EXPRESSION
         "\\[  FAILED  \\] 2 test"
 )
+if (WIN32)
+    set_tests_properties(product_database_test PROPERTIES ENVIRONMENT "PATH=${DLL_PATH_ENV}")
+endif (WIN32)
 
 # TODO Execute "$CMAKE_LINKER --help" and check for --wrap
 if (${CMAKE_C_COMPILER_ID} MATCHES "(GNU|Clang)" AND NOT APPLE)
index 60d5a36..5902438 100644 (file)
@@ -15,3 +15,6 @@ set_target_properties(waiter_test_wrap
         PROPERTIES
         LINK_FLAGS  "-Wl,--wrap=chef_cook"
 )
+if (WIN32)
+    set_tests_properties(waiter_test_wrap PROPERTIES ENVIRONMENT "PATH=${DLL_PATH_ENV}")
+endif (WIN32)
index 4ab084e..6aa2741 100644 (file)
@@ -54,18 +54,20 @@ add_library(${CMOCKA_SHARED_LIBRARY} SHARED ${cmocka_SRCS})
 
 target_link_libraries(${CMOCKA_SHARED_LIBRARY} ${CMOCKA_LINK_LIBRARIES})
 
-set_target_properties(
-    ${CMOCKA_SHARED_LIBRARY}
-        PROPERTIES
-            VERSION
-                ${LIBRARY_VERSION}
-            SOVERSION
-                ${LIBRARY_SOVERSION}
-            OUTPUT_NAME
-                cmocka
-            DEFINE_SYMBOL
-                CMOCKA_EXPORTS
-)
+if (NOT WIN32)
+    set_target_properties(
+        ${CMOCKA_SHARED_LIBRARY}
+            PROPERTIES
+                VERSION
+                    ${LIBRARY_VERSION}
+                SOVERSION
+                    ${LIBRARY_SOVERSION}
+                OUTPUT_NAME
+                    cmocka
+                DEFINE_SYMBOL
+                    CMOCKA_EXPORTS
+    )
+endif (NOT WIN32)
 
 install(
     TARGETS ${CMOCKA_SHARED_LIBRARY}
@@ -96,3 +98,17 @@ if (WITH_STATIC_LIB)
     )
 endif (WITH_STATIC_LIB)
 
+if (POLICY CMP0026)
+    cmake_policy(SET CMP0026 OLD)
+endif()
+
+#
+# In order to run tests we will need to set the approriate environment
+# variable so that the test program can locate its dependent DLL's. First
+# we want to know what directory our dependent DLL was installed into:
+#
+get_target_property(_cmocka_dir cmocka_shared LOCATION_${CMOCKA_BUILD_TYPE})
+get_filename_component(_cmocka_path "${_cmocka_dir}" PATH)
+file(TO_NATIVE_PATH "${_cmocka_path}" _cmocka_path_native)
+
+set(CMOCKA_DLL_PATH "${_cmocka_path_native}" PARENT_SCOPE)