| #!/usr/bin/env fuchsia-vendored-python |
| # Copyright 2020 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. |
| '''Reads the contents of a manifest file generated by the build and verifies |
| that there are no collisions among destination paths. |
| ''' |
| |
| import argparse |
| import json |
| import sys |
| |
| # Import from the current directory. |
| import distribution_manifest |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser(description=__doc__) |
| parser.add_argument( |
| '--input', help='Path to original manifest', required=True) |
| parser.add_argument( |
| '--output', help='Path to the updated manifest', required=True) |
| parser.add_argument('--depfile', help='Path to GN style depfile') |
| parser.add_argument( |
| '--hermetic-inputs-file', |
| metavar='INPUTS_FILE', |
| help= |
| 'When used, only output the INPUTS_FILE which lists all inputs used ' + |
| 'by this command, instead of OUTPUT and DEPFILE.') |
| parser.add_argument( |
| '--prefix', |
| metavar='PREFIX', |
| help='Prepend PREFIX to each destination path') |
| args = parser.parse_args() |
| |
| contents = u"" |
| with open(args.input, 'r') as input_file: |
| try: |
| contents = json.load(input_file) |
| except Exception as e: |
| print("while reading:\n\t{}:\n\t{}".format(args.input, e)) |
| return 1 |
| |
| opened_files = set() |
| entries, error = distribution_manifest.expand_manifest( |
| contents, opened_files) |
| if error: |
| print(error, file=sys.stderr) |
| return 1 |
| |
| if args.prefix: |
| entries = [ |
| distribution_manifest.Entry( |
| destination=args.prefix + entry.destination, |
| source=entry.source, |
| label=entry.label) for entry in entries |
| ] |
| |
| # NOTE: If --hermetic-inputs-file INPUTS_FILE is used, then |
| # do not output the manifest file or a depfile, only generate an |
| # inputs list file. See hermetrics_inputs_file in BUILDCONFIG.gn. |
| if args.hermetic_inputs_file: |
| with open(args.hermetic_inputs_file, 'w') as inputs_file: |
| inputs_file.write('\n'.join(sorted(opened_files))) |
| else: |
| if args.output: |
| with open(args.output, 'w') as output_file: |
| json.dump( |
| [e._asdict() for e in sorted(entries)], |
| output_file, |
| indent=2, |
| sort_keys=True, |
| separators=(',', ': ')) |
| |
| if args.depfile: |
| with open(args.depfile, 'w+') as depfile: |
| depfile.write( |
| '%s: %s\n' % (args.output, ' '.join(opened_files))) |
| |
| return 0 |
| |
| |
| if __name__ == '__main__': |
| sys.exit(main()) |