# Copyright 2020 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Creates a complete CMX (v1) component manifest, from a program name and manifest fragment file.""" import argparse import json import sys def BuildCmxFromFragment(output_file, fragment_file, program_binary): """Reads a CMX fragment specifying e.g. features & sandbox, and a program binary's filename, and writes out the full CMX. output_file: Build-relative filename at which to write the full CMX. fragment_file: Build-relative filename of the CMX fragment to read from. program_binary: Package-relative filename of the program binary. """ with open(output_file, 'w') as component_manifest_file: component_manifest = json.load(open(fragment_file, 'r')) component_manifest.update({ 'program': { 'binary': program_binary }, }) json.dump(component_manifest, component_manifest_file) def main(): parser = argparse.ArgumentParser() parser.add_argument( '--cmx-fragment', required=True, help='Path to the CMX fragment to read from') parser.add_argument( '--cmx', required=True, help='Path to write the complete CMX file to') parser.add_argument( '--program', required=True, help='Package-relative path to the program binary') args = parser.parse_args() return BuildCmxFromFragment(args.cmx, args.cmx_fragment, args.program) if __name__ == '__main__': sys.exit(main())