aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/build.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/build.py')
-rw-r--r--mesonbuild/build.py11
1 files changed, 11 insertions, 0 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index 3f480e8..a7965aa 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -184,6 +184,7 @@ class BuildTarget():
self.subproject = subproject # Can not be calculated from subdir as subproject dirname can be changed per project.
self.is_cross = is_cross
self.sources = []
+ self.sources_conflicts = {}
self.objects = []
self.external_deps = []
self.include_dirs = []
@@ -244,6 +245,7 @@ class BuildTarget():
if not isinstance(sources, list):
sources = [sources]
added_sources = {} # If the same source is defined multiple times, use it only once.
+ conflicts = {} # We must resolve conflicts if multiple source files from different subdirs have the same name.
for s in sources:
# Holder unpacking. Ugly.
if hasattr(s, 'held_object'):
@@ -252,10 +254,19 @@ class BuildTarget():
if not s in added_sources:
self.sources.append(s)
added_sources[s] = True
+ basename = os.path.basename(s.fname)
+ conflicting_sources = conflicts.get(basename, None)
+ if conflicting_sources is None:
+ conflicting_sources = []
+ conflicting_sources.append(s)
+ conflicts[basename] = conflicting_sources
elif isinstance(s, GeneratedList) or isinstance(s, CustomTarget):
self.generated.append(s)
else:
raise InvalidArguments('Bad source in target %s.' % self.name)
+ for basename, conflicting_sources in conflicts.items():
+ if len(conflicting_sources) > 1:
+ self.sources_conflicts[basename] = conflicting_sources
def validate_sources(self):
if len(self.sources) > 0: