interpreterobjects: deprecated passing a number to configuration_data.set10

This is currently allowed, and is used in at least a few projects. It
was not intended to work or documented, but it does and since it is in
use a full deprecation period must be used. A warning has also been
added for values < 0, which have surprising behavior.
pull/9850/head
Dylan Baker 3 years ago committed by Eli Schwartz
parent bf3fa728fa
commit 9c7ddf59fe
  1. 13
      docs/yaml/objects/cfg_data.yaml
  2. 2
      docs/yaml/objects/feature.yaml
  3. 8
      mesonbuild/interpreter/interpreterobjects.py

@ -41,8 +41,17 @@ methods:
type: str
description: The name of the variable to set
value:
type: bool
description: The value to set as either `1` or `0`
type: bool | int
description: |
The value to set as either `1` or `0`
Passing numbers was never intended to work, and since 0.62 it has been
deprecated. It will be removed in a future version of Meson. If you
need to pass numbers use the `.set` method.
warnings:
- numeric values < 0 have the surprising behavior of being converted to
[[true]], values > 1 have the more expected but unintentional behavior of
being interpretered as [[true]].
kwargs_inherit: cfg_data.set

@ -54,7 +54,7 @@ methods:
if get_option('directx').require(host_machine.system() == 'windows',
error_message: 'DirectX only available on Windows').allowed() then
src += ['directx.c']
config.set10('HAVE_DIRECTX', 1)
config.set10('HAVE_DIRECTX', true)
endif
```

@ -320,6 +320,14 @@ class ConfigurationDataHolder(ObjectHolder[build.ConfigurationData], MutableInte
@typed_kwargs('configuration_data.set10', _CONF_DATA_SET_KWS)
def set10_method(self, args: T.Tuple[str, T.Union[int, bool]], kwargs: 'kwargs.ConfigurationDataSet') -> None:
self.__check_used()
if isinstance(args[1], int):
mlog.deprecation('configuration_data.set10 with number. the `set10` '
'method should only be used with booleans',
location=self.interpreter.current_node)
if args[1] < 0:
mlog.warning('Passing a number that is less than 0 may not have the intended result, '
'as meson will treat all non-zero values as true.',
location=self.interpreter.current_node)
self.held_object.values[args[0]] = (int(args[1]), kwargs['description'])
@typed_pos_args('configuration_data.has', (str, int, bool))

Loading…
Cancel
Save