diff options
Diffstat (limited to 'documentation/content/ru/books/porters-handbook/flavors/_index.adoc')
-rw-r--r-- | documentation/content/ru/books/porters-handbook/flavors/_index.adoc | 359 |
1 files changed, 359 insertions, 0 deletions
diff --git a/documentation/content/ru/books/porters-handbook/flavors/_index.adoc b/documentation/content/ru/books/porters-handbook/flavors/_index.adoc new file mode 100644 index 0000000000..f69bf3938d --- /dev/null +++ b/documentation/content/ru/books/porters-handbook/flavors/_index.adoc @@ -0,0 +1,359 @@ +--- +description: 'Флейворы — это способ создания нескольких вариаций порта' +next: books/porters-handbook/plist +params: + path: /books/porters-handbook/flavors/ +prev: books/porters-handbook/special +showBookMenu: true +tags: ["Ports", "Flavors", "introduction", "how-to", "guide"] +title: 'Глава 7. Флейворы' +weight: 7 +--- + +[[flavors]] += Флейворы +:doctype: book +:toc: macro +:toclevels: 1 +:icons: font +:sectnums: +:sectnumlevels: 6 +:sectnumoffset: 7 +:partnums: +:source-highlighter: rouge +:experimental: +:images-path: books/porters-handbook/ + +ifdef::env-beastie[] +ifdef::backend-html5[] +:imagesdir: ../../../../images/{images-path} +endif::[] +ifndef::book[] +include::shared/authors.adoc[] +include::shared/mirrors.adoc[] +include::shared/releases.adoc[] +include::shared/attributes/attributes-{{% lang %}}.adoc[] +include::shared/{{% lang %}}/teams.adoc[] +include::shared/{{% lang %}}/mailing-lists.adoc[] +include::shared/{{% lang %}}/urls.adoc[] +toc::[] +endif::[] +ifdef::backend-pdf,backend-epub3[] +include::../../../../../shared/asciidoctor.adoc[] +endif::[] +endif::[] + +ifndef::env-beastie[] +toc::[] +include::../../../../../shared/asciidoctor.adoc[] +endif::[] + +[[flavors-intro]] +== Введение в флейворы (Flavors) + +Флейворы (Flavors) — это способ создания нескольких вариаций порта. Порт собирается несколько раз с различными вариациями. + +Например, порт может иметь обычную версию с множеством функций и значительным количеством зависимостей, а также облегчённую "lite"-версию только с базовыми функциями и минимальными зависимостями. + +Еще одним примером может быть порт с вариантом GTK и вариантом QT, в зависимости от используемого набора инструментов. + +[[flavors-using]] +== Использование FLAVORS + +Чтобы объявить порт с несколькими флейворами, добавьте `FLAVORS` в его [.filename]#Makefile#. Первый вариант в `FLAVORS` является вариантом по умолчанию. + +[TIP] +==== +Это может помочь упростить логику [.filename]#Makefile#, также определив `FLAVOR` как: + +[.programlisting] +.... +FLAVOR?= ${FLAVORS:[1]} +.... +==== + +[IMPORTANT] +==== +Чтобы отличать флейворы от опций, которые всегда обозначаются заглавными буквами, названия флейворов могут содержать _только_ строчные буквы, цифры и символ подчёркивания `_`. +==== + +[[flavors-using-ex1]] +.Основы использования флейворов +[example] +==== +Если порт имеет "облегченный" подчиненный порт (lite slave port), подчиненный порт можно удалить, а порт преобразовать во флейворы с помощью: + +[.programlisting] +.... +FLAVORS= default lite +lite_PKGNAMESUFFIX= -lite +[...] +.if ${FLAVOR:U} != lite +[enable non lite features] +.endif +.... + +==== + +[[flavors-using-ex2]] +.Еще один пример базового использования флейворов +[example] +==== +Если порт имеет подчиненный порт `-nox11`, подчиненный порт можно удалить, а порт преобразовать в флейворы с помощью: + +[.programlisting] +.... +FLAVORS= x11 nox11 +FLAVOR?= ${FLAVORS:[1]} +nox11_PKGNAMESUFFIX= -nox11 +[...] +.if ${FLAVOR} == x11 +[enable x11 features] +.endif +.... + +==== + +[[flavors-using-ex3]] +.Использование флейворов в более сложных примерах +[example] +==== +Вот слегка отредактированный отрывок из того, что присутствует в пакете package:devel/libpeas[], порте, который использует crossref:flavors[flavors-auto-python,флейворы Python]. При стандартных версиях Python 2 и 3, а именно 2.7 и 3.6, он автоматически получит `FLAVORS=py27 py36` + +[.programlisting] +.... +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. Чтобы избежать ошибки в man:make[1] из-за пустого значения `FLAVOR`, используйте `${FLAVOR:U}` в сравнениях строк вместо `${FLAVOR}`. Привязки Gnome Python gobject3 имеют два разных названия: pygobject3 для Python 2 и py3gobject3 для Python 3. Скрипт `configure` должен выполняться в [.filename]#${WRKSRC}#, но нас интересует только сборка и установка частей программного обеспечения для Python 2 или Python 3, поэтому установите базовые каталоги сборки и установки соответствующим образом. Подсказка о правильном пути к конфигурационному скрипту Python 3. Список упаковки отличается при сборке с Python 3. Поскольку есть три возможные версии Python 3, установите `PLIST` для всех трёх с помощью crossref:flavors[flavors-using-helpers, вспомогательные инструменты флейворов]. +==== + +[[flavors-using-helpers]] +=== Вспомогательные инструменты для флейворов (Flavors Helpers) + +Чтобы упростить написание [.filename]#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` + +[[flavors-helpers-ex1]] +.Специфичный для флейвора `PKGNAME` +[example] +==== +Поскольку все пакеты должны иметь уникальные имена, флейворы должны изменять их, используя `__flavor___PKGNAMEPREFIX` и `__flavor___PKGNAMESUFFIX`, что упрощает задачу: + +[.programlisting] +.... +FLAVORS= normal lite +lite_PKGNAMESUFFIX= -lite +.... + +==== + +[[flavors-auto-php]] +== `USES=php` и флейворы + +При использовании crossref:uses[uses-php,`php`] с одним из этих аргументов: `phpize`, `ext`, `zend` или `pecl`, порт автоматически получит заполненный параметр `FLAVORS` с версиями PHP, которые он поддерживает. + +[[flavors-auto-php-ex1]] +.Простое расширение `USES=php` +[example] +==== +Это создаст пакет для всех поддерживаемых версий: + +[.programlisting] +.... +PORTNAME= some-ext +PORTVERSION= 0.0.1 +PKGNAMEPREFIX= ${PHP_PKGNAMEPREFIX} + +USES= php:ext +.... + +Это создаст пакет для всех поддерживаемых версий, кроме 7.2: + +[.programlisting] +.... +PORTNAME= some-ext +PORTVERSION= 0.0.1 +PKGNAMEPREFIX= ${PHP_PKGNAMEPREFIX} + +USES= php:ext +IGNORE_WITH_PHP= 72 +.... + +==== + +[[flavors-auto-php-app]] +=== Версии PHP с приложениями PHP + +Приложения PHP также могут быть созданы с использованием флейворов. + +Это позволяет создавать пакеты для всех версий PHP, чтобы пользователи могли использовать их с любой необходимой версией на своих серверах. + +[IMPORTANT] +==== +Приложения PHP, которые используют флейворы, _обязаны_ добавлять `PHP_PKGNAMESUFFIX` к именам своих пакетов. +==== + +[[flavors-auto-php-app-ex1]] +.Добавление флейворов в PHP-приложения +[example] +==== +Добавление поддержки флейворов в PHP-приложение просто: + +[.programlisting] +.... +PKGNAMESUFFIX= ${PHP_PKGNAMESUFFIX} + +USES= php:flavors +.... + +==== + +[TIP] +==== +При добавлении зависимости к порту с вариантом PHP используйте `@${PHP_FLAVOR}`. _Никогда_ не используйте `FLAVOR` напрямую. +==== + +[[flavors-auto-python]] +== `USES=python` и флейворы + +При использовании crossref:uses[uses-python,`python`] и `USE_PYTHON=distutils` порт автоматически получит заполненные `FLAVORS` с версиями Python, которые он поддерживает. + +[[flavors-auto-python-ex1]] +.Простой `USES=python` +[example] +==== +Предполагая, что поддерживаемые версии Python — 2.7, 3.4, 3.5 и 3.6, а версии Python 2 и 3 по умолчанию — 2.7 и 3.6, порт с параметрами: + +[.programlisting] +.... +USES= python +USE_PYTHON= distutils +.... + +получит следующие флейворы: `py27` и `py36`. + +[.programlisting] +.... +USES= python +USE_PYTHON= distutils allflavors +.... + +получит следующие флейворы: `py27`, `py34`, `py35` и `py36`. +==== + +[[flavors-auto-python-ex2]] +.`USES=python` с требованиями к версии +[example] +==== +Предполагая, что поддерживаемые версии Python — 2.7, 3.4, 3.5 и 3.6, а версии Python 2 и 3 по умолчанию — 2.7 и 3.6, порт с параметрами: + +[.programlisting] +.... +USES= python:-3.5 +USE_PYTHON= distutils +.... + +получит следующие флейвор: `py27`. + +[.programlisting] +.... +USES= python:-3.5 +USE_PYTHON= distutils allflavors +.... + +получит следующие флейворы: `py27`, `py34` и `py35`. + +[.programlisting] +.... +USES= python:3.4+ +USE_PYTHON= distutils +.... + +получит следующий флейвор: `py36`. + +[.programlisting] +.... +USES= python:3.4+ +USE_PYTHON= distutils allflavors +.... + +получит следующие флейворы: `py34`, `py35` и `py36`. +==== + +`PY_FLAVOR` доступен для указания правильной версии модулей Python. Все зависимости от вариантов портов Python должны использовать `PY_FLAVOR`, а не `FLAVOR` напрямую. + +[[flavors-auto-python-ex3]] +.Для порта, не использующего `distutils` +[example] +==== +Если версия Python 3 по умолчанию — 3.6, следующая команда установит `PY_FLAVOR` в значение `py36`: + +[.programlisting] +.... +RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}mutagen>0:audio/py-mutagen@${PY_FLAVOR} + +USES= python:3.5+ +.... + +==== + +[[flavors-auto-lua]] +== `USES=lua` и флейворы + +При использовании crossref:uses[uses-lua,`lua:module`] или crossref:uses[uses-lua,`lua:flavors`] порт автоматически получит заполненный параметр `FLAVORS` с версиями Lua, которые он поддерживает. Однако предполагается, что обычные приложения (а не модули Lua) не должны использовать эту возможность; большинству приложений, которые встраивают или иным образом используют Lua, следует просто указывать `USES=lua`. + +`LUA_FLAVOR` доступен (и должен использоваться) для зависимости от правильной версии зависимостей, независимо от того, использовал ли порт параметры `flavors` или `module`. + +См. crossref:special[using-lua,Использование Lua] для получения дополнительной информации. + +[[flavors-auto-guile]] +== `USES=guile` и флейворы + +При использовании crossref:uses[uses-guile,`guile:flavors`] порт автоматически получит заполненное поле `FLAVORS` с версиями Guile, которые он поддерживает. Однако не предполагается, что обычные приложения должны использовать эту возможность; она в первую очередь предназначена для библиотек и расширений, таких как `guile-lib` или `guile-cairo`. + +`GUILE_FLAVOR` доступен (и должен использоваться) для зависимости от правильной версии зависимостей с флейворами, независимо от того, использовал ли порт параметр `flavors` или нет. + +См. crossref:special[using-guile,Использование Guile] для получения дополнительной информации. |