Index: cmake/modules/LLDBConfig.cmake =================================================================== --- cmake/modules/LLDBConfig.cmake +++ cmake/modules/LLDBConfig.cmake @@ -161,56 +161,118 @@ file(TO_CMAKE_PATH "${PYTHON_HOME}" PYTHON_HOME) # TODO(compnerd) when CMake Policy `CMP0091` is set to NEW, we should use # if(CMAKE_MSVC_RUNTIME_LIBRARY MATCHES MultiThreadedDebug) - if(CMAKE_BUILD_TYPE STREQUAL Debug) - file(TO_CMAKE_PATH "${PYTHON_HOME}/python_d.exe" PYTHON_EXE) - file(TO_CMAKE_PATH "${PYTHON_HOME}/libs/${PYTHONLIBS_BASE_NAME}_d.lib" PYTHON_LIB) - file(TO_CMAKE_PATH "${PYTHON_HOME}/${PYTHONLIBS_BASE_NAME}_d.dll" PYTHON_DLL) - else() - file(TO_CMAKE_PATH "${PYTHON_HOME}/python.exe" PYTHON_EXE) - file(TO_CMAKE_PATH "${PYTHON_HOME}/libs/${PYTHONLIBS_BASE_NAME}.lib" PYTHON_LIB) - file(TO_CMAKE_PATH "${PYTHON_HOME}/${PYTHONLIBS_BASE_NAME}.dll" PYTHON_DLL) - endif() - - foreach(component PYTHON_EXE;PYTHON_LIB;PYTHON_DLL) - if(NOT EXISTS ${${component}}) - message(WARNING "unable to find ${component}") - unset(${component}) + if (NOT DEFINED CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL Debug) + file(TO_CMAKE_PATH "${PYTHON_HOME}/python_d.exe" PYTHON_DEBUG_EXE) + file(TO_CMAKE_PATH "${PYTHON_HOME}/libs/${PYTHONLIBS_BASE_NAME}_d.lib" PYTHON_DEBUG_LIB) + file(TO_CMAKE_PATH "${PYTHON_HOME}/${PYTHONLIBS_BASE_NAME}_d.dll" PYTHON_DEBUG_DLL) + + foreach(component PYTHON_DEBUG_EXE;PYTHON_DEBUG_LIB;PYTHON_DEBUG_DLL) + if(NOT EXISTS ${${component}}) + message(WARNING "unable to find ${component}") + unset(${component}) + endif() + endforeach() + + if (NOT PYTHON_DEBUG_EXE OR NOT PYTHON_DEBUG_LIB OR NOT PYTHON_DEBUG_DLL) + message(WARNING "Unable to find all Python components. Python support will be disabled for this build.") + set(LLDB_DISABLE_PYTHON 1 PARENT_SCOPE) + return() endif() - endforeach() - if (NOT PYTHON_EXE OR NOT PYTHON_LIB OR NOT PYTHON_DLL) - message(WARNING "Unable to find all Python components. Python support will be disabled for this build.") - set(LLDB_DISABLE_PYTHON 1 PARENT_SCOPE) - return() + # Find the version of the Python interpreter. + execute_process(COMMAND "${PYTHON_DEBUG_EXE}" -c + "import sys; sys.stdout.write(';'.join([str(x) for x in sys.version_info[:3]]))" + OUTPUT_VARIABLE PYTHON_DEBUG_VERSION_OUTPUT + RESULT_VARIABLE PYTHON_DEBUG_VERSION_RESULT + ERROR_QUIET) + if(NOT PYTHON_DEBUG_VERSION_RESULT) + string(REPLACE ";" "." PYTHON_DEBUG_VERSION_STRING "${PYTHON_DEBUG_VERSION_OUTPUT}") + list(GET PYTHON_DEBUG_VERSION_OUTPUT 0 PYTHON_DEBUG_VERSION_MAJOR) + list(GET PYTHON_DEBUG_VERSION_OUTPUT 1 PYTHON_DEBUG_VERSION_MINOR) + list(GET PYTHON_DEBUG_VERSION_OUTPUT 2 PYTHON_DEBUG_VERSION_PATCH) + endif() endif() - - # Find the version of the Python interpreter. - execute_process(COMMAND "${PYTHON_EXE}" -c - "import sys; sys.stdout.write(';'.join([str(x) for x in sys.version_info[:3]]))" - OUTPUT_VARIABLE PYTHON_VERSION_OUTPUT - RESULT_VARIABLE PYTHON_VERSION_RESULT - ERROR_QUIET) - if(NOT PYTHON_VERSION_RESULT) - string(REPLACE ";" "." PYTHON_VERSION_STRING "${PYTHON_VERSION_OUTPUT}") - list(GET PYTHON_VERSION_OUTPUT 0 PYTHON_VERSION_MAJOR) - list(GET PYTHON_VERSION_OUTPUT 1 PYTHON_VERSION_MINOR) - list(GET PYTHON_VERSION_OUTPUT 2 PYTHON_VERSION_PATCH) + + if (NOT DEFINED CMAKE_BUILD_TYPE OR NOT CMAKE_BUILD_TYPE STREQUAL Debug) + file(TO_CMAKE_PATH "${PYTHON_HOME}/python.exe" PYTHON_RELEASE_EXE) + file(TO_CMAKE_PATH "${PYTHON_HOME}/libs/${PYTHONLIBS_BASE_NAME}.lib" PYTHON_RELEASE_LIB) + file(TO_CMAKE_PATH "${PYTHON_HOME}/${PYTHONLIBS_BASE_NAME}.dll" PYTHON_RELEASE_DLL) + + foreach(component PYTHON_RELEASE_EXE;PYTHON_RELEASE_LIB;PYTHON_RELEASE_DLL) + if(NOT EXISTS ${${component}}) + message(WARNING "unable to find ${component}") + unset(${component}) + endif() + endforeach() + + if (NOT PYTHON_RELEASE_EXE OR NOT PYTHON_RELEASE_LIB OR NOT PYTHON_RELEASE_DLL) + message(WARNING "Unable to find all Python components. Python support will be disabled for this build.") + set(LLDB_DISABLE_PYTHON 1 PARENT_SCOPE) + return() + endif() + + # Find the version of the Python interpreter. + execute_process(COMMAND "${PYTHON_RELEASE_EXE}" -c + "import sys; sys.stdout.write(';'.join([str(x) for x in sys.version_info[:3]]))" + OUTPUT_VARIABLE PYTHON_RELEASE_VERSION_OUTPUT + RESULT_VARIABLE PYTHON_RELEASE_VERSION_RESULT + ERROR_QUIET) + if(NOT PYTHON_RELEASE_VERSION_RESULT) + string(REPLACE ";" "." PYTHON_RELEASE_VERSION_STRING "${PYTHON_RELEASE_VERSION_OUTPUT}") + list(GET PYTHON_RELEASE_VERSION_OUTPUT 0 PYTHON_RELEASE_VERSION_MAJOR) + list(GET PYTHON_RELEASE_VERSION_OUTPUT 1 PYTHON_RELEASE_VERSION_MINOR) + list(GET PYTHON_RELEASE_VERSION_OUTPUT 2 PYTHON_RELEASE_VERSION_PATCH) + endif() endif() # Set the same variables as FindPythonInterp and FindPythonLibs. - set(PYTHON_EXECUTABLE ${PYTHON_EXE} PARENT_SCOPE) - set(PYTHON_LIBRARY ${PYTHON_LIB} PARENT_SCOPE) + set(PYTHON_EXECUTABLE $<$:${PYTHON_DEBUG_EXE}>$<$>:${PYTHON_RELEASE_EXE}>) + set(PYTHON_LIBRARY $<$:${PYTHON_DEBUG_LIB}>$<$>:${PYTHON_RELEASE_LIB}>) + set(PYTHON_DLL $<$:${PYTHON_DEBUG_DLL}>$<$>:${PYTHON_RELEASE_DLL}>) + + set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} PARENT_SCOPE) + set(PYTHON_LIBRARY ${PYTHON_LIBRARY} PARENT_SCOPE) set(PYTHON_DLL ${PYTHON_DLL} PARENT_SCOPE) set(PYTHON_INCLUDE_DIR ${PYTHON_INCLUDE_DIR} PARENT_SCOPE) set(PYTHONLIBS_VERSION_STRING "${PYTHONLIBS_VERSION_STRING}" PARENT_SCOPE) - set(PYTHON_VERSION_STRING ${PYTHON_VERSION_STRING} PARENT_SCOPE) - set(PYTHON_VERSION_MAJOR ${PYTHON_VERSION_MAJOR} PARENT_SCOPE) - set(PYTHON_VERSION_MINOR ${PYTHON_VERSION_MINOR} PARENT_SCOPE) - set(PYTHON_VERSION_PATCH ${PYTHON_VERSION_PATCH} PARENT_SCOPE) - - message(STATUS "LLDB Found PythonExecutable: ${PYTHON_EXECUTABLE} (${PYTHON_VERSION_STRING})") - message(STATUS "LLDB Found PythonLibs: ${PYTHON_LIB} (${PYTHONLIBS_VERSION_STRING})") - message(STATUS "LLDB Found PythonDLL: ${PYTHON_DLL}") + + if (NOT DEFINED CMAKE_BUILD_TYPE) + # multiconfiguration generator was selected (i.e. Visual Studio) + # so print both debug and release variables related to python + message(STATUS "LLDB Found PythonExecutable: ${PYTHON_RELEASE_EXE} (${PYTHON_RELEASE_VERSION_STRING}) and ${PYTHON_DEBUG_EXE} (${PYTHON_DEBUG_VERSION_STRING})") + message(STATUS "LLDB Found PythonLibs: ${PYTHON_RELEASE_LIB} (${PYTHONLIBS_VERSION_STRING}) and ${PYTHON_DEBUG_LIB} (${PYTHONLIBS_VERSION_STRING})") + message(STATUS "LLDB Found PythonDLL: ${PYTHON_RELEASE_DLL} and ${PYTHON_DEBUG_DLL}") + + if (NOT PYTHON_DEBUG_VERSION_STRING STREQUAL PYTHON_RELEASE_VERSION_STRING) + message(FATAL_ERROR "Python versions for debug (${PYTHON_DEBUG_VERSION_STRING}) and release (${PYTHON_RELEASE_VERSION_STRING}) are different." + "Python installation is corrupted") + endif () + + # both debug and release versions should match now + set(PYTHON_VERSION_STRING ${PYTHON_RELEASE_VERSION_STRING} PARENT_SCOPE) + set(PYTHON_VERSION_MAJOR ${PYTHON_RELEASE_VERSION_MAJOR} PARENT_SCOPE) + set(PYTHON_VERSION_MINOR ${PYTHON_RELEASE_VERSION_MINOR} PARENT_SCOPE) + set(PYTHON_VERSION_PATCH ${PYTHON_RELEASE_VERSION_PATCH} PARENT_SCOPE) + + elseif (CMAKE_BUILD_TYPE STREQUAL Debug) + message(STATUS "LLDB Found PythonExecutable: ${PYTHON_DEBUG_EXE} (${PYTHON_DEBUG_VERSION_STRING})") + message(STATUS "LLDB Found PythonLibs: ${PYTHON_DEBUG_LIB} (${PYTHONLIBS_VERSION_STRING})") + message(STATUS "LLDB Found PythonDLL: ${PYTHON_DEBUG_DLL}") + + set(PYTHON_VERSION_STRING ${PYTHON_DEBUG_VERSION_STRING} PARENT_SCOPE) + set(PYTHON_VERSION_MAJOR ${PYTHON_DEBUG_VERSION_MAJOR} PARENT_SCOPE) + set(PYTHON_VERSION_MINOR ${PYTHON_DEBUG_VERSION_MINOR} PARENT_SCOPE) + set(PYTHON_VERSION_PATCH ${PYTHON_DEBUG_VERSION_PATCH} PARENT_SCOPE) + else () + message(STATUS "LLDB Found PythonExecutable: ${PYTHON_RELEASE_EXE} (${PYTHON_RELEASE_VERSION_STRING})") + message(STATUS "LLDB Found PythonLibs: ${PYTHON_RELEASE_LIB} (${PYTHONLIBS_VERSION_STRING})") + message(STATUS "LLDB Found PythonDLL: ${PYTHON_RELEASE_DLL}") + + set(PYTHON_VERSION_STRING ${PYTHON_RELEASE_VERSION_STRING} PARENT_SCOPE) + set(PYTHON_VERSION_MAJOR ${PYTHON_RELEASE_VERSION_MAJOR} PARENT_SCOPE) + set(PYTHON_VERSION_MINOR ${PYTHON_RELEASE_VERSION_MINOR} PARENT_SCOPE) + set(PYTHON_VERSION_PATCH ${PYTHON_RELEASE_VERSION_PATCH} PARENT_SCOPE) + endif () message(STATUS "LLDB Found PythonIncludeDirs: ${PYTHON_INCLUDE_DIR}") endfunction(find_python_libs_windows)