diff options
author | Daniel Mensinger <daniel@mensinger-ka.de> | 2019-01-31 15:57:02 +0100 |
---|---|---|
committer | Daniel Mensinger <daniel@mensinger-ka.de> | 2019-01-31 15:57:02 +0100 |
commit | 8c364952af536cbf9271e76d74501091f2d6ae45 (patch) | |
tree | 4bfb52910c78840e4bd3845e62a55fc7b142646b | |
parent | 56558652460104cbc74a4f1fa328d3aa34eebf0c (diff) | |
download | meson-8c364952af536cbf9271e76d74501091f2d6ae45.zip meson-8c364952af536cbf9271e76d74501091f2d6ae45.tar.gz meson-8c364952af536cbf9271e76d74501091f2d6ae45.tar.bz2 |
Added dependecy kwargs support
-rw-r--r-- | mesonbuild/ast/introspection.py | 12 | ||||
-rw-r--r-- | mesonbuild/rewriter.py | 26 | ||||
-rwxr-xr-x | run_unittests.py | 15 | ||||
-rw-r--r-- | test cases/rewrite/3 kwargs/info.json | 6 | ||||
-rw-r--r-- | test cases/rewrite/3 kwargs/meson.build | 2 | ||||
-rw-r--r-- | test cases/rewrite/3 kwargs/set.json | 10 |
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" + } } ] |