commit:     e6770aa6e9cd2d8fe3b833ad1844c3f3c80438af
Author:     Raul E Rangel <rrangel <AT> chromium <DOT> org>
AuthorDate: Mon Apr 23 15:53:07 2018 +0000
Commit:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Sat May  5 19:56:43 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=e6770aa6

meson.eclass: Write *FLAGS into meson cross build file

Use python's shlex to parse the flags and generate an array that is
usable by meson. This will pass the flags correctly when doing a cross
build.

Example cross file output:

[properties]
c_args = ['-O2', '-pipe', '-march=armv8-a+crc', '-mtune=cortex-a57.cortex-a53', 
'-mfpu=crypto-neon-fp-armv8', '-mfloat-abi=hard', '-g', '-fno-exceptions', 
'-fno-unwind-tables', '-fno-asynchronous-unwind-tables', '-clang-syntax']
c_link_args = ['-Wl,-O1', '-Wl,-O2', '-Wl,--as-needed']
cpp_args = ['-O2', '-O2', '-pipe', '-march=armv8-a+crc', 
'-mtune=cortex-a57.cortex-a53', '-mfpu=crypto-neon-fp-armv8', 
'-mfloat-abi=hard', '-g', '-fno-exceptions', '-fno-unwind-tables', 
'-fno-asynchronous-unwind-tables', '-clang-syntax']
cpp_link_args = ['-Wl,-O1', '-Wl,-O2', '-Wl,--as-needed']
fortran_args = ['-O2']
objc_args = []
objcpp_args = []

See https://bugs.gentoo.org/653900 for upstream patch.

BUG=b:78351764
TEST=emerge-grunt and emerge-bob and verified the flags are passed to
mosys
BRANCH=none

Change-Id: Ic3d852232ec718141b87bc0729318699f0fad4f8
Signed-off-by: Raul E Rangel <rrangel <AT> chromium.org>
Closes: https://bugs.gentoo.org/653900

 eclass/meson.eclass | 44 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/eclass/meson.eclass b/eclass/meson.eclass
index 71735fbfc67..ddceffd8c63 100644
--- a/eclass/meson.eclass
+++ b/eclass/meson.eclass
@@ -92,6 +92,41 @@ __MESON_AUTO_DEPEND=${MESON_AUTO_DEPEND} # See top of eclass
 # Optional meson arguments as Bash array; this should be defined before
 # calling meson_src_configure.
 
+
+read -d '' __MESON_ARRAY_PARSER <<"EOF"
+import shlex;
+
+# See http://mesonbuild.com/Syntax.html#strings
+def quote(str):
+       escaped = str.replace("\\\\", "\\\\\\\\").replace("'", "\\\\'")
+       return "'{}'".format(escaped)
+
+print("[{}]".format(
+       ", ".join([quote(x) for x in shlex.split(None)])))
+EOF
+
+# @FUNCTION: _meson_env_array
+# @INTERNAL
+# @DESCRIPTION:
+# Parses the command line flags and converts them into an array suitable for
+# use in a cross file.
+#
+# Input: --single-quote=\' --double-quote=\" --dollar=\$ --backtick=\`
+#        --backslash=\\ --full-word-double="Hello World"
+#        --full-word-single='Hello World'
+#        --full-word-backslash=Hello\ World
+#        --simple --unicode-8=漏 --unicode-16=饜惙 --unicode-32=饜
+#
+# Output: ['--single-quote=\'', '--double-quote="', '--dollar=$',
+#          '--backtick=`', '--backslash=\\', '--full-word-double=Hello World',
+#          '--full-word-single=Hello World',
+#          '--full-word-backslash=Hello World', '--simple', '--unicode-8=漏',
+#          '--unicode-16=饜惙', '--unicode-32=饜']
+#
+_meson_env_array() {
+       echo "$1" | python -c "$__MESON_ARRAY_PARSER"
+}
+
 # @FUNCTION: _meson_create_cross_file
 # @INTERNAL
 # @DESCRIPTION:
@@ -129,6 +164,15 @@ _meson_create_cross_file() {
        pkgconfig = '${PKG_CONFIG}'
        strip = '${STRIP}'
 
+       [properties]
+       c_args = $(_meson_env_array "$CFLAGS")
+       c_link_args = $(_meson_env_array "$LDFLAGS")
+       cpp_args = $(_meson_env_array "$CXXFLAGS")
+       cpp_link_args = $(_meson_env_array "$LDFLAGS")
+       fortran_args = $(_meson_env_array "$FCFLAGS")
+       objc_args = $(_meson_env_array "$OBJCFLAGS")
+       objcpp_args = $(_meson_env_array "$OBJCXXFLAGS")
+
        [host_machine]
        system = '${system}'
        cpu_family = '${cpu_family}'

Reply via email to