#!/usr/bin/env python # Copyright (c) 2012 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. import errno import optparse import parse_deps import sys import os import generate_template_contents as template_generator from generate_template_contents import generate_templates srcdir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../src")) html_warning_message = """ <!------------------------------------------------------------------------------ WARNING: This file is generated by generate_about_tracing_contents.py Do not edit directly. -------------------------------------------------------------------------------> """ js_warning_message = """/** // Copyright (c) 2013 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. * WARNING: This file is generated by generate_about_tracing_contents.py * * Do not edit directly. */ """ def generate_html(outdir): f = open(os.path.join(srcdir, "about_tracing.html.template"), 'r') template = f.read() f.close() assert template.find("<WARNING_MESSAGE></WARNING_MESSAGE>") != -1 assert template.find("<STYLE_SHEET_CONTENTS></STYLE_SHEET_CONTENTS>") != -1 assert template.find("<TEMPLATE_CONTENTS></TEMPLATE_CONTENTS>") != -1 filenames = [os.path.join(srcdir, x) for x in ["base.js", "about_tracing/profiling_view.js"]] load_sequence = parse_deps.calc_load_sequence(filenames, srcdir) style_sheet_contents = "" for module in load_sequence: for style_sheet in module.style_sheets: rel_filename = os.path.relpath(style_sheet.filename, outdir) link_tag = """<link rel="stylesheet" href="%s">\n""" % rel_filename style_sheet_contents += link_tag template_contents = generate_templates() result = template result = result.replace("<WARNING_MESSAGE></WARNING_MESSAGE>", html_warning_message) result = result.replace("<STYLE_SHEET_CONTENTS></STYLE_SHEET_CONTENTS>", style_sheet_contents) result = result.replace("<TEMPLATE_CONTENTS></TEMPLATE_CONTENTS>", template_contents) return result def generate_js(outdir): f = open(os.path.join(srcdir, "about_tracing.js.template"), 'r') template = f.read() f.close() assert template.find("<WARNING_MESSAGE></WARNING_MESSAGE>") != -1 assert template.find("<SCRIPT_CONTENTS></SCRIPT_CONTENTS>") != -1 filenames = [os.path.join(srcdir, x) for x in ["base.js", "about_tracing/profiling_view.js"]] import parse_deps load_sequence = parse_deps.calc_load_sequence(filenames, srcdir) script_contents = "" script_contents += "window.FLATTENED = {};\n" script_contents += "window.FLATTENED_RAW_SCRIPTS = {};\n" for module in load_sequence: for dependent_raw_script_name in module.dependent_raw_script_names: script_contents += ( "window.FLATTENED_RAW_SCRIPTS['%s'] = true;\n" % dependent_raw_script_name) script_contents += "window.FLATTENED['%s'] = true;\n" % module.name for module in load_sequence: for dependent_raw_script in module.dependent_raw_scripts: rel_filename = os.path.relpath(dependent_raw_script.filename, outdir) script_contents += """<include src="%s">\n""" % rel_filename rel_filename = os.path.relpath(module.filename, outdir) script_contents += """<include src="%s">\n""" % rel_filename result = template result = result.replace("<WARNING_MESSAGE></WARNING_MESSAGE>", js_warning_message) result = result.replace("<SCRIPT_CONTENTS></SCRIPT_CONTENTS>", script_contents) return result def main(args): parser = optparse.OptionParser(usage="%prog --outdir=<directory>") parser.add_option("--outdir", dest="out_dir", help="Where to place generated content") options, args = parser.parse_args(args) if not options.out_dir: sys.stderr.write("ERROR: Must specify --outdir=<directory>") parser.print_help() return 1 olddir = os.getcwd() try: try: result_html = generate_html(options.out_dir) except parse_deps.DepsException, ex: sys.stderr.write("Error: %s\n\n" % str(ex)) return 255 o = open(os.path.join(options.out_dir, "about_tracing.html"), 'w') o.write(result_html) o.close() result_js = generate_js(options.out_dir) o = open(os.path.join(options.out_dir, "about_tracing.js"), 'w') o.write(result_js) o.close() finally: os.chdir(olddir) return 0 if __name__ == "__main__": sys.exit(main(sys.argv))