USE 标记条件代码
通常,只有在设置(或未设置)某个 USE 标记时,才需要执行特定的代码块。对于大型代码块,最好使用 if use foo
,或者对于逆向测试,可以使用 if ! use foo
或 if use !foo
(前者更常见,也建议使用以提高可读性)。对于单语句条件,use foo && blah
(或 use foo || blah
用于否定)形式通常更易读。
在较旧的代码中偶尔会看到 if [ "`use foo`" ]
和 if [ -n "`use foo`" ]
形式,但不能使用。这是因为,从 Portage 2.1 开始,'use' Portage 帮助程序在启用或禁用 USE 标记时不会产生任何输出,因此 [ "`use foo`" ] 语句与 [ "" ] 几乎完全相同,后者总是计算结果为假。
# USE conditional blocks...
if use livecd ; then
# remove some extra files for a small livecd install
rm -fr "${vimfiles}"/{compiler,doc,ftplugin,indent} || die
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 && eapply "${FILESDIR}/${P}-ssl.patch"
use sparc && filter-flags -fomit-frame-pointer
# Inverse USE conditional statements...
use ncurses || eapply "${FILESDIR}/${P}-no-ncurses.patch"
对于基于 USE 标记回显内容,通常有更好的帮助程序函数可用。
保证 use
不会产生任何输出。如果需要显示输出,请使用 usev
函数;如果条件满足,它会回显 USE 标记的名称。 useq
函数是 use
的已弃用同义词,不要在新代码中使用它。