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