From a7d18f6e2bf284b4a8f614e7936d5639a730ab77 Mon Sep 17 00:00:00 2001 From: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de> Date: Tue, 7 Nov 2023 13:43:17 +0100 Subject: [PATCH 01/15] Get the headers right --- src/CMakeLists.txt | 6 +++-- src/util_arithmetic_expr.c | 2 +- ...hmetic_expr.hpp => util_arithmetic_expr.h} | 20 ++++++++++++++--- src/util_arithmetic_expr.rl | 2 +- src/util_file.h | 16 ++++++++++++++ src/util_hash.c | 2 ++ src/util_hash.h | 16 ++++++++++++++ .../c_test/ctest_util_arithmetic_expr.cpp | 3 +-- test/googletest/c_test/ctest_util_file.cpp | 2 +- test/googletest/c_test/ctest_util_hash.cpp | 2 +- test/googletest/include/external_function.hpp | 22 ------------------- 11 files changed, 60 insertions(+), 33 deletions(-) rename src/{util_arithmetic_expr.hpp => util_arithmetic_expr.h} (71%) create mode 100644 src/util_file.h create mode 100644 src/util_hash.h delete mode 100644 test/googletest/include/external_function.hpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d7db70a..0156a68 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -31,16 +31,18 @@ add_library(fortran-support mo_util_timer.f90 nml_annotate.c util_arithmetic_expr.c + util_arithmetic_expr.h util_backtrace.c + util_backtrace.h util_file.c + util_file.h util_hash.c + util_hash.h util_stride.c util_string_parse.c util_sysinfo.c util_system.c util_timer.c - util_arithmetic_expr.hpp - util_backtrace.h ${CMAKE_CURRENT_BINARY_DIR}/config.h ) diff --git a/src/util_arithmetic_expr.c b/src/util_arithmetic_expr.c index 01cf6b5..411944b 100644 --- a/src/util_arithmetic_expr.c +++ b/src/util_arithmetic_expr.c @@ -13,7 +13,7 @@ #include <stdlib.h> #include <string.h> #include <math.h> -#include "util_arithmetic_expr.hpp" +#include "util_arithmetic_expr.h" const char* const priorities = "(;><;+-;/*;^"; const char* const left_assoc = "><+-/*^"; diff --git a/src/util_arithmetic_expr.hpp b/src/util_arithmetic_expr.h similarity index 71% rename from src/util_arithmetic_expr.hpp rename to src/util_arithmetic_expr.h index 8aa75f7..b3f3f5d 100644 --- a/src/util_arithmetic_expr.hpp +++ b/src/util_arithmetic_expr.h @@ -1,5 +1,9 @@ -#ifndef UTIL_ARITHMETIC_EXPR_HPP -#define UTIL_ARITHMETIC_EXPR_HPP +#ifndef UTIL_ARITHMETIC_EXPR_H +#define UTIL_ARITHMETIC_EXPR_H + +#ifdef __cplusplus +extern "C" { +#endif #define MAX_BUF_LEN 1024 #define NUM_FCT 9 @@ -42,4 +46,14 @@ int do_parse_infix(const char *in_parse_line, struct t_list *data); /* accessor function for function name strings */ int get_fctname(const int id, char *string); -#endif /* UTIL_ARITHMETIC_EXPR_HPP */ +/* returns the priority of an arithmetic operator */ +int priority(char op); + +/* returns the associativity of an arithmetic operator */ +int left_associative(char op); + +#ifdef __cplusplus +} +#endif + +#endif // UTIL_ARITHMETIC_EXPR_H diff --git a/src/util_arithmetic_expr.rl b/src/util_arithmetic_expr.rl index 7bbfe6a..d2c8db6 100644 --- a/src/util_arithmetic_expr.rl +++ b/src/util_arithmetic_expr.rl @@ -11,7 +11,7 @@ #include <stdlib.h> #include <string.h> #include <math.h> -#include "util_arithmetic_expr.hpp" +#include "util_arithmetic_expr.h" const char* const priorities = "(;><;+-;/*;^"; const char* const left_assoc = "><+-/*^"; diff --git a/src/util_file.h b/src/util_file.h new file mode 100644 index 0000000..669a603 --- /dev/null +++ b/src/util_file.h @@ -0,0 +1,16 @@ +#ifndef UTIL_FILE_H +#define UTIL_FILE_H + +#ifdef __cplusplus +extern "C" { +#endif + +int util_islink(char *path); +long int util_filesize(char *filename); +int util_file_is_writable(char *filename); + +#ifdef __cplusplus +} +#endif + +#endif // UTIL_FILE_H diff --git a/src/util_hash.c b/src/util_hash.c index 503723e..3105a8a 100644 --- a/src/util_hash.c +++ b/src/util_hash.c @@ -88,6 +88,8 @@ #endif +#include "util_hash.h" + #define rot(x, k) (((x) << (k)) | ((x) >> (32 - (k)))) /* diff --git a/src/util_hash.h b/src/util_hash.h new file mode 100644 index 0000000..f99f18b --- /dev/null +++ b/src/util_hash.h @@ -0,0 +1,16 @@ +#ifndef UTIL_HASH_H +#define UTIL_HASH_H + +#include <stdint.h> + +#ifdef __cplusplus +extern "C" { +#endif + +uint32_t util_hashword(const void *key, size_t length, uint32_t initval); + +#ifdef __cplusplus +} +#endif + +#endif // UTIL_HASH_H diff --git a/test/googletest/c_test/ctest_util_arithmetic_expr.cpp b/test/googletest/c_test/ctest_util_arithmetic_expr.cpp index 922104d..401c815 100644 --- a/test/googletest/c_test/ctest_util_arithmetic_expr.cpp +++ b/test/googletest/c_test/ctest_util_arithmetic_expr.cpp @@ -1,7 +1,6 @@ #include <gtest/gtest.h> -#include <external_function.hpp> -#include <util_arithmetic_expr.hpp> +#include <util_arithmetic_expr.h> class UtilArithmeticExprTest : public ::testing::Test { protected: diff --git a/test/googletest/c_test/ctest_util_file.cpp b/test/googletest/c_test/ctest_util_file.cpp index 65ad9e2..bac068b 100644 --- a/test/googletest/c_test/ctest_util_file.cpp +++ b/test/googletest/c_test/ctest_util_file.cpp @@ -2,8 +2,8 @@ #include <string> #include <path_config.h> -#include <external_function.hpp> +#include <util_file.h> class UtilFileTest : public ::testing::Test {}; diff --git a/test/googletest/c_test/ctest_util_hash.cpp b/test/googletest/c_test/ctest_util_hash.cpp index 0d8cc05..eb128cc 100644 --- a/test/googletest/c_test/ctest_util_hash.cpp +++ b/test/googletest/c_test/ctest_util_hash.cpp @@ -3,7 +3,7 @@ #include <stdexcept> #include <string> -#include <external_function.hpp> +#include <util_hash.h> class UtilHashCTest : public ::testing::Test {}; diff --git a/test/googletest/include/external_function.hpp b/test/googletest/include/external_function.hpp deleted file mode 100644 index 85c4687..0000000 --- a/test/googletest/include/external_function.hpp +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef EXTERNAL_FUNCTION_HPP_ -#define EXTERNAL_FUNCTION_HPP_ - - -extern "C" { -// util_arithmetic_expr.c -int priority(char op); -int left_associative(char op); -int do_parse_infix(const char *in_parse_line, struct t_list *queue); -int get_fctname(const int id, char *string); - -// util_file.c -int util_islink(const char *path); -long int util_filesize(char *filename); -int util_file_is_writable(char *filename); - -// util_hash.c -uint32_t util_hashword(const void *, size_t, uint32_t); -} - - -#endif // EXTERNAL_FUNCTION_HPP_ \ No newline at end of file -- GitLab From 3811d48c8900b3161f6e14e890e8193402074097 Mon Sep 17 00:00:00 2001 From: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de> Date: Tue, 7 Nov 2023 15:01:04 +0100 Subject: [PATCH 02/15] Drop path_config.h.in --- test/googletest/c_test/CMakeLists.txt | 2 -- test/googletest/c_test/ctest_util_file.cpp | 28 +++++++++++++++------- test/googletest/c_test/path_config.h.in | 1 - 3 files changed, 19 insertions(+), 12 deletions(-) delete mode 100644 test/googletest/c_test/path_config.h.in diff --git a/test/googletest/c_test/CMakeLists.txt b/test/googletest/c_test/CMakeLists.txt index 598c2ee..e27f010 100644 --- a/test/googletest/c_test/CMakeLists.txt +++ b/test/googletest/c_test/CMakeLists.txt @@ -1,8 +1,6 @@ add_icon_c_test(UtilArithmeticExprTest ctest_util_arithmetic_expr.cpp) add_icon_c_test(UtilHashTest ctest_util_hash.cpp) -set(CurrentPath ${CMAKE_CURRENT_BINARY_DIR}) -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/path_config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/path_config.h") file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/test.txt" DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) file(CREATE_LINK "${CMAKE_CURRENT_SOURCE_DIR}/test.txt" "${CMAKE_CURRENT_BINARY_DIR}/link.txt" SYMBOLIC) add_icon_c_test(UtilFileTest ctest_util_file.cpp) diff --git a/test/googletest/c_test/ctest_util_file.cpp b/test/googletest/c_test/ctest_util_file.cpp index bac068b..a81b883 100644 --- a/test/googletest/c_test/ctest_util_file.cpp +++ b/test/googletest/c_test/ctest_util_file.cpp @@ -1,18 +1,18 @@ #include <gtest/gtest.h> #include <string> -#include <path_config.h> #include <util_file.h> +static std::string working_dir = "."; + class UtilFileTest : public ::testing::Test {}; TEST_F(UtilFileTest, FileIsLink) { - std::string path = current_path; - std::string file_notlink = path + "/test.txt"; - std::string file_islink = path + "/link.txt"; - std::string file_error = "./something.txt"; + std::string file_notlink = working_dir + "/test.txt"; + std::string file_islink = working_dir + "/link.txt"; + std::string file_error = working_dir + "/something.txt"; char *file_cstr; file_cstr = &file_notlink[0]; @@ -25,8 +25,7 @@ TEST_F(UtilFileTest, FileIsLink) { TEST_F(UtilFileTest, CanGetFileSize) { - std::string path = current_path; - std::string file = path + "/test.txt"; + std::string file = working_dir + "/test.txt"; char *file_cstr; file_cstr = &file[0]; @@ -36,11 +35,22 @@ TEST_F(UtilFileTest, CanGetFileSize) { TEST_F(UtilFileTest, CheckFileWritable) { - std::string path = current_path; - std::string file = path + "/test.txt"; + std::string file = working_dir + "/test.txt"; char *file_cstr; file_cstr = &file[0]; EXPECT_EQ(util_file_is_writable(file_cstr), 1); } + +int main(int argc, char** argv) { + ::testing::InitGoogleTest(&argc, argv); + + if (argc > 1) { + working_dir = argv[1]; + } + + std::cout << "Working directory: " << working_dir << std::endl; + + return RUN_ALL_TESTS(); +} diff --git a/test/googletest/c_test/path_config.h.in b/test/googletest/c_test/path_config.h.in deleted file mode 100644 index a3b62bb..0000000 --- a/test/googletest/c_test/path_config.h.in +++ /dev/null @@ -1 +0,0 @@ -#define current_path "@CurrentPath@" -- GitLab From 31400f1bb7c4021d297c9e8f47afc7433736c6d3 Mon Sep 17 00:00:00 2001 From: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de> Date: Tue, 7 Nov 2023 15:14:50 +0100 Subject: [PATCH 03/15] Avoid keeping a file in the repo --- test/googletest/c_test/CMakeLists.txt | 6 ++++-- test/googletest/c_test/test.txt | 1 - 2 files changed, 4 insertions(+), 3 deletions(-) delete mode 100644 test/googletest/c_test/test.txt diff --git a/test/googletest/c_test/CMakeLists.txt b/test/googletest/c_test/CMakeLists.txt index e27f010..9e9351f 100644 --- a/test/googletest/c_test/CMakeLists.txt +++ b/test/googletest/c_test/CMakeLists.txt @@ -1,6 +1,8 @@ add_icon_c_test(UtilArithmeticExprTest ctest_util_arithmetic_expr.cpp) add_icon_c_test(UtilHashTest ctest_util_hash.cpp) -file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/test.txt" DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) -file(CREATE_LINK "${CMAKE_CURRENT_SOURCE_DIR}/test.txt" "${CMAKE_CURRENT_BINARY_DIR}/link.txt" SYMBOLIC) +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/test.txt" + "This is a test file for unit tests for util_file.c\n") +file(CREATE_LINK "${CMAKE_CURRENT_SOURCE_DIR}/test.txt" + "${CMAKE_CURRENT_BINARY_DIR}/link.txt" SYMBOLIC) add_icon_c_test(UtilFileTest ctest_util_file.cpp) diff --git a/test/googletest/c_test/test.txt b/test/googletest/c_test/test.txt deleted file mode 100644 index 4b34f50..0000000 --- a/test/googletest/c_test/test.txt +++ /dev/null @@ -1 +0,0 @@ -This is a test file for unit tests for util_file.c -- GitLab From 93d22a17078efa901abf33a3e856bb874128ea0a Mon Sep 17 00:00:00 2001 From: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de> Date: Tue, 7 Nov 2023 15:18:38 +0100 Subject: [PATCH 04/15] Clearer test file naming --- test/googletest/c_test/CMakeLists.txt | 6 +++--- test/googletest/c_test/ctest_util_file.cpp | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/test/googletest/c_test/CMakeLists.txt b/test/googletest/c_test/CMakeLists.txt index 9e9351f..a58e99c 100644 --- a/test/googletest/c_test/CMakeLists.txt +++ b/test/googletest/c_test/CMakeLists.txt @@ -1,8 +1,8 @@ add_icon_c_test(UtilArithmeticExprTest ctest_util_arithmetic_expr.cpp) add_icon_c_test(UtilHashTest ctest_util_hash.cpp) -file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/test.txt" +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}/test.txt" - "${CMAKE_CURRENT_BINARY_DIR}/link.txt" SYMBOLIC) +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) diff --git a/test/googletest/c_test/ctest_util_file.cpp b/test/googletest/c_test/ctest_util_file.cpp index a81b883..6cef0e3 100644 --- a/test/googletest/c_test/ctest_util_file.cpp +++ b/test/googletest/c_test/ctest_util_file.cpp @@ -10,9 +10,9 @@ class UtilFileTest : public ::testing::Test {}; TEST_F(UtilFileTest, FileIsLink) { - std::string file_notlink = working_dir + "/test.txt"; - std::string file_islink = working_dir + "/link.txt"; - std::string file_error = working_dir + "/something.txt"; + std::string file_notlink = working_dir + "/util_file_test.txt"; + std::string file_islink = working_dir + "/util_file_link.txt"; + std::string file_error = working_dir + "/util_file_noexist.txt"; char *file_cstr; file_cstr = &file_notlink[0]; @@ -25,7 +25,7 @@ TEST_F(UtilFileTest, FileIsLink) { TEST_F(UtilFileTest, CanGetFileSize) { - std::string file = working_dir + "/test.txt"; + std::string file = working_dir + "/util_file_test.txt"; char *file_cstr; file_cstr = &file[0]; @@ -35,7 +35,7 @@ TEST_F(UtilFileTest, CanGetFileSize) { TEST_F(UtilFileTest, CheckFileWritable) { - std::string file = working_dir + "/test.txt"; + std::string file = working_dir + "/util_file_test.txt"; char *file_cstr; file_cstr = &file[0]; -- GitLab From c858dd81d46a0720e227b69642430b1c0bb27c27 Mon Sep 17 00:00:00 2001 From: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de> Date: Tue, 7 Nov 2023 15:23:59 +0100 Subject: [PATCH 05/15] Remove yet unused CMake macros --- cmake/gtest_helper.cmake | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/cmake/gtest_helper.cmake b/cmake/gtest_helper.cmake index bcd4c73..cec3143 100644 --- a/cmake/gtest_helper.cmake +++ b/cmake/gtest_helper.cmake @@ -6,21 +6,3 @@ macro(add_icon_c_test test_name file_name) set_property(TEST "CTest_${test_name}" PROPERTY LABELS C) endmacro() - -macro(add_icon_fortran_test test_name file_name) - add_executable("FTest_${test_name}" ${file_name}) - target_include_directories("FTest_${test_name}" SYSTEM AFTER PUBLIC "${PROJECT_SOURCE_DIR}/test/googletest/include") - target_link_libraries("FTest_${test_name}" PRIVATE FTest_C_Binding fortran-support gtest gtest_main) - add_test(NAME "FTest_${test_name}" COMMAND "FTest_${test_name}") - set_property(TEST "FTest_${test_name}" - PROPERTY LABELS Fortran) -endmacro() - -macro(add_icon_fortran_c_test test_name file_name) - add_executable("FCTest_${test_name}" ${file_name}) - target_include_directories("FCTest_${test_name}" SYSTEM AFTER PUBLIC "${PROJECT_SOURCE_DIR}/test/googletest/include") - target_link_libraries("FCTest_${test_name}" PRIVATE FTest_C_Binding fortran-support gtest gtest_main) - add_test(NAME "FCTest_${test_name}" COMMAND "FCTest_${test_name}") - set_property(TEST "FCTest_${test_name}" - PROPERTY LABELS Fortran/C) -endmacro() -- GitLab From d680b0d7ae3a8f4a93e7b162c879e51438561cc5 Mon Sep 17 00:00:00 2001 From: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de> Date: Tue, 7 Nov 2023 15:25:30 +0100 Subject: [PATCH 06/15] Get test dependencies right --- cmake/gtest_helper.cmake | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/cmake/gtest_helper.cmake b/cmake/gtest_helper.cmake index cec3143..9c11d98 100644 --- a/cmake/gtest_helper.cmake +++ b/cmake/gtest_helper.cmake @@ -1,8 +1,6 @@ macro(add_icon_c_test test_name file_name) add_executable("CTest_${test_name}" ${file_name}) - target_include_directories("CTest_${test_name}" SYSTEM AFTER PUBLIC "${PROJECT_SOURCE_DIR}/test/googletest/include" ${CMAKE_CURRENT_BINARY_DIR}) - target_link_libraries("CTest_${test_name}" PRIVATE fortran-support gtest gtest_main) + target_link_libraries("CTest_${test_name}" PRIVATE fortran-support::fortran-support GTest::gtest_main) add_test(NAME "CTest_${test_name}" COMMAND "CTest_${test_name}") - set_property(TEST "CTest_${test_name}" - PROPERTY LABELS C) + set_property(TEST "CTest_${test_name}" PROPERTY LABELS C) endmacro() -- GitLab From 1fbcbb6527257190599b698a509ef747e1f0199c Mon Sep 17 00:00:00 2001 From: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de> Date: Tue, 7 Nov 2023 15:39:06 +0100 Subject: [PATCH 07/15] Set C++ standard for the tests --- cmake/gtest_helper.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/gtest_helper.cmake b/cmake/gtest_helper.cmake index 9c11d98..f5a061d 100644 --- a/cmake/gtest_helper.cmake +++ b/cmake/gtest_helper.cmake @@ -3,4 +3,5 @@ macro(add_icon_c_test test_name file_name) target_link_libraries("CTest_${test_name}" PRIVATE fortran-support::fortran-support GTest::gtest_main) add_test(NAME "CTest_${test_name}" COMMAND "CTest_${test_name}") set_property(TEST "CTest_${test_name}" PROPERTY LABELS C) + set_target_properties("CTest_${test_name}" PROPERTIES CXX_STANDARD 11 CXX_STANDARD_REQUIRED ON) endmacro() -- GitLab From f9cc3bd6fe4e24e8464f059b49cb0a9fe8bfe5c9 Mon Sep 17 00:00:00 2001 From: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de> Date: Tue, 7 Nov 2023 17:47:04 +0100 Subject: [PATCH 08/15] CMake script formatting --- test/fortran/CMakeLists.txt | 15 +++++++-------- test/googletest/CMakeLists.txt | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/test/fortran/CMakeLists.txt b/test/fortran/CMakeLists.txt index 9ea9900..eb911f3 100644 --- a/test/fortran/CMakeLists.txt +++ b/test/fortran/CMakeLists.txt @@ -10,16 +10,15 @@ FetchContent_Declare(fortutf FetchContent_MakeAvailable(fortutf) message(CHECK_PASS "done") -SET(FORTUTF_PROJECT_TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}) -SET(FORTUTF_PROJECT_SRC_LIBRARY ${PROJECT_NAME}::fortran-support) -SET(FORTUTF_PROJECT_SRC_FILES helpers.f90) +set(FORTUTF_PROJECT_TEST_DIR "${CMAKE_CURRENT_SOURCE_DIR}") +set(FORTUTF_PROJECT_SRC_LIBRARY fortran-support::fortran-support) +set(FORTUTF_PROJECT_SRC_FILES helpers.f90) -INCLUDE(${fortutf_SOURCE_DIR}/cmake/fortutf.cmake) +include("${fortutf_SOURCE_DIR}/cmake/fortutf.cmake") # We have to prevent FortUTF from generating invalid Fortran code: -SET(project_name ${PROJECT_NAME}) +set(project_name ${PROJECT_NAME}) string(REPLACE "-" "_" PROJECT_NAME ${PROJECT_NAME}) FortUTF_Find_Tests() -SET(PROJECT_NAME ${project_name}) -add_test(NAME FortUTF_UnitTest - COMMAND fortran_support_Tests) +set(PROJECT_NAME ${project_name}) +add_test(NAME FortUTF_UnitTest COMMAND fortran_support_Tests) diff --git a/test/googletest/CMakeLists.txt b/test/googletest/CMakeLists.txt index c9e00d0..dabc9d5 100644 --- a/test/googletest/CMakeLists.txt +++ b/test/googletest/CMakeLists.txt @@ -1,3 +1,3 @@ -include(${PROJECT_SOURCE_DIR}/cmake/gtest_helper.cmake) +include("${PROJECT_SOURCE_DIR}/cmake/gtest_helper.cmake") add_subdirectory(c_test) -- GitLab From 3df48ac04a6dbc2e2282d31b50297c9fbb62b350 Mon Sep 17 00:00:00 2001 From: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de> Date: Tue, 7 Nov 2023 17:49:46 +0100 Subject: [PATCH 09/15] Rename test/googletest/c_test to test/c --- test/CMakeLists.txt | 2 +- test/{googletest/c_test => c}/CMakeLists.txt | 2 ++ test/{googletest/c_test => c}/ctest_util_arithmetic_expr.cpp | 0 test/{googletest/c_test => c}/ctest_util_file.cpp | 0 test/{googletest/c_test => c}/ctest_util_hash.cpp | 0 test/googletest/CMakeLists.txt | 3 --- 6 files changed, 3 insertions(+), 4 deletions(-) rename test/{googletest/c_test => c}/CMakeLists.txt (87%) rename test/{googletest/c_test => c}/ctest_util_arithmetic_expr.cpp (100%) rename test/{googletest/c_test => c}/ctest_util_file.cpp (100%) rename test/{googletest/c_test => c}/ctest_util_hash.cpp (100%) delete mode 100644 test/googletest/CMakeLists.txt diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index b66ae95..4d4b8f6 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -17,4 +17,4 @@ if(NOT GTest_FOUND) endif() add_subdirectory(fortran) -add_subdirectory(googletest) +add_subdirectory(c) diff --git a/test/googletest/c_test/CMakeLists.txt b/test/c/CMakeLists.txt similarity index 87% rename from test/googletest/c_test/CMakeLists.txt rename to test/c/CMakeLists.txt index a58e99c..dd62743 100644 --- a/test/googletest/c_test/CMakeLists.txt +++ b/test/c/CMakeLists.txt @@ -1,3 +1,5 @@ +include("${PROJECT_SOURCE_DIR}/cmake/gtest_helper.cmake") + add_icon_c_test(UtilArithmeticExprTest ctest_util_arithmetic_expr.cpp) add_icon_c_test(UtilHashTest ctest_util_hash.cpp) diff --git a/test/googletest/c_test/ctest_util_arithmetic_expr.cpp b/test/c/ctest_util_arithmetic_expr.cpp similarity index 100% rename from test/googletest/c_test/ctest_util_arithmetic_expr.cpp rename to test/c/ctest_util_arithmetic_expr.cpp diff --git a/test/googletest/c_test/ctest_util_file.cpp b/test/c/ctest_util_file.cpp similarity index 100% rename from test/googletest/c_test/ctest_util_file.cpp rename to test/c/ctest_util_file.cpp diff --git a/test/googletest/c_test/ctest_util_hash.cpp b/test/c/ctest_util_hash.cpp similarity index 100% rename from test/googletest/c_test/ctest_util_hash.cpp rename to test/c/ctest_util_hash.cpp diff --git a/test/googletest/CMakeLists.txt b/test/googletest/CMakeLists.txt deleted file mode 100644 index dabc9d5..0000000 --- a/test/googletest/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -include("${PROJECT_SOURCE_DIR}/cmake/gtest_helper.cmake") - -add_subdirectory(c_test) -- GitLab From 52566e0461efffbd1f93f91f7f76b72ecfda38f9 Mon Sep 17 00:00:00 2001 From: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de> Date: Tue, 7 Nov 2023 17:54:09 +0100 Subject: [PATCH 10/15] Check and fetch GTest where needed --- test/CMakeLists.txt | 18 ------------------ test/c/CMakeLists.txt | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 4d4b8f6..6eadca6 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,20 +1,2 @@ -include(FetchContent) -enable_language(CXX) - -find_package(GTest 1.13) -if(NOT GTest_FOUND) - message(CHECK_START "Fetching external GTest") - if ("${CMAKE_VERSION}" VERSION_GREATER_EQUAL "3.24") - cmake_policy(SET CMP0135 NEW) - endif() - FetchContent_Declare(googletest - URL https://github.com/google/googletest/archive/refs/tags/v1.13.0.tar.gz - URL_HASH MD5=95b29f0038ec84a611df951d74d99897 - ) - set(INSTALL_GTEST OFF CACHE BOOL "Do not install GTest") - FetchContent_MakeAvailable(googletest) - message(CHECK_PASS "done") -endif() - add_subdirectory(fortran) add_subdirectory(c) diff --git a/test/c/CMakeLists.txt b/test/c/CMakeLists.txt index dd62743..5926488 100644 --- a/test/c/CMakeLists.txt +++ b/test/c/CMakeLists.txt @@ -1,3 +1,21 @@ +enable_language(CXX) + +find_package(GTest 1.13) +if(NOT GTest_FOUND) + message(CHECK_START "Fetching external GTest") + if ("${CMAKE_VERSION}" VERSION_GREATER_EQUAL "3.24") + cmake_policy(SET CMP0135 NEW) + endif() + include(FetchContent) + FetchContent_Declare(googletest + URL https://github.com/google/googletest/archive/refs/tags/v1.13.0.tar.gz + URL_HASH MD5=95b29f0038ec84a611df951d74d99897 + ) + set(INSTALL_GTEST OFF CACHE BOOL "Do not install GTest") + FetchContent_MakeAvailable(googletest) + message(CHECK_PASS "done") +endif() + include("${PROJECT_SOURCE_DIR}/cmake/gtest_helper.cmake") add_icon_c_test(UtilArithmeticExprTest ctest_util_arithmetic_expr.cpp) -- GitLab From 539825fe1f1207321eb09a245dba07fcb3c308bd Mon Sep 17 00:00:00 2001 From: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de> Date: Tue, 7 Nov 2023 19:18:46 +0100 Subject: [PATCH 11/15] Fix 'make test' when -DBUILD_TESTING=OFF --- CMakeLists.txt | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 95b1272..d7da026 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.18) project(fortran-support VERSION 0.1.0 LANGUAGES Fortran C) option(BUILD_SHARED_LIBS "Build shared libraries" ON) -option(BUILD_TESTING "Generate build files for unit tests" ON) +option(BUILD_TESTING "Build tests" ON) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING @@ -12,10 +12,17 @@ if(NOT CMAKE_BUILD_TYPE) endif(NOT CMAKE_BUILD_TYPE) include(GNUInstallDirs) -include(CTest) add_subdirectory(src) +include(CTest) +if(BUILD_TESTING) + add_subdirectory(test) +else() + # Allow for 'make test' even if the tests are disabled: + enable_testing() +endif() + export( EXPORT "${PROJECT_NAME}-targets" FILE "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-targets.cmake" @@ -49,11 +56,6 @@ install( "${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/cmake" ) -if(BUILD_TESTING) - enable_testing() - add_subdirectory(test) -endif() - include("${PROJECT_SOURCE_DIR}/cmake/list_sources.cmake") # Collect source files of the project: -- GitLab From c26c782ebf62670445c1e9be1129476b4c51104a Mon Sep 17 00:00:00 2001 From: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de> Date: Tue, 7 Nov 2023 20:08:21 +0100 Subject: [PATCH 12/15] Avoid building libFortUTF --- test/fortran/CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/test/fortran/CMakeLists.txt b/test/fortran/CMakeLists.txt index eb911f3..ce45562 100644 --- a/test/fortran/CMakeLists.txt +++ b/test/fortran/CMakeLists.txt @@ -7,7 +7,13 @@ FetchContent_Declare(fortutf URL https://github.com/artemis-beta/FortUTF/archive/10ea512e4b21fe9157ed838b037210874fbe92eb.tar.gz URL_HASH MD5=f1a5f9733553b32f2c6297c45b7c3f13 ) -FetchContent_MakeAvailable(fortutf) +# We do not need libFortUTF and want to avoid the redundant building of the +# library. Therefore, we do not call FetchContent_MakeAvailable(fortutf), which +# adds ${fortutf_SOURCE_DIR} as a subdirectory: +FetchContent_GetProperties(fortutf) +if(NOT fortutf_POPULATED) + FetchContent_Populate(fortutf) +endif() message(CHECK_PASS "done") set(FORTUTF_PROJECT_TEST_DIR "${CMAKE_CURRENT_SOURCE_DIR}") -- GitLab From ae897cbc6d2351e099396b0ec5e08098de773ff4 Mon Sep 17 00:00:00 2001 From: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de> Date: Mon, 23 Oct 2023 20:43:00 +0200 Subject: [PATCH 13/15] Targeted header and module search path flags --- src/CMakeLists.txt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0156a68..f44d1e8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -62,12 +62,17 @@ set_target_properties(fortran-support target_include_directories(fortran-support PUBLIC - $<BUILD_INTERFACE:${Fortran_MODULE_DIRECTORY}> - $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> +# Path to the Fortran modules: + $<BUILD_INTERFACE:$<$<COMPILE_LANGUAGE:Fortran>:${Fortran_MODULE_DIRECTORY}>> + $<INSTALL_INTERFACE:$<$<COMPILE_LANGUAGE:Fortran>:${CMAKE_INSTALL_INCLUDEDIR}>> INTERFACE - $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> +# Path to the internal C/C++ headers (for testing): + $<BUILD_INTERFACE:$<$<COMPILE_LANGUAGE:C>:${CMAKE_CURRENT_SOURCE_DIR}>> + $<BUILD_INTERFACE:$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}>> PRIVATE - $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}> +# Path to config.h (for C and C++ only): + $<BUILD_INTERFACE:$<$<COMPILE_LANGUAGE:C>:${CMAKE_CURRENT_BINARY_DIR}>> + $<BUILD_INTERFACE:$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_BINARY_DIR}>> ) install( -- GitLab From 56ff1ec3f21ac85cd956ae1de888aa19ebb75d0c Mon Sep 17 00:00:00 2001 From: Terry Cojean <terry.cojean@kit.edu> Date: Thu, 26 Oct 2023 08:59:54 +0000 Subject: [PATCH 14/15] Collapse the generator expressions --- src/CMakeLists.txt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f44d1e8..bedf0a3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -67,12 +67,10 @@ target_include_directories(fortran-support $<INSTALL_INTERFACE:$<$<COMPILE_LANGUAGE:Fortran>:${CMAKE_INSTALL_INCLUDEDIR}>> INTERFACE # Path to the internal C/C++ headers (for testing): - $<BUILD_INTERFACE:$<$<COMPILE_LANGUAGE:C>:${CMAKE_CURRENT_SOURCE_DIR}>> - $<BUILD_INTERFACE:$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}>> + $<BUILD_INTERFACE:$<$<COMPILE_LANGUAGE:C,CXX>:${CMAKE_CURRENT_SOURCE_DIR}>> PRIVATE # Path to config.h (for C and C++ only): - $<BUILD_INTERFACE:$<$<COMPILE_LANGUAGE:C>:${CMAKE_CURRENT_BINARY_DIR}>> - $<BUILD_INTERFACE:$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_BINARY_DIR}>> + $<BUILD_INTERFACE:$<$<COMPILE_LANGUAGE:C,CXX>:${CMAKE_CURRENT_BINARY_DIR}>> ) install( -- GitLab From 182493be190c665660aa18717b07bc5662059ab6 Mon Sep 17 00:00:00 2001 From: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de> Date: Tue, 7 Nov 2023 20:43:39 +0100 Subject: [PATCH 15/15] Prevent GTest from polluting the top build directory --- test/c/CMakeLists.txt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/test/c/CMakeLists.txt b/test/c/CMakeLists.txt index 5926488..953f455 100644 --- a/test/c/CMakeLists.txt +++ b/test/c/CMakeLists.txt @@ -11,8 +11,19 @@ if(NOT GTest_FOUND) URL https://github.com/google/googletest/archive/refs/tags/v1.13.0.tar.gz URL_HASH MD5=95b29f0038ec84a611df951d74d99897 ) - set(INSTALL_GTEST OFF CACHE BOOL "Do not install GTest") + set(INSTALL_GTEST OFF CACHE BOOL "Disable installation of googletest") + set(BUILD_GMOCK OFF CACHE BOOL "Do not build the googlemock subproject") FetchContent_MakeAvailable(googletest) + # GTest puts its build artifacts to ${CMAKE_BINARY_DIR} instead of + # ${CMAKE_CURRENT_BINARY_DIR}. Therefore, we have to make it behave: + set_target_properties(gtest_main gtest + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${googletest_BINARY_DIR}/bin" + LIBRARY_OUTPUT_DIRECTORY "${googletest_BINARY_DIR}/lib" + ARCHIVE_OUTPUT_DIRECTORY "${googletest_BINARY_DIR}/lib" + PDB_OUTPUT_DIRECTORY "${googletest_BINARY_DIR}/bin" + COMPILE_PDB_OUTPUT_DIRECTORY "${googletest_BINARY_DIR}/lib" + ) message(CHECK_PASS "done") endif() -- GitLab