| #!/usr/bin/env python3 |
| # Copyright 2023 The Chromium Authors |
| # 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 os |
| from pathlib import Path |
| import sys |
| import tempfile |
| |
| from jinja2 import Template |
| |
| import pdl_cxx |
| |
| sys.path.append( |
| str( |
| Path(__file__).resolve().parent.parent.parent.parent / 'third_party' / |
| 'inspector_protocol')) |
| import concatenate_protocols |
| |
| DEFAULT_APIS = [ |
| '../src/SymbolsBackend.cc.in', '../src/SymbolsBackend.d.ts.in', |
| '../lib/api.h.in' |
| ] |
| |
| |
| def pdlToJson(): |
| with tempfile.NamedTemporaryFile() as json_file: |
| args = [str(Path(__file__).parent / 'api.pdl'), json_file.name] |
| concatenate_protocols.main(args) |
| json_file.seek(0) |
| return json.load(json_file) |
| |
| |
| def getRelativeDefault(api_path): |
| absolute = Path(__file__).parent.resolve() / api_path |
| try: |
| return absolute.relative_to(Path.cwd()) |
| except ValueError: |
| return absolute |
| |
| |
| def script_main(args): |
| defaults = [ |
| os.path.normpath(str(getRelativeDefault(api_path))) |
| for api_path in DEFAULT_APIS |
| ] |
| |
| parser = argparse.ArgumentParser( |
| formatter_class=argparse.ArgumentDefaultsHelpFormatter) |
| parser.add_argument('api_input', |
| nargs='*', |
| help='Path to api templates', |
| default=defaults) |
| options = parser.parse_args(args) |
| |
| specs = pdl_cxx.PDL.parse(pdlToJson()) |
| |
| for api_input in options.api_input: |
| output, ext = os.path.splitext(api_input) |
| if ext != '.in': |
| parser.error('"%s" does not end in .in' % api_input) |
| with open(api_input) as input_file: |
| with open(output, 'w') as output_file: |
| output_file.write( |
| Template(input_file.read()).render(specs=specs, |
| enumerate=enumerate, |
| list=list)) |
| |
| |
| if __name__ == '__main__': |
| script_main(sys.argv[1:]) |