#!/usr/bin/env python # -*- coding: UTF-8 -*- # # Copyright 2016 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. """ Builds applications in debug mode: - Copies the module directories into their destinations. - Copies app.html as-is. """ from os import path from os.path import join import os import shutil import sys import modular_build def main(argv): try: input_path_flag_index = argv.index('--input_path') input_path = argv[input_path_flag_index + 1] output_path_flag_index = argv.index('--output_path') output_path = argv[output_path_flag_index + 1] application_names = argv[1:input_path_flag_index] except: print('Usage: %s app_1 app_2 ... app_N --input_path --output_path ' % argv[0]) raise loader = modular_build.DescriptorLoader(input_path) for app in application_names: descriptors = loader.load_application(app) builder = DebugBuilder(app, descriptors, input_path, output_path) builder.build_app() 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) # Outputs: # .html as-is # .js as-is # / class DebugBuilder(object): 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 build_app(self): if self.descriptors.has_html: self._build_html() for filename in os.listdir(self.application_dir): src = join(os.getcwd(), self.application_dir, filename) if os.path.isdir(src): symlink_or_copy_dir(src, join(self.output_dir, filename)) else: symlink_or_copy_file(src, join(self.output_dir, filename), safe=True) 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) if __name__ == '__main__': sys.exit(main(sys.argv))