Hi list, the current interface to use flags, useq, usev, use_with, use_enable, as defined in /usr/lib/portage/bin/ebuild.sh lacks generality. The common thing is testing a use flag and possibly echoing a string, but there is no function that implements this common behaviour.
I propose that we add such a function. Proposed name for the function is
"ifuse".
I also propose to add the utility function "ifv" which is useful for writing
concise and clean code.
These additions would allow you to easily define your own function for
processing use flags in ebuilds and eclasses. One such example is
use_mime() {
local WORD=$(ifv "$2" "$2" "$1")
ifuse "$1" "${WORD};"
}
for generating a string of ';'-separated mime-types based on use flags.
The explanation of this function is:
#set WORD to argument 2 or if that is empty to argument 1
#output "${WORD};" if use flag $1 is set (or if it starts with ! and is unset)
#otherwise don't output anything
The existing interface is also simple to reimplement:
use() {
ifuse "${1}"
}
useq() {
ifuse "${1}"
}
usev() {
ifuse "${1}" "${1}"
}
use_with() {
local SUFFIX=$(ifv "$3" "=$3")
local WORD=$(ifv "$2" "$2" "$1")
ifuse "$1" "--with-${WORD}${SUFFIX}" "--without-${WORD}"
}
use_enable() {
local SUFFIX=$(ifv "$3" "=$3")
local WORD=$(ifv "$2" "$2" "$1")
ifuse "$1" "--enable-${WORD}${SUFFIX}" "--disable-${WORD}"
}
ifuse's code is much like useq's code now, but more versatile. You can find it
attached along with ifv.
Please comment,
Marijn
--
Marijn Schouten (hkBst), Gentoo Lisp project
<http://www.gentoo.org/proj/en/lisp/>, #gentoo-lisp on FreeNode
# test a use flag and return the result, possibly echo a non-empty string
ifuse() {
local flag=$1
local string_success=$2
local string_failure=$3
local success=0
# invert the return value for "!blah" and strip the '!'
[[ ${flag} = !* ]] && { success=1 ; flag=${flag:1} }
# Make sure we have this USE flag in IUSE
if ! hasq "${flag}" ${IUSE} ${E_IUSE} && ! hasq "${flag}"
${PORTAGE_ARCHLIST} selinux; then
eqawarn "QA Notice: USE Flag '${flag}' not in IUSE for
${CATEGORY}/${PF}"
fi
hasq "${flag}" ${USE} || ((success=1-success))
string=$( (( ${success} == 0 )) && echo ${string_success} || echo
${string_failure} )
[[ -n ${string} ]] && echo ${string}
return ${success}
}
ifv() {
[[ -n $1 ]] && echo $2 || echo $3
}
signature.asc
Description: OpenPGP digital signature
