cmake: Update AddCMockaTest.cmake
authorAndreas Schneider <asn@samba.org>
Tue, 7 May 2019 10:39:55 +0000 (12:39 +0200)
committerAndreas Schneider <asn@cryptomilk.org>
Mon, 3 Jun 2019 10:54:22 +0000 (12:54 +0200)
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Gary Lockyer <gary@samba.org>
cmake/Modules/AddCMockaTest.cmake
tests/CMakeLists.txt

index 6a34e760145b95a0ab07908fdf3391f4033d20c1..2f45e1afa45fac4323fb821f5c29780f7c2a7cc0 100644 (file)
-# - ADD_CHECK_TEST(test_name test_source linklib1 ... linklibN)
-
+#
 # Copyright (c) 2007      Daniel Gollub <dgollub@suse.de>
-# Copyright (c) 2007-2010 Andreas Schneider <asn@cynapses.org>
+# Copyright (c) 2007-2018 Andreas Schneider <asn@cryptomilk.org>
+# Copyright (c) 2018      Anderson Toshiyuki Sasaki <ansasaki@redhat.com>
 #
 # Redistribution and use is allowed according to the terms of the BSD license.
 # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
 
+#.rst:
+# AddCMockaTest
+# -------------
+#
+# This file provides a function to add a test
+#
+# Functions provided
+# ------------------
+#
+# ::
+#
+#   add_cmocka_test(target_name
+#                   SOURCES src1 src2 ... srcN
+#                   [COMPILE_OPTIONS opt1 opt2 ... optN]
+#                   [LINK_LIBRARIES lib1 lib2 ... libN]
+#                   [LINK_OPTIONS lopt1 lop2 .. loptN]
+#                  )
+#
+# ``target_name``:
+#   Required, expects the name of the test which will be used to define a target
+#
+# ``SOURCES``:
+#   Required, expects one or more source files names
+#
+# ``COMPILE_OPTIONS``:
+#   Optional, expects one or more options to be passed to the compiler
+#
+# ``LINK_LIBRARIES``:
+#   Optional, expects one or more libraries to be linked with the test
+#   executable.
+#
+# ``LINK_OPTIONS``:
+#   Optional, expects one or more options to be passed to the linker
+#
+#
+# Example:
+#
+# .. code-block:: cmake
+#
+#   add_cmocka_test(my_test
+#                   SOURCES my_test.c other_source.c
+#                   COMPILE_OPTIONS -g -Wall
+#                   LINK_LIBRARIES mylib
+#                   LINK_OPTIONS -Wl,--enable-syscall-fixup
+#                  )
+#
+# Where ``my_test`` is the name of the test, ``my_test.c`` and
+# ``other_source.c`` are sources for the binary, ``-g -Wall`` are compiler
+# options to be used, ``mylib`` is a target of a library to be linked, and
+# ``-Wl,--enable-syscall-fixup`` is an option passed to the linker.
+#
+
 enable_testing()
 include(CTest)
 
-function (ADD_CMOCKA_TEST _testName _testSource)
-    add_executable(${_testName} ${_testSource})
-    target_link_libraries(${_testName} ${ARGN})
-    add_test(${_testName} ${CMAKE_CURRENT_BINARY_DIR}/${_testName})
+if (CMAKE_CROSSCOMPILING)
+    if (WIN32)
+        find_program(WINE_EXECUTABLE
+                     NAMES wine)
+        set(TARGET_SYSTEM_EMULATOR ${WINE_EXECUTABLE} CACHE INTERNAL "")
+    endif()
+endif()
+
+function(ADD_CMOCKA_TEST _TARGET_NAME)
+
+    set(one_value_arguments
+    )
+
+    set(multi_value_arguments
+        SOURCES
+        COMPILE_OPTIONS
+        LINK_LIBRARIES
+        LINK_OPTIONS
+    )
+
+    cmake_parse_arguments(_add_cmocka_test
+        ""
+        "${one_value_arguments}"
+        "${multi_value_arguments}"
+        ${ARGN}
+    )
+
+    if (NOT DEFINED _add_cmocka_test_SOURCES)
+        message(FATAL_ERROR "No sources provided for target ${_TARGET_NAME}")
+    endif()
+
+    add_executable(${_TARGET_NAME} ${_add_cmocka_test_SOURCES})
+
+    if (DEFINED _add_cmocka_test_COMPILE_OPTIONS)
+        target_compile_options(${_TARGET_NAME}
+            PRIVATE ${_add_cmocka_test_COMPILE_OPTIONS}
+        )
+    endif()
+
+    if (DEFINED _add_cmocka_test_LINK_LIBRARIES)
+        target_link_libraries(${_TARGET_NAME}
+            PRIVATE ${_add_cmocka_test_LINK_LIBRARIES}
+        )
+    endif()
+
+    if (DEFINED _add_cmocka_test_LINK_OPTIONS)
+        set_target_properties(${_TARGET_NAME}
+            PROPERTIES LINK_FLAGS
+            ${_add_cmocka_test_LINK_OPTIONS}
+        )
+    endif()
+
+    add_test(${_TARGET_NAME}
+        ${TARGET_SYSTEM_EMULATOR} ${_TARGET_NAME}
+    )
+
 endfunction (ADD_CMOCKA_TEST)
