100 lines
2.9 KiB
CMake
100 lines
2.9 KiB
CMake
# Utilities to help with wrapping.
|
|
|
|
# Use CMake's find_package to find the version of Python installed.
|
|
macro(get_python_version)
|
|
if(${CMAKE_VERSION} VERSION_LESS "3.12.0")
|
|
# Use older version of cmake's find_python
|
|
find_package(PythonInterp)
|
|
|
|
if(NOT ${PYTHONINTERP_FOUND})
|
|
message(
|
|
FATAL_ERROR
|
|
"Cannot find Python interpreter. Please install Python>=3.5.")
|
|
endif()
|
|
|
|
find_package(PythonLibs ${PYTHON_VERSION_STRING})
|
|
|
|
else()
|
|
# Get info about the Python interpreter
|
|
# https://cmake.org/cmake/help/latest/module/FindPython.html#module:FindPython
|
|
find_package(Python COMPONENTS Interpreter Development)
|
|
|
|
if(NOT ${Python_FOUND})
|
|
message(
|
|
FATAL_ERROR
|
|
"Cannot find Python interpreter. Please install Python>=3.5.")
|
|
endif()
|
|
|
|
endif()
|
|
endmacro()
|
|
|
|
# Depending on the version of CMake, ensure all the appropriate variables are set.
|
|
macro(configure_python_variables)
|
|
if(${CMAKE_VERSION} VERSION_LESS "3.12.0")
|
|
set(Python_VERSION_MAJOR
|
|
${PYTHON_VERSION_MAJOR}
|
|
CACHE INTERNAL "")
|
|
set(Python_VERSION_MINOR
|
|
${PYTHON_VERSION_MINOR}
|
|
CACHE INTERNAL "")
|
|
set(Python_VERSION_PATCH
|
|
${PYTHON_VERSION_PATCH}
|
|
CACHE INTERNAL "")
|
|
set(Python_EXECUTABLE
|
|
${PYTHON_EXECUTABLE}
|
|
CACHE PATH "")
|
|
|
|
else()
|
|
# Set both sets of variables
|
|
set(PYTHON_VERSION_MAJOR
|
|
${Python_VERSION_MAJOR}
|
|
CACHE INTERNAL "")
|
|
set(PYTHON_VERSION_MINOR
|
|
${Python_VERSION_MINOR}
|
|
CACHE INTERNAL "")
|
|
set(PYTHON_VERSION_PATCH
|
|
${Python_VERSION_PATCH}
|
|
CACHE INTERNAL "")
|
|
set(PYTHON_EXECUTABLE
|
|
${Python_EXECUTABLE}
|
|
CACHE PATH "")
|
|
|
|
endif()
|
|
endmacro()
|
|
|
|
# Set the Python version for the wrapper and set the paths to the executable and
|
|
# include/library directories. WRAP_PYTHON_VERSION can be "Default" or a
|
|
# specific major.minor version.
|
|
macro(gtwrap_get_python_version WRAP_PYTHON_VERSION)
|
|
# Unset these cached variables to avoid surprises when the python in the
|
|
# current environment are different from the cached!
|
|
unset(Python_EXECUTABLE CACHE)
|
|
unset(Python_INCLUDE_DIRS CACHE)
|
|
unset(Python_VERSION_MAJOR CACHE)
|
|
unset(Python_VERSION_MINOR CACHE)
|
|
unset(Python_VERSION_PATCH CACHE)
|
|
|
|
# Allow override
|
|
if(${WRAP_PYTHON_VERSION} STREQUAL "Default")
|
|
# Check for Python3 or Python2 in order
|
|
get_python_version()
|
|
|
|
# Set the wrapper python version
|
|
set(WRAP_PYTHON_VERSION
|
|
"${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}.${Python_VERSION_PATCH}"
|
|
CACHE STRING "The version of Python to build the wrappers against."
|
|
FORCE)
|
|
|
|
else()
|
|
# Find the Python that best matches the python version specified.
|
|
find_package(
|
|
Python ${WRAP_PYTHON_VERSION}
|
|
COMPONENTS Interpreter Development
|
|
EXACT)
|
|
endif()
|
|
|
|
# (Always) Configure the variables once we find the python package
|
|
configure_python_variables()
|
|
|
|
endmacro()
|