aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Mensinger <daniel@mensinger-ka.de>2019-01-31 15:57:02 +0100
committerDaniel Mensinger <daniel@mensinger-ka.de>2019-01-31 15:57:02 +0100
commit8c364952af536cbf9271e76d74501091f2d6ae45 (patch)
tree4bfb52910c78840e4bd3845e62a55fc7b142646b
parent56558652460104cbc74a4f1fa328d3aa34eebf0c (diff)
downloadmeson-8c364952af536cbf9271e76d74501091f2d6ae45.zip
meson-8c364952af536cbf9271e76d74501091f2d6ae45.tar.gz
meson-8c364952af536cbf9271e76d74501091f2d6ae45.tar.bz2
Added dependecy kwargs support
-rw-r--r--mesonbuild/ast/introspection.py12
-rw-r--r--mesonbuild/rewriter.py26
-rwxr-xr-xrun_unittests.py15
-rw-r--r--test cases/rewrite/3 kwargs/info.json6
-rw-r--r--test cases/rewrite/3 kwargs/meson.build2
-rw-r--r--test cases/rewrite/3 kwargs/set.json10
6 files changed, 66 insertions, 5 deletions
diff --git a/mesonbuild/ast/introspection.py b/mesonbuild/ast/introspection.py
index 67a0fe7..44c00b7 100644
--- a/mesonbuild/ast/introspection.py
+++ b/mesonbuild/ast/introspection.py
@@ -51,10 +51,12 @@ class IntrospectionInterpreter(AstInterpreter):
self.default_options = {'backend': self.backend}
self.project_data = {}
self.targets = []
+ self.dependencies = []
self.project_node = None
self.funcs.update({
'add_languages': self.func_add_languages,
+ 'dependency': self.func_dependency,
'executable': self.func_executable,
'jar': self.func_jar,
'library': self.func_library,
@@ -129,6 +131,16 @@ class IntrospectionInterpreter(AstInterpreter):
if lang not in self.coredata.compilers:
self.environment.detect_compilers(lang, need_cross_compiler)
+ def func_dependency(self, node, args, kwargs):
+ args = self.flatten_args(args)
+ if not args:
+ return
+ name = args[0]
+ self.dependencies += [{
+ 'name': name,
+ 'node': node
+ }]
+
def build_target(self, node, args, kwargs, targetclass):
if not args:
return
diff --git a/mesonbuild/rewriter.py b/mesonbuild/rewriter.py
index 4a7f595..2e8aedd 100644
--- a/mesonbuild/rewriter.py
+++ b/mesonbuild/rewriter.py
@@ -345,6 +345,27 @@ class Rewriter:
return tgt
+ def find_dependency(self, dependency: str):
+ def check_list(name: str):
+ for i in self.interpreter.dependencies:
+ if name == i['name']:
+ return i
+ return None
+
+ dep = check_list(dependency)
+ if dep is not None:
+ return dep
+
+ # Check the assignments
+ if dependency in self.interpreter.assignments:
+ node = self.interpreter.assignments[dependency][0]
+ if isinstance(node, mparser.FunctionNode):
+ if node.func_name in ['dependency']:
+ name = self.interpreter.flatten_args(node.args)[0]
+ dep = check_list(name)
+
+ return dep
+
@RequiredKeys(rewriter_keys['kwargs'])
def process_kwargs(self, cmd):
mlog.log('Processing function type', mlog.bold(cmd['function']), 'with id', mlog.cyan("'" + cmd['id'] + "'"))
@@ -364,6 +385,11 @@ class Rewriter:
if tmp:
node = tmp['node']
arg_node = node.args
+ elif cmd['function'] == 'dependency':
+ tmp = self.find_dependency(cmd['id'])
+ if tmp:
+ node = tmp['node']
+ arg_node = node.args
if not node:
mlog.error('Unable to find the function node')
assert(isinstance(node, mparser.FunctionNode))
diff --git a/run_unittests.py b/run_unittests.py
index 18290f2..c852708 100755
--- a/run_unittests.py
+++ b/run_unittests.py
@@ -5137,7 +5137,8 @@ class RewriterTests(BasePlatformTests):
expected = {
'kwargs': {
'project#': {'version': '0.0.1'},
- 'target#tgt1': {'build_by_default': True}
+ 'target#tgt1': {'build_by_default': True},
+ 'dependency#dep1': {'required': False}
}
}
self.assertDictEqual(out, expected)
@@ -5150,7 +5151,8 @@ class RewriterTests(BasePlatformTests):
expected = {
'kwargs': {
'project#': {'version': '0.0.2', 'meson_version': '0.50.0', 'license': ['GPL', 'MIT']},
- 'target#tgt1': {'build_by_default': False, 'build_rpath': '/usr/local', 'dependencies': 'dep1'}
+ 'target#tgt1': {'build_by_default': False, 'build_rpath': '/usr/local', 'dependencies': 'dep1'},
+ 'dependency#dep1': {'required': True, 'method': 'cmake'}
}
}
self.assertDictEqual(out, expected)
@@ -5163,7 +5165,8 @@ class RewriterTests(BasePlatformTests):
expected = {
'kwargs': {
'project#': {'version': '0.0.1', 'license': ['GPL', 'MIT', 'BSD']},
- 'target#tgt1': {'build_by_default': True}
+ 'target#tgt1': {'build_by_default': True},
+ 'dependency#dep1': {'required': False}
}
}
self.assertDictEqual(out, expected)
@@ -5176,7 +5179,8 @@ class RewriterTests(BasePlatformTests):
expected = {
'kwargs': {
'project#': {'version': '0.0.1', 'license': 'GPL'},
- 'target#tgt1': {'build_by_default': True}
+ 'target#tgt1': {'build_by_default': True},
+ 'dependency#dep1': {'required': False}
}
}
self.assertDictEqual(out, expected)
@@ -5189,7 +5193,8 @@ class RewriterTests(BasePlatformTests):
expected = {
'kwargs': {
'project#': {},
- 'target#tgt1': {}
+ 'target#tgt1': {},
+ 'dependency#dep1': {'required': False}
}
}
self.assertDictEqual(out, expected)
diff --git a/test cases/rewrite/3 kwargs/info.json b/test cases/rewrite/3 kwargs/info.json
index 55a543e..5fd1a64 100644
--- a/test cases/rewrite/3 kwargs/info.json
+++ b/test cases/rewrite/3 kwargs/info.json
@@ -10,5 +10,11 @@
"function": "target",
"id": "tgt1",
"operation": "info"
+ },
+ {
+ "type": "kwargs",
+ "function": "dependency",
+ "id": "dep1",
+ "operation": "info"
}
]
diff --git a/test cases/rewrite/3 kwargs/meson.build b/test cases/rewrite/3 kwargs/meson.build
index 3090f7d..13b336c 100644
--- a/test cases/rewrite/3 kwargs/meson.build
+++ b/test cases/rewrite/3 kwargs/meson.build
@@ -1,5 +1,7 @@
project('rewritetest', 'cpp', version: '0.0.1')
+# Find ZLIB
dep1 = dependency('zlib', required: false)
+# Make a test exe
tgt1 = executable('helloWorld', 'main.cpp', build_by_default: true)
diff --git a/test cases/rewrite/3 kwargs/set.json b/test cases/rewrite/3 kwargs/set.json
index 9bc87a2..7d60c4f 100644
--- a/test cases/rewrite/3 kwargs/set.json
+++ b/test cases/rewrite/3 kwargs/set.json
@@ -20,5 +20,15 @@
"build_rpath": "/usr/local",
"dependencies": "dep1"
}
+ },
+ {
+ "type": "kwargs",
+ "function": "dependency",
+ "id": "zlib",
+ "operation": "set",
+ "kwargs": {
+ "required": true,
+ "method": "cmake"
+ }
}
]