blob: 6f889c6eb1ca5d66196133cec72fabf21f466d2f [file] [log] [blame]
#-------------------------------------------------------------------------------
# Copyright (c) 2019, Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
#-------------------------------------------------------------------------------
#FindPythonModules
#-----------
#This module checks availability of Python modules.
#
#This module has the following parameters:
# PYTHON_EXECUTABLE - Location of python interpreter.
# COMPONENTS - List of python modules to look for.
#
#This module defines the following variables:
# PY_XXX - Cached string variable with the location of the module.
# PY_XXX_FOUND - Set if the module is available.
#
# Where XXX is the upper case name of the module.
#
#Examples
# To look for m2r and report error if not found
# find_module(PythonModules COMPONENTS m2r)
# if (PY_M2R_FOUND)
# do something
# endif()
#
# To look for m2r and do not report error if not found
# find_module(PythonModules OPTIONAL_COMPONENTS m2r)
# if (PY_M2R_FOUND)
# do something
# endif()
if(NOT DEFINED PYTHON_EXECUTABLE)
message(FATAL_ERROR "FindPythonModules: mandatory parameter PYTHON_EXECUTABLE is missing.")
endif()
include(Utils)
foreach(_mod ${PythonModules_FIND_COMPONENTS})
string(TOUPPER ${_mod} _mod_upper)
string(REPLACE "-" "_" _modname "${_mod}")
if (NOT PY_${_mod_upper})
#Execute python and try to include the module.
execute_process(
COMMAND ${PYTHON_EXECUTABLE} -c "import ${_modname}; print(${_modname}.__file__);"
RESULT_VARIABLE ${_mod}_status
OUTPUT_VARIABLE ${_mod}_path
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
#If suceeded
if(NOT ${_mod}_status)
#Avoid trouble with directory separator on windows.
win_fix_dir_sep(PATH ${_mod}_path)
set("PY_${_mod_upper}" "${${_mod}_path}" CACHE STRING
"Location of Python module ${_mod}")
endif()
endif()
find_package_handle_standard_args(PY_${_mod_upper}
FOUND_VAR PY_${_mod_upper}_FOUND
REQUIRED_VARS PY_${_mod_upper}
FAIL_MESSAGE "Can not find Python module ${_mod}")
endforeach()