# Copyright 1999-2023 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: meson-multilib.eclass # @MAINTAINER: # Matt Turner <mattst88@gentoo.org> # @AUTHOR: # Michał Górny <mgorny@gentoo.org> # Matt Turner <mattst88@gentoo.org> # @SUPPORTED_EAPIS: 7 8 # @PROVIDES: meson multilib-minimal # @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} in 7|8) ;; *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; esac if [[ -z ${_MESON_MULTILIB_ECLASS} ]] ; then _MESON_MULTILIB_ECLASS=1 inherit meson multilib-minimal # @FUNCTION: meson_native_use_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_use_bool() { multilib_native_usex "${1}" "-D${2-${1}}=true" "-D${2-${1}}=false" } # @FUNCTION: meson_native_use_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_use_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_install "${_meson_args[@]}" } fi EXPORT_FUNCTIONS src_configure src_compile src_test src_install