FindPython: ensure any specified version is correctly handled

Fixes: #20674
This commit is contained in:
Marc Chevrier
2020-05-05 15:58:26 +02:00
parent 6ccbf6ba71
commit 25978c7a00
3 changed files with 222 additions and 43 deletions

View File

@@ -0,0 +1,56 @@
cmake_minimum_required(VERSION 3.1)
project(TestExactVersion C)
find_package(Python${Python_MAJOR_VERSION} ${Python_REQUESTED_VERSION} COMPONENTS Interpreter Development)
if (NOT Python${Python_MAJOR_VERSION}_FOUND)
message (FATAL_ERROR "Fail to found Python ${Python_REQUESTED_VERSION}")
endif()
if (NOT Python${Python_MAJOR_VERSION}_Interpreter_FOUND)
message (FATAL_ERROR "Fail to found Python ${Python_REQUESTED_VERSION} Interpreter")
endif()
if (NOT Python${Python_MAJOR_VERSION}_Development_FOUND)
message (FATAL_ERROR "Fail to found Python ${Python_REQUESTED_VERSION} Development")
endif()
if(NOT TARGET Python${Python_MAJOR_VERSION}::Interpreter)
message(SEND_ERROR "Python${Python_MAJOR_VERSION}::Interpreter not found")
endif()
if(NOT TARGET Python${Python_MAJOR_VERSION}::Python)
message(SEND_ERROR "Python${Python_MAJOR_VERSION}::Python not found")
endif()
if(NOT TARGET Python${Python_MAJOR_VERSION}::Module)
message(SEND_ERROR "Python${Python_MAJOR_VERSION}::Module not found")
endif()
# reset artifacts and second search with exact version already founded
unset (Python${Python_MAJOR_VERSION}_EXECUTABLE)
unset (_Python${Python_MAJOR_VERSION}_EXECUTABLE CACHE)
unset (_Python${Python_MAJOR_VERSION}_LIBRARY_RELEASE CACHE)
unset (_Python${Python_MAJOR_VERSION}_INCLUDE_DIR CACHE)
set (Python_REQUESTED_VERSION ${Python${Python_MAJOR_VERSION}_VERSION})
find_package(Python${Python_MAJOR_VERSION} ${Python_REQUESTED_VERSION} EXACT COMPONENTS Interpreter Development)
if (NOT Python${Python_MAJOR_VERSION}_FOUND)
message (FATAL_ERROR "Fail to found Python ${Python_REQUESTED_VERSION}")
endif()
if (NOT Python${Python_MAJOR_VERSION}_Interpreter_FOUND)
message (FATAL_ERROR "Fail to found Python ${Python_REQUESTED_VERSION} Interpreter")
endif()
if (NOT Python${Python_MAJOR_VERSION}_Development_FOUND)
message (FATAL_ERROR "Fail to found Python ${Python_REQUESTED_VERSION} Development")
endif()
if(NOT TARGET Python${Python_MAJOR_VERSION}::Interpreter)
message(SEND_ERROR "Python${Python_MAJOR_VERSION}::Interpreter not found")
endif()
if(NOT TARGET Python${Python_MAJOR_VERSION}::Python)
message(SEND_ERROR "Python${Python_MAJOR_VERSION}::Python not found")
endif()
if(NOT TARGET Python${Python_MAJOR_VERSION}::Module)
message(SEND_ERROR "Python${Python_MAJOR_VERSION}::Module not found")
endif()