From 27603b0eb1fd603cfae2e8faf338cbd008e6713f Mon Sep 17 00:00:00 2001
From: Lars Bilke <lars.bilke@ufz.de>
Date: Fri, 11 Dec 2020 10:03:13 +0100
Subject: [PATCH] [CMake] Better ctest dependency handling.

Allows for e.g. utils only tests with:

```
-DOGS_BUILD_UTILS=ON -DOGS_BUILD_CLI=OFF
```

EXECUTABLE argument is now required on AddTest().
---
 Applications/Utils/Tests.cmake     |  3 +++
 Tests/CMakeLists.txt               |  9 +++++++++
 scripts/cmake/ProcessesSetup.cmake |  3 +++
 scripts/cmake/test/AddTest.cmake   | 13 ++++++++-----
 scripts/cmake/test/Test.cmake      |  6 ------
 5 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/Applications/Utils/Tests.cmake b/Applications/Utils/Tests.cmake
index ef19eaa01af..9834ef9e50f 100644
--- a/Applications/Utils/Tests.cmake
+++ b/Applications/Utils/Tests.cmake
@@ -321,6 +321,9 @@ if(PARSL AND NOT OGS_USE_MPI)
         set_tests_properties(parsl_ExtractBoundary PROPERTIES DEPENDS snakemake_ExtractBoundary)
     endif()
 endif()
+if(SNAKEMAKE OR PARSL)
+    add_dependencies(ctest ExtractBoundary)
+endif()
 
 AddTest(
     NAME partmesh_with_field_data
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 781ba82d01a..839c744031d 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -3,6 +3,15 @@ if(OGS_USE_XDMF)
     add_subdirectory(xdmfdiff)
 endif()
 
+### ctest dependencies
+foreach(tool vtkdiff xdmfdiff)
+    if(TARGET ${tool})
+        list(APPEND test_dependencies ${tool})
+    endif()
+endforeach()
+add_dependencies(ctest ${test_dependencies})
+add_dependencies(ctest-large ${test_dependencies})
+
 ### testrunner ###
 include(${PROJECT_SOURCE_DIR}/scripts/cmake/OGSEnabledElements.cmake)
 
diff --git a/scripts/cmake/ProcessesSetup.cmake b/scripts/cmake/ProcessesSetup.cmake
index 13891791ed8..2396068b695 100644
--- a/scripts/cmake/ProcessesSetup.cmake
+++ b/scripts/cmake/ProcessesSetup.cmake
@@ -33,6 +33,9 @@ set(OGS_BUILD_PROCESSES
     CACHE STRING "Semicolon-separated list of processes to build")
 if(NOT OGS_BUILD_CLI)
     set(OGS_BUILD_PROCESSES OFF "" CACHE INTERNAL "")
+    message(STATUS "ATTENTION: OGS_BUILD_CLI=OFF -> OGS_BUILD_PROCESSES is set to OFF too.\n"
+        "   If cli is switched on again, remember to switch processes back to on \n"
+        "   too with -DOGS_BUILD_PROCESSES=\"\"!")
 endif()
 if(NOT "${OGS_BUILD_PROCESSES}" STREQUAL "")
     if(${OGS_BUILD_PROCESSES})
diff --git a/scripts/cmake/test/AddTest.cmake b/scripts/cmake/test/AddTest.cmake
index ddca63d31ba..98dc13fffbf 100644
--- a/scripts/cmake/test/AddTest.cmake
+++ b/scripts/cmake/test/AddTest.cmake
@@ -60,7 +60,7 @@ function (AddTest)
 
     # set defaults
     if(NOT DEFINED AddTest_EXECUTABLE)
-        set(AddTest_EXECUTABLE ogs)
+        message(FATAL_ERROR "Test ${AddTest_NAME}: No EXECUTABLE set!")
     endif()
     if (NOT DEFINED AddTest_REQUIREMENTS)
         set(AddTest_REQUIREMENTS TRUE)
@@ -82,6 +82,11 @@ function (AddTest)
     endif()
 
     # --- Implement wrappers ---
+    # check if exe is part of build
+    if(NOT TARGET ${AddTest_EXECUTABLE})
+        set(DISABLED_TESTS_LOG "${DISABLED_TESTS_LOG}\nTest exe ${AddTest_EXECUTABLE} not built! Disabling test ${AddTest_NAME}." CACHE INTERNAL "")
+        return()
+    endif()
     # check requirements, disable if not met
     if(${AddTest_REQUIREMENTS})
         message(DEBUG "Enabling test ${AddTest_NAME}.")
@@ -285,10 +290,8 @@ Use six arguments version of AddTest with absolute and relative tolerances")
         LABELS "${DIR_LABELS}"
     )
 
-    if(NOT "${AddTest_EXECUTABLE}" STREQUAL "ogs" AND TARGET ${AddTest_EXECUTABLE})
-        add_dependencies(ctest ${AddTest_EXECUTABLE})
-        add_dependencies(ctest-large ${AddTest_EXECUTABLE})
-    endif()
+    add_dependencies(ctest ${AddTest_EXECUTABLE})
+    add_dependencies(ctest-large ${AddTest_EXECUTABLE})
 
     if(AddTest_PYTHON_PACKAGES)
         if(POETRY)
diff --git a/scripts/cmake/test/Test.cmake b/scripts/cmake/test/Test.cmake
index caba1e810e5..41e6d3a317d 100644
--- a/scripts/cmake/test/Test.cmake
+++ b/scripts/cmake/test/Test.cmake
@@ -36,11 +36,8 @@ if(CMAKE_CONFIGURATION_TYPES)
 endif()
 add_custom_target(ctest-cleanup ${CMAKE_COMMAND} -E remove -f Tests/ctest.log)
 
-set(test_dependencies ogs vtkdiff)
 if(OGS_BUILD_UTILS)
     list(APPEND test_dependencies
-        partmesh
-        MapGeometryToMeshSurface
         generateStructuredMesh
     )
 endif()
@@ -92,7 +89,4 @@ set_directory_properties(PROPERTIES
 set_target_properties(ctest ctest-large ctest-cleanup ctest-large-cleanup
     PROPERTIES FOLDER Testing)
 
-add_dependencies(ctest ogs)
-add_dependencies(ctest-large ogs)
-
 configure_file(${PROJECT_SOURCE_DIR}/scripts/test/buildinfo.in.yaml ${PROJECT_BINARY_DIR}/buildinfo.yaml)
-- 
GitLab