Anas Nashif | 3ae5262 | 2019-04-06 09:08:09 -0400 | [diff] [blame] | 1 | # SPDX-License-Identifier: Apache-2.0 |
| 2 | |
Carles Cufi | 1630292 | 2019-07-25 11:37:32 +0200 | [diff] [blame] | 3 | # 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. |
| 8 | if (WIN32) |
| 9 | set(ENV{PYTHONIOENCODING} "utf-8") |
| 10 | endif() |
| 11 | |
Torsten Rasmussen | 94de3e9 | 2020-04-14 22:24:32 +0200 | [diff] [blame] | 12 | set(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 Rasmussen | 5db987f | 2021-04-22 06:53:13 +0200 | [diff] [blame] | 16 | foreach(PYTHON_PREFER ${PYTHON_PREFER} ${WEST_PYTHON} "python" "python3") |
Torsten Rasmussen | 94de3e9 | 2020-04-14 22:24:32 +0200 | [diff] [blame] | 17 | 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 Rasmussen | 3a2f834 | 2020-05-05 22:55:16 +0200 | [diff] [blame] | 27 | set(PYTHON_PREFER_EXECUTABLE "PYTHON_PREFER_EXECUTABLE-NOTFOUND") |
Torsten Rasmussen | 94de3e9 | 2020-04-14 22:24:32 +0200 | [diff] [blame] | 28 | else() |
| 29 | set(PYTHON_MINIMUM_REQUIRED ${version}) |
| 30 | set(PYTHON_EXACT EXACT) |
Torsten Rasmussen | 3a2f834 | 2020-05-05 22:55:16 +0200 | [diff] [blame] | 31 | # 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 Rasmussen | 94de3e9 | 2020-04-14 22:24:32 +0200 | [diff] [blame] | 39 | break() |
| 40 | endif() |
| 41 | endif() |
| 42 | endforeach() |
| 43 | |
| 44 | find_package(Python3 ${PYTHON_MINIMUM_REQUIRED} REQUIRED ${PYTHON_EXACT}) |
Torsten Rasmussen | b5a612d | 2020-04-13 13:53:41 +0200 | [diff] [blame] | 45 | set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) |