diff options
author | Xavier Claessens <xavier.claessens@collabora.com> | 2018-04-10 15:01:05 -0400 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2018-10-23 22:09:55 +0300 |
commit | 61348da069bd3afe28a9de03e7792e20a9cb2eac (patch) | |
tree | 1db7fc90efbda6f95d7c5332788ca7b3da88e95f /mesonbuild | |
parent | 87355c81326edd253f433f08e8d58f9df059951f (diff) | |
download | meson-61348da069bd3afe28a9de03e7792e20a9cb2eac.zip meson-61348da069bd3afe28a9de03e7792e20a9cb2eac.tar.gz meson-61348da069bd3afe28a9de03e7792e20a9cb2eac.tar.bz2 |
Add 'disabler' argument to functions returning not-found objects
When dependency(), find_library(), find_program(), or
python.find_installation() return a not-found object and disabler is
true, they return a Disabler object instead.
Diffstat (limited to 'mesonbuild')
-rw-r--r-- | mesonbuild/interpreter.py | 8 | ||||
-rw-r--r-- | mesonbuild/interpreterbase.py | 11 | ||||
-rw-r--r-- | mesonbuild/modules/python.py | 4 |
3 files changed, 21 insertions, 2 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 98424ec..66f7f02 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -27,7 +27,7 @@ from .dependencies import InternalDependency, Dependency, NotFoundDependency, De from .interpreterbase import InterpreterBase from .interpreterbase import check_stringlist, flatten, noPosargs, noKwargs, stringArgs, permittedKwargs, noArgsFlattening from .interpreterbase import InterpreterException, InvalidArguments, InvalidCode, SubdirDoneRequest -from .interpreterbase import InterpreterObject, MutableInterpreterObject, Disabler +from .interpreterbase import InterpreterObject, MutableInterpreterObject, Disabler, disablerIfNotFound from .interpreterbase import FeatureNew, FeatureDeprecated, FeatureNewKwargs from .interpreterbase import ObjectHolder from .modules import ModuleReturnValue @@ -1381,6 +1381,8 @@ class CompilerHolder(InterpreterObject): mlog.log('Header <{0}> has symbol "{1}":'.format(hname, symbol), h) return haz + @FeatureNewKwargs('compiler.find_library', '0.49.0', ['disabler']) + @disablerIfNotFound @permittedKwargs({ 'required', 'dirs', @@ -2776,6 +2778,8 @@ external dependencies (including libraries) must go to "dependencies".''') self.store_name_lookups(args) return progobj + @FeatureNewKwargs('find_program', '0.49.0', ['disabler']) + @disablerIfNotFound @permittedKwargs(permitted_kwargs['find_program']) def func_find_program(self, node, args, kwargs): if not args: @@ -2902,8 +2906,10 @@ external dependencies (including libraries) must go to "dependencies".''') elif name == 'openmp': FeatureNew('OpenMP Dependency', '0.46.0').use(self.subproject) + @FeatureNewKwargs('dependency', '0.49.0', ['disabler']) @FeatureNewKwargs('dependency', '0.40.0', ['method']) @FeatureNewKwargs('dependency', '0.38.0', ['default_options']) + @disablerIfNotFound @permittedKwargs(permitted_kwargs['dependency']) def func_dependency(self, node, args, kwargs): self.validate_arguments(args, 1, [str]) diff --git a/mesonbuild/interpreterbase.py b/mesonbuild/interpreterbase.py index c0064ab..aee1c87 100644 --- a/mesonbuild/interpreterbase.py +++ b/mesonbuild/interpreterbase.py @@ -145,6 +145,17 @@ def noArgsFlattening(f): setattr(f, 'no-args-flattening', True) return f +def disablerIfNotFound(f): + @wraps(f) + def wrapped(*wrapped_args, **wrapped_kwargs): + kwargs = _get_callee_args(wrapped_args)[3] + disabler = kwargs.pop('disabler', False) + ret = f(*wrapped_args, **wrapped_kwargs) + if disabler and not ret.held_object.found(): + return Disabler() + return ret + return wrapped + class permittedKwargs: def __init__(self, permitted): diff --git a/mesonbuild/modules/python.py b/mesonbuild/modules/python.py index 2229949..954220b 100644 --- a/mesonbuild/modules/python.py +++ b/mesonbuild/modules/python.py @@ -23,7 +23,7 @@ from mesonbuild.modules import ModuleReturnValue from ..interpreterbase import ( noPosargs, noKwargs, permittedKwargs, InterpreterObject, InvalidArguments, - FeatureNew + FeatureNew, FeatureNewKwargs, disablerIfNotFound ) from ..interpreter import ExternalProgramHolder, extract_required_kwarg from ..interpreterbase import flatten @@ -467,6 +467,8 @@ class PythonModule(ExtensionModule): return mesonlib.version_compare(version, '>= 3.0') return True + @FeatureNewKwargs('python.find_installation', '0.49.0', ['disabler']) + @disablerIfNotFound @permittedKwargs(['required']) def find_installation(self, interpreter, state, args, kwargs): feature_check = FeatureNew('Passing "feature" option to find_installation', '0.48.0') |