dev-util/meson: Uprev to 0.57.2
This is a requirement for the latest upstream meson.eclass, which
fixes some cros-compilation issues needed to uprev x11-libs/gdk-pixbuf
Meson now has a new dependency: meson-format-array, which is also
pulled in by this CL.
The meson eclass is synced with upstream commit
5bf2727139974d789e1a3b3a10d3a6e85ffd6c62
BUG=chromium:1215974
TEST=CQ
Cq-Depend: 2939413, chrome-internal:3890064
Change-Id: I556fc6ab1aef12ab44561121f7c601a449bace68
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/overlays/portage-stable/+/2939905
Tested-by: Fergus Dall <sidereal@google.com>
Commit-Queue: Fergus Dall <sidereal@google.com>
Reviewed-by: David Munro <davidmunro@google.com>
Reviewed-by: Chris McDonald <cjmcdonald@chromium.org>
Reviewed-by: Nicholas Verne <nverne@chromium.org>
diff --git a/dev-util/meson-format-array/files/meson-format-array b/dev-util/meson-format-array/files/meson-format-array
new file mode 100644
index 0000000..d2bf49b
--- /dev/null
+++ b/dev-util/meson-format-array/files/meson-format-array
@@ -0,0 +1,26 @@
+#!/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):
+ return "'" + s.replace("\\", "\\\\").replace("'", "\\'") + "'"
+
+def main(args):
+ # 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
+ print("[" + ", ".join(args) + "]")
+
+if __name__ == "__main__":
+ main(sys.argv[1:])
diff --git a/dev-util/meson-format-array/meson-format-array-0.ebuild b/dev-util/meson-format-array/meson-format-array-0.ebuild
new file mode 100644
index 0000000..e4cf00a
--- /dev/null
+++ b/dev-util/meson-format-array/meson-format-array-0.ebuild
@@ -0,0 +1,22 @@
+# Copyright 2020-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+PYTHON_COMPAT=( python3_{6..9} )
+
+inherit python-r1
+
+DESCRIPTION="Format shell expressions into a meson array"
+HOMEPAGE="https://wiki.gentoo.org/wiki/No_homepage"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="*"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+RDEPEND="${PYTHON_DEPS}"
+S="${WORKDIR}"
+
+src_install() {
+ python_foreach_impl python_doscript "${FILESDIR}"/meson-format-array
+}
diff --git a/dev-util/meson-format-array/metadata.xml b/dev-util/meson-format-array/metadata.xml
new file mode 100644
index 0000000..d35a395
--- /dev/null
+++ b/dev-util/meson-format-array/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>floppym@gentoo.org</email>
+ <name>Mike Gilbert</name>
+ </maintainer>
+ <stabilize-allarches/>
+</pkgmetadata>
diff --git a/dev-util/meson/Manifest b/dev-util/meson/Manifest
index 56d8beb..765d085 100644
--- a/dev-util/meson/Manifest
+++ b/dev-util/meson/Manifest
@@ -1 +1 @@
-DIST meson-0.55.3.tar.gz 1740465 BLAKE2B 7d121f5d2bf487ae3c38be5ddccde6900134b9d0ea47868aac5625449e18a1a97ae0012849b795187221632cd3ac343097ef29b282753a1e8bd871c393d5c0e8 SHA512 afb0bb25b367e681131d920995124df4b06f6d144ae1a95ebec27be13e06fefbd95840e0287cd1d84bdbb8d9c115b589a833d847c60926f55e0f15749cf66bae
+DIST meson-0.57.2.tar.gz 1853721 BLAKE2B 9c167a21745719589a165e7ffc31007bd6307b347027f390fd660b2f44b5a2e6d8f36e999e15fa4b28ae269ddb0bb3897e0297288c59b62cc493aad058126293 SHA512 a3b0bf3d5e1d1b7ac7c97313f43046c94aa2a6b21964958569c89764dfda08db166adb89d48cbfad735bd472114587a71089d5e8b4f0fce04c3289da21b3f40e
diff --git a/dev-util/meson/meson-0.55.3.ebuild b/dev-util/meson/meson-0.57.2.ebuild
similarity index 94%
rename from dev-util/meson/meson-0.55.3.ebuild
rename to dev-util/meson/meson-0.57.2.ebuild
index d60e981..61a15fd 100644
--- a/dev-util/meson/meson-0.55.3.ebuild
+++ b/dev-util/meson/meson-0.57.2.ebuild
@@ -1,4 +1,4 @@
-# Copyright 2016-2020 Gentoo Authors
+# Copyright 2016-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
@@ -78,6 +78,9 @@
# test_cross_file_system_paths
unset XDG_DATA_HOME
+ # 'test cases/unit/73 summary' expects 80 columns
+ export COLUMNS=80
+
${EPYTHON} -u run_tests.py
) || die "Testing failed with ${EPYTHON}"
}
diff --git a/dev-util/meson/metadata.xml b/dev-util/meson/metadata.xml
index d762c3a..aba1d26 100644
--- a/dev-util/meson/metadata.xml
+++ b/dev-util/meson/metadata.xml
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding='UTF-8'?>
+<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="person">
diff --git a/eclass/meson.eclass b/eclass/meson.eclass
index fa859ac..c9a5e0b 100644
--- a/eclass/meson.eclass
+++ b/eclass/meson.eclass
@@ -1,4 +1,4 @@
-# Copyright 2017-2019 Gentoo Authors
+# Copyright 2017-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# @ECLASS: meson.eclass
@@ -23,9 +23,9 @@
#
# src_configure() {
# local emesonargs=(
-# -Dqt4=$(usex qt4 true false)
-# -Dthreads=$(usex threads true false)
-# -Dtiff=$(usex tiff true false)
+# $(meson_use qt4)
+# $(meson_feature threads)
+# $(meson_use bindist official_branding)
# )
# meson_src_configure
# }
@@ -43,6 +43,10 @@
inherit multiprocessing ninja-utils python-utils-r1 toolchain-funcs
+if [[ ${EAPI} == 6 ]]; then
+ inherit eapi7-ver
+fi
+
fi
EXPORT_FUNCTIONS src_configure src_compile src_test src_install
@@ -50,8 +54,10 @@
if [[ -z ${_MESON_ECLASS} ]]; then
_MESON_ECLASS=1
-MESON_DEPEND=">=dev-util/meson-0.48.2
- >=dev-util/ninja-1.7.2"
+MESON_DEPEND=">=dev-util/meson-0.56.0
+ >=dev-util/ninja-1.8.2
+ dev-util/meson-format-array
+"
if [[ ${EAPI:-0} == [6] ]]; then
DEPEND=${MESON_DEPEND}
@@ -84,19 +90,11 @@
# Optional meson test arguments as Bash array; this should be defined before
# calling meson_src_test.
-
-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
+# @VARIABLE: MYMESONARGS
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# User-controlled environment variable containing arguments to be passed to
+# meson in meson_src_configure.
# @FUNCTION: _meson_env_array
# @INTERNAL
@@ -117,20 +115,20 @@
# '--unicode-16=𐐷', '--unicode-32=𐤅']
#
_meson_env_array() {
- python -c "${__MESON_ARRAY_PARSER}" "$@"
+ meson-format-array "$@"
}
-# @FUNCTION: _meson_create_cross_file
+# @FUNCTION: _meson_get_machine_info
+# @USAGE: <tuple>
+# @RETURN: system/cpu_family/cpu variables
# @INTERNAL
# @DESCRIPTION:
-# Creates a cross file. meson uses this to define settings for
-# cross-compilers. This function is called from meson_src_configure.
-_meson_create_cross_file() {
- # Reference: http://mesonbuild.com/Cross-compilation.html
+# Translate toolchain tuple into machine values for meson.
+_meson_get_machine_info() {
+ local tuple=$1
# system roughly corresponds to uname -s (lowercase)
- local system=unknown
- case ${CHOST} in
+ case ${tuple} in
*-aix*) system=aix ;;
*-cygwin*) system=cygwin ;;
*-darwin*) system=darwin ;;
@@ -140,29 +138,49 @@
*-solaris*) system=sunos ;;
esac
- local cpu_family=$(tc-arch)
+ cpu_family=$(tc-arch "${tuple}")
case ${cpu_family} in
amd64) cpu_family=x86_64 ;;
arm64) cpu_family=aarch64 ;;
+ riscv)
+ case ${tuple} in
+ riscv32*) cpu_family=riscv32 ;;
+ riscv64*) cpu_family=riscv64 ;;
+ esac ;;
esac
# This may require adjustment based on CFLAGS
- local cpu=${CHOST%%-*}
+ cpu=${tuple%%-*}
+}
- cat > "${T}/meson.${CHOST}.${ABI}" <<-EOF
+# @FUNCTION: _meson_create_cross_file
+# @RETURN: path to cross file
+# @INTERNAL
+# @DESCRIPTION:
+# Creates a cross file. meson uses this to define settings for
+# cross-compilers. This function is called from meson_src_configure.
+_meson_create_cross_file() {
+ local system cpu_family cpu
+ _meson_get_machine_info "${CHOST}"
+
+ local fn=${T}/meson.${CHOST}.${ABI}.ini
+
+ cat > "${fn}" <<-EOF
[binaries]
ar = $(_meson_env_array "$(tc-getAR)")
c = $(_meson_env_array "$(tc-getCC)")
cpp = $(_meson_env_array "$(tc-getCXX)")
fortran = $(_meson_env_array "$(tc-getFC)")
llvm-config = '$(tc-getPROG LLVM_CONFIG llvm-config)'
+ nm = $(_meson_env_array "$(tc-getNM)")
objc = $(_meson_env_array "$(tc-getPROG OBJC cc)")
+ objcopy = $(_meson_env_array "$(tc-getOBJCOPY)")
objcpp = $(_meson_env_array "$(tc-getPROG OBJCXX c++)")
pkgconfig = '$(tc-getPKG_CONFIG)'
strip = $(_meson_env_array "$(tc-getSTRIP)")
windres = $(_meson_env_array "$(tc-getRC)")
- [properties]
+ [built-in options]
c_args = $(_meson_env_array "${CFLAGS} ${CPPFLAGS}")
c_link_args = $(_meson_env_array "${CFLAGS} ${LDFLAGS}")
cpp_args = $(_meson_env_array "${CXXFLAGS} ${CPPFLAGS}")
@@ -174,12 +192,72 @@
objcpp_args = $(_meson_env_array "${OBJCXXFLAGS} ${CPPFLAGS}")
objcpp_link_args = $(_meson_env_array "${OBJCXXFLAGS} ${LDFLAGS}")
+ [properties]
+ needs_exe_wrapper = true
+ sys_root = '${SYSROOT}'
+ pkg_config_libdir = '${PKG_CONFIG_LIBDIR:-${EPREFIX}/usr/$(get_libdir)/pkgconfig}'
+
[host_machine]
system = '${system}'
cpu_family = '${cpu_family}'
cpu = '${cpu}'
- endian = '$(tc-endian)'
+ endian = '$(tc-endian "${CHOST}")'
EOF
+
+ echo "${fn}"
+}
+
+# @FUNCTION: _meson_create_native_file
+# @RETURN: path to native file
+# @INTERNAL
+# @DESCRIPTION:
+# Creates a native file. meson uses this to define settings for
+# native compilers. This function is called from meson_src_configure.
+_meson_create_native_file() {
+ local system cpu_family cpu
+ _meson_get_machine_info "${CBUILD}"
+
+ local fn=${T}/meson.${CBUILD}.${ABI}.ini
+
+ cat > "${fn}" <<-EOF
+ [binaries]
+ ar = $(_meson_env_array "$(tc-getBUILD_AR)")
+ c = $(_meson_env_array "$(tc-getBUILD_CC)")
+ cpp = $(_meson_env_array "$(tc-getBUILD_CXX)")
+ fortran = $(_meson_env_array "$(tc-getBUILD_PROG FC gfortran)")
+ llvm-config = '$(tc-getBUILD_PROG LLVM_CONFIG llvm-config)'
+ nm = $(_meson_env_array "$(tc-getBUILD_NM)")
+ objc = $(_meson_env_array "$(tc-getBUILD_PROG OBJC cc)")
+ objcopy = $(_meson_env_array "$(tc-getBUILD_OBJCOPY)")
+ objcpp = $(_meson_env_array "$(tc-getBUILD_PROG OBJCXX c++)")
+ pkgconfig = '$(tc-getBUILD_PKG_CONFIG)'
+ strip = $(_meson_env_array "$(tc-getBUILD_STRIP)")
+ windres = $(_meson_env_array "$(tc-getBUILD_PROG RC windres)")
+
+ [built-in options]
+ c_args = $(_meson_env_array "${BUILD_CFLAGS} ${BUILD_CPPFLAGS}")
+ c_link_args = $(_meson_env_array "${BUILD_CFLAGS} ${BUILD_LDFLAGS}")
+ cpp_args = $(_meson_env_array "${BUILD_CXXFLAGS} ${BUILD_CPPFLAGS}")
+ cpp_link_args = $(_meson_env_array "${BUILD_CXXFLAGS} ${BUILD_LDFLAGS}")
+ fortran_args = $(_meson_env_array "${BUILD_FCFLAGS}")
+ fortran_link_args = $(_meson_env_array "${BUILD_FCFLAGS} ${BUILD_LDFLAGS}")
+ objc_args = $(_meson_env_array "${BUILD_OBJCFLAGS} ${BUILD_CPPFLAGS}")
+ objc_link_args = $(_meson_env_array "${BUILD_OBJCFLAGS} ${BUILD_LDFLAGS}")
+ objcpp_args = $(_meson_env_array "${BUILD_OBJCXXFLAGS} ${BUILD_CPPFLAGS}")
+ objcpp_link_args = $(_meson_env_array "${BUILD_OBJCXXFLAGS} ${BUILD_LDFLAGS}")
+
+ [properties]
+ needs_exe_wrapper = false
+ pkg_config_libdir = '${BUILD_PKG_CONFIG_LIBDIR:-${EPREFIX}/usr/$(get_libdir)/pkgconfig}'
+
+ [build_machine]
+ system = '${system}'
+ cpu_family = '${cpu_family}'
+ cpu = '${cpu}'
+ endian = '$(tc-endian "${CBUILD}")'
+ EOF
+
+ echo "${fn}"
}
# @FUNCTION: meson_use
@@ -215,32 +293,90 @@
meson_src_configure() {
debug-print-function ${FUNCNAME} "$@"
- # Common args
+ local BUILD_CFLAGS=${BUILD_CFLAGS}
+ local BUILD_CPPFLAGS=${BUILD_CPPFLAGS}
+ local BUILD_CXXFLAGS=${BUILD_CXXFLAGS}
+ local BUILD_FCFLAGS=${BUILD_FCFLAGS}
+ local BUILD_OBJCFLAGS=${BUILD_OBJCFLAGS}
+ local BUILD_OBJCXXFLAGS=${BUILD_OBJCXXFLAGS}
+ local BUILD_LDFLAGS=${BUILD_LDFLAGS}
+ local BUILD_PKG_CONFIG_LIBDIR=${BUILD_PKG_CONFIG_LIBDIR}
+ local BUILD_PKG_CONFIG_PATH=${BUILD_PKG_CONFIG_PATH}
+
+ if tc-is-cross-compiler; then
+ : ${BUILD_CFLAGS:=-O1 -pipe}
+ : ${BUILD_CXXFLAGS:=-O1 -pipe}
+ : ${BUILD_FCFLAGS:=-O1 -pipe}
+ : ${BUILD_OBJCFLAGS:=-O1 -pipe}
+ : ${BUILD_OBJCXXFLAGS:=-O1 -pipe}
+ else
+ : ${BUILD_CFLAGS:=${CFLAGS}}
+ : ${BUILD_CPPFLAGS:=${CPPFLAGS}}
+ : ${BUILD_CXXFLAGS:=${CXXFLAGS}}
+ : ${BUILD_FCFLAGS:=${FCFLAGS}}
+ : ${BUILD_LDFLAGS:=${LDFLAGS}}
+ : ${BUILD_OBJCFLAGS:=${OBJCFLAGS}}
+ : ${BUILD_OBJCXXFLAGS:=${OBJCXXFLAGS}}
+ : ${BUILD_PKG_CONFIG_LIBDIR:=${PKG_CONFIG_LIBDIR}}
+ : ${BUILD_PKG_CONFIG_PATH:=${PKG_CONFIG_PATH}}
+ fi
+
local mesonargs=(
+ meson setup
--buildtype plain
--libdir "$(get_libdir)"
--localstatedir "${EPREFIX}/var/lib"
--prefix "${EPREFIX}/usr"
--sysconfdir "${EPREFIX}/etc"
--wrap-mode nodownload
- )
+ --build.pkg-config-path "${BUILD_PKG_CONFIG_PATH}${BUILD_PKG_CONFIG_PATH:+:}${EPREFIX}/usr/share/pkgconfig"
+ --pkg-config-path "${PKG_CONFIG_PATH}${PKG_CONFIG_PATH:+:}${EPREFIX}/usr/share/pkgconfig"
+ --native-file "$(_meson_create_native_file)"
+ )
- if tc-is-cross-compiler || [[ ${ABI} != ${DEFAULT_ABI-${ABI}} ]]; then
- _meson_create_cross_file || die "unable to write meson cross file"
- mesonargs+=( --cross-file "${T}/meson.${CHOST}.${ABI}" )
+ if tc-is-cross-compiler; then
+ mesonargs+=( --cross-file "$(_meson_create_cross_file)" )
fi
+ BUILD_DIR="${BUILD_DIR:-${WORKDIR}/${P}-build}"
+
+ # Handle quoted whitespace
+ eval "local -a MYMESONARGS=( ${MYMESONARGS} )"
+
+ mesonargs+=(
+ # Arguments from ebuild
+ "${emesonargs[@]}"
+
+ # Arguments passed to this function
+ "$@"
+
+ # Arguments from user
+ "${MYMESONARGS[@]}"
+
+ # Source directory
+ "${EMESON_SOURCE:-${S}}"
+
+ # Build directory
+ "${BUILD_DIR}"
+ )
+
+ # Used by symbolextractor.py
+ # https://bugs.gentoo.org/717720
+ tc-export NM
+ tc-getPROG READELF readelf >/dev/null
+
# https://bugs.gentoo.org/625396
python_export_utf8_locale
- # Append additional arguments from ebuild
- mesonargs+=("${emesonargs[@]}")
+ # https://bugs.gentoo.org/721786
+ local -x BOOST_INCLUDEDIR="${BOOST_INCLUDEDIR-${EPREFIX}/usr/include}"
+ local -x BOOST_LIBRARYDIR="${BOOST_LIBRARYDIR-${EPREFIX}/usr/$(get_libdir)}"
- BUILD_DIR="${BUILD_DIR:-${WORKDIR}/${P}-build}"
- set -- meson "${mesonargs[@]}" "$@" \
- "${EMESON_SOURCE:-${S}}" "${BUILD_DIR}"
- echo "$@"
- tc-env_build "$@" || die
+ (
+ export -n {C,CPP,CXX,F,OBJC,OBJCXX,LD}FLAGS PKG_CONFIG_{LIBDIR,PATH}
+ echo "${mesonargs[@]}" >&2
+ "${mesonargs[@]}"
+ ) || die
}
# @FUNCTION: meson_src_compile
@@ -284,7 +420,10 @@
debug-print-function ${FUNCNAME} "$@"
DESTDIR="${D}" eninja -C "${BUILD_DIR}" install "$@"
+
+ pushd "${S}" > /dev/null || die
einstalldocs
+ popd > /dev/null || die
}
fi