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

Side by Side Diff: tools/dom/scripts/dartdomgenerator.py

Issue 554853002: "Reverting 39948" (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « tools/dom/scripts/__init__.py ('k') | tools/dom/scripts/dartgenerator.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 2 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
3 # for details. All rights reserved. Use of this source code is governed by a 3 # for details. All rights reserved. Use of this source code is governed by a
4 # BSD-style license that can be found in the LICENSE file. 4 # BSD-style license that can be found in the LICENSE file.
5 5
6 """This is the entry point to create Dart APIs from the IDL database.""" 6 """This is the entry point to create Dart APIs from the IDL database."""
7 7
8 import css_code_generator 8 import css_code_generator
9 import os
10 import sys
11
12 # Setup all paths to find our PYTHON code
13 dart_dir = os.path.abspath(os.path.normpath(os.path.join(os.path.dirname(__file_ _), '..', '..', '..')))
14 sys.path.insert(1, os.path.join(dart_dir, 'tools/dom/new_scripts'))
15 sys.path.insert(1, os.path.join(dart_dir, 'third_party/WebCore/bindings/scripts' ))
16 sys.path.insert(1, os.path.join(dart_dir, 'third_party'))
17 sys.path.insert(1, os.path.join(dart_dir, 'tools/dom/scripts'))
18
19 import dartgenerator 9 import dartgenerator
20 import database 10 import database
21 import fremontcutbuilder 11 import fremontcutbuilder
22 import logging 12 import logging
23 import monitored 13 import monitored
24 import multiemitter 14 import multiemitter
25 import optparse 15 import optparse
16 import os
26 import shutil 17 import shutil
27 import subprocess 18 import subprocess
28 import time 19 import sys
29 from dartmetadata import DartMetadata 20 from dartmetadata import DartMetadata
30 from generator import TypeRegistry 21 from generator import TypeRegistry
31 from htmleventgenerator import HtmlEventGenerator 22 from htmleventgenerator import HtmlEventGenerator
32 from htmlrenamer import HtmlRenamer 23 from htmlrenamer import HtmlRenamer
33 from systemhtml import DartLibraryEmitter, Dart2JSBackend,\ 24 from systemhtml import DartLibraryEmitter, Dart2JSBackend,\
34 HtmlDartInterfaceGenerator, DartLibrary, DartLibraries,\ 25 HtmlDartInterfaceGenerator, DartLibrary, DartLibraries,\
35 HTML_LIBRARY_NAMES 26 HTML_LIBRARY_NAMES
36 from systemnative import CPPLibraryEmitter, DartiumBackend, \ 27 from systemnative import CPPLibraryEmitter, DartiumBackend, \
37 GetNativeLibraryEmitter 28 GetNativeLibraryEmitter
38 from templateloader import TemplateLoader 29 from templateloader import TemplateLoader
39 30
40 sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..')) 31 sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..'))
41
42 import utils 32 import utils
43 33
44
45 _logger = logging.getLogger('dartdomgenerator') 34 _logger = logging.getLogger('dartdomgenerator')
46 35
47 class GeneratorOptions(object): 36 class GeneratorOptions(object):
48 def __init__(self, templates, database, type_registry, renamer, 37 def __init__(self, templates, database, type_registry, renamer,
49 metadata): 38 metadata):
50 self.templates = templates 39 self.templates = templates
51 self.database = database 40 self.database = database
52 self.type_registry = type_registry 41 self.type_registry = type_registry
53 self.renamer = renamer 42 self.renamer = renamer
54 self.metadata = metadata; 43 self.metadata = metadata;
55 44
56 def LoadDatabase(database_dir, use_database_cache): 45 def LoadDatabase(database_dir, use_database_cache):
57 common_database = database.Database(database_dir) 46 common_database = database.Database(database_dir)
58 if use_database_cache: 47 if use_database_cache:
59 common_database.LoadFromCache() 48 common_database.LoadFromCache()
60 else: 49 else:
61 common_database.Load() 50 common_database.Load()
62 return common_database 51 return common_database
63 52
64 def GenerateFromDatabase(common_database, dart2js_output_dir, 53 def GenerateFromDatabase(common_database, dart2js_output_dir,
65 dartium_output_dir, update_dom_metadata=False, 54 dartium_output_dir, update_dom_metadata=False):
66 logging_level=logging.WARNING):
67 start_time = time.time()
68
69 current_dir = os.path.dirname(__file__) 55 current_dir = os.path.dirname(__file__)
70 auxiliary_dir = os.path.join(current_dir, '..', 'src') 56 auxiliary_dir = os.path.join(current_dir, '..', 'src')
71 template_dir = os.path.join(current_dir, '..', 'templates') 57 template_dir = os.path.join(current_dir, '..', 'templates')
72 58
73 _logger.setLevel(logging_level) 59 generator = dartgenerator.DartGenerator()
74
75 generator = dartgenerator.DartGenerator(logging_level)
76 generator.LoadAuxiliary(auxiliary_dir) 60 generator.LoadAuxiliary(auxiliary_dir)
77 61
78 generator.FilterMembersWithUnidentifiedTypes(common_database) 62 generator.FilterMembersWithUnidentifiedTypes(common_database)
79 webkit_database = common_database.Clone() 63 webkit_database = common_database.Clone()
80 64
81 # Generate Dart interfaces for the WebKit DOM. 65 # Generate Dart interfaces for the WebKit DOM.
82 generator.FilterInterfaces(database = webkit_database, 66 generator.FilterInterfaces(database = webkit_database,
83 or_annotations = ['WebKit', 'Dart'], 67 or_annotations = ['WebKit', 'Dart'],
84 exclude_displaced = ['WebKit'], 68 exclude_displaced = ['WebKit'],
85 exclude_suppressed = ['WebKit', 'Dart']) 69 exclude_suppressed = ['WebKit', 'Dart'])
86 generator.FixEventTargets(webkit_database) 70 generator.FixEventTargets(webkit_database)
87 generator.AddMissingArguments(webkit_database) 71 generator.AddMissingArguments(webkit_database)
88 72
89 emitters = multiemitter.MultiEmitter(logging_level) 73 emitters = multiemitter.MultiEmitter()
90 metadata = DartMetadata( 74 metadata = DartMetadata(
91 os.path.join(current_dir, '..', 'dom.json'), 75 os.path.join(current_dir, '..', 'dom.json'),
92 os.path.join(current_dir, '..', 'docs', 'docs.json'), 76 os.path.join(current_dir, '..', 'docs', 'docs.json'))
93 logging_level)
94 renamer = HtmlRenamer(webkit_database, metadata) 77 renamer = HtmlRenamer(webkit_database, metadata)
95 type_registry = TypeRegistry(webkit_database, renamer) 78 type_registry = TypeRegistry(webkit_database, renamer)
96 79
97 print 'GenerateFromDatabase %s seconds' % round((time.time() - start_time), 2)
98
99 def RunGenerator(dart_libraries, dart_output_dir, 80 def RunGenerator(dart_libraries, dart_output_dir,
100 template_loader, backend_factory): 81 template_loader, backend_factory):
101 options = GeneratorOptions( 82 options = GeneratorOptions(
102 template_loader, webkit_database, type_registry, renamer, 83 template_loader, webkit_database, type_registry, renamer,
103 metadata) 84 metadata)
104 dart_library_emitter = DartLibraryEmitter( 85 dart_library_emitter = DartLibraryEmitter(
105 emitters, dart_output_dir, dart_libraries) 86 emitters, dart_output_dir, dart_libraries)
106 event_generator = HtmlEventGenerator(webkit_database, renamer, metadata, 87 event_generator = HtmlEventGenerator(webkit_database, renamer, metadata,
107 template_loader) 88 template_loader)
108 89
109 def generate_interface(interface): 90 def generate_interface(interface):
110 backend = backend_factory(interface) 91 backend = backend_factory(interface)
111 interface_generator = HtmlDartInterfaceGenerator( 92 interface_generator = HtmlDartInterfaceGenerator(
112 options, dart_library_emitter, event_generator, interface, backend) 93 options, dart_library_emitter, event_generator, interface, backend)
113 interface_generator.Generate() 94 interface_generator.Generate()
114 95
115 generator.Generate(webkit_database, common_database, generate_interface) 96 generator.Generate(webkit_database, common_database, generate_interface)
116 97
117 dart_library_emitter.EmitLibraries(auxiliary_dir) 98 dart_library_emitter.EmitLibraries(auxiliary_dir)
118 99
119 if dart2js_output_dir: 100 if dart2js_output_dir:
120 template_paths = ['html/dart2js', 'html/impl', 'html/interface', ''] 101 template_paths = ['html/dart2js', 'html/impl', 'html/interface', '']
121 template_loader = TemplateLoader(template_dir, 102 template_loader = TemplateLoader(template_dir,
122 template_paths, 103 template_paths,
123 {'DARTIUM': False, 'DART2JS': True}) 104 {'DARTIUM': False, 'DART2JS': True})
124 backend_options = GeneratorOptions( 105 backend_options = GeneratorOptions(
125 template_loader, webkit_database, type_registry, renamer, 106 template_loader, webkit_database, type_registry, renamer,
126 metadata) 107 metadata)
127 backend_factory = lambda interface:\ 108 backend_factory = lambda interface:\
128 Dart2JSBackend(interface, backend_options, logging_level) 109 Dart2JSBackend(interface, backend_options)
129 110
130 dart_output_dir = os.path.join(dart2js_output_dir, 'dart') 111 dart_output_dir = os.path.join(dart2js_output_dir, 'dart')
131 dart_libraries = DartLibraries( 112 dart_libraries = DartLibraries(
132 HTML_LIBRARY_NAMES, template_loader, 'dart2js', dart2js_output_dir) 113 HTML_LIBRARY_NAMES, template_loader, 'dart2js', dart2js_output_dir)
133 114
134 print '\nGenerating dart2js:\n' 115 RunGenerator(dart_libraries, dart_output_dir,
135 start_time = time.time() 116 template_loader, backend_factory)
136
137 RunGenerator(dart_libraries, dart_output_dir, template_loader,
138 backend_factory)
139
140 print 'Generated dart2js in %s seconds' % round(time.time() - start_time, 2)
141 117
142 if dartium_output_dir: 118 if dartium_output_dir:
143 template_paths = ['html/dartium', 'html/impl', 'html/interface', ''] 119 template_paths = ['html/dartium', 'html/impl', 'html/interface', '']
144 template_loader = TemplateLoader(template_dir, 120 template_loader = TemplateLoader(template_dir,
145 template_paths, 121 template_paths,
146 {'DARTIUM': True, 'DART2JS': False}) 122 {'DARTIUM': True, 'DART2JS': False})
147 backend_options = GeneratorOptions( 123 backend_options = GeneratorOptions(
148 template_loader, webkit_database, type_registry, renamer, 124 template_loader, webkit_database, type_registry, renamer,
149 metadata) 125 metadata)
150 cpp_output_dir = os.path.join(dartium_output_dir, 'cpp') 126 cpp_output_dir = os.path.join(dartium_output_dir, 'cpp')
151 cpp_library_emitter = CPPLibraryEmitter(emitters, cpp_output_dir) 127 cpp_library_emitter = CPPLibraryEmitter(emitters, cpp_output_dir)
152 dart_output_dir = os.path.join(dartium_output_dir, 'dart') 128 dart_output_dir = os.path.join(dartium_output_dir, 'dart')
153 native_library_emitter = \ 129 native_library_emitter = \
154 GetNativeLibraryEmitter(emitters, template_loader, 130 GetNativeLibraryEmitter(emitters, template_loader,
155 dartium_output_dir, dart_output_dir, 131 dartium_output_dir, dart_output_dir,
156 auxiliary_dir) 132 auxiliary_dir)
157 backend_factory = lambda interface:\ 133 backend_factory = lambda interface:\
158 DartiumBackend(interface, native_library_emitter, 134 DartiumBackend(interface, native_library_emitter,
159 cpp_library_emitter, backend_options) 135 cpp_library_emitter, backend_options)
160 dart_libraries = DartLibraries( 136 dart_libraries = DartLibraries(
161 HTML_LIBRARY_NAMES, template_loader, 'dartium', dartium_output_dir) 137 HTML_LIBRARY_NAMES, template_loader, 'dartium', dartium_output_dir)
162
163 print '\nGenerating dartium:\n'
164 start_time = time.time()
165
166 RunGenerator(dart_libraries, dart_output_dir, 138 RunGenerator(dart_libraries, dart_output_dir,
167 template_loader, backend_factory) 139 template_loader, backend_factory)
168 print 'Generated dartium in %s seconds' % round(time.time() - start_time, 2)
169
170 cpp_library_emitter.EmitDerivedSources( 140 cpp_library_emitter.EmitDerivedSources(
171 template_loader.Load('cpp_derived_sources.template'), 141 template_loader.Load('cpp_derived_sources.template'),
172 dartium_output_dir) 142 dartium_output_dir)
173 cpp_library_emitter.EmitResolver( 143 cpp_library_emitter.EmitResolver(
174 template_loader.Load('cpp_resolver.template'), dartium_output_dir) 144 template_loader.Load('cpp_resolver.template'), dartium_output_dir)
175 cpp_library_emitter.EmitClassIdTable( 145 cpp_library_emitter.EmitClassIdTable(
176 webkit_database, dartium_output_dir, type_registry, renamer) 146 webkit_database, dartium_output_dir, type_registry, renamer)
177 emitters.Flush() 147 emitters.Flush()
178 148
179 if update_dom_metadata: 149 if update_dom_metadata:
180 metadata.Flush() 150 metadata.Flush()
181 151
182 monitored.FinishMonitoring(dart2js_output_dir, _logger) 152 monitored.FinishMonitoring(dart2js_output_dir)
183 153
184 def GenerateSingleFile(library_path, output_dir, generated_output_dir=None): 154 def GenerateSingleFile(library_path, output_dir, generated_output_dir=None):
185 library_dir = os.path.dirname(library_path) 155 library_dir = os.path.dirname(library_path)
186 library_filename = os.path.basename(library_path) 156 library_filename = os.path.basename(library_path)
187 copy_dart_script = os.path.relpath('../../copy_dart.py', 157 copy_dart_script = os.path.relpath('../../copy_dart.py',
188 library_dir) 158 library_dir)
189 output_dir = os.path.relpath(output_dir, library_dir) 159 output_dir = os.path.relpath(output_dir, library_dir)
190 command = ' '.join(['cd', library_dir, ';', 160 command = ' '.join(['cd', library_dir, ';',
191 copy_dart_script, output_dir, library_filename]) 161 copy_dart_script, output_dir, library_filename])
192 subprocess.call([command], shell=True) 162 subprocess.call([command], shell=True)
(...skipping 22 matching lines...) Expand all
215 help='Directory to put the generated files') 185 help='Directory to put the generated files')
216 parser.add_option('--use-database-cache', dest='use_database_cache', 186 parser.add_option('--use-database-cache', dest='use_database_cache',
217 action='store_true', 187 action='store_true',
218 default=False, 188 default=False,
219 help='''Use the cached database from the previous run to 189 help='''Use the cached database from the previous run to
220 improve startup performance''') 190 improve startup performance''')
221 parser.add_option('--update-dom-metadata', dest='update_dom_metadata', 191 parser.add_option('--update-dom-metadata', dest='update_dom_metadata',
222 action='store_true', 192 action='store_true',
223 default=False, 193 default=False,
224 help='''Update the metadata list of DOM APIs''') 194 help='''Update the metadata list of DOM APIs''')
225 parser.add_option('--blink-parser', dest='blink_parser',
226 action='store_true', default=False,
227 help='Use New Blink IDL parser.')
228 parser.add_option('--verbose', dest='logging_level',
229 action='store_false', default=logging.WARNING,
230 help='Output all informational messages')
231 parser.add_option('--logging', dest='logging', type='int',
232 action='store', default=logging.NOTSET,
233 help='Level of logging 20 is Info, 30 is Warnings, 40 is Err ors')
234
235 (options, args) = parser.parse_args() 195 (options, args) = parser.parse_args()
236 196
237 current_dir = os.path.dirname(__file__) 197 current_dir = os.path.dirname(__file__)
238 database_dir = os.path.join(current_dir, '..', 'database') 198 database_dir = os.path.join(current_dir, '..', 'database')
239 logging.config.fileConfig(os.path.join(current_dir, 'logging.conf')) 199 logging.config.fileConfig(os.path.join(current_dir, 'logging.conf'))
240 systems = options.systems.split(',') 200 systems = options.systems.split(',')
241 201
242 output_dir = options.output_dir or os.path.join( 202 output_dir = options.output_dir or os.path.join(
243 current_dir, '..', '..', utils.GetBuildDir(utils.GuessOS()), 203 current_dir, '..', '..', utils.GetBuildDir(utils.GuessOS()),
244 'generated') 204 'generated')
245 205
246 dart2js_output_dir = None 206 dart2js_output_dir = None
247 if 'htmldart2js' in systems: 207 if 'htmldart2js' in systems:
248 dart2js_output_dir = os.path.join(output_dir, 'dart2js') 208 dart2js_output_dir = os.path.join(output_dir, 'dart2js')
249 dartium_output_dir = None 209 dartium_output_dir = None
250 if 'htmldartium' in systems: 210 if 'htmldartium' in systems:
251 dartium_output_dir = os.path.join(output_dir, 'dartium') 211 dartium_output_dir = os.path.join(output_dir, 'dartium')
252 212
253 logging_level = options.logging_level \
254 if options.logging == logging.NOTSET else options.logging
255
256 start_time = time.time()
257
258 UpdateCssProperties() 213 UpdateCssProperties()
259
260 if options.rebuild: 214 if options.rebuild:
261 # Parse the IDL and create the database. 215 # Parse the IDL and create the database.
262 database = fremontcutbuilder.main(options.parallel, options.blink_parser, 216 database = fremontcutbuilder.main(options.parallel)
263 logging_level=logging_level)
264 else: 217 else:
265 # TODO(terry): Should be able to remove this...
266 # Load the previously generated database. 218 # Load the previously generated database.
267 if not options.blink_parser: 219 database = LoadDatabase(database_dir, options.use_database_cache)
268 database = LoadDatabase(database_dir, options.use_database_cache)
269
270 GenerateFromDatabase(database, dart2js_output_dir, dartium_output_dir, 220 GenerateFromDatabase(database, dart2js_output_dir, dartium_output_dir,
271 options.update_dom_metadata, logging_level) 221 options.update_dom_metadata)
272
273 file_generation_start_time = time.time()
274 222
275 if 'htmldart2js' in systems: 223 if 'htmldart2js' in systems:
276 _logger.info('Generating dart2js single files.') 224 _logger.info('Generating dart2js single files.')
277
278 for library_name in HTML_LIBRARY_NAMES: 225 for library_name in HTML_LIBRARY_NAMES:
279 GenerateSingleFile( 226 GenerateSingleFile(
280 os.path.join(dart2js_output_dir, '%s_dart2js.dart' % library_name), 227 os.path.join(dart2js_output_dir, '%s_dart2js.dart' % library_name),
281 os.path.join('..', '..', '..', 'sdk', 'lib', library_name, 'dart2js')) 228 os.path.join('..', '..', '..', 'sdk', 'lib', library_name, 'dart2js'))
282
283 if 'htmldartium' in systems: 229 if 'htmldartium' in systems:
284 _logger.info('Generating dartium single files.') 230 _logger.info('Generating dartium single files.')
285 file_generation_start_time = time.time()
286
287 for library_name in HTML_LIBRARY_NAMES: 231 for library_name in HTML_LIBRARY_NAMES:
288 GenerateSingleFile( 232 GenerateSingleFile(
289 os.path.join(dartium_output_dir, '%s_dartium.dart' % library_name), 233 os.path.join(dartium_output_dir, '%s_dartium.dart' % library_name),
290 os.path.join('..', '..', '..', 'sdk', 'lib', library_name, 'dartium')) 234 os.path.join('..', '..', '..', 'sdk', 'lib', library_name, 'dartium'))
291 GenerateSingleFile( 235 GenerateSingleFile(
292 os.path.join(dartium_output_dir, '_blink_dartium.dart'), 236 os.path.join(dartium_output_dir, '_blink_dartium.dart'),
293 os.path.join('..', '..', '..', 'sdk', 'lib', '_blink', 'dartium')) 237 os.path.join('..', '..', '..', 'sdk', 'lib', '_blink', 'dartium'))
294 238
295 print '\nGenerating single file %s seconds' % round(time.time() - file_generat ion_start_time, 2)
296
297 end_time = time.time()
298
299 print '\nDone (dartdomgenerator) %s seconds' % round(end_time - start_time, 2)
300
301 if __name__ == '__main__': 239 if __name__ == '__main__':
302 sys.exit(main()) 240 sys.exit(main())
OLDNEW
« no previous file with comments | « tools/dom/scripts/__init__.py ('k') | tools/dom/scripts/dartgenerator.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698