diff options
author | Xavier Claessens <xavier.claessens@collabora.com> | 2019-11-25 20:16:54 -0500 |
---|---|---|
committer | Xavier Claessens <xavier.claessens@collabora.com> | 2020-03-06 15:26:02 -0500 |
commit | 8edc6d655d6069dd5e6e7b531701086d774d7529 (patch) | |
tree | 25d64663547ad2c5faf279bd8dda08e8c8e12526 /mesonbuild/interpreter.py | |
parent | 141401c11d8900775a15a91ee6ca4dbeac2dfe87 (diff) | |
download | meson-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.py | 28 |
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): |