diff options
author | Marc Chevrier <marc.chevrier@gmail.com> | 2020-10-29 16:02:55 (GMT) |
---|---|---|
committer | Marc Chevrier <marc.chevrier@gmail.com> | 2020-11-03 14:12:58 (GMT) |
commit | e452f6e2cf596c34e231b56803f739a878530ad9 (patch) | |
tree | f8f003d0d3e71c1b9288dacf513825c80ad64bb0 /Tests/FindPython | |
parent | 622ac065d2abeb53de3548b7e4f3d9b5980dfa8d (diff) | |
download | CMake-e452f6e2cf596c34e231b56803f739a878530ad9.zip CMake-e452f6e2cf596c34e231b56803f739a878530ad9.tar.gz CMake-e452f6e2cf596c34e231b56803f739a878530ad9.tar.bz2 |
FindPython: Adds control over artifact names to search
Fixes: #21371
Diffstat (limited to 'Tests/FindPython')
-rw-r--r-- | Tests/FindPython/CMakeLists.txt | 12 | ||||
-rw-r--r-- | Tests/FindPython/UnversionedNames/CMakeLists.txt | 66 |
2 files changed, 78 insertions, 0 deletions
diff --git a/Tests/FindPython/CMakeLists.txt b/Tests/FindPython/CMakeLists.txt index 44484c3..520ba9e 100644 --- a/Tests/FindPython/CMakeLists.txt +++ b/Tests/FindPython/CMakeLists.txt @@ -451,6 +451,18 @@ if(CMake_TEST_FindPython) --test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION> ) endif() + + if (CMAKE_SYSTEM_NAME STREQUAL "Linux") + add_test(NAME FindPython.UnversionedNames COMMAND + ${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION> + --build-and-test + "${CMake_SOURCE_DIR}/Tests/FindPython/UnversionedNames" + "${CMake_BINARY_DIR}/Tests/FindPython/UnversionedNames" + ${build_generator_args} + --build-project UnversionedNames + --build-options ${build_options} + ) + endif() endif() if(CMake_TEST_FindPython_NumPy) diff --git a/Tests/FindPython/UnversionedNames/CMakeLists.txt b/Tests/FindPython/UnversionedNames/CMakeLists.txt new file mode 100644 index 0000000..597bd4e --- /dev/null +++ b/Tests/FindPython/UnversionedNames/CMakeLists.txt @@ -0,0 +1,66 @@ +cmake_minimum_required(VERSION 3.19...3.20) + +project(UnversionedNames LANGUAGES NONE) + +# check if it is possible to find python with a generic name +find_program(UNVERSIONED_Python3 NAMES python3) + +if (NOT UNVERSIONED_Python3) + # no generic name available + # test cannot be done + return() +endif() + +# search with default configuration +find_package(Python3 REQUIRED COMPONENTS Interpreter) + +if (Python3_EXECUTABLE STREQUAL UNVERSIONED_Python3) + # default configuration pick-up the generic name + # test cannot be completed + return() +endif() + +unset(Python3_EXECUTABLE) +# Force now to search first for generic name +set(Python3_FIND_UNVERSIONED_NAMES FIRST) + +find_package(Python3 REQUIRED COMPONENTS Interpreter) + +if (NOT Python3_EXECUTABLE STREQUAL UNVERSIONED_Python3) + message(SEND_ERROR "Found unexpected interpreter ${Python3_EXECUTABLE} instead of ${UNVERSIONED_Python3}") +endif() + +# To check value 'NEVER", creates directory holding a symlink to the generic name +file(REMOVE_RECURSE "${CMAKE_CURRENT_BINARY_DIR}/bin") +file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin") +file(CREATE_LINK "${UNVERSIONED_Python3}" "${CMAKE_CURRENT_BINARY_DIR}/bin/python3" SYMBOLIC) + +unset(Python3_EXECUTABLE) +set(Python3_FIND_UNVERSIONED_NAMES FIRST) +set(Python3_ROOT_DIR "${CMAKE_CURRENT_BINARY_DIR}") +# First search: generic name must be found +find_package(Python3 REQUIRED COMPONENTS Interpreter) + +if (NOT Python3_EXECUTABLE STREQUAL "${CMAKE_CURRENT_BINARY_DIR}/bin/python3") + message(FATAL_ERROR "Found unexpected interpreter ${Python3_EXECUTABLE} instead of ${CMAKE_CURRENT_BINARY_DIR}/bin/python3") +endif() + +unset(Python3_EXECUTABLE) +set(Python3_FIND_UNVERSIONED_NAMES LAST) + +# Second search: generic name must be found +find_package(Python3 REQUIRED COMPONENTS Interpreter) + +if (NOT Python3_EXECUTABLE STREQUAL "${CMAKE_CURRENT_BINARY_DIR}/bin/python3") + message(FATAL_ERROR "Found unexpected interpreter ${Python3_EXECUTABLE} instead of ${CMAKE_CURRENT_BINARY_DIR}/bin/python3") +endif() + +unset(Python3_EXECUTABLE) +set(Python3_FIND_UNVERSIONED_NAMES NEVER) + +# Third search: generic name must NOT be found +find_package(Python3 REQUIRED COMPONENTS Interpreter) + +if (Python3_EXECUTABLE STREQUAL "${CMAKE_CURRENT_BINARY_DIR}/bin/python3") + message(FATAL_ERROR "Found unexpected interpreter ${Python3_EXECUTABLE}") +endif() |