diff options
-rw-r--r-- | mesonbuild/rewriter.py | 13 | ||||
-rwxr-xr-x | run_unittests.py | 11 |
2 files changed, 24 insertions, 0 deletions
diff --git a/mesonbuild/rewriter.py b/mesonbuild/rewriter.py index 2619aae..b959557 100644 --- a/mesonbuild/rewriter.py +++ b/mesonbuild/rewriter.py @@ -552,6 +552,19 @@ class Rewriter: if cmd['debug']: pprint(target) + # Make source paths relative to the current subdir + def rel_source(src: str) -> str: + subdir = os.path.abspath(os.path.join(self.sourcedir, target['subdir'])) + if os.path.isabs(src): + return os.path.relpath(src, subdir) + elif not os.path.exists(src): + return src # Trust the user when the source doesn't exist + # Make sure that the path is relative to the subdir + return os.path.relpath(os.path.abspath(src), subdir) + + if target is not None: + cmd['sources'] = [rel_source(x) for x in cmd['sources']] + # Utility function to get a list of the sources from a node def arg_list_from_node(n): args = [] diff --git a/run_unittests.py b/run_unittests.py index 90a726b..9c4d904 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -5261,6 +5261,17 @@ class RewriterTests(BasePlatformTests): out = self.extract_test_data(out) self.assertDictEqual(out, expected) + def test_target_add_sources_abs(self): + self.prime('1 basic') + abs_src = [os.path.join(self.builddir, x) for x in ['a1.cpp', 'a2.cpp', 'a6.cpp']] + add = json.dumps([{"type": "target", "target": "trivialprog1", "operation": "src_add", "sources": abs_src}]) + inf = json.dumps([{"type": "target", "target": "trivialprog1", "operation": "info"}]) + self.rewrite(self.builddir, add) + out = self.rewrite(self.builddir, inf) + out = self.extract_test_data(out) + expected = {'target': {'trivialprog1@exe': {'name': 'trivialprog1', 'sources': ['main.cpp', 'fileA.cpp', 'a1.cpp', 'a2.cpp', 'a6.cpp']}}} + self.assertDictEqual(out, expected) + def test_target_remove_sources(self): self.prime('1 basic') out = self.rewrite(self.builddir, os.path.join(self.builddir, 'rmSrc.json')) |