Signed-off-by: Matt Turner <matts...@gentoo.org>
---
 eclass/meson-multilib.eclass | 126 +++++++++++++++++++++++++++++++++++
 1 file changed, 126 insertions(+)
 create mode 100644 eclass/meson-multilib.eclass

diff --git a/eclass/meson-multilib.eclass b/eclass/meson-multilib.eclass
new file mode 100644
index 00000000000..4a46661d695
--- /dev/null
+++ b/eclass/meson-multilib.eclass
@@ -0,0 +1,126 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# @ECLASS: meson-multilib.eclass
+# @MAINTAINER:
+# gx86-multilib team <multi...@gentoo.org>
+# @AUTHOR:
+# Author: Michał Górny <mgo...@gentoo.org>
+# Author: Matt Turner <matts...@gentoo.org>
+# @SUPPORTED_EAPIS: 7
+# @BLURB: meson wrapper for multilib builds
+# @DESCRIPTION:
+# The meson-multilib.eclass provides a glue between meson.eclass(5)
+# and multilib-minimal.eclass(5), aiming to provide a convenient way
+# to build packages using meson for multiple ABIs.
+#
+# Inheriting this eclass sets IUSE and exports default multilib_src_*()
+# sub-phases that call meson phase functions for each ABI enabled.
+# The multilib_src_*() functions can be defined in ebuild just like
+# in multilib-minimal, yet they ought to call appropriate meson
+# phase rather than 'default'.
+
+case ${EAPI:-0} in
+       7) ;;
+       *) die "EAPI=${EAPI} is not supported" ;;
+esac
+
+inherit meson multilib-minimal
+
+EXPORT_FUNCTIONS src_configure src_compile src_test src_install
+
+# @FUNCTION: meson_native_bool
+# @USAGE: <USE flag> [option name]
+# @DESCRIPTION:
+# Given a USE flag and a meson project option, output a string like:
+#
+#   -Doption=true
+#   -Doption=false
+#
+# if building for the native ABI (multilib_is_native_abi is true). Otherwise,
+# output -Doption=false. If the project option is unspecified, it defaults
+# to the USE flag.
+meson_native_bool() {
+       multilib_native_usex "${1}" "-D${2-${1}}=true" "-D${2-${1}}=false"
+}
+
+# @FUNCTION: meson_native_feature
+# @USAGE: <USE flag> [option name]
+# @DESCRIPTION:
+# Given a USE flag and a meson project option, output a string like:
+#
+#   -Doption=enabled
+#   -Doption=disabled
+#
+# if building for the native ABI (multilib_is_native_abi is true). Otherwise,
+# output -Doption=disabled. If the project option is unspecified, it defaults
+# to the USE flag.
+meson_native_feature() {
+       multilib_native_usex "${1}" "-D${2-${1}}=enabled" "-D${2-${1}}=disabled"
+}
+
+# @FUNCTION: meson_native_enabled
+# @USAGE: <option name>
+# @DESCRIPTION:
+# Output -Doption=enabled option if executables are being built
+# (multilib_is_native_abi is true). Otherwise, output -Doption=disabled option.
+meson_native_enabled() {
+       if multilib_is_native_abi; then
+               echo "-D${1}=enabled"
+       else
+               echo "-D${1}=disabled"
+       fi
+}
+
+# @FUNCTION: meson_native_true
+# @USAGE: <option name>
+# @DESCRIPTION:
+# Output -Doption=true option if executables are being built
+# (multilib_is_native_abi is true). Otherwise, output -Doption=false option.
+meson_native_true() {
+       if multilib_is_native_abi; then
+               echo "-D${1}=true"
+       else
+               echo "-D${1}=false"
+       fi
+}
+
+meson-multilib_src_configure() {
+       local _meson_args=( "${@}" )
+
+       multilib-minimal_src_configure
+}
+
+multilib_src_configure() {
+       meson_src_configure "${_meson_args[@]}"
+}
+
+meson-multilib_src_compile() {
+       local _meson_args=( "${@}" )
+
+       multilib-minimal_src_compile
+}
+
+multilib_src_compile() {
+       meson_src_compile "${_meson_args[@]}"
+}
+
+meson-multilib_src_test() {
+       local _meson_args=( "${@}" )
+
+       multilib-minimal_src_test
+}
+
+multilib_src_test() {
+       meson_src_test "${_meson_args[@]}"
+}
+
+meson-multilib_src_install() {
+       local _meson_args=( "${@}" )
+
+       multilib-minimal_src_install
+}
+
+multilib_src_install() {
+       meson_src_install "${_meson_args[@]}"
+}
-- 
2.26.3


Reply via email to