De-duplicate BuildTarget.sources

If the same source is provided by multiple dependencies it was added
multiple times, as `added_sources` was only guarding against duplicates
within the same source list. This was not a problem with ninja, but it
triggers multiple sanity checks within xcode backend while attempting to
create multiple ids for the same file.

Rename `added_sources` to `seen_sources` as per reviewers request
pull/13445/merge
Nick 3 weeks ago committed by Eli Schwartz
parent 3ba0976394
commit 7b10f48d1c
  1. 7
      mesonbuild/build.py

@ -762,6 +762,8 @@ class BuildTarget(Target):
self.pch: T.Dict[str, T.List[str]] = {}
self.extra_args: T.DefaultDict[str, T.List[str]] = kwargs.get('language_args', defaultdict(list))
self.sources: T.List[File] = []
# If the same source is defined multiple times, use it only once.
self.seen_sources: T.Set[File] = set()
self.generated: T.List['GeneratedTypes'] = []
self.extra_files: T.List[File] = []
self.d_features: DFeatures = {
@ -884,12 +886,11 @@ class BuildTarget(Target):
(static as they are only regenerated if meson itself is regenerated)
3. Sources files generated by another target or a Generator (generated)
"""
added_sources: T.Set[File] = set() # If the same source is defined multiple times, use it only once.
for s in sources:
if isinstance(s, File):
if s not in added_sources:
if s not in self.seen_sources:
self.sources.append(s)
added_sources.add(s)
self.seen_sources.add(s)
elif isinstance(s, (CustomTarget, CustomTargetIndex, GeneratedList)):
self.generated.append(s)

Loading…
Cancel
Save