FindPython*: Add capability to control virtual env handling.

Fixes: #19097
This commit is contained in:
Marc Chevrier
2019-04-01 11:19:54 +02:00
parent 5ad73b608d
commit 8a2f62cc18
10 changed files with 198 additions and 20 deletions

View File

@@ -68,6 +68,17 @@ if(CMake_TEST_FindPython)
--build-options ${build_options}
--test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
)
add_test(NAME FindPython.VirtualEnv COMMAND
${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
--build-and-test
"${CMake_SOURCE_DIR}/Tests/FindPython/VirtualEnv"
"${CMake_BINARY_DIR}/Tests/FindPython/VirtualEnv"
${build_generator_args}
--build-project TestVirtualEnv
--build-options ${build_options}
--test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
)
endif()
if(CMake_TEST_FindPython_NumPy)

View File

@@ -0,0 +1,42 @@
cmake_minimum_required(VERSION 3.1)
project(TestVirtualEnv LANGUAGES NONE)
include(CTest)
find_package(Python3 REQUIRED COMPONENTS Interpreter)
if (NOT Python3_FOUND)
message (FATAL_ERROR "Fail to found Python 3")
endif()
set (Python3_VIRTUAL_ENV "${CMAKE_CURRENT_BINARY_DIR}/py3venv")
execute_process (COMMAND "${Python3_EXECUTABLE}" -m venv "${Python3_VIRTUAL_ENV}"
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.VirtualEnvDefault
COMMAND "${CMAKE_COMMAND}" -E env --unset=PYTHONHOME
"VIRTUAL_ENV=${Python3_VIRTUAL_ENV}"
"${CMAKE_COMMAND}" "-DPYTHON3_VIRTUAL_ENV=${Python3_VIRTUAL_ENV}"
-P "${CMAKE_CURRENT_LIST_DIR}/VirtualEnvDefault.cmake")
add_test(NAME FindPython3.VirtualEnvOnly
COMMAND "${CMAKE_COMMAND}" -E env --unset=PYTHONHOME
"VIRTUAL_ENV=${Python3_VIRTUAL_ENV}"
"${CMAKE_COMMAND}" "-DPYTHON3_VIRTUAL_ENV=${Python3_VIRTUAL_ENV}"
-P "${CMAKE_CURRENT_LIST_DIR}/VirtualEnvOnly.cmake")
add_test(NAME FindPython3.UnsetVirtualEnvOnly
COMMAND "${CMAKE_COMMAND}" -E env --unset=PYTHONHOME
--unset=VIRTUAL_ENV
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_LIST_DIR}/VirtualEnvOnly.cmake")
add_test(NAME FindPython3.VirtualEnvStandard
COMMAND "${CMAKE_COMMAND}" -E env --unset=PYTHONHOME
"VIRTUAL_ENV=${Python3_VIRTUAL_ENV}"
"${CMAKE_COMMAND}" "-DPYTHON3_VIRTUAL_ENV=${Python3_VIRTUAL_ENV}"
-P "${CMAKE_CURRENT_LIST_DIR}/VirtualEnvStandard.cmake")

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()