|  | # SPDX-License-Identifier: Apache-2.0 | 
|  |  | 
|  | include_guard(GLOBAL) | 
|  |  | 
|  | include(python) | 
|  |  | 
|  | # west is an optional dependency. We need to run west using the same | 
|  | # Python interpreter as everything else, though, so we play some extra | 
|  | # tricks. | 
|  |  | 
|  | # When west runs cmake, it sets WEST_PYTHON to its interpreter. If | 
|  | # it's defined, we assume west is installed. We do these checks here | 
|  | # instead of in the failure paths below to avoid CMake warnings about | 
|  | # WEST_PYTHON not being used. | 
|  | if(DEFINED WEST_PYTHON) | 
|  | # Cut out any symbolic links, e.g. python3.x -> python | 
|  | get_filename_component(west_realpath ${WEST_PYTHON} REALPATH) | 
|  | get_filename_component(python_realpath ${PYTHON_EXECUTABLE} REALPATH) | 
|  |  | 
|  | # If realpaths differ from the variables we're using, add extra | 
|  | # diagnostics. | 
|  | if(NOT ("${west_realpath}" STREQUAL "${WEST_PYTHON}")) | 
|  | set(west_realpath_msg " (real path ${west_realpath})") | 
|  | else() | 
|  | set(west_realpath_msg "") | 
|  | endif() | 
|  | if(NOT ("${python_realpath}" STREQUAL "${PYTHON_EXECUTABLE}")) | 
|  | set(python_realpath_msg " (real path ${python_realpath})") | 
|  | else() | 
|  | set(python_realpath_msg "") | 
|  | endif() | 
|  | endif() | 
|  |  | 
|  | execute_process( | 
|  | COMMAND | 
|  | ${PYTHON_EXECUTABLE} | 
|  | -c | 
|  | "import west.version; print(west.version.__version__, end='')" | 
|  | OUTPUT_VARIABLE west_version | 
|  | ERROR_VARIABLE west_version_err | 
|  | RESULT_VARIABLE west_version_output_result | 
|  | ) | 
|  |  | 
|  | if(west_version_output_result) | 
|  | if(DEFINED WEST_PYTHON) | 
|  | if(NOT (${west_realpath} STREQUAL ${python_realpath})) | 
|  | set(PYTHON_EXECUTABLE_OUT_OF_SYNC "\nOr verify these installations:\n\ | 
|  | The Python version used by west is:  ${WEST_PYTHON}${west_realpath_msg}\n\ | 
|  | The Python version used by CMake is: ${PYTHON_EXECUTABLE}${python_realpath_msg}") | 
|  | endif() | 
|  |  | 
|  | message(FATAL_ERROR "Unable to import west.version from '${PYTHON_EXECUTABLE}':\n${west_version_err}\ | 
|  | Please install with:\n\ | 
|  | ${PYTHON_EXECUTABLE} -m pip install west\ | 
|  | ${PYTHON_EXECUTABLE_OUT_OF_SYNC}") | 
|  | else() | 
|  | # WEST_PYTHON is undefined and we couldn't import west. That's | 
|  | # fine; it's optional. | 
|  | set(WEST WEST-NOTFOUND CACHE INTERNAL "West") | 
|  | endif() | 
|  | else() | 
|  | # We can import west from PYTHON_EXECUTABLE and have its version. | 
|  |  | 
|  | # Make sure its version matches the minimum required one. | 
|  | # Keep this version identical to the one in scripts/requirements-base.txt | 
|  | set_ifndef(MIN_WEST_VERSION 0.14.0) | 
|  | if(${west_version} VERSION_LESS ${MIN_WEST_VERSION}) | 
|  | message(FATAL_ERROR "The detected west version, ${west_version}, is unsupported.\n\ | 
|  | The minimum supported version is ${MIN_WEST_VERSION}.\n\ | 
|  | Please upgrade with:\n\ | 
|  | ${PYTHON_EXECUTABLE} -m pip install --upgrade west\ | 
|  | ${PYTHON_EXECUTABLE_OUT_OF_SYNC}\n") | 
|  | endif() | 
|  |  | 
|  | # Set WEST to a COMMAND prefix as if it were a find_program() result, and | 
|  | # cache the value so the Zephyr Eclipse plugin knows how to invoke West. | 
|  | set(WEST ${PYTHON_EXECUTABLE} -m west CACHE INTERNAL "West") | 
|  |  | 
|  | # Print information about the west module we're relying on. This | 
|  | # will still work even after output is one line. | 
|  | message(STATUS "Found west (found suitable version \"${west_version}\", minimum required is \"${MIN_WEST_VERSION}\")") | 
|  |  | 
|  | execute_process( | 
|  | COMMAND ${WEST} topdir | 
|  | OUTPUT_VARIABLE WEST_TOPDIR | 
|  | ERROR_QUIET | 
|  | RESULT_VARIABLE west_topdir_result | 
|  | OUTPUT_STRIP_TRAILING_WHITESPACE | 
|  | WORKING_DIRECTORY ${ZEPHYR_BASE} | 
|  | ) | 
|  |  | 
|  | if(west_topdir_result) | 
|  | # west topdir is undefined. | 
|  | # That's fine; west is optional, so could be custom Zephyr project. | 
|  | set(WEST WEST-NOTFOUND CACHE INTERNAL "West") | 
|  | endif() | 
|  | endif() |