mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-22 13:15:12 +00:00
CMake: react to python version changes
The new FindPython-based variant of the CMake scripts caches information about the chosen Python version that can become stale. For example, suppose I configure a simple pybind11-based project as follows ``` cmake -S . -B build -GNinja -DPython_ROOT=<path to python 3.8> ``` which will generate `my_extension.cpython-38-x86_64-linux-gnu.so`. A subsequent change to the python version like ``` cmake -S . -B build -GNinja -DPython_ROOT=<path to python 3.9> ``` does not update all necessary build system information. In particular, the compiled file is still called `my_extension.cpython-38-x86_64-linux-gnu.so`. This commit fixes the problem by detecting changes in `Python_EXECUTABLE` and re-running Python as needed. Note that the previous way of detecting Python does not seem to be affected, it always specifies the right suffix.
This commit is contained in:
parent
6ad3f874a7
commit
409be8336f
@ -82,6 +82,15 @@ if(NOT DEFINED ${_Python}_EXECUTABLE)
|
|||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(NOT ${_Python}_EXECUTABLE STREQUAL PYTHON_EXECUTABLE_LAST)
|
||||||
|
# Detect changes to the Python version/binary in subsequent CMake runs, and refresh config if needed
|
||||||
|
unset(PYTHON_IS_DEBUG CACHE)
|
||||||
|
unset(PYTHON_MODULE_EXTENSION CACHE)
|
||||||
|
set(PYTHON_EXECUTABLE_LAST
|
||||||
|
"${${_Python}_EXECUTABLE}"
|
||||||
|
CACHE INTERNAL "Python executable during the last CMake run")
|
||||||
|
endif()
|
||||||
|
|
||||||
if(NOT DEFINED PYTHON_IS_DEBUG)
|
if(NOT DEFINED PYTHON_IS_DEBUG)
|
||||||
# Debug check - see https://stackoverflow.com/questions/646518/python-how-to-detect-debug-Interpreter
|
# Debug check - see https://stackoverflow.com/questions/646518/python-how-to-detect-debug-Interpreter
|
||||||
execute_process(
|
execute_process(
|
||||||
|
Loading…
Reference in New Issue
Block a user