From 07c7eba1e10263d25c58af49f29bb48e19c0fe86 Mon Sep 17 00:00:00 2001
From: Lars Bilke <lars.bilke@ufz.de>
Date: Thu, 18 Mar 2021 11:52:08 +0100
Subject: [PATCH] [cmake] Collect python packages and run poetry add just once.

Packages to install are written to build/.python_packages during CMake
run and then installed once at the end of the CMake run via poetry add.

Speeds up CMake configure time a bit.
---
 CMakeLists.txt                   |  9 +++++++++
 scripts/cmake/PythonSetup.cmake  | 16 ++++++----------
 scripts/cmake/test/AddTest.cmake | 13 ++++---------
 3 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index d059c0aa3cb..d9f417fe378 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -226,6 +226,15 @@ endif()
 
 include(UnityBuildSettings)
 
+if(POETRY)
+    file(STRINGS ${PROJECT_BINARY_DIR}/.python_packages OGS_PYTHON_PACKAGES)
+    list(REMOVE_DUPLICATES OGS_PYTHON_PACKAGES)
+    execute_process(
+        COMMAND ${_CMD_COMMAND} poetry add ${OGS_PYTHON_PACKAGES}
+        WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
+    )
+endif()
+
 file(WRITE ${PROJECT_BINARY_DIR}/disabled-tests.log "${DISABLED_TESTS_LOG}")
 unset(DISABLED_TESTS_LOG CACHE) # Don't write to CMakeCache.txt
 
diff --git a/scripts/cmake/PythonSetup.cmake b/scripts/cmake/PythonSetup.cmake
index cbc7f1e2b7c..73c66c856f9 100644
--- a/scripts/cmake/PythonSetup.cmake
+++ b/scripts/cmake/PythonSetup.cmake
@@ -23,6 +23,12 @@ if(OGS_USE_POETRY)
         if(MSVC)
             set(Python3_EXECUTABLE ${Python3_ROOT_DIR}/Scripts/python.exe)
         endif()
+        file(WRITE ${PROJECT_BINARY_DIR}/.python_packages "")
+        if(OGS_BUILD_TESTING)
+            file(WRITE ${PROJECT_BINARY_DIR}/.python_packages
+                 "snakemake=${ogs.minimum_version.snakemake}\n"
+            )
+        endif()
     endif()
 endif()
 
@@ -53,13 +59,3 @@ set(LOCAL_VIRTUALENV_BIN_DIRS ${PROJECT_BINARY_DIR}/.venv/bin
                               ${PROJECT_BINARY_DIR}/.venv/Scripts CACHE INTERNAL
                                                                         ""
 )
-
-if(POETRY)
-    if(OGS_BUILD_TESTING)
-        list(APPEND PYTHON_PACKAGES snakemake=${ogs.minimum_version.snakemake})
-    endif()
-    execute_process(
-        COMMAND ${_CMD_COMMAND} poetry add ${PYTHON_PACKAGES}
-        WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
-    )
-endif()
diff --git a/scripts/cmake/test/AddTest.cmake b/scripts/cmake/test/AddTest.cmake
index 8399b1a2328..b570decd8ca 100644
--- a/scripts/cmake/test/AddTest.cmake
+++ b/scripts/cmake/test/AddTest.cmake
@@ -435,16 +435,11 @@ Use six arguments version of AddTest with absolute and relative tolerances"
 
     if(AddTest_PYTHON_PACKAGES)
         if(POETRY)
-            file(WRITE ${PROJECT_BINARY_DIR}/tmp_poetry_add.bat
-                 "poetry add ${AddTest_PYTHON_PACKAGES}"
+            string(REPLACE ";" "\n" PYTHON_PACKAGES
+                           "${AddTest_PYTHON_PACKAGES}"
             )
-            if(WIN32)
-                set(EXEC_CMD tmp_poetry_add.bat)
-            else()
-                set(EXEC_CMD ${BASH_TOOL_PATH} tmp_poetry_add.bat)
-            endif()
-            execute_process(
-                COMMAND ${EXEC_CMD} WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
+            file(APPEND ${PROJECT_BINARY_DIR}/.python_packages
+                 ${PYTHON_PACKAGES}
             )
         else()
             message(
-- 
GitLab