7.2.使用 FLAVORS

要声明一个 port 具有多种 flavors, 应在其 Makefile 中加入 FLAVORSFLAVORS 中的第一个 flavor 是默认的 flavor。

技巧

像这样定义 FLAVOR 有助于简化 Makefile 的逻辑:

FLAVOR?=	${FLAVORS:[1]}

重要

为了将 flavors 与选项区分开来,后者总是大写字母,flavors 名称 只能 包含小写字母、数字和下划线 _

例子1. 基本的 Flavors 用法

如果一个 port 有一个“精简”的从属 port ,可以去掉这个从属 port ,然后用以下方法将该 port 转换为 flavors:

FLAVORS=	default lite
lite_PKGNAMESUFFIX=	-lite
[...]
.if ${FLAVOR:U} != lite
[enable non lite features]
.endif

例子2. 另一个基本的 Flavor 用法

如果一个 port 有一个 -nox11 的从属 port ,可以去掉这个从属 port ,然后用以下方法将该 port 转换为 flavors:

FLAVORS=	x11 nox11
FLAVOR?=	${FLAVORS:[1]}
nox11_PKGNAMESUFFIX=	-nox11
[...]
.if ${FLAVOR} == x11
[enable x11 features]
.endif

例子3. 更复杂的 Flavors 使用方法

这里是一个使用使用 Python flavors 的 port对 devel/libpeas 中的内容进行了略微编辑的摘录。由于默认的 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,pygobject3,另一个用于 Python 3,py3gobject3。configure 脚本必须在 ${WRKSRC} 中运行,但我们只对构建和安装软件的 Python 2 或 Python 3 部分感兴趣,所以要适当地设置构建和安装基本目录。暗示正确的 Python 3 配置脚本路径名称。用 Python 3 构建时包装列表是不同的。由于有三种可能的 Python 3 版本,请使用助手为所有三个版本设置 PLIST

7.2.1. Flavors 帮助器

为了使 Makefile 更加容易编写,存在一些 flavors 助手。

这个助手列表将设置它们的变量:

  • _flavor__PKGNAMEPREFIX

  • _flavor__PKGNAMESUFFIX

  • _flavor__PLIST

  • _flavor__DESCR

这个助手列表将追加到他们的变量中:

  • _flavor__CONFLICTS

  • _flavor__CONFLICTS_BUILD

  • _flavor__CONFLICTS_INSTALL

  • _flavor__PKG_DEPENDS

  • _flavor__EXTRACT_DEPENDS

  • _flavor__PATCH_DEPENDS

  • _flavor__FETCH_DEPENDS

  • _flavor__BUILD_DEPENDS

  • _flavor__LIB_DEPENDS

  • _flavor__RUN_DEPENDS

  • _flavor__TEST_DEPENDS

**例子4. 指定 PKGNAME 的Flavor

由于所有的包都必须有不同的包名,flavors必须改变它们的包名,用 _flavor PKGNAMEPREFIX_flavor PKGNAMESUFFIX 很容易实现。

FLAVORS=	normal lite
lite_PKGNAMESUFFIX=	-lite

最后更新于

FreeBSD 中文社区