diff options
Diffstat (limited to 'dev-build/meson-format-array/files/meson-format-array.py')
-rw-r--r-- | dev-build/meson-format-array/files/meson-format-array.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/dev-build/meson-format-array/files/meson-format-array.py b/dev-build/meson-format-array/files/meson-format-array.py new file mode 100644 index 000000000000..84a490cf29eb --- /dev/null +++ b/dev-build/meson-format-array/files/meson-format-array.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 +# Copyright 2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +import itertools +import shlex +import sys + + +def quote(s): + """ Surround a value with quotes, escape embedded quotes. + >>> quote("foo'bar") + "'foo\\\\'bar'" + """ + + return "'" + s.replace("\\", "\\\\").replace("'", "\\'") + "'" + + +def format_array(args): + """ Format shell-compatible expressions as a meson array. + >>> format_array(['-O2 -pipe -DFOO="bar baz"']) + "['-O2', '-pipe', '-DFOO=bar baz']" + """ + + # Split each argument according to shell rules + args = (shlex.split(x) for x in args) + + # Flatten the resulting list of lists + args = itertools.chain.from_iterable(args) + + # Add quotes and escape embedded quotes + args = (quote(x) for x in args) + + # Format the result + return "[" + ", ".join(args) + "]" + + +def main(args): + print(format_array(args)) + + +if __name__ == "__main__": + main(sys.argv[1:]) |