Index: Source/devtools/scripts/compile_frontend.py |
diff --git a/Source/devtools/scripts/compile_frontend.py b/Source/devtools/scripts/compile_frontend.py |
index c240c1be766fdf7752e275795eedc81ed7ba811a..a1e89368517579490fb0c309caac6507d3f7400b 100755 |
--- a/Source/devtools/scripts/compile_frontend.py |
+++ b/Source/devtools/scripts/compile_frontend.py |
@@ -30,6 +30,7 @@ |
import os |
import os.path as path |
import generate_protocol_externs |
+import modular_build |
import re |
import shutil |
import subprocess |
@@ -57,7 +58,6 @@ java_exec = "java -Xms1024m -server -XX:+TieredCompilation" |
generate_protocol_externs.generate_protocol_externs(protocol_externs_file, path.join(devtools_path, "protocol.json")) |
jsmodule_name_prefix = "jsmodule_" |
-frontend_modules_name = "frontend_modules.json" |
runtime_module_name = "_runtime" |
module_initializer_name = "_module.js" |
@@ -71,12 +71,10 @@ def error_excepthook(exctype, value, traceback): |
sys.__excepthook__(exctype, value, traceback) |
sys.excepthook = error_excepthook |
-try: |
- with open(path.join(scripts_path, frontend_modules_name), "rt") as js_modules_file: |
- modules = json.loads(js_modules_file.read()) |
-except: |
- log_error("Failed to read %s" % frontend_modules_name) |
- raise |
+ |
+loader = modular_build.DescriptorLoader(devtools_frontend_path) |
+descriptors = loader.load_application('devtools.json') |
+modules_by_name = descriptors.modules |
type_checked_jsdoc_tags_list = ["param", "return", "type", "enum"] |
@@ -100,27 +98,13 @@ def hasErrors(output): |
return re.search(error_warning_regex, output) != None |
-def dump_all_checked_files(): |
- files = {} |
- for module in modules: |
- for source in module["sources"]: |
- files[path.join(devtools_frontend_path, source)] = True |
- return files.keys() |
- |
- |
def verify_jsdoc_extra(additional_files): |
- return run_in_shell("%s -jar %s %s" % (java_exec, jsdoc_validator_jar, " ".join(dump_all_checked_files() + additional_files))) |
+ return run_in_shell("%s -jar %s %s" % (java_exec, jsdoc_validator_jar, " ".join(descriptors.all_compiled_files() + additional_files))) |
def verify_jsdoc(additional_files): |
def file_list(): |
- result = [] |
- for module in modules: |
- for file_name in module["sources"]: |
- result.append(path.join(devtools_frontend_path, file_name)) |
- for file in additional_files: |
- result.append(file) |
- return result |
+ return descriptors.all_compiled_files() + additional_files |
errors_found = False |
for full_file_name in file_list(): |
@@ -169,16 +153,14 @@ common_closure_args = " --summary_detail_level 3 --jscomp_error visibility --com |
spawned_compiler_command = "%s -jar %s %s \\\n" % (java_exec, closure_compiler_jar, common_closure_args) |
-modules_by_name = {} |
standalone_modules_by_name = {} |
dependents_by_module_name = {} |
-for module in modules: |
- name = module["name"] |
- modules_by_name[name] = module |
+for name in modules_by_name: |
+ module = modules_by_name[name] |
if "standalone" in module: |
standalone_modules_by_name[name] = module |
- for dep in module["dependencies"]: |
+ for dep in module.get("dependencies", []): |
list = dependents_by_module_name.get(dep) |
if not list: |
list = [] |
@@ -187,10 +169,10 @@ for module in modules: |
def verify_standalone_modules(): |
- for module in modules: |
- for dependency in module["dependencies"]: |
+ for name in modules_by_name: |
+ for dependency in modules_by_name[name].get("dependencies", []): |
if dependency in standalone_modules_by_name: |
- log_error("Standalone module '%s' may not be present among the dependencies of '%s'" % (dependency, module["name"])) |
+ log_error("Standalone module '%s' may not be present among the dependencies of '%s'" % (dependency, name)) |
errors_found = True |
verify_standalone_modules() |
@@ -201,10 +183,10 @@ def check_duplicate_files(): |
def check_module(module, seen_files, seen_modules): |
name = module["name"] |
seen_modules[name] = True |
- for dep_name in module["dependencies"]: |
+ for dep_name in module.get("dependencies", []): |
if not dep_name in seen_modules: |
check_module(modules_by_name[dep_name], seen_files, seen_modules) |
- for source in module["sources"]: |
+ for source in module.get("scripts", []): |
referencing_module = seen_files.get(source) |
if referencing_module: |
log_error("Duplicate use of %s in '%s' (previously seen in '%s')" % (source, name, referencing_module)) |
@@ -226,38 +208,51 @@ def dump_module(name, recursively, processed_modules): |
return "" |
processed_modules[name] = True |
module = modules_by_name[name] |
+ skipped_scripts = set(module.get("skip_compilation", [])) |
+ |
+ def filter_scripts(): |
+ result = [] |
+ for script in module.get("scripts", []): |
+ if script in skipped_scripts: |
+ continue |
+ result.append(script) |
+ return result |
+ |
command = "" |
if recursively: |
- for dependency in module["dependencies"]: |
+ for dependency in module.get("dependencies", []): |
command += dump_module(dependency, recursively, processed_modules) |
- command += module_arg(module["name"]) + ":" |
- command += str(len(module["sources"])) |
+ command += module_arg(name) + ":" |
+ filtered_scripts = filter_scripts() |
+ command += str(len(filtered_scripts)) |
firstDependency = True |
- for dependency in module["dependencies"] + [runtime_module_name]: |
+ for dependency in module.get("dependencies", []) + [runtime_module_name]: |
if firstDependency: |
command += ":" |
else: |
command += "," |
firstDependency = False |
command += jsmodule_name_prefix + dependency |
- for script in module["sources"]: |
- command += " --js " + path.join(devtools_frontend_path, script) |
+ for script in filtered_scripts: |
+ command += " --js " + path.join(devtools_frontend_path, name, script) |
return command |
print "Compiling frontend..." |
compiler_args_file = tempfile.NamedTemporaryFile(mode='wt', delete=False) |
-closure_runner_command = "%s -jar %s --compiler-args-file %s" % (java_exec, closure_runner_jar, compiler_args_file.name) |
- |
-for module in modules: |
- closure_args = common_closure_args |
- closure_args += " --externs " + global_externs_file |
- closure_args += " --externs " + protocol_externs_file |
- runtime_module = module_arg(runtime_module_name) + ":1 --js " + path.join(devtools_frontend_path, "Runtime.js") |
- closure_args += runtime_module + dump_module(module["name"], True, {}) |
- compiler_args_file.write("%s %s\n" % (module["name"], closure_args)) |
+try: |
+ closure_runner_command = "%s -jar %s --compiler-args-file %s" % (java_exec, closure_runner_jar, compiler_args_file.name) |
+ |
+ for name in descriptors.sorted_modules(): |
+ closure_args = common_closure_args |
+ closure_args += " --externs " + global_externs_file |
+ closure_args += " --externs " + protocol_externs_file |
+ runtime_module = module_arg(runtime_module_name) + ":1 --js " + path.join(devtools_frontend_path, "Runtime.js") |
+ closure_args += runtime_module + dump_module(name, True, {}) |
+ compiler_args_file.write("%s %s\n" % (name, closure_args)) |
+finally: |
+ compiler_args_file.close() |
-compiler_args_file.close() |
modular_compiler_proc = run_in_shell(closure_runner_command) |