| Index: src/inspector/build/compile-scripts.py
|
| diff --git a/src/inspector/build/compile-scripts.py b/src/inspector/build/compile-scripts.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..abe167af2d7b8845716ca3731cbdfc897fb0cd4d
|
| --- /dev/null
|
| +++ b/src/inspector/build/compile-scripts.py
|
| @@ -0,0 +1,169 @@
|
| +#!/usr/bin/env python
|
| +#
|
| +# Copyright 2016 the V8 project 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
|
| +import os.path as path
|
| +import generate_protocol_externs
|
| +import re
|
| +import subprocess
|
| +import sys
|
| +
|
| +if len(sys.argv) == 2 and sys.argv[1] == '--help':
|
| + print("Usage: %s" % path.basename(sys.argv[0]))
|
| + sys.exit(0)
|
| +
|
| +java_required_major = 1
|
| +java_required_minor = 7
|
| +
|
| +v8_inspector_path = path.dirname(path.dirname(path.abspath(__file__)))
|
| +
|
| +protocol_externs_file = path.join(v8_inspector_path, 'protocol_externs.js')
|
| +injected_script_source_name = path.join(v8_inspector_path,
|
| + 'injected-script-source.js')
|
| +injected_script_externs_file = path.join(v8_inspector_path,
|
| + 'injected_script_externs.js')
|
| +debugger_script_source_name = path.join(v8_inspector_path,
|
| + 'debugger-script.js')
|
| +debugger_script_externs_file = path.join(v8_inspector_path,
|
| + 'debugger_script_externs.js')
|
| +
|
| +generate_protocol_externs.generate_protocol_externs(protocol_externs_file,
|
| + path.join(v8_inspector_path, 'js_protocol.json'))
|
| +
|
| +error_warning_regex = re.compile(r'WARNING|ERROR')
|
| +
|
| +closure_compiler_jar = path.join(v8_inspector_path, 'build',
|
| + 'closure-compiler', 'closure-compiler.jar')
|
| +
|
| +common_closure_args = [
|
| + '--checks_only',
|
| + '--warning_level', 'VERBOSE'
|
| +]
|
| +
|
| +# Error reporting and checking.
|
| +errors_found = False
|
| +
|
| +def popen(arguments):
|
| + return subprocess.Popen(arguments, stdout=subprocess.PIPE,
|
| + stderr=subprocess.STDOUT)
|
| +
|
| +def error_excepthook(exctype, value, traceback):
|
| + print 'ERROR:'
|
| + sys.__excepthook__(exctype, value, traceback)
|
| +sys.excepthook = error_excepthook
|
| +
|
| +def has_errors(output):
|
| + return re.search(error_warning_regex, output) != None
|
| +
|
| +# Find java. Based on
|
| +# http://stackoverflow.com/questions/377017/test-if-executable-exists-in-python.
|
| +def which(program):
|
| + def is_exe(fpath):
|
| + return path.isfile(fpath) and os.access(fpath, os.X_OK)
|
| +
|
| + fpath, fname = path.split(program)
|
| + if fpath:
|
| + if is_exe(program):
|
| + return program
|
| + else:
|
| + for part in os.environ['PATH'].split(os.pathsep):
|
| + part = part.strip('"')
|
| + exe_file = path.join(part, program)
|
| + if is_exe(exe_file):
|
| + return exe_file
|
| + return None
|
| +
|
| +def find_java():
|
| + exec_command = None
|
| + has_server_jvm = True
|
| + java_path = which('java')
|
| + if not java_path:
|
| + java_path = which('java.exe')
|
| +
|
| + if not java_path:
|
| + print 'NOTE: No Java executable found in $PATH.'
|
| + sys.exit(0)
|
| +
|
| + is_ok = False
|
| + java_version_out, _ = popen([java_path, '-version']).communicate()
|
| + java_build_regex = re.compile(r'^\w+ version "(\d+)\.(\d+)')
|
| + # pylint: disable=E1103
|
| + match = re.search(java_build_regex, java_version_out)
|
| + if match:
|
| + major = int(match.group(1))
|
| + minor = int(match.group(2))
|
| + is_ok = major >= java_required_major and minor >= java_required_minor
|
| + if is_ok:
|
| + exec_command = [java_path, '-Xms1024m', '-server',
|
| + '-XX:+TieredCompilation']
|
| + check_server_proc = popen(exec_command + ['-version'])
|
| + check_server_proc.communicate()
|
| + if check_server_proc.returncode != 0:
|
| + # Not all Java installs have server JVMs.
|
| + exec_command = exec_command.remove('-server')
|
| + has_server_jvm = False
|
| +
|
| + if not is_ok:
|
| + print 'NOTE: Java executable version %d.%d or above not found in $PATH.' % (java_required_major, java_required_minor)
|
| + sys.exit(0)
|
| + print 'Java executable: %s%s' % (java_path, '' if has_server_jvm else ' (no server JVM)')
|
| + return exec_command
|
| +
|
| +java_exec = find_java()
|
| +
|
| +spawned_compiler_command = java_exec + [
|
| + '-jar',
|
| + closure_compiler_jar
|
| +] + common_closure_args
|
| +
|
| +print 'Compiling injected-script-source.js...'
|
| +
|
| +command = spawned_compiler_command + [
|
| + '--externs', injected_script_externs_file,
|
| + '--externs', protocol_externs_file,
|
| + '--js', injected_script_source_name
|
| +]
|
| +
|
| +injected_script_compile_proc = popen(command)
|
| +
|
| +print 'Compiling debugger-script.js...'
|
| +
|
| +command = spawned_compiler_command + [
|
| + '--externs', debugger_script_externs_file,
|
| + '--js', debugger_script_source_name,
|
| + '--new_type_inf'
|
| +]
|
| +
|
| +debugger_script_compile_proc = popen(command)
|
| +
|
| +print 'Validating injected-script-source.js...'
|
| +injectedscript_check_script_path = path.join(v8_inspector_path, 'build',
|
| + 'check_injected_script_source.py')
|
| +validate_injected_script_proc = popen([sys.executable,
|
| + injectedscript_check_script_path, injected_script_source_name])
|
| +
|
| +print
|
| +
|
| +(injected_script_compile_out, _) = injected_script_compile_proc.communicate()
|
| +print 'injected-script-source.js compilation output:%s' % os.linesep
|
| +print injected_script_compile_out
|
| +errors_found |= has_errors(injected_script_compile_out)
|
| +
|
| +(debugger_script_compiler_out, _) = debugger_script_compile_proc.communicate()
|
| +print 'debugger-script.js compilation output:%s' % os.linesep
|
| +print debugger_script_compiler_out
|
| +errors_found |= has_errors(debugger_script_compiler_out)
|
| +
|
| +(validate_injected_script_out, _) = validate_injected_script_proc.communicate()
|
| +print 'Validate injected-script-source.js output:%s' % os.linesep
|
| +print validate_injected_script_out if validate_injected_script_out else '<empty>'
|
| +errors_found |= has_errors(validate_injected_script_out)
|
| +
|
| +os.remove(protocol_externs_file)
|
| +
|
| +if errors_found:
|
| + print 'ERRORS DETECTED'
|
| + sys.exit(1)
|
|
|