blob: bee8d3ecbec2f47d999dcb8ff744e5a4662ff357 [file] [log] [blame]
#!/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:])