| #!/usr/bin/env fuchsia-vendored-python |
| # Copyright 2022 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import argparse |
| import json |
| import pathlib |
| import subprocess |
| import sys |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser() |
| parser.add_argument( |
| "--cmc-path", |
| help="Path to cmc binary.", |
| type=pathlib.Path, |
| required=True, |
| ) |
| parser.add_argument( |
| "--stamp", |
| help="Path to stamp file to write.", |
| type=pathlib.Path, |
| required=True, |
| ) |
| parser.add_argument( |
| "--manifest-metadata", |
| help="Path to JSON file with a length-1 list of component manifests.", |
| type=argparse.FileType("r"), |
| required=True, |
| ) |
| parser.add_argument( |
| "--fromfile", |
| help="Path to list of expected includes.", |
| type=pathlib.Path, |
| required=True, |
| ) |
| parser.add_argument( |
| "--depfile", |
| help="Path to depfile to write.", |
| type=pathlib.Path, |
| required=True, |
| ) |
| parser.add_argument( |
| "--includeroot", |
| help="Path to root of includes.", |
| type=pathlib.Path, |
| required=True, |
| ) |
| parser.add_argument( |
| "--includepath", |
| help="Additional path for relative includes.", |
| type=pathlib.Path, |
| nargs="+", |
| ) |
| args = parser.parse_args() |
| |
| with args.manifest_metadata as f: |
| manifest_paths = json.load(f) |
| |
| if len(manifest_paths) != 1: |
| print("Manifest metadata from GN must include exactly 1 source path.") |
| return 1 |
| manifest_path = manifest_paths[0] |
| |
| cmc_args = [ |
| args.cmc_path, |
| "--stamp", |
| args.stamp, |
| "check-includes", |
| manifest_path, |
| "--fromfile", |
| args.fromfile, |
| "--depfile", |
| args.depfile, |
| "--includeroot", |
| args.includeroot, |
| ] |
| |
| for p in args.includepath: |
| cmc_args += ["--includepath", p] |
| |
| return subprocess.run(cmc_args).returncode |
| |
| |
| if __name__ == "__main__": |
| sys.exit(main()) |