Home | History | Annotate | Download | only in build
      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 import optparse
      6 import os
      7 import sys
      8 import parse_deps
      9 import StringIO
     10 
     11 srcdir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../src"))
     12 
     13 def flatten_module_contents(filenames):
     14   out = StringIO.StringIO()
     15   load_sequence = parse_deps.calc_load_sequence(filenames, srcdir)
     16 
     17   flattened_module_names = ["'%s'" % module.name for module in load_sequence]
     18   out.write("    if (!window.FLATTENED) window.FLATTENED = {};\n")
     19   for module in load_sequence:
     20     out.write("    window.FLATTENED['%s'] = true;\n" % module.name);
     21 
     22   for module in load_sequence:
     23     out.write(module.contents)
     24     if module.contents[-1] != '\n':
     25       out.write('\n')
     26   return out.getvalue()
     27 
     28 def flatten_style_sheet_contents(filenames):
     29   out = StringIO.StringIO()
     30   load_sequence = parse_deps.calc_load_sequence(filenames, srcdir)
     31 
     32   # Stylesheets should be sourced from topmsot in, not inner-out.
     33   load_sequence.reverse()
     34 
     35   for module in load_sequence:
     36     for style_sheet in module.style_sheets:
     37       out.write(style_sheet.contents)
     38       if style_sheet.contents[-1] != '\n':
     39         out.write('\n')
     40   return out.getvalue()
     41 
     42 def main(argv):
     43   parser = optparse.OptionParser(usage="flatten filename1.js [filename2.js ...]",
     44                                  epilog="""
     45 This is a low-level flattening tool. You probably are meaning to run
     46 generate_standalone_timeline_view.py
     47 """)
     48 
     49   parser.add_option("--css", dest="flatten_css", action="store_true", help="Outputs a flattened stylesheet.")
     50   options, args = parser.parse_args(argv[1:])
     51 
     52   if len(args) == 0:
     53     sys.stderr.write("Expected: filename or filenames to flatten\n")
     54     return 255
     55 
     56   if options.flatten_css:
     57     sys.stdout.write(flatten_style_sheet_contents(args))
     58   else:
     59     sys.stdout.write(flatten_module_contents(args))
     60   return 0
     61 
     62 if __name__ == "__main__":
     63   sys.exit(main(sys.argv))
     64