diff options
Diffstat (limited to 'mesonbuild/interpreter.py')
| -rw-r--r-- | mesonbuild/interpreter.py | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 5b9bb41fe..80d482e78 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -2022,9 +2022,11 @@ class Interpreter(InterpreterBase): raise InterpreterException('Unknown target_type.') def func_vcs_tag(self, node, args, kwargs): - fallback = kwargs.pop('fallback', None) + if 'input' not in kwargs or 'output' not in kwargs: + raise InterpreterException('Keyword arguments input and output must exist') + fallback = kwargs.pop('fallback', self.project_version) if not isinstance(fallback, str): - raise InterpreterException('Keyword argument fallback must exist and be a string.') + raise InterpreterException('Keyword argument fallback must be a string.') replace_string = kwargs.pop('replace_string', '@VCS_TAG@') regex_selector = '(.*)' # default regex selector for custom command: use complete output vcs_cmd = kwargs.get('command', None) @@ -2215,10 +2217,12 @@ class Interpreter(InterpreterBase): subdir = os.path.join(prev_subdir, args[0]) if os.path.isabs(subdir): raise InvalidArguments('Subdir argument must be a relative path.') - if subdir in self.visited_subdirs: + absdir = os.path.join(self.environment.get_source_dir(), subdir) + symlinkless_dir = os.path.realpath(absdir) + if symlinkless_dir in self.visited_subdirs: raise InvalidArguments('Tried to enter directory "%s", which has already been visited.' % subdir) - self.visited_subdirs[subdir] = True + self.visited_subdirs[symlinkless_dir] = True self.subdir = subdir os.makedirs(os.path.join(self.environment.build_dir, subdir), exist_ok=True) buildfilename = os.path.join(self.subdir, environment.build_filename) |
