| #!/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()) |