Skip to content

Commit 8981317

Browse files
committed
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.
1 parent e005e9a commit 8981317

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

mesonbuild/interpreter/dependencyfallbacks.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
from __future__ import annotations
66

7-
from .interpreterobjects import extract_required_kwarg
87
from .. import mlog
98
from .. import dependencies
109
from .. import build
@@ -311,14 +310,11 @@ def _get_candidates(self) -> T.List[T.Tuple[T.Callable[[TYPE_nkwargs, TYPE_nvar,
311310
return candidates
312311

313312
def lookup(self, kwargs: TYPE_nkwargs, force_fallback: bool = False) -> Dependency:
314-
mods = T.cast('T.List[str]', kwargs.get('modules', []))
313+
mods = kwargs.get('modules', [])
315314
if mods:
316315
self._display_name += ' (modules: {})'.format(', '.join(str(i) for i in mods))
317316

318-
disabled, required, feature = extract_required_kwarg(kwargs, self.subproject)
319-
if disabled:
320-
mlog.log('Dependency', mlog.bold(self._display_name), 'skipped: feature', mlog.bold(feature), 'disabled')
321-
return self._notfound_dependency()
317+
required = kwargs.get('required', True)
322318

323319
# Check if usage of the subproject fallback is forced
324320
wrap_mode = WrapMode.from_string(self.coredata.optstore.get_value_for(OptionKey('wrap_mode')))

mesonbuild/interpreter/interpreter.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1774,8 +1774,20 @@ def func_dependency(self, node: mparser.BaseNode, args: T.Tuple[T.List[str]], kw
17741774
df = DependencyFallbacksHolder(self, names, kwargs['allow_fallback'], default_options)
17751775
df.set_fallback(kwargs['fallback'])
17761776
not_found_message = kwargs['not_found_message']
1777+
1778+
disabled, required, feature = extract_required_kwarg(kwargs, self.subproject)
1779+
if disabled:
1780+
name = names[0]
1781+
if kwargs['modules']:
1782+
name = name + '(modules: {})'.format(', '.join(kwargs['modules']))
1783+
mlog.log('Dependency', mlog.bold(name), 'skipped: feature', mlog.bold(feature), 'disabled')
1784+
return dependencies.NotFoundDependency(names[0], self.environment)
1785+
1786+
nkwargs = T.cast('dependencies.base.DependencyObjectKWs', kwargs.copy())
1787+
nkwargs['required'] = required # to replace a possible UserFeatureOption with a bool
1788+
17771789
try:
1778-
d = df.lookup(kwargs)
1790+
d = df.lookup(nkwargs)
17791791
except Exception:
17801792
if not_found_message:
17811793
self.message_impl([not_found_message])

0 commit comments

Comments
 (0)