Often a particular block of code must only be executed if a given USE flag is
set (or unset). For large blocks, if use foo
is best, or for inverse tests
either if ! use foo
or if use !foo
can be used (the former is more
common and is recommended for readability). For single-statement conditions, the
use foo && blah
(or use foo || blah
for negatives) form is often more
readable.
The if [ "`use foo`" ]
and if [ -n "`use foo`" ]
forms which are
occasionally seen in older code must not be used. This is because, since portage-2.1, the 'use' portage helper does not produce any output when the use flag is enabled or disabled so the [ "`use foo`" ] statement is pretty much identical to [ "" ] which always evaluates to false.
die
will not work as expected within a subshell, so code in the
form use foo && ( blah ; blah )
should be avoided in favour of a proper if
statement. See die and Subshells.
# USE conditional blocks...
if use livecd ; then
# remove some extra files for a small livecd install
rm -fr "${vimfiles}"/{compiler,doc,ftplugin,indent}
fi
# Inverse USE conditional blocks...
if ! use cscope ; then
# the --disable-cscope configure arg doesn't quite work properly,
# so sed it out of feature.h if we're not USEing cscope.
sed -i -e '/# define FEAT_CSCOPE/d' src/feature.h || die "couldn't disable cscope"
fi
# USE conditional statements...
use ssl && epatch "${FILESDIR}/${P}-ssl.patch"
use sparc && filter-flags -fomit-frame-pointer
# Inverse USE conditional statements...
use ncurses || epatch "${FILESDIR}/${P}-no-ncurses.patch"
For echoing content based upon a USE flag, there is often a better helper function available.
It is guaranteed that use
produces no output. If you need output
displayed, use the usev
function; it echoes the USE flag's name
if the condition is met.
The useq
function is a deprecated synonym for use
, don't
use it in new code.