1 #!/usr/bin/env python 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 3 # Use of this source code is governed by a BSD-style license that can be 4 # found in the LICENSE file. 5 6 import errno 7 import optparse 8 import parse_deps 9 import sys 10 import os 11 12 import generate_template_contents as template_generator 13 from generate_template_contents import generate_templates 14 15 srcdir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../src")) 16 17 html_warning_message = """ 18 19 20 <!------------------------------------------------------------------------------ 21 WARNING: This file is generated by generate_about_tracing_contents.py 22 23 Do not edit directly. 24 25 26 -------------------------------------------------------------------------------> 27 28 29 """ 30 31 js_warning_message = """/** 32 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 33 // Use of this source code is governed by a BSD-style license that can be 34 // found in the LICENSE file. 35 36 * WARNING: This file is generated by generate_about_tracing_contents.py 37 * 38 * Do not edit directly. 39 */ 40 """ 41 42 def generate_html(outdir): 43 f = open(os.path.join(srcdir, "about_tracing.html.template"), 'r') 44 template = f.read() 45 f.close() 46 47 assert template.find("<WARNING_MESSAGE></WARNING_MESSAGE>") != -1 48 assert template.find("<STYLE_SHEET_CONTENTS></STYLE_SHEET_CONTENTS>") != -1 49 assert template.find("<TEMPLATE_CONTENTS></TEMPLATE_CONTENTS>") != -1 50 51 filenames = [os.path.join(srcdir, x) for x in ["base.js", "about_tracing/profiling_view.js"]] 52 53 load_sequence = parse_deps.calc_load_sequence(filenames, srcdir) 54 55 style_sheet_contents = "" 56 for module in load_sequence: 57 for style_sheet in module.style_sheets: 58 rel_filename = os.path.relpath(style_sheet.filename, outdir) 59 link_tag = """<link rel="stylesheet" href="%s">\n""" % rel_filename 60 style_sheet_contents += link_tag 61 62 template_contents = generate_templates() 63 64 result = template 65 result = result.replace("<WARNING_MESSAGE></WARNING_MESSAGE>", 66 html_warning_message) 67 result = result.replace("<STYLE_SHEET_CONTENTS></STYLE_SHEET_CONTENTS>", 68 style_sheet_contents) 69 result = result.replace("<TEMPLATE_CONTENTS></TEMPLATE_CONTENTS>", 70 template_contents) 71 72 return result 73 74 def generate_js(outdir): 75 f = open(os.path.join(srcdir, "about_tracing.js.template"), 'r') 76 template = f.read() 77 f.close() 78 79 assert template.find("<WARNING_MESSAGE></WARNING_MESSAGE>") != -1 80 assert template.find("<SCRIPT_CONTENTS></SCRIPT_CONTENTS>") != -1 81 82 filenames = [os.path.join(srcdir, x) for x in ["base.js", "about_tracing/profiling_view.js"]] 83 84 import parse_deps 85 load_sequence = parse_deps.calc_load_sequence(filenames, srcdir) 86 script_contents = "" 87 script_contents += "window.FLATTENED = {};\n" 88 script_contents += "window.FLATTENED_RAW_SCRIPTS = {};\n" 89 for module in load_sequence: 90 for dependent_raw_script_name in module.dependent_raw_script_names: 91 script_contents += ( 92 "window.FLATTENED_RAW_SCRIPTS['%s'] = true;\n" % 93 dependent_raw_script_name) 94 script_contents += "window.FLATTENED['%s'] = true;\n" % module.name 95 96 for module in load_sequence: 97 for dependent_raw_script in module.dependent_raw_scripts: 98 rel_filename = os.path.relpath(dependent_raw_script.filename, outdir) 99 script_contents += """<include src="%s">\n""" % rel_filename 100 101 rel_filename = os.path.relpath(module.filename, outdir) 102 script_contents += """<include src="%s">\n""" % rel_filename 103 104 105 result = template 106 result = result.replace("<WARNING_MESSAGE></WARNING_MESSAGE>", 107 js_warning_message) 108 result = result.replace("<SCRIPT_CONTENTS></SCRIPT_CONTENTS>", script_contents) 109 110 return result 111 112 def main(args): 113 parser = optparse.OptionParser(usage="%prog --outdir=<directory>") 114 parser.add_option("--outdir", dest="out_dir", 115 help="Where to place generated content") 116 options, args = parser.parse_args(args) 117 118 if not options.out_dir: 119 sys.stderr.write("ERROR: Must specify --outdir=<directory>") 120 parser.print_help() 121 return 1 122 123 olddir = os.getcwd() 124 try: 125 try: 126 result_html = generate_html(options.out_dir) 127 except parse_deps.DepsException, ex: 128 sys.stderr.write("Error: %s\n\n" % str(ex)) 129 return 255 130 131 o = open(os.path.join(options.out_dir, "about_tracing.html"), 'w') 132 o.write(result_html) 133 o.close() 134 135 result_js = generate_js(options.out_dir) 136 o = open(os.path.join(options.out_dir, "about_tracing.js"), 'w') 137 o.write(result_js) 138 o.close() 139 140 finally: 141 os.chdir(olddir) 142 143 return 0 144 145 if __name__ == "__main__": 146 sys.exit(main(sys.argv)) 147