1+ # Copyright (c) 2020 ARM Limited. All rights reserved.
2+ # SPDX-License-Identifier: Apache-2.0
3+
4+ # CMake functions for checking for Python packages
5+ # Requires PYTHON_EXECUTABLE to be defined. Call FindPythonInterp first!
6+
7+ # NOTE: if moving this file, be sure to also move python_packagecheck.py
8+
9+ # must evaluate this now since CMAKE_CURRENT_LIST_DIR doesn't work in function scope
10+ set (PYTHON_PACKAGECHECK_SCRIPT ${CMAKE_CURRENT_LIST_DIR} /python_packagecheck.py)
11+
12+ # set OUTPUT_VAR to whether PACKAGENAME was found
13+ function (check_python_package PACKAGENAME OUTPUT_VAR)
14+
15+ # can't have Python packages without Python!
16+ if (NOT Python3_FOUND)
17+ set (${OUTPUT_VAR} FALSE PARENT_SCOPE)
18+ return ()
19+ endif ()
20+
21+ set (NEED_TO_RUN_CHECK TRUE )
22+
23+ if (DEFINED ${OUTPUT_VAR} )
24+ if (${OUTPUT_VAR} )
25+
26+ # if the python interpreter changed, we need to recheck
27+ if ("${PY_INTERP_FOR_${OUTPUT_VAR} }" STREQUAL "${Python3_EXECUTABLE} " )
28+ set (NEED_TO_RUN_CHECK FALSE )
29+ endif ()
30+
31+ endif ()
32+ endif ()
33+
34+ if (NEED_TO_RUN_CHECK)
35+ set (PY_INTERP_FOR_${OUTPUT_VAR} ${Python3_EXECUTABLE} CACHE INTERNAL "The python interpreter used to run the ${OUTPUT_VAR} check" FORCE)
36+
37+ execute_process (COMMAND ${Python3_EXECUTABLE} ${PYTHON_PACKAGECHECK_SCRIPT} ${PACKAGENAME}
38+ RESULT_VARIABLE PACKAGECHECK_RESULT)
39+
40+ if (${PACKAGECHECK_RESULT} EQUAL 0)
41+ set (HAVE_PACKAGE TRUE )
42+ else ()
43+ set (HAVE_PACKAGE FALSE )
44+ endif ()
45+
46+ if (HAVE_PACKAGE)
47+ message (STATUS "Checking for Python package ${PACKAGENAME} -- found" )
48+ else ()
49+ message (STATUS "Checking for Python package ${PACKAGENAME} -- not found" )
50+ endif ()
51+
52+ set (${OUTPUT_VAR} ${HAVE_PACKAGE} CACHE BOOL "Whether the Python package ${PACKAGENAME} was found" FORCE)
53+ mark_as_advanced (${OUTPUT_VAR} )
54+
55+ endif ()
56+ endfunction (check_python_package)
57+
58+ # check that PACKAGENAME can be imported, and print an error if not
59+ function (verify_python_package PACKAGENAME)
60+
61+ # we can just generate our own variable name
62+ string (TOUPPER "HAVE_${PACKAGENAME} " HAVE_VAR_NAME)
63+
64+ check_python_package(${PACKAGENAME} ${HAVE_VAR_NAME} )
65+
66+ if (NOT ${HAVE_VAR_NAME} )
67+ message (FATAL_ERROR "The required Python package ${PACKAGENAME} was not found in ${Python3_EXECUTABLE} . Please install it." )
68+ endif ()
69+ endfunction (verify_python_package)
0 commit comments