USE 标记条件代码

通常,只有在设置(或未设置)某个 USE 标记时,才需要执行特定的代码块。对于大型代码块,最好使用 if use foo,或者对于逆向测试,可以使用 if ! use fooif 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 的已弃用同义词,不要在新代码中使用它。