Allow validation of the generated CMake toolchain file.
authorM. Eric Irrgang <ericirrgang@gmail.com>
Thu, 12 Sep 2019 09:47:22 +0000 (12:47 +0300)
committerPaul Bauer <paul.bauer.q@gmail.com>
Thu, 31 Oct 2019 17:30:27 +0000 (18:30 +0100)
Refs #3085

Change-Id: Ie909256f4656bfd119273a21791f708ba68c5e8a

python_packaging/docker/gromacs.dockerfile
src/gromacs/InstallLibInfo.cmake

index 0e2d0d665ac23cd14e7f72e4ad7d5b596f96707f..f6b02c5e189ef699d364bf40e5df74f259c3b0fd 100644 (file)
@@ -30,6 +30,7 @@ RUN cmake $SRC_DIR \
         -DGMX_SIMD=AVX_256 \
         -DGMX_USE_RDTSCP=OFF \
         -DGMX_HWLOC=OFF \
+        -DGMX_REQUIRE_VALID_TOOLCHAIN=TRUE \
         -DCMAKE_BUILD_TYPE=$TYPE
 RUN make -j$DOCKER_CORES
 RUN make -j$DOCKER_CORES tests
index d8ba5e08eb55f347d6b0dc6be553e9cfe8fd4705..67a4b5729eda46bf1b06a8c6401d1921a9329d9c 100644 (file)
@@ -80,6 +80,33 @@ function (do_cmake_config)
                    gromacs-config-version.cmake @ONLY)
     configure_file(gromacs-toolchain.cmake.cmakein
                    gromacs-toolchain.cmake @ONLY)
+    option(GMX_REQUIRE_VALID_TOOLCHAIN "Force CMake error if generated toolchain file is not usable." OFF)
+    mark_as_advanced(GMX_REQUIRE_VALID_TOOLCHAIN)
+    if (GMX_REQUIRE_VALID_TOOLCHAIN)
+        # Test the generated toolchain file.
+        set(TEMPDIR "${CMAKE_CURRENT_BINARY_DIR}/cmake-configure-test")
+        file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cmake-configure-test)
+        execute_process(COMMAND
+                            ${CMAKE_COMMAND}
+                            -G "${CMAKE_GENERATOR}"
+                            -DCMAKE_TOOLCHAIN_FILE=${CMAKE_CURRENT_BINARY_DIR}/gromacs-toolchain.cmake
+                            -DGMX_REQUIRE_VALID_TOOLCHAIN=FALSE
+                            ${CMAKE_SOURCE_DIR}
+                        RESULT_VARIABLE result
+                        OUTPUT_VARIABLE output
+                        OUTPUT_STRIP_TRAILING_WHITESPACE
+                        ERROR_VARIABLE output
+                        ERROR_STRIP_TRAILING_WHITESPACE
+                        WORKING_DIRECTORY ${TEMPDIR})
+        if (result)
+            message(FATAL_ERROR "Generated gromacs-toolchain.cmake does not produce a valid CMake environment: ${output}")
+        else()
+            message(STATUS "Verified gromacs-toolchain.cmake")
+            # We clean up after ourselves
+            FILE(REMOVE_RECURSE ${TEMPDIR})
+        endif ()
+    endif ()
+
     # The configuration files are also installed with the suffix, even though
     # the directory already contains the suffix. This allows simple
     # find_package(GROMACS NAMES gromacs_d) to find them, without also