Options: treat array option -Dopt= and -Dopt=[] as equivalent

Currently the former will be parsed as [''], while the latter is parsed
as [] in python. This makes for some obnoxious special handling
depending on what the user passes. This is even more obnoxious since for
string type arguments this doesn't require special handling.
pull/3811/head
Dylan Baker 7 years ago committed by Nirbheek Chauhan
parent 14fe0985f7
commit f3a8f9c34d
  1. 3
      docs/markdown/Build-options.md
  2. 5
      docs/markdown/snippets/empty-array-opts.md
  3. 2
      mesonbuild/coredata.py
  4. 20
      run_unittests.py

@ -61,6 +61,9 @@ empty. The `value` parameter specifies the default value of the option
and if it is unset then the values of `choices` will be used as the
default.
As of 0.47.0 -Dopt= and -Dopt=[] both pass an empty list, before this -Dopt=
would pass a list with an empty string.
This type is available since version 0.44.0
### Features

@ -0,0 +1,5 @@
## Array options treat -Dopt= and -Dopt=[] as equivalent
Prior to this change passing -Dopt= to an array opt would be interpreted as
[''] (an array with an empty string), now -Dopt= is the same as -Dopt=[], an
empty list.

@ -154,6 +154,8 @@ class UserArrayOption(UserOption):
if isinstance(value, str):
if value.startswith('['):
newvalue = ast.literal_eval(value)
elif value == '':
newvalue = []
else:
if self.shlex_split:
newvalue = shlex.split(value)

@ -1786,6 +1786,26 @@ int main(int argc, char **argv) {
changed = get_opt()
self.assertDictEqual(changed, expected)
def test_array_option_empty_equivalents(self):
"""Array options treat -Dopt=[] and -Dopt= as equivalent."""
def get_opt():
opts = self.introspect('--buildoptions')
for x in opts:
if x.get('name') == 'list':
return x
raise Exception(opts)
expected = {
'name': 'list',
'description': 'list',
'type': 'array',
'value': [],
}
tdir = os.path.join(self.unit_test_dir, '18 array option')
self.init(tdir, extra_args='-Dlist=')
original = get_opt()
self.assertDictEqual(original, expected)
def opt_has(self, name, value):
res = self.introspect('--buildoptions')
found = False

Loading…
Cancel
Save