From 81d02924ffea01b148da78cce5d49a96e340544e Mon Sep 17 00:00:00 2001 From: jmcarcell Date: Wed, 17 Apr 2024 09:28:40 +0200 Subject: [PATCH 1/4] Use LD_LIBRARY_PATH instead of DL_PATHS for Catch2 tests --- tests/unittests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unittests/CMakeLists.txt b/tests/unittests/CMakeLists.txt index 5aa2db37e..7f103ac2d 100644 --- a/tests/unittests/CMakeLists.txt +++ b/tests/unittests/CMakeLists.txt @@ -88,9 +88,9 @@ else() WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} TEST_PREFIX "UT_" # make it possible to filter easily with -R ^UT TEST_SPEC ${filter_tests} # discover only tests that are known to not fail - DL_PATHS ${CMAKE_CURRENT_BINARY_DIR}:${PROJECT_BINARY_DIR}/src:${PROJECT_BINARY_DIR}/tests:$:$<$:$>:$ENV{LD_LIBRARY_PATH} PROPERTIES ENVIRONMENT + LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}:${PROJECT_BINARY_DIR}/src:${PROJECT_BINARY_DIR}/tests:$:$<$:$>:$ENV{LD_LIBRARY_PATH} PODIO_SIOBLOCK_PATH=${CMAKE_CURRENT_BINARY_DIR} ) endif() From f18dc50af5c33868773a645ac4cdbd96cadfb3d2 Mon Sep 17 00:00:00 2001 From: jmcarcell Date: Thu, 18 Apr 2024 15:16:34 +0200 Subject: [PATCH 2/4] Add a message when PODIO_SIOBLOCK_PATH is set but no library is found --- src/SIOBlock.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/SIOBlock.cc b/src/SIOBlock.cc index 4645d2a74..8dea9105b 100644 --- a/src/SIOBlock.cc +++ b/src/SIOBlock.cc @@ -165,6 +165,11 @@ std::vector> SIOBlockLibraryLoader::getLibN libs.emplace_back(std::move(filename), dir); } } + if (std::getenv("PODIO_SIOBLOCK_PATH") && libs.empty()) { + throw std::runtime_error( + "No SIOBlocks libraries found in PODIO_SIOBLOCK_PATH. Please set PODIO_SIOBLOCK_PATH to the directory " + "containing the SIOBlocks libraries or unset it to fallback to LD_LIBRARY_PATH."); + } } return libs; From bbd8b2d42211b44f2ace128fe131f69f0802a870 Mon Sep 17 00:00:00 2001 From: jmcarcell Date: Thu, 18 Apr 2024 15:17:21 +0200 Subject: [PATCH 3/4] Set PODIO_SIOBLOCK_PATH to PROJECT_BINARY_DIR/tests where *SioBlocks.so is --- tests/unittests/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/unittests/CMakeLists.txt b/tests/unittests/CMakeLists.txt index 7f103ac2d..8f6607ae8 100644 --- a/tests/unittests/CMakeLists.txt +++ b/tests/unittests/CMakeLists.txt @@ -89,8 +89,9 @@ else() TEST_PREFIX "UT_" # make it possible to filter easily with -R ^UT TEST_SPEC ${filter_tests} # discover only tests that are known to not fail PROPERTIES + ENVIRONMENT + PODIO_SIOBLOCK_PATH=${PROJECT_BINARY_DIR}/tests ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}:${PROJECT_BINARY_DIR}/src:${PROJECT_BINARY_DIR}/tests:$:$<$:$>:$ENV{LD_LIBRARY_PATH} - PODIO_SIOBLOCK_PATH=${CMAKE_CURRENT_BINARY_DIR} ) endif() From 852b0e29eb4e570623d095c630eec736b8a3e2bd Mon Sep 17 00:00:00 2001 From: jmcarcell Date: Thu, 18 Apr 2024 18:45:45 +0200 Subject: [PATCH 4/4] Remove the SKIP_CATCH_DISCOVERY option --- tests/unittests/CMakeLists.txt | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/tests/unittests/CMakeLists.txt b/tests/unittests/CMakeLists.txt index 8f6607ae8..e57da8103 100644 --- a/tests/unittests/CMakeLists.txt +++ b/tests/unittests/CMakeLists.txt @@ -61,21 +61,11 @@ if (NOT FORCE_RUN_ALL_TESTS) endif() endif() -option(SKIP_CATCH_DISCOVERY "Skip the Catch2 test discovery" OFF) - -# To work around https://github.com/catchorg/Catch2/issues/2424 we need the -# DL_PATH argument for catch_discoer_tests which requires CMake 3.22 at least -# The whole issue can be avoided if we skip the catch test discovery and set the -# environment on our own -if (CMAKE_VERSION VERSION_LESS 3.22) - set(SKIP_CATCH_DISCOVERY ON) -endif() - -if (USE_SANITIZER MATCHES "Memory(WithOrigin)?" OR SKIP_CATCH_DISCOVERY) +if (USE_SANITIZER MATCHES "Memory(WithOrigin)?") # Automatic test discovery fails with Memory sanitizers due to some issues in # Catch2. So in that case we skip the discovery step and simply run the thing # directly in the tests. - if (FORCE_RUN_ALL_TESTS OR SKIP_CATCH_DISCOVERY) + if (FORCE_RUN_ALL_TESTS) # Unfortunately Memory sanitizer seems to be really unhappy with Catch2 and # it fails to successfully launch the executable and execute any test. Here # we just include them in order to have them show up as failing