From 3589815eb9dd8402deabedcd4492f33e04870c56 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Wed, 21 Dec 2022 09:55:26 -0800 Subject: interpreter: add a feature.enable_auto_if It's always been strange to me we don't have an opposite method of the `disable_auto_if` method, but I've been pressed to find a case where we _need_ one, because `disable_auto_if` can't be logically contorted to work. I finally found the case where they're not equivalent: when you don't want to convert to a boolean: ```meson f = get_option('feat').disable_auto_if(not foo) g = get_option('feat').enable_auto_if(foo) dep1 = dependency('foo', required : f) dep2 = dependency('foo', required : g) ``` --- mesonbuild/interpreter/interpreterobjects.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'mesonbuild/interpreter/interpreterobjects.py') diff --git a/mesonbuild/interpreter/interpreterobjects.py b/mesonbuild/interpreter/interpreterobjects.py index 538d134e6..a750da95d 100644 --- a/mesonbuild/interpreter/interpreterobjects.py +++ b/mesonbuild/interpreter/interpreterobjects.py @@ -41,7 +41,6 @@ if T.TYPE_CHECKING: separator: str - def extract_required_kwarg(kwargs: 'kwargs.ExtractRequired', subproject: 'SubProject', feature_check: T.Optional[FeatureCheckBase] = None, @@ -97,6 +96,7 @@ class FeatureOptionHolder(ObjectHolder[coredata.UserFeatureOption]): 'auto': self.auto_method, 'require': self.require_method, 'disable_auto_if': self.disable_auto_if_method, + 'enable_auto_if': self.enable_auto_if_method, }) @property @@ -108,6 +108,11 @@ class FeatureOptionHolder(ObjectHolder[coredata.UserFeatureOption]): disabled.value = 'disabled' return disabled + def as_enabled(self) -> coredata.UserFeatureOption: + enabled = copy.deepcopy(self.held_object) + enabled.value = 'enabled' + return enabled + @noPosargs @noKwargs def enabled_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> bool: @@ -152,6 +157,12 @@ class FeatureOptionHolder(ObjectHolder[coredata.UserFeatureOption]): def disable_auto_if_method(self, args: T.Tuple[bool], kwargs: TYPE_kwargs) -> coredata.UserFeatureOption: return copy.deepcopy(self.held_object) if self.value != 'auto' or not args[0] else self.as_disabled() + @FeatureNew('feature_option.enable_auto_if()', '1.1.0') + @noKwargs + @typed_pos_args('feature_option.enable_auto_if', bool) + def enable_auto_if_method(self, args: T.Tuple[bool], kwargs: TYPE_kwargs) -> coredata.UserFeatureOption: + return self.as_enabled() if self.value == 'auto' and args[0] else copy.deepcopy(self.held_object) + class RunProcess(MesonInterpreterObject): -- cgit v1.2.3