diff options
Diffstat (limited to 'mesonbuild/interpreter.py')
| -rw-r--r-- | mesonbuild/interpreter.py | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index a9ced7d00..f33d437bf 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -295,7 +295,7 @@ class DependencyHolder(InterpreterObject, ObjectHolder): varname = args[0] if not isinstance(varname, str): raise InterpreterException('Variable name must be a string.') - return self.held_object.get_pkgconfig_variable(varname) + return self.held_object.get_pkgconfig_variable(varname, kwargs) def configtool_method(self, args, kwargs): args = listify(args) @@ -2147,6 +2147,12 @@ to directly access options of other subprojects.''') def func_dependency(self, node, args, kwargs): self.validate_arguments(args, 1, [str]) name = args[0] + + if name == '': + if kwargs.get('required', True): + raise InvalidArguments('Dependency is both required and not-found') + return DependencyHolder(Dependency('not-found', {})) + if '<' in name or '>' in name or '=' in name: raise InvalidArguments('Characters <, > and = are forbidden in dependency names. To specify' 'version\n requirements use the \'version\' keyword argument instead.') @@ -3005,12 +3011,19 @@ different subdirectory. def format_string(self, templ, args): if isinstance(args, mparser.ArgumentNode): args = args.arguments - for (i, arg) in enumerate(args): + arg_strings = [] + for arg in args: arg = self.evaluate_statement(arg) if isinstance(arg, bool): # Python boolean is upper case. arg = str(arg).lower() - templ = templ.replace('@{}@'.format(i), str(arg)) - return templ + arg_strings.append(str(arg)) + + def arg_replace(match): + idx = int(match.group(1)) + if idx >= len(arg_strings): + raise InterpreterException('Format placeholder @{}@ out of range.'.format(idx)) + return arg_strings[idx] + return re.sub(r'@(\d+)@', arg_replace, templ) # Only permit object extraction from the same subproject def validate_extraction(self, buildtarget): |
