| # Copyright (c) 2020 Nordic Semiconductor ASA |
| # |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| import argparse |
| from pathlib import Path |
| from shutil import rmtree |
| |
| from west.commands import WestCommand |
| from west import log |
| |
| 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' |
| |
| run_cmake_export(share / 'zephyr-package' / 'cmake') |
| run_cmake_export(share / 'zephyrunittest-package' / 'cmake') |
| |
| def run_cmake_export(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('-- ')] |
| log.inf('\n'.join(msg)) |
| |
| def remove_if_exists(pathobj): |
| if pathobj.is_file(): |
| log.inf(f'- removing: {pathobj}') |
| pathobj.unlink() |
| elif pathobj.is_dir(): |
| log.inf(f'- removing: {pathobj}') |
| rmtree(pathobj) |