aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/ast/interpreter.py4
-rw-r--r--mesonbuild/ast/introspection.py4
-rw-r--r--mesonbuild/rewriter.py24
-rwxr-xr-xrun_unittests.py12
-rw-r--r--test cases/rewrite/1 basic/info.json8
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"
},
{