blob: 0ac40f9dc1102482056c9813b44e6b1b270d3b98 [file] [log] [blame]
Anas Nashif3ae52622019-04-06 09:08:09 -04001# SPDX-License-Identifier: Apache-2.0
2
Carles Cufi16302922019-07-25 11:37:32 +02003# On Windows, instruct Python to output UTF-8 even when not
4# interacting with a terminal. This is required since Python scripts
5# are invoked by CMake code and, on Windows, standard I/O encoding defaults
6# to the current code page if not connected to a terminal, which is often
7# not what we want.
8if (WIN32)
9 set(ENV{PYTHONIOENCODING} "utf-8")
10endif()
11
Torsten Rasmussen94de3e92020-04-14 22:24:32 +020012set(PYTHON_MINIMUM_REQUIRED 3.6)
13
14# We are using foreach here, instead of find_program(PYTHON_EXECUTABLE_SYSTEM_DEFAULT "python" "python3")
15# cause just using find_program directly could result in a python2.7 as python, and not finding a valid python3.
Torsten Rasmussen5db987f2021-04-22 06:53:13 +020016foreach(PYTHON_PREFER ${PYTHON_PREFER} ${WEST_PYTHON} "python" "python3")
Torsten Rasmussen94de3e92020-04-14 22:24:32 +020017 find_program(PYTHON_PREFER_EXECUTABLE ${PYTHON_PREFER})
18 if(PYTHON_PREFER_EXECUTABLE)
19 execute_process (COMMAND "${PYTHON_PREFER_EXECUTABLE}" -c
20 "import sys; sys.stdout.write('.'.join([str(x) for x in sys.version_info[:2]]))"
21 RESULT_VARIABLE result
22 OUTPUT_VARIABLE version
23 ERROR_QUIET
24 OUTPUT_STRIP_TRAILING_WHITESPACE)
25
26 if(version VERSION_LESS PYTHON_MINIMUM_REQUIRED)
Torsten Rasmussen3a2f8342020-05-05 22:55:16 +020027 set(PYTHON_PREFER_EXECUTABLE "PYTHON_PREFER_EXECUTABLE-NOTFOUND")
Torsten Rasmussen94de3e92020-04-14 22:24:32 +020028 else()
29 set(PYTHON_MINIMUM_REQUIRED ${version})
30 set(PYTHON_EXACT EXACT)
Torsten Rasmussen3a2f8342020-05-05 22:55:16 +020031 # Python3_ROOT_DIR ensures that location will be preferred by FindPython3.
32 # On Linux, this has no impact as it will usually be /usr/bin
33 # but on Windows it solve issues when both 32 and 64 bit versions are
34 # installed, as version is not enough and FindPython3 might pick the
35 # version not on %PATH%. Setting Python3_ROOT_DIR ensures we are using
36 # the version we just tested.
37 get_filename_component(PYTHON_PATH ${PYTHON_PREFER_EXECUTABLE} DIRECTORY)
38 set(Python3_ROOT_DIR ${PYTHON_PATH})
Torsten Rasmussen94de3e92020-04-14 22:24:32 +020039 break()
40 endif()
41 endif()
42endforeach()
43
44find_package(Python3 ${PYTHON_MINIMUM_REQUIRED} REQUIRED ${PYTHON_EXACT})
Torsten Rasmussenb5a612d2020-04-13 13:53:41 +020045set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})