7.2.使用 FLAVORS
要声明一个具有多个 flavor 的 Port,需要在其 Makefile 中添加 FLAVORS。FLAVORS 中的第一个 flavor 是默认的 flavor。
技巧
同时定义
FLAVOR为FLAVOR?= ${FLAVORS:[1]}有助于简化 Makefile 的逻辑。
重要
为了将 flavor 与总是大写字母的选项区别开来,flavor 名称只能包含小写字母、数字和下划线
_。
示例 1:基本的 Flavors 用法
如果某个 Port 有一个“精简版”从属 Port,那么可以移除该从属 Port,并将该 Port 转换为 flavors,如下所示:
FLAVORS= default lite
lite_PKGNAMESUFFIX= -lite
[...]
.if ${FLAVOR:U} != lite
[启用非 lite 功能]
.endif示例 2:另一种基本的 Flavors 用法
如果某个 Port 有一个 -nox11 从属 Port,那么可以移除该从属 Port,并将该 Port 转换为 flavors,如下所示:
FLAVORS= x11 nox11
FLAVOR?= ${FLAVORS:[1]}
nox11_PKGNAMESUFFIX= -nox11
[...]
.if ${FLAVOR} == x11
[启用 x11 功能]
.endif示例 3:更复杂的 Flavors 用法
以下是经过略微修改的 devel/libpeas 的一段内容节选,这是一个使用了 Python flavors 的 Port。由于默认的 Python 2 和 3 版本是 2.7 和 3.6,它会自动获得 FLAVORS=py27 py36
USES= gnome python
USE_PYTHON= flavors
.if ${FLAVOR:Upy27:Mpy2*}
USE_GNOME= pygobject3
CONFIGURE_ARGS+= --enable-python2 --disable-python3
BUILD_WRKSRC= ${WRKSRC}/loaders/python
INSTALL_WRKSRC= ${WRKSRC}/loaders/python
.else # py3*
USE_GNOME+= py3gobject3
CONFIGURE_ARGS+= --disable-python2 --enable-python3 \
ac_cv_path_PYTHON3_CONFIG=${LOCALBASE}/bin/python${PYTHON_VER}-config
BUILD_WRKSRC= ${WRKSRC}/loaders/python3
INSTALL_WRKSRC= ${WRKSRC}/loaders/python3
.endif
py34_PLIST= ${.CURDIR}/pkg-plist-py3
py35_PLIST= ${.CURDIR}/pkg-plist-py3
py36_PLIST= ${.CURDIR}/pkg-plist-py3这个 Port 没有使用 USE_PYTHON=distutils,但仍然需要 Python flavors。为了防止 FLAVOR 为空(这会导致 make(1) 出错),应在字符串比较中使用 ${FLAVOR:U} 而不是 ${FLAVOR}。Gnome 的 Python gobject3 绑定在 Python 2 和 Python 3 中名称不同,分别为 pygobject3 和 py3gobject3。虽然 configure 脚本必须在 ${WRKSRC} 中运行,但我们只关心构建和安装 Python 2 或 Python 3 部分,因此需要相应地设置构建和安装的基础目录。同时需要提示正确的 Python 3 config 脚本路径名。使用 Python 3 构建时的打包清单是不同的,由于可能有三个 Python 3 版本,因此要使用 辅助机制 为这三个版本设置 PLIST。
7.2.1. Flavors 辅助机制
为了简化 Makefile 的编写,提供了一些 flavors 的辅助机制。
以下这些辅助机制会设置对应变量的值:
flavor_PKGNAMEPREFIXflavor_PKGNAMESUFFIXflavor_PLISTflavor_DESCR
以下这些辅助机制会追加到对应变量中:
flavor_CONFLICTSflavor_CONFLICTS_BUILDflavor_CONFLICTS_INSTALLflavor_PKG_DEPENDSflavor_EXTRACT_DEPENDSflavor_PATCH_DEPENDSflavor_FETCH_DEPENDSflavor_BUILD_DEPENDSflavor_LIB_DEPENDSflavor_RUN_DEPENDSflavor_TEST_DEPENDS
示例 4:为特定 flavor 设置 PKGNAME
由于所有的包必须具有不同的包名,因此 flavors 必须修改各自的包名,使用 flavor_PKGNAMEPREFIX 和 flavor_PKGNAMESUFFIX 可以轻松实现:
FLAVORS= normal lite
lite_PKGNAMESUFFIX= -lite最后更新于
这有帮助吗?