From 5f3b73beb594b837e7b817b570c0a722c9cc2f63 Mon Sep 17 00:00:00 2001 From: Xavier Claessens Date: Thu, 17 Jun 2021 14:41:55 -0400 Subject: [PATCH] dependency: Empty fallback is the same as allow_fallback: false --- docs/markdown/Reference-manual.md | 2 ++ mesonbuild/interpreter/dependencyfallbacks.py | 4 ++++ test cases/failing/115 empty fallback/meson.build | 6 ++++++ .../failing/115 empty fallback/subprojects/foo/meson.build | 3 +++ test cases/failing/115 empty fallback/test.json | 7 +++++++ 5 files changed, 22 insertions(+) create mode 100644 test cases/failing/115 empty fallback/meson.build create mode 100644 test cases/failing/115 empty fallback/subprojects/foo/meson.build create mode 100644 test cases/failing/115 empty fallback/test.json diff --git a/docs/markdown/Reference-manual.md b/docs/markdown/Reference-manual.md index 18f30b32d..fec4e7417 100644 --- a/docs/markdown/Reference-manual.md +++ b/docs/markdown/Reference-manual.md @@ -515,6 +515,8 @@ This function supports the following keyword arguments: in this case the subproject must use `meson.override_dependency('dependency_name', subproj_dep)` to specify the dependency object used in the superproject. + If the value is an empty list, it has the same effect as + `allow_fallback: false`. - `language` *(since 0.42.0)*: defines what language-specific dependency to find if it's available for multiple languages. - `method`: defines the way the dependency is detected, the default is diff --git a/mesonbuild/interpreter/dependencyfallbacks.py b/mesonbuild/interpreter/dependencyfallbacks.py index 6edb129ab..5b78d2073 100644 --- a/mesonbuild/interpreter/dependencyfallbacks.py +++ b/mesonbuild/interpreter/dependencyfallbacks.py @@ -47,6 +47,10 @@ class DependencyFallbacksHolder(InterpreterObject): location=self.interpreter.current_node) return fbinfo = stringlistify(fbinfo) + if len(fbinfo) == 0: + # dependency('foo', fallback: []) is the same as dependency('foo', allow_fallback: false) + self.allow_fallback = False + return if len(fbinfo) == 1: FeatureNew.single_use('Fallback without variable name', '0.53.0', self.subproject) subp_name, varname = fbinfo[0], None diff --git a/test cases/failing/115 empty fallback/meson.build b/test cases/failing/115 empty fallback/meson.build new file mode 100644 index 000000000..f4eb5feb9 --- /dev/null +++ b/test cases/failing/115 empty fallback/meson.build @@ -0,0 +1,6 @@ +project('empty fallback') + +# There is a subproject named 'foo' that overrides that dependency, +# but `fallback: []` should not allow to use it. Same behaviour than with +# `allow_fallback: false` +dependency('foo', fallback: []) diff --git a/test cases/failing/115 empty fallback/subprojects/foo/meson.build b/test cases/failing/115 empty fallback/subprojects/foo/meson.build new file mode 100644 index 000000000..c9e134b5e --- /dev/null +++ b/test cases/failing/115 empty fallback/subprojects/foo/meson.build @@ -0,0 +1,3 @@ +project('foo') + +meson.override_dependency('foo', declare_dependency()) diff --git a/test cases/failing/115 empty fallback/test.json b/test cases/failing/115 empty fallback/test.json new file mode 100644 index 000000000..dcfde45c4 --- /dev/null +++ b/test cases/failing/115 empty fallback/test.json @@ -0,0 +1,7 @@ +{ + "stdout": [ + { + "line": "test cases/failing/115 empty fallback/meson.build:6:0: ERROR: Dependency \"foo\" not found, tried pkgconfig and cmake" + } + ] +}