aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2017-10-29 18:05:03 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2017-10-29 18:05:03 +0200
commit53c1afffaf2833e6d1a29fa1df833e77e44841ec (patch)
treeee6a2b899160bf722662fb50995c008af81c08b2 /mesonbuild/interpreter.py
parentf21034dfea0366f82709ed35c468add8f0e2c7f9 (diff)
downloadmeson-53c1afffaf2833e6d1a29fa1df833e77e44841ec.zip
meson-53c1afffaf2833e6d1a29fa1df833e77e44841ec.tar.gz
meson-53c1afffaf2833e6d1a29fa1df833e77e44841ec.tar.bz2
Evaluate subproject path correctly. Closes #2481.
Diffstat (limited to 'mesonbuild/interpreter.py')
-rw-r--r--mesonbuild/interpreter.py21
1 files changed, 15 insertions, 6 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 727c688..52f178d 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -2799,6 +2799,16 @@ different subdirectory.
super().run()
mlog.log('Build targets in project:', mlog.bold(str(len(self.build.targets))))
+ def evaluate_subproject_info(self, path_from_source_root, subproject_dirname):
+ depth = 0
+ subproj_name = ''
+ segs = path_from_source_root.split(os.path.sep)
+ while segs and segs[0] == subproject_dirname:
+ depth += 1
+ subproj_name = segs[1]
+ segs = segs[2:]
+ return (depth, subproj_name)
+
# Check that the indicated file is within the same subproject
# as we currently are. This is to stop people doing
# nasty things like:
@@ -2820,17 +2830,16 @@ different subdirectory.
return
norm = os.path.relpath(norm, self.environment.source_dir)
assert(not os.path.isabs(norm))
- segments = norm.split(os.path.sep)
- num_sps = segments.count(self.subproject_dir)
+ (num_sps, sproj_name) = self.evaluate_subproject_info(norm, self.subproject_dir)
+ plain_filename = os.path.split(norm)[-1]
if num_sps == 0:
if self.subproject == '':
return
- raise InterpreterException('Sandbox violation: Tried to grab file %s from a different subproject.' % segments[-1])
+ raise InterpreterException('Sandbox violation: Tried to grab file %s from a different subproject.' % plain_filename)
if num_sps > 1:
- raise InterpreterException('Sandbox violation: Tried to grab file %s from a nested subproject.' % segments[-1])
- sproj_name = segments[segments.index(self.subproject_dir) + 1]
+ raise InterpreterException('Sandbox violation: Tried to grab file %s from a nested subproject.' % plain_filename)
if sproj_name != self.subproject_directory_name:
- raise InterpreterException('Sandbox violation: Tried to grab file %s from a different subproject.' % segments[-1])
+ raise InterpreterException('Sandbox violation: Tried to grab file %s from a different subproject.' % plain_filename)
def source_strings_to_files(self, sources):
results = []