diff --git a/Modules/FindPython/Support.cmake b/Modules/FindPython/Support.cmake index 231e57ed53..55959670ff 100644 --- a/Modules/FindPython/Support.cmake +++ b/Modules/FindPython/Support.cmake @@ -79,6 +79,53 @@ function (_PYTHON_MARK_AS_INTERNAL) endfunction() +function (_PYTHON_RESET_ARTIFACTS comp) + set(components ${comp}) + if (comp STREQUAL "Interpreter") + list (APPEND components Compiler Development NumPy) + endif() + if (comp STREQUAL "Development") + list (APPEND components NumPy) + endif() + set(find_components ${${_PYTHON_BASE}_FIND_COMPONENTS}) + list(TRANSFORM find_components REPLACE "^Development.*" "Development") + list(REMOVE_DUPLICATES find_components) + + foreach (component IN LISTS components) + if (NOT component IN_LIST find_components) + continue() + endif() + if (component STREQUAL "Interpreter") + unset(_${_PYTHON_PREFIX}_EXECUTABLE CACHE) + endif() + if (component STREQUAL "Compiler" + AND "IronPython" IN_LIST _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS) + unset(_${_PYTHON_PREFIX}_COMPILER CACHE) + endif() + if (component STREQUAL "Development") + set(artifacts ${ARGN}) + if (NOT artifacts) + set(artifacts LIBRARY SABI_LIBRARY INCLUDE_DIR) + endif() + unset(_${_PYTHON_PREFIX}_CONFIG) + foreach (artifact IN LISTS artifacts) + if (artifact IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS) + if (artifact MATCHES "LIBRARY") + unset(_${_PYTHON_PREFIX}_${artifact}_RELEASE CACHE) + unset(_${_PYTHON_PREFIX}_${artifact}_DEBUG CACHE) + elseif(arifact STREQUAL "INCLUDE_DIR") + unset(_${_PYTHON_PREFIX}_${artifact} CACHE) + endif() + endif() + endforeach() + endif() + if (component STREQUAL "NumPy") + unset(_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR CACHE) + endif() + endforeach() +endfunction() + + macro (_PYTHON_SELECT_LIBRARY_CONFIGURATIONS _PYTHON_BASENAME) if(NOT DEFINED ${_PYTHON_BASENAME}_LIBRARY_RELEASE) set(${_PYTHON_BASENAME}_LIBRARY_RELEASE "${_PYTHON_BASENAME}_LIBRARY_RELEASE-NOTFOUND") @@ -1915,6 +1962,8 @@ if ("Interpreter" IN_LIST ${_PYTHON_BASE}_FIND_COMPONENTS) if (NOT ${_PYTHON_PREFIX}_EXECUTABLE STREQUAL _${_PYTHON_PREFIX}_EXECUTABLE) # invalidate cache properties unset (_${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES CACHE) + # invalidate the previous results for any other requested components + _python_reset_artifacts(Interpreter) endif() set (_${_PYTHON_PREFIX}_EXECUTABLE "${${_PYTHON_PREFIX}_EXECUTABLE}" CACHE INTERNAL "") unset (_${_PYTHON_PREFIX}_EXECUTABLE_DEBUG CACHE) @@ -2821,18 +2870,17 @@ if (("Development.Module" IN_LIST ${_PYTHON_BASE}_FIND_COMPONENTS if (DEFINED ${_PYTHON_PREFIX}_LIBRARY AND IS_ABSOLUTE "${${_PYTHON_PREFIX}_LIBRARY}") + _python_reset_artifacts(Development) set (_${_PYTHON_PREFIX}_LIBRARY_RELEASE "${${_PYTHON_PREFIX}_LIBRARY}" CACHE INTERNAL "") - unset (_${_PYTHON_PREFIX}_LIBRARY_DEBUG CACHE) - unset (_${_PYTHON_PREFIX}_INCLUDE_DIR CACHE) endif() if (DEFINED ${_PYTHON_PREFIX}_SABI_LIBRARY AND IS_ABSOLUTE "${${_PYTHON_PREFIX}_SABI_LIBRARY}") + _python_reset_artifacts(Development SABI_LIBRARY INCLUDE_DIR) set (_${_PYTHON_PREFIX}_SABI_LIBRARY_RELEASE "${${_PYTHON_PREFIX}_SABI_LIBRARY}" CACHE INTERNAL "") - unset (_${_PYTHON_PREFIX}_SABI_LIBRARY_DEBUG CACHE) - unset (_${_PYTHON_PREFIX}_INCLUDE_DIR CACHE) endif() if (DEFINED ${_PYTHON_PREFIX}_INCLUDE_DIR AND IS_ABSOLUTE "${${_PYTHON_PREFIX}_INCLUDE_DIR}") + _python_reset_artifacts(Development INCLUDE_DIR) set (_${_PYTHON_PREFIX}_INCLUDE_DIR "${${_PYTHON_PREFIX}_INCLUDE_DIR}" CACHE INTERNAL "") endif()