Index: head/en_US.ISO8859-1/books/porters-handbook/flavors/chapter.xml =================================================================== --- head/en_US.ISO8859-1/books/porters-handbook/flavors/chapter.xml (revision 51248) +++ head/en_US.ISO8859-1/books/porters-handbook/flavors/chapter.xml (revision 51249) @@ -1,316 +1,321 @@ Flavors An Introduction to Flavors Flavors are a way to have multiple variations of a port. The port is built multiple times, with variations. For example, a port can have a normal version with many features and quite a few dependencies, and a light lite version with only basic features and minimal dependencies. Using FLAVORS To declare a port having multiple flavors, add FLAVORS to its Makefile. The first flavor in FLAVORS is the default flavor. To distinguish flavors from options, which are always uppercase letters, flavor names can only contain lowercase letters, numbers, and the underscore _. Basic Flavors Usage If a port has a lite slave port, the slave port can be removed, and the port can be converted to flavors with: FLAVORS= normal lite lite_PKGNAMESUFFIX= -lite [...] .if ${FLAVOR:U} != lite [enable non lite features] .endif More Complex Flavors Usage Here is a slightly edited exceprt 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=distutils but needs Python flavors anyway. To guard against FLAVOR being empty, which would cause a &man.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 configure script 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 PLIST for all three using the helper. Flavors Helpers 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 Flavor Specific <varname>PKGNAME</varname> As all packages must have a different package name, flavors must change theirs, using flavor_PKGNAMESUFFIX and flavor_PKGNAMESUFFIX makes this easy: FLAVORS= normal lite lite_PKGNAMESUFFIX= -lite Flavors Auto-Activation <literal>USES=python</literal> and Flavors When using USES=python and USE_PYTHON=distutils, the port will automatically have FLAVORS filled in with the Python versions it supports. Simple <literal>USES=python</literal> Supposing the current Python supported versions are 2.7, 3.4, 3.5, and 3.6, and the default Python 2 and 3 versions are 2.7 and 3.6, a port with: USES= python USE_PYTHON= distutils Will get these flavors: py27, and py36. USES= python USE_PYTHON= distutils allflavors Will get these flavors: py27, py34, py35 and py36. <literal>USES=python</literal> with Version Requirements Supposing the current Python supported versions are 2.7, 3.4, 3.5, and 3.6, and the default Python 2 and 3 versions are 2.7 and 3.6, a port with: USES= python:-3.5 USE_PYTHON= distutils + Will get this flavor: py27. + + USES= python:-3.5 +USE_PYTHON= distutils allflavors + Will get these flavors: py27, py34, and py35. USES= python:3.4+ USE_PYTHON= distutils - Will get these flavors: py36. + Will get this flavor: py36. USES= python:3.4+ USE_PYTHON= distutils allflavors Will get these flavors: py34, py35, and py36. PY_FLAVOR will be available to depend on the correct version of Python modules. This is most useful for ports that are not Python modules and do not have Python flavors but do use python for some part of their operations. For a Port Not Using <literal>distutils</literal> If the default Python 3 version is 3.6, the following will set PY_FLAVOR to py36: RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}mutagen>0:audio/py-mutagen@${PY_FLAVOR} USES= python:3.5+