def setUp(self): self._working_dir = tempfile.mkdtemp() self._output_dir = os.path.join(self._working_dir, 'output') self._database_dir = os.path.join(self._working_dir, 'database') self._auxiliary_dir = os.path.join(self._working_dir, 'auxiliary') self.assertFalse(os.path.exists(self._database_dir)) # Create database and add one interface. db = database.Database(self._database_dir) os.mkdir(self._auxiliary_dir) self.assertTrue(os.path.exists(self._database_dir)) content = """ module shapes { @A1 @A2 interface Shape { @A1 @A2 getter attribute int attr; @A1 setter attribute int attr; @A3 boolean op(); const long CONSTANT = 1; getter attribute DOMString strAttr; Shape create(); boolean compare(Shape s); Rectangle createRectangle(); void addLine(lines::Line line); void someDartType(File file); void someUnidentifiedType(UnidentifiableType t); }; }; module rectangles { @A3 interface Rectangle : @A3 shapes::Shape { void someTemplatedType(List<Shape> list); }; }; module lines { @A1 interface Line : shapes::Shape { }; }; """ parser = idlparser.IDLParser(idlparser.FREMONTCUT_SYNTAX) ast = parser.parse(content) idl_file = idlnode.IDLFile(ast) for module in idl_file.modules: module_name = module.id for interface in module.interfaces: db.AddInterface(interface) db.Save() self.assertTrue(self._InDatabase('Shape')) self.assertTrue(self._InDatabase('Rectangle')) self.assertTrue(self._InDatabase('Line')) self._database = database.Database(self._database_dir) self._generator = dartgenerator.DartGenerator(self._auxiliary_dir, '../templates', 'test')
def GenerateFromDatabase(common_database, dart2js_output_dir, dartium_output_dir, update_dom_metadata=False): current_dir = os.path.dirname(__file__) auxiliary_dir = os.path.join(current_dir, '..', 'src') template_dir = os.path.join(current_dir, '..', 'templates') generator = dartgenerator.DartGenerator() generator.LoadAuxiliary(auxiliary_dir) generator.FilterMembersWithUnidentifiedTypes(common_database) webkit_database = common_database.Clone() # Generate Dart interfaces for the WebKit DOM. generator.FilterInterfaces(database=webkit_database, or_annotations=['WebKit', 'Dart'], exclude_displaced=['WebKit'], exclude_suppressed=['WebKit', 'Dart']) generator.FixEventTargets(webkit_database) generator.AddMissingArguments(webkit_database) emitters = multiemitter.MultiEmitter() metadata = DartMetadata( os.path.join(current_dir, '..', 'dom.json'), os.path.join(current_dir, '..', 'docs', 'docs.json')) renamer = HtmlRenamer(webkit_database, metadata) type_registry = TypeRegistry(webkit_database, renamer) def RunGenerator(dart_libraries, dart_output_dir, template_loader, backend_factory): options = GeneratorOptions(template_loader, webkit_database, type_registry, renamer, metadata) dart_library_emitter = DartLibraryEmitter(emitters, dart_output_dir, dart_libraries) event_generator = HtmlEventGenerator(webkit_database, renamer, metadata, template_loader) def generate_interface(interface): backend = backend_factory(interface) interface_generator = HtmlDartInterfaceGenerator( options, dart_library_emitter, event_generator, interface, backend) interface_generator.Generate() generator.Generate(webkit_database, common_database, generate_interface) dart_library_emitter.EmitLibraries(auxiliary_dir) if dart2js_output_dir: template_paths = ['html/dart2js', 'html/impl', 'html/interface', ''] template_loader = TemplateLoader(template_dir, template_paths, { 'DARTIUM': False, 'DART2JS': True }) backend_options = GeneratorOptions(template_loader, webkit_database, type_registry, renamer, metadata) backend_factory = lambda interface:\ Dart2JSBackend(interface, backend_options) dart_output_dir = os.path.join(dart2js_output_dir, 'dart') dart_libraries = DartLibraries(HTML_LIBRARY_NAMES, template_loader, 'dart2js', dart2js_output_dir) RunGenerator(dart_libraries, dart_output_dir, template_loader, backend_factory) if dartium_output_dir: template_paths = ['html/dartium', 'html/impl', 'html/interface', ''] template_loader = TemplateLoader(template_dir, template_paths, { 'DARTIUM': True, 'DART2JS': False }) backend_options = GeneratorOptions(template_loader, webkit_database, type_registry, renamer, metadata) cpp_output_dir = os.path.join(dartium_output_dir, 'cpp') cpp_library_emitter = CPPLibraryEmitter(emitters, cpp_output_dir) backend_factory = lambda interface:\ DartiumBackend(interface, cpp_library_emitter, backend_options) dart_output_dir = os.path.join(dartium_output_dir, 'dart') dart_libraries = DartLibraries(HTML_LIBRARY_NAMES, template_loader, 'dartium', dartium_output_dir) RunGenerator(dart_libraries, dart_output_dir, template_loader, backend_factory) cpp_library_emitter.EmitDerivedSources( template_loader.Load('cpp_derived_sources.template'), dartium_output_dir) cpp_library_emitter.EmitResolver( template_loader.Load('cpp_resolver.template'), dartium_output_dir) cpp_library_emitter.EmitClassIdTable(webkit_database, dartium_output_dir, type_registry, renamer) emitters.Flush() if update_dom_metadata: metadata.Flush() monitored.FinishMonitoring(dart2js_output_dir)
def Generate(systems, database_dir, use_database_cache, dom_output_dir, html_output_dir): current_dir = os.path.dirname(__file__) auxiliary_dir = os.path.join(current_dir, '..', 'src') template_dir = os.path.join(current_dir, '..', 'templates') generator = dartgenerator.DartGenerator() generator.LoadAuxiliary(auxiliary_dir) common_database = database.Database(database_dir) if use_database_cache: common_database.LoadFromCache() else: common_database.Load() generator.FilterMembersWithUnidentifiedTypes(common_database) webkit_database = common_database.Clone() # Generate Dart interfaces for the WebKit DOM. generator.FilterInterfaces(database=webkit_database, or_annotations=['WebKit', 'Dart'], exclude_displaced=['WebKit'], exclude_suppressed=['WebKit', 'Dart']) generator.RenameTypes(webkit_database, _webkit_renames, True) generator.FixEventTargets(webkit_database) emitters = multiemitter.MultiEmitter() for system in systems: if system in ['htmlfrog', 'htmldartium']: output_dir = html_output_dir interface_system = HtmlInterfacesSystem( TemplateLoader(template_dir, ['html/interface', 'html', '']), webkit_database, emitters, output_dir) else: output_dir = dom_output_dir interface_system = InterfacesSystem( TemplateLoader(template_dir, ['dom/interface', 'dom', '']), webkit_database, emitters, output_dir) if system == 'dummy': implementation_system = dartgenerator.DummyImplementationSystem( TemplateLoader(template_dir, ['dom/dummy', 'dom', '']), webkit_database, emitters, output_dir) elif system == 'frog': implementation_system = FrogSystem( TemplateLoader(template_dir, ['dom/frog', 'dom', '']), webkit_database, emitters, output_dir) elif system == 'htmlfrog': implementation_system = HtmlFrogSystem( TemplateLoader(template_dir, ['html/frog', 'html/impl', 'html', ''], { 'DARTIUM': False, 'FROG': True }), webkit_database, emitters, output_dir) elif system == 'htmldartium': # Generate native wrappers. native_system = NativeImplementationSystem( TemplateLoader(template_dir, ['dom/native', 'html/dartium', 'html/impl', ''], { 'DARTIUM': True, 'FROG': False }), webkit_database, emitters, output_dir) generator.Generate(webkit_database, native_system, source_filter=['WebKit', 'Dart'], super_database=common_database, common_prefix='common', webkit_renames=_webkit_renames) dom_implementation_classes = native_system.DartImplementationFiles( ) implementation_system = HtmlDartiumSystem( TemplateLoader(template_dir, ['html/dartium', 'html/impl', 'html', ''], { 'DARTIUM': True, 'FROG': False }), webkit_database, emitters, auxiliary_dir, dom_implementation_classes, output_dir) else: raise Exception('Unsupported system %s' % system) # Makes interface files available for listing in the library for the # implementation system. implementation_system._interface_system = interface_system for system in [interface_system, implementation_system]: generator.Generate(webkit_database, system, source_filter=['WebKit', 'Dart'], super_database=common_database, common_prefix='common', webkit_renames=_webkit_renames) _logger.info('Flush...') emitters.Flush()
def GenerateFromDatabase(common_database, dart2js_output_dir, update_dom_metadata=False, logging_level=logging.WARNING, dart_js_interop=False, nnbd=False): print '\n ----- Accessing DOM using %s -----\n' % ( 'dart:js' if dart_js_interop else 'C++') start_time = time.time() current_dir = os.path.dirname(__file__) if nnbd: auxiliary_dir = os.path.join(current_dir, '..', 'nnbd_src') else: auxiliary_dir = os.path.join(current_dir, '..', 'src') template_dir = os.path.join(current_dir, '..', 'templates') _logger.setLevel(logging_level) generator = dartgenerator.DartGenerator(logging_level) generator.LoadAuxiliary(auxiliary_dir) generator.FilterMembersWithUnidentifiedTypes(common_database) webkit_database = common_database.Clone() # Generate Dart interfaces for the WebKit DOM. generator.FilterInterfaces( database=webkit_database, or_annotations=['WebKit', 'Dart'], exclude_displaced=['WebKit'], exclude_suppressed=['WebKit', 'Dart']) generator.FixEventTargets(webkit_database) generator.AddMissingArguments(webkit_database) generator.CleanupOperationArguments(webkit_database) emitters = multiemitter.MultiEmitter(logging_level) metadata = DartMetadata( os.path.join(current_dir, '..', 'dom.json'), os.path.join(current_dir, '..', 'docs', 'docs.json'), logging_level) renamer = HtmlRenamer(webkit_database, metadata) type_registry = TypeRegistry(webkit_database, renamer) print 'GenerateFromDatabase %s seconds' % round( (time.time() - start_time), 2) def RunGenerator(dart_libraries, dart_output_dir, template_loader, backend_factory, dart_js_interop): options = GeneratorOptions(template_loader, webkit_database, type_registry, renamer, metadata, dart_js_interop, nnbd) dart_library_emitter = DartLibraryEmitter(emitters, dart_output_dir, dart_libraries) event_generator = HtmlEventGenerator(webkit_database, renamer, metadata, template_loader) def generate_interface(interface, gl_constants=None): backend = backend_factory(interface) interface_generator = HtmlDartInterfaceGenerator( options, dart_library_emitter, event_generator, interface, backend) interface_generator.Generate() if len(backend._gl_constants) > 0 and not (gl_constants is None): gl_constants.extend(backend._gl_constants) generator.Generate(webkit_database, common_database, generate_interface) dart_library_emitter.EmitLibraries(auxiliary_dir, dart_js_interop) if dart2js_output_dir: template_paths = ['html/dart2js', 'html/impl', 'html/interface', ''] template_loader = TemplateLoader(template_dir, template_paths, { 'DARTIUM': False, 'DART2JS': True, 'JSINTEROP': False, 'NNBD': nnbd }) backend_options = GeneratorOptions(template_loader, webkit_database, type_registry, renamer, metadata, dart_js_interop, nnbd) backend_factory = lambda interface:\ Dart2JSBackend(interface, backend_options, logging_level) dart_output_dir = os.path.join(dart2js_output_dir, 'dart') dart_libraries = DartLibraries(HTML_LIBRARY_NAMES, template_loader, 'dart2js', dart2js_output_dir, dart_js_interop) for file in generator._auxiliary_files.values(): if file.endswith('darttemplate'): dart_libraries._libraries['html'].AddFile(file) print '\nGenerating dart2js:\n' start_time = time.time() RunGenerator(dart_libraries, dart_output_dir, template_loader, backend_factory, dart_js_interop) print 'Generated dart2js in %s seconds' % round( time.time() - start_time, 2) emitters.Flush() if update_dom_metadata: metadata.Flush() monitored.FinishMonitoring(dart2js_output_dir, _logger)
def GenerateFromDatabase(common_database, dart2js_output_dir, dartium_output_dir, blink_output_dir, update_dom_metadata=False, logging_level=logging.WARNING, dart_js_interop=False): print '\n ----- Accessing DOM using %s -----\n' % ('dart:js' if dart_js_interop else 'C++') start_time = time.time() current_dir = os.path.dirname(__file__) auxiliary_dir = os.path.join(current_dir, '..', 'src') template_dir = os.path.join(current_dir, '..', 'templates') _logger.setLevel(logging_level) generator = dartgenerator.DartGenerator(logging_level) generator.LoadAuxiliary(auxiliary_dir) generator.FilterMembersWithUnidentifiedTypes(common_database) webkit_database = common_database.Clone() # Generate Dart interfaces for the WebKit DOM. generator.FilterInterfaces(database = webkit_database, or_annotations = ['WebKit', 'Dart'], exclude_displaced = ['WebKit'], exclude_suppressed = ['WebKit', 'Dart']) generator.FixEventTargets(webkit_database) generator.AddMissingArguments(webkit_database) generator.CleanupOperationArguments(webkit_database) emitters = multiemitter.MultiEmitter(logging_level) metadata = DartMetadata( os.path.join(current_dir, '..', 'dom.json'), os.path.join(current_dir, '..', 'docs', 'docs.json'), logging_level) renamer = HtmlRenamer(webkit_database, metadata) type_registry = TypeRegistry(webkit_database, renamer) print 'GenerateFromDatabase %s seconds' % round((time.time() - start_time), 2) def RunGenerator(dart_libraries, dart_output_dir, template_loader, backend_factory, dart_js_interop): options = GeneratorOptions( template_loader, webkit_database, type_registry, renamer, metadata, dart_js_interop) dart_library_emitter = DartLibraryEmitter( emitters, dart_output_dir, dart_libraries) event_generator = HtmlEventGenerator(webkit_database, renamer, metadata, template_loader) def generate_interface(interface): backend = backend_factory(interface) interface_generator = HtmlDartInterfaceGenerator( options, dart_library_emitter, event_generator, interface, backend) interface_generator.Generate() generator.Generate(webkit_database, common_database, generate_interface) dart_library_emitter.EmitLibraries(auxiliary_dir, dart_js_interop) if dart2js_output_dir: template_paths = ['html/dart2js', 'html/impl', 'html/interface', ''] template_loader = TemplateLoader(template_dir, template_paths, {'DARTIUM': False, 'DART2JS': True, 'JSINTEROP': False}) backend_options = GeneratorOptions( template_loader, webkit_database, type_registry, renamer, metadata, dart_js_interop) backend_factory = lambda interface:\ Dart2JSBackend(interface, backend_options, logging_level) dart_output_dir = os.path.join(dart2js_output_dir, 'dart') dart_libraries = DartLibraries( HTML_LIBRARY_NAMES, template_loader, 'dart2js', dart2js_output_dir, dart_js_interop) print '\nGenerating dart2js:\n' start_time = time.time() RunGenerator(dart_libraries, dart_output_dir, template_loader, backend_factory, dart_js_interop) print 'Generated dart2js in %s seconds' % round(time.time() - start_time, 2) if dartium_output_dir: template_paths = ['html/dartium', 'html/impl', 'html/interface', ''] template_loader = TemplateLoader(template_dir, template_paths, {'DARTIUM': True, 'DART2JS': False, 'JSINTEROP': dart_js_interop}) backend_options = GeneratorOptions( template_loader, webkit_database, type_registry, renamer, metadata, dart_js_interop) cpp_output_dir = os.path.join(dartium_output_dir, 'cpp') cpp_library_emitter = CPPLibraryEmitter(emitters, cpp_output_dir) dart_output_dir = os.path.join(dartium_output_dir, 'dart') backend_factory = lambda interface:\ DartiumBackend(interface, cpp_library_emitter, backend_options, _logger) dart_libraries = DartLibraries( HTML_LIBRARY_NAMES, template_loader, 'dartium', dartium_output_dir, dart_js_interop) print '\nGenerating dartium:\n' start_time = time.time() RunGenerator(dart_libraries, dart_output_dir, template_loader, backend_factory, dart_js_interop) print 'Generated dartium in %s seconds' % round(time.time() - start_time, 2) cpp_library_emitter.EmitDerivedSources( template_loader.Load('cpp_derived_sources.template'), dartium_output_dir) cpp_library_emitter.EmitResolver( template_loader.Load('cpp_resolver.template'), dartium_output_dir) cpp_library_emitter.EmitClassIdTable( webkit_database, dartium_output_dir, type_registry, renamer) emitters.Flush() if blink_output_dir: print '\nGenerating _blink:\n' start_time = time.time() Generate_Blink(blink_output_dir, webkit_database, type_registry) print 'Generated _blink in %s seconds' % round(time.time() - start_time, 2) if update_dom_metadata: metadata.Flush() monitored.FinishMonitoring(dart2js_output_dir, _logger)
def GenerateDOM(systems, generate_html_systems, output_dir, use_database_cache): current_dir = os.path.dirname(__file__) generator = dartgenerator.DartGenerator( auxiliary_dir=os.path.join(current_dir, '..', 'src'), template_dir=os.path.join(current_dir, '..', 'templates'), base_package='') generator.LoadAuxiliary() common_database = database.Database( os.path.join(current_dir, '..', 'database')) if use_database_cache: common_database.LoadFromCache() else: common_database.Load() # Remove these types since they are mapped directly to dart. common_database.DeleteInterface('DOMStringMap') common_database.DeleteInterface('DOMStringList') generator.RenameTypes(common_database, { # W3C -> Dart renames 'AbstractView': 'Window', 'Function': 'EventListener', 'DOMStringMap': 'Map<String, String>', 'DOMStringList': 'List<String>', }, False) generator.FilterMembersWithUnidentifiedTypes(common_database) webkit_database = common_database.Clone() # Generate Dart interfaces for the WebKit DOM. generator.FilterInterfaces(database = webkit_database, or_annotations = ['WebKit', 'Dart'], exclude_displaced = ['WebKit'], exclude_suppressed = ['WebKit', 'Dart']) generator.RenameTypes(webkit_database, _webkit_renames, False) if generate_html_systems: html_renames = _MakeHtmlRenames(common_database) generator.RenameTypes(webkit_database, html_renames, True) html_renames_inverse = dict((v,k) for k, v in html_renames.iteritems()) else: html_renames_inverse = {} webkit_renames_inverse = dict((v,k) for k, v in _webkit_renames.iteritems()) generator.Generate(database = webkit_database, output_dir = output_dir, lib_dir = output_dir, module_source_preference = ['WebKit', 'Dart'], source_filter = ['WebKit', 'Dart'], super_database = common_database, common_prefix = 'common', super_map = webkit_renames_inverse, html_map = html_renames_inverse, systems = systems) generator.Flush() if 'frog' in systems: _logger.info('Copy dom_frog to frog/') subprocess.call(['cd ../generated ; ' '../../../tools/copy_dart.py ../frog dom_frog.dart'], shell=True); if 'htmlfrog' in systems: _logger.info('Copy html_frog to ../html/frog/') subprocess.call(['cd ../../html/generated ; ' '../../../tools/copy_dart.py ../frog html_frog.dart'], shell=True); if 'htmldartium' in systems: _logger.info('Copy html_dartium to ../html/dartium/') subprocess.call(['cd ../../html/generated ; ' '../../../tools/copy_dart.py ../dartium html_dartium.dart'], shell=True); # Copy dummy DOM where dartc build expects it. if 'dummy' in systems: _logger.info('Copy dom_dummy to dom.dart') subprocess.call(['cd ../generated ; ' '../../../tools/copy_dart.py dummy dom_dummy.dart ;' 'cp dummy/dom_dummy.dart ../dom.dart'], shell=True);
def Generate(database_dir, use_database_cache, dart2js_output_dir=None, dartium_output_dir=None): current_dir = os.path.dirname(__file__) auxiliary_dir = os.path.join(current_dir, '..', 'src') template_dir = os.path.join(current_dir, '..', 'templates') generator = dartgenerator.DartGenerator() generator.LoadAuxiliary(auxiliary_dir) common_database = database.Database(database_dir) if use_database_cache: common_database.LoadFromCache() else: common_database.Load() generator.FilterMembersWithUnidentifiedTypes(common_database) webkit_database = common_database.Clone() # Generate Dart interfaces for the WebKit DOM. generator.FilterInterfaces(database = webkit_database, or_annotations = ['WebKit', 'Dart'], exclude_displaced = ['WebKit'], exclude_suppressed = ['WebKit', 'Dart']) generator.RenameTypes(webkit_database, _webkit_renames, True) generator.FixEventTargets(webkit_database) generator.AddMissingArguments(webkit_database) emitters = multiemitter.MultiEmitter() renamer = HtmlRenamer(webkit_database) type_registry = TypeRegistry(webkit_database, renamer) def RunGenerator(dart_library_template, dart_output_dir, dart_library_path, template_loader, backend_factory): options = GeneratorOptions( template_loader, webkit_database, type_registry, renamer) dart_library_emitter = DartLibraryEmitter( emitters, dart_library_template, dart_output_dir) html_system = HtmlInterfacesSystem( options, dart_library_emitter, backend_factory) generator.Generate( webkit_database, html_system, common_database, _webkit_renames) dart_library_emitter.EmitLibrary(dart_library_path, auxiliary_dir) if dart2js_output_dir: template_paths = ['html/dart2js', 'html/impl', 'html/interface', ''] template_loader = TemplateLoader(template_dir, template_paths, {'DARTIUM': False, 'DART2JS': True}) backend_options = GeneratorOptions( template_loader, webkit_database, type_registry, renamer) backend_factory = lambda interface:\ Dart2JSBackend(interface, backend_options) dart_library_template = template_loader.Load('html_dart2js.darttemplate') dart_output_dir = os.path.join(dart2js_output_dir, 'dart') dart_library_path = os.path.join(dart2js_output_dir, 'html_dart2js.dart') RunGenerator(dart_library_template, dart_output_dir, dart_library_path, template_loader, backend_factory) if dartium_output_dir: template_paths = ['html/dartium', 'html/impl', 'html/interface', ''] template_loader = TemplateLoader(template_dir, template_paths, {'DARTIUM': True, 'DART2JS': False}) backend_options = GeneratorOptions( template_loader, webkit_database, type_registry, renamer) cpp_output_dir = os.path.join(dartium_output_dir, 'cpp') cpp_library_emitter = CPPLibraryEmitter(emitters, cpp_output_dir) backend_factory = lambda interface:\ DartiumBackend(interface, cpp_library_emitter, backend_options) dart_library_template = template_loader.Load('html_dartium.darttemplate') dart_output_dir = os.path.join(dartium_output_dir, 'dart') dart_library_path = os.path.join(dartium_output_dir, 'html_dartium.dart') RunGenerator(dart_library_template, dart_output_dir, dart_library_path, template_loader, backend_factory) cpp_library_emitter.EmitDerivedSources( template_loader.Load('cpp_derived_sources.template'), dartium_output_dir) cpp_library_emitter.EmitResolver( template_loader.Load('cpp_resolver.template'), dartium_output_dir) _logger.info('Flush...') emitters.Flush()
def main(): current_dir = os.path.dirname(__file__) logging.config.fileConfig(os.path.join(current_dir, 'logging.conf')) generator = dartgenerator.DartGenerator( auxiliary_dir=os.path.join(current_dir, '..', 'src'), snippet_dir=os.path.join(current_dir, '..', 'snippets'), base_package='') generator.LoadAuxiliary() common_database = database.Database( os.path.join(current_dir, '..', 'database')) common_database.Load() # Remove these types since they are mapped directly to dart. common_database.DeleteInterface('DOMStringMap') common_database.DeleteInterface('DOMStringList') generator.RenameTypes( common_database, { # W3C -> Dart renames 'AbstractView': 'Window', 'Function': 'EventListener', 'DOMStringMap': 'Map<String, String>', 'DOMStringList': 'List<String>', }) generator.FilterMembersWithUnidentifiedTypes(common_database) generator.ConvertToDartTypes(common_database) webkit_database = common_database.Clone() output_dir = os.path.join(current_dir, '..', 'generated') lib_dir = os.path.join(current_dir, '..') if os.path.exists(output_dir): _logger.info('Cleaning output directory %s' % output_dir) shutil.rmtree(output_dir) # Generate Dart interfaces for the WebKit DOM. webkit_output_dir = output_dir generator.FilterInterfaces(database=webkit_database, or_annotations=['WebKit', 'Dart'], exclude_displaced=['WebKit'], exclude_suppressed=['WebKit', 'Dart']) generator.RenameTypes(webkit_database, _webkit_renames) generator.Generate(database=webkit_database, output_dir=webkit_output_dir, lib_dir=lib_dir, module_source_preference=['WebKit', 'Dart'], source_filter=['WebKit', 'Dart'], super_database=common_database, common_prefix='common', super_map=_webkit_renames_inverse) generator.Flush() # Install default DOM library. default = os.path.join(lib_dir, DOM_DEFAULT_LIBRARY) target = os.path.join(lib_dir, DOM_LIBRARY) shutil.copyfile(default, target) # Remove monkey_dom.dart os.rename('../monkey_dom.dart', '../monkey_dom.dart.broken')