1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
5 """Convert PrivateScript's sources to C++ constant strings.
6 FIXME: We don't want to add more build scripts. Rewrite this script in grit. crbug.com/388121
9 python make_private_script_source.py DESTINATION_FILE SOURCE_FILES
18 # We assume that X.js has a corresponding X.idl in the same directory.
19 # If X is a partial interface, this method extracts the base name of the partial interface from X.idl.
20 # Otherwise, this method returns None.
21 def extract_partial_interface_name(filename
):
22 basename
, ext
= os
.path
.splitext(filename
)
24 # PrivateScriptRunner.js is a special JS script to control private scripts,
25 # and doesn't have a corresponding IDL file.
26 if os
.path
.basename(basename
) == 'PrivateScriptRunner':
28 idl_filename
= basename
+ '.idl'
29 with
open(idl_filename
) as f
:
31 match
= re
.search(r
'partial\s+interface\s+(\w+)\s*{', contents
)
32 return match
and match
.group(1)
36 parser
= optparse
.OptionParser()
37 parser
.add_option('--for-testing', action
="store_true", default
=False)
39 options
, args
= parser
.parse_args()
40 output_filename
= args
[0]
41 input_filenames
= args
[1:]
42 source_name
, ext
= os
.path
.splitext(os
.path
.basename(output_filename
))
45 contents
.append('#ifndef %s_h\n' % source_name
)
46 contents
.append('#define %s_h\n' % source_name
)
47 if options
.for_testing
:
48 for input_filename
in input_filenames
:
49 class_name
, ext
= os
.path
.splitext(os
.path
.basename(input_filename
))
50 with
open(input_filename
) as input_file
:
51 input_text
= input_file
.read()
52 hex_values
= ['0x{0:02x}'.format(ord(char
)) for char
in input_text
]
53 contents
.append('const char kSourceOf%s[] = {\n %s\n};\n\n' % (
54 class_name
, ', '.join(hex_values
)))
55 contents
.append('struct %s {' % source_name
)
57 const char* scriptClassName;
58 const char* className;
60 if options
.for_testing
:
65 contents
.append('const char* resourceFile;')
71 contents
.append('struct %s k%s[] = {\n' % (source_name
, source_name
))
72 for input_filename
in input_filenames
:
73 script_class_name
, ext
= os
.path
.splitext(os
.path
.basename(input_filename
))
74 class_name
= extract_partial_interface_name(input_filename
) or script_class_name
75 if options
.for_testing
:
76 contents
.append(' { "%s", "%s", kSourceOf%s, sizeof(kSourceOf%s) },\n' % (script_class_name
, class_name
, script_class_name
, script_class_name
))
78 contents
.append(' { "%s", "%s", "%s.js" },\n' % (script_class_name
, class_name
, script_class_name
))
79 contents
.append('};\n')
80 contents
.append('#endif // %s_h\n' % source_name
)
81 with
open(output_filename
, 'w') as output_file
:
82 output_file
.write("".join(contents
))
85 if __name__
== '__main__':