blob: ace54f0734f3e9abe7cd9dcf6549236a723003e6 [file] [log] [blame]
#!/usr/bin/env vpython
#
# 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.
import os.path as path
import re
import os
import subprocess
import sys
_CURRENT_DIR = path.join(path.dirname(__file__))
try:
old_sys_path = sys.path[:]
sys.path.append(path.join(_CURRENT_DIR, '..', '..', 'scripts'))
import devtools_paths
finally:
sys.path = old_sys_path
ROOT_DIRECTORY = path.join(path.dirname(path.abspath(__file__)), '..', '..')
V8_DIRECTORY_PATH = path.join(ROOT_DIRECTORY, 'v8')
PROTOCOL_LOCATION = path.join(ROOT_DIRECTORY, 'third_party', 'blink', 'public', 'devtools_protocol')
SCRIPTS_BUILD_PATH = path.join(ROOT_DIRECTORY, 'scripts', 'build')
GENERATE_ARIA_SCRIPT = path.join(SCRIPTS_BUILD_PATH, 'generate_aria.py')
GENERATE_SUPPORTED_CSS_SCRIPT = path.join(SCRIPTS_BUILD_PATH, 'generate_supported_css.py')
GENERATE_PROTOCOL_DEFINITIONS_SCRIPT = path.join(SCRIPTS_BUILD_PATH, 'code_generator_frontend.py')
CONCATENATE_PROTOCOL_SCRIPT = path.join(ROOT_DIRECTORY, 'third_party', 'inspector_protocol', 'concatenate_protocols.py')
NODE_LOCATION = devtools_paths.node_path()
TSC_LOCATION = devtools_paths.typescript_compiler_path()
def popen(arguments, cwd=ROOT_DIRECTORY, env=os.environ.copy()):
process = subprocess.Popen([sys.executable] + arguments, cwd=cwd, env=env)
process.communicate()
if process.returncode != 0:
sys.exit(process.returncode)
def runTsc(file_to_compile):
process = subprocess.Popen([NODE_LOCATION, TSC_LOCATION, file_to_compile], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
# TypeScript does not correctly write to stderr because of https://github.com/microsoft/TypeScript/issues/33849
return process.returncode, stdout + stderr
def runNode(file_to_execute):
process = subprocess.Popen([NODE_LOCATION, file_to_execute], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
return process.returncode, stdout + stderr
def generate_protocol_typescript_definitions():
generator_script_to_compile = path.join(ROOT_DIRECTORY, 'scripts', 'protocol_typescript', 'protocol_dts_generator.ts')
# first run TSC to convert the script from TS to JS
typescript_found_errors, typescript_stderr = runTsc(generator_script_to_compile)
if typescript_found_errors:
print('')
print('TypeScript compilation failed on %s' % generator_script_to_compile)
print('')
print(typescript_stderr)
print('')
return 1
outputted_file_path = generator_script_to_compile.replace('.ts', '.js')
node_found_errors, node_stderr = runNode(outputted_file_path)
if node_found_errors:
print('')
print('Generating protocol typedefs failed')
print('')
print(node_stderr)
print('')
return 1
# Generate the required `front_end/generated` files that are based on files living in Blink
def main():
popen([GENERATE_ARIA_SCRIPT])
popen([GENERATE_SUPPORTED_CSS_SCRIPT])
popen([CONCATENATE_PROTOCOL_SCRIPT] + [
path.join(PROTOCOL_LOCATION, 'browser_protocol.pdl'),
path.join(V8_DIRECTORY_PATH, 'include', 'js_protocol.pdl'),
# output_file
path.join(PROTOCOL_LOCATION, 'browser_protocol.json'),
])
popen([GENERATE_PROTOCOL_DEFINITIONS_SCRIPT])
generate_protocol_typescript_definitions()
if __name__ == '__main__':
main()