FindPython: Extend virtual environment handling by considering conda

- Add functionality to recognize and use CONDA_PREFIX environment variable
- Add tests for conda virtual environments
- Fixes: #20111
This commit is contained in:
Sebastian Müller
2019-12-20 13:24:54 +01:00
parent 9f75f9974f
commit 776d27d4a4
12 changed files with 123 additions and 26 deletions
@@ -0,0 +1,46 @@
cmake_minimum_required(VERSION 3.1)
project(TestVirtualEnvConda LANGUAGES NONE)
include(CTest)
find_program(CONDA_EXECUTABLE conda)
if (CONDA_EXECUTABLE EQUAL NOTFOUND)
message (FATAL_ERROR "Fail to found Conda")
endif()
set (Python3_VIRTUAL_ENV "${CMAKE_CURRENT_BINARY_DIR}/condaenv")
execute_process (COMMAND "${CONDA_EXECUTABLE}" create --no-default-packages --prefix "${Python3_VIRTUAL_ENV}" --yes python=3
RESULT_VARIABLE result
OUTPUT_VARIABLE outputs
ERROR_VARIABLE outputs)
if (result)
message (FATAL_ERROR "Fail to create virtual environment: ${outputs}")
endif()
add_test(NAME FindPython3.VirtualEnvDefaultConda
COMMAND "${CMAKE_COMMAND}" -E env --unset=PYTHONHOME
--unset=VIRTUAL_ENV
"CONDA_PREFIX=${Python3_VIRTUAL_ENV}"
"${CMAKE_COMMAND}" "-DPYTHON3_VIRTUAL_ENV=${Python3_VIRTUAL_ENV}"
-P "${CMAKE_CURRENT_LIST_DIR}/VirtualEnvDefault.cmake")
add_test(NAME FindPython3.VirtualEnvOnlyConda
COMMAND "${CMAKE_COMMAND}" -E env --unset=PYTHONHOME
--unset=VIRTUAL_ENV
"CONDA_PREFIX=${Python3_VIRTUAL_ENV}"
"${CMAKE_COMMAND}" "-DPYTHON3_VIRTUAL_ENV=${Python3_VIRTUAL_ENV}"
-P "${CMAKE_CURRENT_LIST_DIR}/VirtualEnvOnly.cmake")
add_test(NAME FindPython3.UnsetVirtualEnvOnlyConda
COMMAND "${CMAKE_COMMAND}" -E env --unset=PYTHONHOME
--unset=CONDA_PREFIX
--unset=VIRTUAL_ENV
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_LIST_DIR}/VirtualEnvOnly.cmake")
add_test(NAME FindPython3.VirtualEnvStandardConda
COMMAND "${CMAKE_COMMAND}" -E env --unset=PYTHONHOME
--unset=VIRTUAL_ENV
"CONDA_PREFIX=${Python3_VIRTUAL_ENV}"
"${CMAKE_COMMAND}" "-DPYTHON3_VIRTUAL_ENV=${Python3_VIRTUAL_ENV}"
-P "${CMAKE_CURRENT_LIST_DIR}/VirtualEnvStandard.cmake")
@@ -0,0 +1,6 @@
find_package (Python3 REQUIRED)
if (NOT Python3_EXECUTABLE MATCHES "^${PYTHON3_VIRTUAL_ENV}/.+")
message (FATAL_ERROR "Fail to use virtual environment")
endif()
@@ -0,0 +1,16 @@
#
# Virtual environment is defined for python3
# Trying to find a python2 using only virtual environment
# It is expecting to fail if a virtual environment is active and to success otherwise.
#
set (Python2_FIND_VIRTUALENV ONLY)
find_package (Python2 QUIET)
if (PYTHON3_VIRTUAL_ENV AND Python2_FOUND)
message (FATAL_ERROR "Python2 unexpectedly found.")
endif()
if (NOT PYTHON3_VIRTUAL_ENV AND NOT Python2_FOUND)
message (FATAL_ERROR "Fail to find Python2.")
endif()
@@ -0,0 +1,7 @@
set (Python3_FIND_VIRTUALENV STANDARD)
find_package (Python3 REQUIRED)
if (Python3_EXECUTABLE MATCHES "^${PYTHON3_VIRTUAL_ENV}/.+")
message (FATAL_ERROR "Python3 virtual env unexpectedly found.")
endif()