diff options
-rw-r--r-- | mesonbuild/ast/interpreter.py | 4 | ||||
-rw-r--r-- | mesonbuild/ast/introspection.py | 4 | ||||
-rw-r--r-- | mesonbuild/rewriter.py | 24 | ||||
-rwxr-xr-x | run_unittests.py | 12 | ||||
-rw-r--r-- | test cases/rewrite/1 basic/info.json | 8 |
5 files changed, 39 insertions, 13 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): diff --git a/run_unittests.py b/run_unittests.py index f1bf5c6..5539a70 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -5034,9 +5034,15 @@ class RewriterTests(BasePlatformTests): def rewrite(self, directory, args): if isinstance(args, str): args = [args] - out = subprocess.check_output(self.rewrite_command + ['--sourcedir', directory] + args, - universal_newlines=True) - return out + command = self.rewrite_command + ['--sourcedir', directory] + args + p = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, + universal_newlines=True, timeout=60) + print(p.stdout) + if p.returncode != 0: + if 'MESON_SKIP_TEST' in p.stdout: + raise unittest.SkipTest('Project requested skipping.') + raise subprocess.CalledProcessError(p.returncode, command, output=p.stdout) + return p.stdout def extract_test_data(self, out): lines = out.split('\n') diff --git a/test cases/rewrite/1 basic/info.json b/test cases/rewrite/1 basic/info.json index be2a873..9271185 100644 --- a/test cases/rewrite/1 basic/info.json +++ b/test cases/rewrite/1 basic/info.json @@ -6,7 +6,7 @@ }, { "type": "target", - "target": "trivialprog2", + "target": "exe2", "operation": "test" }, { @@ -16,7 +16,7 @@ }, { "type": "target", - "target": "trivialprog4", + "target": "exe4", "operation": "test" }, { @@ -26,7 +26,7 @@ }, { "type": "target", - "target": "trivialprog6", + "target": "exe6", "operation": "test" }, { @@ -36,7 +36,7 @@ }, { "type": "target", - "target": "trivialprog8", + "target": "exe8", "operation": "test" }, { |