Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 #!/usr/bin/env python | |
| 2 # | |
| 3 # Copyright 2016 the V8 project authors. All rights reserved. | |
| 4 # Use of this source code is governed by a BSD-style license that can be | |
| 5 # found in the LICENSE file. | |
| 6 | |
| 7 import os | |
| 8 import os.path as path | |
| 9 import generate_protocol_externs | |
| 10 import re | |
| 11 import subprocess | |
| 12 import sys | |
| 13 | |
| 14 if len(sys.argv) == 2 and sys.argv[1] == '--help': | |
| 15 print("Usage: %s" % path.basename(sys.argv[0])) | |
| 16 sys.exit(0) | |
| 17 | |
| 18 def popen(arguments): | |
| 19 return subprocess.Popen(arguments, stdout=subprocess.PIPE, stderr=subprocess .STDOUT) | |
| 20 | |
| 21 scripts_path = path.dirname(path.abspath(__file__)) | |
| 22 v8_inspector_path = path.dirname(scripts_path) | |
| 23 | |
| 24 protocol_externs_file = path.join(v8_inspector_path, 'protocol_externs.js') | |
| 25 injected_script_source_name = path.join(v8_inspector_path, 'InjectedScriptSource .js') | |
| 26 injected_script_externs_file = path.join(v8_inspector_path, 'injected_script_ext erns.js') | |
| 27 debugger_script_source_name = path.join(v8_inspector_path, 'DebuggerScript.js') | |
| 28 debugger_script_externs_file = path.join(v8_inspector_path, 'debugger_script_ext erns.js') | |
| 29 | |
| 30 generate_protocol_externs.generate_protocol_externs(protocol_externs_file, path. join(v8_inspector_path, 'js_protocol.json')) | |
| 31 | |
| 32 # Error reporting and checking. | |
| 33 errors_found = False | |
| 34 | |
| 35 def error_excepthook(exctype, value, traceback): | |
| 36 print 'ERROR:' | |
| 37 sys.__excepthook__(exctype, value, traceback) | |
| 38 sys.excepthook = error_excepthook | |
| 39 | |
| 40 error_warning_regex = re.compile(r'WARNING|ERROR') | |
| 41 | |
| 42 def hasErrors(output): | |
| 43 return re.search(error_warning_regex, output) != None | |
| 44 | |
| 45 # Find java. | |
| 46 # Based on http://stackoverflow.com/questions/377017/test-if-executable-exists-i n-python. | |
| 47 def which(program): | |
| 48 def is_exe(fpath): | |
| 49 return path.isfile(fpath) and os.access(fpath, os.X_OK) | |
| 50 | |
| 51 fpath, fname = path.split(program) | |
| 52 if fpath: | |
| 53 if is_exe(program): | |
| 54 return program | |
| 55 else: | |
| 56 for part in os.environ["PATH"].split(os.pathsep): | |
| 57 part = part.strip('"') | |
| 58 exe_file = path.join(part, program) | |
| 59 if is_exe(exe_file): | |
| 60 return exe_file | |
| 61 return None | |
| 62 | |
| 63 def find_java(): | |
| 64 required_major = 1 | |
| 65 required_minor = 7 | |
| 66 exec_command = None | |
| 67 has_server_jvm = True | |
| 68 java_path = which('java') | |
| 69 if not java_path: | |
| 70 java_path = which('java.exe') | |
| 71 | |
| 72 if not java_path: | |
| 73 print 'NOTE: No Java executable found in $PATH.' | |
| 74 sys.exit(1) | |
| 75 | |
| 76 is_ok = False | |
| 77 java_version_out, _ = popen([java_path, '-version']).communicate() | |
| 78 java_build_regex = re.compile(r'^\w+ version "(\d+)\.(\d+)') | |
| 79 # pylint: disable=E1103 | |
| 80 match = re.search(java_build_regex, java_version_out) | |
| 81 if match: | |
| 82 major = int(match.group(1)) | |
| 83 minor = int(match.group(2)) | |
| 84 is_ok = major >= required_major and minor >= required_minor | |
| 85 if is_ok: | |
| 86 exec_command = [java_path, '-Xms1024m', '-server', '-XX:+TieredCompilati on'] | |
| 87 check_server_proc = popen(exec_command + ['-version']) | |
| 88 check_server_proc.communicate() | |
| 89 if check_server_proc.returncode != 0: | |
| 90 # Not all Java installs have server JVMs. | |
| 91 exec_command = exec_command.remove('-server') | |
| 92 has_server_jvm = False | |
| 93 | |
| 94 if not is_ok: | |
| 95 print 'NOTE: Java executable version %d.%d or above not found in $PATH.' % (required_major, required_minor) | |
| 96 sys.exit(1) | |
| 97 print 'Java executable: %s%s' % (java_path, '' if has_server_jvm else ' (no server JVM)') | |
| 98 return exec_command | |
| 99 | |
| 100 java_exec = find_java() | |
| 101 | |
| 102 closure_compiler_jar = path.join(v8_inspector_path, os.pardir, os.pardir, 'tools ', 'closure-compiler', 'closure-compiler.jar') | |
|
dgozman
2016/09/22 16:50:00
I thought we decided to fetch it locally into giti
kozy
2016/09/23 20:22:46
Done.
| |
| 103 | |
| 104 common_closure_args = [ | |
| 105 '--checks_only', | |
| 106 '--warning_level', 'VERBOSE' | |
| 107 ] | |
| 108 | |
| 109 print 'Compiling InjectedScriptSource.js...' | |
| 110 | |
| 111 spawned_compiler_command = java_exec + [ | |
| 112 '-jar', | |
| 113 closure_compiler_jar | |
| 114 ] + common_closure_args | |
| 115 | |
| 116 command = spawned_compiler_command + [ | |
| 117 '--externs', injected_script_externs_file, | |
| 118 '--externs', protocol_externs_file, | |
| 119 '--js', injected_script_source_name | |
| 120 ] | |
| 121 | |
| 122 injectedScriptCompileProc = popen(command) | |
| 123 | |
| 124 print 'Compiling DebuggerScript.js...' | |
| 125 | |
| 126 command = spawned_compiler_command + [ | |
| 127 '--externs', debugger_script_externs_file, | |
| 128 '--js', debugger_script_source_name, | |
| 129 '--new_type_inf' | |
| 130 ] | |
| 131 | |
| 132 debuggerScriptCompileProc = popen(command) | |
| 133 | |
| 134 print 'Validating InjectedScriptSource.js...' | |
| 135 injectedscript_check_script_path = path.join(scripts_path, "check_injected_scrip t_source.py") | |
| 136 validateInjectedScriptProc = popen([sys.executable, injectedscript_check_script_ path, injected_script_source_name]) | |
| 137 | |
| 138 print | |
| 139 | |
| 140 (injectedScriptCompileOut, _) = injectedScriptCompileProc.communicate() | |
| 141 print 'InjectedScriptSource.js compilation output:%s' % os.linesep, injectedScri ptCompileOut | |
| 142 errors_found |= hasErrors(injectedScriptCompileOut) | |
| 143 | |
| 144 (debuggerScriptCompilerOut, _) = debuggerScriptCompileProc.communicate() | |
| 145 print 'DebuggerScript.js compilation output:%s' % os.linesep, debuggerScriptComp ilerOut | |
| 146 errors_found |= hasErrors(debuggerScriptCompilerOut) | |
| 147 | |
| 148 if errors_found: | |
| 149 print 'ERRORS DETECTED' | |
| 150 | |
| 151 os.remove(protocol_externs_file) | |
| OLD | NEW |