aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorDaniel Mensinger <daniel@mensinger-ka.de>2019-01-30 16:16:08 +0100
committerDaniel Mensinger <daniel@mensinger-ka.de>2019-01-31 15:43:04 +0100
commit8224ecfbe6e1811680113740341a277407904eb9 (patch)
treeba7bb8e00f088cf7b60970485d88d2c7bb895749 /mesonbuild
parent4bfe0a25681f1abb8710aba1a89220dc328ee589 (diff)
downloadmeson-8224ecfbe6e1811680113740341a277407904eb9.zip
meson-8224ecfbe6e1811680113740341a277407904eb9.tar.gz
meson-8224ecfbe6e1811680113740341a277407904eb9.tar.bz2
Some fixes and assignment based target find
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/ast/interpreter.py4
-rw-r--r--mesonbuild/ast/introspection.py4
-rw-r--r--mesonbuild/rewriter.py24
3 files changed, 26 insertions, 6 deletions
diff --git a/mesonbuild/ast/interpreter.py b/mesonbuild/ast/interpreter.py
index 2071432..b527e37 100644
--- a/mesonbuild/ast/interpreter.py
+++ b/mesonbuild/ast/interpreter.py
@@ -103,7 +103,7 @@ class AstInterpreter(interpreterbase.InterpreterBase):
prev_subdir = self.subdir
subdir = os.path.join(prev_subdir, args[0])
absdir = os.path.join(self.source_root, subdir)
- buildfilename = os.path.join(self.subdir, environment.build_filename)
+ buildfilename = os.path.join(subdir, environment.build_filename)
absname = os.path.join(self.source_root, buildfilename)
symlinkless_dir = os.path.realpath(absdir)
if symlinkless_dir in self.visited_subdirs:
@@ -118,7 +118,7 @@ class AstInterpreter(interpreterbase.InterpreterBase):
code = f.read()
assert(isinstance(code, str))
try:
- codeblock = mparser.Parser(code, self.subdir).parse()
+ codeblock = mparser.Parser(code, subdir).parse()
except mesonlib.MesonException as me:
me.file = buildfilename
raise me
diff --git a/mesonbuild/ast/introspection.py b/mesonbuild/ast/introspection.py
index 5d0ec5a..0a4d73a 100644
--- a/mesonbuild/ast/introspection.py
+++ b/mesonbuild/ast/introspection.py
@@ -51,6 +51,7 @@ class IntrospectionInterpreter(AstInterpreter):
self.default_options = {'backend': self.backend}
self.project_data = {}
self.targets = []
+ self.project_node = None
self.funcs.update({
'add_languages': self.func_add_languages,
@@ -65,6 +66,9 @@ class IntrospectionInterpreter(AstInterpreter):
})
def func_project(self, node, args, kwargs):
+ if self.project_node:
+ raise InvalidArguments('Second call to project()')
+ self.project_node = node
if len(args) < 1:
raise InvalidArguments('Not enough arguments to project(). Needs at least the project name.')
diff --git a/mesonbuild/rewriter.py b/mesonbuild/rewriter.py
index 277835c..3426896 100644
--- a/mesonbuild/rewriter.py
+++ b/mesonbuild/rewriter.py
@@ -99,10 +99,26 @@ class Rewriter:
self.interpreter.ast.accept(self.id_generator)
def find_target(self, target: str):
- for i in self.interpreter.targets:
- if target == i['name'] or target == i['id']:
- return i
- return None
+ def check_list(name: str):
+ for i in self.interpreter.targets:
+ if name == i['name'] or name == i['id']:
+ return i
+ return None
+
+ tgt = check_list(target)
+ if tgt is not None:
+ return tgt
+
+ # Check the assignments
+ if target in self.interpreter.assignments:
+ node = self.interpreter.assignments[target][0]
+ print(node)
+ if isinstance(node, mparser.FunctionNode):
+ if node.func_name in ['executable', 'jar', 'library', 'shared_library', 'shared_module', 'static_library', 'both_libraries']:
+ name = self.interpreter.flatten_args(node.args)[0]
+ tgt = check_list(name)
+
+ return tgt
@RequiredKeys(rewriter_keys['target'])
def process_target(self, cmd):