зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1210642 - Allow to pass defines overrides when processing install manifests. r=gps
This commit is contained in:
Родитель
f4de6bfe91
Коммит
95f5927160
|
@ -17,19 +17,36 @@ COMPLETE = 'From {dest}: Kept {existing} existing; Added/updated {updated}; ' \
|
|||
def process_manifest(destdir, paths,
|
||||
remove_unaccounted=True,
|
||||
remove_all_directory_symlinks=True,
|
||||
remove_empty_directories=True):
|
||||
remove_empty_directories=True,
|
||||
defines={}):
|
||||
manifest = InstallManifest()
|
||||
for path in paths:
|
||||
manifest |= InstallManifest(path=path)
|
||||
|
||||
copier = FileCopier()
|
||||
manifest.populate_registry(copier)
|
||||
manifest.populate_registry(copier, defines_override=defines)
|
||||
return copier.copy(destdir,
|
||||
remove_unaccounted=remove_unaccounted,
|
||||
remove_all_directory_symlinks=remove_all_directory_symlinks,
|
||||
remove_empty_directories=remove_empty_directories)
|
||||
|
||||
|
||||
class DefinesAction(argparse.Action):
|
||||
def __call__(self, parser, namespace, values, option_string):
|
||||
defines = getattr(namespace, self.dest)
|
||||
if defines is None:
|
||||
defines = {}
|
||||
values = values.split('=', 1)
|
||||
if len(values) == 1:
|
||||
name, value = values[0], 1
|
||||
else:
|
||||
name, value = values
|
||||
if value.isdigit():
|
||||
value = int(value)
|
||||
defines[name] = value
|
||||
setattr(namespace, self.dest, defines)
|
||||
|
||||
|
||||
def main(argv):
|
||||
parser = argparse.ArgumentParser(
|
||||
description='Process install manifest files.')
|
||||
|
@ -42,13 +59,17 @@ def main(argv):
|
|||
help='Do not remove all directory symlinks from destination.')
|
||||
parser.add_argument('--no-remove-empty-directories', action='store_true',
|
||||
help='Do not remove empty directories from destination.')
|
||||
parser.add_argument('-D', action=DefinesAction,
|
||||
dest='defines', metavar="VAR[=VAL]",
|
||||
help='Define a variable to override what is specified in the manifest')
|
||||
|
||||
args = parser.parse_args(argv)
|
||||
|
||||
result = process_manifest(args.destdir, args.manifests,
|
||||
remove_unaccounted=not args.no_remove,
|
||||
remove_all_directory_symlinks=not args.no_remove_all_directory_symlinks,
|
||||
remove_empty_directories=not args.no_remove_empty_directories)
|
||||
remove_empty_directories=not args.no_remove_empty_directories,
|
||||
defines=args.defines)
|
||||
|
||||
print(COMPLETE.format(dest=args.destdir,
|
||||
existing=result.existing_files_count,
|
||||
|
|
|
@ -296,12 +296,15 @@ class InstallManifest(object):
|
|||
|
||||
self._dests[dest] = entry
|
||||
|
||||
def populate_registry(self, registry):
|
||||
def populate_registry(self, registry, defines_override={}):
|
||||
"""Populate a mozpack.copier.FileRegistry instance with data from us.
|
||||
|
||||
The caller supplied a FileRegistry instance (or at least something that
|
||||
conforms to its interface) and that instance is populated with data
|
||||
from this manifest.
|
||||
|
||||
Defines can be given to override the ones in the manifest for
|
||||
preprocessing.
|
||||
"""
|
||||
for dest in sorted(self._dests):
|
||||
entry = self._dests[dest]
|
||||
|
@ -340,10 +343,13 @@ class InstallManifest(object):
|
|||
continue
|
||||
|
||||
if install_type == self.PREPROCESS:
|
||||
defines = self._decode_field_entry(entry[4])
|
||||
if defines_override:
|
||||
defines.update(defines_override)
|
||||
registry.add(dest, PreprocessedFile(entry[1],
|
||||
depfile_path=entry[2],
|
||||
marker=entry[3],
|
||||
defines=self._decode_field_entry(entry[4]),
|
||||
defines=defines,
|
||||
extra_depends=self._source_files))
|
||||
|
||||
continue
|
||||
|
|
Загрузка…
Ссылка в новой задаче