| Index: third_party/WebKit/Source/devtools/scripts/concatenate_application_code.py
|
| diff --git a/third_party/WebKit/Source/devtools/scripts/concatenate_application_code.py b/third_party/WebKit/Source/devtools/scripts/concatenate_application_code.py
|
| deleted file mode 100755
|
| index e6984e04864e14767f6fd64ff23f1ddfb871c822..0000000000000000000000000000000000000000
|
| --- a/third_party/WebKit/Source/devtools/scripts/concatenate_application_code.py
|
| +++ /dev/null
|
| @@ -1,247 +0,0 @@
|
| -#!/usr/bin/env python
|
| -#
|
| -# Copyright 2014 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.
|
| -
|
| -"""
|
| -Release:
|
| - - Concatenates autostart modules, application modules' module.json descriptors,
|
| - and the application loader into a single script.
|
| - - Builds app.html referencing the application script.
|
| -Debug:
|
| - - Copies the module directories into their destinations.
|
| - - Copies app.html as-is.
|
| -"""
|
| -
|
| -from cStringIO import StringIO
|
| -from os import path
|
| -from os.path import join
|
| -from modular_build import read_file, write_file, bail_error
|
| -import copy
|
| -import modular_build
|
| -import os
|
| -import re
|
| -import shutil
|
| -import sys
|
| -
|
| -try:
|
| - import simplejson as json
|
| -except ImportError:
|
| - import json
|
| -
|
| -import rjsmin
|
| -
|
| -
|
| -def resource_source_url(url):
|
| - return '\n/*# sourceURL=' + url + ' */'
|
| -
|
| -
|
| -def minify_js(javascript):
|
| - return rjsmin.jsmin(javascript)
|
| -
|
| -
|
| -def concatenated_module_filename(module_name, output_dir):
|
| - return join(output_dir, module_name + '/' + module_name + '_module.js')
|
| -
|
| -
|
| -def symlink_or_copy_file(src, dest, safe=False):
|
| - if safe and path.exists(dest):
|
| - os.remove(dest)
|
| - if hasattr(os, 'symlink'):
|
| - os.symlink(src, dest)
|
| - else:
|
| - shutil.copy(src, dest)
|
| -
|
| -
|
| -def symlink_or_copy_dir(src, dest):
|
| - if path.exists(dest):
|
| - shutil.rmtree(dest)
|
| - for src_dir, dirs, files in os.walk(src):
|
| - subpath = path.relpath(src_dir, src)
|
| - dest_dir = path.normpath(join(dest, subpath))
|
| - os.mkdir(dest_dir)
|
| - for name in files:
|
| - src_name = join(os.getcwd(), src_dir, name)
|
| - dest_name = join(dest_dir, name)
|
| - symlink_or_copy_file(src_name, dest_name)
|
| -
|
| -
|
| -class AppBuilder:
|
| - def __init__(self, application_name, descriptors, application_dir, output_dir):
|
| - self.application_name = application_name
|
| - self.descriptors = descriptors
|
| - self.application_dir = application_dir
|
| - self.output_dir = output_dir
|
| -
|
| - def app_file(self, extension):
|
| - return self.application_name + '.' + extension
|
| -
|
| - def core_resource_names(self):
|
| - result = []
|
| - for module in self.descriptors.sorted_modules():
|
| - if self.descriptors.application[module].get('type') != 'autostart':
|
| - continue
|
| -
|
| - resources = self.descriptors.modules[module].get('resources')
|
| - if not resources:
|
| - continue
|
| - for resource_name in resources:
|
| - result.append(path.join(module, resource_name))
|
| - return result
|
| -
|
| -
|
| -# Outputs:
|
| -# <app_name>.html
|
| -# <app_name>.js
|
| -# <module_name>_module.js
|
| -class ReleaseBuilder(AppBuilder):
|
| - def __init__(self, application_name, descriptors, application_dir, output_dir):
|
| - AppBuilder.__init__(self, application_name, descriptors, application_dir, output_dir)
|
| -
|
| - def build_app(self):
|
| - if self.descriptors.has_html:
|
| - self._build_html()
|
| - self._build_app_script()
|
| - for module in filter(lambda desc: (not desc.get('type') or desc.get('type') == 'remote'), self.descriptors.application.values()):
|
| - self._concatenate_dynamic_module(module['name'])
|
| -
|
| - def _build_html(self):
|
| - html_name = self.app_file('html')
|
| - output = StringIO()
|
| - with open(join(self.application_dir, html_name), 'r') as app_input_html:
|
| - for line in app_input_html:
|
| - if '<script ' in line or '<link ' in line:
|
| - continue
|
| - if '</head>' in line:
|
| - output.write(self._generate_include_tag(self.app_file('js')))
|
| - output.write(line)
|
| -
|
| - write_file(join(self.output_dir, html_name), output.getvalue())
|
| - output.close()
|
| -
|
| - def _build_app_script(self):
|
| - script_name = self.app_file('js')
|
| - output = StringIO()
|
| - self._concatenate_application_script(output)
|
| - write_file(join(self.output_dir, script_name), minify_js(output.getvalue()))
|
| - output.close()
|
| -
|
| - def _generate_include_tag(self, resource_path):
|
| - if (resource_path.endswith('.js')):
|
| - return ' <script type="text/javascript" src="%s"></script>\n' % resource_path
|
| - else:
|
| - assert resource_path
|
| -
|
| - def _release_module_descriptors(self):
|
| - module_descriptors = self.descriptors.modules
|
| - result = []
|
| - for name in module_descriptors:
|
| - module = copy.copy(module_descriptors[name])
|
| - module_type = self.descriptors.application[name].get('type')
|
| - # Clear scripts, as they are not used at runtime
|
| - # (only the fact of their presence is important).
|
| - resources = module.get('resources', None)
|
| - if module.get('scripts') or resources:
|
| - if module_type == 'autostart':
|
| - # Autostart modules are already baked in.
|
| - del module['scripts']
|
| - else:
|
| - # Non-autostart modules are vulcanized.
|
| - module['scripts'] = [name + '_module.js']
|
| - # Resources are already baked into scripts.
|
| - if resources is not None:
|
| - del module['resources']
|
| - result.append(module)
|
| - return json.dumps(result)
|
| -
|
| - def _write_module_resources(self, resource_names, output):
|
| - for resource_name in resource_names:
|
| - resource_name = path.normpath(resource_name).replace('\\', '/')
|
| - output.write('Runtime.cachedResources["%s"] = "' % resource_name)
|
| - resource_content = read_file(path.join(self.application_dir, resource_name)) + resource_source_url(resource_name)
|
| - resource_content = resource_content.replace('\\', '\\\\')
|
| - resource_content = resource_content.replace('\n', '\\n')
|
| - resource_content = resource_content.replace('"', '\\"')
|
| - output.write(resource_content)
|
| - output.write('";\n')
|
| -
|
| - def _concatenate_autostart_modules(self, output):
|
| - non_autostart = set()
|
| - sorted_module_names = self.descriptors.sorted_modules()
|
| - for name in sorted_module_names:
|
| - desc = self.descriptors.modules[name]
|
| - name = desc['name']
|
| - type = self.descriptors.application[name].get('type')
|
| - if type == 'autostart':
|
| - deps = set(desc.get('dependencies', []))
|
| - non_autostart_deps = deps & non_autostart
|
| - if len(non_autostart_deps):
|
| - bail_error('Non-autostart dependencies specified for the autostarted module "%s": %s' % (name, non_autostart_deps))
|
| - output.write('\n/* Module %s */\n' % name)
|
| - modular_build.concatenate_scripts(desc.get('scripts'), join(self.application_dir, name), self.output_dir, output)
|
| - else:
|
| - non_autostart.add(name)
|
| -
|
| - def _concatenate_application_script(self, output):
|
| - runtime_contents = read_file(join(self.application_dir, 'Runtime.js'))
|
| - runtime_contents = re.sub('var allDescriptors = \[\];', 'var allDescriptors = %s;' % self._release_module_descriptors().replace('\\', '\\\\'), runtime_contents, 1)
|
| - output.write('/* Runtime.js */\n')
|
| - output.write(runtime_contents)
|
| - output.write('\n/* Autostart modules */\n')
|
| - self._concatenate_autostart_modules(output)
|
| - output.write('/* Application descriptor %s */\n' % self.app_file('json'))
|
| - output.write('applicationDescriptor = ')
|
| - output.write(self.descriptors.application_json())
|
| - output.write(';\n/* Core resources */\n')
|
| - self._write_module_resources(self.core_resource_names(), output)
|
| - output.write('\n/* Application loader */\n')
|
| - output.write(read_file(join(self.application_dir, self.app_file('js'))))
|
| -
|
| - def _concatenate_dynamic_module(self, module_name):
|
| - module = self.descriptors.modules[module_name]
|
| - scripts = module.get('scripts')
|
| - resources = self.descriptors.module_resources(module_name)
|
| - module_dir = join(self.application_dir, module_name)
|
| - output = StringIO()
|
| - if scripts:
|
| - modular_build.concatenate_scripts(scripts, module_dir, self.output_dir, output)
|
| - if resources:
|
| - self._write_module_resources(resources, output)
|
| - output_file_path = concatenated_module_filename(module_name, self.output_dir)
|
| - write_file(output_file_path, minify_js(output.getvalue()))
|
| - output.close()
|
| -
|
| -
|
| -# Outputs:
|
| -# <app_name>.html as-is
|
| -# <app_name>.js as-is
|
| -# <module_name>/<all_files>
|
| -class DebugBuilder(AppBuilder):
|
| - def __init__(self, application_name, descriptors, application_dir, output_dir):
|
| - AppBuilder.__init__(self, application_name, descriptors, application_dir, output_dir)
|
| -
|
| - def build_app(self):
|
| - if self.descriptors.has_html:
|
| - self._build_html()
|
| - js_name = self.app_file('js')
|
| - src_name = join(os.getcwd(), self.application_dir, js_name)
|
| - symlink_or_copy_file(src_name, join(self.output_dir, js_name), True)
|
| - for module_name in self.descriptors.modules:
|
| - module = self.descriptors.modules[module_name]
|
| - input_module_dir = join(self.application_dir, module_name)
|
| - output_module_dir = join(self.output_dir, module_name)
|
| - symlink_or_copy_dir(input_module_dir, output_module_dir)
|
| -
|
| - def _build_html(self):
|
| - html_name = self.app_file('html')
|
| - symlink_or_copy_file(join(os.getcwd(), self.application_dir, html_name), join(self.output_dir, html_name), True)
|
| -
|
| -
|
| -def build_application(application_name, loader, application_dir, output_dir, release_mode):
|
| - descriptors = loader.load_application(application_name + '.json')
|
| - if release_mode:
|
| - builder = ReleaseBuilder(application_name, descriptors, application_dir, output_dir)
|
| - else:
|
| - builder = DebugBuilder(application_name, descriptors, application_dir, output_dir)
|
| - builder.build_app()
|
|
|