Added dependecy kwargs support

pull/4858/head
Daniel Mensinger 6 years ago
parent 5655865246
commit 8c364952af
No known key found for this signature in database
GPG Key ID: 54DD94C131E277D4
  1. 12
      mesonbuild/ast/introspection.py
  2. 26
      mesonbuild/rewriter.py
  3. 15
      run_unittests.py
  4. 6
      test cases/rewrite/3 kwargs/info.json
  5. 2
      test cases/rewrite/3 kwargs/meson.build
  6. 10
      test cases/rewrite/3 kwargs/set.json

@ -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

@ -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))

@ -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)

@ -10,5 +10,11 @@
"function": "target",
"id": "tgt1",
"operation": "info"
},
{
"type": "kwargs",
"function": "dependency",
"id": "dep1",
"operation": "info"
}
]

@ -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)

@ -20,5 +20,15 @@
"build_rpath": "/usr/local",
"dependencies": "dep1"
}
},
{
"type": "kwargs",
"function": "dependency",
"id": "zlib",
"operation": "set",
"kwargs": {
"required": true,
"method": "cmake"
}
}
]

Loading…
Cancel
Save