Backed out changeset 88a77375f4df (bug 924187) for probably breaking PGO builds CLOSED TREE

This commit is contained in:
Wes Kocher 2015-04-28 15:21:07 -07:00
parent 14ff8eee17
commit 1422146e9b
12 changed files with 35 additions and 64 deletions

View File

@ -43,16 +43,6 @@ endif
$(dist_include_dir) $(@D) $(idl_deps_dir) $(libxul_sdk_includes) \
$(basename $(notdir $@)) $($(basename $(notdir $@))_deps)
# Chrome manifests may be written from several Makefiles at various times during
# the build. The 'buildlist' action adds to the file if it already exists, but
# if it does exist, make considers it to be up-to-date (as we have no inputs to
# depend on). We use FORCE to ensure that we always add the interface manifest,
# whether or not the chrome manifest already exists.
%/chrome.manifest: FORCE
$(call py_action,buildlist,$@ 'manifest components/interfaces.manifest')
chrome_manifests := @chrome_manifests@
xpidl_modules := @xpidl_modules@
xpt_files := @xpt_files@
@ -62,7 +52,7 @@ depends_files := $(foreach root,$(xpidl_modules),$(idl_deps_dir)/$(root).pp)
GARBAGE += $(xpt_files) $(depends_files)
xpidl:: $(xpt_files) $(chrome_manifests)
xpidl:: $(xpt_files)
$(xpt_files): $(process_py) $(call mkdir_deps,$(idl_deps_dir) $(dist_include_dir))

View File

@ -1153,6 +1153,21 @@ INSTALL_TARGETS += AUTOCFG_JS_EXPORTS
endif
endif
################################################################################
# Install a linked .xpt into the appropriate place.
# This should ideally be performed by the non-recursive idl make file. Some day.
ifdef XPT_NAME #{
ifndef NO_DIST_INSTALL
ifndef NO_INTERFACES_MANIFEST
export:: $(call mkdir_deps,$(FINAL_TARGET)/components)
$(call py_action,buildlist,$(FINAL_TARGET)/components/interfaces.manifest 'interfaces $(XPT_NAME)')
$(call py_action,buildlist,$(FINAL_TARGET)/chrome.manifest 'manifest components/interfaces.manifest')
endif
endif
endif #} XPT_NAME
################################################################################
# Copy each element of EXTRA_COMPONENTS to $(FINAL_TARGET)/components
ifdef EXTRA_COMPONENTS

View File

@ -0,0 +1,7 @@
# vim: noexpandtab ts=8 sw=8
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
NO_INTERFACES_MANIFEST = 1

View File

