# Copyright 2026 Nadeŭka # Distributed under the terms of the GNU General Public License v2 # @ECLASS: pkgvar.eclass # @MAINTAINER: # Nadeŭka # @SUPPORTED_EAPIS: 8 9 # @BLURB: Declare configuration variables that can be overridden per package # @DESCRIPTION: # Provides pkgvar_declare for eclass configuration variables. A variable can be # overridden for a single package through __ (upper case, # every character outside A-Z and 0-9 replaced by an underscore), for example # RES_USER_FOO_SYSUSER_HOME in make.conf for res-user/foo. if [[ ! -v _PKGVAR_ECLASS ]]; then _PKGVAR_ECLASS=1 case ${EAPI} in 8|9) ;; *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; esac # @ECLASS_VARIABLE: PKGVAR_PREFIX # @OUTPUT_VARIABLE # @DESCRIPTION: # Prefix of the package-scoped override variables, e.g. RES_USER_FOO_ for res-user/foo. PKGVAR_PREFIX=${CATEGORY^^}_${PN^^}_ PKGVAR_PREFIX=${PKGVAR_PREFIX//[^A-Z0-9]/_} # @FUNCTION: pkgvar_declare # @USAGE: [-a] [default...] # @DESCRIPTION: # Sets VARIABLE from, in order of preference: the package-scoped override, its # current value, the default. # # With -a, VARIABLE is an array. The override may be an array or a # whitespace-separated string, and _ADD (a string) is appended to the # result. Every argument after the name is then a default element. pkgvar_declare() { local isarray overridename temp [[ $1 == -a ]] && { isarray=1; shift; } local -n name=$1 overridename=${PKGVAR_PREFIX}$1 if [[ -z ${isarray} ]]; then name=${!overridename:-${name:-$2}} return fi if [[ -v ${overridename}[@] || -v ${overridename} ]]; then if [[ ${!overridename@a} == *a* ]]; then # indirect expansion of an array-valued override temp=${overridename}[@] name=( "${!temp}" ) else name=( ${!overridename} ) fi elif [[ ! -v ${1}[@] ]]; then name=( "${@:2}" ) fi temp=${overridename}_ADD [[ ! -v ${temp} ]] || name+=( ${!temp} ) } fi