| 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)
|
|
|
|
|
|
|