@ -10,9 +10,6 @@ XPIDL_SOURCES += [
XPIDL_MODULE = 'test_necko'
# Don't add our test-only .xpt files to the normal manifests
XPIDL_NO_MANIFEST = True
XPCSHELL_TESTS_MANIFESTS += ['test/xpcshell.ini']
EXTRA_COMPONENTS += [

View File

@ -45,39 +45,29 @@ class XPIDLManager(object):
self.idls = {}
self.modules = {}
self.interface_manifests = {}
self.chrome_manifests = set()
def register_idl(self, idl, allow_existing=False):
def register_idl(self, source, module, install_target, allow_existing=False):
"""Registers an IDL file with this instance.
The IDL file will be built, installed, etc.
"""
basename = mozpath.basename(idl.source_path)
basename = mozpath.basename(source)
root = mozpath.splitext(basename)[0]
xpt = '%s.xpt' % idl.module
manifest = mozpath.join(idl.install_target, 'components', 'interfaces.manifest')
chrome_manifest = mozpath.join(idl.install_target, 'chrome.manifest')
entry = {
'source': idl.source_path,
'module': idl.module,
'source': source,
'module': module,
'basename': basename,
'root': root,
'manifest': manifest,
}
if not allow_existing and entry['basename'] in self.idls:
raise Exception('IDL already registered: %s' % entry['basename'])
self.idls[entry['basename']] = entry
t = self.modules.setdefault(entry['module'], (idl.install_target, set()))
t = self.modules.setdefault(entry['module'], (install_target, set()))
t[1].add(entry['root'])
if idl.add_to_manifest:
self.interface_manifests.setdefault(manifest, set()).add(xpt)
self.chrome_manifests.add(chrome_manifest)
class WebIDLCollection(object):
"""Collects WebIDL info referenced during the build."""
@ -200,7 +190,8 @@ class CommonBackend(BuildBackend):
topsrcdir=obj.topsrcdir)
elif isinstance(obj, XPIDLFile):
self._idl_manager.register_idl(obj)
self._idl_manager.register_idl(obj.source_path, obj.module,
obj.install_target)
elif isinstance(obj, ConfigFileSubstitution):
# Do not handle ConfigFileSubstitution for Makefiles. Leave that

View File

@ -99,7 +99,6 @@ MOZBUILD_VARIABLES = [
'MAKE_FRAMEWORK',
'MODULE',
'NO_DIST_INSTALL',
'NO_INTERFACES_MANIFEST',
'NO_JS_MANIFEST',
'OS_LIBS',
'PARALLEL_DIRS',
@ -1068,22 +1067,6 @@ INSTALL_TARGETS += %(prefix)s
rules = StringIO()
mk.dump(rules, removal_guard=False)
# Write out manifests defining interfaces
dist_dir = mozpath.join(self.environment.topobjdir, 'dist')
for manifest, entries in manager.interface_manifests.items():
path = mozpath.join(self.environment.topobjdir, manifest)
with self._write_file(path) as fh:
for xpt in sorted(entries):
fh.write('interfaces %s\n' % xpt)
if install_target.startswith('dist/'):
path = mozpath.relpath(path, dist_dir)
prefix, subpath = path.split('/', 1)
key = 'dist_%s' % prefix
self._install_manifests[key].add_optional_exists(subpath)
chrome_manifests = [mozpath.join('$(DEPTH)', m) for m in sorted(manager.chrome_manifests)]
# Create dependency for output header so we force regeneration if the
# header was deleted. This ideally should not be necessary. However,
# some processes (such as PGO at the time this was implemented) wipe
@ -1098,7 +1081,6 @@ INSTALL_TARGETS += %(prefix)s
obj.topobjdir = self.environment.topobjdir
obj.config = self.environment
self._create_makefile(obj, extra=dict(
chrome_manifests = ' '.join(chrome_manifests),
xpidl_rules=rules.getvalue(),
xpidl_modules=' '.join(xpt_modules),
xpt_files=' '.join(sorted(xpt_files)),

View File

@ -1122,14 +1122,6 @@ VARIABLES = {
as ``MODULE``.
""", None),
'XPIDL_NO_MANIFEST': (bool, bool,
"""Indicate that the XPIDL module should not be added to a manifest.
This flag exists primarily to prevent test-only XPIDL modules from being
added to the application's chrome manifest. Most XPIDL modules should
not use this flag.
""", None),
'IPDL_SOURCES': (StrictOrderingOnAppendList, list,
"""IPDL source files.

View File

@ -160,19 +160,17 @@ class XPIDLFile(ContextDerived):
"""Describes an XPIDL file to be compiled."""
__slots__ = (
'add_to_manifest',
'basename',
'install_target',
'source_path',
)
def __init__(self, context, source, module, add_to_manifest):
def __init__(self, context, source, module):
ContextDerived.__init__(self, context)
self.source_path = source
self.basename = mozpath.basename(source)
self.module = module
self.add_to_manifest = add_to_manifest
self.install_target = context['FINAL_TARGET']

View File

@ -799,7 +799,7 @@ class TreeMetadataEmitter(LoggingMixin):
for idl in context['XPIDL_SOURCES']:
yield XPIDLFile(context, mozpath.join(context.srcdir, idl),
xpidl_module, add_to_manifest=not context['XPIDL_NO_MANIFEST'])
xpidl_module)
def _process_generated_files(self, context):
generated_files = context.get('GENERATED_FILES')

View File

@ -497,7 +497,6 @@ class TestRecursiveMakeBackend(BackendTester):
m = InstallManifest(path=os.path.join(install_dir, 'dist_bin'))
self.assertIn('components/my_module.xpt', m)
self.assertIn('components/interfaces.manifest', m)
m = InstallManifest(path=mozpath.join(install_dir, 'dist_include'))
self.assertIn('foo.h', m)

View File

@ -5,6 +5,9 @@
# Make sure we have symbols in case we need to debug these.
MOZ_DEBUG_SYMBOLS = 1
# Don't add our test-only .xpt files to the normal manifests
NO_INTERFACES_MANIFEST = 1
include $(topsrcdir)/config/rules.mk
ifneq (,$(SIMPLE_PROGRAMS))

View File

@ -101,9 +101,6 @@ XPIDL_SOURCES += [
'NotXPCOMTest.idl',
]
# Don't add our test-only .xpt files to the normal manifests
XPIDL_NO_MANIFEST = True
LOCAL_INCLUDES += [
'../ds',
]