def _handle_webidl_collection(self, webidls): if not webidls.all_stems(): return bindings_dir = mozpath.join(self.environment.topobjdir, "dom", "bindings") all_inputs = set(webidls.all_static_sources()) for s in webidls.all_non_static_basenames(): all_inputs.add(mozpath.join(bindings_dir, s)) generated_events_stems = webidls.generated_events_stems() exported_stems = webidls.all_regular_stems() # The WebIDL manager reads configuration from a JSON file. So, we # need to write this file early. o = dict( webidls=sorted(all_inputs), generated_events_stems=sorted(generated_events_stems), exported_stems=sorted(exported_stems), example_interfaces=sorted(webidls.example_interfaces), ) file_lists = mozpath.join(bindings_dir, "file-lists.json") with self._write_file(file_lists) as fh: json.dump(o, fh, sort_keys=True, indent=2) manager = mozwebidlcodegen.create_build_system_manager( self.environment.topsrcdir, self.environment.topobjdir, mozpath.join(self.environment.topobjdir, "dist") ) # Bindings are compiled in unified mode to speed up compilation and # to reduce linker memory size. Note that test bindings are separated # from regular ones so tests bindings aren't shipped. unified_source_mapping = list( group_unified_files( webidls.all_regular_cpp_basenames(), unified_prefix="UnifiedBindings", unified_suffix="cpp", files_per_unified_file=32, ) ) self._write_unified_files(unified_source_mapping, bindings_dir, poison_windows_h=True) self._handle_webidl_build( bindings_dir, unified_source_mapping, webidls, manager.expected_build_output_files(), manager.GLOBAL_DEFINE_FILES, )
def _handle_webidl_collection(self, webidls): if not webidls.all_stems(): return bindings_dir = mozpath.join(self.environment.topobjdir, 'dom', 'bindings') all_inputs = set(webidls.all_static_sources()) for s in webidls.all_non_static_basenames(): all_inputs.add(mozpath.join(bindings_dir, s)) generated_events_stems = webidls.generated_events_stems() exported_stems = webidls.all_regular_stems() # The WebIDL manager reads configuration from a JSON file. So, we # need to write this file early. o = dict( webidls=sorted(all_inputs), generated_events_stems=sorted(generated_events_stems), exported_stems=sorted(exported_stems), example_interfaces=sorted(webidls.example_interfaces), ) file_lists = mozpath.join(bindings_dir, 'file-lists.json') with self._write_file(file_lists) as fh: json.dump(o, fh, sort_keys=True, indent=2) import mozwebidlcodegen manager = mozwebidlcodegen.create_build_system_manager( self.environment.topsrcdir, self.environment.topobjdir, mozpath.join(self.environment.topobjdir, 'dist')) # Bindings are compiled in unified mode to speed up compilation and # to reduce linker memory size. Note that test bindings are separated # from regular ones so tests bindings aren't shipped. unified_source_mapping = list( group_unified_files(webidls.all_regular_cpp_basenames(), unified_prefix='UnifiedBindings', unified_suffix='cpp', files_per_unified_file=32)) self._write_unified_files(unified_source_mapping, bindings_dir, poison_windows_h=True) self._handle_webidl_build(bindings_dir, unified_source_mapping, webidls, manager.expected_build_output_files(), manager.GLOBAL_DEFINE_FILES)
def _handle_webidl_collection(self, webidls): bindings_dir = mozpath.join(self.environment.topobjdir, "dom", "bindings") all_inputs = set(webidls.all_static_sources()) for s in webidls.all_non_static_basenames(): all_inputs.add(mozpath.join(bindings_dir, s)) generated_events_stems = webidls.generated_events_stems() exported_stems = webidls.all_regular_stems() # The WebIDL manager reads configuration from a JSON file. So, we # need to write this file early. o = dict( webidls=sorted(all_inputs), generated_events_stems=sorted(generated_events_stems), exported_stems=sorted(exported_stems), example_interfaces=sorted(webidls.example_interfaces), ) file_lists = mozpath.join(bindings_dir, "file-lists.json") with self._write_file(file_lists) as fh: json.dump(o, fh, sort_keys=True, indent=2) import mozwebidlcodegen manager = mozwebidlcodegen.create_build_system_manager( self.environment.topsrcdir, self.environment.topobjdir, mozpath.join(self.environment.topobjdir, "dist"), use_builtin_readable_stream=False, # Shouldn't matter if true or false here. ) self._handle_generated_sources(manager.expected_build_output_files()) self._write_unified_files( webidls.unified_source_mapping, bindings_dir, poison_windows_h=True ) self._handle_webidl_build( bindings_dir, webidls.unified_source_mapping, webidls, manager.expected_build_output_files(), manager.GLOBAL_DEFINE_FILES, )
def _handle_webidl_collection(self, webidls): if not webidls.all_stems(): return bindings_dir = mozpath.join(self.environment.topobjdir, 'dom', 'bindings') all_inputs = set(webidls.all_static_sources()) for s in webidls.all_non_static_basenames(): all_inputs.add(mozpath.join(bindings_dir, s)) generated_events_stems = webidls.generated_events_stems() exported_stems = webidls.all_regular_stems() # The WebIDL manager reads configuration from a JSON file. So, we # need to write this file early. o = dict( webidls=sorted(all_inputs), generated_events_stems=sorted(generated_events_stems), exported_stems=sorted(exported_stems), example_interfaces=sorted(webidls.example_interfaces), ) file_lists = mozpath.join(bindings_dir, 'file-lists.json') with self._write_file(file_lists) as fh: json.dump(o, fh, sort_keys=True, indent=2) manager = mozwebidlcodegen.create_build_system_manager( self.environment.topsrcdir, self.environment.topobjdir, mozpath.join(self.environment.topobjdir, 'dist') ) # The manager is the source of truth on what files are generated. # Consult it for install manifests. include_dir = mozpath.join(self.environment.topobjdir, 'dist', 'include') for f in manager.expected_build_output_files(): if f.startswith(include_dir): self._install_manifests['dist_include'].add_optional_exists( mozpath.relpath(f, include_dir)) # We pass WebIDL info to make via a completely generated make file. mk = Makefile() mk.add_statement('nonstatic_webidl_files := %s' % ' '.join( sorted(webidls.all_non_static_basenames()))) mk.add_statement('globalgen_sources := %s' % ' '.join( sorted(manager.GLOBAL_DEFINE_FILES))) mk.add_statement('test_sources := %s' % ' '.join( sorted('%sBinding.cpp' % s for s in webidls.all_test_stems()))) # Add rules to preprocess bindings. # This should ideally be using PP_TARGETS. However, since the input # filenames match the output filenames, the existing PP_TARGETS rules # result in circular dependencies and other make weirdness. One # solution is to rename the input or output files repsectively. See # bug 928195 comment 129. for source in sorted(webidls.all_preprocessed_sources()): basename = os.path.basename(source) rule = mk.create_rule([basename]) rule.add_dependencies([source, '$(GLOBAL_DEPS)']) rule.add_commands([ # Remove the file before writing so bindings that go from # static to preprocessed don't end up writing to a symlink, # which would modify content in the source directory. '$(RM) $@', '$(call py_action,preprocessor,$(DEFINES) $(ACDEFINES) ' '$(XULPPFLAGS) $< -o $@)' ]) # Bindings are compiled in unified mode to speed up compilation and # to reduce linker memory size. Note that test bindings are separated # from regular ones so tests bindings aren't shipped. self._add_unified_build_rules(mk, webidls.all_regular_cpp_basenames(), bindings_dir, unified_prefix='UnifiedBindings', unified_files_makefile_variable='unified_binding_cpp_files', poison_windows_h=True) webidls_mk = mozpath.join(bindings_dir, 'webidlsrcs.mk') with self._write_file(webidls_mk) as fh: mk.dump(fh, removal_guard=False)
def _handle_webidl_collection(self, webidls): if not webidls.all_stems(): return bindings_dir = mozpath.join(self.environment.topobjdir, 'dom', 'bindings') all_inputs = set(webidls.all_static_sources()) for s in webidls.all_non_static_basenames(): all_inputs.add(mozpath.join(bindings_dir, s)) generated_events_stems = webidls.generated_events_stems() exported_stems = webidls.all_regular_stems() # The WebIDL manager reads configuration from a JSON file. So, we # need to write this file early. o = dict( webidls=sorted(all_inputs), generated_events_stems=sorted(generated_events_stems), exported_stems=sorted(exported_stems), example_interfaces=sorted(webidls.example_interfaces), ) file_lists = mozpath.join(bindings_dir, 'file-lists.json') with self._write_file(file_lists) as fh: json.dump(o, fh, sort_keys=True, indent=2) manager = mozwebidlcodegen.create_build_system_manager( self.environment.topsrcdir, self.environment.topobjdir, mozpath.join(self.environment.topobjdir, 'dist') ) # The manager is the source of truth on what files are generated. # Consult it for install manifests. include_dir = mozpath.join(self.environment.topobjdir, 'dist', 'include') for f in manager.expected_build_output_files(): if f.startswith(include_dir): self._install_manifests['dist_include'].add_optional_exists( mozpath.relpath(f, include_dir)) # We pass WebIDL info to make via a completely generated make file. mk = Makefile() mk.add_statement('nonstatic_webidl_files := %s' % ' '.join( sorted(webidls.all_non_static_basenames()))) mk.add_statement('globalgen_sources := %s' % ' '.join( sorted(manager.GLOBAL_DEFINE_FILES))) mk.add_statement('test_sources := %s' % ' '.join( sorted('%sBinding.cpp' % s for s in webidls.all_test_stems()))) # Add rules to preprocess bindings. # This should ideally be using PP_TARGETS. However, since the input # filenames match the output filenames, the existing PP_TARGETS rules # result in circular dependencies and other make weirdness. One # solution is to rename the input or output files repsectively. See # bug 928195 comment 129. for source in sorted(webidls.all_preprocessed_sources()): basename = os.path.basename(source) rule = mk.create_rule([basename]) rule.add_dependencies([source, '$(GLOBAL_DEPS)']) rule.add_commands([ # Remove the file before writing so bindings that go from # static to preprocessed don't end up writing to a symlink, # which would modify content in the source directory. '$(RM) $@', '$(call py_action,preprocessor,$(DEFINES) $(ACDEFINES) ' '$(XULPPFLAGS) $< -o $@)' ]) # Bindings are compiled in unified mode to speed up compilation and # to reduce linker memory size. Note that test bindings are separated # from regular ones so tests bindings aren't shipped. self._add_unified_build_rules(mk, webidls.all_regular_cpp_basenames(), bindings_dir, unified_prefix='UnifiedBindings', unified_files_makefile_variable='unified_binding_cpp_files', poison_windows_h=True) webidls_mk = mozpath.join(bindings_dir, 'webidlsrcs.mk') with self._write_file(webidls_mk) as fh: mk.dump(fh, removal_guard=False)
def main(argv): """Perform WebIDL code generation required by the build system.""" manager = create_build_system_manager() manager.generate_build_files()