Support multiple args in error()
Seems it got forgotten when that was added to warnings() and message(). Fixes: #8414.
This commit is contained in:
parent
4e5efd3897
commit
cef5cab23c
|
@ -580,6 +580,9 @@ Returns a [disabler object](#disabler-object).
|
|||
|
||||
Print the argument string and halts the build process.
|
||||
|
||||
*(since 0.58.0)* Can take more than one argument that will be separated by
|
||||
space.
|
||||
|
||||
### environment()
|
||||
|
||||
``` meson
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
## `error()` with multiple arguments
|
||||
|
||||
Just like `warning()` and `message()`, `error()` can now take more than one
|
||||
argument that will be separated by space.
|
|
@ -61,16 +61,16 @@ permitted_method_kwargs = {
|
|||
'sources'},
|
||||
}
|
||||
|
||||
def stringifyUserArguments(args):
|
||||
def stringifyUserArguments(args, quote=False):
|
||||
if isinstance(args, list):
|
||||
return '[%s]' % ', '.join([stringifyUserArguments(x) for x in args])
|
||||
return '[%s]' % ', '.join([stringifyUserArguments(x, True) for x in args])
|
||||
elif isinstance(args, dict):
|
||||
return '{%s}' % ', '.join(['%s : %s' % (stringifyUserArguments(k), stringifyUserArguments(v)) for k, v in args.items()])
|
||||
return '{%s}' % ', '.join(['%s : %s' % (stringifyUserArguments(k, True), stringifyUserArguments(v, True)) for k, v in args.items()])
|
||||
elif isinstance(args, int):
|
||||
return str(args)
|
||||
elif isinstance(args, str):
|
||||
return "'%s'" % args
|
||||
raise InvalidArguments('Function accepts only strings, integers, lists and lists thereof.')
|
||||
return f"'{args}'" if quote else args
|
||||
raise InvalidArguments('Function accepts only strings, integers, lists, dictionaries and lists thereof.')
|
||||
|
||||
|
||||
class OverrideProgram(dependencies.ExternalProgram):
|
||||
|
@ -3276,26 +3276,12 @@ external dependencies (including libraries) must go to "dependencies".''')
|
|||
success &= self.add_languages(args, required, MachineChoice.HOST)
|
||||
return success
|
||||
|
||||
def get_message_string_arg(self, arg):
|
||||
if isinstance(arg, list):
|
||||
argstr = stringifyUserArguments(arg)
|
||||
elif isinstance(arg, dict):
|
||||
argstr = stringifyUserArguments(arg)
|
||||
elif isinstance(arg, str):
|
||||
argstr = arg
|
||||
elif isinstance(arg, int):
|
||||
argstr = str(arg)
|
||||
else:
|
||||
raise InvalidArguments('Function accepts only strings, integers, lists and lists thereof.')
|
||||
|
||||
return argstr
|
||||
|
||||
@noArgsFlattening
|
||||
@noKwargs
|
||||
def func_message(self, node, args, kwargs):
|
||||
if len(args) > 1:
|
||||
FeatureNew.single_use('message with more than one argument', '0.54.0', self.subproject)
|
||||
args_str = [self.get_message_string_arg(i) for i in args]
|
||||
args_str = [stringifyUserArguments(i) for i in args]
|
||||
self.message_impl(args_str)
|
||||
|
||||
def message_impl(self, args):
|
||||
|
@ -3357,13 +3343,16 @@ external dependencies (including libraries) must go to "dependencies".''')
|
|||
def func_warning(self, node, args, kwargs):
|
||||
if len(args) > 1:
|
||||
FeatureNew.single_use('warning with more than one argument', '0.54.0', self.subproject)
|
||||
args_str = [self.get_message_string_arg(i) for i in args]
|
||||
args_str = [stringifyUserArguments(i) for i in args]
|
||||
mlog.warning(*args_str, location=node)
|
||||
|
||||
@noArgsFlattening
|
||||
@noKwargs
|
||||
def func_error(self, node, args, kwargs):
|
||||
self.validate_arguments(args, 1, [str])
|
||||
raise InterpreterException('Problem encountered: ' + args[0])
|
||||
if len(args) > 1:
|
||||
FeatureNew.single_use('error with more than one argument', '0.58.0', self.subproject)
|
||||
args_str = [stringifyUserArguments(i) for i in args]
|
||||
raise InterpreterException('Problem encountered: ' + ' '.join(args_str))
|
||||
|
||||
@noKwargs
|
||||
@noPosargs
|
||||
|
|
|
@ -5864,6 +5864,11 @@ class FailureTests(BasePlatformTests):
|
|||
"meson.override_dependency('zlib', declare_dependency())",
|
||||
"""Tried to override dependency 'zlib' which has already been resolved or overridden""")
|
||||
|
||||
def test_error_func(self):
|
||||
self.assertMesonRaises("error('a', 'b', ['c', ['d', {'e': 'f'}]], 'g')",
|
||||
"Problem encountered: a b \['c', \['d', {'e' : 'f'}\]\] g")
|
||||
|
||||
|
||||
@unittest.skipUnless(is_windows() or is_cygwin(), "requires Windows (or Windows via Cygwin)")
|
||||
class WindowsTests(BasePlatformTests):
|
||||
'''
|
||||
|
|
Loading…
Reference in New Issue