|  | # Copyright (c) 2020 Nordic Semiconductor ASA | 
|  | # | 
|  | # SPDX-License-Identifier: Apache-2.0 | 
|  |  | 
|  | import argparse | 
|  | from pathlib import Path | 
|  |  | 
|  | from west.commands import WestCommand | 
|  | from zcmake import run_cmake | 
|  |  | 
|  | EXPORT_DESCRIPTION = '''\ | 
|  | This command registers the current Zephyr installation as a CMake | 
|  | config package in the CMake user package registry. | 
|  |  | 
|  | In Windows, the CMake user package registry is found in: | 
|  | HKEY_CURRENT_USER\\Software\\Kitware\\CMake\\Packages\\ | 
|  |  | 
|  | In Linux and MacOS, the CMake user package registry is found in: | 
|  | ~/.cmake/packages/''' | 
|  |  | 
|  |  | 
|  | class ZephyrExport(WestCommand): | 
|  |  | 
|  | def __init__(self): | 
|  | super().__init__( | 
|  | 'zephyr-export', | 
|  | # Keep this in sync with the string in west-commands.yml. | 
|  | 'export Zephyr installation as a CMake config package', | 
|  | EXPORT_DESCRIPTION, | 
|  | accepts_unknown_args=False) | 
|  |  | 
|  | def do_add_parser(self, parser_adder): | 
|  | parser = parser_adder.add_parser( | 
|  | self.name, | 
|  | help=self.help, | 
|  | formatter_class=argparse.RawDescriptionHelpFormatter, | 
|  | description=self.description) | 
|  | return parser | 
|  |  | 
|  | def do_run(self, args, unknown_args): | 
|  | # The 'share' subdirectory of the top level zephyr repository. | 
|  | share = Path(__file__).parents[2] / 'share' | 
|  |  | 
|  | self.run_cmake_export(share / 'zephyr-package' / 'cmake') | 
|  | self.run_cmake_export(share / 'zephyrunittest-package' / 'cmake') | 
|  |  | 
|  | def run_cmake_export(self, path): | 
|  | # Run a package installation script. | 
|  | # | 
|  | # Filtering out lines that start with -- ignores the normal | 
|  | # CMake status messages and instead only prints the important | 
|  | # information. | 
|  |  | 
|  | lines = run_cmake(['-P', str(path / 'zephyr_export.cmake')], | 
|  | capture_output=True) | 
|  | msg = [line for line in lines if not line.startswith('-- ')] | 
|  | self.inf('\n'.join(msg)) |