From 988b115696f184dfb8d06abcf5be0e2b4a023440 Mon Sep 17 00:00:00 2001
From: Lars Bilke <lars.bilke@ufz.de>
Date: Thu, 1 Jul 2021 15:19:00 +0200
Subject: [PATCH] [cmake] Modified BuildExternalProject.

---
 .pre-commit-config.yaml                  |   2 +-
 scripts/cmake/BuildExternalProject.cmake | 116 ++++++++++++-----------
 2 files changed, 63 insertions(+), 55 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 9ee0ad8c7bf..2f0999e59c5 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -45,4 +45,4 @@ repos:
       exclude: 'scripts/cmake/jedbrown/.*|PackagingMacros.cmake|conan.cmake|CPM.cmake|FindFilesystem.cmake|ConanSetup.cmake|Tests.cmake'
     - id: cmake-lint
       additional_dependencies: ["cmakelang[YAML]"]
-      exclude: 'scripts/cmake/jedbrown/.*|PackagingMacros.cmake|conan.cmake|CPM.cmake|FindFilesystem.cmake|ConanSetup.cmake'
+      exclude: 'scripts/cmake/jedbrown/.*|PackagingMacros.cmake|conan.cmake|CPM.cmake|FindFilesystem.cmake|ConanSetup.cmake|BuildExternalProject.cmake'
diff --git a/scripts/cmake/BuildExternalProject.cmake b/scripts/cmake/BuildExternalProject.cmake
index 2a971810bf5..45e80d6d85d 100644
--- a/scripts/cmake/BuildExternalProject.cmake
+++ b/scripts/cmake/BuildExternalProject.cmake
@@ -1,31 +1,37 @@
-macro (BuildExternalProject_find_package target)
-  set(build_dir ${CMAKE_BINARY_DIR}/external/build_${target})
-
-  # Set CMake prefix path so we can look there for the module
-  set(_CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH})
-  mark_as_advanced(_CMAKE_PREFIX_PATH)
-  list(APPEND CMAKE_PREFIX_PATH ${build_dir})
-
-  find_package(${target} MODULE QUIET)
-  if (NOT ${target}_FOUND)
-    # Look for config version if there was no module
-    find_package(${target} CONFIG REQUIRED HINTS ${build_dir} NO_DEFAULT_PATH)
-  endif()
-
-  # Set CMake prefix path back to what it was
-  set(CMAKE_PREFIX_PATH ${_CMAKE_PREFIX_PATH})
-  unset(_CMAKE_PREFIX_PATH)
+# Modified from
+# https://github.com/Sbte/BuildExternalProject/commit/ce1a70996aa538aac17a6faf07db487c3a238838
+macro(BuildExternalProject_find_package target)
+    set(build_dir ${CMAKE_BINARY_DIR}/external/build_${target})
+
+    # Set CMake prefix path so we can look there for the module
+    set(_CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH})
+    mark_as_advanced(_CMAKE_PREFIX_PATH)
+    list(APPEND CMAKE_PREFIX_PATH ${build_dir})
+
+    find_package(${target} MODULE QUIET)
+    if(NOT ${target}_FOUND)
+        # Look for config version if there was no module
+        find_package(
+            ${target} CONFIG REQUIRED HINTS ${build_dir} NO_DEFAULT_PATH
+        )
+    endif()
+
+    # Set CMake prefix path back to what it was
+    set(CMAKE_PREFIX_PATH ${_CMAKE_PREFIX_PATH})
+    unset(_CMAKE_PREFIX_PATH)
 endmacro()
 
-function (BuildExternalProject target)
-  set(build_dir ${CMAKE_BINARY_DIR}/external/build_${target})
+function(BuildExternalProject target)
+    set(build_dir ${CMAKE_BINARY_DIR}/external/build_${target})
 
-  message(STATUS "Building ${target}")
+    message(STATUS "Building ${target}")
 
-  file(MAKE_DIRECTORY ${build_dir})
+    file(MAKE_DIRECTORY ${build_dir})
 
-  set(CMAKE_LIST_CONTENT "
-    cmake_minimum_required(VERSION 2.8.2)
+    set(CMAKE_LIST_CONTENT
+        "
+    cmake_minimum_required(VERSION ${CMAKE_MINIMUM_REQUIRED_VERSION})
+    project(externalproject_${target})
 
     include(ExternalProject)
     ExternalProject_add(${target}
@@ -42,46 +48,48 @@ function (BuildExternalProject target)
 
     add_custom_target(build_${target})
     add_dependencies(build_${target} ${target})
-    ")
-
-  if (EXISTS ${build_dir}/CMakeLists.txt)
-    file(SHA256 ${build_dir}/CMakeLists.txt file_sha)
-    string(SHA256 new_sha "${CMAKE_LIST_CONTENT}")
+    "
+    )
 
-    if (NOT file_sha STREQUAL new_sha)
-      file(WRITE ${build_dir}/CMakeLists.txt "${CMAKE_LIST_CONTENT}")
-      BuildExternalProject_configure(${build_dir})
+    if(EXISTS ${build_dir}/CMakeLists.txt)
+        file(SHA256 ${build_dir}/CMakeLists.txt file_sha)
+        string(SHA256 new_sha "${CMAKE_LIST_CONTENT}")
+
+        if(NOT file_sha STREQUAL new_sha)
+            file(WRITE ${build_dir}/CMakeLists.txt "${CMAKE_LIST_CONTENT}")
+            BuildExternalProject_configure(${build_dir})
+        endif()
+    else()
+        file(WRITE ${build_dir}/CMakeLists.txt "${CMAKE_LIST_CONTENT}")
+        BuildExternalProject_configure(${build_dir})
     endif()
-  else()
-    file(WRITE ${build_dir}/CMakeLists.txt "${CMAKE_LIST_CONTENT}")
-    BuildExternalProject_configure(${build_dir})
-  endif()
 
-  BuildExternalProject_build(${build_dir})
+    BuildExternalProject_build(${build_dir})
 
-  message(STATUS "Finished building ${target}")
+    message(
+        STATUS
+            "Finished building ${target}. Logs in ${build_dir}/src/${target}-stamp"
+    )
 endfunction()
 
-function (BuildExternalProject_configure build_dir)
-  execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
-    RESULT_VARIABLE result
-    WORKING_DIRECTORY ${build_dir}
-    OUTPUT_QUIET
+function(BuildExternalProject_configure build_dir)
+    execute_process(
+        COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
+        RESULT_VARIABLE result WORKING_DIRECTORY ${build_dir}
     )
 
-  if(result)
-    message(FATAL_ERROR "CMake step for external project failed: ${result}")
-  endif()
+    if(result)
+        message(FATAL_ERROR "CMake step for external project failed: ${result}")
+    endif()
 endfunction()
 
-function (BuildExternalProject_build build_dir)
-  execute_process(COMMAND ${CMAKE_COMMAND} --build .
-    RESULT_VARIABLE result
-    WORKING_DIRECTORY ${build_dir}
-    OUTPUT_QUIET
+function(BuildExternalProject_build build_dir)
+    execute_process(
+        COMMAND ${CMAKE_COMMAND} --build . RESULT_VARIABLE result
+        WORKING_DIRECTORY ${build_dir}
     )
 
-  if(result)
-    message(FATAL_ERROR "Build step for external project failed: ${result}")
-  endif()
-endfunction()
\ No newline at end of file
+    if(result)
+        message(FATAL_ERROR "Build step for external project failed: ${result}")
+    endif()
+endfunction()
-- 
GitLab