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_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.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 для получения дополнительной информации.
Изменено: 18 сентября 2025 г. by Vladlen Popolitov