3 # Copyright (C) 2011 Google Inc. All rights reserved.
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions are
9 # * Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer.
11 # * Redistributions in binary form must reproduce the above
12 # copyright notice, this list of conditions and the following disclaimer
13 # in the documentation and/or other materials provided with the
15 # * Neither the name of Google Inc. nor the names of its
16 # contributors may be used to endorse or promote products derived from
17 # this software without specific prior written permission.
19 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 """Creates a grd file for packaging the inspector files."""
33 from __future__
import with_statement
40 from xml
.dom
import minidom
42 kDevToolsResourcePrefix
= 'IDR_DEVTOOLS_'
43 kGrdTemplate
= '''<?xml version="1.0" encoding="UTF-8"?>
44 <grit latest_public_release="0" current_release="1">
46 <output filename="grit/devtools_resources.h" type="rc_header">
47 <emit emit_type='prepend'></emit>
49 <output filename="grit/devtools_resources_map.cc" type="resource_file_map_source" />
50 <output filename="grit/devtools_resources_map.h" type="resource_map_header" />
52 <output filename="devtools_resources.pak" type="data_package" />
62 def __init__(self
, source_files
, relative_path_dirs
, image_dirs
, output_filename
):
63 self
.source_files
= source_files
64 self
.relative_path_dirs
= relative_path_dirs
65 self
.image_dirs
= image_dirs
66 self
.output_filename
= output_filename
70 static_files_list_position
= argv
.index('--static_files_list')
71 relative_path_dirs_position
= argv
.index('--relative_path_dirs')
72 images_position
= argv
.index('--images')
73 output_position
= argv
.index('--output')
74 static_files_list_path
= argv
[static_files_list_position
+ 1]
75 source_files
= argv
[:static_files_list_position
]
76 with
open(static_files_list_path
, 'r') as static_list_file
:
77 source_files
.extend([line
.rstrip('\n') for line
in static_list_file
.readlines()])
78 relative_path_dirs
= argv
[relative_path_dirs_position
+ 1:images_position
]
79 image_dirs
= argv
[images_position
+ 1:output_position
]
80 return ParsedArgs(source_files
, relative_path_dirs
, image_dirs
, argv
[output_position
+ 1])
83 def make_name_from_filename(filename
):
84 return (filename
.replace('/', '_')
87 .replace('.', '_')).upper()
90 def add_file_to_grd(grd_doc
, relative_filename
):
91 includes_node
= grd_doc
.getElementsByTagName('includes')[0]
92 includes_node
.appendChild(grd_doc
.createTextNode('\n '))
94 new_include_node
= grd_doc
.createElement('include')
95 new_include_node
.setAttribute('name', make_name_from_filename(relative_filename
))
96 new_include_node
.setAttribute('file', relative_filename
)
97 new_include_node
.setAttribute('type', 'BINDATA')
98 includes_node
.appendChild(new_include_node
)
101 def build_relative_filename(relative_path_dirs
, filename
):
102 for relative_path_dir
in relative_path_dirs
:
103 index
= filename
.find(relative_path_dir
)
105 return filename
[len(relative_path_dir
) + 1:]
106 return path
.basename(filename
)
110 parsed_args
= parse_args(argv
[1:])
112 doc
= minidom
.parseString(kGrdTemplate
)
113 output_directory
= path
.dirname(parsed_args
.output_filename
)
116 os
.makedirs(path
.join(output_directory
, 'Images'))
118 if e
.errno
!= errno
.EEXIST
:
121 written_filenames
= set()
122 for filename
in parsed_args
.source_files
:
123 relative_filename
= build_relative_filename(parsed_args
.relative_path_dirs
, filename
)
124 # Avoid writing duplicate relative filenames.
125 if relative_filename
in written_filenames
:
127 written_filenames
.add(relative_filename
)
128 target_dir
= path
.join(output_directory
, path
.dirname(relative_filename
))
129 if not path
.exists(target_dir
):
130 os
.makedirs(target_dir
)
131 shutil
.copy(filename
, target_dir
)
132 add_file_to_grd(doc
, relative_filename
)
134 for dirname
in parsed_args
.image_dirs
:
135 for filename
in os
.listdir(dirname
):
136 if not filename
.endswith('.png') and not filename
.endswith('.gif') and not filename
.endswith('.svg'):
138 shutil
.copy(path
.join(dirname
, filename
),
139 path
.join(output_directory
, 'Images'))
140 add_file_to_grd(doc
, path
.join('Images', filename
))
142 with
open(parsed_args
.output_filename
, 'w') as output_file
:
143 output_file
.write(doc
.toxml(encoding
='UTF-8'))
146 if __name__
== '__main__':
147 sys
.exit(main(sys
.argv
))