#!/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 optparse import parse_deps import sys import os 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) 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. * WARNING: This file is generated by generate_about_tracing_contents.py * * Do not edit directly. */ """ def generate_html(): 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 filenames = [os.path.join(srcdir, x) for x in ["base.js", "profiling_view.js"]] filenames = [os.path.relpath(x) for x in filenames] 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, srcdir) link_tag = """<link rel="stylesheet" href="%s">\n""" % rel_filename style_sheet_contents += link_tag result = template result = result.replace("<WARNING_MESSAGE></WARNING_MESSAGE>", html_warning_message) result = result.replace("<STYLE_SHEET_CONTENTS></STYLE_SHEET_CONTENTS>", style_sheet_contents) return result def generate_js(): 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", "profiling_view.js"]] filenames = [os.path.relpath(x) for x in filenames] import parse_deps load_sequence = parse_deps.calc_load_sequence(filenames, srcdir) script_contents = "" script_contents += "window.FLATTENED = {};\n" for module in load_sequence: script_contents += "window.FLATTENED['%s'] = true;\n" % module.name for module in load_sequence: rel_filename = os.path.relpath(module.filename, srcdir) 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 is_out_of_date(): olddir = os.getcwd() try: os.chdir(srcdir) o = open(os.path.join(srcdir, "about_tracing.html"), 'r') existing_result_html = o.read() o.close() result_html = generate_html() if result_html != existing_result_html: return True o = open(os.path.join(srcdir, "about_tracing.js"), 'r') existing_result_js = o.read() o.close() result_js = generate_js() if result_js != existing_result_js: return True finally: os.chdir(olddir) return False def main(args): parser = optparse.OptionParser() options, args = parser.parse_args(args) olddir = os.getcwd() try: os.chdir(srcdir) try: result_html = generate_html() except parse_deps.DepsException, ex: sys.stderr.write("Error: %s\n\n" % str(ex)) return 255 o = open(os.path.join(srcdir, "about_tracing.html"), 'w') o.write(result_html) o.close() result_js = generate_js() o = open(os.path.join(srcdir, "about_tracing.js"), 'w') o.write(result_js) o.close() finally: os.chdir(olddir) return 0 if __name__ == "__main__": sys.exit(main(sys.argv))