index f214dfe30d56cc688191717c74c60f23cd2e7b8c..cfce3ee67c67f4a4a528d8add7072957ae7cba4c 100644 (file)
@@ -113,7 +113,11 @@ if (HAVE_LINUX_32BIT_SYSCALLS)
 endif (HAVE_LINUX_32BIT_SYSCALLS)
 
 foreach(_UWRAP_TEST ${UWRAP_TESTS})
-    add_cmocka_test(${_UWRAP_TEST} ${_UWRAP_TEST}.c ${TESTSUITE_LIBRARIES})
+    add_cmocka_test(${_UWRAP_TEST}
+                    SOURCES ${_UWRAP_TEST}.c
+                    COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS}
+                    LINK_LIBRARIES ${TESTSUITE_LIBRARIES}
+                    LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
 
     add_cmocka_test_environment(${_UWRAP_TEST} UID_WRAPPER_ROOT=1)
 endforeach()
@@ -124,30 +128,50 @@ target_compile_options(uwrap_enabled
                        PRIVATE
                            ${DEFAULT_C_COMPILE_FLAGS})
 
-add_cmocka_test(test_uwrap_enabled test_uwrap_enabled.c ${CMOCKA_LIBRARY} uwrap_enabled)
+add_cmocka_test(test_uwrap_enabled
+                SOURCES test_uwrap_enabled.c
+                COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS}
+                LINK_LIBRARIES ${TESTSUITE_LIBRARIES} uwrap_enabled
+                LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
 add_cmocka_test_environment(test_uwrap_enabled)
 
-add_cmocka_test(test_uwrap_disabled test_uwrap_disabled.c ${CMOCKA_LIBRARY})
+add_cmocka_test(test_uwrap_disabled
+                SOURCES test_uwrap_disabled.c
+                COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS}
+                LINK_LIBRARIES ${TESTSUITE_LIBRARIES}
+                LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
 set_property(
     TEST
         test_uwrap_disabled
     PROPERTY
         ENVIRONMENT LD_PRELOAD=${UID_WRAPPER_LOCATION})
 
-add_cmocka_test(test_thread_setuid test_thread_setuid.c ${CMOCKA_LIBRARY})
-target_link_libraries(test_thread_setuid ${CMAKE_THREAD_LIBS_INIT})
+add_cmocka_test(test_thread_setuid
+                SOURCES test_thread_setuid.c
+                COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS}
+                LINK_LIBRARIES ${TESTSUITE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
+                LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
 add_cmocka_test_environment(test_thread_setuid UID_WRAPPER_ROOT=1 CMOCKA_TEST_ABORT=1)
 
-add_cmocka_test(test_thread_setreuid test_thread_setreuid.c ${CMOCKA_LIBRARY})
-target_link_libraries(test_thread_setreuid ${CMAKE_THREAD_LIBS_INIT})
+add_cmocka_test(test_thread_setreuid
+                SOURCES test_thread_setreuid.c
+                COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS}
+                LINK_LIBRARIES ${TESTSUITE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
+                LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
 add_cmocka_test_environment(test_thread_setreuid UID_WRAPPER_ROOT=1 CMOCKA_TEST_ABORT=1)
 
-add_cmocka_test(test_thread_sync_setreuid test_thread_sync_setreuid.c ${CMOCKA_LIBRARY})
-target_link_libraries(test_thread_sync_setreuid ${CMAKE_THREAD_LIBS_INIT})
+add_cmocka_test(test_thread_sync_setreuid
+                SOURCES test_thread_sync_setreuid.c
+                COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS}
+                LINK_LIBRARIES ${TESTSUITE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
+                LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
 add_cmocka_test_environment(test_thread_sync_setreuid UID_WRAPPER_ROOT=1 CMOCKA_TEST_ABORT=1)
 
-add_cmocka_test(test_glibc_thread_support test_glibc_thread_support.c ${CMOCKA_LIBRARY})
-target_link_libraries(test_glibc_thread_support ${CMAKE_THREAD_LIBS_INIT})
+add_cmocka_test(test_glibc_thread_support
+                SOURCES test_glibc_thread_support.c
+                COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS}
+                LINK_LIBRARIES ${TESTSUITE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
+                LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
 add_cmocka_test_environment(test_glibc_thread_support UID_WRAPPER_ROOT=1 CMOCKA_TEST_ABORT=1)
 
 if (LINUX)