FLAVOR?= ${FLAVORS:[1]}
第 7 章 Flavors
目录
7.1. Flavors 简介
Flavors 是一种拥有 Port 多个变体的途径。Port 会被多次构建,并带有不同的变体。
例如,一个 Port 可以拥有一个带有许多功能和相当多依赖项的普通版本,以及一个仅包含基本功能和最少依赖项的轻量级“lite”版本。
另一个例子可能是,一个 Port 可以拥有 GTK 版本和 QT 版本,具体取决于它使用的工具包。
7.2. 使用 FLAVORS
要声明一个 Port 拥有多个 Flavors,请在它的 Makefile 中添加 FLAVORS
。FLAVORS
中的第一个 Flavor 是默认 Flavor。
将 |
为了将 Flavors 与始终为大写字母的选项区分开来,Flavor 名称只能包含小写字母、数字和下划线 |
如果一个 Port 拥有一个“lite”从属 Port,则可以删除该从属 Port,并将 Port 转换为 Flavors:
FLAVORS= default lite lite_PKGNAMESUFFIX= -lite [...] .if ${FLAVOR:U} != lite [enable non lite features] .endif
如果一个 Port 拥有一个 -nox11
从属 Port,则可以删除该从属 Port,并将 Port 转换为 Flavors:
FLAVORS= x11 nox11 FLAVOR?= ${FLAVORS:[1]} nox11_PKGNAMESUFFIX= -nox11 [...] .if ${FLAVOR} == x11 [enable x11 features] .endif
这是一个来自 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
此端口未使用USE_PYTHON=distutils
,但仍然需要 Python 版本。为了防止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. 版本助手
为了使Makefile更易于编写,存在一些版本助手。
此助手列表将设置其变量
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
PKGNAME
由于所有软件包都必须具有不同的软件包名称,因此版本必须更改其名称,使用flavor_PKGNAMEPREFIX
和flavor_PKGNAMESUFFIX
可以简化此操作。
FLAVORS= normal lite lite_PKGNAMESUFFIX= -lite
7.3. USES=php
和版本
当使用php
以及以下参数之一:phpize
、ext
、zend
或pecl
时,端口将自动填充FLAVORS
,其中包含其支持的 PHP 版本。
USES=php
扩展这将为所有受支持的版本生成软件包。
PORTNAME= some-ext PORTVERSION= 0.0.1 PKGNAMEPREFIX= ${PHP_PKGNAMEPREFIX} USES= php:ext
这将为所有受支持的版本(7.2 除外)生成软件包。
PORTNAME= some-ext PORTVERSION= 0.0.1 PKGNAMEPREFIX= ${PHP_PKGNAMEPREFIX} USES= php:ext IGNORE_WITH_PHP= 72
7.4. USES=python
和版本
当使用python
和USE_PYTHON=distutils
时,端口将自动填充FLAVORS
,其中包含其支持的 Python 版本。
USES=python
假设当前支持的 Python 版本为 2.7、3.4、3.5 和 3.6,并且默认的 Python 2 和 3 版本分别为 2.7 和 3.6,则具有以下内容的端口:
USES= python USE_PYTHON= distutils
将获得以下版本:py27
和py36
。
USES= python USE_PYTHON= distutils allflavors
将获得以下版本:py27
、py34
、py35
和py36
。
USES=python
假设当前支持的 Python 版本为 2.7、3.4、3.5 和 3.6,并且默认的 Python 2 和 3 版本分别为 2.7 和 3.6,则具有以下内容的端口:
USES= python:-3.5 USE_PYTHON= distutils
将获得以下版本:py27
。
USES= python:-3.5 USE_PYTHON= distutils allflavors
将获得以下版本:py27
、py34
和py35
。
USES= python:3.4+ USE_PYTHON= distutils
将获得以下版本:py36
。
USES= python:3.4+ USE_PYTHON= distutils allflavors
将获得以下版本:py34
、py35
和py36
。
PY_FLAVOR
可用于依赖于正确版本的 Python 模块。所有对版本化 Python 端口的依赖项都应使用PY_FLAVOR
,而不要直接使用FLAVOR
。
distutils
的端口如果默认的 Python 3 版本为 3.6,则以下内容将把PY_FLAVOR
设置为py36
。
RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}mutagen>0:audio/py-mutagen@${PY_FLAVOR} USES= python:3.5+
7.5. USES=lua
和版本
当使用lua:module
或lua:flavors
时,端口将自动填充FLAVORS
,其中包含其支持的 Lua 版本。但是,普通应用程序(而不是 Lua 模块)不应使用此功能;大多数嵌入或以其他方式使用 Lua 的应用程序应仅使用USES=lua
。
LUA_FLAVOR
可用(并且必须使用)以依赖于正确版本的依赖项,无论端口是否使用flavors
或module
参数。
有关更多信息,请参阅使用 Lua。
7.6. USES=guile
和版本
当使用guile:flavors
时,端口将自动填充FLAVORS
,其中包含其支持的 Guile 版本。但是,普通应用程序不应使用此功能;它主要供库和扩展(例如guile-lib
或guile-cairo
)使用。
GUILE_FLAVOR
可用(并且必须使用)以依赖于正确版本的版本化依赖项,无论端口是否使用flavors
参数。
有关更多信息,请参阅使用 Guile。
上次修改时间:2024 年 9 月 23 日,作者:Fernando Apesteguía