summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/rewriter.py12
-rw-r--r--test cases/rewrite/8 kwargs dict/info.json14
-rw-r--r--test cases/rewrite/8 kwargs dict/meson.build10
-rw-r--r--unittests/rewritetests.py17
4 files changed, 52 insertions, 1 deletions
diff --git a/mesonbuild/rewriter.py b/mesonbuild/rewriter.py
index 33baefdb3..4a237bd7b 100644
--- a/mesonbuild/rewriter.py
+++ b/mesonbuild/rewriter.py
@@ -16,7 +16,7 @@ from .interpreterbase.helpers import flatten
from mesonbuild.mesonlib import MesonException, setup_vsenv, relpath
from . import mlog, environment
from functools import wraps
-from .mparser import Token, ArrayNode, ArgumentNode, ArithmeticNode, AssignmentNode, BaseNode, StringNode, BooleanNode, ElementaryNode, IdNode, FunctionNode, PlusAssignmentNode
+from .mparser import Token, ArrayNode, ArgumentNode, ArithmeticNode, AssignmentNode, BaseNode, StringNode, BooleanNode, DictNode, ElementaryNode, IdNode, FunctionNode, PlusAssignmentNode
from .mintro import IntrospectionEncoder
import json, os, re, sys, codecs
import typing as T
@@ -569,6 +569,16 @@ class Rewriter:
element = i.value
data_list += [element]
info_data[key] = data_list
+ elif isinstance(val, DictNode):
+ data_dict = {}
+ for k, v in val.args.kwargs.items():
+ if not isinstance(k, StringNode):
+ continue
+ value = None
+ if isinstance(v, ElementaryNode):
+ value = v.value
+ data_dict[k.value] = value
+ info_data[key] = data_dict
self.add_info('kwargs', '{}#{}'.format(cmd['function'], cmd['id']), info_data)
return # Nothing else to do
diff --git a/test cases/rewrite/8 kwargs dict/info.json b/test cases/rewrite/8 kwargs dict/info.json
new file mode 100644
index 000000000..11a9e1a6e
--- /dev/null
+++ b/test cases/rewrite/8 kwargs dict/info.json
@@ -0,0 +1,14 @@
+[
+ {
+ "type": "kwargs",
+ "function": "project",
+ "id": "/",
+ "operation": "info"
+ },
+ {
+ "type": "kwargs",
+ "function": "dependency",
+ "id": "dep1",
+ "operation": "info"
+ }
+]
diff --git a/test cases/rewrite/8 kwargs dict/meson.build b/test cases/rewrite/8 kwargs dict/meson.build
new file mode 100644
index 000000000..1c5f25b6d
--- /dev/null
+++ b/test cases/rewrite/8 kwargs dict/meson.build
@@ -0,0 +1,10 @@
+project(
+ 'rewritetest', 'cpp',
+ version: '0.0.1',
+ default_options: {
+ 'c_std': 'c11',
+ 'cpp_std': 'c++17',
+ },
+)
+
+dep1 = dependency('zlib', required: false, default_options: {'foo': 'bar'})
diff --git a/unittests/rewritetests.py b/unittests/rewritetests.py
index 7cfe6c0fb..84a6baf56 100644
--- a/unittests/rewritetests.py
+++ b/unittests/rewritetests.py
@@ -289,6 +289,23 @@ class RewriterTests(BasePlatformTests):
}
self.assertDictEqual(out, expected)
+ def test_kwargs_info_dict(self):
+ self.prime('8 kwargs dict')
+ out = self.rewrite(self.builddir, os.path.join(self.builddir, 'info.json'))
+ expected = {
+ 'kwargs': {
+ 'project#/': {
+ 'default_options': {'c_std': 'c11', 'cpp_std': 'c++17'},
+ 'version': '0.0.1'
+ },
+ 'dependency#dep1': {
+ 'default_options': {'foo': 'bar'},
+ 'required': False
+ }
+ }
+ }
+ self.assertDictEqual(out, expected)
+
def test_kwargs_set(self):
self.prime('3 kwargs')
self.rewrite(self.builddir, os.path.join(self.builddir, 'set.json'))