meson.eclass: add _meson_move_flags function
authorMike Gilbert <floppym@gentoo.org>
Sat, 12 May 2018 16:41:17 +0000 (12:41 -0400)
committerMike Gilbert <floppym@gentoo.org>
Thu, 24 May 2018 04:46:53 +0000 (00:46 -0400)
This is used to move flags from CC to CFLAGS, typically during a
multilib build.

eclass/meson.eclass

index 06e76092a6b9518ebb7b5594a5afa7ec60f37bd1..d15e3ff58795380d13b1adfa1deed27d1218a65a 100644 (file)
@@ -198,6 +198,25 @@ meson_use() {
        usex "$1" "-D${2-$1}=true" "-D${2-$1}=false"
 }
 
+# @FUNCTION: _meson_move_flags
+# @INTERNAL
+# @USAGE: PROG FLAGS
+# @DESCRIPTION:
+# Moves extra arguments from PROG to FLAGS.
+# For example:
+# CC="gcc -m32" -> CC="gcc" CFLAGS="-m32"
+_meson_move_flags() {
+       local prog=${1}
+       local flags=${2}
+       local x=( ${!prog} )
+       if [[ -n ${x[0]} ]]; then
+               export ${prog}=${x[0]}
+       fi
+       if [[ -n ${x[1]} ]]; then
+               export ${flags}="${x[@]:1}${!flags:+ }${!flags}"
+       fi
+}
+
 # @FUNCTION: meson_src_configure
 # @DESCRIPTION:
 # This is the meson_src_configure function.
@@ -214,6 +233,18 @@ meson_src_configure() {
                --wrap-mode nodownload
                )
 
+       # Prevent multilib flags from leaking across ABIs
+       local -x BUILD_CFLAGS=${BUILD_CFLAGS}
+       local -x BUILD_CXXFLAGS=${BUILD_CXXFLAGS}
+
+       # Move multilib flags from CC to CFLAGS
+       local -x CC=$(tc-getCC) CFLAGS=${CFLAGS}
+       _meson_move_flags CC CFLAGS
+
+       # Move multilib flags from CXX to CXXFLAGS
+       local -x CXX=$(tc-getCXX) CXXFLAGS=${CXXFLAGS}
+       _meson_move_flags CXX CXXFLAGS
+
        if tc-is-cross-compiler; then
                _meson_create_cross_file || die "unable to write meson cross file"
                mesonargs+=( --cross-file "${T}/meson.${CHOST}" )