sourceset: reinstate extra_deps

Dependencies in the "if_true" keyword argument do not prevent the
sources from being used; in other words, they work just like dependencies
with "disabler: false".

However, this was broken in commit ab0ffc6a2 ("modules/sourceset: Fix
remaining typing issues", 2022-02-23) which changed logic instead of
just fixing typing issues.  This was likely an attempt to avoid using
"dependencies.Dependency" after the "dependencies" field was declared,
but it also broke QEMU.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
pull/10148/head
Paolo Bonzini 3 years ago committed by Dylan Baker
parent 076855c22f
commit 9d42e58ea2
  1. 6
      mesonbuild/modules/sourceset.py
  2. 4
      test cases/common/212 source set configuration_data/meson.build

@ -63,6 +63,7 @@ class SourceSetRule(T.NamedTuple):
if_false: T.Any
sourcesets: T.List[SourceSetImpl]
deps: T.List[dependencies.Dependency]
extra_deps: T.List[dependencies.Dependency]
class SourceFiles(T.NamedTuple):
@ -159,7 +160,7 @@ class SourceSetImpl(SourceSet, MutableModuleObject):
keys, dependencies = self.check_conditions(when)
sources, extra_deps = self.check_source_files(if_true)
if_false, _ = self.check_source_files(if_false)
self.rules.append(SourceSetRule(keys, sources, if_false, [], dependencies + extra_deps))
self.rules.append(SourceSetRule(keys, sources, if_false, [], dependencies, extra_deps))
@typed_pos_args('sourceset.add_all', varargs=SourceSet)
@typed_kwargs(
@ -187,7 +188,7 @@ class SourceSetImpl(SourceSet, MutableModuleObject):
if not isinstance(s, SourceSetImpl):
raise InvalidCode('Arguments to \'add_all\' after the first must be source sets')
s.frozen = True
self.rules.append(SourceSetRule(keys, [], [], if_true, dependencies))
self.rules.append(SourceSetRule(keys, [], [], if_true, dependencies, []))
def collect(self, enabled_fn: T.Callable[[str], bool],
all_sources: bool,
@ -199,6 +200,7 @@ class SourceSetImpl(SourceSet, MutableModuleObject):
all(enabled_fn(key) for key in entry.keys):
into.sources.update(entry.sources)
into.deps.update(entry.deps)
into.deps.update(entry.extra_deps)
for ss in entry.sourcesets:
ss.collect(enabled_fn, all_sources, into)
if not all_sources:

@ -8,7 +8,7 @@ source_set = import('sourceset')
sources = source_set.source_set()
sources.add(when: 'YES', if_false: ['nope.c'])
sources.add(when: 'YES1', if_true: files('a.c'))
sources.add(when: 'YES1', if_true: [files('a.c'), not_found])
subdir('subdir')
sources.add(when: 'NO', if_true: 'nope.c', if_false: ['f.c'])
sources.add(when: 'NO', if_true: bad, if_false: ['f.c'])
@ -24,7 +24,7 @@ sources2.add(when: 'YES1', if_true: 'nope.c')
sources.add_all(when: 'NO', if_true: sources2)
# test duplicate items
sources.add(when: 'YES1', if_true: files('a.c'))
sources.add(when: 'YES1', if_true: [files('a.c'), not_found])
conf1 = configuration_data()
conf1.set10('YES', true)

Loading…
Cancel
Save