From 53e750d8f88f677ee168db2e418fa022aee8e607 Mon Sep 17 00:00:00 2001
From: Lars Bilke <lars.bilke@ufz.de>
Date: Fri, 2 Oct 2020 13:19:13 +0200
Subject: [PATCH] [CMake] Fix python env on Windows.

---
 ProcessLib/HeatTransportBHE/Tests.cmake |  2 +-
 scripts/cmake/ConanSetup.cmake          |  8 +++++---
 scripts/cmake/PreFind.cmake             | 23 ++++++++++++++---------
 scripts/cmake/test/AddTest.cmake        | 18 ++----------------
 4 files changed, 22 insertions(+), 29 deletions(-)

diff --git a/ProcessLib/HeatTransportBHE/Tests.cmake b/ProcessLib/HeatTransportBHE/Tests.cmake
index 1f97f770e7c..c3d6a2fdeb5 100644
--- a/ProcessLib/HeatTransportBHE/Tests.cmake
+++ b/ProcessLib/HeatTransportBHE/Tests.cmake
@@ -89,7 +89,7 @@ AddTest(
     RUNTIME 50
     EXECUTABLE ogs
     EXECUTABLE_ARGS 3bhes_1U.prj
-    WRAPPER poetry # required for PYTHON_PACKAGES
+    WRAPPER time
     TESTER vtkdiff
     REQUIREMENTS OGS_USE_PYTHON AND NOT OGS_USE_MPI
     PYTHON_PACKAGES TESPy=0.3.2
diff --git a/scripts/cmake/ConanSetup.cmake b/scripts/cmake/ConanSetup.cmake
index 13950af348c..5c07f1f8dea 100644
--- a/scripts/cmake/ConanSetup.cmake
+++ b/scripts/cmake/ConanSetup.cmake
@@ -3,9 +3,11 @@ if(NOT OGS_USE_CONAN)
 endif()
 string(TOLOWER ${OGS_USE_CONAN} OGS_USE_CONAN_lower)
 if(OGS_USE_CONAN_lower STREQUAL "auto" AND POETRY)
-    execute_process(
-        COMMAND poetry add conan=${ogs.minimum_version.conan}
-        WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
+    execute_process(COMMAND ${CMD_COMMAND} poetry add conan=${ogs.minimum_version.conan})
+    find_program(CONAN_CMD conan HINTS
+        ${PROJECT_BINARY_DIR}/.venv/bin
+        ${PROJECT_BINARY_DIR}/.venv/Scripts
+        REQUIRED NO_DEFAULT_PATH
     )
 endif()
 find_program(CONAN_CMD conan HINTS ${PROJECT_BINARY_DIR}/.venv/bin)
diff --git a/scripts/cmake/PreFind.cmake b/scripts/cmake/PreFind.cmake
index 252127fc15b..783387ea358 100644
--- a/scripts/cmake/PreFind.cmake
+++ b/scripts/cmake/PreFind.cmake
@@ -85,6 +85,10 @@ if(IS_GIT_REPO AND NOT OGS_VERSION)
     )
 endif()
 
+if(MSVC)
+    set(CMD_COMMAND "cmd" "/c" CACHE INTERNAL "")
+endif()
+
 ### Python setup ###
 find_program(POETRY poetry)
 if(POETRY)
@@ -95,13 +99,7 @@ if(POETRY)
             ${PROJECT_BINARY_DIR}/pyproject.toml)
     endif()
     if(NOT EXISTS ${PROJECT_BINARY_DIR}/.venv)
-        if(MSVC)
-            set(CMD_PREFIX cmd /C)
-        endif()
-        execute_process(
-            COMMAND ${CMD_PREFIX} ${POETRY} install
-            WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
-        )
+        execute_process(COMMAND ${CMD_COMMAND} poetry install)
     endif()
     set(Python3_ROOT_DIR ${PROJECT_BINARY_DIR}/.venv)
     set(Python3_EXECUTABLE ${Python3_ROOT_DIR}/bin/python)
@@ -116,6 +114,13 @@ else()
     find_package(Python3 ${ogs.minimum_version.python} COMPONENTS Interpreter)
 endif()
 if(POETRY)
-    set(Python3_VIRTUALENV_SITEPACKAGES
-        ${Python3_ROOT_DIR}/lib/python${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}/site-packages)
+    if(MSVC)
+        file(TO_NATIVE_PATH "${Python3_ROOT_DIR}/Lib/site-packages"
+            Python3_VIRTUALENV_SITEPACKAGES)
+        string(REPLACE "\\" "\\\\" Python3_VIRTUALENV_SITEPACKAGES
+            ${Python3_VIRTUALENV_SITEPACKAGES})
+    else()
+        set(Python3_VIRTUALENV_SITEPACKAGES
+            ${Python3_ROOT_DIR}/lib/python${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}/site-packages)
+    endif()
 endif()
diff --git a/scripts/cmake/test/AddTest.cmake b/scripts/cmake/test/AddTest.cmake
index ce12ca9fc8a..fb18a77ae85 100644
--- a/scripts/cmake/test/AddTest.cmake
+++ b/scripts/cmake/test/AddTest.cmake
@@ -126,13 +126,6 @@ function (AddTest)
             message(STATUS "ERROR: mpirun was not found but is required for ${AddTest_NAME}!")
             return()
         endif()
-    elseif(AddTest_WRAPPER STREQUAL "poetry")
-        if(POETRY)
-            set(WRAPPER_COMMAND ${POETRY})
-            set(AddTest_WRAPPER_ARGS "run")
-        else()
-            set(DISABLED_TESTS_LOG "${DISABLED_TESTS_LOG}\nDisabling poetry wrapper for ${AddTest_NAME} as poetry exe was not found!" CACHE INTERNAL "")
-        endif()
     endif()
 
     # --- Implement testers ---
@@ -293,17 +286,10 @@ Use six arguments version of AddTest with absolute and relative tolerances")
     endif()
 
     if(AddTest_PYTHON_PACKAGES)
-        if(NOT AddTest_WRAPPER STREQUAL "poetry")
-            message(FATAL_ERROR "Benchmark ${AddTest_NAME} uses PYTHON_PACKAGES"
-                ", make sure to have the WRAPPER set to 'poetry'!")
-        endif()
         if(POETRY)
-            if(MSVC)
-                set(CMD_PREFIX cmd /C)
-            endif()
             execute_process(
-               COMMAND ${CMD_PREFIX} poetry add ${AddTest_PYTHON_PACKAGES}
-               WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
+                COMMAND ${CMD_COMMAND} poetry add ${AddTest_PYTHON_PACKAGES}
+                WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
             )
         else()
             message(STATUS "Warning: Benchmark ${AddTest_NAME} requires these "
-- 
GitLab