diff options
author | Daniel Mensinger <daniel@mensinger-ka.de> | 2019-02-16 19:57:50 +0100 |
---|---|---|
committer | Daniel Mensinger <daniel@mensinger-ka.de> | 2019-02-26 09:34:58 +0100 |
commit | 9e247cb52e65dd62450990fbb9a2c3935e8f11ab (patch) | |
tree | 64ce8e9541391bbb1757f0c12b5f677b23a0650d /mesonbuild/rewriter.py | |
parent | 74bb79e26e17acbf6176e32089e7e27991f5d2d3 (diff) | |
download | meson-9e247cb52e65dd62450990fbb9a2c3935e8f11ab.zip meson-9e247cb52e65dd62450990fbb9a2c3935e8f11ab.tar.gz meson-9e247cb52e65dd62450990fbb9a2c3935e8f11ab.tar.bz2 |
rewriter: Set and delete default options
Diffstat (limited to 'mesonbuild/rewriter.py')
-rw-r--r-- | mesonbuild/rewriter.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/mesonbuild/rewriter.py b/mesonbuild/rewriter.py index 5c13471..f5f8b61 100644 --- a/mesonbuild/rewriter.py +++ b/mesonbuild/rewriter.py @@ -268,6 +268,10 @@ class MTypeIDList(MTypeList): return [mparser.IdNode] rewriter_keys = { + 'default_options': { + 'operation': (str, None, ['set', 'delete']), + 'options': (dict, {}, None) + }, 'kwargs': { 'function': (str, None, None), 'id': (str, None, None), @@ -325,6 +329,7 @@ class Rewriter: self.to_remove_nodes = [] self.to_add_nodes = [] self.functions = { + 'default_options': self.process_default_options, 'kwargs': self.process_kwargs, 'target': self.process_target, } @@ -393,6 +398,50 @@ class Rewriter: return dep + @RequiredKeys(rewriter_keys['default_options']) + def process_default_options(self, cmd): + # First, remove the old values + kwargs_cmd = { + 'function': 'project', + 'id': "", + 'operation': 'remove_regex', + 'kwargs': { + 'default_options': ['{}=.*'.format(x) for x in cmd['options'].keys()] + } + } + self.process_kwargs(kwargs_cmd) + + # Then add the new values + if cmd['operation'] != 'set': + return + + kwargs_cmd['operation'] = 'add' + kwargs_cmd['kwargs']['default_options'] = [] + + cdata = self.interpreter.coredata + options = { + **cdata.builtins, + **cdata.backend_options, + **cdata.base_options, + **cdata.compiler_options.build, + **cdata.user_options + } + + for key, val in cmd['options'].items(): + if key not in options: + mlog.error('Unknown options', mlog.bold(key), '--> skipping') + continue + + try: + val = options[key].validate_value(val) + except MesonException as e: + mlog.error('Unable to set', mlog.bold(key), mlog.red(str(e)), '--> skipping') + continue + + kwargs_cmd['kwargs']['default_options'] += ['{}={}'.format(key, val)] + + self.process_kwargs(kwargs_cmd) + @RequiredKeys(rewriter_keys['kwargs']) def process_kwargs(self, cmd): mlog.log('Processing function type', mlog.bold(cmd['function']), 'with id', mlog.cyan("'" + cmd['id'] + "'")) |