aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter.py
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.com>2019-11-25 20:16:54 -0500
committerXavier Claessens <xavier.claessens@collabora.com>2020-03-06 15:26:02 -0500
commit8edc6d655d6069dd5e6e7b531701086d774d7529 (patch)
tree25d64663547ad2c5faf279bd8dda08e8c8e12526 /mesonbuild/interpreter.py
parent141401c11d8900775a15a91ee6ca4dbeac2dfe87 (diff)
downloadmeson-8edc6d655d6069dd5e6e7b531701086d774d7529.zip
meson-8edc6d655d6069dd5e6e7b531701086d774d7529.tar.gz
meson-8edc6d655d6069dd5e6e7b531701086d774d7529.tar.bz2
Improve logged messages for overriden dependencies
Diffstat (limited to 'mesonbuild/interpreter.py')
-rw-r--r--mesonbuild/interpreter.py28
1 files changed, 17 insertions, 11 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index b3789c3..c247e63 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -2022,17 +2022,20 @@ class MesonMain(InterpreterObject):
name = args[0]
dep = args[1]
if not isinstance(name, str) or not name:
- raise InterpreterException('First argument must be not empty string')
+ raise InterpreterException('First argument must be a string and cannot be empty')
if hasattr(dep, 'held_object'):
dep = dep.held_object
if not isinstance(dep, dependencies.Dependency):
raise InterpreterException('Second argument must be a dependency object')
identifier = dependencies.get_dep_identifier(name, kwargs)
for_machine = self.interpreter.machine_from_native_kwarg(kwargs)
- if identifier in self.build.dependency_overrides[for_machine]:
- raise InterpreterException('Tried to override dependency "%s" which has already been overridden.'
- % name)
- self.build.dependency_overrides[for_machine][identifier] = dep
+ override = self.build.dependency_overrides[for_machine].get(identifier)
+ if override:
+ m = 'Tried to override dependency {!r} which has already been resolved or overridden at {}'
+ location = mlog.get_error_location_string(override.node.filename, override.node.lineno)
+ raise InterpreterException(m.format(name, location))
+ self.build.dependency_overrides[for_machine][identifier] = \
+ build.DependencyOverride(dep, self.interpreter.current_node)
@noPosargs
@permittedKwargs({})
@@ -3242,14 +3245,16 @@ external dependencies (including libraries) must go to "dependencies".''')
identifier = dependencies.get_dep_identifier(name, kwargs)
wanted_vers = mesonlib.stringlistify(kwargs.get('version', []))
- cached_dep = self.build.dependency_overrides[for_machine].get(identifier)
- if cached_dep:
+ override = self.build.dependency_overrides[for_machine].get(identifier)
+ if override:
+ info = [mlog.blue('(overridden)' if override.explicit else '(cached)')]
+ cached_dep = override.dep
# We don't implicitly override not-found dependencies, but user could
# have explicitly called meson.override_dependency() with a not-found
# dep.
if not cached_dep.found():
mlog.log('Dependency', mlog.bold(name),
- 'found:', mlog.red('NO'), mlog.blue('(cached)'))
+ 'found:', mlog.red('NO'), *info)
return identifier, cached_dep
found_vers = cached_dep.get_version()
if not self.check_version(wanted_vers, found_vers):
@@ -3257,9 +3262,10 @@ external dependencies (including libraries) must go to "dependencies".''')
'found:', mlog.red('NO'),
'found', mlog.normal_cyan(found_vers), 'but need:',
mlog.bold(', '.join(["'{}'".format(e) for e in wanted_vers])),
- mlog.blue('(cached)'))
+ *info)
return identifier, NotFoundDependency(self.environment)
else:
+ info = [mlog.blue('(cached)')]
cached_dep = self.coredata.deps[for_machine].get(identifier)
if cached_dep:
found_vers = cached_dep.get_version()
@@ -3267,7 +3273,6 @@ external dependencies (including libraries) must go to "dependencies".''')
return identifier, None
if cached_dep:
- info = [mlog.blue('(cached)')]
if found_vers:
info = [mlog.normal_cyan(found_vers), *info]
mlog.log('Dependency', mlog.bold(name),
@@ -3383,7 +3388,8 @@ external dependencies (including libraries) must go to "dependencies".''')
for_machine = self.machine_from_native_kwarg(kwargs)
identifier = dependencies.get_dep_identifier(name, kwargs)
if identifier not in self.build.dependency_overrides[for_machine]:
- self.build.dependency_overrides[for_machine][identifier] = d.held_object
+ self.build.dependency_overrides[for_machine][identifier] = \
+ build.DependencyOverride(d.held_object, node, explicit=False)
return d
def dependency_impl(self, name, display_name, kwargs):