diff options
author | Daniel Mensinger <daniel@mensinger-ka.de> | 2019-01-30 16:16:08 +0100 |
---|---|---|
committer | Daniel Mensinger <daniel@mensinger-ka.de> | 2019-01-31 15:43:04 +0100 |
commit | 8224ecfbe6e1811680113740341a277407904eb9 (patch) | |
tree | ba7bb8e00f088cf7b60970485d88d2c7bb895749 /mesonbuild | |
parent | 4bfe0a25681f1abb8710aba1a89220dc328ee589 (diff) | |
download | meson-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.py | 4 | ||||
-rw-r--r-- | mesonbuild/ast/introspection.py | 4 | ||||
-rw-r--r-- | mesonbuild/rewriter.py | 24 |
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): |