mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1234439 - Use new install manifests feature for chrome manifests in the FasterMake backend. r=gps
Bug 1191230 added override lines with # characters to chrome manifests for Windows. So far, chrome manifests were handled with buildlist.py like in the RecursiveMake backend, fed with Make variables. Without proper quoting, those Make variables are just truncated by Make on the first # character, and this results in mach build faster failing because of that. However, the reason why chrome manifests were handled with buildlist.py originally is that not all chrome manifest entries were known to the FasterMake backend, but they now all are. So instead of relying on Make variables and buildlist.py, we can now rely on the newly added install manifests feature allowing to create files with a given content.
This commit is contained in:
parent
a52172c78b
commit
547a9909a9
@ -31,8 +31,6 @@
|
||||
# preprocessing
|
||||
# - INSTALL_MANIFESTS, which defines the list of base directories handled
|
||||
# by install manifests, see further below
|
||||
# - MANIFEST_TARGETS, which defines the file paths of chrome manifests, see
|
||||
# further below
|
||||
#
|
||||
# A convention used between this file and the Makefile including it is that
|
||||
# global Make variables names are uppercase, while "local" Make variables
|
||||
@ -42,7 +40,6 @@
|
||||
default: $(addprefix install-,$(INSTALL_MANIFESTS))
|
||||
|
||||
# Explicit files to be built for a default build
|
||||
default: $(addprefix $(TOPOBJDIR)/,$(MANIFEST_TARGETS))
|
||||
ifndef TEST_MOZBUILD
|
||||
default: $(TOPOBJDIR)/dist/bin/platform.ini
|
||||
endif
|
||||
@ -113,20 +110,6 @@ $(addprefix install-,$(INSTALL_MANIFESTS)): install-%: $(TOPOBJDIR)/config/build
|
||||
$(MOZ_DEBUG_DEFINES) \
|
||||
install_$(subst /,_,$*)
|
||||
|
||||
# Create some chrome manifests
|
||||
# This rule is forced to run every time because it may be updating files that
|
||||
# already exit.
|
||||
#
|
||||
# The list of chrome manifests is given in MANIFEST_TARGETS, relative to the
|
||||
# top object directory. The content for those manifests is given in the
|
||||
# `content` variable associated with the target. For example:
|
||||
# MANIFEST_TARGETS = foo
|
||||
# $(TOPOBJDIR)/foo: content = "manifest foo.manifest" "manifest bar.manifest"
|
||||
$(addprefix $(TOPOBJDIR)/,$(MANIFEST_TARGETS)): FORCE
|
||||
$(PYTHON) -m mozbuild.action.buildlist \
|
||||
$@ \
|
||||
$(content)
|
||||
|
||||
# ============================================================================
|
||||
# Below is a set of additional dependencies and variables used to build things
|
||||
# that are not supported by data in moz.build.
|
||||
|
@ -33,7 +33,7 @@ class FasterMakeBackend(CommonBackend):
|
||||
self._seen_directories = set()
|
||||
self._defines = dict()
|
||||
|
||||
self._manifest_entries = OrderedDefaultDict(list)
|
||||
self._manifest_entries = OrderedDefaultDict(set)
|
||||
|
||||
self._install_manifests = OrderedDefaultDict(InstallManifest)
|
||||
|
||||
@ -94,9 +94,8 @@ class FasterMakeBackend(CommonBackend):
|
||||
if obj.path != top_level:
|
||||
entry = 'manifest %s' % mozpath.relpath(obj.path,
|
||||
obj.install_target)
|
||||
if entry not in self._manifest_entries[top_level]:
|
||||
self._manifest_entries[top_level].append(entry)
|
||||
self._manifest_entries[obj.path].append(str(obj.entry))
|
||||
self._manifest_entries[top_level].add(entry)
|
||||
self._manifest_entries[obj.path].add(str(obj.entry))
|
||||
|
||||
elif isinstance(obj, XPIDLFile):
|
||||
self._has_xpidl = True
|
||||
@ -208,15 +207,14 @@ class FasterMakeBackend(CommonBackend):
|
||||
jarinfo.name))
|
||||
manifest += '.manifest'
|
||||
for m in jarinfo.chrome_manifests:
|
||||
self._manifest_entries[manifest].append(
|
||||
self._manifest_entries[manifest].add(
|
||||
m.replace('%', mozpath.basename(jarinfo.name) + '/'))
|
||||
|
||||
if jarinfo.name != 'chrome':
|
||||
manifest = mozpath.normpath(mozpath.join(install_target,
|
||||
'chrome.manifest'))
|
||||
entry = 'manifest %s.manifest' % jarinfo.name
|
||||
if entry not in self._manifest_entries[manifest]:
|
||||
self._manifest_entries[manifest].append(entry)
|
||||
self._manifest_entries[manifest].add(entry)
|
||||
|
||||
def consume_finished(self):
|
||||
mk = Makefile()
|
||||
@ -237,16 +235,17 @@ class FasterMakeBackend(CommonBackend):
|
||||
):
|
||||
mk.add_statement('%s = %s' % (var, self.environment.substs[var]))
|
||||
|
||||
install_manifests_bases = self._install_manifests.keys()
|
||||
|
||||
# Add information for chrome manifest generation
|
||||
manifest_targets = []
|
||||
|
||||
for target, entries in self._manifest_entries.iteritems():
|
||||
manifest_targets.append(target)
|
||||
target = '$(TOPOBJDIR)/%s' % target
|
||||
mk.create_rule([target]).add_dependencies(
|
||||
['content = %s' % ' '.join('"%s"' % e for e in entries)])
|
||||
|
||||
mk.add_statement('MANIFEST_TARGETS = %s' % ' '.join(manifest_targets))
|
||||
install_target = mozpath.basedir(target, install_manifests_bases)
|
||||
self._install_manifests[install_target].add_content(
|
||||
''.join('%s\n' % e for e in sorted(entries)),
|
||||
mozpath.relpath(target, install_target))
|
||||
|
||||
# Add information for install manifests.
|
||||
mk.add_statement('INSTALL_MANIFESTS = %s'
|
||||
|
Loading…
Reference in New Issue
Block a user