diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2017-09-22 20:51:30 +0300 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2017-11-27 23:31:34 +0200 |
commit | 904fe4745d8fb285c28f33dff2afbf3754e875fd (patch) | |
tree | b091dcc57c63fd7b19b6411ff051c5e7f7e47429 | |
parent | 11f1fc913d32adfd15b4d65cb25f06183361781b (diff) | |
download | meson-904fe4745d8fb285c28f33dff2afbf3754e875fd.zip meson-904fe4745d8fb285c28f33dff2afbf3754e875fd.tar.gz meson-904fe4745d8fb285c28f33dff2afbf3754e875fd.tar.bz2 |
Added option types to dependencies and a disabler object.
-rw-r--r-- | mesonbuild/coredata.py | 5 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 33 | ||||
-rw-r--r-- | mesonbuild/optinterpreter.py | 6 | ||||
-rw-r--r-- | test cases/common/161 dolphin option/encprog.c | 10 | ||||
-rw-r--r-- | test cases/common/161 dolphin option/meson.build | 8 | ||||
-rw-r--r-- | test cases/common/161 dolphin option/meson_options.txt | 2 |
6 files changed, 63 insertions, 1 deletions
diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py index 401211a..b70677b 100644 --- a/mesonbuild/coredata.py +++ b/mesonbuild/coredata.py @@ -124,6 +124,11 @@ class UserComboOption(UserOption): raise MesonException('Value %s not one of accepted values.' % value) return value +class UserDolphinOption(UserComboOption): + def __init__(self, name, description, value): + super().__init__(name, description, ['required', 'auto', 'disabled'], value) + + class UserStringArrayOption(UserOption): def __init__(self, name, description, value, **kwargs): super().__init__(name, description, kwargs.get('choices', [])) diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index fbf9a21..0f855ce 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -1081,6 +1081,9 @@ ModuleState = namedtuple('ModuleState', [ 'data', 'headers', 'man', 'global_args', 'project_args', 'build_machine', 'host_machine', 'target_machine']) +class DisablerHolder(InterpreterObject): + pass + class ModuleHolder(InterpreterObject, ObjectHolder): def __init__(self, modname, module, interpreter): InterpreterObject.__init__(self) @@ -2132,8 +2135,32 @@ to directly access options of other subprojects.''') return identifier, cached_dep @permittedKwargs(permitted_kwargs['dependency']) + def is_disabled(self, args, kwargs): + for i in args: + if isinstance(i, DisablerHolder): + return True + for i in kwargs.values(): + if isinstance(i, DisablerHolder): + return True + if isinstance(i, list): + for j in i: + if isinstance(j, DisablerHolder): + return True + return False + def func_dependency(self, node, args, kwargs): self.validate_arguments(args, 1, [str]) + if 'required' in kwargs and 'option' in kwargs: + raise InterpreterException('Can only use "required" or "option", not both at the same time.') + required = kwargs.get('required', 'options' not in kwargs) + for oname in listify(kwargs.get('options', [])): + o = self.environment.coredata.user_options[oname] + if not isinstance(o, coredata.UserDolphinOption): + raise InterpreterException('Value of option must point to a Dolphin object.') + if o.value == 'disabled': + return DisablerHolder() + if o.value == 'required': + required = True name = args[0] if '<' in name or '>' in name or '=' in name: raise InvalidArguments('Characters <, > and = are forbidden in dependency names. To specify' @@ -2141,7 +2168,7 @@ to directly access options of other subprojects.''') identifier, cached_dep = self._find_cached_dep(name, kwargs) if cached_dep: - if kwargs.get('required', True) and not cached_dep.found(): + if required and not cached_dep.found(): m = 'Dependency {!r} was already checked and was not found' raise DependencyException(m.format(name)) dep = cached_dep @@ -2392,6 +2419,8 @@ to directly access options of other subprojects.''') @permittedKwargs(permitted_kwargs['test']) def func_test(self, node, args, kwargs): + if self.is_disabled(args, kwargs): + return DisablerHolder() self.add_test(node, args, kwargs, True) def unpack_env_kwarg(self, kwargs): @@ -2916,6 +2945,8 @@ different subdirectory. self.coredata.target_guids[idname] = str(uuid.uuid4()).upper() def build_target(self, node, args, kwargs, targetholder): + if self.is_disabled(args, kwargs): + return DisablerHolder() if not args: raise InterpreterException('Target does not have a name.') name = args[0] diff --git a/mesonbuild/optinterpreter.py b/mesonbuild/optinterpreter.py index 01dd036..f9d206a 100644 --- a/mesonbuild/optinterpreter.py +++ b/mesonbuild/optinterpreter.py @@ -84,9 +84,15 @@ def ComboParser(name, description, kwargs): raise OptionException('Combo choice elements must be strings.') return coredata.UserComboOption(name, description, choices, kwargs.get('value', choices[0])) +def DolphinParser(name, description, kwargs): + if 'choices' in kwargs: + raise OptionException('Dolphin option must not have choices keyword.') + return coredata.UserDolphinOption(name, description, kwargs.get('value', 'required')) + option_types = {'string': StringParser, 'boolean': BooleanParser, 'combo': ComboParser, + 'dolphin': DolphinParser, } class OptionInterpreter: diff --git a/test cases/common/161 dolphin option/encprog.c b/test cases/common/161 dolphin option/encprog.c new file mode 100644 index 0000000..8d9a87d --- /dev/null +++ b/test cases/common/161 dolphin option/encprog.c @@ -0,0 +1,10 @@ +#include<stdlib.h> +#include<stdint.h> +#include<x264.h> + +int main(int argc, char **argv) { + x264_t *h; + h = x264_encoder_open(NULL); + x264_encoder_close(h); + return 0; +} diff --git a/test cases/common/161 dolphin option/meson.build b/test cases/common/161 dolphin option/meson.build new file mode 100644 index 0000000..7f5211a --- /dev/null +++ b/test cases/common/161 dolphin option/meson.build @@ -0,0 +1,8 @@ +project('dolphin option', 'c') + +x264_dep = dependency('x264', options : ['video', 'patented']) + +exe = executable('encprog', 'encprog.c', + dependencies : x264_dep) +test('enc test', exe) + diff --git a/test cases/common/161 dolphin option/meson_options.txt b/test cases/common/161 dolphin option/meson_options.txt new file mode 100644 index 0000000..55076b4 --- /dev/null +++ b/test cases/common/161 dolphin option/meson_options.txt @@ -0,0 +1,2 @@ +option('video', type : 'dolphin') +option('patented', type : 'dolphin', value : 'disabled') |