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]
.endifThe 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]
.endifHere 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
USE_PYTHON=distutilsbut needs Python flavors anyway.To guard against
FLAVORbeing empty, which would cause a make(1) error, use${FLAVOR:U}in string comparisons instead of${FLAVOR}.The Gnome Python gobject3 bindings have two different names, one for Python 2, pygobject3 and one for Python 3, py3gobject3.
The
configurescript has to run in${WRKSRC}, but we are only interested in building and installing the Python 2 or Python 3 parts of the software, so set the build and install base directories appropriately.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
PLISTfor all three using the helper.
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
PKGNAMEAs 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>.