Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 10 additions & 6 deletions mesonbuild/wrap/wrap.py
Original file line number Diff line number Diff line change
Expand Up @@ -419,19 +419,21 @@ def load_wraps(self) -> None:
self.add_wrap(wrap)
self.loaded_dirs.add(self.subdir)

def add_wrap(self, wrap: PackageDefinition) -> None:
def add_wrap(self, wrap: PackageDefinition, ignore_dups: bool = False) -> None:
for k in wrap.provided_deps.keys():
if k in self.provided_deps:
if k not in self.provided_deps:
self.provided_deps[k] = wrap
elif not ignore_dups:
prev_wrap = self.provided_deps[k]
m = f'Multiple wrap files provide {k!r} dependency: {wrap.name} and {prev_wrap.name}'
raise WrapException(m)
self.provided_deps[k] = wrap
for k in wrap.provided_programs:
if k in self.provided_programs:
if k not in self.provided_programs:
self.provided_programs[k] = wrap
elif not ignore_dups:
prev_wrap = self.provided_programs[k]
m = f'Multiple wrap files provide {k!r} program: {wrap.name} and {prev_wrap.name}'
raise WrapException(m)
self.provided_programs[k] = wrap

def load_wrapdb(self) -> None:
try:
Expand Down Expand Up @@ -474,7 +476,9 @@ def merge_wraps(self, wraps: T.Dict[str, PackageDefinition]) -> None:
del self.provided_deps[v.directory.lower()]
if k not in self.wraps:
self.wraps[k] = v
self.add_wrap(v)
# it's fine if a dependency or program is provided by a wrap
# from *another* project (including the superproject).
self.add_wrap(v, ignore_dups=True)

def load_and_merge(self, subdir: str, subproject: SubProject) -> None:
if self.wrap_mode != WrapMode.nopromote and subdir not in self.loaded_dirs:
Expand Down
3 changes: 3 additions & 0 deletions test cases/common/288 multiple provides/meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
project('wraptest')

subproject('subproject')
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
project('foobar')

foobar_dep = declare_dependency()
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
project('subproject')

dependency('foobar')
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[wrap-file]
directory = libfoobar
source_filename = foobar-1.0.tar.gz

[provide]
dependency_names=foobar
foobar=foobar_dep
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[wrap-file]
directory = libfoobar
source_filename = foobar-1.0.tar.gz

[provide]
dependency_names=foobar
foobar=foobar_dep
Loading