FindPython: Add capability to specify Python implementations

Through hint Python_FIND_IMPLEMENTATIONS it is possble to specify, as an
ordered list, which implementations must be searched for.
Currently possible values are:
* CPython
* IronPython
This commit is contained in:
Marc Chevrier
2020-04-22 15:01:21 +02:00
parent 265fb71c91
commit d2c47c822b
9 changed files with 699 additions and 495 deletions

View File

@@ -314,6 +314,29 @@ if(CMake_TEST_FindPython_Conda)
)
endif()
if (CMake_TEST_FindPython AND CMake_TEST_FindPython_IronPython)
add_test(NAME FindPython.Implementation.CPython COMMAND
${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
--build-and-test
"${CMake_SOURCE_DIR}/Tests/FindPython/Implementation"
"${CMake_BINARY_DIR}/Tests/FindPython/Implementation.CPython"
${build_generator_args}
--build-project TestImplementationCPython
--build-options ${build_options} -DPython_REQUESTED_VERSION=2 -DPython_REQUESTED_IMPLEMENTATIONS=CPython
--test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
)
add_test(NAME FindPython.Implementation.IronPython COMMAND
${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
--build-and-test
"${CMake_SOURCE_DIR}/Tests/FindPython/Implementation"
"${CMake_BINARY_DIR}/Tests/FindPython/Implementation.IronPython"
${build_generator_args}
--build-project TestImplementationIronPython
--build-options ${build_options} -DPython_REQUESTED_VERSION=2 -DPython_REQUESTED_IMPLEMENTATION=IronPython
--test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
)
endif()
if(CMake_TEST_FindPython_IronPython)
add_test(NAME FindPython.IronPython2.LOCATION COMMAND
${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>

View File

@@ -0,0 +1,37 @@
cmake_minimum_required(VERSION 3.1)
project(TestImplementation${Python_REQUESTED_IMPLEMENTATION} C)
set (Python${Python_REQUESTED_VERSION}_FIND_IMPLEMENTATIONS ${Python_REQUESTED_IMPLEMENTATION})
find_package(Python${Python_REQUESTED_VERSION} COMPONENTS Interpreter)
if (NOT Python${Python_REQUESTED_VERSION}_FOUND OR NOT Python${Python_REQUESTED_VERSION}_Interpreter_FOUND)
message (FATAL_ERROR "Fail to found Python${Python_REQUESTED_VERSION}")
endif()
if (Python_REQUESTED_IMPLEMENTATION STREQUAL "IronPython"
AND NOT Python${Python_REQUESTED_VERSION}_INTERPRETER_ID STREQUAL "IronPython")
message (FATAL_ERROR "Erroneous interpreter ID (${Python${Python_REQUESTED_VERSION}_INTERPRETER_ID})")
endif()
if (Python_REQUESTED_IMPLEMENTATION STREQUAL "CPython"
AND Python${Python_REQUESTED_VERSION}_INTERPRETER_ID STREQUAL "IronPython")
message (FATAL_ERROR "Erroneous interpreter ID (${Python${Python_REQUESTED_VERSION}_INTERPRETER_ID})")
endif()
set (Python_FIND_IMPLEMENTATIONS ${Python_REQUESTED_IMPLEMENTATION})
find_package(Python ${Python_REQUESTED_VERSION} REQUIRED COMPONENTS Interpreter)
if (NOT Python_FOUND OR NOT Python_Interpreter_FOUND)
message (FATAL_ERROR "Fail to found Python ${Python_REQUESTED_VERSION}")
endif()
if (Python_REQUESTED_IMPLEMENTATION STREQUAL "IronPython"
AND NOT Python_INTERPRETER_ID STREQUAL "IronPython")
message (FATAL_ERROR "Erroneous interpreter ID (${Python_INTERPRETER_ID})")
endif()
if (Python_REQUESTED_IMPLEMENTATION STREQUAL "CPython"
AND Python_INTERPRETER_ID STREQUAL "IronPython")
message (FATAL_ERROR "Erroneous interpreter ID (${Python_INTERPRETER_ID})")
endif()

View File

@@ -2,11 +2,20 @@ cmake_minimum_required(VERSION 3.1)
project(TestIronPython C)
find_package(Python ${Python_REQUESTED_VERSION} REQUIRED COMPONENTS Interpreter Compiler)
set (Python_FIND_IMPLEMENTATIONS IronPython)
find_package(Python ${Python_REQUESTED_VERSION} COMPONENTS Interpreter Compiler)
if (NOT Python_FOUND)
message (FATAL_ERROR "Fail to found Python ${Python_REQUESTED_VERSION}")
endif()
if (NOT Python_Interpreter_FOUND)
message (FATAL_ERROR "Fail to found Python Interpreter")
endif()
if (NOT Python_INTERPRETER_ID STREQUAL "IronPython")
message (FATAL_ERROR "Erroneous interpreter ID (${Python_INTERPRETER_ID})")
endif()
if (NOT Python_Compiler_FOUND)
message (FATAL_ERROR "Fail to found Python Compiler")
endif()

View File

@@ -2,11 +2,20 @@ cmake_minimum_required(VERSION 3.1)
project(TestIronPython2 C)
find_package(Python2 REQUIRED COMPONENTS Interpreter Compiler)
set (Python2_FIND_IMPLEMENTATIONS "IronPython")
find_package(Python2 COMPONENTS Interpreter Compiler)
if (NOT Python2_FOUND)
message (FATAL_ERROR "Fail to found Python 2")
endif()
if (NOT Python2_Interpreter_FOUND)
message (FATAL_ERROR "Fail to found Python 2 Interpreter")
endif()
if (NOT Python2_INTERPRETER_ID STREQUAL "IronPython")
message (FATAL_ERROR "Erroneous interpreter ID (${Python2_INTERPRETER_ID})")
endif()
if (NOT Python2_Compiler_FOUND)
message (FATAL_ERROR "Fail to found Python 2 Compiler")
endif()