From ebce8994fe3cc4ca9fbc96ca837cb4c4e98adcbd Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Sun, 6 May 2018 11:18:16 +0100 Subject: gentoo resync : 06.05.2018 --- eclass/meson.eclass | 74 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 52 insertions(+), 22 deletions(-) (limited to 'eclass/meson.eclass') diff --git a/eclass/meson.eclass b/eclass/meson.eclass index 71735fbfc67d..f493bab2d019 100644 --- a/eclass/meson.eclass +++ b/eclass/meson.eclass @@ -92,6 +92,42 @@ __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 +import sys + +# 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(" ".join(sys.argv[1:]))]))) +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() { + python -c "${__MESON_ARRAY_PARSER}" "$@" +} + # @FUNCTION: _meson_create_cross_file # @INTERNAL # @DESCRIPTION: @@ -123,11 +159,20 @@ _meson_create_cross_file() { cat > "${T}/meson.${CHOST}" <<-EOF [binaries] - ar = '${AR}' - c = '${CC}' - cpp = '${CXX}' - pkgconfig = '${PKG_CONFIG}' - strip = '${STRIP}' + ar = '$(tc-getAR)' + c = '$(tc-getCC)' + cpp = '$(tc-getCXX)' + pkgconfig = '$(tc-getPKG_CONFIG)' + strip = '$(tc-getSTRIP)' + + [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}' @@ -166,24 +211,9 @@ meson_src_configure() { --wrap-mode nodownload ) - # Both meson(1) and _meson_create_cross_file need these - local -x AR=$(tc-getAR) - local -x CC=$(tc-getCC) - local -x CXX=$(tc-getCXX) - local -x PKG_CONFIG=$(tc-getPKG_CONFIG) - local -x STRIP=$(tc-getSTRIP) - if tc-is-cross-compiler; then _meson_create_cross_file || die "unable to write meson cross file" - mesonargs+=( - --cross-file "${T}/meson.${CHOST}" - ) - # In cross mode, meson uses these as the native/build programs - AR=$(tc-getBUILD_AR) - CC=$(tc-getBUILD_CC) - CXX=$(tc-getBUILD_CXX) - PKG_CONFIG=$(tc-getBUILD_PKG_CONFIG) - STRIP=$(tc-getBUILD_STRIP) + mesonargs+=( --cross-file "${T}/meson.${CHOST}" ) fi # https://bugs.gentoo.org/625396 @@ -196,7 +226,7 @@ meson_src_configure() { set -- meson "${mesonargs[@]}" "$@" \ "${EMESON_SOURCE:-${S}}" "${BUILD_DIR}" echo "$@" - "$@" || die + tc-env_build "$@" || die } # @FUNCTION: meson_src_compile -- cgit v1.2.3