# Copyright 2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

# @ECLASS: app-alternatives.eclass
# @MAINTAINER:
# Michał Górny <mgorny@gentoo.org>
# @AUTHOR:
# Michał Górny <mgorny@gentoo.org>
# @SUPPORTED_EAPIS: 7 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
	7|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
