aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter/interpreterobjects.py
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2021-05-16 17:54:43 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2021-06-08 10:18:12 +0200
commita87e32d1817ba750b054774e589b595135fb9145 (patch)
tree2118719c756142508f3b5f84cd59dbc6d6aa8f3c /mesonbuild/interpreter/interpreterobjects.py
parent2f2d99e1d88c9f14fa139d450cb6f55173d73c9a (diff)
downloadmeson-a87e32d1817ba750b054774e589b595135fb9145.zip
meson-a87e32d1817ba750b054774e589b595135fb9145.tar.gz
meson-a87e32d1817ba750b054774e589b595135fb9145.tar.bz2
interpreter: add feature.disable_auto_if()
Add a method to downgrade an option to disabled if it is not used. This is useful to avoid unnecessary search for dependencies; for example dep = dependency('dep', required: get_option('feature').disable_auto_if(not foo)) can be used instead of the more verbose and complex if get_option('feature').auto() and not foo then dep = dependency('', required: false) else dep = dependency('dep', required: get_option('feature')) endif or to avoid unnecessary dependency searches: dep1 = dependency('dep1', required: get_option('foo')) # dep2 is only used together with dep1 dep2 = dependency('dep2', required: get_option('foo').disable_auto_if(not dep1.found())) ``` Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'mesonbuild/interpreter/interpreterobjects.py')
-rw-r--r--mesonbuild/interpreter/interpreterobjects.py9
1 files changed, 9 insertions, 0 deletions
diff --git a/mesonbuild/interpreter/interpreterobjects.py b/mesonbuild/interpreter/interpreterobjects.py
index 0bf188c..37f486a 100644
--- a/mesonbuild/interpreter/interpreterobjects.py
+++ b/mesonbuild/interpreter/interpreterobjects.py
@@ -75,6 +75,7 @@ class FeatureOptionHolder(InterpreterObject, ObjectHolder[coredata.UserFeatureOp
'allowed': self.allowed_method,
'auto': self.auto_method,
'require': self.require_method,
+ 'disable_auto_if': self.disable_auto_if_method,
})
@property
@@ -122,6 +123,14 @@ class FeatureOptionHolder(InterpreterObject, ObjectHolder[coredata.UserFeatureOp
raise InterpreterException(prefix + error_message)
return self.as_disabled()
+ @permittedKwargs({})
+ def disable_auto_if_method(self, args, kwargs):
+ if len(args) != 1:
+ raise InvalidArguments('Expected 1 argument, got %d.' % (len(args), ))
+ if not isinstance(args[0], bool):
+ raise InvalidArguments('boolean argument expected.')
+ return self if self.value != 'auto' or not args[0] else self.as_disabled()
+
class RunProcess(InterpreterObject):