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
11import errno
12import os
13import shutil
14import sys
15from xml.dom import minidom
16
17kTracingResourcePrefix = 'IDR_TRACING_'
18kGrdTemplate = '''<?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  </outputs>
26  <release seq="1">
27    <includes>
28      <if expr="not is_android"></if>
29    </includes>
30  </release>
31</grit>
32
33'''
34
35
36class ParsedArgs:
37  def __init__(self, source_files, output_filename):
38    self.source_files = source_files
39    self.output_filename = output_filename
40
41
42def parse_args(argv):
43  output_position = argv.index('--output')
44  source_files = argv[:output_position]
45  return ParsedArgs(source_files, argv[output_position + 1])
46
47
48def make_name_from_filename(filename):
49  return kTracingResourcePrefix + (os.path.splitext(filename)[1][1:]).upper()
50
51
52def add_file_to_grd(grd_doc, filename):
53  includes_node = grd_doc.getElementsByTagName('if')[0]
54  includes_node.appendChild(grd_doc.createTextNode('\n        '))
55
56  new_include_node = grd_doc.createElement('include')
57  new_include_node.setAttribute('name', make_name_from_filename(filename))
58  new_include_node.setAttribute('file', filename)
59  new_include_node.setAttribute('type', 'BINDATA')
60  new_include_node.setAttribute('flattenhtml', 'true')
61  if filename.endswith('.html'):
62    new_include_node.setAttribute('allowexternalscript', 'true')
63  includes_node.appendChild(new_include_node)
64
65
66def main(argv):
67  parsed_args = parse_args(argv[1:])
68
69  output_directory = os.path.dirname(parsed_args.output_filename)
70
71  doc = minidom.parseString(kGrdTemplate)
72  for filename in parsed_args.source_files:
73    add_file_to_grd(doc, os.path.basename(filename))
74
75  with open(parsed_args.output_filename, 'w') as output_file:
76    output_file.write(doc.toxml(encoding='UTF-8'))
77
78
79if __name__ == '__main__':
80  sys.exit(main(sys.argv))
81