Use case: prebuilt software and programs working with such. More specifically, {ati,nvidia}-drivers (that provide the binaries for x86 & amd64), wine (not sure but I don't think there's a point in having x32 wine). --- eclass/multilib-build.eclass | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+)
diff --git a/eclass/multilib-build.eclass b/eclass/multilib-build.eclass index ee8be72..9fa9743 100644 --- a/eclass/multilib-build.eclass +++ b/eclass/multilib-build.eclass @@ -46,6 +46,23 @@ _MULTILIB_FLAGS=( abi_mips_o32:o32 ) +# @ECLASS-VARIABLE: MULTILIB_COMPAT +# @DEFAULT_UNSET +# @DESCRIPTION: +# List of multilib ABIs supported by the ebuild. If unset, defaults to +# all ABIs supported by the eclass. +# +# This variable is intended for use in prebuilt multilib packages that +# can provide binaries only for a limited set of ABIs. If ABIs need to +# be limited due to a bug in source code, package.use.mask is +# recommended instead. +# +# Example use: +# @CODE +# # Upstream provides binaries for x86 & amd64 only +# MULTILIB_COMPAT=( abi_x86_{32,64} ) +# @CODE + # @ECLASS-VARIABLE: MULTILIB_USEDEP # @DESCRIPTION: # The USE-dependency to be used on dependencies (libraries) needing @@ -59,6 +76,19 @@ _MULTILIB_FLAGS=( _multilib_build_set_globals() { local flags=( "${_MULTILIB_FLAGS[@]%:*}" ) + + if [[ ${MULTILIB_COMPAT[@]} ]]; then + # Validate MULTILIB_COMPAT and filter out the flags. + local f + for f in "${MULTILIB_COMPAT[@]}"; do + if ! has "${f}" "${flags[@]}"; then + die "Invalid value in MULTILIB_COMPAT: ${f}" + fi + done + + flags=( "${MULTILIB_COMPAT[@]}" ) + fi + local usedeps=${flags[@]/%/(-)?} IUSE=${flags[*]} -- 1.9.2