summaryrefslogtreecommitdiff
path: root/eclass/meson.eclass
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2018-05-06 11:18:16 +0100
committerV3n3RiX <venerix@redcorelinux.org>2018-05-06 11:18:16 +0100
commitebce8994fe3cc4ca9fbc96ca837cb4c4e98adcbd (patch)
treef2204ce5f94dc3cb13728ff93649d889944952bb /eclass/meson.eclass
parentfe1c8b732bd548b699d4c2ef725f67f8b8c8911c (diff)
gentoo resync : 06.05.2018
Diffstat (limited to 'eclass/meson.eclass')
-rw-r--r--eclass/meson.eclass74
1 files changed, 52 insertions, 22 deletions
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