def consume_finished(self): if len(self._idl_manager.idls): self._handle_idl_manager(self._idl_manager) self._handle_webidl_collection(self._webidls) sorted_ipdl_sources = list(sorted(self._ipdl_sources)) def files_from(ipdl): base = mozpath.basename(ipdl) root, ext = mozpath.splitext(base) # Both .ipdl and .ipdlh become .cpp files files = ["%s.cpp" % root] if ext == ".ipdl": # .ipdl also becomes Child/Parent.cpp files files.extend(["%sChild.cpp" % root, "%sParent.cpp" % root]) return files ipdl_dir = mozpath.join(self.environment.topobjdir, "ipc", "ipdl") ipdl_cppsrcs = list(itertools.chain(*[files_from(p) for p in sorted_ipdl_sources])) unified_source_mapping = list( group_unified_files( ipdl_cppsrcs, unified_prefix="UnifiedProtocols", unified_suffix="cpp", files_per_unified_file=16 ) ) self._write_unified_files(unified_source_mapping, ipdl_dir, poison_windows_h=False) self._handle_ipdl_sources(ipdl_dir, sorted_ipdl_sources, unified_source_mapping) for config in self._configs: self.backend_input_files.add(config.source) # Write out a machine-readable file describing every test. topobjdir = self.environment.topobjdir with self._write_file(mozpath.join(topobjdir, "all-tests.json")) as fh: json.dump([self._test_manager.tests_by_path, self._test_manager.manifest_default_support_files], fh) path = mozpath.join(self.environment.topobjdir, "test-installs.json") with self._write_file(path) as fh: json.dump( { k: v for k, v in self._test_manager.installs_by_path.items() if k in self._test_manager.deferred_installs }, fh, sort_keys=True, indent=4, ) # Write out a machine-readable file describing binaries. with self._write_file(mozpath.join(topobjdir, "binaries.json")) as fh: d = { "shared_libraries": [s.to_dict() for s in self._binaries.shared_libraries], "programs": [p.to_dict() for p in self._binaries.programs], } json.dump(d, fh, sort_keys=True, indent=4)
def test_unsorted_files(self): unsorted_files = ['a%d.cpp' % i for i in range(11)] sorted_files = sorted(unsorted_files) mapping = list(group_unified_files(unsorted_files, 'Unified', 'cpp', 5)) self.assertEqual(mapping[0][1], sorted_files[0:5]) self.assertEqual(mapping[1][1], sorted_files[5:10]) self.assertEqual(mapping[2][1], sorted_files[10:])
def consume_finished(self): if len(self._idl_manager.idls): self._handle_idl_manager(self._idl_manager) self._handle_webidl_collection(self._webidls) sorted_ipdl_sources = list(sorted(self._ipdl_sources)) def files_from(ipdl): base = mozpath.basename(ipdl) root, ext = mozpath.splitext(base) # Both .ipdl and .ipdlh become .cpp files files = ['%s.cpp' % root] if ext == '.ipdl': # .ipdl also becomes Child/Parent.cpp files files.extend(['%sChild.cpp' % root, '%sParent.cpp' % root]) return files ipdl_dir = mozpath.join(self.environment.topobjdir, 'ipc', 'ipdl') ipdl_cppsrcs = list(itertools.chain(*[files_from(p) for p in sorted_ipdl_sources])) unified_source_mapping = list(group_unified_files(ipdl_cppsrcs, unified_prefix='UnifiedProtocols', unified_suffix='cpp', files_per_unified_file=16)) self._write_unified_files(unified_source_mapping, ipdl_dir, poison_windows_h=False) self._handle_ipdl_sources(ipdl_dir, sorted_ipdl_sources, unified_source_mapping) for config in self._configs: self.backend_input_files.add(config.source) # Write out a machine-readable file describing every test. topobjdir = self.environment.topobjdir with self._write_file(mozpath.join(topobjdir, 'all-tests.pkl'), mode='rb') as fh: pickle.dump(dict(self._test_manager.tests_by_path), fh, protocol=2) with self._write_file(mozpath.join(topobjdir, 'test-defaults.pkl'), mode='rb') as fh: pickle.dump(self._test_manager.manifest_defaults, fh, protocol=2) path = mozpath.join(self.environment.topobjdir, 'test-installs.pkl') with self._write_file(path, mode='rb') as fh: pickle.dump({k: v for k, v in self._test_manager.installs_by_path.items() if k in self._test_manager.deferred_installs}, fh, protocol=2) # Write out a machine-readable file describing binaries. with self._write_file(mozpath.join(topobjdir, 'binaries.json')) as fh: d = { 'shared_libraries': [s.to_dict() for s in self._binaries.shared_libraries], 'programs': [p.to_dict() for p in self._binaries.programs], } json.dump(d, fh, sort_keys=True, indent=4)
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 test_multiple_files(self): mapping = list(group_unified_files(self.FILES, 'Unified', 'cpp', 5)) def check_mapping(index, expected_num_source_files): (unified_file, source_files) = mapping[index] self.assertEqual(unified_file, 'Unified%d.cpp' % index) self.assertEqual(len(source_files), expected_num_source_files) all_files = list(itertools.chain(*[files for (_, files) in mapping])) self.assertEqual(len(all_files), len(self.FILES)) self.assertEqual(set(all_files), set(self.FILES)) expected_amounts = [5, 5, 5, 5, 5, 1] for i, amount in enumerate(expected_amounts): check_mapping(i, amount)
def test_multiple_files(self): mapping = list(group_unified_files(self.FILES, "Unified", "cpp", 5)) def check_mapping(index, expected_num_source_files): (unified_file, source_files) = mapping[index] self.assertEqual(unified_file, "Unified%d.cpp" % index) self.assertEqual(len(source_files), expected_num_source_files) all_files = list(itertools.chain(*[files for (_, files) in mapping])) self.assertEqual(len(all_files), len(self.FILES)) self.assertEqual(set(all_files), set(self.FILES)) expected_amounts = [5, 5, 5, 5, 5, 1] for i, amount in enumerate(expected_amounts): check_mapping(i, amount)
def consume_finished(self): if len(self._idl_manager.idls): self._handle_idl_manager(self._idl_manager) self._handle_webidl_collection(self._webidls) sorted_ipdl_sources = list(sorted(self._ipdl_sources)) def files_from(ipdl): base = mozpath.basename(ipdl) root, ext = mozpath.splitext(base) # Both .ipdl and .ipdlh become .cpp files files = ['%s.cpp' % root] if ext == '.ipdl': # .ipdl also becomes Child/Parent.cpp files files.extend(['%sChild.cpp' % root, '%sParent.cpp' % root]) return files ipdl_dir = mozpath.join(self.environment.topobjdir, 'ipc', 'ipdl') ipdl_cppsrcs = list(itertools.chain(*[files_from(p) for p in sorted_ipdl_sources])) unified_source_mapping = list(group_unified_files(ipdl_cppsrcs, unified_prefix='UnifiedProtocols', unified_suffix='cpp', files_per_unified_file=16)) self._write_unified_files(unified_source_mapping, ipdl_dir, poison_windows_h=False) self._handle_ipdl_sources(ipdl_dir, sorted_ipdl_sources, unified_source_mapping) for config in self._configs: self.backend_input_files.add(config.source) # Write out a machine-readable file describing every test. topobjdir = self.environment.topobjdir with self._write_file(mozpath.join(topobjdir, 'all-tests.json')) as fh: json.dump(self._test_manager.tests_by_path, fh) # Write out a machine-readable file describing binaries. with self._write_file(mozpath.join(topobjdir, 'binaries.json')) as fh: d = { 'shared_libraries': [s.to_dict() for s in self._binaries.shared_libraries], 'programs': [p.to_dict() for p in self._binaries.programs], } json.dump(d, fh, sort_keys=True, indent=4)
def consume_finished(self): if len(self._idl_manager.idls): self._handle_idl_manager(self._idl_manager) self._handle_webidl_collection(self._webidls) sorted_ipdl_sources = list(sorted(self._ipdl_sources)) def files_from(ipdl): base = mozpath.basename(ipdl) root, ext = mozpath.splitext(base) # Both .ipdl and .ipdlh become .cpp files files = ['%s.cpp' % root] if ext == '.ipdl': # .ipdl also becomes Child/Parent.cpp files files.extend(['%sChild.cpp' % root, '%sParent.cpp' % root]) return files ipdl_dir = mozpath.join(self.environment.topobjdir, 'ipc', 'ipdl') ipdl_cppsrcs = list( itertools.chain(*[files_from(p) for p in sorted_ipdl_sources])) unified_source_mapping = list( group_unified_files(ipdl_cppsrcs, unified_prefix='UnifiedProtocols', unified_suffix='cpp', files_per_unified_file=16)) self._write_unified_files(unified_source_mapping, ipdl_dir, poison_windows_h=False) self._handle_ipdl_sources(ipdl_dir, sorted_ipdl_sources, unified_source_mapping) for config in self._configs: self.backend_input_files.add(config.source) # Write out a machine-readable file describing every test. path = mozpath.join(self.environment.topobjdir, 'all-tests.json') with self._write_file(path) as fh: s = json.dumps(self._test_manager.tests_by_path) fh.write(s)
def consume_finished(self): if len(self._idl_manager.idls): self._handle_idl_manager(self._idl_manager) self._handle_webidl_collection(self._webidls) sorted_ipdl_sources = list(sorted(self._ipdl_sources)) def files_from(ipdl): base = mozpath.basename(ipdl) root, ext = mozpath.splitext(base) # Both .ipdl and .ipdlh become .cpp files files = ["%s.cpp" % root] if ext == ".ipdl": # .ipdl also becomes Child/Parent.cpp files files.extend(["%sChild.cpp" % root, "%sParent.cpp" % root]) return files ipdl_dir = mozpath.join(self.environment.topobjdir, "ipc", "ipdl") ipdl_cppsrcs = list(itertools.chain(*[files_from(p) for p in sorted_ipdl_sources])) unified_source_mapping = list( group_unified_files( ipdl_cppsrcs, unified_prefix="UnifiedProtocols", unified_suffix="cpp", files_per_unified_file=16 ) ) self._write_unified_files(unified_source_mapping, ipdl_dir, poison_windows_h=False) self._handle_ipdl_sources(ipdl_dir, sorted_ipdl_sources, unified_source_mapping) for config in self._configs: self.backend_input_files.add(config.source) # Write out a machine-readable file describing every test. path = mozpath.join(self.environment.topobjdir, "all-tests.json") with self._write_file(path) as fh: s = json.dumps(self._test_manager.tests_by_path) fh.write(s)
def consume_finished(self): if len(self._idl_manager.idls): self._handle_idl_manager(self._idl_manager) self._handle_generated_sources( mozpath.join(self.environment.topobjdir, 'dist/include/%s.h' % idl['root']) for idl in self._idl_manager.idls.values()) self._handle_webidl_collection(self._webidls) sorted_ipdl_sources = list(sorted(self._ipdls.all_sources())) sorted_nonstatic_ipdl_sources = list( sorted(self._ipdls.all_preprocessed_sources())) sorted_static_ipdl_sources = list( sorted(self._ipdls.all_regular_sources())) def files_from(ipdl): base = mozpath.basename(ipdl) root, ext = mozpath.splitext(base) # Both .ipdl and .ipdlh become .cpp files files = ['%s.cpp' % root] if ext == '.ipdl': # .ipdl also becomes Child/Parent.cpp files files.extend(['%sChild.cpp' % root, '%sParent.cpp' % root]) return files ipdl_dir = mozpath.join(self.environment.topobjdir, 'ipc', 'ipdl') ipdl_cppsrcs = list( itertools.chain(*[files_from(p) for p in sorted_ipdl_sources])) self._handle_generated_sources( mozpath.join(ipdl_dir, f) for f in ipdl_cppsrcs) unified_source_mapping = list( group_unified_files(ipdl_cppsrcs, unified_prefix='UnifiedProtocols', unified_suffix='cpp', files_per_unified_file=16)) self._write_unified_files(unified_source_mapping, ipdl_dir, poison_windows_h=False) self._handle_ipdl_sources(ipdl_dir, sorted_ipdl_sources, sorted_nonstatic_ipdl_sources, sorted_static_ipdl_sources, unified_source_mapping) for config in self._configs: self.backend_input_files.add(config.source) # Write out a machine-readable file describing binaries. topobjdir = self.environment.topobjdir with self._write_file(mozpath.join(topobjdir, 'binaries.json')) as fh: d = { 'shared_libraries': [s.to_dict() for s in self._binaries.shared_libraries], 'programs': [p.to_dict() for p in self._binaries.programs], } json.dump(d, fh, sort_keys=True, indent=4) # Write out a file listing generated sources. with self._write_file(mozpath.join(topobjdir, 'generated-sources.json')) as fh: d = { 'sources': sorted(self._generated_sources), } json.dump(d, fh, sort_keys=True, indent=4)