diff options
-rw-r--r-- | docs/markdown/Build-options.md | 3 | ||||
-rw-r--r-- | docs/markdown/snippets/empty-array-opts.md | 5 | ||||
-rw-r--r-- | mesonbuild/coredata.py | 2 | ||||
-rwxr-xr-x | run_unittests.py | 20 |
4 files changed, 30 insertions, 0 deletions
diff --git a/docs/markdown/Build-options.md b/docs/markdown/Build-options.md index 0093a1b..66c9cb5 100644 --- a/docs/markdown/Build-options.md +++ b/docs/markdown/Build-options.md @@ -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 diff --git a/docs/markdown/snippets/empty-array-opts.md b/docs/markdown/snippets/empty-array-opts.md new file mode 100644 index 0000000..6d3b05d --- /dev/null +++ b/docs/markdown/snippets/empty-array-opts.md @@ -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. diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py index f075e75..560ebf6 100644 --- a/mesonbuild/coredata.py +++ b/mesonbuild/coredata.py @@ -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) diff --git a/run_unittests.py b/run_unittests.py index 4cfb743..0abe419 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -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 |