From a66da62626b22a445b3189f94ede39e4a70f43cb Mon Sep 17 00:00:00 2001 From: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de> Date: Fri, 19 Jul 2024 09:06:32 +0000 Subject: [PATCH] Update gtest_helper.cmake (icon-libraries/libfortran-support!38) This updates the `add_icon_c_test` macro in `cmake/gtest_helper.cmake`: 1. The macro is turned into a function to avoid namespace pollution. 2. The function is renamed to `fs_add_c_test`. 3. The function now accepts named options `SOURCES` (followed by a list of source files of the test) and `ARGS` (followed by a list of command-line arguments for the test). 4. The old signature of the macro is still supported, i.e. it is possible to call something like `add_c_test(UtilHashTest ctest_util_hash.cpp)`, but it made sense to me to switch to the new one. 5. The `UtilFileTest` test is now provided with an extra command-line argument and it runs on `${CMAKE_CURRENT_BINARY_DIR}` instead of `.` as it was before !28. Co-authored-by: Yen-Chen Chen <yen-chen.chen@kit.edu> Approved-by: Terry Cojean <terry.cojean@kit.edu> Merged-by: Yen-Chen Chen <yen-chen.chen@kit.edu> Changelog: other --- cmake/gtest_helper.cmake | 28 ++++++++++++++++++---------- test/c/CMakeLists.txt | 21 +++++++++++---------- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/cmake/gtest_helper.cmake b/cmake/gtest_helper.cmake index 0dc0509..b7f87f3 100644 --- a/cmake/gtest_helper.cmake +++ b/cmake/gtest_helper.cmake @@ -10,23 +10,31 @@ # --------------------------------------------------------------- # cmake-format: off -# add_icon_c_test(<test> -# <source>) +# fs_add_c_test(<test_name> +# [SOURCES <sources>] +# [ARGS <args>]) # cmake-format: on # ----------------------------------------------------------------------------- -# Compiles a test executable with the name <test> using the source code -# <source>. The googletest and fortran-support libraries will be linked -# automatically. +# Compiles a test executable with the name <test_name> using the source code +# <source>. Specify ctest arguments in <args> if necessary. The googletest and +# libfortran-support libraries will be linked automatically. # # The C++ standard is set to C++17. # -macro(add_icon_c_test test_name file_name) - add_executable("CTest_${test_name}" ${file_name}) +function(fs_add_c_test test_name) + + cmake_parse_arguments(PARSE_ARGV 1 ARG "" "" "SOURCES;ARGS") + if(NOT ARG_SOURCES) + set(ARG_SOURCES "${ARG_UNPARSED_ARGUMENTS}") + endif() + + add_executable("CTest_${test_name}" ${ARG_SOURCES}) target_link_libraries( "CTest_${test_name}" PRIVATE fortran-support::fortran-support - GTest::gtest_main) - add_test(NAME "CTest_${test_name}" COMMAND "CTest_${test_name}") + GTest::gtest_main stdc++fs) + add_test(NAME "CTest_${test_name}" COMMAND "CTest_${test_name}" ${ARG_ARGS}) set_property(TEST "CTest_${test_name}" PROPERTY LABELS C) set_target_properties("CTest_${test_name}" PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON) -endmacro() + +endfunction() diff --git a/test/c/CMakeLists.txt b/test/c/CMakeLists.txt index 4b6fc82..d525c67 100644 --- a/test/c/CMakeLists.txt +++ b/test/c/CMakeLists.txt @@ -44,7 +44,7 @@ endif() include("${PROJECT_SOURCE_DIR}/cmake/gtest_helper.cmake") if(FS_ENABLE_BACKTRACE_TEST) - add_icon_c_test(UtilBacktraceTest ctest_util_backtrace.cpp) + fs_add_c_test(UtilBacktraceTest SOURCES ctest_util_backtrace.cpp) endif() file( @@ -71,17 +71,18 @@ file( " floating_points -7.1, 1.0, 3.7, 8.9\n" " booleans .TRUE., .FALSE., .true.\n" " chars 'unit', 'test'\n") -add_icon_c_test(UtilNmlAnnotateTest ctest_nml_annotate.cpp) -add_icon_c_test(UtilArithmeticExprTest ctest_util_arithmetic_expr.cpp) -add_icon_c_test(UtilHashTest ctest_util_hash.cpp) -add_icon_c_test(UtilStrideTest ctest_util_stride.cpp) -add_icon_c_test(UtilStringParseTest ctest_util_string_parse.cpp) -add_icon_c_test(UtilSysinfoTest ctest_util_sysinfo.cpp) -add_icon_c_test(UtilSystemTest ctest_util_system.cpp) -add_icon_c_test(UtilTimerTest ctest_util_timer.cpp) +fs_add_c_test(UtilNmlAnnotateTest SOURCES ctest_nml_annotate.cpp) +fs_add_c_test(UtilArithmeticExprTest SOURCES ctest_util_arithmetic_expr.cpp) +fs_add_c_test(UtilHashTest SOURCES ctest_util_hash.cpp) +fs_add_c_test(UtilStrideTest SOURCES ctest_util_stride.cpp) +fs_add_c_test(UtilStringParseTest SOURCES ctest_util_string_parse.cpp) +fs_add_c_test(UtilSysinfoTest SOURCES ctest_util_sysinfo.cpp) +fs_add_c_test(UtilSystemTest SOURCES ctest_util_system.cpp) +fs_add_c_test(UtilTimerTest SOURCES ctest_util_timer.cpp) file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/util_file_test.txt" "This is a test file for unit tests for util_file.c\n") file(CREATE_LINK "${CMAKE_CURRENT_SOURCE_DIR}/util_file_test.txt" "${CMAKE_CURRENT_BINARY_DIR}/util_file_link.txt" SYMBOLIC) -add_icon_c_test(UtilFileTest ctest_util_file.cpp) +fs_add_c_test(UtilFileTest SOURCES ctest_util_file.cpp ARGS + "${CMAKE_CURRENT_BINARY_DIR}") -- GitLab