FLAVOR?= ${FLAVORS:[1]}Глава 7. Флейворы
Этот перевод может быть устаревшим. Для того, чтобы помочь с переводом, пожалуйста, обратитесь к Сервер переводов FreeBSD.
Содержание
7.1. Введение в флейворы (Flavors)
Флейворы (Flavors) — это способ создания нескольких вариаций порта. Порт собирается несколько раз с различными вариациями.
Например, порт может иметь обычную версию с множеством функций и значительным количеством зависимостей, а также облегчённую "lite"-версию только с базовыми функциями и минимальными зависимостями.
Еще одним примером может быть порт с вариантом GTK и вариантом QT, в зависимости от используемого набора инструментов.
7.2. Использование FLAVORS
Чтобы объявить порт с несколькими флейворами, добавьте FLAVORS в его Makefile. Первый вариант в FLAVORS является вариантом по умолчанию.
Это может помочь упростить логику Makefile, также определив |
Чтобы отличать флейворы от опций, которые всегда обозначаются заглавными буквами, названия флейворов могут содержать только строчные буквы, цифры и символ подчёркивания |
Если порт имеет "облегченный" подчиненный порт (lite slave port), подчиненный порт можно удалить, а порт преобразовать во флейворы с помощью:
FLAVORS= default lite
lite_PKGNAMESUFFIX= -lite
[...]
.if ${FLAVOR:U} != lite
[enable non lite features]
.endifЕсли порт имеет подчиненный порт -nox11, подчиненный порт можно удалить, а порт преобразовать в флейворы с помощью:
FLAVORS= x11 nox11
FLAVOR?= ${FLAVORS:[1]}
nox11_PKGNAMESUFFIX= -nox11
[...]
.if ${FLAVOR} == x11
[enable x11 features]
.endifВот слегка отредактированный отрывок из того, что присутствует в пакете devel/libpeas, порте, который использует флейворы Python. При стандартных версиях 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. Чтобы избежать ошибки в make(1) из-за пустого значения FLAVOR, используйте ${FLAVOR:U} в сравнениях строк вместо ${FLAVOR}. Привязки Gnome Python gobject3 имеют два разных названия: pygobject3 для Python 2 и py3gobject3 для Python 3. Скрипт configure должен выполняться в ${WRKSRC}, но нас интересует только сборка и установка частей программного обеспечения для Python 2 или Python 3, поэтому установите базовые каталоги сборки и установки соответствующим образом. Подсказка о правильном пути к конфигурационному скрипту Python 3. Список упаковки отличается при сборке с Python 3. Поскольку есть три возможные версии Python 3, установите PLIST для всех трёх с помощью вспомогательные инструменты флейворов.
7.2.1. Вспомогательные инструменты для флейворов (Flavors Helpers)
Чтобы упростить написание Makefile, существуют несколько вспомогательных инструментов (помощников) флейворов.
Этот список помощников установит их переменную:
flavor_PKGNAMEPREFIXflavor_PKGNAMESUFFIXflavor_PLISTflavor_DESCR
Этот список помощников будет добавлен к их переменной:
flavor_CONFLICTSflavor_CONFLICTS_BUILDflavor_CONFLICTS_INSTALLflavor_PKG_DEPENDSflavor_EXTRACT_DEPENDSflavor_PATCH_DEPENDSflavor_FETCH_DEPENDSflavor_BUILD_DEPENDSflavor_LIB_DEPENDSflavor_RUN_DEPENDSflavor_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= 727.3.1. Версии PHP с приложениями PHP
Приложения PHP также могут быть созданы с использованием флейворов.
Это позволяет создавать пакеты для всех версий PHP, чтобы пользователи могли использовать их с любой необходимой версией на своих серверах.
Приложения PHP, которые используют флейворы, обязаны добавлять |
Добавление поддержки флейворов в PHP-приложение просто:
PKGNAMESUFFIX= ${PHP_PKGNAMESUFFIX}
USES= php:flavorsПри добавлении зависимости к порту с вариантом PHP используйте |
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 для получения дополнительной информации.
Изменено: 9 ноября 2025 г. by Vladlen Popolitov