To declare a port having multiple flavors, add
FLAVORS
to its Makefile
.
The first flavor in FLAVORS
is the default
flavor.
It can help simplify the logic of the
Makefile
to also define
FLAVOR
as:
FLAVOR?= ${FLAVORS:[1]}
To distinguish flavors from options, which are always
uppercase letters, flavor names can only
contain lowercase letters, numbers, and the underscore
_
.
If a port has a “lite” slave port, the slave port can be removed, and the port can be converted to flavors with:
FLAVORS= default lite lite_PKGNAMESUFFIX= -lite [...] .if ${FLAVOR:U} != lite [enable non lite features] .endif
The first flavor is the default one, and is called,
here, default
. It is not an obligation,
and if possible, use a more specific flavor name, like in
Example 7.2, “Another Basic Flavors Usage”.
If a port has a -nox11
slave port, the
slave port can be removed, and the port can be converted to
flavors with:
FLAVORS= x11 nox11 FLAVOR?= ${FLAVORS:[1]} nox11_PKGNAMESUFFIX= -nox11 [...] .if ${FLAVOR} == x11 [enable x11 features] .endif
Here is a slightly edited excerpt of what is present in
devel/libpeas, a port that
uses the Python
flavors. With the default
Python 2 and 3 versions being 2.7
and 3.6, it will automatically get 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
This port does not use
| |
To guard against | |
The Gnome Python gobject3 bindings have two different names, one for Python 2, pygobject3 and one for Python 3, py3gobject3. | |
The | |
Hint about the correct Python 3 config script path name. | |
The packing list is different when the built with
Python 3. As there are three
possible Python 3 versions, set
|
To make the Makefile
easier to write,
a few flavors helpers exist.
This list of helpers will set their variable:
flavor
_PKGNAMEPREFIX
flavor
_PKGNAMESUFFIX
flavor
_PLIST
flavor
_DESCR
This list of helpers will append to their variable:
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
As all packages must have a different package name,
flavors must change theirs, using
and
flavor
_PKGNAMEPREFIX
makes this easy:flavor
_PKGNAMESUFFIX
FLAVORS= normal lite lite_PKGNAMESUFFIX= -lite
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.