Skip to content

Commit

Permalink
De-duplicate BuildTarget.sourses
Browse files Browse the repository at this point in the history
If 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
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
  • Loading branch information
klokik committed Nov 5, 2024
1 parent 273894d commit 8eed3e7
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions mesonbuild/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -758,6 +758,8 @@ def __init__(
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 = {
Expand Down Expand Up @@ -880,12 +882,11 @@ def process_sourcelist(self, sources: T.List['SourceOutputs']) -> None:
(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)

Expand Down

0 comments on commit 8eed3e7

Please sign in to comment.