#.rst: # FindPythonInterpAndLibs # ----------- # # Find the python interpreter and libraries as a whole. macro(FindPython3) # Use PYTHON_HOME as a hint to find Python 3. set(Python3_ROOT_DIR "${PYTHON_HOME}") find_package(Python3 COMPONENTS Interpreter Development) if(Python3_FOUND AND Python3_Interpreter_FOUND) set(PYTHON_LIBRARIES ${Python3_LIBRARIES}) set(PYTHON_INCLUDE_DIRS ${Python3_INCLUDE_DIRS}) set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) # The install name for the Python 3 framework in Xcode is relative to # the framework's location and not the dylib itself. # # @rpath/Python3.framework/Versions/3.x/Python3 # # This means that we need to compute the path to the Python3.framework # and use that as the RPATH instead of the usual dylib's directory. # # The check below shouldn't match Homebrew's Python framework as it is # called Python.framework instead of Python3.framework. if (APPLE AND Python3_LIBRARIES MATCHES "Python3.framework") string(FIND "${Python3_LIBRARIES}" "Python3.framework" python_framework_pos) string(SUBSTRING "${Python3_LIBRARIES}" "0" ${python_framework_pos} PYTHON_RPATH) endif() set(PYTHON3_FOUND TRUE) mark_as_advanced( PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS PYTHON_EXECUTABLE PYTHON_RPATH SWIG_EXECUTABLE) endif() endmacro() macro(FindPython2) # Use PYTHON_HOME as a hint to find Python 2. set(Python2_ROOT_DIR "${PYTHON_HOME}") find_package(Python2 COMPONENTS Interpreter Development) if(Python2_FOUND AND Python2_Interpreter_FOUND) set(PYTHON_LIBRARIES ${Python2_LIBRARIES}) set(PYTHON_INCLUDE_DIRS ${Python2_INCLUDE_DIRS}) set(PYTHON_EXECUTABLE ${Python2_EXECUTABLE}) set(PYTHON2_FOUND TRUE) mark_as_advanced( PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS PYTHON_EXECUTABLE SWIG_EXECUTABLE) endif() endmacro() if(PYTHON_LIBRARIES AND PYTHON_INCLUDE_DIRS AND PYTHON_EXECUTABLE AND SWIG_EXECUTABLE) set(PYTHONINTERPANDLIBS_FOUND TRUE) else() find_package(SWIG 2.0) if (SWIG_FOUND) if(NOT CMAKE_VERSION VERSION_LESS 3.12) if (LLDB_PYTHON_VERSION) if (LLDB_PYTHON_VERSION VERSION_EQUAL "2") FindPython2() elseif(LLDB_PYTHON_VERSION VERSION_EQUAL "3") FindPython3() endif() else() FindPython3() if (NOT PYTHON3_FOUND AND NOT CMAKE_SYSTEM_NAME STREQUAL Windows) FindPython2() endif() endif() else() find_package(PythonInterp) find_package(PythonLibs) if(PYTHONINTERP_FOUND AND PYTHONLIBS_FOUND AND SWIG_FOUND) if (NOT CMAKE_CROSSCOMPILING) string(REPLACE "." ";" pythonlibs_version_list ${PYTHONLIBS_VERSION_STRING}) list(GET pythonlibs_version_list 0 pythonlibs_major) list(GET pythonlibs_version_list 1 pythonlibs_minor) # Ignore the patch version. Some versions of macOS report a different # patch version for the system provided interpreter and libraries. if (CMAKE_CROSSCOMPILING OR (PYTHON_VERSION_MAJOR VERSION_EQUAL pythonlibs_major AND PYTHON_VERSION_MINOR VERSION_EQUAL pythonlibs_minor)) mark_as_advanced( PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS PYTHON_EXECUTABLE SWIG_EXECUTABLE) endif() endif() endif() endif() else() message(STATUS "SWIG 2 or later is required for Python support in LLDB but could not be found") endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(PythonInterpAndLibs FOUND_VAR PYTHONINTERPANDLIBS_FOUND REQUIRED_VARS PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS PYTHON_EXECUTABLE SWIG_EXECUTABLE) endif()