aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/optinterpreter.py
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2017-09-29 10:07:29 -0700
committerDylan Baker <dylan@pnwbakers.com>2017-11-29 14:14:41 -0800
commitc9351ce30c03d107279090da7825096951a705d3 (patch)
treea9bf94236755986b2f69d2ef297e339c3c898561 /mesonbuild/optinterpreter.py
parent7c779a76df9b8a4dd466b120f817b50f857081fa (diff)
downloadmeson-c9351ce30c03d107279090da7825096951a705d3.zip
meson-c9351ce30c03d107279090da7825096951a705d3.tar.gz
meson-c9351ce30c03d107279090da7825096951a705d3.tar.bz2
Add new array type option
This exposes the already existing UserStringArrayOption class through the meson_options.txt. The intention is to provide a way for projects to take list/array type arguments and validate that all of the elements in that array are valid without using complex looping constructrs.
Diffstat (limited to 'mesonbuild/optinterpreter.py')
-rw-r--r--mesonbuild/optinterpreter.py16
1 files changed, 16 insertions, 0 deletions
diff --git a/mesonbuild/optinterpreter.py b/mesonbuild/optinterpreter.py
index 01dd036..22a263e 100644
--- a/mesonbuild/optinterpreter.py
+++ b/mesonbuild/optinterpreter.py
@@ -84,9 +84,25 @@ def ComboParser(name, description, kwargs):
raise OptionException('Combo choice elements must be strings.')
return coredata.UserComboOption(name, description, choices, kwargs.get('value', choices[0]))
+@permitted_kwargs({'value', 'choices'})
+def string_array_parser(name, description, kwargs):
+ if 'choices' not in kwargs:
+ raise OptionException('Array option missing "choices" keyword.')
+ choices = kwargs['choices']
+ if not isinstance(choices, list):
+ raise OptionException('Array choices must be an array.')
+ for i in choices:
+ if not isinstance(i, str):
+ raise OptionException('Array choice elements must be strings.')
+ value = kwargs.get('value', choices)
+ if not isinstance(value, list):
+ raise OptionException('Array choices must be passed as an array.')
+ return coredata.UserStringArrayOption(name, description, value, choices=choices)
+
option_types = {'string': StringParser,
'boolean': BooleanParser,
'combo': ComboParser,
+ 'array': string_array_parser,
}
class OptionInterpreter: