summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/build.py7
-rw-r--r--test cases/common/168 preserve gendir/meson.build5
2 files changed, 10 insertions, 2 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index 066e6aa85..7aea22927 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -1800,8 +1800,11 @@ class Generator(HoldableObject):
@staticmethod
def is_parent_path(parent: str, trial: str) -> bool:
- relpath = pathlib.PurePath(trial).relative_to(parent)
- return relpath.parts[0] != '..' # For subdirs we can only go "down".
+ try:
+ common = os.path.commonpath((parent, trial))
+ except ValueError: # Windows on different drives
+ return False
+ return pathlib.PurePath(common) == pathlib.PurePath(parent)
def process_files(self, files: T.Iterable[T.Union[str, File, 'CustomTarget', 'CustomTargetIndex', 'GeneratedList']],
state: T.Union['Interpreter', 'ModuleState'],
diff --git a/test cases/common/168 preserve gendir/meson.build b/test cases/common/168 preserve gendir/meson.build
index ce219f0d8..d543b6019 100644
--- a/test cases/common/168 preserve gendir/meson.build
+++ b/test cases/common/168 preserve gendir/meson.build
@@ -9,5 +9,10 @@ gen = generator(gprog, \
generated = gen.process('base.inp', 'com/mesonbuild/subbie.inp',
preserve_path_from : meson.current_source_dir())
+testcase expect_error('generator.process: When using preserve_path_from, all input files must be in a subdirectory of the given dir.')
+ generated = gen.process('base.inp', 'com/mesonbuild/subbie.inp',
+ preserve_path_from : meson.current_source_dir() / 'com')
+endtestcase
+
e = executable('testprog', 'testprog.c', generated)
test('testprog', e)