summaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2025-08-05 10:54:10 -0700
committerDylan Baker <dylan@pnwbakers.com>2025-10-20 15:15:53 -0700
commit8981317fdb765c58cbda079d3f3b2bd090ae7845 (patch)
tree3979f3a19bc2309fe7a12a4f67c99637354ebe6a /mesonbuild
parente005e9a459f3847a9d30861ec0a5f5653b4df0e4 (diff)
downloadmeson-8981317fdb765c58cbda079d3f3b2bd090ae7845.tar.gz
dependencyfallbacks: move required/disabled check to interpreter
The lookup code only has two callers. One of them is an internal caller that never sets the `required` key, and the other is the interpreter. Moving this code to the interpreter allows us to simplify the common code, especially the types.
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/interpreter/dependencyfallbacks.py8
-rw-r--r--mesonbuild/interpreter/interpreter.py14
2 files changed, 15 insertions, 7 deletions
diff --git a/mesonbuild/interpreter/dependencyfallbacks.py b/mesonbuild/interpreter/dependencyfallbacks.py
index c9b762b0c..4d9721ea2 100644
--- a/mesonbuild/interpreter/dependencyfallbacks.py
+++ b/mesonbuild/interpreter/dependencyfallbacks.py
@@ -4,7 +4,6 @@
from __future__ import annotations
-from .interpreterobjects import extract_required_kwarg
from .. import mlog
from .. import dependencies
from .. import build
@@ -311,14 +310,11 @@ class DependencyFallbacksHolder(MesonInterpreterObject):
return candidates
def lookup(self, kwargs: TYPE_nkwargs, force_fallback: bool = False) -> Dependency:
- mods = T.cast('T.List[str]', kwargs.get('modules', []))
+ mods = kwargs.get('modules', [])
if mods:
self._display_name += ' (modules: {})'.format(', '.join(str(i) for i in mods))
- disabled, required, feature = extract_required_kwarg(kwargs, self.subproject)
- if disabled:
- mlog.log('Dependency', mlog.bold(self._display_name), 'skipped: feature', mlog.bold(feature), 'disabled')
- return self._notfound_dependency()
+ required = kwargs.get('required', True)
# Check if usage of the subproject fallback is forced
wrap_mode = WrapMode.from_string(self.coredata.optstore.get_value_for(OptionKey('wrap_mode')))
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py
index 43433d591..2c21a1720 100644
--- a/mesonbuild/interpreter/interpreter.py
+++ b/mesonbuild/interpreter/interpreter.py
@@ -1774,8 +1774,20 @@ class Interpreter(InterpreterBase, HoldableObject):
df = DependencyFallbacksHolder(self, names, kwargs['allow_fallback'], default_options)
df.set_fallback(kwargs['fallback'])
not_found_message = kwargs['not_found_message']
+
+ disabled, required, feature = extract_required_kwarg(kwargs, self.subproject)
+ if disabled:
+ name = names[0]
+ if kwargs['modules']:
+ name = name + '(modules: {})'.format(', '.join(kwargs['modules']))
+ mlog.log('Dependency', mlog.bold(name), 'skipped: feature', mlog.bold(feature), 'disabled')
+ return dependencies.NotFoundDependency(names[0], self.environment)
+
+ nkwargs = T.cast('dependencies.base.DependencyObjectKWs', kwargs.copy())
+ nkwargs['required'] = required # to replace a possible UserFeatureOption with a bool
+
try:
- d = df.lookup(kwargs)
+ d = df.lookup(nkwargs)
except Exception:
if not_found_message:
self.message_impl([not_found_message])