Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(27)

Side by Side Diff: bindings/dart/scripts/compiler.py

Issue 1660113002: Updated to Chrome 45 (2454) moved from SVN to git. Base URL: https://github.com/dart-lang/webcore.git@roll_45
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « bindings/dart/scripts/code_generator_dart.py ('k') | bindings/dart/scripts/dart_attributes.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/usr/bin/python
2 # Copyright (C) 2014 Google Inc. All rights reserved.
3 #
4 # Redistribution and use in source and binary forms, with or without
5 # modification, are permitted provided that the following conditions are
6 # met:
7 #
8 # * Redistributions of source code must retain the above copyright
9 # notice, this list of conditions and the following disclaimer.
10 # * Redistributions in binary form must reproduce the above
11 # copyright notice, this list of conditions and the following disclaimer
12 # in the documentation and/or other materials provided with the
13 # distribution.
14 # * Neither the name of Google Inc. nor the names of its
15 # contributors may be used to endorse or promote products derived from
16 # this software without specific prior written permission.
17 #
18 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
30 """Compile an .idl file to Dart bindings (.h and .cpp files).
31
32 Design doc: ??????
33 """
34
35 from optparse import OptionParser
36 import os
37 import sys
38
39 dart_script_path = os.path.dirname(os.path.abspath(__file__))
40 script_path = os.path.join(os.path.dirname(os.path.dirname(dart_script_path)),
41 'scripts')
42 sys.path.extend([script_path])
43
44 from dart_compiler import IdlCompiler
45 from code_generator_dart import CodeGeneratorDart
46
47
48 def parse_options():
49 parser = OptionParser()
50 parser.add_option('--output-directory')
51 parser.add_option('--interfaces-info-file')
52 parser.add_option('--write-file-only-if-changed', type='int', default='1')
53 parser.add_option('--generate-dart-blink',
54 action='append',
55 type='string',
56 dest='blink_global_entries',
57 nargs=3,
58 help="Pickle file directory, idl file list, idl dictionari es list")
59
60 parser.add_option('--generate-globals',
61 action='append',
62 type='string',
63 dest='global_entries',
64 nargs=2,
65 help="Pickle file directory and idl file list (global clas s table)")
66
67 # ensure output comes last, so command line easy to parse via regexes
68 parser.disable_interspersed_args()
69
70 options, args = parser.parse_args()
71 if options.output_directory is None:
72 parser.error('Must specify output directory using --output-directory.')
73 options.write_file_only_if_changed = bool(options.write_file_only_if_changed )
74 if bool(options.global_entries) or bool(options.blink_global_entries):
75 return options, None
76 if len(args) != 1:
77 parser.error('Must specify exactly 1 input file as argument, but %d give n.' % len(args))
78 filename = os.path.realpath(args[0])
79 return options, filename
80
81
82 def idl_filename_to_interface_name(idl_filename):
83 basename = os.path.basename(idl_filename)
84 interface_name, _ = os.path.splitext(basename)
85 return interface_name
86
87
88 class IdlCompilerDart(IdlCompiler):
89 def __init__(self, *args, **kwargs):
90 IdlCompiler.__init__(self, *args, **kwargs)
91
92 interfaces_info = self.interfaces_info
93 self.output_directory = self.output_directory
94
95 self.code_generator = CodeGeneratorDart(interfaces_info, self.output_dir ectory)
96
97 def compile_file(self, idl_filename):
98 interface_name = idl_filename_to_interface_name(idl_filename)
99 header_filename = os.path.join(self.output_directory,
100 'Dart%s.h' % interface_name)
101 cpp_filename = os.path.join(self.output_directory,
102 'Dart%s.cpp' % interface_name)
103 self.compile_and_write(idl_filename, (header_filename, cpp_filename))
104
105 def generate_global(self, global_entries):
106 expanded_global_entries = []
107 for (directory, file_list_file) in global_entries:
108 with open(file_list_file) as input_file:
109 idl_file_list = sorted([line.rstrip('\n')
110 for line in input_file])
111 expanded_global_entries.append((directory, idl_file_list))
112 global_header_filename = os.path.join(self.output_directory, 'DartWebkit ClassIds.h')
113 global_cpp_filename = os.path.join(self.output_directory, 'DartWebkitCla ssIds.cpp')
114 self.generate_global_and_write(expanded_global_entries,
115 (global_header_filename, global_cpp_filen ame))
116
117 def generate_dart_blink(self, global_entries):
118 global_dart_blink_filename = os.path.join(self.output_directory,
119 '_blink_dartium.dart')
120 expanded_global_entries = []
121 for (directory, file_list_file, file_list_dictionary) in global_entries:
122 with open(file_list_file) as input_file:
123 idl_file_list = sorted([line.rstrip('\n')
124 for line in input_file])
125 with open(file_list_dictionary) as input_file:
126 dictionary_file_list = sorted([line.rstrip('\n')
127 for line in input_file])
128 expanded_global_entries.append((directory, idl_file_list))
129 expanded_global_entries.append((directory, dictionary_file_list))
130 self.generate_dart_blink_and_write(expanded_global_entries,
131 global_dart_blink_filename)
132
133
134 def main():
135 options, filename = parse_options()
136 idl_compiler = IdlCompilerDart(options.output_directory,
137 interfaces_info_filename=options.interfaces_i nfo_file,
138 only_if_changed=options.write_file_only_if_ch anged)
139 if bool(options.global_entries):
140 idl_compiler.generate_global(options.global_entries)
141 elif bool(options.blink_global_entries):
142 idl_compiler.generate_dart_blink(options.blink_global_entries)
143 else:
144 idl_compiler.compile_file(filename)
145
146
147 if __name__ == '__main__':
148 sys.exit(main())
OLDNEW
« no previous file with comments | « bindings/dart/scripts/code_generator_dart.py ('k') | bindings/dart/scripts/dart_attributes.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698