Skip to content

fix(cmake): unset stale PYTHON_MODULE_DEBUG_POSTFIX and correct USE_PYTHON_INCLUDE_DIR variable#6086

Open
henryiii wants to merge 1 commit into
pybind:masterfrom
henryiii:fix/cmake-python-cache-and-includedir
Open

fix(cmake): unset stale PYTHON_MODULE_DEBUG_POSTFIX and correct USE_PYTHON_INCLUDE_DIR variable#6086
henryiii wants to merge 1 commit into
pybind:masterfrom
henryiii:fix/cmake-python-cache-and-includedir

Conversation

@henryiii

Copy link
Copy Markdown
Collaborator

🤖 AI text below 🤖

Part of #6084

Summary

Two small CMake correctness fixes:

Fix 1 — stale PYTHON_MODULE_DEBUG_POSTFIX on interpreter change (tools/pybind11NewTools.cmake): When the Python executable changes between CMake runs, PYTHON_IS_DEBUG and PYTHON_MODULE_EXTENSION are unset from the cache to force recomputation, but PYTHON_MODULE_DEBUG_POSTFIX was not. The subsequent if(NOT DEFINED PYTHON_MODULE_DEBUG_POSTFIX) guard then skips recomputation and the stale postfix from the previous interpreter survives. The fix adds unset(PYTHON_MODULE_DEBUG_POSTFIX CACHE) alongside the other two unsets.

Fix 2 — variable mismatch in USE_PYTHON_INCLUDE_DIR (CMakeLists.txt): The elseif branch checked PYTHON_INCLUDE_DIR (singular, the old FindPythonLibs variable) but then expanded ${PYTHON_INCLUDE_DIRS} (plural), which is always empty in that path, silently installing headers to a wrong location. The fix uses the variable that was actually checked (${PYTHON_INCLUDE_DIR}). A Python3_INCLUDE_DIRS branch is also added so USE_PYTHON_INCLUDE_DIR works when pybind11NewTools resolves Python via the Python3 component (the _Python variable is Python3 in that case, so the existing Python_INCLUDE_DIRS branch never matches).

…YTHON_INCLUDE_DIR variable

When the Python executable changes between CMake runs,
PYTHON_MODULE_DEBUG_POSTFIX was not being unset alongside PYTHON_IS_DEBUG
and PYTHON_MODULE_EXTENSION, allowing a stale postfix to survive interpreter
changes.

In the USE_PYTHON_INCLUDE_DIR block, the elseif branch checked
PYTHON_INCLUDE_DIR (singular) but expanded PYTHON_INCLUDE_DIRS (plural),
always silently resolving to an empty string. Correct it to expand
${PYTHON_INCLUDE_DIR}. Also add a Python3_INCLUDE_DIRS branch so the
option works when pybind11NewTools resolves Python via the Python3
find-package component.

Assisted-by: ClaudeCode:claude-fable-5
@henryiii henryiii marked this pull request as ready for review June 11, 2026 22:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant