Home | History | Annotate | Download | only in tracing
      1 #!/usr/bin/env python
      2 # Copyright 2013 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 """Creates a grd file for packaging the trace-viewer files.
      7 
      8    This file is modified from the devtools generate_devtools_grd.py file.
      9 """
     10 
     11 import errno
     12 import os
     13 import shutil
     14 import sys
     15 from xml.dom import minidom
     16 
     17 kTracingResourcePrefix = 'IDR_TRACING_'
     18 kGrdTemplate = '''<?xml version="1.0" encoding="UTF-8"?>
     19 <grit latest_public_release="0" current_release="1">
     20   <outputs>
     21     <output filename="grit/tracing_resources.h" type="rc_header">
     22       <emit emit_type='prepend'></emit>
     23     </output>
     24     <output filename="tracing_resources.pak" type="data_package" />
     25     <output filename="tracing_resources.rc" type="rc_all" />
     26   </outputs>
     27   <release seq="1">
     28     <includes>
     29       <if expr="not is_android"></if>
     30     </includes>
     31   </release>
     32 </grit>
     33 
     34 '''
     35 
     36 
     37 class ParsedArgs:
     38   def __init__(self, source_files, output_filename):
     39     self.source_files = source_files
     40     self.output_filename = output_filename
     41 
     42 
     43 def parse_args(argv):
     44   output_position = argv.index('--output')
     45   source_files = argv[:output_position]
     46   return ParsedArgs(source_files, argv[output_position + 1])
     47 
     48 
     49 def make_name_from_filename(filename):
     50   return kTracingResourcePrefix + (os.path.splitext(filename)[1][1:]).upper()
     51 
     52 
     53 def add_file_to_grd(grd_doc, filename):
     54   includes_node = grd_doc.getElementsByTagName('if')[0]
     55   includes_node.appendChild(grd_doc.createTextNode('\n        '))
     56 
     57   new_include_node = grd_doc.createElement('include')
     58   new_include_node.setAttribute('name', make_name_from_filename(filename))
     59   new_include_node.setAttribute('file', filename)
     60   new_include_node.setAttribute('type', 'BINDATA')
     61   new_include_node.setAttribute('flattenhtml', 'true')
     62   if filename.endswith('.html'):
     63     new_include_node.setAttribute('allowexternalscript', 'true')
     64   includes_node.appendChild(new_include_node)
     65 
     66 
     67 def main(argv):
     68   parsed_args = parse_args(argv[1:])
     69 
     70   output_directory = os.path.dirname(parsed_args.output_filename)
     71 
     72   doc = minidom.parseString(kGrdTemplate)
     73   for filename in parsed_args.source_files:
     74     add_file_to_grd(doc, os.path.basename(filename))
     75 
     76   with open(parsed_args.output_filename, 'w') as output_file:
     77     output_file.write(doc.toxml(encoding='UTF-8'))
     78 
     79 
     80 if __name__ == '__main__':
     81   sys.exit(main(sys.argv))
     82