| Index: services/catalog/public/tools/sourcify_manifest.py
|
| diff --git a/services/catalog/public/tools/sourcify_manifest.py b/services/catalog/public/tools/sourcify_manifest.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..81c219dd843a7dd14f7141caee08b3000f7d6387
|
| --- /dev/null
|
| +++ b/services/catalog/public/tools/sourcify_manifest.py
|
| @@ -0,0 +1,60 @@
|
| +#!/usr/bin/env python
|
| +# Copyright 2017 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.
|
| +
|
| +"""Generates a C++ source file which defines a string constant containing the
|
| +contents of a catalog manifest file. Useful for baking catalogs into binaries
|
| +which don't want to hit disk before initializing the catalog."""
|
| +
|
| +import argparse
|
| +import json
|
| +import os.path
|
| +import sys
|
| +
|
| +
|
| +# Token used to delimit raw strings in the generated source file. It's illegal
|
| +# for this token to appear within the contents of the input manifest itself.
|
| +_RAW_STRING_DELIMITER = "#CATALOG_JSON#"
|
| +
|
| +
|
| +def main():
|
| + parser = argparse.ArgumentParser(
|
| + description="Generates a C++ constant containing a catalog manifest.")
|
| + parser.add_argument("--input")
|
| + parser.add_argument("--output")
|
| + parser.add_argument("--symbol-name")
|
| + parser.add_argument("--pretty", action="store_true")
|
| + args, _ = parser.parse_known_args()
|
| +
|
| + if args.input is None or args.output is None or args.symbol_name is None:
|
| + raise Exception("--input, --output, and --symbol-name are required")
|
| +
|
| + with open(args.input, 'r') as input_file:
|
| + manifest_contents = input_file.read()
|
| +
|
| + if manifest_contents.find(_RAW_STRING_DELIMITER) >= 0:
|
| + raise Exception(
|
| + "Unexpected '%s' found in input manifest." % _RAW_STRING_DELIMITER)
|
| +
|
| + qualified_symbol_name = args.symbol_name.split("::")
|
| + namespace = qualified_symbol_name[0:-1]
|
| + symbol_name = qualified_symbol_name[-1]
|
| +
|
| + with open(args.output, 'w') as output_file:
|
| + output_file.write(
|
| + "// This is a generated file produced by\n"
|
| + "// src/services/catalog/public/tools/sourcify_manifest.py.\n\n")
|
| + for name in namespace:
|
| + output_file.write("namespace %s {\n" % name)
|
| + output_file.write("\nextern const char %s[];" % symbol_name)
|
| + output_file.write("\nconst char %s[] = R\"%s(%s)%s\";\n\n" %
|
| + (symbol_name, _RAW_STRING_DELIMITER, manifest_contents,
|
| + _RAW_STRING_DELIMITER))
|
| + for name in reversed(namespace):
|
| + output_file.write("} // %s\n" % name)
|
| +
|
| + return 0
|
| +
|
| +if __name__ == "__main__":
|
| + sys.exit(main())
|
|
|