mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-07 14:20:06 -06:00
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:
5
Help/release/dev/FindPython-find-implementations.rst
Normal file
5
Help/release/dev/FindPython-find-implementations.rst
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
FindPython-find-implementations
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
* The :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
|
||||||
|
modules gained the capability to specify which implementations to search for.
|
||||||
@@ -271,6 +271,27 @@ Hints
|
|||||||
recommended to also include the component ``Interpreter`` to get expected
|
recommended to also include the component ``Interpreter`` to get expected
|
||||||
result.
|
result.
|
||||||
|
|
||||||
|
``Python_FIND_IMPLEMENTATIONS``
|
||||||
|
This variable defines, in an ordered list, the different implementations
|
||||||
|
which will be searched. The ``Python_FIND_IMPLEMENTATIONS`` variable can
|
||||||
|
hold the following values:
|
||||||
|
|
||||||
|
* ``CPython``: this is the standard implementation. Various products, like
|
||||||
|
``Anaconda`` or ``ActivePython``, rely on this implementation.
|
||||||
|
* ``IronPython``: This implementation use the ``CSharp`` language for
|
||||||
|
``.NET Framework`` on top of the `Dynamic Language Runtime` (``DLR``).
|
||||||
|
See `IronPython <http://ironpython.net>`_.
|
||||||
|
|
||||||
|
The default value is the list: ``CPython``, ``IronPython``.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
This hint has the lowest priority of all hints, so even if, for example,
|
||||||
|
you specify ``IronPython`` first and ``CPython`` in second, a python
|
||||||
|
product based on ``CPython`` can be selected because, for example with
|
||||||
|
``Python_FIND_STRATEGY=LOCATION``, each location will be search first for
|
||||||
|
``IronPython`` and second for ``CPython``.
|
||||||
|
|
||||||
Artifacts Specification
|
Artifacts Specification
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -218,6 +218,27 @@ Hints
|
|||||||
recommended to also include the component ``Interpreter`` to get expected
|
recommended to also include the component ``Interpreter`` to get expected
|
||||||
result.
|
result.
|
||||||
|
|
||||||
|
``Python2_FIND_IMPLEMENTATIONS``
|
||||||
|
This variable defines, in an ordered list, the different implementations
|
||||||
|
which will be searched. The ``Python2_FIND_IMPLEMENTATIONS`` variable can
|
||||||
|
hold the following values:
|
||||||
|
|
||||||
|
* ``CPython``: this is the standard implementation. Various products, like
|
||||||
|
``Anaconda`` or ``ActivePython``, rely on this implementation.
|
||||||
|
* ``IronPython``: This implementation use the ``CSharp`` language for
|
||||||
|
``.NET Framework`` on top of the `Dynamic Language Runtime` (``DLR``).
|
||||||
|
See `IronPython <http://ironpython.net>`_.
|
||||||
|
|
||||||
|
The default value is the list: ``CPython``, ``IronPython``.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
This hint has the lowest priority of all hints, so even if, for example,
|
||||||
|
you specify ``IronPython`` first and ``CPython`` in second, a python
|
||||||
|
product based on ``CPython`` can be selected because, for example with
|
||||||
|
``Python2_FIND_STRATEGY=LOCATION``, each location will be search first for
|
||||||
|
``IronPython`` and second for ``CPython``.
|
||||||
|
|
||||||
Artifacts Specification
|
Artifacts Specification
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
|||||||
@@ -268,6 +268,27 @@ Hints
|
|||||||
recommended to also include the component ``Interpreter`` to get expected
|
recommended to also include the component ``Interpreter`` to get expected
|
||||||
result.
|
result.
|
||||||
|
|
||||||
|
``Python3_FIND_IMPLEMENTATIONS``
|
||||||
|
This variable defines, in an ordered list, the different implementations
|
||||||
|
which will be searched. The ``Python3_FIND_IMPLEMENTATIONS`` variable can
|
||||||
|
hold the following values:
|
||||||
|
|
||||||
|
* ``CPython``: this is the standard implementation. Various products, like
|
||||||
|
``Anaconda`` or ``ActivePython``, rely on this implementation.
|
||||||
|
* ``IronPython``: This implementation use the ``CSharp`` language for
|
||||||
|
``.NET Framework`` on top of the `Dynamic Language Runtime` (``DLR``).
|
||||||
|
See `IronPython <http://ironpython.net>`_.
|
||||||
|
|
||||||
|
The default value is the list: ``CPython``, ``IronPython``.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
This hint has the lowest priority of all hints, so even if, for example,
|
||||||
|
you specify ``IronPython`` first and ``CPython`` in second, a python
|
||||||
|
product based on ``CPython`` can be selected because, for example with
|
||||||
|
``Python3_FIND_STRATEGY=LOCATION``, each location will be search first for
|
||||||
|
``IronPython`` and second for ``CPython``.
|
||||||
|
|
||||||
Artifacts Specification
|
Artifacts Specification
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
|||||||
@@ -314,6 +314,29 @@ if(CMake_TEST_FindPython_Conda)
|
|||||||
)
|
)
|
||||||
endif()
|
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)
|
if(CMake_TEST_FindPython_IronPython)
|
||||||
add_test(NAME FindPython.IronPython2.LOCATION COMMAND
|
add_test(NAME FindPython.IronPython2.LOCATION COMMAND
|
||||||
${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
|
${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
|
||||||
|
|||||||
37
Tests/FindPython/Implementation/CMakeLists.txt
Normal file
37
Tests/FindPython/Implementation/CMakeLists.txt
Normal 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()
|
||||||
@@ -2,11 +2,20 @@ cmake_minimum_required(VERSION 3.1)
|
|||||||
|
|
||||||
project(TestIronPython C)
|
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)
|
if (NOT Python_FOUND)
|
||||||
message (FATAL_ERROR "Fail to found Python ${Python_REQUESTED_VERSION}")
|
message (FATAL_ERROR "Fail to found Python ${Python_REQUESTED_VERSION}")
|
||||||
endif()
|
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)
|
if (NOT Python_Compiler_FOUND)
|
||||||
message (FATAL_ERROR "Fail to found Python Compiler")
|
message (FATAL_ERROR "Fail to found Python Compiler")
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -2,11 +2,20 @@ cmake_minimum_required(VERSION 3.1)
|
|||||||
|
|
||||||
project(TestIronPython2 C)
|
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)
|
if (NOT Python2_FOUND)
|
||||||
message (FATAL_ERROR "Fail to found Python 2")
|
message (FATAL_ERROR "Fail to found Python 2")
|
||||||
endif()
|
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)
|
if (NOT Python2_Compiler_FOUND)
|
||||||
message (FATAL_ERROR "Fail to found Python 2 Compiler")
|
message (FATAL_ERROR "Fail to found Python 2 Compiler")
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
Reference in New Issue
Block a user