summaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/interpreter.py')
-rw-r--r--mesonbuild/interpreter.py21
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):