diff options
author | Xavier Claessens <xavier.claessens@collabora.com> | 2021-02-25 09:59:13 -0500 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2021-02-25 22:58:45 +0200 |
commit | cef5cab23c6fb53e4ddf0d2460cb2258ef64f6d5 (patch) | |
tree | 840f2f5c0494996fd1ccfad2ff70df9532b053d0 | |
parent | 4e5efd3897c5bd03fbcd32fcf43c82879ca8caf4 (diff) | |
download | meson-cef5cab23c6fb53e4ddf0d2460cb2258ef64f6d5.zip meson-cef5cab23c6fb53e4ddf0d2460cb2258ef64f6d5.tar.gz meson-cef5cab23c6fb53e4ddf0d2460cb2258ef64f6d5.tar.bz2 |
Support multiple args in error()
Seems it got forgotten when that was added to warnings() and message().
Fixes: #8414.
-rw-r--r-- | docs/markdown/Reference-manual.md | 3 | ||||
-rw-r--r-- | docs/markdown/snippets/error_msg.md | 4 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 35 | ||||
-rwxr-xr-x | run_unittests.py | 5 |
4 files changed, 24 insertions, 23 deletions
diff --git a/docs/markdown/Reference-manual.md b/docs/markdown/Reference-manual.md index 3693e57..4fb0b63 100644 --- a/docs/markdown/Reference-manual.md +++ b/docs/markdown/Reference-manual.md @@ -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 diff --git a/docs/markdown/snippets/error_msg.md b/docs/markdown/snippets/error_msg.md new file mode 100644 index 0000000..a17372f --- /dev/null +++ b/docs/markdown/snippets/error_msg.md @@ -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. diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 08c7424..d5a0a84 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -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 diff --git a/run_unittests.py b/run_unittests.py index a82e476..1989e93 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -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): ''' |