aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/interpreter/interpreter.py2
-rw-r--r--test cases/unit/106 subproject symlink/main.c6
-rw-r--r--test cases/unit/106 subproject symlink/meson.build8
-rw-r--r--test cases/unit/106 subproject symlink/symlinked_subproject/meson.build3
-rw-r--r--test cases/unit/106 subproject symlink/symlinked_subproject/src.c4
-rw-r--r--unittests/allplatformstests.py13
6 files changed, 35 insertions, 1 deletions
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py
index 05614aa..6e25b9b 100644
--- a/mesonbuild/interpreter/interpreter.py
+++ b/mesonbuild/interpreter/interpreter.py
@@ -2851,7 +2851,7 @@ Try setting b_lundef to false instead.'''.format(self.coredata.options[OptionKey
# subproject files, as long as they are scheduled to be installed.
if validate_installable_file(norm):
return
- norm = Path(srcdir, subdir, fname).resolve()
+ norm = Path(os.path.abspath(Path(srcdir, subdir, fname)))
if os.path.isdir(norm):
inputtype = 'directory'
else:
diff --git a/test cases/unit/106 subproject symlink/main.c b/test cases/unit/106 subproject symlink/main.c
new file mode 100644
index 0000000..62bd4b4
--- /dev/null
+++ b/test cases/unit/106 subproject symlink/main.c
@@ -0,0 +1,6 @@
+extern int foo(void);
+
+int main(void)
+{
+ return foo();
+}
diff --git a/test cases/unit/106 subproject symlink/meson.build b/test cases/unit/106 subproject symlink/meson.build
new file mode 100644
index 0000000..51c78c7
--- /dev/null
+++ b/test cases/unit/106 subproject symlink/meson.build
@@ -0,0 +1,8 @@
+project('foo', 'c')
+
+symlinked_subproject = subproject('symlinked_subproject')
+
+executable('foo',
+ sources : 'main.c',
+ dependencies : symlinked_subproject.get_variable('dep')
+)
diff --git a/test cases/unit/106 subproject symlink/symlinked_subproject/meson.build b/test cases/unit/106 subproject symlink/symlinked_subproject/meson.build
new file mode 100644
index 0000000..61440c7
--- /dev/null
+++ b/test cases/unit/106 subproject symlink/symlinked_subproject/meson.build
@@ -0,0 +1,3 @@
+project('symlinked_subproject', 'c', version : '1.0.0')
+
+dep = declare_dependency(sources : 'src.c')
diff --git a/test cases/unit/106 subproject symlink/symlinked_subproject/src.c b/test cases/unit/106 subproject symlink/symlinked_subproject/src.c
new file mode 100644
index 0000000..97d7ad1
--- /dev/null
+++ b/test cases/unit/106 subproject symlink/symlinked_subproject/src.c
@@ -0,0 +1,4 @@
+int foo(void)
+{
+ return 0;
+}
diff --git a/unittests/allplatformstests.py b/unittests/allplatformstests.py
index 42bc60e..71e919e 100644
--- a/unittests/allplatformstests.py
+++ b/unittests/allplatformstests.py
@@ -4263,3 +4263,16 @@ class AllPlatformTests(BasePlatformTests):
if self.backend is Backend.ninja:
self.assertIn('Generating file.txt with a custom command', out)
self.assertIn('Generating subdir/file.txt with a custom command', out)
+
+ def test_symlinked_subproject(self):
+ testdir = os.path.join(self.unit_test_dir, '106 subproject symlink')
+ subproject_dir = os.path.join(testdir, 'subprojects')
+ subproject = os.path.join(testdir, 'symlinked_subproject')
+ symlinked_subproject = os.path.join(testdir, 'subprojects', 'symlinked_subproject')
+ if not os.path.exists(subproject_dir):
+ os.mkdir(subproject_dir)
+ os.symlink(subproject, symlinked_subproject)
+ self.addCleanup(os.remove, symlinked_subproject)
+
+ self.init(testdir)
+ self.build()