From 7ac0e89e1c8027ed5be76f6005e8cb52b1e5d484 Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Mon, 5 Dec 2022 21:07:33 +0000 Subject: gentoo auto-resync : 05:12:2022 - 21:07:33 --- eclass/app-alternatives.eclass | 84 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 eclass/app-alternatives.eclass (limited to 'eclass/app-alternatives.eclass') diff --git a/eclass/app-alternatives.eclass b/eclass/app-alternatives.eclass new file mode 100644 index 000000000000..c6924bfc6d2a --- /dev/null +++ b/eclass/app-alternatives.eclass @@ -0,0 +1,84 @@ +# Copyright 2022 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +# @ECLASS: app-alternatives.eclass +# @MAINTAINER: +# Michał Górny +# @AUTHOR: +# Michał Górny +# @SUPPORTED_EAPIS: 8 +# @BLURB: Common logic for app-alternatives/* +# @DESCRIPTION: +# This eclass provides common logic shared by app-alternatives/* +# ebuilds. A global ALTERNATIVES variable needs to be declared +# that lists available options and their respective dependencies. +# HOMEPAGE, S, LICENSE, SLOT, IUSE, REQUIRED_USE and RDEPEND are set. +# A get_alternative() function is provided that determines the selected +# alternative and prints its respective flag name. + +case ${EAPI} in + 8) ;; + *) die "${ECLASS}: EAPI ${EAPI:-0} unsupported." +esac + +if [[ ! ${_APP_ALTERNATIVES_ECLASS} ]]; then +_APP_ALTERNATIVES_ECLASS=1 + +# @ECLASS_VARIABLE: ALTERNATIVES +# @PRE_INHERIT +# @REQUIRED +# @DESCRIPTION: +# Array of "flag:dependency" pairs specifying the available +# alternatives. The default provider must be listed first. + +# @FUNCTION: _app-alternatives_set_globals +# @INTERNAL +# @DESCRIPTION: +# Set ebuild metadata variables. +_app-alternatives_set_globals() { + debug-print-function ${FUNCNAME} "${@}" + + if [[ ${ALTERNATIVES@a} != *a* ]]; then + die 'ALTERNATIVES must be an array.' + elif [[ ${#ALTERNATIVES[@]} -eq 0 ]]; then + die 'ALTERNATIVES must not be empty.' + fi + + HOMEPAGE="https://wiki.gentoo.org/wiki/Project:Base/Alternatives" + S=${WORKDIR} + + LICENSE="CC0-1.0" + SLOT="0" + + # yep, that's a cheap hack adding '+' to the first flag + IUSE="+${ALTERNATIVES[*]%%:*}" + REQUIRED_USE="^^ ( ${ALTERNATIVES[*]%%:*} )" + RDEPEND="" + + local flag dep + for flag in "${ALTERNATIVES[@]}"; do + [[ ${flag} != *:* ]] && die "Invalid ALTERNATIVES item: ${flag}" + dep=${flag#*:} + flag=${flag%%:*} + RDEPEND+=" + ${flag}? ( ${dep} ) + " + done +} +_app-alternatives_set_globals + +# @FUNCTION: get_alternative +# @DESCRIPTION: +# Get the flag name for the selected alternative (i.e. the USE flag set). +get_alternative() { + debug-print-function ${FUNCNAME} "${@}" + + local flag + for flag in "${ALTERNATIVES[@]%%:*}"; do + usev "${flag}" && return + done + + die "No selected alternative found (REQUIRED_USE ignored?!)" +} + +fi -- cgit v1.2.3