aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladlen Popolitov <vladlen@FreeBSD.org>2025-09-18 19:21:21 +0000
committerVladlen Popolitov <vladlen@FreeBSD.org>2025-09-18 19:21:34 +0000
commitf12ee9e99a2c070bcf4965efe40975cb0f47c6ca (patch)
treec81b05b62c8da41a942de02f5351bcfc60e73267
parentcf5e9c58a92907aa55ec267f19f14bba2215c020 (diff)
update translation of books/porters-handbook to Russian
Reviewed by: maxim (mentor) and arrowd Approved by: maxim (mentor) and carlavilla Differential Revision: https://reviews.freebsd.org/D52053
-rw-r--r--documentation/content/ru/books/porters-handbook/_index.adoc20
-rw-r--r--documentation/content/ru/books/porters-handbook/_index.po37
-rw-r--r--documentation/content/ru/books/porters-handbook/book.adoc17
-rw-r--r--documentation/content/ru/books/porters-handbook/book.po37
-rw-r--r--documentation/content/ru/books/porters-handbook/flavors/_index.adoc359
-rw-r--r--documentation/content/ru/books/porters-handbook/flavors/_index.po801
-rw-r--r--documentation/content/ru/books/porters-handbook/keeping-up/_index.adoc39
-rw-r--r--documentation/content/ru/books/porters-handbook/keeping-up/_index.po270
-rw-r--r--documentation/content/ru/books/porters-handbook/makefiles/_index.adoc4260
-rw-r--r--documentation/content/ru/books/porters-handbook/makefiles/_index.po14066
-rw-r--r--documentation/content/ru/books/porters-handbook/new-port/_index.adoc14
-rw-r--r--documentation/content/ru/books/porters-handbook/new-port/_index.po101
-rw-r--r--documentation/content/ru/books/porters-handbook/order/_index.adoc260
-rw-r--r--documentation/content/ru/books/porters-handbook/order/_index.po780
-rw-r--r--documentation/content/ru/books/porters-handbook/pkg-files/_index.adoc228
-rw-r--r--documentation/content/ru/books/porters-handbook/pkg-files/_index.po873
-rw-r--r--documentation/content/ru/books/porters-handbook/plist/_index.adoc548
-rw-r--r--documentation/content/ru/books/porters-handbook/plist/_index.po1731
-rw-r--r--documentation/content/ru/books/porters-handbook/porting-dads/_index.adoc214
-rw-r--r--documentation/content/ru/books/porters-handbook/porting-dads/_index.po1473
-rw-r--r--documentation/content/ru/books/porters-handbook/porting-samplem/_index.adoc138
-rw-r--r--documentation/content/ru/books/porters-handbook/porting-samplem/_index.po412
-rw-r--r--documentation/content/ru/books/porters-handbook/porting-why/_index.adoc10
-rw-r--r--documentation/content/ru/books/porters-handbook/porting-why/_index.po61
-rw-r--r--documentation/content/ru/books/porters-handbook/quick-porting/_index.adoc166
-rw-r--r--documentation/content/ru/books/porters-handbook/quick-porting/_index.po767
-rw-r--r--documentation/content/ru/books/porters-handbook/security/_index.adoc158
-rw-r--r--documentation/content/ru/books/porters-handbook/security/_index.po858
-rw-r--r--documentation/content/ru/books/porters-handbook/slow-porting/_index.adoc173
-rw-r--r--documentation/content/ru/books/porters-handbook/slow-porting/_index.po1017
-rw-r--r--documentation/content/ru/books/porters-handbook/special/_index.adoc4192
-rw-r--r--documentation/content/ru/books/porters-handbook/special/_index.po14978
-rw-r--r--documentation/content/ru/books/porters-handbook/testing/_index.adoc460
-rw-r--r--documentation/content/ru/books/porters-handbook/testing/_index.po1685
-rw-r--r--documentation/content/ru/books/porters-handbook/upgrading/_index.adoc181
-rw-r--r--documentation/content/ru/books/porters-handbook/upgrading/_index.po688
-rw-r--r--documentation/content/ru/books/porters-handbook/uses/_index.adoc2185
-rw-r--r--documentation/content/ru/books/porters-handbook/uses/_index.po9971
-rw-r--r--documentation/content/ru/books/porters-handbook/versions/_index.adoc6184
-rw-r--r--documentation/content/ru/books/porters-handbook/versions/_index.po33861
40 files changed, 98721 insertions, 5552 deletions
diff --git a/documentation/content/ru/books/porters-handbook/_index.adoc b/documentation/content/ru/books/porters-handbook/_index.adoc
index 5b066cb5b0..0446d79b28 100644
--- a/documentation/content/ru/books/porters-handbook/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/_index.adoc
@@ -1,15 +1,19 @@
---
-title: Руководство FreeBSD по созданию портов
-authors:
- - author: The FreeBSD Documentation Project
-copyright: 2000-2020 The FreeBSD Documentation Project
-trademarks: ["freebsd", "sun", "unix", "general"]
-next: books/porters-handbook/porting-why
add_single_page_link: true
+authors:
+ -
+ author: 'The FreeBSD Documentation Project'
+bookOrder: 15
+copyright: '2000-2023 The FreeBSD Documentation Project'
+description: 'Обязательно к прочтению, если вы планируете портировать стороннее программное обеспечение'
+next: books/porters-handbook/porting-why
+params:
+ path: /books/porters-handbook/
showBookMenu: true
+tags: "[\"FreeBSD Porter's Handbook\", \"Porting\", \"FreeBSD Ports Collection\"]"
+title: 'Руководство FreeBSD по созданию портов'
+trademarks: ["freebsd", "sun", "unix", "general"]
weight: 0
-params:
- path: "/books/porters-handbook/"
---
= Руководство FreeBSD по созданию портов
diff --git a/documentation/content/ru/books/porters-handbook/_index.po b/documentation/content/ru/books/porters-handbook/_index.po
new file mode 100644
index 0000000000..1aa07698c1
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/_index.po
@@ -0,0 +1,37 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-12 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbook_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/_index.adoc:1
+#, no-wrap
+msgid "Essential reading if you plan on providing a port of a third party piece of software"
+msgstr "Обязательно к прочтению, если вы планируете портировать стороннее программное обеспечение"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/_index.adoc:1
+#: documentation/content/en/books/porters-handbook/_index.adoc:18
+#, no-wrap
+msgid "FreeBSD Porter's Handbook"
+msgstr "Руководство FreeBSD по созданию портов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/_index.adoc:49
+msgid "'''"
+msgstr "'''"
diff --git a/documentation/content/ru/books/porters-handbook/book.adoc b/documentation/content/ru/books/porters-handbook/book.adoc
index 73c6b67672..84bedca43a 100644
--- a/documentation/content/ru/books/porters-handbook/book.adoc
+++ b/documentation/content/ru/books/porters-handbook/book.adoc
@@ -1,13 +1,16 @@
---
-title: Руководство FreeBSD по созданию портов
-authors:
- - author: The FreeBSD Documentation Project
-copyright: 2000-2020 The FreeBSD Documentation Project
-trademarks: ["freebsd", "sun", "unix", "general"]
add_split_page_link: true
+authors:
+ -
+ author: 'The FreeBSD Documentation Project'
+copyright: '2000-2023 The FreeBSD Documentation Project'
+description: 'Обязательно к прочтению, если вы планируете портировать стороннее программное обеспечение'
+tags: "[\"FreeBSD Porter's Handbook\", \"Porting\", \"FreeBSD Ports Collection\"]"
+title: 'Руководство FreeBSD по созданию портов'
+trademarks: ["freebsd", "sun", "unix", "general"]
---
-= FreeBSD Porter's Handbook
+= Руководство FreeBSD по созданию портов
:doctype: book
:toc: macro
:toclevels: 2
@@ -52,6 +55,7 @@ include::{chapters-path}quick-porting/_index.adoc[leveloffset=+1]
include::{chapters-path}slow-porting/_index.adoc[leveloffset=+1]
include::{chapters-path}makefiles/_index.adoc[leveloffset=+1]
include::{chapters-path}special/_index.adoc[leveloffset=+1]
+include::{chapters-path}flavors/_index.adoc[leveloffset=+1]
include::{chapters-path}plist/_index.adoc[leveloffset=+1]
include::{chapters-path}pkg-files/_index.adoc[leveloffset=+1]
include::{chapters-path}testing/_index.adoc[leveloffset=+1]
@@ -59,6 +63,7 @@ include::{chapters-path}upgrading/_index.adoc[leveloffset=+1]
include::{chapters-path}security/_index.adoc[leveloffset=+1]
include::{chapters-path}porting-dads/_index.adoc[leveloffset=+1]
include::{chapters-path}porting-samplem/_index.adoc[leveloffset=+1]
+include::{chapters-path}order/_index.adoc[leveloffset=+1]
include::{chapters-path}keeping-up/_index.adoc[leveloffset=+1]
include::{chapters-path}uses/_index.adoc[leveloffset=+1]
include::{chapters-path}versions/_index.adoc[leveloffset=+1]
diff --git a/documentation/content/ru/books/porters-handbook/book.po b/documentation/content/ru/books/porters-handbook/book.po
new file mode 100644
index 0000000000..2994c7daaa
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/book.po
@@ -0,0 +1,37 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-12 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookbook/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/book.adoc:1
+#, no-wrap
+msgid "Essential reading if you plan on providing a port of a third party piece of software"
+msgstr "Обязательно к прочтению, если вы планируете портировать стороннее программное обеспечение"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/book.adoc:1
+#: documentation/content/en/books/porters-handbook/book.adoc:12
+#, no-wrap
+msgid "FreeBSD Porter's Handbook"
+msgstr "Руководство FreeBSD по созданию портов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/book.adoc:48
+msgid "'''"
+msgstr "'''"
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] для получения дополнительной информации.
diff --git a/documentation/content/ru/books/porters-handbook/flavors/_index.po b/documentation/content/ru/books/porters-handbook/flavors/_index.po
new file mode 100644
index 0000000000..9e9ed2fcb6
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/flavors/_index.po
@@ -0,0 +1,801 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-13 19:10+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookflavors_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:1
+#, no-wrap
+msgid "Flavors are a way to have multiple variations of a port"
+msgstr "Флейворы — это способ создания нескольких вариаций порта"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:1
+#, no-wrap
+msgid "Chapter 7. Flavors"
+msgstr "Глава 7. Флейворы"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:14
+#, no-wrap
+msgid "Flavors"
+msgstr "Флейворы"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:52
+#, no-wrap
+msgid "An Introduction to Flavors"
+msgstr "Введение в флейворы (Flavors)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:56
+msgid ""
+"Flavors are a way to have multiple variations of a port. The port is built "
+"multiple times, with variations."
+msgstr ""
+"Флейворы (Flavors) — это способ создания нескольких вариаций порта. Порт "
+"собирается несколько раз с различными вариациями."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:58
+msgid ""
+"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."
+msgstr ""
+"Например, порт может иметь обычную версию с множеством функций и "
+"значительным количеством зависимостей, а также облегчённую \"lite\"-версию "
+"только с базовыми функциями и минимальными зависимостями."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:60
+msgid ""
+"Another example could be, a port can have a GTK flavor and a QT flavor, "
+"depending on which toolkit it uses."
+msgstr ""
+"Еще одним примером может быть порт с вариантом GTK и вариантом QT, в "
+"зависимости от используемого набора инструментов."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:62
+#, no-wrap
+msgid "Using FLAVORS"
+msgstr "Использование FLAVORS"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:66
+msgid ""
+"To declare a port having multiple flavors, add `FLAVORS` to its "
+"[.filename]#Makefile#. The first flavor in `FLAVORS` is the default flavor."
+msgstr ""
+"Чтобы объявить порт с несколькими флейворами, добавьте `FLAVORS` в его "
+"[.filename]#Makefile#. Первый вариант в `FLAVORS` является вариантом по "
+"умолчанию."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:70
+msgid ""
+"It can help simplify the logic of the [.filename]#Makefile# to also define "
+"`FLAVOR` as:"
+msgstr ""
+"Это может помочь упростить логику [.filename]#Makefile#, также определив "
+"`FLAVOR` как:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:74
+#, no-wrap
+msgid "FLAVOR?=\t${FLAVORS:[1]}\n"
+msgstr "FLAVOR?=\t${FLAVORS:[1]}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:80
+msgid ""
+"To distinguish flavors from options, which are always uppercase letters, "
+"flavor names can _only_ contain lowercase letters, numbers, and the "
+"underscore `_`."
+msgstr ""
+"Чтобы отличать флейворы от опций, которые всегда обозначаются заглавными "
+"буквами, названия флейворов могут содержать _только_ строчные буквы, цифры и "
+"символ подчёркивания `_`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:83
+#, no-wrap
+msgid "Basic Flavors Usage"
+msgstr "Основы использования флейворов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:87
+msgid ""
+"If a port has a \"lite\" slave port, the slave port can be removed, and the "
+"port can be converted to flavors with:"
+msgstr ""
+"Если порт имеет \"облегченный\" подчиненный порт (lite slave port), "
+"подчиненный порт можно удалить, а порт преобразовать во флейворы с помощью:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:96
+#, no-wrap
+msgid ""
+"FLAVORS=\tdefault lite\n"
+"lite_PKGNAMESUFFIX=\t-lite\n"
+"[...]\n"
+".if ${FLAVOR:U} != lite\n"
+"[enable non lite features]\n"
+".endif\n"
+msgstr ""
+"FLAVORS=\tdefault lite\n"
+"lite_PKGNAMESUFFIX=\t-lite\n"
+"[...]\n"
+".if ${FLAVOR:U} != lite\n"
+"[enable non lite features]\n"
+".endif\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:101
+#, no-wrap
+msgid "Another Basic Flavors Usage"
+msgstr "Еще один пример базового использования флейворов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:105
+msgid ""
+"If a port has a `-nox11` slave port, the slave port can be removed, and the "
+"port can be converted to flavors with:"
+msgstr ""
+"Если порт имеет подчиненный порт `-nox11`, подчиненный порт можно удалить, а "
+"порт преобразовать в флейворы с помощью:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:115
+#, no-wrap
+msgid ""
+"FLAVORS=\tx11 nox11\n"
+"FLAVOR?=\t${FLAVORS:[1]}\n"
+"nox11_PKGNAMESUFFIX=\t-nox11\n"
+"[...]\n"
+".if ${FLAVOR} == x11\n"
+"[enable x11 features]\n"
+".endif\n"
+msgstr ""
+"FLAVORS=\tx11 nox11\n"
+"FLAVOR?=\t${FLAVORS:[1]}\n"
+"nox11_PKGNAMESUFFIX=\t-nox11\n"
+"[...]\n"
+".if ${FLAVOR} == x11\n"
+"[enable x11 features]\n"
+".endif\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:120
+#, no-wrap
+msgid "More Complex Flavors Usage"
+msgstr "Использование флейворов в более сложных примерах"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:126
+msgid ""
+"Here is a slightly edited excerpt of what is present in package:devel/"
+"libpeas[], a port that uses the crossref:flavors[flavors-auto-python,Python "
+"flavors]. With the default Python 2 and 3 versions being 2.7 and 3.6, it "
+"will automatically get `FLAVORS=py27 py36`"
+msgstr ""
+"Вот слегка отредактированный отрывок из того, что присутствует в пакете "
+"package:devel/libpeas[], порте, который использует crossref:flavors[flavors-"
+"auto-python,флейворы Python]. При стандартных версиях Python 2 и 3, а именно "
+"2.7 и 3.6, он автоматически получит `FLAVORS=py27 py36`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:131
+#, no-wrap
+msgid ""
+"USES=\t\tgnome python\n"
+"USE_PYTHON=\tflavors \n"
+msgstr ""
+"USES=\t\tgnome python\n"
+"USE_PYTHON=\tflavors \n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:134
+#, no-wrap
+msgid ""
+".if ${FLAVOR:Upy27:Mpy2*} \n"
+"USE_GNOME=\tpygobject3 \n"
+msgstr ""
+".if ${FLAVOR:Upy27:Mpy2*} \n"
+"USE_GNOME=\tpygobject3 \n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:136
+#, no-wrap
+msgid "CONFIGURE_ARGS+=\t--enable-python2 --disable-python3\n"
+msgstr "CONFIGURE_ARGS+=\t--enable-python2 --disable-python3\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:141
+#, no-wrap
+msgid ""
+"BUILD_WRKSRC=\t${WRKSRC}/loaders/python \n"
+"INSTALL_WRKSRC=\t${WRKSRC}/loaders/python \n"
+".else # py3*\n"
+"USE_GNOME+=\tpy3gobject3 \n"
+msgstr ""
+"BUILD_WRKSRC=\t${WRKSRC}/loaders/python \n"
+"INSTALL_WRKSRC=\t${WRKSRC}/loaders/python \n"
+".else # py3*\n"
+"USE_GNOME+=\tpy3gobject3 \n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:144
+#, no-wrap
+msgid ""
+"CONFIGURE_ARGS+=\t--disable-python2 --enable-python3 \\\n"
+"\t\t\tac_cv_path_PYTHON3_CONFIG=${LOCALBASE}/bin/python${PYTHON_VER}-config \n"
+msgstr ""
+"CONFIGURE_ARGS+=\t--disable-python2 --enable-python3 \\\n"
+"\t\t\tac_cv_path_PYTHON3_CONFIG=${LOCALBASE}/bin/python${PYTHON_VER}-config \n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:148
+#, no-wrap
+msgid ""
+"BUILD_WRKSRC=\t${WRKSRC}/loaders/python3 \n"
+"INSTALL_WRKSRC=\t${WRKSRC}/loaders/python3 \n"
+".endif\n"
+msgstr ""
+"BUILD_WRKSRC=\t${WRKSRC}/loaders/python3 \n"
+"INSTALL_WRKSRC=\t${WRKSRC}/loaders/python3 \n"
+".endif\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:152
+#, no-wrap
+msgid ""
+"py34_PLIST=\t${.CURDIR}/pkg-plist-py3 \n"
+"py35_PLIST=\t${.CURDIR}/pkg-plist-py3 \n"
+"py36_PLIST=\t${.CURDIR}/pkg-plist-py3\n"
+msgstr ""
+"py34_PLIST=\t${.CURDIR}/pkg-plist-py3 \n"
+"py35_PLIST=\t${.CURDIR}/pkg-plist-py3 \n"
+"py36_PLIST=\t${.CURDIR}/pkg-plist-py3\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:162
+msgid ""
+"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 [.filename]#${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 crossref:flavors[flavors-using-"
+"helpers,helper]."
+msgstr ""
+"Этот порт не использует `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, вспомогательные инструменты флейворов]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:165
+#, no-wrap
+msgid "Flavors Helpers"
+msgstr "Вспомогательные инструменты для флейворов (Flavors Helpers)"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:168
+msgid ""
+"To make the [.filename]#Makefile# easier to write, a few flavors helpers "
+"exist."
+msgstr ""
+"Чтобы упростить написание [.filename]#Makefile#, существуют несколько "
+"вспомогательных инструментов (помощников) флейворов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:170
+msgid "This list of helpers will set their variable:"
+msgstr "Этот список помощников установит их переменную:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:172
+msgid "`__flavor___PKGNAMEPREFIX`"
+msgstr "`__flavor___PKGNAMEPREFIX`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:173
+msgid "`__flavor___PKGNAMESUFFIX`"
+msgstr "`__flavor___PKGNAMESUFFIX`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:174
+msgid "`__flavor___PLIST`"
+msgstr "`__flavor___PLIST`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:175
+msgid "`__flavor___DESCR`"
+msgstr "`__flavor___DESCR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:177
+msgid "This list of helpers will append to their variable:"
+msgstr "Этот список помощников будет добавлен к их переменной:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:179
+msgid "`__flavor___CONFLICTS`"
+msgstr "`__flavor___CONFLICTS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:180
+msgid "`__flavor___CONFLICTS_BUILD`"
+msgstr "`__flavor___CONFLICTS_BUILD`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:181
+msgid "`__flavor___CONFLICTS_INSTALL`"
+msgstr "`__flavor___CONFLICTS_INSTALL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:182
+msgid "`__flavor___PKG_DEPENDS`"
+msgstr "`__flavor___PKG_DEPENDS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:183
+msgid "`__flavor___EXTRACT_DEPENDS`"
+msgstr "`__flavor___EXTRACT_DEPENDS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:184
+msgid "`__flavor___PATCH_DEPENDS`"
+msgstr "`__flavor___PATCH_DEPENDS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:185
+msgid "`__flavor___FETCH_DEPENDS`"
+msgstr "`__flavor___FETCH_DEPENDS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:186
+msgid "`__flavor___BUILD_DEPENDS`"
+msgstr "`__flavor___BUILD_DEPENDS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:187
+msgid "`__flavor___LIB_DEPENDS`"
+msgstr "`__flavor___LIB_DEPENDS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:188
+msgid "`__flavor___RUN_DEPENDS`"
+msgstr "`__flavor___RUN_DEPENDS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:189
+msgid "`__flavor___TEST_DEPENDS`"
+msgstr "`__flavor___TEST_DEPENDS`"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:191
+#, no-wrap
+msgid "Flavor Specific `PKGNAME`"
+msgstr "Специфичный для флейвора `PKGNAME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:195
+msgid ""
+"As all packages must have a different package name, flavors must change "
+"theirs, using `__flavor___PKGNAMEPREFIX` and `__flavor___PKGNAMESUFFIX` "
+"makes this easy:"
+msgstr ""
+"Поскольку все пакеты должны иметь уникальные имена, флейворы должны изменять "
+"их, используя `__flavor___PKGNAMEPREFIX` и `__flavor___PKGNAMESUFFIX`, что "
+"упрощает задачу:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:200
+#, no-wrap
+msgid ""
+"FLAVORS=\tnormal lite\n"
+"lite_PKGNAMESUFFIX=\t-lite\n"
+msgstr ""
+"FLAVORS=\tnormal lite\n"
+"lite_PKGNAMESUFFIX=\t-lite\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:205
+#, no-wrap
+msgid "`USES=php` and Flavors"
+msgstr "`USES=php` и флейворы"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:209
+msgid ""
+"When using crossref:uses[uses-php,`php`] with one of these arguments, "
+"`phpize`, `ext`, `zend`, or `pecl`, the port will automatically have "
+"`FLAVORS` filled in with the PHP versions it supports."
+msgstr ""
+"При использовании crossref:uses[uses-php,`php`] с одним из этих аргументов: "
+"`phpize`, `ext`, `zend` или `pecl`, порт автоматически получит заполненный "
+"параметр `FLAVORS` с версиями PHP, которые он поддерживает."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:211
+#, no-wrap
+msgid "Simple `USES=php` Extension"
+msgstr "Простое расширение `USES=php`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:215
+msgid "This will generate package for all the supported versions:"
+msgstr "Это создаст пакет для всех поддерживаемых версий:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:221
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:232
+#, no-wrap
+msgid ""
+"PORTNAME=\tsome-ext\n"
+"PORTVERSION=\t0.0.1\n"
+"PKGNAMEPREFIX=\t${PHP_PKGNAMEPREFIX}\n"
+msgstr ""
+"PORTNAME=\tsome-ext\n"
+"PORTVERSION=\t0.0.1\n"
+"PKGNAMEPREFIX=\t${PHP_PKGNAMEPREFIX}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:223
+#, no-wrap
+msgid "USES=\t\tphp:ext\n"
+msgstr "USES=\t\tphp:ext\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:226
+msgid "This will generate package for all the supported versions but 7.2:"
+msgstr "Это создаст пакет для всех поддерживаемых версий, кроме 7.2:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:235
+#, no-wrap
+msgid ""
+"USES=\t\tphp:ext\n"
+"IGNORE_WITH_PHP=\t72\n"
+msgstr ""
+"USES=\t\tphp:ext\n"
+"IGNORE_WITH_PHP=\t72\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:240
+#, no-wrap
+msgid "PHP Flavors with PHP Applications"
+msgstr "Версии PHP с приложениями PHP"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:243
+msgid "PHP applications can also be flavorized."
+msgstr "Приложения PHP также могут быть созданы с использованием флейворов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:245
+msgid ""
+"This allows generating packages for all PHP versions, so that users can use "
+"them with whatever version they need on their servers."
+msgstr ""
+"Это позволяет создавать пакеты для всех версий PHP, чтобы пользователи могли "
+"использовать их с любой необходимой версией на своих серверах."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:249
+msgid ""
+"PHP applications that are flavorized _must_ append `PHP_PKGNAMESUFFIX` to "
+"their package names."
+msgstr ""
+"Приложения PHP, которые используют флейворы, _обязаны_ добавлять "
+"`PHP_PKGNAMESUFFIX` к именам своих пакетов."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:252
+#, no-wrap
+msgid "Flavorizing a PHP Application"
+msgstr "Добавление флейворов в PHP-приложения"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:256
+msgid "Adding Flavors support to a PHP application is straightforward:"
+msgstr "Добавление поддержки флейворов в PHP-приложение просто:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:260
+#, no-wrap
+msgid "PKGNAMESUFFIX=\t${PHP_PKGNAMESUFFIX}\n"
+msgstr "PKGNAMESUFFIX=\t${PHP_PKGNAMESUFFIX}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:262
+#, no-wrap
+msgid "USES=\tphp:flavors\n"
+msgstr "USES=\tphp:flavors\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:270
+msgid ""
+"When adding a dependency on a PHP flavored port, use `@${PHP_FLAVOR}`. "
+"_Never_ use `FLAVOR` directly."
+msgstr ""
+"При добавлении зависимости к порту с вариантом PHP используйте `@$"
+"{PHP_FLAVOR}`. _Никогда_ не используйте `FLAVOR` напрямую."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:273
+#, no-wrap
+msgid "`USES=python` and Flavors"
+msgstr "`USES=python` и флейворы"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:277
+msgid ""
+"When using crossref:uses[uses-python,`python`] and `USE_PYTHON=distutils`, "
+"the port will automatically have `FLAVORS` filled in with the Python "
+"versions it supports."
+msgstr ""
+"При использовании crossref:uses[uses-python,`python`] и "
+"`USE_PYTHON=distutils` порт автоматически получит заполненные `FLAVORS` с "
+"версиями Python, которые он поддерживает."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:279
+#, no-wrap
+msgid "Simple `USES=python`"
+msgstr "Простой `USES=python`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:283
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:306
+msgid ""
+"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:"
+msgstr ""
+"Предполагая, что поддерживаемые версии Python — 2.7, 3.4, 3.5 и 3.6, а "
+"версии Python 2 и 3 по умолчанию — 2.7 и 3.6, порт с параметрами:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:288
+#, no-wrap
+msgid ""
+"USES=\tpython\n"
+"USE_PYTHON=\tdistutils\n"
+msgstr ""
+"USES=\tpython\n"
+"USE_PYTHON=\tdistutils\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:291
+msgid "Will get these flavors: `py27`, and `py36`."
+msgstr "получит следующие флейворы: `py27` и `py36`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:296
+#, no-wrap
+msgid ""
+"USES=\tpython\n"
+"USE_PYTHON=\tdistutils allflavors\n"
+msgstr ""
+"USES=\tpython\n"
+"USE_PYTHON=\tdistutils allflavors\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:299
+msgid "Will get these flavors: `py27`, `py34`, `py35` and `py36`."
+msgstr "получит следующие флейворы: `py27`, `py34`, `py35` и `py36`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:302
+#, no-wrap
+msgid "`USES=python` with Version Requirements"
+msgstr "`USES=python` с требованиями к версии"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:311
+#, no-wrap
+msgid ""
+"USES=\tpython:-3.5\n"
+"USE_PYTHON=\tdistutils\n"
+msgstr ""
+"USES=\tpython:-3.5\n"
+"USE_PYTHON=\tdistutils\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:314
+msgid "Will get this flavor: `py27`."
+msgstr "получит следующие флейвор: `py27`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:319
+#, no-wrap
+msgid ""
+"USES=\tpython:-3.5\n"
+"USE_PYTHON=\tdistutils allflavors\n"
+msgstr ""
+"USES=\tpython:-3.5\n"
+"USE_PYTHON=\tdistutils allflavors\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:322
+msgid "Will get these flavors: `py27`, `py34`, and `py35`."
+msgstr "получит следующие флейворы: `py27`, `py34` и `py35`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:327
+#, no-wrap
+msgid ""
+"USES=\tpython:3.4+\n"
+"USE_PYTHON=\tdistutils\n"
+msgstr ""
+"USES=\tpython:3.4+\n"
+"USE_PYTHON=\tdistutils\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:330
+msgid "Will get this flavor: `py36`."
+msgstr "получит следующий флейвор: `py36`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:335
+#, no-wrap
+msgid ""
+"USES=\tpython:3.4+\n"
+"USE_PYTHON=\tdistutils allflavors\n"
+msgstr ""
+"USES=\tpython:3.4+\n"
+"USE_PYTHON=\tdistutils allflavors\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:338
+msgid "Will get these flavors: `py34`, `py35`, and `py36`."
+msgstr "получит следующие флейворы: `py34`, `py35` и `py36`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:342
+msgid ""
+"`PY_FLAVOR` is available to depend on the correct version of Python "
+"modules. All dependencies on flavored Python ports should use `PY_FLAVOR`, "
+"and not `FLAVOR` directly.."
+msgstr ""
+"`PY_FLAVOR` доступен для указания правильной версии модулей Python. Все "
+"зависимости от вариантов портов Python должны использовать `PY_FLAVOR`, а не "
+"`FLAVOR` напрямую."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:344
+#, no-wrap
+msgid "For a Port Not Using `distutils`"
+msgstr "Для порта, не использующего `distutils`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:348
+msgid ""
+"If the default Python 3 version is 3.6, the following will set `PY_FLAVOR` "
+"to `py36`:"
+msgstr ""
+"Если версия Python 3 по умолчанию — 3.6, следующая команда установит "
+"`PY_FLAVOR` в значение `py36`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:352
+#, no-wrap
+msgid "RUN_DEPENDS=\t${PYTHON_PKGNAMEPREFIX}mutagen>0:audio/py-mutagen@${PY_FLAVOR}\n"
+msgstr "RUN_DEPENDS=\t${PYTHON_PKGNAMEPREFIX}mutagen>0:audio/py-mutagen@${PY_FLAVOR}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:354
+#, no-wrap
+msgid "USES=\tpython:3.5+\n"
+msgstr "USES=\tpython:3.5+\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:359
+#, no-wrap
+msgid "`USES=lua` and Flavors"
+msgstr "`USES=lua` и флейворы"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:365
+msgid ""
+"When using crossref:uses[uses-lua,`lua:module`] or crossref:uses[uses-"
+"lua,`lua:flavors`], the port will automatically have `FLAVORS` filled in "
+"with the Lua versions it supports. However, it is not expected that "
+"ordinary applications (rather than Lua modules) should use this feature; "
+"most applications that embed or otherwise use Lua should simply use "
+"`USES=lua`."
+msgstr ""
+"При использовании crossref:uses[uses-lua,`lua:module`] или "
+"crossref:uses[uses-lua,`lua:flavors`] порт автоматически получит заполненный "
+"параметр `FLAVORS` с версиями Lua, которые он поддерживает. Однако "
+"предполагается, что обычные приложения (а не модули Lua) не должны "
+"использовать эту возможность; большинству приложений, которые встраивают или "
+"иным образом используют Lua, следует просто указывать `USES=lua`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:367
+msgid ""
+"`LUA_FLAVOR` is available (and must be used) to depend on the correct "
+"version of dependencies regardless of whether the port used the `flavors` or "
+"`module` parameters."
+msgstr ""
+"`LUA_FLAVOR` доступен (и должен использоваться) для зависимости от "
+"правильной версии зависимостей, независимо от того, использовал ли порт "
+"параметры `flavors` или `module`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:369
+msgid "See crossref:special[using-lua,Using Lua] for further information."
+msgstr ""
+"См. crossref:special[using-lua,Использование Lua] для получения "
+"дополнительной информации."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:371
+#, no-wrap
+msgid "`USES=guile` and Flavors"
+msgstr "`USES=guile` и флейворы"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:378
+msgid ""
+"When using crossref:uses[uses-guile,`guile:flavors`], the port will "
+"automatically have `FLAVORS` filled in with the Guile versions it supports. "
+"However, it is not expected that ordinary applications should use this "
+"feature; it is primarily intended for use by libraries and extensions, such "
+"as `guile-lib` or `guile-cairo`."
+msgstr ""
+"При использовании crossref:uses[uses-guile,`guile:flavors`] порт "
+"автоматически получит заполненное поле `FLAVORS` с версиями Guile, которые "
+"он поддерживает. Однако не предполагается, что обычные приложения должны "
+"использовать эту возможность; она в первую очередь предназначена для "
+"библиотек и расширений, таких как `guile-lib` или `guile-cairo`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:380
+msgid ""
+"`GUILE_FLAVOR` is available (and must be used) to depend on the correct "
+"version of flavored dependencies regardless of whether the port used the "
+"`flavors` parameter or not."
+msgstr ""
+"`GUILE_FLAVOR` доступен (и должен использоваться) для зависимости от "
+"правильной версии зависимостей с флейворами, независимо от того, использовал "
+"ли порт параметр `flavors` или нет."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:381
+msgid "See crossref:special[using-guile,Using Guile] for further information."
+msgstr ""
+"См. crossref:special[using-guile,Использование Guile] для получения "
+"дополнительной информации."
diff --git a/documentation/content/ru/books/porters-handbook/keeping-up/_index.adoc b/documentation/content/ru/books/porters-handbook/keeping-up/_index.adoc
index af916f13c6..fcce8ff89b 100644
--- a/documentation/content/ru/books/porters-handbook/keeping-up/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/keeping-up/_index.adoc
@@ -1,11 +1,13 @@
---
-title: Глава 14. Актуализация
-prev: books/porters-handbook/porting-samplem
+description: 'Как поддерживать актуальность коллекции портов FreeBSD'
next: books/porters-handbook/uses
-showBookMenu: true
-weight: 14
params:
- path: "/books/porters-handbook/keeping-up/"
+ path: /books/porters-handbook/keeping-up/
+prev: books/porters-handbook/order
+showBookMenu: true
+tags: ["keeping up", "ports", "updating", "FreshPorts"]
+title: 'Глава 16. Актуализация'
+weight: 16
---
[[keeping-up]]
@@ -16,7 +18,7 @@ params:
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 14
+:sectnumoffset: 16
:partnums:
:source-highlighter: rouge
:experimental:
@@ -51,23 +53,23 @@ endif::[]
[[freshports]]
== FreshPorts
-Самым простым способом отслеживать уже произошедшие обновления является подписка на http://www.FreshPorts.org/[FreshPorts]. Для мониторинга вы можете выбрать несколько портов. Мейнтейнерам настоятельно рекомендуется подписаться здесь, потому что они будут получать уведомления не только о собственных изменениях, но и об изменениях, сделанных любым другим коммиттером FreeBSD. (Это часто необходимо для синхронизации с изменениями на более низком технологическом уровне-хотя более корректным было бы получение предупреждений от тех, кто вносит подобные изменения, иногда этот этап пропускается или он просто непрактичен. Кроме того, в некоторых случаях изменения по своей природе весьма незначительны. Мы полагаем, что любой разработчик в таких ситуациях будет руководствоваться здравым смыслом).
+Самым простым способом отслеживать уже произошедшие обновления является подписка на https://www.FreshPorts.org/[FreshPorts]. Для мониторинга вы можете выбрать несколько портов. Сопровождающим порта настоятельно рекомендуется подписаться здесь, потому что они будут получать уведомления не только о собственных изменениях, но и об изменениях, сделанных любым другим коммиттером FreeBSD. (Это часто необходимо для синхронизации с изменениями на более низком технологическом уровне, хотя более корректным было бы получение предупреждений от тех, кто вносит подобные изменения, иногда этот этап пропускается или он просто непрактичен. Кроме того, в некоторых случаях изменения по своей природе весьма незначительны. Мы полагаем, что любой разработчик в таких ситуациях будет руководствоваться здравым смыслом).
Если вы хотите использовать FreshPorts, то вам нужна только учётная запись. Если регистрационный адрес вашей электронной почты будет иметь вид `@FreeBSD.org`, то справа на Web-страницах вы увидите дополнительную ссылку. Для тех из вас, кто уже получил учётную запись FreshPorts, но не использовал собственный адрес электронной почты `@FreeBSD.org`, достаточно сменить адрес на `@FreeBSD.org`, подписаться, а затем сменить его обратно.
Во FreshPorts имеется также функция проверки правильности, которая автоматически проверяет каждое изменение, внесённое в дерево портов FreeBSD. Если вы подпишетесь на эту услугу, то будете оповещаться обо всех ошибках, обнаруженных FreshPorts при проверке внесённых вами изменений.
-[[svnweb]]
+[[cgit]]
== Web-интерфейс к хранилищу исходных текстов
-Файлы в хранилище исходных текстов можно просматривать при помощи Web-интерфейса. Изменения, которые касаются в целом всей системы портов, теперь документируются в файле http://svnweb.FreeBSD.org/ports/head/CHANGES[CHANGES]. Изменения, касающиеся отдельных портов, отражаются теперь в файле http://svnweb.FreeBSD.org/ports/head/UPDATING[UPDATING]. Однако однозначный ответ на любой вопрос можно найти, только прочитав исходных код http://svnweb.FreeBSD.org/ports/head/Mk/bsd.port.mk[bsd.port.mk] и связанных с ним файлов.
+Файлы в хранилище исходных текстов можно просматривать при помощи Web-интерфейса. Изменения, которые касаются в целом всей системы портов, теперь документируются в файле https://cgit.FreeBSD.org/ports/tree/CHANGES[CHANGES]. Изменения, касающиеся отдельных портов, отражаются теперь в файле https://cgit.FreeBSD.org/ports/tree/UPDATING[UPDATING]. Однако однозначный ответ на любой вопрос можно найти, только прочитав исходных код https://cgit.FreeBSD.org/ports/tree/Mk/bsd.port.mk[bsd.port.mk] и связанных с ним файлов.
[[ports-mailing-list]]
== Список рассылки FreeBSD, посвящённый портам
Если вы поддерживаете порты, то должны следить за {freebsd-ports}. О важных изменениях, отражающихся на работе портов, будет сообщаться здесь, а затем они переносятся в [.filename]#CHANGES#.
-Если данный список рассылки слишком загружен сообщениями, вы можете отслеживать link:{freebsd-ports-announce-url}[freebsd-ports-announce], который модерируется и не является местом для дискуссий.
+Если данный список рассылки слишком загружен сообщениями, вы можете отслеживать {freebsd-ports-announce}, который модерируется и не является местом для дискуссий.
[[build-cluster]]
== Кластер построения портов FreeBSD
@@ -79,19 +81,12 @@ endif::[]
[[distfile-survey]]
== Portscout: сканер дистрибутивных файлов портов FreeBSD
-Кластер построения выделен для выполнения самого последнего релиза каждого из портов, дистрибутивные файлы которых уже были сгружены. Однако из-за постоянных изменений в Internet дистрибутивные файлы могут быстро исчезать. http://portscout.FreeBSD.org[Portscout], средство сканирования дистрибутивных файлов FreeBSD пытается опросить каждый из сайтов, доступных для сгрузки каждого из портов, для определения того, доступны ли ещё дистрибутивные файлы. Portscout может готовить отчёты в HTML и рассылать электронные письма об имеющихся обновлениях для портов тем, кто это запрашивает. Мейнтейнеры периодически запрашивают наличие изменений, либо вручную, либо используя ленту RSS.
-
-Главная страница Portscout отображает email мейнтейнера порта, количество портов, за которые ответственен мейнтейнер, количество портов с новыми дистрибутивными файлами и процент устаревших портов. Функция поиска выполняет поиск мейнтейнера по адресу электронной почты и позволяет выбирать между всеми портами или только устаревшими.
-
-При щелчке по адресу электронной почты мейнтейнера отображается список всех его портов, разделённых по категориям, вместе с текущим номером версии, информацией о наличии новой версии, временем последнего обновления порта и временем его последней проверки. Функция поиска на этой странице позволяет пользователю выполнять поиск конкретного порта.
-
-По щелчку на название порта в списке отображается информация о порте http://freshports.org[FreshPorts].
+Кластер построения выделен для выполнения самого последнего релиза каждого из портов, дистрибутивные файлы которых уже были сгружены. Однако из-за постоянных изменений в Internet дистрибутивные файлы могут быстро исчезать. https://portscout.FreeBSD.org[Portscout], средство сканирования дистрибутивных файлов FreeBSD пытается опросить каждый из сайтов, доступных для сгрузки каждого из портов, для определения того, доступны ли ещё дистрибутивные файлы. Portscout может готовить отчёты в HTML и рассылать электронные письма об имеющихся обновлениях для портов тем, кто это запрашивает. Сопровождающие периодически запрашивают наличие изменений либо вручную, либо используя ленту RSS.
-[[portsmon]]
-== Система мониторинга портов FreeBSD
+Главная страница Portscout отображает email сопровождающего порта, количество портов, за которые ответственен сопровождающий, количество портов с новыми дистрибутивными файлами и процент устаревших портов. Функция поиска выполняет поиск сопровождающего по адресу электронной почты и позволяет выбирать между всеми портами или только устаревшими.
-Другим полезным ресурсом является http://portsmon.FreeBSD.org[Система мониторинга портов FreeBSD] (известная также как `portsmon`). Система представляет собой базу данных, обрабатывающую информацию из нескольких источников и позволяющую просматривать их при помощи Web-интерфейса. На данный момент задействованы база сообщений об ошибках (PR), протоколы ошибок кластера построения и отдельные файлы из коллекции портов. В будущем в этот список будет добавлена система проверки дистрибутивных файлов и другие ресурсы.
+При щелчке по адресу электронной почты сопровождающего отображается список всех его портов, разделённых по категориям, вместе с текущим номером версии, информацией о наличии новой версии, временем последнего обновления порта и временем его последней проверки. Функция поиска на этой странице позволяет пользователю выполнять поиск конкретного порта.
-Для начала вы можете просмотреть всю информацию о некотором порте при помощи средства http://portsmon.FreeBSD.org/portoverview.py[Обзор отдельного порта].
+По щелчку на название порта в списке отображается информация о порте https://freshports.org[FreshPorts].
-На момент написания это единственный доступный ресурс, который для имени порта ставит в соответствие записи PR GNATS. (Отправители PR не всегда добавляют в название имя порта, хотя мы предпочитаем, чтобы они это делали.) Таким образом, `portsmon` это хорошее место для начала, если вы хотите найти присланные PR и/или ошибки построения для существующего порта; либо поискать, был ли уже прислан новый порт, который вы подумывали создать сами.
+Другим полезным ресурсом является https://github.com/freebsd/portscout/[репозиторий Portscout].
diff --git a/documentation/content/ru/books/porters-handbook/keeping-up/_index.po b/documentation/content/ru/books/porters-handbook/keeping-up/_index.po
new file mode 100644
index 0000000000..b5bd194cf5
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/keeping-up/_index.po
@@ -0,0 +1,270 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-15 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookkeeping-up_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:1
+#, no-wrap
+msgid "How to keep up the FreeBSD Ports Collection"
+msgstr "Как поддерживать актуальность коллекции портов FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:1
+#, no-wrap
+msgid "Chapter 16. Keeping Up"
+msgstr "Глава 16. Актуализация"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:14
+#, no-wrap
+msgid "Keeping Up"
+msgstr "Актуализация"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:53
+msgid ""
+"The FreeBSD Ports Collection is constantly changing. Here is some "
+"information on how to keep up."
+msgstr ""
+"Коллекция Портов FreeBSD постоянно изменяется. Здесь находится некоторая "
+"информация о том, как поддерживать её в актуальном состоянии."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:55
+#, no-wrap
+msgid "FreshPorts"
+msgstr "FreshPorts"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:63
+msgid ""
+"One of the easiest ways to learn about updates that have already been "
+"committed is by subscribing to https://www.FreshPorts.org/[FreshPorts]. "
+"Multiple ports can be monitored. Maintainers are strongly encouraged to "
+"subscribe, because they will receive notification of not only their own "
+"changes, but also any changes that any other FreeBSD committer has made. "
+"(These are often necessary to keep up with changes in the underlying ports "
+"framework-although it would be most polite to receive an advance heads-up "
+"from those committing such changes, sometimes this is overlooked or "
+"impractical. Also, in some cases, the changes are very minor in nature. We "
+"expect everyone to use their best judgement in these cases.)"
+msgstr ""
+"Самым простым способом отслеживать уже произошедшие обновления является "
+"подписка на https://www.FreshPorts.org/[FreshPorts]. Для мониторинга вы "
+"можете выбрать несколько портов. Сопровождающим порта настоятельно "
+"рекомендуется подписаться здесь, потому что они будут получать уведомления "
+"не только о собственных изменениях, но и об изменениях, сделанных любым "
+"другим коммиттером FreeBSD. (Это часто необходимо для синхронизации с "
+"изменениями на более низком технологическом уровне, хотя более корректным "
+"было бы получение предупреждений от тех, кто вносит подобные изменения, "
+"иногда этот этап пропускается или он просто непрактичен. Кроме того, в "
+"некоторых случаях изменения по своей природе весьма незначительны. Мы "
+"полагаем, что любой разработчик в таких ситуациях будет руководствоваться "
+"здравым смыслом)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:67
+msgid ""
+"To use FreshPorts, an account is required. Those with registered email "
+"addresses at `@FreeBSD.org` will see the opt-in link on the right-hand side "
+"of the web pages. Those who already have a FreshPorts account but are not "
+"using a `@FreeBSD.org` email address can change the email to `@FreeBSD.org`, "
+"subscribe, then change it back again."
+msgstr ""
+"Если вы хотите использовать FreshPorts, то вам нужна только учётная запись. "
+"Если регистрационный адрес вашей электронной почты будет иметь вид "
+"`@FreeBSD.org`, то справа на Web-страницах вы увидите дополнительную ссылку. "
+"Для тех из вас, кто уже получил учётную запись FreshPorts, но не использовал "
+"собственный адрес электронной почты `@FreeBSD.org`, достаточно сменить адрес "
+"на `@FreeBSD.org`, подписаться, а затем сменить его обратно."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:70
+msgid ""
+"FreshPorts also has a sanity test feature which automatically tests each "
+"commit to the FreeBSD ports tree. If subscribed to this service, a "
+"committer will receive notifications of any errors which FreshPorts detects "
+"during sanity testing of their commits."
+msgstr ""
+"Во FreshPorts имеется также функция проверки правильности, которая "
+"автоматически проверяет каждое изменение, внесённое в дерево портов FreeBSD. "
+"Если вы подпишетесь на эту услугу, то будете оповещаться обо всех ошибках, "
+"обнаруженных FreshPorts при проверке внесённых вами изменений."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:72
+#, no-wrap
+msgid "The Web Interface to the Source Repository"
+msgstr "Web-интерфейс к хранилищу исходных текстов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:78
+msgid ""
+"It is possible to browse the files in the source repository by using a web "
+"interface. Changes that affect the entire port system are now documented in "
+"the https://cgit.FreeBSD.org/ports/tree/CHANGES[CHANGES] file. Changes that "
+"affect individual ports are now documented in the https://cgit.FreeBSD.org/"
+"ports/tree/UPDATING[UPDATING] file. However, the definitive answer to any "
+"question is undoubtedly to read the source code of https://cgit.FreeBSD.org/"
+"ports/tree/Mk/bsd.port.mk[bsd.port.mk], and associated files."
+msgstr ""
+"Файлы в хранилище исходных текстов можно просматривать при помощи Web-"
+"интерфейса. Изменения, которые касаются в целом всей системы портов, теперь "
+"документируются в файле https://cgit.FreeBSD.org/ports/tree/"
+"CHANGES[CHANGES]. Изменения, касающиеся отдельных портов, отражаются теперь "
+"в файле https://cgit.FreeBSD.org/ports/tree/UPDATING[UPDATING]. Однако "
+"однозначный ответ на любой вопрос можно найти, только прочитав исходных код "
+"https://cgit.FreeBSD.org/ports/tree/Mk/bsd.port.mk[bsd.port.mk] и связанных "
+"с ним файлов."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:80
+#, no-wrap
+msgid "The FreeBSD Ports Mailing List"
+msgstr "Список рассылки FreeBSD, посвящённый портам"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:84
+msgid ""
+"As a ports maintainer, consider subscribing to {freebsd-ports}. Important "
+"changes to the way ports work will be announced there, and then committed to "
+"[.filename]#CHANGES#."
+msgstr ""
+"Если вы поддерживаете порты, то должны следить за {freebsd-ports}. О важных "
+"изменениях, отражающихся на работе портов, будет сообщаться здесь, а затем "
+"они переносятся в [.filename]#CHANGES#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:86
+msgid ""
+"If the volume of messages on this mailing list is too high, consider "
+"following {freebsd-ports-announce} which contains only announcements."
+msgstr ""
+"Если данный список рассылки слишком загружен сообщениями, вы можете "
+"отслеживать {freebsd-ports-announce}, который модерируется и не является "
+"местом для дискуссий."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:88
+#, no-wrap
+msgid "The FreeBSD Port Building Cluster"
+msgstr "Кластер построения портов FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:91
+msgid ""
+"One of the least-publicized strengths of FreeBSD is that an entire cluster "
+"of machines is dedicated to continually building the Ports Collection, for "
+"each of the major OS releases and for each Tier-1 architecture."
+msgstr ""
+"Одной из наименее известных сильных сторон FreeBSD является тот факт, что "
+"для непрерывного построения Коллекции Портов для каждого из основных релизов "
+"ОС для каждой архитектуры уровня поддержки Tier-1 выделен целый кластер "
+"машин."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:95
+msgid ""
+"Individual ports are built unless they are specifically marked with "
+"`IGNORE`. Ports that are marked with `BROKEN` will still be attempted, to "
+"see if the underlying problem has been resolved. (This is done by passing "
+"`TRYBROKEN` to the port's [.filename]#Makefile#.)"
+msgstr ""
+"Отдельные порты собираются, если они специально не помечены как `IGNORE`. "
+"Для портов, помеченных как `BROKEN`, попытки будут продолжены для того, "
+"чтобы увидеть, если основная проблема была решена. (Это сделано через "
+"использование переменной `TRYBROKEN` для [.filename]#Makefile# порта.)"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:97
+#, no-wrap
+msgid "Portscout: the FreeBSD Ports Distfile Scanner"
+msgstr "Portscout: сканер дистрибутивных файлов портов FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:104
+msgid ""
+"The build cluster is dedicated to building the latest release of each port "
+"with distfiles that have already been fetched. However, as the Internet "
+"continually changes, distfiles can quickly go missing. https://"
+"portscout.FreeBSD.org/[Portscout], the FreeBSD Ports distfile scanner, "
+"attempts to query every download site for every port to find out if each "
+"distfile is still available. Portscout can generate HTML reports and send "
+"emails about newly available ports to those who request them. Unless not "
+"otherwise subscribed, maintainers are asked to check periodically for "
+"changes, either by hand or using the RSS feed."
+msgstr ""
+"Кластер построения выделен для выполнения самого последнего релиза каждого "
+"из портов, дистрибутивные файлы которых уже были сгружены. Однако из-за "
+"постоянных изменений в Internet дистрибутивные файлы могут быстро исчезать. "
+"https://portscout.FreeBSD.org[Portscout], средство сканирования "
+"дистрибутивных файлов FreeBSD пытается опросить каждый из сайтов, доступных "
+"для сгрузки каждого из портов, для определения того, доступны ли ещё "
+"дистрибутивные файлы. Portscout может готовить отчёты в HTML и рассылать "
+"электронные письма об имеющихся обновлениях для портов тем, кто это "
+"запрашивает. Сопровождающие периодически запрашивают наличие изменений либо "
+"вручную, либо используя ленту RSS."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:107
+msgid ""
+"Portscout's first page gives the email address of the port maintainer, the "
+"number of ports the maintainer is responsible for, the number of those ports "
+"with new distfiles, and the percentage of those ports that are out-of-date. "
+"The search function allows for searching by email address for a specific "
+"maintainer, and for selecting whether only out-of-date ports are shown."
+msgstr ""
+"Главная страница Portscout отображает email сопровождающего порта, "
+"количество портов, за которые ответственен сопровождающий, количество портов "
+"с новыми дистрибутивными файлами и процент устаревших портов. Функция поиска "
+"выполняет поиск сопровождающего по адресу электронной почты и позволяет "
+"выбирать между всеми портами или только устаревшими."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:110
+msgid ""
+"Upon clicking on a maintainer's email address, a list of all of their ports "
+"is displayed, along with port category, current version number, whether or "
+"not there is a new version, when the port was last updated, and finally when "
+"it was last checked. A search function on this page allows the user to "
+"search for a specific port."
+msgstr ""
+"При щелчке по адресу электронной почты сопровождающего отображается список "
+"всех его портов, разделённых по категориям, вместе с текущим номером версии, "
+"информацией о наличии новой версии, временем последнего обновления порта и "
+"временем его последней проверки. Функция поиска на этой странице позволяет "
+"пользователю выполнять поиск конкретного порта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:112
+msgid ""
+"Clicking on a port name in the list displays the https://freshports.org/"
+"[FreshPorts] port information."
+msgstr ""
+"По щелчку на название порта в списке отображается информация о порте https://"
+"freshports.org[FreshPorts]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:113
+msgid ""
+"Additional documentation is available in the https://github.com/freebsd/"
+"portscout/[Portscout repository]."
+msgstr ""
+"Другим полезным ресурсом является https://github.com/freebsd/portscout/"
+"[репозиторий Portscout]."
diff --git a/documentation/content/ru/books/porters-handbook/makefiles/_index.adoc b/documentation/content/ru/books/porters-handbook/makefiles/_index.adoc
index f831873e56..a9fd70ea66 100644
--- a/documentation/content/ru/books/porters-handbook/makefiles/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/makefiles/_index.adoc
@@ -1,15 +1,17 @@
---
-title: Глава 5. Настройка файла Makefile
-prev: books/porters-handbook/slow-porting
+description: 'Настройка Makefile для портов FreeBSD'
next: books/porters-handbook/special
+params:
+ path: /books/porters-handbook/makefiles/
+prev: books/porters-handbook/slow-porting
showBookMenu: true
+tags: ["makefiles", "configuring", "naming", "versions"]
+title: 'Глава 5. Настройка Makefile'
weight: 5
-params:
- path: "/books/porters-handbook/makefiles/"
---
[[makefiles]]
-= Настройка файла Makefile
+= Настройка Makefile
:doctype: book
:toc: macro
:toclevels: 1
@@ -20,7 +22,7 @@ params:
:partnums:
:source-highlighter: rouge
:experimental:
-:gcc-plus-plus: g++
+:g-plus-plus: g++
:images-path: books/porters-handbook/
ifdef::env-beastie[]
@@ -47,118 +49,320 @@ toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
-Настройка файла [.filename]#Makefile# достаточно проста, и мы снова предполагаем, что перед тем, как начать, вы посмотрите на существующие примеры. К тому же в этом руководстве имеется <<porting-samplem,примерный Makefile>>, так что взгляните на него и, пожалуйста, следуйте порядку переменных и разделов в этом образце, чтобы облегчить чтение вашего порта другими людьми.
+Настройка [.filename]#Makefile# довольно проста, и мы снова рекомендуем изучить существующие примеры перед началом. Также в этом руководстве есть crossref:porting-samplem[porting-samplem,пример Makefile], поэтому ознакомьтесь с ним и, пожалуйста, соблюдайте порядок переменных и разделов в этом шаблоне, чтобы порт был удобнее для чтения другими.
-Итак, расположим решаемые задачи в порядке их возникновения при создании вашего нового файла [.filename]#Makefile#:
+Рассмотрите эти проблемы последовательно при разработке нового [.filename]#Makefile#:
[[makefile-source]]
-== Оригинальные исходный код
+== Оригинальный исходный код
-Находится ли он в каталоге `DISTDIR` в виде стандартного упакованного архиватором `gzip` tar-архива с именем типа [.filename]#foozolix-1.2.tar.gz#? Если это так, можно перейти к следующему шагу. Если нет, то вы должны попытаться переопределить некоторые из переменных `DISTVERSION`, `DISTNAME`, `EXTRACT_CMD`, `EXTRACT_BEFORE_ARGS`, `EXTRACT_AFTER_ARGS`, `EXTRACT_SUFX` или `DISTFILES` в зависимости от того, насколько необычен формат дистрибутивного файла.
+Находится ли он в `DISTDIR` в виде стандартного архива ``gzip`` с именем вроде [.filename]#foozolix-1.2.tar.gz#? Если да, переходите к следующему шагу. Если нет, возможно, для формата имени файла дистрибутива потребуется переопределить одну или несколько переменных: `DISTVERSION`, `DISTNAME`, `EXTRACT_CMD`, `EXTRACT_BEFORE_ARGS`, `EXTRACT_AFTER_ARGS`, `EXTRACT_SUFX` или `DISTFILES`.
-В худшем случае вы можете просто определить свою собственную цель `do-extract` для переопределения действий по умолчанию, хотя к этому нужно будет прибегать в очень редких случаях, если вообще придётся.
+В худшем случае создайте пользовательскую цель `do-extract`, чтобы переопределить стандартную. Это редко, если вообще когда-либо, необходимо.
[[makefile-naming]]
== Именование
-В первой части [.filename]#Makefile# порта ему даётся название, указывается его номер версии и принадлежность к правильной категории.
+Первая часть [.filename]#Makefile# порта указывает его название, описывает номер версии и помещает его в соответствующую категорию.
+
+[[makefile-portname]]
+=== `PORTNAME`
+
+Установите `PORTNAME` как базовое имя программы. Оно используется в качестве основы для пакета FreeBSD и для crossref:makefiles[makefile-distname,`DISTNAME`].
+
+[IMPORTANT]
+====
+Название пакета должно быть уникальным во всём дереве портов. Убедитесь, что `PORTNAME` ещё не используется существующим портом и что никакой другой порт уже не имеет такой же `PKGBASE`. Если имя уже занято, добавьте либо crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMEPREFIX`, либо `PKGNAMESUFFIX`].
+====
+
+[[makefile-versions]]
+=== Версии, `DISTVERSION` _или_ `PORTVERSION`
-=== `PORTNAME` и `PORTVERSION`
+Установите `DISTVERSION` в номер версии программы.
-В переменной `PORTNAME` вы должны указать основную часть имени вашего порта, а в переменной `PORTVERSION` - номер версии.
+`PORTVERSION` — это версия, используемая для пакета FreeBSD. Она будет автоматически вычислена из `DISTVERSION` в соответствии со схемой версионирования пакетов FreeBSD. Если версия содержит _буквы_, может потребоваться задать `PORTVERSION` вместо `DISTVERSION`.
+
+[IMPORTANT]
+====
+Только одна из переменных `PORTVERSION` и `DISTVERSION` может быть установлена одновременно.
+====
+
+Время от времени некоторые программы используют схему версионирования, которая несовместима с тем, как `DISTVERSION` преобразуется в `PORTVERSION`.
+
+[TIP]
+====
+При обновлении порта можно использовать аргумент `-t` утилиты man:pkg-version[8], чтобы проверить, является ли новая версия больше или меньше предыдущей. Смотрите ниже, как использовать man:pkg-version[8] для сравнения версий.
+====
+
+[[makefile-versions-ex-pkg-version]]
+.Использование man:pkg-version[8] для сравнения версий
+[example]
+====
+`pkg version -t` принимает две версии в качестве аргументов и возвращает `<`, `=` или `>`, если первая версия меньше, равна или больше второй версии соответственно.
+
+[source, shell]
+....
+% pkg version -t 1.2 1.3
+< <.>
+% pkg version -t 1.2 1.2
+= <.>
+% pkg version -t 1.2 1.2.0
+= <.>
+% pkg version -t 1.2 1.2.p1 > <.> % pkg version -t 1.2.a1 1.2.b1 < <.> % pkg version -t 1.2 1.2p1 < <.>
+....
+
+<.> `1.2` идёт перед `1.3`.
+<.> `1.2` и `1.2` равны, так как имеют одинаковую версию.
+<.> `1.2` и `1.2.0` равны, так как ноль ничего не значит.
+<.> `1.2` идёт после `1.2.p1`, так как `.p1` означает «pre-release 1» (предрелизная версия 1).
+<.> `1.2.a1` предшествует `1.2.b1`, представьте "alpha" и "beta", где `a` идёт перед `b`.
+<.> `1.2` находится перед `1.2p1`, так же как `2p1` (читается как "2, уровень исправления 1") — это версия, следующая после любой `2.X`, но перед `3`.
+
+[NOTE]
+****
+Здесь `a`, `b` и `p` используются так, как если бы они означали "альфа", "бета" или "пре-релиз" и "уровень патча", но на самом деле это просто буквы, которые сортируются в алфавитном порядке, поэтому можно использовать любую букву, и они будут отсортированы соответствующим образом.
+****
+
+====
+
+.Примеры `DISTVERSION` и производной `PORTVERSION`
+[cols="10%,90%", frame="none", options="header"]
+|===
+| DISTVERSION
+| .PORTVERSION
+
+|0.7.1d
+|0.7.1.d
+
+|10Alpha3
+|10.a3
+
+|3Beta7-pre2
+|3.b7.p2
+
+|8:f_17
+|8f.17
+|===
+
+[[makefile-versions-ex1]]
+.Использование `DISTVERSION`
+[example]
+====
+Если версия содержит только числа, разделённые точками, тире или подчёркиваниями, используйте `DISTVERSION`.
+
+[.programlisting]
+....
+PORTNAME= nekoto
+DISTVERSION= 1.2-4
+....
+
+Это сгенерирует `PORTVERSION` равный `1.2.4`.
+====
+
+[[makefile-versions-ex2]]
+.Использование `DISTVERSION` когда версия начинается с буквы или префикса
+[example]
+====
+Когда версия начинается или заканчивается буквой, или префиксом, или суффиксом, которые не являются частью версии, используйте `DISTVERSIONPREFIX`, `DISTVERSION` и `DISTVERSIONSUFFIX`.
+
+Если версия `v1.2-4`:
+
+[.programlisting]
+....
+PORTNAME= nekoto
+DISTVERSIONPREFIX= v
+DISTVERSION= 1_2_4
+....
+
+Некоторые проекты, использующие GitHub, могут включать своё название в версии. Например, версия может выглядеть как `nekoto-1.2-4`:
+
+[.programlisting]
+....
+PORTNAME= nekoto
+DISTVERSIONPREFIX= nekoto-
+DISTVERSION= 1.2_4
+....
+
+Эти проекты также иногда используют строку в конце версии, например, `1.2-4_RELEASE`:
+
+[.programlisting]
+....
+PORTNAME= nekoto
+DISTVERSION= 1.2-4
+DISTVERSIONSUFFIX= _RELEASE
+....
+
+Или они делают и то, и другое, например, `nekoto-1.2-4_RELEASE`:
+
+[.programlisting]
+....
+PORTNAME= nekoto
+DISTVERSIONPREFIX= nekoto-
+DISTVERSION= 1.2-4
+DISTVERSIONSUFFIX= _RELEASE
+....
+
+`DISTVERSIONPREFIX` и `DISTVERSIONSUFFIX` не будут использоваться при формировании `PORTVERSION`, а только в `DISTNAME`.
+
+Все сгенерируют `PORTVERSION` равный `1.2.4`.
+====
+
+[[makefile-versions-ex3]]
+.Использование `DISTVERSION`, когда версия содержит буквы, означающие "alpha", "beta" или "pre-release"
+[example]
+====
+Если версия содержит числа, разделённые точками, тире или подчёркиваниями, а буквы используются для обозначения "альфа", "бета" или "предварительной версии" (то есть до версии без букв), используйте `DISTVERSION`.
+
+[.programlisting]
+....
+PORTNAME= nekoto
+DISTVERSION= 1.2-pre4
+....
+
+[.programlisting]
+....
+PORTNAME= nekoto
+DISTVERSION= 1.2p4
+....
+
+Оба варианта создадут `PORTVERSION` равную `1.2.p4`, что предшествует версии 1.2. Для проверки этого факта можно использовать man:pkg-version[8]:
+
+[source, shell]
+....
+% pkg version -t 1.2.p4 1.2
+<
+....
+
+====
+
+[[makefile-versions-ex4]]
+.Не использовать `DISTVERSION`, если версия содержит буквы, означающие "уровень патча"
+[example]
+====
+Если версия содержит буквы, которые не означают "alpha", "beta" или "pre", а скорее указывают на "уровень исправления" и следуют после версии без букв, используйте `PORTVERSION`.
+
+[.programlisting]
+....
+PORTNAME= nekoto
+PORTVERSION= 1.2p4
+....
+
+В данном случае использование `DISTVERSION` невозможно, так как это приведёт к генерации версии `1.2.p4`, которая будет считаться более ранней, чем `1.2`, а не более поздней. man:pkg-version[8] подтвердит это:
+
+[source, shell]
+....
+% pkg version -t 1.2 1.2.p4
+> <.>
+% pkg version -t 1.2 1.2p4
+< <.>
+....
+
+<.> `1.2` идёт после `1.2.p4`, что в данном случае _неверно_.
+<.> `1.2` находится перед `1.2p4`, что и требовалось.
+====
+
+Для более сложных примеров настройки `PORTVERSION`, когда версия программного обеспечения действительно несовместима с FreeBSD, или `DISTNAME`, когда файл дистрибутива не содержит саму версию, см. crossref:makefiles[makefile-distname, `DISTNAME`].
[[makefile-naming-revepoch]]
=== `PORTREVISION` и `PORTEPOCH`
+[[makefile-portrevision]]
==== `PORTREVISION`
-Переменная `PORTREVISION` представляет собой монотонно увеличивающееся число, которое обнуляется при каждом увеличении значения переменной `PORTVERSION` (то есть каждый раз, когда создателями выпускается новый официальный релиз), и добавляется к имени пакета, если оно не равно нулю. Изменения в `PORTREVISION` используются автоматизированными инструментами (например, `pkg version`, см. man:pkg-version[8]) для определения факта появления нового пакета.
+`PORTREVISION` — это монотонно возрастающее значение, которое сбрасывается в 0 при каждом увеличении `DISTVERSION`, обычно при каждом новом официальном выпуске от поставщика. Если `PORTREVISION` не равен нулю, его значение добавляется к имени пакета. Изменения `PORTREVISION` используются автоматизированными инструментами, такими как man:pkg-version[8], для определения доступности нового пакета.
+
+`PORTREVISION` должен быть увеличен каждый раз, когда в порт вносятся изменения, которые так или иначе влияют на сгенерированный пакет. Это включает изменения, затрагивающие только пакеты, собранные с нестандартными crossref:makefiles[makefile-options,опциями].
-Значение `PORTREVISION` должно увеличиваться каждый раз, когда в порте FreeBSD делаются изменения, которые как-либо меняют получаемый пакет. Сюда относятся только изменения, затрагивающие построение пакета с <<makefile-options,параметрами>> по умолчанию.
+Примеры случаев, когда необходимо увеличить `PORTREVISION`:
-Примеры случаев, когда значение `PORTREVISION` должно быть увеличено:
+* Добавление исправлений для устранения уязвимостей безопасности, ошибок или для добавления новой функциональности в порт.
+* Изменения в [.filename]#Makefile# порта для включения или отключения параметров сборки в пакете.
+* Изменения в списке файлов пакета или в поведении во время установки. Например, изменение скрипта, который генерирует начальные данные для пакета, такие как ключи хоста man:ssh[1].
+* Увеличение версии зависимости порта от общей библиотеки (в данном случае, попытка установить старый пакет после установки более новой версии зависимости завершится неудачей, так как будет искаться старая версия libfoo.x вместо libfoo.(x+1)).
+* Тихие изменения в дистрибутивном файле порта, которые имеют значительные функциональные отличия. Например, изменения в дистрибутивном файле, требующие корректировки файла [.filename]#distinfo# без соответствующего изменения `DISTVERSION`, когда сравнение `diff -ru` старой и новой версий показывает нетривиальные изменения в коде.
+* Изменения в `MAINTAINER`.
-* Добавление патчей для исправления уязвимостей, ошибок, или добавления новой функциональности в порт.
-* Изменения в файле [.filename]#Makefile# порта для включения и выключения параметров, определяемых при компиляции пакета.
-* Изменения в списке упаковки или в поведении пакета во время его установки (например, изменение скрипта, генерирующего начальные данные для пакета, такие, как ssh-ключи для хоста).
-* Увеличение версии динамической библиотеки, от которой зависит порт (в этом случае тот, кто попытается установить старый пакет после установки более новой версии библиотеки, не сможет этого сделать, потому что при этом будет делаться поиск старой библиотеки libfoo.x, а не libfoo.(x+1)).
-* Большие функциональные изменения в дистрибутивном файле порта, происходящие без объявлений, и приводящие к большим изменениям, то есть изменения в дистрибутиве требуют корректировки файла [.filename]#distinfo# без соответствующего изменения `PORTVERSION`, когда как команда `diff -ru` между новой и старой версиями показывает нетривиальные изменения в коде.
+Примеры изменений, которые не требуют увеличения `PORTREVISION`:
-Примеры изменений, которые не требуют увеличения переменной `PORTREVISION`:
+* Стилевые изменения в каркасе портов без функциональных изменений в итоговом пакете.
+* Изменения в `MASTER_SITES` или другие функциональные изменения порта, которые не влияют на итоговый пакет.
+* Тривиальные исправления в дистрибутивном файле, такие как исправление опечаток, которые не настолько важны, чтобы пользователи пакета были вынуждены тратить время на обновление.
+* Исправления сборки, которые позволяют пакету компилироваться там, где ранее это не удавалось. При условии, что изменения не вносят функциональных изменений на других платформах, где порт ранее собирался. Поскольку `PORTREVISION` отражает содержимое пакета, если пакет ранее не мог быть собран, то нет необходимости увеличивать `PORTREVISION` для обозначения изменений.
-* Изменения стиля в скелете порта без функциональных изменений в пакете.
-* Изменения в переменной `MASTER_SITES` или другие функциональные изменения порта, которые не затрагивают получающегося пакета.
-* Тривиальные патчи к дистрибутивному файлу, такие, как исправления опечаток, которые не так уж важны, что пользователи пакета должны озаботиться обновлением.
-* Исправления, касающиеся этапа построения, которые делают возможным построение пакета, если ранее это было невозможно сделать (пока изменения не приводят к изменению работы на любых других платформах, на которых порт ранее строился). Так как `PORTREVISION` отражает содержимое пакета, то, если ранее пакет не строился, то нет нужды увеличивать `PORTREVISION` для отметки изменения.
+Эмпирическое правило заключается в том, чтобы решить, является ли изменение, внесённое в порт, чем-то, что принесёт пользу _некоторым_ пользователям. Будь то улучшение, исправление или просто факт, что новый пакет вообще будет работать. Затем необходимо сопоставить это с тем, что всем, кто регулярно обновляет своё дерево портов, придётся выполнить обновление. Если ответ положительный, необходимо увеличить `PORTREVISION`.
-Правило, которому нужно приблизительно следовать, заключается в том, что нужно спрашивать себя, является ли вносимое в порт изменение таким, что от него выиграют все (в виде усовершенствования, исправления или благодаря тому, что новый пакет будет вообще работоспособным), и примите во внимание тот факт, что при этом все, кто регулярно обновляют своё дерево портов, будут обязаны это сделать. Если это так, то переменная `PORTREVISION` должна быть увеличена.
+[NOTE]
+====
+Пользователи бинарных пакетов _никогда_ не увидят обновления, если `PORTREVISION` не увеличен. Без увеличения `PORTREVISION` сборщики пакетов не могут обнаружить изменение и, следовательно, не пересоберут пакет.
+====
+[[makefile-portepoch]]
==== `PORTEPOCH`
-Время от времени разработчик программного обеспечения или создатель порта FreeBSD делают что-то не так и выпускают версию программы, номер которой меньше предыдущей версии. Примером этого является порт, название которого меняется с foo-20000801 на foo-1.0 (изначально это не считалось бы более новой версией, так как 20000801 численно больше, чем 1).
+Время от времени разработчики программного обеспечения или сопровождающие портов FreeBSD совершают ошибку и выпускают версию своего ПО, которая фактически имеет меньший номер по сравнению с предыдущей. Примером может служить переход с foo-20000801 на foo-1.0 (первая версия будет ошибочно считаться более новой, поскольку число 20000801 больше, чем 1.0).
[TIP]
====
+Результаты сравнения номеров версий не всегда очевидны. Команда `pkg version` (см. man:pkg-version[8]) может быть использована для проверки сравнения двух строк с номерами версий. Например:
-Результат сравнения номера версии не всегда очевиден. Для выполнения сравнения двух строк с номером версии можно использовать `pkg version` (см. man:pkg-version[8]). Например:
-
-[source,shell]
+[source, shell]
....
% pkg version -t 0.031 0.29
>
....
-Строка `>` в выводе команды означает, что версия 0.031 считается выше, чем версия 0.29, что может быть не очевидно для того, кто выполняет портирование.
+Символ `>` в выводе указывает, что версия 0.031 считается больше, чем версия 0.29, что могло быть неочевидно для сопровождающего.
====
-В ситуациях, подобных этой, должно быть увеличено значение `PORTEPOCH`. Если значение `PORTEPOCH` не равно нулю, то оно добавляется к имени пакета, как описано в разделе выше. Значение `PORTEPOCH` никогда не должно уменьшаться или сбрасываться в ноль, потому что это приведёт к ошибке сравнения с пакетом с меньшим номером эпохи (то есть то, что пакет устарел, обнаружено не будет): номер новой версии (например, `1.0,1` в примере выше) останется меньше, чем номер предыдущей версии (20000801), однако суффикс `,1` интерпретируется различными автоматизированными утилитами особым образом, и окажется больше, чем предполагаемый суффикс `,0` более раннего пакета).
+В таких ситуациях необходимо увеличить `PORTEPOCH`. Если `PORTEPOCH` не равен нулю, он добавляется к имени пакета, как описано в разделе 0 выше. `PORTEPOCH` никогда не должен уменьшаться или сбрасываться до нуля, потому что это приведёт к ошибке при сравнении с пакетом из более ранней эпохи. Например, пакет не будет обнаружен как устаревший. Новый номер версии, `1.0,1` в приведённом выше примере, всё ещё численно меньше предыдущей версии, 20000801, но суффикс `,1` обрабатывается автоматизированными инструментами особым образом и считается большим, чем подразумеваемый суффикс `,0` у предыдущего пакета.
-Некорректное уменьшение или сброс `PORTEPOCH` приводит к печальным последствиям; если вы не поняли, о чём шла речь ранее, пожалуйста, всё же разберитесь с этим, либо спросите в списках рассылки.
+Неправильное удаление или сброс `PORTEPOCH` приводит к бесконечным проблемам. Если приведённое выше объяснение недостаточно ясно, обратитесь к {freebsd-ports}.
-Предполагается, что в большинстве портов переменная `PORTEPOCH` использоваться не будет, но при корректном использовании `PORTVERSION` может появиться необходимость её иметь, если в будущих релизах программное обеспечение должно изменить структуру номера версии. Однако создателям портов для FreeBSD нужно быть внимательными, когда разработчик выпускает релиз без официального номера версии - эдакие "промежуточные" релизы. Имеется соблазн пометить релиз датой его выхода, что может вызвать проблемы, как и в примере выше, когда будет выпущен новый "официальный" релиз.
+Ожидается, что `PORTEPOCH` не будет использоваться для большинства портов, и что разумное использование `DISTVERSION` или аккуратное применение `PORTVERSION` часто может предотвратить необходимость его использования, если будущий выпуск программного обеспечения изменит структуру версий. Однако разработчикам портов FreeBSD следует быть осторожными, когда вендор выпускает релиз без официального номера версии — например, релиз в виде "снимка" кода. Возникает соблазн обозначить такой релиз датой выпуска, что вызовет проблемы, как в примере выше, когда будет сделан новый "официальный" релиз.
-Например, если промежуточный релиз помечен датой 20000917, а предыдущая версия программного обеспечения имела номер 1.2, то промежуточному релизу должно быть поставлено в соответствие значение `PORTVERSION`, равное 1.2.20000917 или что-то похожее, но не 20000917, так как последующий релиз, скажем, 1.3, должен иметь численно большее значение.
+Например, если снимок выпущен на дату `20000917`, а предыдущая версия программного обеспечения была `1.2`, не следует использовать `20000917` для `DISTVERSION`. Правильным будет указать `DISTVERSION` как `1.2.20000917` или подобное, чтобы следующая версия, например `1.3`, оставалась численно большей.
-==== Пример использования переменных `PORTREVISION` и `PORTEPOCH`
+[[makefile-portrevision-example]]
+==== Пример использования `PORTREVISION` и `PORTEPOCH`
-Выполнен коммит порта `gtkmumble`, версии `0.10`, в коллекцию портов.
+Порт `gtkmumble` версии `0.10` добавлен в коллекцию портов:
[.programlisting]
....
PORTNAME= gtkmumble
-PORTVERSION= 0.10
+DISTVERSION= 0.10
....
-Значение `PKGNAME` станет равным `gtkmumble-0.10`.
+`PKGNAME` становится `gtkmumble-0.10`.
-Обнаружена брешь в безопасности, исправление которой потребовало создания локального патча для FreeBSD. Соответственно было увеличено значение переменной `PORTREVISION`.
+Обнаружена уязвимость в безопасности, требующая локального исправления FreeBSD. `PORTREVISION` соответствующим образом увеличивается.
[.programlisting]
....
PORTNAME= gtkmumble
-PORTVERSION= 0.10
+DISTVERSION= 0.10
PORTREVISION= 1
....
`PKGNAME` принимает значение `gtkmumble-0.10_1`
-Разработчиком выпущена новая версия с номером `0.2` (оказалось, что под номером `0.10` автор имел в виду `0.1.0`, а не "то, что будет выпущено после версии 0.9" - извините, теперь уже поздно). Так как новый младший номер версии `2` по значению меньше, чем номер предыдущей версии `10`, то должно быть увеличено значение `PORTEPOCH` для того, чтобы заставить распознавать вновь создаваемый пакет как "более новый". Так как это новый релиз программы, то `PORTREVISION` обнуляется (или удаляется из файла [.filename]#Makefile#).
+Выпущена новая версия от поставщика под номером `0.2` (оказывается, автор изначально подразумевал, что `0.10` на самом деле означает `0.1.0`, а не "то, что идет после 0.9" — увы, теперь уже поздно). Поскольку новая минорная версия `2` численно меньше предыдущей версии `10`, необходимо увеличить `PORTEPOCH`, чтобы вручную заставить систему распознавать новый пакет как "более новый". Так как это новый релиз кода от поставщика, `PORTREVISION` сбрасывается до 0 (или удаляется из [.filename]#Makefile#).
[.programlisting]
....
PORTNAME= gtkmumble
-PORTVERSION= 0.2
+DISTVERSION= 0.2
PORTEPOCH= 1
....
-`PKGNAME` принимает значение `gtkmumble-0.2,1`
+`PKGNAME` становится `gtkmumble-0.2,1`
-Следующий релиз имеет номер версии 0.3. Так как значение переменной `PORTEPOCH` никогда не уменьшается, что переменные, определяющие версии, теперь выглядят так:
+Следующий выпуск — 0.3. Поскольку `PORTEPOCH` никогда не уменьшается, переменные версий теперь выглядят так:
[.programlisting]
....
PORTNAME= gtkmumble
-PORTVERSION= 0.3
+DISTVERSION= 0.3
PORTEPOCH= 1
....
@@ -166,152 +370,196 @@ PORTEPOCH= 1
[NOTE]
====
-Если значение `PORTEPOCH` этим обновлением было бы сброшено в `0`, то кто-нибудь, имеющий установленный пакет `gtkmumble-0.10_1`, не смог бы опознать пакет `gtkmumble-0.3` как более новый, так как `3` было бы меньше, чем `10`. Помните, что в первую очередь это касается `PORTEPOCH`.
+Если бы `PORTEPOCH` был сброшен в `0` при этом обновлении, пользователь, установивший пакет `gtkmumble-0.10_1`, не увидел бы пакет `gtkmumble-0.3` как более новый, поскольку `3` всё ещё численно меньше, чем `10`. Помните, в этом и заключается вся суть `PORTEPOCH` изначально.
====
-=== Переменные `PKGNAMEPREFIX` и `PKGNAMESUFFIX`
+[[porting-pkgnameprefix-suffix]]
+=== `PKGNAMEPREFIX` и `PKGNAMESUFFIX`
-Две необязательные переменные, `PKGNAMEPREFIX` и `PKGNAMESUFFIX`, объединяются со значениями `PORTNAME` и `PORTVERSION` для формирования `PKGNAME` в форме `${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}`. Добейтесь того, чтобы это соответствовало нашим <<porting-pkgname,рекомендациям по правильному выбору названий для пакетов>>. В частности, в переменной `PORTVERSION` _не разрешается_ использование дефиса (`-`). Кроме того, если в имени пакета присутствует часть _language-_ или _-compiled.specifics_ (смотрите ниже), то используйте переменные `PKGNAMEPREFIX` и `PKGNAMESUFFIX`, соответственно. Не делайте их частью значения переменной `PORTNAME`.
+Две необязательные переменные, `PKGNAMEPREFIX` и `PKGNAMESUFFIX`, объединяются с `PORTNAME` и `PORTVERSION` для формирования `PKGNAME` в виде `${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}`. Убедитесь, что это соответствует нашим crossref:makefiles[porting-pkgname,рекомендациям по именованию пакетов]. В частности, использование дефиса (`-`) в `PORTVERSION` _не_ допускается. Кроме того, если имя пакета содержит часть _language-_ или _-compiled.specifics_ (см. ниже), используйте `PKGNAMEPREFIX` и `PKGNAMESUFFIX` соответственно. Не включайте их в `PORTNAME`.
[[porting-pkgname]]
-=== Соглашения по именованию пакетов
+=== Соглашения о наименовании пакетов
+
+Вот соглашения, которым следует придерживаться при наименовании пакетов. Это сделано для того, чтобы каталог пакетов было легко просматривать, поскольку там уже тысячи пакетов, и пользователи могут отказаться от их использования, если это будет напрягать их глаза!
+
+Имена пакетов имеют формат [.filename]#language_region-name-compiled.specifics-version.numbers#.
+
+Имя пакета определяется как `${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}`. Убедитесь, что переменные заданы в соответствии с этим форматом.
-Далее описаны некоторые соглашения, которым вы должны следовать в именовании ваших пакетов. Они были разработаны для облегчения просмотра каталога, так как имеется уже тысячи пакетов, а пользователи отвернутся от нас, если список не понравится их взору!
+[[porting-pkgname-language]]
+[.filename]#language_region-#::
+FreeBSD стремится поддерживать родной язык своих пользователей. Часть _language-_ представляет собой двухбуквенное сокращение естественного языка, определённое стандартом ISO-639, когда порт относится к определённому языку. Примерами являются `ja` для японского, `ru` для русского, `vi` для вьетнамского, `zh` для китайского, `ko` для корейского и `de` для немецкого.
++
+Если порт относится к определённому региону в языковой зоне, добавьте также двухбуквенный код страны. Например, `en_US` для американского английского и `fr_CH` для швейцарского французского.
++
+Часть _language-_ задается в `PKGNAMEPREFIX`.
-Имя пакета должно иметь вид [.filename]#language_region-name-compiled.specifics-version.numbers#.
+[[porting-pkgname-name]]
+[.filename]#name#::
+Убедитесь, что название порта и его версия четко разделены и указаны в `PORTNAME` и `DISTVERSION`. Единственная причина, по которой `PORTNAME` может содержать часть версии, — это если вышестоящее распространяемое ПО действительно так названо, как в портах package:textproc/libxml2[] или package:japanese/kinput2-freewnn[]. В противном случае `PORTNAME` не может содержать информацию о версии. Довольно нормально, когда несколько портов имеют одинаковый `PORTNAME`, как это делают порты package:www/apache*[]; в таком случае разные версии (и разные записи в индексе) различаются значениями `PKGNAMEPREFIX` и `PKGNAMESUFFIX`.
++
+Существует традиция называть модули `Perl 5`, добавляя префикс `p5-` и заменя разделитель в виде двойного двоеточия на дефис. Например, модуль `Data::Dumper` становится `p5-Data-Dumper`.
+[[porting-pkgname-compiled-specifics]]
+[.filename]#-compiled.specifics#::
+Если порт может быть собран с различными crossref:makefiles[makefile-masterdir,жестко заданными значениями по умолчанию] (обычно это часть имени каталога в семействе портов), часть _-compiled.specifics_ указывает скомпилированные значения по умолчанию. Дефис является необязательным. Примерами могут служить размер бумаги и единицы измерения шрифтов.
++
+Часть _-compiled.specifics_ задаётся в `PKGNAMESUFFIX`.
-Имя пакета определяется как `${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}`. Вы должны задавать значения переменных в соответствии с этим форматом.
+[[porting-pkgname-version-numbers]]
+[.filename]#-version.numbers#::
+Строка версии следует после тире (`-`) и представляет собой разделённый точками список целых чисел и строчных букв латинского алфавита. В частности, не допускается использование дополнительных тире внутри строки версии. Единственное исключение — строка `pl` (означающая "уровень исправления"), которую можно использовать _только_ в случае отсутствия у программного обеспечения номеров основной и дополнительной версий. Если в версии программного обеспечения встречаются строки типа "alpha", "beta", "rc" или "pre", следует взять первую букву и поместить её сразу после точки. Если после таких названий строка версии продолжается, числа следуют за буквой без дополнительной точки между ними (например, `1.0b2`).
++
+Идея заключается в упрощении сортировки портов за счёт анализа строки версии. В частности, необходимо убедиться, что компоненты номера версии всегда разделены точкой, а если дата является частью строки, использовать формат `d__yyyy.mm.dd__`, а не `_dd.mm.yyyy_` или не соответствующий стандарту Y2K формат `_yy.mm.dd_`. Важно добавлять перед версией букву, в данном случае `d` (от слова "дата"), на случай, если будет выпущена версия с фактическим номером, который численно окажется меньше `_yyyy_`.
-. FreeBSD пытается поддерживать языки, на которых разговаривают её пользователи. Часть _language-_ должна быть двухсимвольным сокращением от названия языка по стандарту ISO-639, если порт специфичен для конкретного языка. Примерами являются `ja` для японского, `ru` для русского, `vi` для вьетнамского, `zh` для китайского, `ko` для корейского и `de` для немецкого языков.
-+
-Если ваш порт специфичен для конкретного региона внутри области использования языка, добавьте также двухсимвольный код страны. Примерами являются `en_US` для US English и `fr_CH` для Swiss French.
-+
-Часть _language-_ должна задаваться в переменной `PKGNAMEPREFIX`.
-. Первая буква части [.filename]#name# должна быть в нижнем регистре. (Оставшаяся часть названия может содержать буквы в верхнем регистре, так что принимайте решение сами, когда преобразуете имя программного пакета, содержащего в имени некоторое количество заглавных букв.) Существует традиция именовать модули для `Perl 5`, добавляя впереди `p5-` и преобразуя пару двоеточий в дефис; например, модуль `Data::Dumper` будет именоваться `p5-Data-Dumper`.
-. Убедитесь, что имя порта и версия четко отделены и размещаются в переменных `PORTNAME` и `PORTVERSION`. Единственная причина, по которой `PORTNAME` содержит версионную часть, это если полученный дистрибутив сам назван таким образом, как это сделано для портов [.filename]#textproc/libxml2# или [.filename]#japanese/kinput2-freewnn#. В противном случае `PORTNAME` не должен содержать никакой информации, указывающей на версию. То, что некоторые порты имеют одинаковый `PORTNAME`, является вполне нормальным, как для портов [.filename]#www/apache*#; в этом случае различные версии (и различные записи в индексе) отличаются по значениям `PKGNAMEPREFIX` и `PKGNAMESUFFIX`.
-. Если порт может быть построен с различными <<makefile-masterdir,статически заданными значениями по умолчанию>> (обычно это часть имени каталога в семействе портов), то часть _-compiled.specifics_ должна определять вкомпилированные значения по умолчанию (дефис не обязателен). Примерами являются размеры бумаги и шрифтов.
-+
-Часть _-compiled.specifics_ должна задаваться в переменной `PKGNAMESUFFIX`.
-. Строка с номером версии должна следовать за дефисом (`-`) и являться списком разделенных двоеточием чисел и букв в нижнем регистре. В частности, не разрешается иметь еще один дефис внутри строки с обозначением номера версии. Единственным исключением является строчка `pl` (означающая "patchlevel"), которая может использоваться _только_ тогда, когда у программного обеспечения нет старшего и младшего номера версии. Если в номер версии программного обеспечения включена строчка типа "alpha", "beta", "rc" или "pre", возьмите из неё первую букву и поставьте её непосредственно после точки. Если после таких строк номер версии ещё продолжается, то после буквы должно следовать число без дополнительной разделяющей точки.
-+
-Смысл такого формата заключается в удобстве сортировки портов по номеру версии. В частности, следите за тем, чтобы компоненты номера версии разделялись точкой, и если там присутствует дата, то используйте формат `0.0.yyyy.mm.dd`, но не `dd.mm.yyyy` или не совместимый с проблемой Y2K `yy.mm.dd`. Добавление к версии префикса `0.0.` является важным, в случае если выпущен релиз с присвоением настоящей версии, которая в числовом представлении, конечно же, будет ниже, чем `yyyy`.
+[IMPORTANT]
+====
+Название пакета должно быть уникальным среди всех портов в дереве. Убедитесь, что порт с таким же `PORTNAME` ещё не существует, и если он есть, добавьте один из crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMEPREFIX` или `PKGNAMESUFFIX`].
+====
-Вот несколько (реальных) примеров того, как преобразовать имя из оригинального, придуманного авторами, к подходящему для имени пакета:
+Вот несколько (реальных) примеров преобразования названия, указанного авторами программного обеспечения, в подходящее имя пакета. В каждой строке указана только одна из переменных `DISTVERSION` или `PORTVERSION`, в зависимости от того, какая используется в [.filename]#Makefile# порта:
-[.informaltable]
-[cols="1,1,1,1,1,1", frame="none", options="header"]
+.Примеры наименования пакетов
+[cols="1,1,1,1,1,1,1", frame="none", options="header"]
|===
| Имя дистрибутива
| PKGNAMEPREFIX
| PORTNAME
| PKGNAMESUFFIX
-| PORTVERSION
-| Обоснование
+| DISTVERSION
+| .PORTVERSION
+| Причина или комментарий
|mule-2.2.2
|(пусто)
|mule
|(пусто)
|2.2.2
-|Изменений не потребовалось
+|
+|Никаких изменений не требуется
+
+|mule-1.0.1
+|(пусто)
+|mule
+|1
+|1.0.1
+|
+|Это версия 1 mule, а версия 2 уже существует
|EmiClock-1.0.2
|(пусто)
|emiclock
|(пусто)
|1.0.2
-|Для отдельных программ имена с заглавными буквами запрещены
+|
+|Нет имен в верхнем регистре для отдельных программ
|rdist-1.3alpha
|(пусто)
|rdist
|(пусто)
-|1.3.a
-|Строчки типа `alpha` запрещены
+|1.3alpha
+|
+|Версия будет `1.3.a`
|es-0.9-beta1
|(пусто)
|es
|(пусто)
-|0.9.b1
-|Строчки типа `beta` запрещены
+|0.9-beta1
+|
+|Версия будет `0.9.b1`
|mailman-2.0rc3
|(пусто)
|mailman
|(пусто)
-|2.0.r3
-|Строчки типа `rc` запрещены
+|2.0rc3
+|
+|Версия будет `2.0.r3`
|v3.3beta021.src
|(пусто)
|tiff
|(пусто)
+|
|3.3
-|Что это такое было вообще?
+|Что это вообще было?
|tvtwm
|(пусто)
|tvtwm
|(пусто)
-|pl11
-|Всегда требуется указание номера версии
+|
+|p11
+|Нет версии в имени файла, используйте то, что указано в исходном коде
|piewm
|(пусто)
|piewm
|(пусто)
|1.0
-|Всегда требуется указание номера версии
+|
+|Нет версии в имени файла, используйте то, что указано в исходном коде
|xvgr-2.10pl1
|(пусто)
|xvgr
|(пусто)
-|2.10.1
-|`pl` разрешено только при отсутствии старшего/младшего номера версии
+|
+|2.10.pl1
+|В таком случае, `pl1` означает уровень патча, поэтому использование DISTVERSION невозможно.
|gawk-2.15.6
|ja-
|gawk
|(пусто)
|2.15.6
-|Версия на японском языке
+|
+|Японская языковая версия
|psutils-1.13
|(пусто)
|psutils
|-letter
|1.13
-|Размер бумаги задается статически во время построения пакета
+|
+|Размер бумаги жестко задан во время сборки пакета
|pkfonts
|(пусто)
|pkfonts
|300
|1.0
-|пакет для шрифтов 300dpi
+|
+|Пакет для шрифтов с разрешением 300dpi
|===
-Если в исходном коде абсолютно нет информации о номере версии и не похоже, что автор собирается выпускать другую версию, то в качестве номера версии задайте просто `1.0` (как в примере с `piewm` выше). В противном случае спросите автора программы или используйте дату (`0.0.yyyy.mm.dd`) в качестве номера версии.
+Если в исходном источнике полностью отсутствует информация о версии и маловероятно, что автор когда-либо выпустит новую версию, просто укажите строку версии как `1.0` (как в примере с `piewm` выше). В противном случае, спросите автора или используйте дату выпуска исходного файла в формате `d__yyyy.mm.dd__` или `d__yyyymmdd__` в качестве версии.
+
+[TIP]
+====
+Используйте любую букву. Здесь `d` означает дату, если источник — это репозиторий Git, часто используется `g` с последующей датой коммита, также распространено использование `s` для снимка.
+====
[[makefile-categories]]
-== Разделение по категориям
+== Категоризация
+[[makefile-categories-definition]]
=== `CATEGORIES`
-В процессе создания пакета он помещается в каталог [.filename]#/usr/ports/packages/All#, а в одном или более подкаталогов из [.filename]#/usr/ports/packages# создаются на него ссылки. Имена этих подкаталогов определяются переменной `CATEGORIES`. Такая схема нужна для облегчения жизни пользователя, когда он сталкивается с массой пакетов на FTP-сервере или компакт-диске. Пожалуйста, посмотрите на <<porting-categories,текущий список категорий>> и выберите те из них, которые более всего подходят к вашему порту.
+При создании пакета он помещается в [.filename]#/usr/ports/packages/All#, и ссылки на него создаются в одной или нескольких поддиректориях [.filename]#/usr/ports/packages#. Имена этих поддиректорий задаются переменной `CATEGORIES`. Это предназначено для облегчения поиска пакетов пользователем при просмотре большого количества пакетов на FTP-сайте или CDROM. Пожалуйста, ознакомьтесь с crossref:makefiles[porting-categories,текущим списком категорий] и выберите подходящие для данного порта.
-Этот список также определяет, куда в дереве портов будет помещен порт. Если вы укажете здесь более одной категории, то предполагается, что файлы порта будут помещены в подкаталог с именем первой категории. Посмотрите <<choosing-categories,ниже>> для получения подробной информации о том, как правильно выбрать категории.
+Этот список также определяет, где в дереве портов будет размещён порт. Если здесь указано несколько категорий, файлы порта должны быть помещены в подкаталог с названием первой категории. Дополнительные сведения о выборе подходящих категорий см. в crossref:makefiles[choosing-categories,ниже].
[[porting-categories]]
=== Текущий список категорий
-Вот текущий список категорий. Те, которые отмечены звёздочкой (`*`), являются _виртуальными_ категориями-они не имеют собственного подкаталога в дереве портов. Они используются только в качестве вторичных категорий, и только для поиска.
+Вот текущий список категорий портов. Категории, помеченные звёздочкой (`*`), являются _виртуальными_ — они не имеют соответствующего подкаталога в дереве портов. Они используются только как вторичные категории и исключительно для целей поиска.
[NOTE]
====
-Для невиртуальных категорий имеется однострочное описание в `COMMENT` в [.filename]#Makefile# соответствующего подкаталога.
+Для невиртуальных категорий в `COMMENT` в [.filename]#Makefile# соответствующего подкаталога содержится однострочное описание.
====
[.informaltable]
@@ -319,462 +567,596 @@ PORTEPOCH= 1
|===
| Категория
| Описание
-| Примечания
+| Заметки
|[.filename]#accessibility#
|Порты для помощи пользователям с ограниченными возможностями.
-|
+|
-|[.filename]#afterstep*#
-|Порты, поддерживающие менеджер окон http://www.afterstep.org[AfterStep].
-|
+|[.filename]#afterstep#`*`
+|Порты для поддержки оконного менеджера http://www.afterstep.org/[AfterStep].
+|
|[.filename]#arabic#
|Поддержка арабского языка.
-|
+|
|[.filename]#archivers#
-|Инструменты для работы с архивами.
-|
+|Инструменты для архивирования.
+|
|[.filename]#astro#
-|Приложения, связанные с астрономией.
-|
+|Астрономические порты.
+|
|[.filename]#audio#
-|Поддержка работы со звуком.
-|
+|Поддержка звука.
+|
|[.filename]#benchmarks#
-|Утилиты для измерения производительности системы.
-|
+|Утилиты для тестирования производительности.
+|
|[.filename]#biology#
|Программное обеспечение, связанное с биологией.
-|
+|
|[.filename]#cad#
-|Инструменты Систем Автоматизированного Проектирования.
-|
+|Компьютерные средства автоматизированного проектирования.
+|
|[.filename]#chinese#
|Поддержка китайского языка.
-|
+|
|[.filename]#comms#
-|Коммуникационное программное обеспечение.
-|В основном программы для работы с последовательным портом.
+|Программное обеспечение для связи.
+|В основном программное обеспечение для работы с последовательным портом.
|[.filename]#converters#
-|Утилиты для преобразования символьных форматов.
-|
+|Преобразователи символьных кодировок.
+|
|[.filename]#databases#
|Базы данных.
-|
+|
|[.filename]#deskutils#
-|То, что было на столе до изобретения компьютеров.
-|
+|Вещи, которые раньше находились на рабочем столе до изобретения компьютеров.
+|
|[.filename]#devel#
-|Утилиты для разработки программного обеспечения.
-|Не помещайте сюда библиотеки просто потому, что это библиотеки-если они подпадают под какую-то другую категорию, то их быть здесь не должно.
+|Средства разработки.
+|Не размещайте библиотеки здесь только потому, что они являются библиотеками. Они _не_ должны быть в этой категории, если только они действительно не подходят никуда больше.
|[.filename]#dns#
-|Программное обеспечение для работы DNS.
-|
+|Программное обеспечение, связанное с DNS.
+|
-|[.filename]#docs*#
+|[.filename]#docs#`*`
|Мета-порты для документации FreeBSD.
-|
+|
|[.filename]#editors#
-|Редакторы общего назначения.
-|Специализированные редакторы относят к разделу для соответствующих инструментов (например, редактор математических формул попадает в категорию [.filename]#math#).
+|Общие редакторы.
+|Специализированные редакторы помещаются в раздел соответствующих инструментов. Например, редактор математических формул будет помещён в [.filename]#math#, а [.filename]#editors# будет для него второй категорией.
+
+|[.filename]#education#`*`
+|Программное обеспечение для образования.
+|Это включает приложения, утилиты или игры, разработанные в первую очередь или в значительной степени для помощи пользователю в изучении конкретной темы или обучении в целом. Также сюда входят приложения для создания курсов, приложения для предоставления курсов и приложения для управления классом или школой
-|[.filename]#elisp*#
-|Порты для Emacs lisp.
-|
+|[.filename]#elisp#`*`
+|Порты Emacs-lisp.
+|
|[.filename]#emulators#
|Эмуляторы других операционных систем.
-|Эмуляторы терминалов сюда _не_ относятся-те, которые разработаны для X, должны быть в категории [.filename]#x11#, а текстовые в [.filename]#comms# или [.filename]#misc#, в зависимости от конкретного их предназначения.
+|Терминальные эмуляторы _не_ относятся сюда. Основанные на X идут в [.filename]#x11#, а текстовые — либо в [.filename]#comms#, либо в [.filename]#misc#, в зависимости от конкретной функциональности.
+
+|[.filename]#enlightenment#`*`
+|Порты, связанные с оконным менеджером Enlightenment.
+|
+
+|[.filename]#filesystems#
+|Файловые системы и связанные утилиты.
+|
|[.filename]#finance#
-|Приложения для работы с деньгами, финансами и всем, что с этим связано.
-|
+|Монетарные, финансовые и связанные с ними приложения.
+|
|[.filename]#french#
|Поддержка французского языка.
-|
+|
|[.filename]#ftp#
-|Клиенты и серверы FTP.
-|Если ваш порт понимает как FTP, так и HTTP, поместите его в категорию [.filename]#ftp# и укажите вторичную категорию [.filename]#www#.
+|Клиентские и серверные утилиты FTP.
+|Если порт поддерживает как FTP, так и HTTP, поместите его в [.filename]#ftp# с дополнительной категорией [.filename]#www#.
|[.filename]#games#
|Игры.
-|
+|
-|[.filename]#geography*#
+|[.filename]#география#`*`
|Программное обеспечение, связанное с географией.
-|
+|
|[.filename]#german#
|Поддержка немецкого языка.
-|
+|
-|[.filename]#gnome*#
-|Порты Проекта http://www.gnome.org[GNOME].
-|
+|[.filename]#gnome#`*`
+|Порты из проекта https://www.gnome.org/[GNOME].
+|
-|[.filename]#gnustep*#
-|Программное обеспечение для окружения рабочего стола GNUstep.
-|
+|[.filename]#gnustep#`*`
+|Программное обеспечение, связанное со средой рабочего стола GNUstep.
+|
|[.filename]#graphics#
|Графические утилиты.
-|
+|
-|[.filename]#hamradio*#
-|Программное обеспечение для любительского радио
-|
+|[.filename]#hamradio#`*`
+|Программное обеспечение для радиолюбителей.
+|
-|[.filename]#haskell*#
+|[.filename]#haskell#`*`
|Программное обеспечение, связанное с языком Haskell.
-|
+|
|[.filename]#hebrew#
|Поддержка иврита.
-|
+|
|[.filename]#hungarian#
-|Поддержка венгерского языка.
-|
-
-|[.filename]#ipv6*#
-|Программное обеспечение, связанное с IPv6.
-|
+|Венгерская языковая поддержка.
+|
|[.filename]#irc#
-|Утилиты для Internet Relay Chat.
-|
+|Утилиты Internet Relay Chat.
+|
|[.filename]#japanese#
|Поддержка японского языка.
-|
+|
|[.filename]#java#
|Программное обеспечение, связанное с языком Java(TM).
-|Категория [.filename]#java# ни в коем случае не должна быть единственной для порта. Оставьте для портов, непосредственно имеющих отношение к языку Java, портерам также рекомендуется не использовать [.filename]#java# как основную категорию порта.
+|Категория [.filename]#java# не должна быть единственной для порта. За исключением портов, непосредственно связанных с языком Java, разработчикам также рекомендуется не использовать [.filename]#java# в качестве основной категории для порта.
+
+|[.filename]#kde#`*`
+|Порты проекта https://www.kde.org/[KDE] (общие).
+|
+
+|[.filename]#kde-приложения#`*`
+|Приложения от проекта https://www.kde.org/[KDE].
+|
-|[.filename]#kde*#
-|Порты проекта http://www.kde.org[KDE].
-|
+|[.filename]#kde-frameworks#`*`
+|Дополнительные библиотеки от проекта https://www.kde.org/[KDE] для программирования с использованием Qt.
+|
-|[.filename]#kld*#
+|[.filename]#kde-plasma#`*`
+|Рабочий стол от проекта https://www.kde.org/[KDE].
+|
+
+|[.filename]#kld#`*`
|Загружаемые модули ядра.
-|
+|
|[.filename]#korean#
|Поддержка корейского языка.
-|
+|
|[.filename]#lang#
|Языки программирования.
-|
+|
-|[.filename]#linux*#
-|Linux приложения и утилиты.
-|
+|[.filename]#linux#`*`
+|Приложения и вспомогательные утилиты Linux.
+|
-|[.filename]#lisp*#
+|[.filename]#lisp#`*`
|Программное обеспечение, связанное с языком Lisp.
-|
+|
|[.filename]#mail#
-|Программы для работы с почтой.
-|
+|Почтовое программное обеспечение.
+|
+
+|[.filename]#mate#`*`
+|Порты, связанные с окружением рабочего стола MATE, форком GNOME 2.
+|
|[.filename]#math#
-|Программное обеспечение для численных вычислений и другие утилиты, связанные с математикой.
-|
+|Численные расчеты и другие математические утилиты.
+|
-|[.filename]#mbone*#
-|Приложения для MBone.
-|
+|[.filename]#mbone#`*`
+|Приложения MBone.
+|
|[.filename]#misc#
|Различные утилиты
-|В общем, то, что не попадает в другие категории. Если это возможно, попробуйте найти более подходящую, чем `misc`, категорию для вашего порта, так как здесь порты теряются.
+|Вещи, которые не подходят никуда больше. По возможности, попытайтесь найти для порта категорию лучше, чем `misc`, так как порты здесь часто остаются без внимания.
|[.filename]#multimedia#
-|Программное обеспечение для работы с мультимедиа.
-|
+|Мультимедийное программное обеспечение.
+|
|[.filename]#net#
|Различное сетевое программное обеспечение.
-|
+|
|[.filename]#net-im#
-|Программы мгновенного обмена сообщениями.
-|
+|Программное обеспечение для обмена мгновенными сообщениями.
+|
|[.filename]#net-mgmt#
-|Программное обеспечение для сетевого управления.
-|
+|Программное обеспечение для управления сетями.
+|
|[.filename]#net-p2p#
-|Приложения для пиринговых сетей.
-|
+|Одноранговые сетевые приложения.
+|
-|[.filename]#news#
-|Программное обеспечение для работы с конференциями USENET.
-|
+|[.filename]#сеть-vpn#`*`
+|Виртуальные частные сети.
+|
-|[.filename]#palm#
-|Программная поддержка http://www.palm.com/[Palm(TM)].
-|
+|[.filename]#news#
+|Программное обеспечение для USENET-новостей.
+|
-|[.filename]#parallel*#
-|Приложения, связанные с параллельными вычислениями.
-|
+|[.filename]#parallel#`*`
+|Приложения, работающие с параллелизмом в вычислениях.
+|
-|[.filename]#pear*#
-|Порты, относящиеся к технологии Pear PHP.
-|
+|[.filename]#pear#`*`
+|Порты, связанные с PHP-фреймворком Pear.
+|
-|[.filename]#perl5*#
-|Порты, которым для работы требуется Perl версии 5.
-|
+|[.filename]#perl5#`*`
+|Порты, требующие Perl версии 5 для работы.
+|
-|[.filename]#plan9*#
-|Различные программы из http://www.cs.bell-labs.com/plan9dist/[Plan9].
-|
+|[.filename]#plan9#`*`
+|Различные программы с https://9p.io/wiki/plan9/Download/index.html[Plan9].
+|
|[.filename]#polish#
|Поддержка польского языка.
-|
+|
|[.filename]#ports-mgmt#
|Порты для управления, установки и разработки портов и пакетов FreeBSD.
-|
+|
|[.filename]#portuguese#
|Поддержка португальского языка.
-|
+|
|[.filename]#print#
|Программное обеспечение для печати.
-|Инструменты для вёрстки (просмотрщики и тому подобное) тоже относятся сюда.
+|Инструменты для настольных издательских систем (превьюеры и т. д.) также относятся сюда.
-|[.filename]#python*#
-|Программное обеспечение, связанное с языком http://www.python.org/[Python].
-|
+|[.filename]#python#`*`
+|Программное обеспечение, связанное с языком https://www.python.org/[Python].
+|
-|[.filename]#ruby*#
-|Программное обеспечение, связанное с языком http://www.ruby-lang.org/[Ruby].
-|
+|[.filename]#ruby#`*`
+|Программное обеспечение, связанное с языком https://www.ruby-lang.org/[Ruby].
+|
-|[.filename]#rubygems*#
-|Порты для пакетов http://www.rubygems.org/[RubyGems].
-|
+|[.filename]#rubygems#`*`
+|Порты пакетов https://www.rubygems.org/[RubyGems].
+|
|[.filename]#russian#
|Поддержка русского языка.
-|
+|
-|[.filename]#scheme*#
+|[.filename]#scheme#`*`
|Программное обеспечение, связанное с языком Scheme.
-|
+|
|[.filename]#science#
-|Научные программы, которые не подпадают под другие категории, скажем, [.filename]#astro#, [.filename]#biology# или [.filename]#math#.
-|
+|Научные порты, которые не входят в другие категории, такие как [.filename]#astro#, [.filename]#biology# и [.filename]#math#.
+|
|[.filename]#security#
-|Программы, обеспечивающие безопасность системы.
-|
+|Средства обеспечения безопасности.
+|
|[.filename]#shells#
-|Различные командные процессоры.
-|
+|Командные оболочки.
+|
+
+|[.filename]#spanish#`*`
+|Поддержка испанского языка.
+|
|[.filename]#sysutils#
|Системные утилиты.
-|
-
-|[.filename]#spanish*#
-|Поддержка испанского языка.
-|
+|
-|[.filename]#tcl*#
-|Порты, для работы которых нужен Tcl.
-|
+|[.filename]#tcl#`*`
+|Порты, использующие Tcl для запуска.
+|
|[.filename]#textproc#
-|Утилиты для обработки текстов.
-|Инструменты для вёрстки помещаются в категорию [.filename]#print#, а не сюда.
+|Средства обработки текста.
+|Он не включает инструменты для настольных издательских систем, которые помещаются в [.filename]#print#.
-|[.filename]#tk*#
-|Порты, для работы которых нужен Tk.
-|
+|[.filename]#tk#`*`
+|Порты, использующие Tk для работы.
+|
|[.filename]#ukrainian#
|Поддержка украинского языка.
-|
+|
|[.filename]#vietnamese#
|Поддержка вьетнамского языка.
-|
+|
+
+|[.filename]#wayland#`*`
+|Порты для поддержки сервера дисплея Wayland.
+|
-|[.filename]#windowmaker*#
-|Порты для поддержки менеджера окон WindowMaker.
-|
+|[.filename]#windowmaker#`*`
+|Порты для поддержки оконного менеджера Window Maker.
+|
|[.filename]#www#
-|Программное обеспечение, связанное со всемирной паутиной.
-|Поддержка языка HTML относится сюда же.
+|Программное обеспечение, связанное с Всемирной паутиной.
+|Поддержка языка HTML также относится сюда.
|[.filename]#x11#
-|X Window System и иже с ними.
-|Эта категория предназначена только для программного обеспечения, которое поддерживает саму оконную систему. Не помещайте сюда обычные приложения для X: большинство из них должны быть перенесены в другие категории [.filename]#x11-*# (смотрите ниже).
+|Система X Window и связанные компоненты.
+|Эта категория предназначена только для программного обеспечения, которое напрямую поддерживает оконную систему. Не помещайте сюда обычные X-приложения. Большинство из них относятся к другим категориям [.filename]#x11-*# (см. ниже).
|[.filename]#x11-clocks#
-|Часы для X11.
-|
+|Часы X11.
+|
|[.filename]#x11-drivers#
|Драйверы X11.
-|
+|
|[.filename]#x11-fm#
-|Менеджеры файлов для X11.
-|
+|Менеджеры файлов X11.
+|
|[.filename]#x11-fonts#
-|Шрифты для X11 и утилиты для работы с ними.
-|
+|Шрифты и утилиты для работы со шрифтами в X11.
+|
|[.filename]#x11-servers#
-|Серверы для X11.
-|
+|Серверы X11.
+|
|[.filename]#x11-themes#
-|Темы для X11.
-|
+|Темы X11.
+|
|[.filename]#x11-toolkits#
-|Пакеты разработчика для X11.
-|
+|Инструментарии X11.
+|
|[.filename]#x11-wm#
-|Оконные менеджеры для X11.
-|
+|Оконные менеджеры X11.
+|
-|[.filename]#xfce*#
-|Порты, связанные с окружением рабочего стола http://www.xfce.org/[Xfce].
-|
+|[.filename]#xfce#`*`
+|Порты, связанные с окружением рабочего стола https://www.xfce.org/[Xfce].
+|
-|[.filename]#zope*#
-|Поддержка http://www.zope.org/[Zope].
-|
+|[.filename]#zope#`*`
+|https://www.zope.org/[Zope] поддержка.
+|
|===
[[choosing-categories]]
-=== Выбор правильной категории
+=== Выбор подходящей категории
-Так как многие категории перекрываются, вам часто необходимо будет выбирать, какая их них должна быть основной для вашего порта. Есть несколько правил, по которым можно решить этот вопрос. Вот список приоритетов, в уменьшающейся степени предпочтения:
+Поскольку многие категории пересекаются, выбор основной категории для порта может быть утомительным. Существует несколько правил, регулирующих этот вопрос. Вот список приоритетов в порядке убывания важности:
-* Первая категория должна быть физической категорий (смотрите <<porting-categories,выше>>). Это необходимо для создания пакетов. После этого виртуальные и физические категории могут смешиваться.
-* Сначала всегда идут категории, специфичные для языков. Например, если ваш порт устанавливает японские шрифты для X11, то строчка `CATEGORIES` должна иметь вид [.filename]#japanese x11-fonts#.
-* Более конкретные категории идут первыми перед более общими. В частности, редактор HTML должен быть описан как [.filename]#www editors#, а не наоборот. Кроме того, вы не должны указывать категорию [.filename]#net#, если порт относится к одной из категорий [.filename]#irc#, [.filename]#mail#, [.filename]#news#, [.filename]#security# или [.filename]#www#, так как [.filename]#net# включается автоматически.
-* [.filename]#x11# используется как вторичная категория только в случае, если в качестве основной категории указан естественный язык. В частности, вам не нужно указывать [.filename]#x11# в качестве категории для приложений X.
-* Режимы для редактора Emacs должны помещаться в ту же категорию, что и приложение, которое поддерживается этим режимом, а не в [.filename]#editors#. Например, режим Emacs для редактирования исходного кода некоторого языка программирования должен быть помещен в категорию [.filename]#lang#.
-* Порты, устанавливающие загружаемые модули ядра, должны содержать виртуальную категорию [.filename]#kld# в строке `CATEGORIES`. Это одно из действий, выполняемых автоматически с добавлением `kmod` в строке `USES`.
-* [.filename]#misc# не должна указываться вместе с любой другой невиртуальной категорией. Если вы указываете `misc` вместе с чем-то ещё в строке `CATEGORIES`, это значит, что вы можете спокойно удалить `misc` и просто поместить порт в этот другой подкаталог!
-* Если ваш порт решительным образом не подпадает ни под какую категорию, поместите его в [.filename]#misc#.
+* Первая категория должна быть физической (см. crossref:makefiles[porting-categories,выше]). Это необходимо для работы упаковки. Виртуальные категории и физические категории могут чередоваться после этого.
+* Языковые категории всегда указываются первыми. Например, если порт устанавливает японские шрифты для X11, то строка `CATEGORIES` будет выглядеть так: [.filename]#japanese x11-fonts#.
+* Конкретные категории перечислены перед менее специфичными. Например, HTML-редактор указывается как [.filename]#www editors#, а не наоборот. Также не следует указывать [.filename]#net#, если порт принадлежит к любой из категорий [.filename]#irc#, [.filename]#mail#, [.filename]#news#, [.filename]#security# или [.filename]#www#, так как [.filename]#net# подразумевается автоматически.
+* [.filename]#x11# используется как вторичная категория только в случае, когда основной категорией указан естественный язык. В частности, не указывайте [.filename]#x11# в строке категории для X-приложений.
+* Режимы Emacs размещаются в той же категории портов, что и приложение, поддерживаемое данным режимом, а не в [.filename]#editors#. Например, режим Emacs для редактирования исходных файлов какого-либо языка программирования попадает в [.filename]#lang#.
+* Порты, устанавливающие загружаемые модули ядра, также имеют виртуальную категорию [.filename]#kld# в строке `CATEGORIES`. Это одна из вещей, автоматически обрабатываемых при добавлении `USES=kmod`.
+* [.filename]#misc# не встречается вместе с другими невиртуальными категориями. Если `misc` указан вместе с чем-то еще в `CATEGORIES`, это означает, что `misc` можно безопасно удалить, а порт разместить только в другом подкаталоге.
+* Если порт действительно не подходит никуда больше, поместите его в [.filename]#misc#.
-Если вы не уверены в правильности выбора категории, пожалуйста, отметьте это в вашем сообщении man:send-pr[1], чтобы мы могли обсудить это до того, как включить порт в Коллекцию. Если вы являетесь коммиттером, пошлите замечание на адрес {freebsd-ports}, чтобы мы могли обсудить это. Зачастую новые порты помещаются не в ту категорию только для того, чтобы их оттуда сразу же удалили. Это приводит к излишнему и ненужному росту основного хранилища исходных текстов.
+Если категория не определена четко, пожалуйста, укажите это в комментарии при https://bugs.freebsd.org/submit/[отправке порта] в баг-трекере, чтобы мы могли обсудить её перед импортом. Как коммиттер, отправьте сообщение в рассылку {freebsd-ports}, чтобы мы сначала обсудили это. Слишком часто новые порты импортируются в неправильную категорию, после чего их сразу же приходится перемещать.
[[proposing-categories]]
=== Предложение новой категории
-Поскольку со временем Коллекция Портов увеличилась, то в связи с этим были добавлены различные новые категории. Новые категории могут быть или _виртуальными_ категориями-которые не имеют соответствующего подкаталога в дереве портов-или _физическими_ категориями-у которых он есть. Следующий текст содержит обсуждение вопросов, возникающих при создании новой физической категории, чтобы вы могли понимать их, когда предложите новую категорию.
+По мере роста Коллекции портов со временем были введены различные новые категории. Новые категории могут быть _виртуальными_ — те, у которых нет соответствующего подкаталога в дереве портов, или _физическими_ — те, у которых он есть. В этом разделе обсуждаются вопросы, связанные с созданием новой физической категории. Внимательно ознакомьтесь с ним, прежде чем предлагать новую.
-В соответствие с существующей практикой мы избегаем создания новой физической категории, пока достаточно большое число портов логически ей не принадлежит или же порты, которые могли бы ей принадлежать, не являются логически обособленной группой, представляющей для всех ограниченный интерес (в частности, категории, относящиеся к естественным языкам); предпочтительно выполнение обоих условий.
+Наша текущая практика заключается в том, чтобы избегать создания новой физической категории, если только либо большое количество портов логически принадлежит к ней, либо порты, которые к ней относятся, представляют собой логически обособленную группу, представляющую ограниченный общий интерес (например, категории, связанные с разговорными человеческими языками), или, желательно, оба условия одновременно.
-Основной причиной для этого является то, что такое изменение создает extref:{committers-guide}[изрядное количество работы, ports] и для коммиттеров, и для всех тех пользователей, которые отслеживают изменения в Коллекции Портов. В дополнение, предложенная категория создает естественное разногласие. (Пожалуй, потому что не существует четкого соглашения, является ли категория "слишком большой", или должны ли категории предоставлять себя для просмотра (и, таким образом, какое количество категорий было бы идеальным значением), и так далее.)
+Обоснование этого заключается в том, что такое изменение создает extref:{committers-guide}[значительный объем работы, ports] как для коммиттеров, так и для всех пользователей, которые отслеживают изменения в Коллекции портов. Кроме того, предлагаемые изменения категорий, как правило, вызывают споры. (Возможно, это связано с отсутствием четкого консенсуса относительно того, когда категория становится «слишком большой», а также относительно того, должны ли категории способствовать удобству просмотра (и, следовательно, какое количество категорий было бы идеальным), и так далее.)
-Процедура:
+Вот процедура:
[.procedure]
-====
-. Предложите новую категорию на {freebsd-ports}. Вам следует включить для новой категории детальное обоснование, в том числе почему вы считаете, что существующие категории не являются достаточными, и список существующих портов, предложенных для перемещения. (Если есть новые порты, ожидающие в GNATS и попадающие в эту категорию, то укажите их тоже.) Если вы являетесь сопровождающим и/или отправителем, то укажите это соответственно, так как это может помочь вам в вашем деле.
-. Принимайте участие в обсуждении.
-. Если кажется, что для вашей идеи появилась поддержка, отправьте PR, который будет включать обоснование и список существующих портов, которые надо переместить. В идеале этот PR должен также включать патчи для следующего:
+. Предложите новую категорию на {freebsd-ports}. Включите подробное обоснование для новой категории, объясните, почему существующие категории недостаточны, и укажите список существующих портов, предлагаемых к перемещению. (Если в Bugzilla есть ожидающие рассмотрения новые порты, которые подходят под эту категорию, также перечислите их.) Если вы являетесь сопровождающим и/или подающим предложение, укажите это, так как это может помочь в рассмотрении.
+. Участвуйте в обсуждении.
+. Если кажется, что идея находит поддержку, оформите PR, включающий как обоснование, так и список существующих портов, которые необходимо переместить. В идеале, этот PR также должен содержать следующие исправления:
-** [.filename]#Makefile#'ы для новых портов в результате репозиторного копирования
-** [.filename]#Makefile# для категорий старых портов
-** [.filename]#Makefile#'ы для портов, зависящих от старых портов
-** (в дополнение, вы можете включить другие файлы, требующие изменений, согласно процедуре из Руководства Коммиттера.)
+** [.filename]##Makefile## для новых портов после копирования их репозитория
+** [.filename]#Makefile# для новой категории
+** [.filename]#Makefile# для старых категорий портов
+** [.filename]##Makefile## для портов, зависящих от старых портов
+** (для дополнительной оценки включите другие файлы, которые необходимо изменить, в соответствии с процедурой, описанной в Руководстве коммиттера.)
-. Поскольку это затрагивает инфраструктуру портов и охватывает не только выполнение репозиторного копирования, но также, возможно, и выполнение регрессивных тестов на кластере построения, то PR должна назначать себе {portmgr}.
-. Если этот PR одобрен, то коммиттеру нужно продолжить остальную часть процедуры, которая extref:{committers-guide}[изложена в Руководстве Коммиттера, ports].
-====
+. Поскольку это затрагивает инфраструктуру портов и включает перемещение и исправление многих портов, а также, возможно, проведение регрессионных тестов на сборочном кластере, назначьте PR для {portmgr}.
+. Если этот PR будет одобрен, коммиттер должен будет выполнить оставшуюся часть процедуры, extref:{committers-guide}[описанной в Руководстве коммиттера,ports].
-Предложение новой виртуальной категории должно быть схожим с вышеизложенным, но при этом затрагивать намного меньше, поскольку ни один из портов не будет перемещен в действительности. В этом случае единственными патчами, включенными в PR, будут те, что добавляют новую категорию в `CATEGORIES` каждого из затрагиваемых портов.
+Предложение новой виртуальной категории аналогично описанному выше, но гораздо менее трудоёмко, так как фактически не потребуется перемещать порты. В этом случае единственные патчи, которые нужно включить в PR, — это добавление новой категории в `CATEGORIES` затронутых портов.
[[proposing-reorg]]
-=== Предложение реорганизации всех категорий
+=== Предложение о реорганизации всех категорий
-Время от времени кто-нибудь предлагает произвести реорганизацию категорий либо до двухуровневой, либо другого типа на основе ключевых слов. На данный момент из этих предложений ничего не получилось, потому что, хотя они просты в реализации, но предполагаемая переделка всей коллекции портов по меньшей мере приводит в уныние. Пожалуйста, прочтите историю этих предложений в архивах рассылок перед тем, как присылать свои соображения; более того, вы должны быть готовы представить работающий прототип.
+Изредка кто-то предлагает реорганизовать категории, используя либо двухуровневую структуру, либо какую-либо другую структуру ключевых слов. На сегодняшний день ни одно из этих предложений не было реализовано, потому что, хотя их очень легко выдвинуть, усилия, необходимые для переработки всей существующей коллекции портов в рамках любой реорганизации, пугают, мягко говоря. Пожалуйста, ознакомьтесь с историей этих предложений в архивах списка рассылки, прежде чем публиковать эту идею. Более того, будьте готовы к тому, что вас попросят предоставить рабочий прототип.
[[makefile-distfiles]]
-== Дистрибутивные файлы
+== Файлы дистрибутива
-Во второй части [.filename]#Makefile# задаётся, какие файлы и откуда должны быть сгружены для того, чтобы построить порт.
+Вторая часть [.filename]#Makefile# описывает файлы, которые необходимо загрузить для сборки порта, и места, откуда их можно скачать.
-=== `DISTVERSION/DISTNAME`
+[[makefile-distname]]
+=== `DISTNAME`
-В переменной `DISTNAME` указывается имя порта так, как назвали его создатели программного обеспечения. Значение `DISTNAME` по умолчанию совпадает с `${PORTNAME}-${PORTVERSION}`, так что переопределяете её значение только в случае необходимости. `DISTNAME` используется только в двух местах. Во-первых, список дистрибутивных файлов (`DISTFILES`) по умолчанию состоит из `${DISTNAME}${EXTRACT_SUFX}`. И во-вторых, предполагается, что дистрибутивный файл будет распакован в подкаталог с именем `WRKSRC`, значение которого по умолчанию есть не что иное, как [.filename]#work/${DISTNAME}#.
+`DISTNAME` — это имя порта, используемое авторами программного обеспечения. По умолчанию `DISTNAME` имеет значение `${PORTNAME}-${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}`, а если не задано, `DISTVERSION` по умолчанию принимает значение `${PORTVERSION}`, поэтому переопределяйте `DISTNAME` только при необходимости. `DISTNAME` используется только в двух случаях. Во-первых, список файлов дистрибутива (`DISTFILES`) по умолчанию имеет значение `${DISTNAME}${EXTRACT_SUFX}`. Во-вторых, ожидается, что файл дистрибутива распакуется в подкаталог с именем `WRKSRC`, который по умолчанию равен [.filename]#work/${DISTNAME}#.
-Названия некоторых дистрибутивов, которые не укладываются в `${PORTNAME}-${PORTVERSION}`-схему, могут быть автоматически обработаны посредством установки переменной `DISTVERSION`. `PORTVERSION` и `DISTNAME` будут унаследованы автоматически, но конечно же могут быть переопределены. Следующая таблица демонстрирует некоторые примеры:
+Некоторые названия дистрибутивов от поставщиков, которые не соответствуют схеме `${PORTNAME}-${PORTVERSION}`, могут обрабатываться автоматически путем установки `DISTVERSIONPREFIX`, `DISTVERSION` и `DISTVERSIONSUFFIX`. `PORTVERSION` будет автоматически вычисляться из `DISTVERSION`.
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
-|===
-| DISTVERSION
-| PORTVERSION
+[IMPORTANT]
+====
+Только одна из переменных `PORTVERSION` и `DISTVERSION` может быть установлена одновременно. Если `DISTVERSION` не определяет корректную `PORTVERSION`, не используйте `DISTVERSION`.
+====
-|0.7.1d
-|0.7.1.d
+Если схема версий исходного проекта может быть преобразована в схему, совместимую с портами, установите некоторую переменную в версию исходного проекта, _не используйте_ имя переменной `DISTVERSION`. Установите `PORTVERSION` в вычисленную версию на основе созданной вами переменной и задайте `DISTNAME` соответствующим образом.
-|10Alpha3
-|10.a3
+Если схема версионирования вышестоящего проекта не может быть легко преобразована в значение, совместимое с портами, установите `PORTVERSION` в разумное значение и задайте `DISTNAME` как `PORTNAME` с дословной версией вышестоящего проекта.
-|3Beta7-pre2
-|3.b7.p2
+[[makefile-distname-ex1]]
+.Получение `PORTVERSION` вручную
+[example]
+====
+BIND9 использует схему версионирования, несовместимую с версиями портов (в версиях используется `-`), и её нельзя получить с помощью `DISTVERSION`, так как после выпуска 9.9.9 выходят «уровни исправлений» в формате `9.9.9-P1`. `DISTVERSION` преобразует это в `9.9.9.p1`, что в схеме версионирования портов означает 9.9.9 pre-release 1, то есть версию, предшествующую 9.9.9, а не следующую за ней. Поэтому `PORTVERSION` вручную формируется из переменной `ISCVERSION`, чтобы получить `9.9.9p1`.
-|8:f_17
-|8f.17
-|===
+Порядок, в котором система портов и pkg будут сортировать версии, проверяется с помощью аргумента `-t` из man:pkg-version[8]:
+
+[source, shell]
+....
+% pkg version -t 9.9.9 9.9.9.p1
+> <.>
+% pkg version -t 9.9.9 9.9.9p1
+< <.>
+....
+
+<.> Знак `>` означает, что первый аргумент, переданный в `-t`, больше второго аргумента. `9.9.9` находится после `9.9.9.p1`.
+<.> Знак `<` означает, что первый аргумент, переданный в `-t`, меньше второго аргумента. `9.9.9` находится перед `9.9.9p1`.
+
+В файле [.filename]#Makefile# порта, например package:dns/bind99[], это достигается с помощью:
+
+[.programlisting]
+....
+PORTNAME= bind
+PORTVERSION= ${ISCVERSION:S/-P/P/:S/b/.b/:S/a/.a/:S/rc/.rc/}
+CATEGORIES= dns net
+MASTER_SITES= ISC/bind9/${ISCVERSION}
+PKGNAMESUFFIX= 99
+DISTNAME= ${PORTNAME}-${ISCVERSION}
+
+MAINTAINER= mat@FreeBSD.org
+COMMENT= BIND DNS suite with updated DNSSEC and DNS64
+WWW= https://www.isc.org/bind/
+
+LICENSE= ISCL
+
+# ISC releases things like 9.8.0-P1 or 9.8.1rc1, which our versioning does not like
+ISCVERSION= 9.9.9-P6
+....
+
+Определите версию вышестоящего пакета в `ISCVERSION`, с комментарием, объясняющим, _почему_ это необходимо. Используйте `ISCVERSION` для получения совместимого с портами `PORTVERSION`. Используйте `ISCVERSION` напрямую для получения правильного URL для загрузки файла дистрибутива. Используйте `ISCVERSION` напрямую для именования дистрибутивного файла.
+====
+
+[[makefile-distname-ex2]]
+.Получить `DISTNAME` из `PORTVERSION`
+[example]
+====
+Время от времени имя файла дистрибутива имеет мало отношения или вообще никакого отношения к версии программного обеспечения.
+
+В пакете package:comms/kermit[], в файле дистрибутива присутствует только последний элемент версии:
+
+[.programlisting]
+....
+PORTNAME= kermit
+PORTVERSION= 9.0.304
+CATEGORIES= comms ftp net
+MASTER_SITES= ftp://ftp.kermitproject.org/kermit/test/tar/
+DISTNAME= cku${PORTVERSION:E}-dev20
+....
+
+Модификатор `:E` man:make[1] возвращает суффикс переменной, в данном случае `304`. Файл дистрибутива корректно создаётся как `cku304-dev20.tar.gz`.
+====
+
+[[makefile-distname-ex3]]
+.Экзотический случай 1
+[example]
+====
+Иногда нет связи между названием программы, её версией и файлом дистрибутива, в котором она распространяется.
+
+Из пакета package:audio/libworkman[]:
+
+[.programlisting]
+....
+PORTNAME= libworkman
+PORTVERSION= 1.4
+CATEGORIES= audio
+MASTER_SITES= LOCAL/jim
+DISTNAME= ${PORTNAME}-1999-06-20
+....
+
+====
+
+[[makefile-distname-ex4]]
+.Экзотический случай 2
+[example]
+====
+В пакете package:comms/librs232[] файл дистрибутива не имеет версии, поэтому необходимо использовать crossref:makefiles[makefile-dist_subdir,`DIST_SUBDIR`]:
+
+[.programlisting]
+....
+PORTNAME= librs232
+PORTVERSION= 20160710
+CATEGORIES= comms
+MASTER_SITES= http://www.teuniz.net/RS-232/
+DISTNAME= RS-232
+DIST_SUBDIR= ${PORTNAME}-${PORTVERSION}
+....
+
+====
[NOTE]
====
-Значения переменных `PKGNAMEPREFIX` и `PKGNAMESUFFIX` не влияют на значение `DISTNAME`. Заметьте также, что если значение `WRKSRC` равно [.filename]#work/${PORTNAME}-${PORTVERSION}#, и в случае, когда оригинальный архив называется по имени, отличном от `${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}`, скорее всего, вы должны оставить `DISTNAME` как есть- лучше переопределить `DISTFILES`, чем задавать значения как `DISTNAME`, так и `WRKSRC` (и, возможно, ещё и `EXTRACT_SUFX`).
+`PKGNAMEPREFIX` и `PKGNAMESUFFIX` не влияют на `DISTNAME`. Также обратите внимание, что если `WRKSRC` равно [.filename]#${WRKDIR}/${DISTNAME}#, а исходный архив с исходным кодом называется иначе, чем `${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}`, оставьте `DISTNAME` без изменений — определение только `DISTFILES` проще, чем определение и `DISTNAME`, и `WRKSRC` (а возможно, и `EXTRACT_SUFX`).
====
+[[makefile-master_sites]]
=== `MASTER_SITES`
-Содержит часть с каталогом FTP/HTTP-URL, которая указывает на оригинальный архив на сервере `MASTER_SITES`. Не забудьте лидирующий слэш ([.filename]#/#)!
+Запишите именем каталога из FTP/HTTP-URL, указывающего на исходный tarball, в `MASTER_SITES`. Не забудьте завершающий слэш ([.filename]#/#)!
+
+Макросы `make` будут пытаться использовать эту спецификацию для загрузки файла дистрибутива с помощью `FETCH`, если не смогут найти его уже в системе.
+
+Рекомендуется включать в этот список несколько сайтов, желательно с разных континентов. Это обеспечит защиту от проблем в глобальной сети.
+
+[IMPORTANT]
+====
+`MASTER_SITES` не должен быть пустым. Он должен указывать на реальный сайт, где размещены файлы дистрибутива. Он не может указывать на веб-архивы или кэшированные сайты с файлами дистрибутива FreeBSD. Единственное исключение из этого правила — порты, у которых нет файлов дистрибутива. Например, мета-порты не имеют файлов дистрибутива, поэтому `MASTER_SITES` не нужно задавать.
+====
+
+[[makefile-master_sites-shorthand]]
+==== Использование переменных `MASTER_SITE_*`
-Макрос команды `make` будет пытаться воспользоваться этой переменной для получения дистрибутивного файла с помощью программы `FETCH`, если он не будет найден в системе.
+Для популярных архивов, таких как SourceForge (`SOURCEFORGE`), GNU (`GNU`) или Perl CPAN (`PERL_CPAN`), доступны сокращённые обозначения. `MASTER_SITES` может использовать их напрямую:
-Рекомендуется помещать в список много сайтов, предпочтительно с разных континентов. Это поможет при наличии проблем с мировой сетью. Мы даже планируем добавить поддержку автоматического определения ближайшего сайта и сгрузки файлов оттуда; наличие нескольких сайтов будет способствовать этому начинанию.
+[.programlisting]
+....
+MASTER_SITES= GNU/make
+....
-Если оригинальный архив находится на одном из таких популярных серверов, как SourceForge, GNU или Perl CPAN, то указывайте эти сайты в простой форме при помощи `MASTER_SITE_*` (к примеру, `MASTER_SITE_SOURCEFORGE`, `MASTER_SITE_GNU` или `MASTER_SITE_PERL_CPAN`. Просто укажите в переменной `MASTER_SITES` одно из этих значений, а в переменной `MASTER_SITE_SUBDIR` задайте путь к архиву. Вот пример:
+Старый расширенный формат по-прежнему работает, но все порты были преобразованы в компактный формат. Расширенный формат выглядит следующим образом:
[.programlisting]
....
@@ -782,30 +1164,78 @@ MASTER_SITES= ${MASTER_SITE_GNU}
MASTER_SITE_SUBDIR= make
....
-Или можно использовать сокращенный формат:
+Эти значения и переменные определены в https://cgit.freebsd.org/ports/tree/Mk/bsd.sites.mk[Mk/bsd.sites.mk]. Новые записи добавляются часто, поэтому обязательно проверяйте последнюю версию этого файла перед отправкой порта.
+
+[TIP]
+====
+Для любой переменной `MASTER_SITE_FOO` можно использовать сокращение `_FOO_`. Например, используйте:
[.programlisting]
....
-MASTER_SITES= GNU/make
+MASTER_SITES= FOO
+....
+
+Если требуется `MASTER_SITE_SUBDIR`, используйте следующее:
+
+[.programlisting]
+....
+MASTER_SITES= FOO/bar
....
-Эти переменные определены в файле [.filename]#/usr/ports/Mk/bsd.sites.mk#. Всё время добавляются новые записи, так что обращайтесь к последней версии этого файла перед тем, как послать нам свой порт.
+====
-Для популярных сайтов существует несколько _магических_ макросов с заранее известной структурой каталогов. Используйте для них сокращения, и система попытается угадать для вас правильный подкаталог.
+[NOTE]
+====
+Некоторые имена `MASTER_SITE_*` довольно длинные, и для удобства использования были определены сокращения:
+
+[[makefile-master_sites-shortcut]]
+.Сокращения для макросов `MASTER_SITE_*`
+[cols="1,1", frame="none", options="header"]
+|===
+| Макрос
+| Сокращение
+
+|`PERL_CPAN`
+|`CPAN`
+
+|`GITHUB`
+|`GH`
+
+|`GITHUB_CLOUD`
+|`GHC`
+
+|`LIBREOFFICE_DEV`
+|`LODEV`
+
+|`NETLIB`
+|`NL`
+
+|`RUBYGEMS`
+|`RG`
+
+|`SOURCEFORGE`
+|`SF`
+|===
+====
+
+[[makefile-master_sites-magic]]
+==== Волшебные макросы MASTER_SITES
+
+Существует несколько "волшебных" макросов для популярных сайтов с предсказуемой структурой каталогов. Для них достаточно использовать сокращение, и система автоматически выберет подкаталог. Например, для порта с именем `Stardict`, версии `1.2.3`, размещенного на SourceForge, добавьте следующую строку:
[.programlisting]
....
MASTER_SITES= SF
....
-Если попытка угадать не удалась, то это может быть переписано следующим образом.
+подразумевает подкаталог с именем `/project/stardict/stardict/1.2.3`. Если подразумеваемый каталог указан неверно, его можно переопределить:
[.programlisting]
....
MASTER_SITES= SF/stardict/WyabdcRealPeopleTTS/${PORTVERSION}
....
-Что также можно записать в таком виде:
+Это также можно записать как
[.programlisting]
....
@@ -813,87 +1243,697 @@ MASTER_SITES= SF
MASTER_SITE_SUBDIR= stardict/WyabdcRealPeopleTTS/${PORTVERSION}
....
-.Популярные магические макросы для `MASTER_SITES`
+[[makefile-master_sites-popular]]
+.Волшебные макросы `MASTER_SITES`
[cols="1,1", frame="none", options="header"]
|===
| Макрос
-| Предполагаемый подкаталог
+| Предполагаемая поддиректория
+
+|`APACHE_COMMONS_BINARIES`
+|`${PORTNAME:S,commons-,,}`
+
+|`APACHE_COMMONS_SOURCE`
+|`${PORTNAME:S,commons-,,}`
|`APACHE_JAKARTA`
-|`/dist/jakarta/${PORTNAME:S,-,,/,}/source`
+|`${PORTNAME:S,-,/,}/source`
|`BERLIOS`
-|`/${PORTNAME:L}`
+|`${PORTNAME:tl}.berlios`
|`CHEESESHOP`
-|`/packages/source/source/${DISTNAME:C/(.).\*/\1/}/${DISTNAME:C/(.*)-[0-9].*/\1/}`
+|`source/${DISTNAME:C/(.).\*/\1/}/${DISTNAME:C/(.*)-[0-9].*/\1/}`
+
+|`CPAN`
+|`${PORTNAME:C/-.*//}`
|`DEBIAN`
-|`/debian/pool/main/${PORTNAME:C/^((lib)?.).*$/\1/}/${PORTNAME}`
+|`pool/main/${PORTNAME:C/^((lib)?.).*$/\1/}/${PORTNAME}`
+
+|`FARSIGHT`
+|`${PORTNAME}`
+
+|`FESTIVAL`
+|`${PORTREVISION}`
|`GCC`
-|`/pub/gcc/releases/${DISTNAME}`
+|`releases/${DISTNAME}`
+
+|`GENTOO`
+|`distfiles`
+
+|`GIMP`
+|`${PORTNAME}/${PORTVERSION:R}/`
+
+|`GH`
+|`${GH_ACCOUNT}/${GH_PROJECT}/tar.gz/${GH_TAGNAME}?dummy=/`
+
+|`GHC`
+|`${GH_ACCOUNT}/${GH_PROJECT}/`
|`GNOME`
-|`/pub/GNOME/sources/${PORTNAME}/${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/}`
+|`sources/${PORTNAME}/${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/}`
|`GNU`
-|`/gnu/${PORTNAME}`
+|`${PORTNAME}`
+
+|`GNUPG`
+|`${PORTNAME}`
+
+|`GNU_ALPHA`
+|`${PORTNAME}`
+
+|`HORDE`
+|`${PORTNAME}`
+
+|`LODEV`
+|`${PORTNAME}`
+
+|`MATE`
+|`${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/}`
|`MOZDEV`
-|`/pub/mozdev/${PORTNAME:L}`
+|`${PORTNAME:tl}`
-|`PERL_CPAN`
-|`/pub/CPAN/modules/by-module/${PORTNAME:C/-.*//}`
+|`NL`
+|`${PORTNAME}`
-|`PYTHON`
-|`/ftp/python/${PYTHON_PORTVERSION:C/rc[0-9]//}`
+|`QT`
+|`archive/qt/${PORTVERSION:R}`
-|`RUBYFORGE`
-|`/${PORTNAME:L}`
+|`SAMBA`
+|`${PORTNAME}`
|`SAVANNAH`
-|`/${PORTNAME:L}`
+|`${PORTNAME:tl}`
|`SF`
-|`/project/${PORTNAME:L}/${PORTNAME:L}/${PORTVERSION}`
+|`${PORTNAME:tl}/${PORTNAME:tl}/${PORTVERSION}`
+|===
+
+[[makefile-master_sites-github]]
+=== `USE_GITHUB`
+
+Если файл дистрибутива получен из определённого коммита или тега на https://github.com/[GitHub], для которого нет официально выпущенного файла, существует простой способ автоматически установить правильные значения `DISTNAME` и `MASTER_SITES`.
+
+[WARNING]
+====
+По состоянию на 2023-02-21 link:https://github.blog/2023-02-21-update-on-the-future-stability-of-source-code-archives-and-hashes/[GitHub] объявили, что загрузки исходного кода будут стабильными в течение года. Пожалуйста, переключитесь на ресурсы выпусков (release assets), а если они недоступны, запросите их создание у вышестоящих разработчиков.
+====
+
+Доступны следующие переменные:
+
+[[makefile-master_sites-github-description]]
+.`USE_GITHUB` Описание
+[cols="1,1,1", options="header"]
+|===
+| Переменная
+| Описание
+| По умолчанию
+
+|`GH_ACCOUNT`
+|Имя учётной записи пользователя GitHub, который размещает проект
+|`${PORTNAME}`
+
+|`GH_PROJECT`
+|Название проекта на GitHub
+|`${PORTNAME}`
+
+|`GH_TAGNAME`
+|Имя тега для загрузки (2.0.1, хэш, ...) Использование имени ветки здесь некорректно. Также можно использовать хэш идентификатора коммита для создания снимка состояния.
+|`${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}`
+
+|`GH_SUBDIR`
+|Когда программному обеспечению требуется дополнительный файл дистрибутива для извлечения в
+`${WRKSRC}`, можно использовать эту переменную. Примеры можно найти в
+crossref:makefiles[makefile-master_sites-github-multiple, Загрузка нескольких файлов из GitHub] для получения дополнительной информации.
+|(отсутствует)
+
+|`GH_TUPLE`
+|`GH_TUPLE` позволяет объединить `GH_ACCOUNT`, `GH_PROJECT`, `GH_TAGNAME` и `GH_SUBDIR` в одну переменную. Формат следующий: _account_`:`_project_`:`_tagname_`:`_group_`/`_subdir_. Часть `/`_subdir_ является необязательной. Это полезно, когда требуется получить несколько проектов с GitHub.
+|
+|===
+
+[IMPORTANT]
+====
+Не используйте `GH_TUPLE` для файла дистрибутива по умолчанию, так как у него нет значения по умолчанию.
+====
+
+[[makefile-master_sites-github-ex1]]
+.Простое использование `USE_GITHUB`
+[example]
+====
+
+При попытке создать порт для версии `1.2.7` pkg от пользователя FreeBSD на github, по адресу https://github.com/freebsd/pkg/[], файл [.filename]#Makefile# в итоге будет выглядеть следующим образом (незначительно сокращено для примера):
+
+[.programlisting]
+....
+PORTNAME= pkg
+DISTVERSION= 1.2.7
+
+USE_GITHUB= yes
+GH_ACCOUNT= freebsd
+....
+
+Он автоматически получит `MASTER_SITES` установленным в `GH` и `WRKSRC` в `${WRKDIR}/pkg-1.2.7`.
+====
+
+[[makefile-master_sites-github-ex2]]
+.Более полное использование `USE_GITHUB`
+[example]
+====
+При попытке создать порт для самой последней версии pkg от пользователя FreeBSD на github, по адресу https://github.com/freebsd/pkg/[], файл [.filename]#Makefile# в итоге выглядит следующим образом (незначительно сокращено для примера):
+
+[.programlisting]
+....
+PORTNAME= pkg-devel
+DISTVERSION= 1.3.0.a.20140411
+
+USE_GITHUB= yes
+GH_ACCOUNT= freebsd
+GH_PROJECT= pkg
+GH_TAGNAME= 6dbb17b
+....
+
+Он автоматически получит `MASTER_SITES` со значением `GH` и `WRKSRC` со значением `${WRKDIR}/pkg-6dbb17b`.
+
+[TIP]
+****
+`20140411` — это дата коммита, указанного в `GH_TAGNAME`, а не дата редактирования файла [.filename]#Makefile# или дата создания коммита.
+****
+
+====
+
+[[makefile-master_sites-github-ex3]]
+.Использование `USE_GITHUB` с `DISTVERSIONPREFIX`
+[example]
+====
+Время от времени `GH_TAGNAME` немного отличается от `DISTVERSION`. Например, если версия `1.0.2`, то тег будет `v1.0.2`. В таких случаях можно использовать `DISTVERSIONPREFIX` или `DISTVERSIONSUFFIX`:
+
+[.programlisting]
+....
+PORTNAME= foo
+DISTVERSIONPREFIX= v
+DISTVERSION= 1.0.2
+
+USE_GITHUB= yes
+....
+
+Он автоматически установит `GH_TAGNAME` в `v1.0.2`, в то время как `WRKSRC` останется `${WRKDIR}/foo-1.0.2`.
+====
+
+[[makefile-master_sites-github-ex4]]
+.Использование `USE_GITHUB` при отсутствии версий у исходного проекта
+[example]
+====
+Если никогда не было версии вышестоящего репозитория, не изобретайте её, например `0.1` или `1.0`. Создайте порт с `DISTVERSION` в формате `g__YYYYMMDD__`, где `g` означает Git, а `_YYYYMMDD_` представляет дату коммита, указанного в `GH_TAGNAME`.
+
+[.programlisting]
+....
+PORTNAME= bar
+DISTVERSION= g20140411
+
+USE_GITHUB= yes
+GH_TAGNAME= c472d66b
+....
+
+Это создаёт схему версионирования, которая увеличивается со временем и всё ещё находится до версии `0`. Подробности об использовании man:pkg-version[8] для сравнения версий смотрите в crossref:makefiles[makefile-versions-ex-pkg-version, этой секции]:
+
+[source, shell]
+....
+% pkg version -t g20140411 0
+<
+....
+
+Что означает, что использование `PORTEPOCH` не потребуется, если вышестоящий проект решит сократить версии в будущем.
+====
+
+[[makefile-master_sites-github-ex5]]
+.Использование `USE_GITHUB` для доступа к коммиту между двумя версиями
+[example]
+====
+Если текущая версия программного обеспечения использует тег Git, и порт необходимо обновить до более новой промежуточной версии без тега, используйте man:git-describe[1], чтобы определить версию для использования:
+
+[source, shell]
+....
+% git describe --tags f0038b1
+v0.7.3-14-gf0038b1
+....
+
+`v0.7.3-14-gf0038b1` можно разделить на три части:
+
+`v0.7.3`::
+Это последний тег Git, который появляется в истории коммитов перед запрошенным коммитом.
+
+`-14`::
+Это означает, что запрошенный коммит `f0038b1` является 14-м коммитом после тега `v0.7.3`.
+
+`-gf0038b1`::
+`-g` означает "Git", а `f0038b1` — это хеш коммита, на который указывает данная ссылка.
+
+[.programlisting]
+....
+PORTNAME= bar
+DISTVERSIONPREFIX= v
+DISTVERSION= 0.7.3-14
+DISTVERSIONSUFFIX= -gf0038b1
+
+USE_GITHUB= yes
+....
+
+Это создаёт схему версионирования, которая увеличивается со временем (точнее, с коммитами) и не конфликтует с созданием версии `0.7.4`. Подробности об использовании man:pkg-version[8] для сравнения версий смотрите в crossref:makefiles[makefile-versions-ex-pkg-version, этой секции] :
+
+[source, shell]
+....
+% pkg version -t 0.7.3 0.7.3.14
+<
+% pkg version -t 0.7.3.14 0.7.4
+<
+....
+
+[NOTE]
+****
+Если запрошенный коммит совпадает с тегом, по умолчанию отображается более короткое описание. Полная версия эквивалентна:
+
+[source, shell]
+....
+% git describe --tags c66c71d
+v0.7.3
+
+% git describe --tags --long c66c71d
+v0.7.3-0-gc66c71d
+....
+
+****
+
+====
+
+[[makefile-master_sites-github-multiple]]
+==== Извлечение нескольких файлов из GitHub
+
+Фреймворк `USE_GITHUB` также поддерживает загрузку нескольких файлов дистрибутива из разных мест в GitHub. Он работает очень похоже на crossref:makefiles[porting-master-sites-n, Файлы дистрибуции или патчей из нескольких мест].
+
+В `GH_ACCOUNT`, `GH_PROJECT` и `GH_TAGNAME` добавляются несколько значений. Каждому различному значению присваивается группа. Основное значение может не иметь группы или принадлежать группе `:DEFAULT`. Значение может быть опущено, если оно совпадает со значением по умолчанию, указанным в crossref:makefiles[makefile-master_sites-github-description,описании `USE_GITHUB`].
+
+`GH_TUPLE` также можно использовать, когда имеется множество файлов дистрибутива. Это помогает сохранять учётные данные, проект, имя тега и информацию о группе в одном месте.
+
+Для каждой группы создаётся вспомогательная переменная `${WRKSRC_group}`, содержащая каталог, в который был извлечён файл. Переменные `${WRKSRC_group}` могут использоваться для перемещения каталогов во время `post-extract`, добавления в `CONFIGURE_ARGS` или любых других действий, необходимых для корректной сборки программного обеспечения.
+
+[CAUTION]
+====
+Часть `:__group__` _должна_ использоваться _только для одного_ файла дистрибутива. Она служит уникальным ключом, и её повторное использование приведёт к перезаписи предыдущих значений.
+====
+
+[NOTE]
+====
+Поскольку это всего лишь синтаксический сахар над `DISTFILES` и `MASTER_SITES`, имена групп должны соответствовать ограничениям на имена групп, описанным в crossref:makefiles[porting-master-sites-n, Файлы дистрибутивов или патчей из нескольких источников]
+====
+
+При получении нескольких файлов из GitHub иногда файл дистрибутива по умолчанию не загружается из GitHub. Чтобы отключить загрузку файла дистрибутива по умолчанию, установите:
+
+[.programlisting]
+....
+USE_GITHUB= nodefault
+....
+
+[IMPORTANT]
+====
+При использовании `USE_GITHUB=nodefault` в [.filename]#Makefile# необходимо указать `DISTFILES` в его crossref:porting-order[porting-order-portname,верхнем блоке]. Определение должно быть следующим:
+
+[.programlisting]
+....
+DISTFILES= ${DISTNAME}${EXTRACT_SUFX}
+....
+
+====
+
+[[makefile-master_sites-github-multi]]
+.Использование `USE_GITHUB` с несколькими файлами дистрибутива
+[example]
+====
+Время от времени возникает необходимость загрузить более одного файла дистрибутива. Например, когда вышестоящий репозиторий git использует подмодули. Это можно легко сделать с помощью групп в переменных `GH_*`:
+
+[.programlisting]
+....
+PORTNAME= foo
+DISTVERSION= 1.0.2
+
+USE_GITHUB= yes
+GH_ACCOUNT= bar:icons,contrib
+GH_PROJECT= foo-icons:icons foo-contrib:contrib
+GH_TAGNAME= 1.0:icons fa579bc:contrib
+GH_SUBDIR= ext/icons:icons
+
+CONFIGURE_ARGS= --with-contrib=${WRKSRC_contrib}
+....
+
+Это загрузит три файла дистрибутива с github. Стандартный берется из [.filename]#foo/foo# и имеет версию `1.0.2`. Второй, с группой `icons`, берется из [.filename]#bar/foo-icons# и имеет версию `1.0`. Третий берется из [.filename]#bar/foo-contrib# и использует Git-коммит `fa579bc`. Файлы дистрибутива называются [.filename]#foo-foo-1.0.2_GH0.tar.gz#, [.filename]#bar-foo-icons-1.0_GH0.tar.gz# и [.filename]#bar-foo-contrib-fa579bc_GH0.tar.gz#.
+
+Все файлы дистрибутива извлекаются в `${WRKDIR}` в соответствующих подкаталогах. Основной файл по-прежнему извлекается в `${WRKSRC}`, в данном случае, [.filename]#${WRKDIR}/foo-1.0.2#. Каждый дополнительный файл дистрибутива извлекается в `${WRKSRC_group}`. Здесь, для группы `icons`, он называется `${WRKSRC_icons}` и содержит [.filename]#${WRKDIR}/foo-icons-1.0#. Файл с группой `contrib` называется `${WRKSRC_contrib}` и содержит `${WRKDIR}/foo-contrib-fa579bc`.
+
+Система сборки программы ожидает найти иконки в подкаталоге [.filename]#ext/icons# в её исходниках, поэтому используется `GH_SUBDIR`. `GH_SUBDIR` гарантирует, что [.filename]#ext# существует, но [.filename]#ext/icons# ещё не существует. Затем он выполняет следующее:
+
+[.programlisting]
+....
+post-extract:
+ @${MV} ${WRKSRC_icons} ${WRKSRC}/ext/icons
+....
+
+====
+
+[[makefile-master_sites-github-multi2]]
+.Использование `USE_GITHUB` с несколькими файлами дистрибутива с помощью `GH_TUPLE`
+[example]
+====
+
+Это функционально эквивалентно crossref:makefiles[makefile-master_sites-github-multi,Использованию `USE_GITHUB` с несколькими файлами дистрибутива], но с использованием `GH_TUPLE`:
+
+[.programlisting]
+....
+PORTNAME= foo
+DISTVERSION= 1.0.2
+
+USE_GITHUB= yes
+GH_TUPLE= bar:foo-icons:1.0:icons/ext/icons \
+ bar:foo-contrib:fa579bc:contrib
+
+CONFIGURE_ARGS= --with-contrib=${WRKSRC_contrib}
+....
+
+В предыдущем примере использовалась группировка с `bar:icons,contrib`. В `GH_TUPLE` присутствует избыточная информация, так как группировка невозможна.
+====
+
+[[makefile-master_sites-github-submodules]]
+.Как использовать `USE_GITHUB` с подмодулями Git?
+[example]
+====
+Порты, использующие GitHub в качестве вышестоящего репозитория, иногда применяют подмодули. Подробнее см. man:git-submodule[1].
+
+Проблема с подмодулями заключается в том, что каждый из них является отдельным репозиторием. Таким образом, каждый из них должен быть загружен отдельно.
+
+В качестве примера используем пакет package:finance/moneymanagerex[], его репозиторий на GitHub находится по адресу https://github.com/moneymanagerex/moneymanagerex/[]. В корне репозитория есть файл https://github.com/moneymanagerex/moneymanagerex/blob/master/.gitmodules[.gitmodules]. Этот файл описывает все подмодули, используемые в данном репозитории, и перечисляет дополнительные необходимые репозитории. Этот файл покажет, какие дополнительные репозитории требуются:
+
+[.programlisting]
+....
+[submodule "lib/wxsqlite3"]
+ path = lib/wxsqlite3
+ url = https://github.com/utelle/wxsqlite3.git
+[submodule "3rd/mongoose"]
+ path = 3rd/mongoose
+ url = https://github.com/cesanta/mongoose.git
+[submodule "3rd/LuaGlue"]
+ path = 3rd/LuaGlue
+ url = https://github.com/moneymanagerex/LuaGlue.git
+[submodule "3rd/cgitemplate"]
+ path = 3rd/cgitemplate
+ url = https://github.com/moneymanagerex/html-template.git
+[...]
+....
+
+Единственная информация, отсутствующая в этом файле, — это хэш коммита или тег, который следует использовать в качестве версии. Эта информация находится после клонирования репозитория:
+
+[source, shell]
+....
+% git clone --recurse-submodules https://github.com/moneymanagerex/moneymanagerex.git
+Cloning into 'moneymanagerex'...
+remote: Counting objects: 32387, done.
+[...]
+Submodule '3rd/LuaGlue' (https://github.com/moneymanagerex/LuaGlue.git) registered for path '3rd/LuaGlue'
+Submodule '3rd/cgitemplate' (https://github.com/moneymanagerex/html-template.git) registered for path '3rd/cgitemplate'
+Submodule '3rd/mongoose' (https://github.com/cesanta/mongoose.git) registered for path '3rd/mongoose'
+Submodule 'lib/wxsqlite3' (https://github.com/utelle/wxsqlite3.git) registered for path 'lib/wxsqlite3'
+[...]
+Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/3rd/LuaGlue'...
+Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/3rd/cgitemplate'...
+Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/3rd/mongoose'...
+Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/lib/wxsqlite3'...
+[...]
+Submodule path '3rd/LuaGlue': checked out 'c51d11a247ee4d1e9817dfa2a8da8d9e2f97ae3b'
+Submodule path '3rd/cgitemplate': checked out 'cd434eeeb35904ebcd3d718ba29c281a649b192c'
+Submodule path '3rd/mongoose': checked out '2140e5992ab9a3a9a34ce9a281abf57f00f95cda'
+Submodule path 'lib/wxsqlite3': checked out 'fb66eb230d8aed21dec273b38c7c054dcb7d6b51'
+[...]
+% cd moneymanagerex
+% git submodule status
+ c51d11a247ee4d1e9817dfa2a8da8d9e2f97ae3b 3rd/LuaGlue (heads/master)
+ cd434eeeb35904ebcd3d718ba29c281a649b192c 3rd/cgitemplate (cd434ee)
+ 2140e5992ab9a3a9a34ce9a281abf57f00f95cda 3rd/mongoose (6.2-138-g2140e59)
+ fb66eb230d8aed21dec273b38c7c054dcb7d6b51 lib/wxsqlite3 (v3.4.0)
+[...]
+....
+
+Это также можно найти на GitHub. Каждый подкаталог, который является подмодулем, отображается как `_директория @ хэш_`, например, `mongoose @ 2140e59`.
+
+[NOTE]
+****
+Хотя получение информации из GitHub кажется более простым, данные, полученные с помощью `git submodule status`, будут более информативными. Например, здесь хеш коммита ``lib/wxsqlite3`` `fb66eb2` соответствует `v3.4.0`. Оба варианта можно использовать взаимозаменяемо, но если доступен тег, предпочтительнее использовать его.
+****
+
+Теперь, когда вся необходимая информация собрана, можно написать [.filename]#Makefile# (показаны только строки, связанные с GitHub):
+
+[.programlisting]
+....
+PORTNAME= moneymanagerex
+DISTVERSIONPREFIX= v
+DISTVERSION= 1.3.0
+
+USE_GITHUB= yes
+GH_TUPLE= utelle:wxsqlite3:v3.4.0:wxsqlite3/lib/wxsqlite3 \
+ moneymanagerex:LuaGlue:c51d11a:lua_glue/3rd/LuaGlue \
+ moneymanagerex:html-template:cd434ee:html_template/3rd/cgitemplate \
+ cesanta:mongoose:2140e59:mongoose/3rd/mongoose \
+ [...]
+....
+
+====
+
+[[makefile-master_sites-gitlab]]
+=== `USE_GITLAB`
+
+Подобно GitHub, если файл дистрибутива поставляется с https://gitlab.com/[gitlab.com] или использует программное обеспечение GitLab, эти переменные доступны для использования и могут потребовать установки.
+
+[[makefile-master_sites-gitlab-description]]
+.Описание `USE_GITLAB`
+[cols="1,1,1", options="header"]
+|===
+| Переменная
+| Описание
+| По умолчанию
+
+|`GL_SITE`
+|Название сайта, на котором размещен проект GitLab
+|https://gitlab.com/
+
+|`GL_ACCOUNT`
+|Имя учётной записи пользователя GitLab, размещающего проект
+|`${PORTNAME}`
+
+|`GL_PROJECT`
+|Название проекта на GitLab
+|`${PORTNAME}`
+
+|`GL_COMMIT`
+|Хэш коммита для загрузки. Должен быть полным 160-битным, 40-символьным шестнадцатеричным хэшем sha1. Это обязательная переменная для GitLab.
+|`(нет)`
+
+|`GL_SUBDIR`
+|Когда программному обеспечению требуется дополнительный файл дистрибутива для извлечения в
+`${WRKSRC}`, можно использовать эту переменную. Примеры можно найти в
+ crossref:makefiles[makefile-master_sites-gitlab-multiple, Загрузка нескольких файлов из GitLab] для получения дополнительной информации.
+|(отсутствует)
+
+|`GL_TUPLE`
+|`GL_TUPLE` позволяет объединить `GL_SITE`, `GL_ACCOUNT`, `GL_PROJECT`, `GL_COMMIT` и `GL_SUBDIR` в одну переменную. Формат записи: _сайт_`:`_учётная запись_`:`_проект_`:`_коммит_`:`_группа_`/`_поддиректория_. Части _сайт_`:` и `/`_поддиректория_ являются необязательными. Это полезно, когда требуется загрузить данные из нескольких проектов GitLab.
+|
|===
+[[makefile-master_sites-gitlab-ex1]]
+.Простое использование `USE_GITLAB`
+[example]
+====
+Пытаясь создать порт для версии `1.14` библиотеки libsignon-glib от пользователя accounts-sso на gitlab.com, по адресу https://gitlab.com/accounts-sso/libsignon-glib/[], файл [.filename]#Makefile# будет выглядеть следующим образом для загрузки дистрибутивных файлов:
+
+[.programlisting]
+....
+PORTNAME= libsignon-glib
+DISTVERSION= 1.14
+
+USE_GITLAB= yes
+GL_ACCOUNT= accounts-sso
+GL_COMMIT= e90302e342bfd27bc8c9132ab9d0ea3d8723fd03
+....
+
+Он автоматически получит `MASTER_SITES`, установленный на https://gitlab.com/[gitlab.com], и `WRKSRC` на `${WRKDIR}/libsignon-glib-e90302e342bfd27bc8c9132ab9d0ea3d8723fd03-e90302e342bfd27bc8c9132ab9d0ea3d8723fd03`.
+====
+
+[[makefile-master_sites-gitlab-ex2]]
+.Более полное использование `USE_GITLAB`
+[example]
+====
+
+Более полный пример использования вышеописанного, если порт не имеет версионирования и foobar принадлежит пользователю foo в проекте bar на самостоятельно размещенном сайте GitLab `https://gitlab.example.com/`, тогда [.filename]#Makefile# будет выглядеть следующим образом для загрузки дистрибутивных файлов:
+
+[.programlisting]
+....
+PORTNAME= foobar
+DISTVERSION= g20170906
+
+USE_GITLAB= yes
+GL_SITE= https://gitlab.example.com
+GL_ACCOUNT= foo
+GL_PROJECT= bar
+GL_COMMIT= 9c1669ce60c3f4f5eb43df874d7314483fb3f8a6
+....
+
+В нем будет установлено `MASTER_SITES` в `"https://gitlab.example.com"` и `WRKSRC` в `${WRKDIR}/bar-9c1669ce60c3f4f5eb43df874d7314483fb3f8a6-9c1669ce60c3f4f5eb43df874d7314483fb3f8a6`.
+
+[TIP]
+======
+`20170906` — это дата коммита, указанного в `GL_COMMIT`, а не дата редактирования файла [.filename]#Makefile# или дата коммита в дерево портов FreeBSD.
+======
+
+[NOTE]
+======
+Протокол, порт и корневая директория веб-сервера ``GL_SITE`` могут быть изменены в той же переменной.
+======
+
+====
+
+[[makefile-master_sites-gitlab-multiple]]
+==== Извлечение нескольких файлов из GitLab
+
+Фреймворк `USE_GITLAB` также поддерживает загрузку нескольких файлов дистрибутивов из различных мест GitLab и сайтов, размещённых на GitLab. Он работает очень похоже на crossref:makefiles[porting-master-sites-n, Несколько файлов дистрибутивов или патчей из разных местоположений] и crossref:makefiles[makefile-master_sites-gitlab-multiple, Загрузка нескольких файлов из GitLab].
+
+В `GL_SITE`, `GL_ACCOUNT`, `GL_PROJECT` и `GL_COMMIT` добавляются множественные значения. Каждое уникальное значение назначается группе. crossref:makefiles[makefile-master_sites-gitlab-description,Описание `USE_GITLAB`].
+
+`GL_TUPLE` также может использоваться, когда имеется множество файлов дистрибутива. Это помогает хранить информацию о сайте, учётной записи, проекте, коммите и группе в одном месте.
+
+Для каждой группы создаётся вспомогательная переменная `${WRKSRC_group}`, содержащая каталог, в который был извлечён файл. Переменные `${WRKSRC_group}` могут использоваться для перемещения каталогов во время `post-extract`, добавления в `CONFIGURE_ARGS` или любых других действий, необходимых для корректной сборки программного обеспечения.
+
+[CAUTION]
+====
+Часть `:__group__` _должна_ использоваться _только для одного_ файла дистрибутива. Она служит уникальным ключом, и её повторное использование приведёт к перезаписи предыдущих значений.
+====
+
+[NOTE]
+====
+Поскольку это всего лишь синтаксический сахар над `DISTFILES` и `MASTER_SITES`, имена групп должны соответствовать ограничениям на имена групп, описанным в crossref:makefiles[porting-master-sites-n, Файлы дистрибутивов или патчей из нескольких источников]
+====
+
+При получении нескольких файлов с использованием GitLab иногда файл дистрибутива по умолчанию не загружается с сайта GitLab. Чтобы отключить загрузку файла дистрибутива по умолчанию, установите:
+
+[.programlisting]
+....
+USE_GITLAB= nodefault
+....
+
+[IMPORTANT]
+====
+При использовании `USE_GITLAB=nodefault`, [.filename]#Makefile# должен устанавливать `DISTFILES` в своем crossref:makefiles[porting-order-portname,верхнем блоке]. Определение должно быть следующим:
+
+[.programlisting]
+....
+DISTFILES= ${DISTNAME}${EXTRACT_SUFX}
+....
+
+====
+
+[[makefile-master_sites-gitlab-multi]]
+.Использование `USE_GITLAB` с несколькими файлами дистрибутива
+[example]
+====
+Время от времени возникает необходимость загрузить более одного файла дистрибутива. Например, когда вышестоящий git-репозиторий использует подмодули. Это можно легко сделать с помощью групп в переменных `GL_*`:
+
+[.programlisting]
+....
+PORTNAME= foo
+DISTVERSION= 1.0.2
+
+USE_GITLAB= yes
+GL_SITE= https://gitlab.example.com:9434/gitlab:icons
+GL_ACCOUNT= bar:icons,contrib
+GL_PROJECT= foo-icons:icons foo-contrib:contrib
+GL_COMMIT= c189207a55da45305c884fe2b50e086fcad4724b ae7368cab1ca7ca754b38d49da064df87968ffe4:icons 9e4dd76ad9b38f33fdb417a4c01935958d5acd2a:contrib
+GL_SUBDIR= ext/icons:icons
+
+CONFIGURE_ARGS= --with-contrib=${WRKSRC_contrib}
+....
+
+Это загрузит два файла дистрибутива с gitlab.com и один с `gitlab.example.com`, где размещается GitLab. По умолчанию файл берется из [.filename]#https://gitlab.com/foo/foo#, а коммит — `c189207a55da45305c884fe2b50e086fcad4724b`. Второй файл, из группы `icons`, берется из [.filename]#https://gitlab.example.com:9434/gitlab/bar/foo-icons#, а коммит — `ae7368cab1ca7ca754b38d49da064df87968ffe4`. Третий файл берется из [.filename]#https://gitlab.com/bar/foo-contrib#, а коммит — `9e4dd76ad9b38f33fdb417a4c01935958d5acd2a`. Файлы дистрибутива называются [.filename]#foo-foo-c189207a55da45305c884fe2b50e086fcad4724b_GL0.tar.gz#, [.filename]#bar-foo-icons-ae7368cab1ca7ca754b38d49da064df87968ffe4_GL0.tar.gz# и [.filename]#bar-foo-contrib-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a_GL0.tar.gz#.
+
+Все файлы дистрибутива извлекаются в `${WRKDIR}` в соответствующих подкаталогах. Основной файл по-прежнему извлекается в `${WRKSRC}`, в данном случае это [.filename]#${WRKDIR}/foo-c189207a55da45305c884fe2b50e086fcad4724b-c189207a55da45305c884fe2b50e086fcad4724b#. Каждый дополнительный файл дистрибутива извлекается в `${WRKSRC_group}`. Здесь для группы `icons` он называется `${WRKSRC_icons}` и содержит [.filename]#${WRKDIR}/foo-icons-ae7368cab1ca7ca754b38d49da064df87968ffe4-ae7368cab1ca7ca754b38d49da064df87968ffe4#. Файл группы `contrib` называется `${WRKSRC_contrib}` и содержит `${WRKDIR}/foo-contrib-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a`.
+
+Система сборки программного обеспечения ожидает найти иконки в подкаталоге [.filename]#ext/icons# в своих исходниках, поэтому используется `GL_SUBDIR`. `GL_SUBDIR` гарантирует, что [.filename]#ext# существует, но [.filename]#ext/icons# ещё не существует. Затем она выполняет следующее:
+
+[.programlisting]
+....
+post-extract:
+ @${MV} ${WRKSRC_icons} ${WRKSRC}/ext/icons
+....
+
+====
+
+[[makefile-master_sites-gitlab-multi2]]
+.Использование `USE_GITLAB` с несколькими файлами дистрибуции с помощью `GL_TUPLE`
+[example]
+====
+Это функционально эквивалентно crossref:makefiles[makefile-master_sites-gitlab-multi,Использование `USE_GITLAB` с несколькими файлами дистрибуции], но с использованием `GL_TUPLE`:
+
+[.programlisting]
+....
+PORTNAME= foo
+DISTVERSION= 1.0.2
+
+USE_GITLAB= yes
+GL_COMMIT= c189207a55da45305c884fe2b50e086fcad4724b
+GL_TUPLE= https://gitlab.example.com:9434/gitlab:bar:foo-icons:ae7368cab1ca7ca754b38d49da064df87968ffe4:icons/ext/icons \
+ bar:foo-contrib:9e4dd76ad9b38f33fdb417a4c01935958d5acd2a:contrib
+
+CONFIGURE_ARGS= --with-contrib=${WRKSRC_contrib}
+....
+
+В предыдущем примере использовалась группировка с `bar:icons,contrib`. Некоторую избыточную информацию приходится указывать с `GL_TUPLE`, так как группировка невозможна.
+====
+
+[[makefile-extract_sufx]]
=== `EXTRACT_SUFX`
-Если у вас имеется один дистрибутивный файл, и в его имени используется странное окончание для указания типа сжатия, задайте переменную `EXTRACT_SUFX`.
+Если имеется один файл дистрибутива, и он использует нестандартное суффикс для указания механизма сжатия, установите `EXTRACT_SUFX`.
-К примеру, если дистрибутивный файл носит имя [.filename]#foo.tgz#, а не более привычное [.filename]#foo.tar.gz#, вы должны написать:
+Например, если файл дистрибутива был назван [.filename]#foo.tar.gzip# вместо более привычного [.filename]#foo.tar.gz#, напишите:
[.programlisting]
....
DISTNAME= foo
-EXTRACT_SUFX= .tgz
+EXTRACT_SUFX= .tar.gzip
....
-Переменные `USE_BZIP2`, `USE_XZ` и `USE_ZIP` при необходимости автоматически устанавливают значение `EXTRACT_SUFX` в `.tar.bz2`, `.tar.xz` или `.zip`. Если ни одна из этих переменных не задана, то значение `EXTRACT_SUFX` по умолчанию устанавливается в `.tar.gz`.
+`USES=tar[:__xxx__]`, `USES=lha` или `USES=zip` автоматически устанавливают `EXTRACT_SUFX` в наиболее распространённые расширения архивов при необходимости, подробнее см. crossref:uses[uses,Использование макросов `USES`]. Если ни один из них не задан, `EXTRACT_SUFX` по умолчанию принимает значение `.tar.gz`.
[NOTE]
====
-Вам не нужно задавать значения `EXTRACT_SUFX` и `DISTFILES` одновременно.
+Как `EXTRACT_SUFX` используется только в `DISTFILES`, следует задавать только один из них.
====
+[[makefile-distfiles-definition]]
=== `DISTFILES`
-Иногда имена сгружаемых файлов не соответствуют имени порта. К примеру, файл может называться [.filename]#source.tar.gz# или подобным образом. В других случаях исходный код приложения может располагаться в нескольких отличающихся архивах, и все они должны быть сгружены.
+Иногда названия файлов для загрузки не имеют ничего общего с именем порта. Например, файл может называться [.filename]#source.tar.gz# или подобным образом. В других случаях исходный код приложения может быть разбит на несколько различных архивов, все из которых необходимо загрузить.
-Если это ваш случай, то задайте в переменной `DISTFILES` список разделённых пробелами имён файлов, которые нужно сгрузить.
+Если это так, установите `DISTFILES` как список разделённых пробелами файлов, которые необходимо загрузить.
[.programlisting]
....
DISTFILES= source1.tar.gz source2.tar.gz
....
-Если переменная `DISTFILES` не задана явно, то её значением по умолчанию будет `${DISTNAME}${EXTRACT_SUFX}`.
+Если явно не задано, `DISTFILES` по умолчанию равно `${DISTNAME}${EXTRACT_SUFX}`.
+[[makefile-extract_only]]
=== `EXTRACT_ONLY`
-Если только некоторые из `DISTFILES` должны быть распакованы-к примеру, часть из них является исходным кодом, а другие представляют собой неупакованную документацию-перечислите имена файлов, которые должны быть распакованы, в `EXTRACT_ONLY`.
+Если необходимо извлечь только некоторые из `DISTFILES` — например, один из них является исходным кодом, а другой — несжатым документом — укажите имена файлов, которые нужно извлечь, в `EXTRACT_ONLY`.
[.programlisting]
....
@@ -901,7 +1941,7 @@ DISTFILES= source.tar.gz manual.html
EXTRACT_ONLY= source.tar.gz
....
-Если _ни один_ из `DISTFILES` не должен распаковываться, то установите пустое значение переменной `EXTRACT_ONLY`.
+Если ни один из `DISTFILES` не требует распаковки, установите `EXTRACT_ONLY` в пустую строку.
[.programlisting]
....
@@ -911,77 +1951,103 @@ EXTRACT_ONLY=
[[porting-patchfiles]]
=== `PATCHFILES`
-Если вашему порту требуются некоторых дополнительные патчи, которые доступны по FTP или HTTP, задайте имена этих файлов в переменной `PATCHFILES`, а в переменной `PATCH_SITES` укажите URL того каталога, в котором они содержатся (формат такой же, как для `MASTER_SITES`).
+Если порт требует дополнительных исправлений, доступных через FTP или HTTP, установите `PATCHFILES` в имена файлов, а `PATCH_SITES` — в URL каталога, содержащего их (формат такой же, как у `MASTER_SITES`).
+
+Если патч не относится к корню исходного дерева (то есть к `WRKSRC`), потому что содержит дополнительные пути, установите `PATCH_DIST_STRIP` соответствующим образом. Например, если все пути в патче имеют дополнительный префикс `foozolix-1.0/` перед именами файлов, задайте `PATCH_DIST_STRIP=-p1`.
+
+Не беспокойтесь, если патчи сжаты; они будут автоматически распакованы, если их имена заканчиваются на [.filename]#.Z#, [.filename]#.gz#, [.filename]#.bz2# или [.filename]#.xz#.
+
+Если патч распространяется вместе с другими файлами, такими как документация, в сжатом tarball, использование `PATCHFILES` невозможно. В таком случае добавьте имя и расположение tarball с патчами в `DISTFILES` и `MASTER_SITES`. Затем используйте `EXTRA_PATCHES`, чтобы указать на эти файлы, и [.filename]#bsd.port.mk# автоматически применит их. В частности, _не_ копируйте файлы патчей в [.filename]#${PATCHDIR}#. Этот каталог может быть недоступен для записи.
-Если патч не относится к самому верху дерева исходных текстов (то есть `WRKSRC`), потому что он содержит некоторые дополнительные пути, установите соответственно значение переменной `PATCH_DIST_STRIP`. В частности, если все имена путей в патче имеют дополнительный путь `foozolix-1.0/` перед именем файла, то задайте `PATCH_DIST_STRIP=-p1`.
+[TIP]
+====
+Если есть несколько патчей и для них требуются разные значения параметра strip, его можно добавить рядом с именем патча в `PATCHFILES`, например:
+
+[.programlisting]
+....
+PATCHFILES= patch1 patch2:-p1
+....
+
+Это не конфликтует с crossref:makefiles[porting-master-sites-n,функцией группировки мастер-сайтов], добавление группы также работает:
-Не волнуйтесь, если патчи упакованы; они будут распакованы автоматически, если имена файлов оканчиваются на [.filename]#.gz# или [.filename]#.Z#.
+[.programlisting]
+....
+PATCHFILES= patch2:-p1:source2
+....
-Если патч распространяется вместе с какими-то другими файлами, такими, как документация, в виде tar-архива `gzip`, вы не можете просто использовать `PATCHFILES`. Если это ваш случай, добавьте имя и местоположение архива с патчем к `DISTFILES` и `MASTER_SITES`. Затем воспользуйтесь переменной `EXTRA_PATCHES` для указания этих файлов, и [.filename]#bsd.port.mk# автоматически применит эти патчи. В частности, _не копируйте_ файлы с патчами в каталог `PATCHDIR`-этот каталог может быть недоступным для записи.
+====
[NOTE]
====
-Архив будет распакован вне исходного кода, как обычно, и к тому же его не нужно явно распаковывать, если это обычный архив `gzip` или `compress`. Если вы сделаете последнее, приложите дополнительные усилия для того, чтобы не перезаписать что-либо, уже существующее в этом каталоге. Также не забудьте добавить команду для удаления скопированного патча в цели `pre-clean`.
+Tarball уже будет распакован вместе с обычными исходными кодами, поэтому нет необходимости явно его распаковывать, если это обычный сжатый tarball. Будьте особенно осторожны, чтобы не перезаписать существующие файлы в этом каталоге при ручной распаковке. Также не забудьте добавить команду для удаления скопированного патча в цель `pre-clean`.
====
[[porting-master-sites-n]]
-=== Несколько дистрибутивных файлов или патчей с различных серверов и подкаталогов (`MASTER_SITES:n`)
+=== Несколько файлов дистрибутивов или исправлений из нескольких местоположений
-(Этот раздел можно считать немного "повышенной трудности"; те, кто впервые знакомятся с этим текстом, могут пропустить этот раздел).
+(Считайте, что это несколько «продвинутая тема»; тем, кто впервые читает этот документ, возможно, стоит сначала пропустить этот раздел).
-В этом разделе находится информация о механизме сгрузки, известном как `MASTER_SITES:n` и `MASTER_SITES_NN`. Далее мы будем называть этот механизм `MASTER_SITES:n`.
+Этот раздел содержит информацию о механизме загрузки, известном как `MASTER_SITES:n` и `MASTER_SITES_NN`. Мы будем называть этот механизм `MASTER_SITES:n`.
-Сначала немного общей информации. В OpenBSD имеется полезная возможность, используемая в переменных `DISTFILES` и `PATCHFILES`, которая позволяет закреплять после имен файлов и патчей идентификаторы типа `:n`. Здесь `n` может быть из диапазона `[0-9]` и обозначать закреплённую группу. К примеру:
+Небольшая предыстория. В OpenBSD есть удобная функция внутри `DISTFILES` и `PATCHFILES`, которая позволяет добавлять постфикс `:n` к файлам и патчам. Здесь `n` может быть любым словом, содержащим `[0-9a-zA-Z_]`, и обозначать группу. Например:
[.programlisting]
....
DISTFILES= alpha:0 beta:1
....
-В OpenBSD дистрибутивный файл [.filename]#alpha# будет связан с переменной `MASTER_SITES0`, но не с нашей общей переменной `MASTER_SITES`, а файл [.filename]#beta# с переменной `MASTER_SITES1`.
+В OpenBSD файл дистрибутива [.filename]#alpha# будет связан с переменной `MASTER_SITES0`, а не с нашей общей `MASTER_SITES`, а [.filename]#beta# — с `MASTER_SITES1`.
+
+Это очень интересная функция, которая может сократить бесконечные поиски нужного сайта для загрузки.
-Этот очень интересная возможность, которая может уменьшить этот бесконечный поиск работающего сайта для сгрузки.
+Представьте 2 файла в `DISTFILES` и 20 сайтов в `MASTER_SITES`, причём сайты медленные как черепаха, где [.filename]#beta# есть на всех сайтах из `MASTER_SITES`, а [.filename]#alpha# можно найти только на 20-м сайте. Было бы так обидно проверять их все, если бы сопровождающий знал это заранее, не так ли? Не самое лучшее начало для чудесных выходных!
-Просто представьте себе 2 файла в `DISTFILES` и 20 сайтов в `MASTER_SITES`; сайты очень медленные, причём [.filename]#beta# находится на всех сайтах из `MASTER_SITES`, а [.filename]#alpha# может быть найден только на 20-м сайте. Будет неправильно проверять их все, если создатель знает об этом, не правда ли? Неподходящее начало для таких прекрасных выходных!
+Теперь, когда вы поняли идею, представьте больше `DISTFILES` и больше `MASTER_SITES`. Безусловно, наш "мастер по исследованию distfiles" оценил бы снижение нагрузки на сеть, которое это принесло бы.
-Теперь, когда вы получили общее представление, просто представьте ещё большее количество `DISTFILES` и `MASTER_SITES`. Конечно, наш "магистр доступности дистрибутивов" представляет масштабы нагрузки на сеть, которую это даёт.
+В следующих разделах будет приведена информация о реализации этой идеи в FreeBSD. Мы немного улучшили концепцию OpenBSD.
-В последующих разделах информация будет даваться вместе с реализацией этой идеи во FreeBSD. Мы несколько улучшили концепцию OpenBSD.
+[IMPORTANT]
+====
+Имена групп не могут содержать дефисы (`-`), более того, они не могут содержать любые символы вне диапазона `[a-zA-Z0-9_]`. Это связано с тем, что, хотя man:make[1] допускает использование имён переменных с дефисами, man:sh[1] — нет.
+====
-==== Упрощённая информация
+[[porting-master-sites-n-simplified]]
+==== Упрощенная информация
-В этом разделе рассказывается, как быстро подготовить точную сгрузку нескольких дистрибутивных файлов и патчей с разных сайтов и каталогов. Мы описываем здесь случай упрощённого использования `MASTER_SITES:n`. Для большинства сценариев этого будет достаточно. Однако, если вам нужна дополнительная информация, обратитесь к следующему разделу.
+В этом разделе объясняется, как быстро настроить детализированное получение нескольких файлов дистрибутивов и патчей с разных сайтов и подкаталогов. Здесь описывается случай упрощённого использования `MASTER_SITES:n`. Этого будет достаточно для большинства сценариев. Более подробная информация доступна в crossref:makefiles[ports-master-sites-n-detailed, Подробная Информация].
-Некоторые приложения состоят из многих дистрибутивных файлов, которые должны быть сгружены с нескольких различных сайтов. К примеру, Ghostscript состоит из основной программы и большого числа файлов драйверов, которые используются в зависимости от принтера пользователя. Некоторые из этих файлов драйверов поставляются с основной программой, но при этом многие другие должны быть сгружены с множества различных сайтов.
+Некоторые приложения состоят из нескольких распространяемых файлов, которые необходимо загрузить с различных сайтов. Например, Ghostscript включает основную часть программы и множество драйверов, используемых в зависимости от принтера пользователя. Некоторые из этих драйверов поставляются вместе с основной частью, но многие другие необходимо загружать с различных сайтов.
-Чтобы это поддерживать, за каждой записью в `DISTFILES` может следовать символ двоеточия и "имя метки". За каждым сайтом, перечисленным в `MASTER_SITES`, тоже следует двоеточие и метка, которая указывает, какие файлы дистрибутива должны быть сгружены с этого сайта.
+Для поддержки этого, каждая запись в `DISTFILES` может сопровождаться двоеточием и "именем группы". Затем каждый сайт, указанный в `MASTER_SITES`, сопровождается двоеточием и группой, которая указывает, какие файлы дистрибутива загружаются с данного сайта.
-Например, рассмотрим приложение, исходный код которого разделён на две части, [.filename]#source1.tar.gz# и [.filename]#source2.tar.gz#, которые должны быть сгружены с двух различных источников. Файл [.filename]#Makefile# порта будет содержать строчки типа <<ports-master-sites-n-example-simple-use-one-file-per-site>>.
+Например, рассмотрим приложение, исходный код которого разделён на две части: [.filename]#source1.tar.gz# и [.filename]#source2.tar.gz#, которые необходимо загрузить с двух разных сайтов. В [.filename]#Makefile# порта будут присутствовать строки, подобные crossref:makefiles[ports-master-sites-n-example-simple-use-one-file-per-site,Упрощённое использование `MASTER_SITES:n` с одним файлом на сайт].
[[ports-master-sites-n-example-simple-use-one-file-per-site]]
-.Упрощённое использование `MASTER_SITES:n` с 1 файлом на каждом сайте
+.Упрощённое использование `MASTER_SITES:n` с одним файлом на сайт
[example]
====
+
[.programlisting]
....
-MASTER_SITES= ftp://ftp.example1.com/:source1 \
- ftp://ftp.example2.com/:source2
+MASTER_SITES= ftp://ftp1.example.com/:source1 \
+ http://www.example.com/:source2
DISTFILES= source1.tar.gz:source1 \
source2.tar.gz:source2
....
====
-Несколько дистрибутивных файлов могут иметь одну и ту же метку. Продолжая предыдущий пример, положим, что имеется и третий дистрибутивный файл, [.filename]#source3.tar.gz#, который должен быть сгружен с `ftp.example2.com`. Тогда файл [.filename]#Makefile# будет написан как <<ports-master-sites-n-example-simple-use-more-than-one-file-per-site>>.
+Несколько файлов дистрибутивов могут принадлежать одной группе. Продолжая предыдущий пример, предположим, что существует третий файл дистрибутива [.filename]#source3.tar.gz#, который загружается с `ftp.example2.com`. Тогда [.filename]#Makefile# будет записан, как показано в crossref:makefiles[ports-master-sites-n-example-simple-use-more-than-one-file-per-site,Упрощённое использование `MASTER_SITES:n` с несколькими файлами на один сайт].
[[ports-master-sites-n-example-simple-use-more-than-one-file-per-site]]
-.Упрощённое использование `MASTER_SITES:n` с более чем 1 файлом на каждом сервере
+.Упрощённое использование `MASTER_SITES:n` с несколькими файлами на одном сайте
[example]
====
+
[.programlisting]
....
-MASTER_SITES= ftp://ftp.example1.com/:source1 \
- ftp://ftp.example2.com/:source2
+MASTER_SITES= ftp://ftp.example.com/:source1 \
+ http://www.example.com/:source2
DISTFILES= source1.tar.gz:source1 \
source2.tar.gz:source2 \
source3.tar.gz:source2
@@ -989,86 +2055,88 @@ DISTFILES= source1.tar.gz:source1 \
====
+[[ports-master-sites-n-detailed]]
==== Подробная информация
-Прекрасно, но пример из предыдущего раздела не показал вам всё, что вам нужно? В этом разделе мы подробно опишем, как работает механизм `MASTER_SITES:n` точной сгрузки и как вы можете изменить ваши порты, чтобы это использовать.
+Хорошо, значит, предыдущий пример не отражал потребности нового порта? В этом разделе мы подробно объясним, как работает механизм детализированного получения `MASTER_SITES:n` и как его можно использовать.
-. За элементами могут следовать символы `:n`, где _n_ это `[^:,]+`, то есть _n_ может теоретически быть любой алфавитно-цифровой строкой, но пока мы будем ограничивать их `[a-zA-Z_][0-9a-zA-Z_]+`.
-+
-Более того, совпадение строк чувствительно к регистру; другими словами, `n` отличается от `N`.
-+
-Однако следующие слова не могут использоваться для этих нужд, так как они имеют особое значение: `default`, `all` и `ALL` (они используются для своих нужд в <<porting-master-sites-n-what-changes-in-port-targets,ii>>). Кроме того, `DEFAULT` является специальным ключевым словом (посмотрите <<porting-master-sites-n-DEFAULT-group,3>>).
-. Элементы, за которыми следуют `:n`, принадлежат группе `n`, `:m` относится к группе `m` и так далее.
+. Элементы могут иметь постфикс `:__n__`, где _n_ — это `[^:,]+`, то есть _n_ концептуально может быть любой буквенно-цифровой строкой, но пока мы ограничим её `[a-zA-Z_][0-9a-zA-Z_]+`.
++
+Более того, сравнение строк чувствительно к регистру; то есть, `n` отличается от `N`.
++
+Однако эти слова не могут использоваться для постфиксных целей, так как имеют специальное значение: `default`, `all` и `ALL` (они используются внутри системы, см. crossref:makefiles[porting-master-sites-n-what-changes-in-port-targets, ii]). Кроме того, `DEFAULT` является словом специального назначения (проверьте пункт crossref:makefiles[porting-master-sites-n-DEFAULT-group,3]).
+. Элементы с постфиксом `:n` принадлежат группе `n`, `:m` — группе `m` и так далее.
++
[[porting-master-sites-n-DEFAULT-group]]
-. Элементы без таких суффиксов не относятся ни к какой группе, то есть они принадлежат к особой группе `DEFAULT`. Если вы укажете суффиксом любого элемента `DEFAULT`, вы просто выполните излишнюю работу, если только вы не хотите отнесения элемента как к группе `DEFAULT`, так и какой-то другой в одно и то же время (посмотрите на пункт <<porting-master-sites-n-comma-operator,5>>).
-+
-Следующие примеры равнозначны, но первый более предпочтителен:
+. Элементы без постфикса не принадлежат к группам, все они относятся к специальной группе `DEFAULT`. Элементы с постфиксом `DEFAULT` избыточны, за исключением случаев, когда элемент одновременно принадлежит и к `DEFAULT`, и к другим группам (см. пункт crossref:makefiles[porting-master-sites-n-comma-operator,5]).
++
+Эти примеры эквивалентны, но первый предпочтительнее:
+
[.programlisting]
....
MASTER_SITES= alpha
....
-
+
[.programlisting]
....
MASTER_SITES= alpha:DEFAULT
....
-. Группы не являются эксклюзивными, элемент может принадлежать к нескольким отличающимся группам одновременно, а группа может либо иметь несколько различных элементов, либо не иметь их вовсе. Повторяющиеся элементы в одной и той же группе будут являться просто повторяющимися элементами.
+. Группы не являются исключительными, элемент может принадлежать нескольким разным группам одновременно, а группа может содержать несколько разных элементов или не содержать их вовсе.
++
[[porting-master-sites-n-comma-operator]]
-. Если в хотите, чтобы элемент принадлежал к нескольким группам одновременно, вы можете использовать запятую (`,`).
-+
-Вместо того, чтобы повторять их несколько раз, каждый раз с разным постфиксом, мы можем перечислить несколько групп за раз в одном постфиксе. Например, `:m,n,o` определяет элемент, принадлежащий группам `m`, `n` и `o`.
-+
-Все следующие примеры имеют один смысл, но последний является предпочтительным:
+. Когда элемент принадлежит нескольким группам одновременно, используйте оператор запятую (`,`).
++
+Вместо повторения несколько раз, каждый раз с разным постфиксом, мы можем перечислить несколько групп сразу в одном постфиксе. Например, `:m,n,o` обозначает элемент, принадлежащий группам `m`, `n` и `o`.
++
+Все эти примеры эквивалентны, но последний является предпочтительным:
+
[.programlisting]
....
MASTER_SITES= alpha alpha:SOME_SITE
....
-
+
[.programlisting]
....
MASTER_SITES= alpha:DEFAULT alpha:SOME_SITE
....
-
+
[.programlisting]
....
MASTER_SITES= alpha:SOME_SITE,DEFAULT
....
-
+
[.programlisting]
....
MASTER_SITES= alpha:DEFAULT,SOME_SITE
....
-. Все серверы внутри определённой группы сортируются в соответствии с `MASTER_SORT_AWK`. Все группы в `MASTER_SITES` и `PATCH_SITES` тоже сортируются.
+. Все сайты в заданной группе сортируются согласно `MASTER_SORT_AWK`. Все группы в `MASTER_SITES` и `PATCH_SITES` также сортируются.
++
[[porting-master-sites-n-group-semantics]]
-. Семантика групп может использоваться в любой из следующих переменных `MASTER_SITES`, `PATCH_SITES`, `MASTER_SITE_SUBDIR`, `PATCH_SITE_SUBDIR`, `DISTFILES` и `PATCHFILES` в соответствии со следующим синтаксисом:
-.. Все элементы `MASTER_SITES`, `PATCH_SITES`, `MASTER_SITE_SUBDIR` и `PATCH_SITE_SUBDIR` должны заканчиваться символом прямого слэша `/`. Если какие-то элементы принадлежат каким-то группам, постфикс группы `:n` должен следовать сразу после завершающего символа `/`. Механизм `MASTER_SITES:n` опирается на наличие завершающего символа `/` во избежание совпадающих элементов, где `:n` является корректной частью элемента с вхождениями, где `:n` обозначает группу `n`. Для целей совместимости, так как завершающий символ `/` ранее не требовался в элементах `MASTER_SITE_SUBDIR` и `PATCH_SITE_SUBDIR`, если символ, сразу предшествующий постфиксу, не является символом `/`, то `:n` будет считаться корректной частью элемента, а не постфиксом группы, даже если за элементом следует `:n`. Посмотрите <<ports-master-sites-n-example-detailed-use-master-site-subdir>> и <<ports-master-sites-n-example-detailed-use-complete-example-master-sites>>.
+. Семантика групп может использоваться в любых переменных `MASTER_SITES`, `PATCH_SITES`, `MASTER_SITE_SUBDIR`, `PATCH_SITE_SUBDIR`, `DISTFILES` и `PATCHFILES` согласно следующему синтаксису:
+.. Все элементы `MASTER_SITES`, `PATCH_SITES`, `MASTER_SITE_SUBDIR` и `PATCH_SITE_SUBDIR` должны заканчиваться символом дробной черты `/`. Если элементы принадлежат к какой-либо группе, постфикс группы `:__n__` должен следовать сразу после завершающего символа `/`. Механизм `MASTER_SITES:n` полагается на наличие завершающего символа `/`, чтобы избежать путаницы между элементами, где `:n` является допустимой частью элемента, и случаями, где `:n` обозначает группу `n`. В целях совместимости, поскольку ранее завершающий символ `/` не требовался в элементах `MASTER_SITE_SUBDIR` и `PATCH_SITE_SUBDIR`, если символ, непосредственно предшествующий постфиксу, не является `/`, то `:n` будет считаться допустимой частью элемента, а не постфиксом группы, даже если элемент оканчивается на `:n`. См. оба раздела crossref:makefiles[ports-master-sites-n-example-detailed-use-master-site-subdir,Подробное использование `MASTER_SITES:n` в `MASTER_SITE_SUBDIR`] и crossref:makefiles[ports-master-sites-n-example-detailed-use-complete-example-master-sites,Подробное использование `MASTER_SITES:n` с оператором запятая, несколькими файлами, несколькими сайтами и несколькими подкаталогами].
+
[[ports-master-sites-n-example-detailed-use-master-site-subdir]]
.Подробное использование `MASTER_SITES:n` в `MASTER_SITE_SUBDIR`
[example]
====
+
[.programlisting]
....
MASTER_SITE_SUBDIR= old:n new/:NEW
....
-*** Каталоги внутри группы `DEFAULT` -> old:n
-*** Каталоги внутри группы `NEW` -> new
+*** Каталоги в группе `DEFAULT` -> old:n
+*** Каталоги в группе `NEW` -> new
====
+
[[ports-master-sites-n-example-detailed-use-complete-example-master-sites]]
-.Подробное использование `MASTER_SITES:n` с запятыми, несколькими файлами, несколькими серверами и несколькими подкаталогами
+.Подробное использование `MASTER_SITES:n` с оператором запятая, несколькими файлами, сайтами и подкаталогами
[example]
====
+
[.programlisting]
....
MASTER_SITES= http://site1/%SUBDIR%/ http://site2/:DEFAULT \
@@ -1081,13 +2149,13 @@ DISTFILES= file1 file2:DEFAULT file3:group3 \
file4:group4,group5,group6 file5:grouping \
file6:group7
MASTER_SITE_SUBDIR= directory-trial:1 directory-n/:groupn \
- directory-one/:group6,DEFAULT \
- directory
+ directory-one/:group6,DEFAULT \
+ directory
....
-Предыдущий пример приводит к следующей точной сгрузке. Серверы перечислены в точном порядке их использования.
+Предыдущий пример приводит к такой детализированной загрузке файлов. Сайты перечислены в точном порядке их использования.
-*** [.filename]#file1# будет сгружаться с
+*** [.filename]#file1# будет загружен из
**** `MASTER_SITE_OVERRIDE`
**** http://site1/directory-trial:1/
@@ -1097,7 +2165,7 @@ MASTER_SITE_SUBDIR= directory-trial:1 directory-n/:groupn \
**** http://site7/
**** `MASTER_SITE_BACKUP`
-*** [.filename]#file2# будет сгружаться точно также, как [.filename]#file1#, так как они оба относятся к одной и той же группе
+*** [.filename]#file2# будет загружен точно так же, как [.filename]#file1#, поскольку они оба принадлежат к одной и той же группе
**** `MASTER_SITE_OVERRIDE`
**** http://site1/directory-trial:1/
@@ -1107,13 +2175,13 @@ MASTER_SITE_SUBDIR= directory-trial:1 directory-n/:groupn \
**** http://site7/
**** `MASTER_SITE_BACKUP`
-*** [.filename]#file3# будет сгружен с
+*** [.filename]#file3# будет загружен из
**** `MASTER_SITE_OVERRIDE`
**** http://site3/
**** `MASTER_SITE_BACKUP`
-*** [.filename]#file4# будет сгружаться с
+*** [.filename]#file4# будет загружен из
**** `MASTER_SITE_OVERRIDE`
**** http://site4/
@@ -1123,12 +2191,12 @@ MASTER_SITE_SUBDIR= directory-trial:1 directory-n/:groupn \
**** http://site8/directory-one/
**** `MASTER_SITE_BACKUP`
-*** [.filename]#file5# будет сгружен с
+*** [.filename]#file5# будет загружен из
**** `MASTER_SITE_OVERRIDE`
**** `MASTER_SITE_BACKUP`
-*** [.filename]#file6# будет сгружаться с
+*** [.filename]#file6# будет получен из
**** `MASTER_SITE_OVERRIDE`
**** http://site8/
@@ -1136,31 +2204,32 @@ MASTER_SITE_SUBDIR= directory-trial:1 directory-n/:groupn \
====
-. Как мне группировать одну из специальных переменных из [.filename]#bsd.sites.mk#, например, `MASTER_SITE_SOURCEFORGE`?
-+
-Посмотрите <<ports-master-sites-n-example-detailed-use-master-site-sourceforge>>.
+. Как сгруппировать один из специальных макросов из [.filename]#bsd.sites.mk#, например, SourceForge (`SF`)?
++
+Это максимально упрощено. См. crossref:makefiles[ports-master-sites-n-example-detailed-use-master-site-sourceforge,Подробное использование `MASTER_SITES:n` с SourceForge (`SF`)].
+
[[ports-master-sites-n-example-detailed-use-master-site-sourceforge]]
-.Подробное использование `MASTER_SITES:n` с `MASTER_SITE_SOURCEFORGE`
+.Подробное использование `MASTER_SITES:n` с SourceForge (`SF`)
[example]
====
+
[.programlisting]
....
-MASTER_SITES= http://site1/ ${MASTER_SITE_SOURCEFORGE:S/$/:sourceforge,TEST/}
+MASTER_SITES= http://site1/ SF/something/1.0:sourceforge,TEST
DISTFILES= something.tar.gz:sourceforge
....
+[.filename]#something.tar.gz# будет загружен со всех сайтов в пределах SourceForge.
====
-+
-[.filename]#something.tar.gz# будет сгружаться со всех сайтов из `MASTER_SITE_SOURCEFORGE`.
-. Как мне использовать это с переменными `PATCH*`?
-+
-Все примеры выполнялись с переменными `MASTER*`, и они работают точно так же и для `PATCH*`, как это можно видеть в <<ports-master-sites-n-example-detailed-use-patch-sites>>.
+. Как использовать это с `PATCH*`?
++
+Все примеры были выполнены с `MASTER*`, но они работают точно так же для `PATCH*`, как можно увидеть в crossref:makefiles[ports-master-sites-n-example-detailed-use-patch-sites,Упрощённое использование `MASTER_SITES:n` с `PATCH_SITES`].
+
[[ports-master-sites-n-example-detailed-use-patch-sites]]
-.Упрощённое использование `MASTER_SITES:n` с `PATCH_SITES`.
+.Упрощённое использование `MASTER_SITES:n` с `PATCH_SITES`
[example]
====
+
[.programlisting]
....
PATCH_SITES= http://site1/ http://site2/:test
@@ -1169,162 +2238,966 @@ PATCHFILES= patch1:test
====
-==== Что изменится для портов? А что не изменится?
+[[port-master-sites-n-what-changed]]
+==== Что меняется для портов? Что остается неизменным?
[lowerroman]
-. Все имеющиеся порты остаются без изменений. Код для механизма `MASTER_SITES:n` активируется, если только есть элементы, которые заканчиваются на `:n`, как и элементы в соответствии с вышеописанным синтаксисом, особенно как это показано в пункте <<porting-master-sites-n-group-semantics,7>>.
+. Все текущие порты остаются без изменений. Функция `MASTER_SITES:n` активируется только при наличии элементов с постфиксом `:__n__`, соответствующих указанным выше синтаксическим правилам, в частности, как показано в пункте crossref:makefiles[porting-master-sites-n-group-semantics, 7].
++
[[porting-master-sites-n-what-changes-in-port-targets]]
-. Цели порт остаются теми же самыми: `checksum`, `makesum`, `patch`, `configure`, `build` и так далее. С обычными исключениями для `do-fetch`, `fetch-list`, `master-sites` и `patch-sites`.
+. Порты сохраняют те же цели: `checksum`, `makesum`, `patch`, `configure`, `build` и т.д., за исключением очевидных случаев: `do-fetch`, `fetch-list`, `master-sites` и `patch-sites`.
-** `do-fetch`: использует новую группировку с постфиксами в `DISTFILES` и `PATCHFILES` с соответствующими элементами групп в `MASTER_SITES` и `PATCH_SITES`, которые используют группы из `MASTER_SITE_SUBDIR` и `PATCH_SITE_SUBDIR`. Посмотрите <<ports-master-sites-n-example-detailed-use-complete-example-master-sites>>.
-** `fetch-list`: работает так же, как старая цель `fetch-list` с тем исключением, что она группирует, как и `do-fetch`.
-** `master-sites` и `patch-sites`: (несовместимы со старыми версиями) только возвращают элементы группы `DEFAULT`; на самом деле они выполняют цели `master-sites-default` и `patch-sites-default` соответственно.
-+
-Более того, использование целей `master-sites-all` или `patch-sites-all` предпочтительно для непосредственной проверки `MASTER_SITES` или `PATCH_SITES`. Также работа прямой проверки в последующих версиях не гарантируется. Посмотрите <<porting-master-sites-n-new-port-targets-master-sites-all, B>> для получения более дополнительной информации об этих новых целях.
+** `do-fetch`: развертывает новую группировку с постфиксом `DISTFILES` и `PATCHFILES` с соответствующими групповыми элементами в `MASTER_SITES` и `PATCH_SITES`, которые используют соответствующие групповые элементы в `MASTER_SITE_SUBDIR` и `PATCH_SITE_SUBDIR`. Проверьте crossref:makefiles[ports-master-sites-n-example-detailed-use-complete-example-master-sites,Подробное использование `MASTER_SITES:n` с оператором запятой, множественными файлами, множественными сайтами и множественными подкаталогами].
+** `fetch-list`: работает как старый `fetch-list`, за исключением того, что группировка происходит так же, как в `do-fetch`.
+** `master-sites` и `patch-sites`: (несовместимо с более старыми версиями) возвращают только элементы группы `DEFAULT`; фактически они выполняют цели `master-sites-default` и `patch-sites-default` соответственно.
++
+Кроме того, предпочтительнее использовать цель `master-sites-all` или `patch-sites-all`, чем напрямую проверять `MASTER_SITES` или `PATCH_SITES`. Кроме того, прямая проверка не гарантирует работу в будущих версиях. Для получения дополнительной информации об этих новых целях портов см. пункт crossref:makefiles[porting-master-sites-n-new-port-targets-master-sites-all, B].
-. Новые цели построения портов
-.. Имеются цели `master-sites-_n_` и `patch-sites-_n_`, которые будут перечислять элементы соответствующей группы _n_ из `MASTER_SITES` и `PATCH_SITES` соответственно. К примеру, `master-sites-DEFAULT` и `patch-sites-DEFAULT` обе будут возвращать элементы группы `DEFAULT`, `master-sites-test` и `patch-sites-test` группы `test` и так далее.
+. Новые цели портов
+.. Существуют цели `master-sites-_n_` и `patch-sites-_n_`, которые будут выводить элементы соответствующей группы _n_ в `MASTER_SITES` и `PATCH_SITES` соответственно. Например, и `master-sites-DEFAULT`, и `patch-sites-DEFAULT` вернут элементы группы `DEFAULT`, `master-sites-test` и `patch-sites-test` — группы `test`, и так далее.
++
[[porting-master-sites-n-new-port-targets-master-sites-all]]
-.. Имеются новые цели `master-sites-all` и `patch-sites-all`, которые выполняют работу старых `master-sites` и `patch-sites`. Они возвращают элементы всех групп, как если бы они все принадлежали одной и той же группе с тем, что она перечисляет ровно столько `MASTER_SITE_BACKUP` и `MASTER_SITE_OVERRIDE`, как и группы, определённые в `DISTFILES` или `PATCHFILES`; соответственно для `master-sites-all` и `patch-sites-all`.
+.. Существуют новые цели `master-sites-all` и `patch-sites-all`, которые выполняют работу старых `master-sites` и `patch-sites`. Они возвращают элементы всех групп, как если бы они все принадлежали одной группе, с оговоркой, что перечисляется столько же `MASTER_SITE_BACKUP` и `MASTER_SITE_OVERRIDE`, сколько определено групп в `DISTFILES` или `PATCHFILES`; соответственно для `master-sites-all` и `patch-sites-all`.
+[[makefile-dist_subdir]]
=== `DIST_SUBDIR`
-Не позволяйте вашему порту засорять [.filename]#/usr/ports/distfiles#. Если вашему порту требуется сгрузить много файлов, или он содержит имя файла, могущее вызвать конфликты с другими портами (например, [.filename]#Makefile#), то укажите в переменной `DIST_SUBDIR` имя порта (должны подойти `${PORTNAME}` или `${PKGNAMEPREFIX}${PORTNAME}`). Это изменит значение переменной `DISTDIR` со значения по умолчанию [.filename]#/usr/ports/distfiles# к значению [.filename]#/usr/ports/distfiles/DIST_SUBDIR#, и в результате всё, что требуется для порта, будет помещено в этот подкаталог.
+Не допускайте захламления портом каталога [.filename]#/usr/ports/distfiles#. Если порт требует загрузки большого количества файлов или содержит файл с именем, которое может конфликтовать с другими портами (например, [.filename]#Makefile#), установите `DIST_SUBDIR` в имя порта (подойдут `${PORTNAME}` или `${PKGNAMEPREFIX}${PORTNAME}`). Это изменит `DISTDIR` со значения по умолчанию [.filename]#/usr/ports/distfiles# на [.filename]#/usr/ports/distfiles/${DIST_SUBDIR}#, фактически помещая все необходимые для порта файлы в этот подкаталог.
+
+Также будет проверяться подкаталог с тем же именем на основном резервном сайте по адресу http://distcache.FreeBSD.org[http://distcache.FreeBSD.org] (Явное указание `DISTDIR` в [.filename]#Makefile# не решит эту задачу, поэтому используйте `DIST_SUBDIR`.)
+
+[NOTE]
+====
+Это не влияет на сайты в `MASTER_SITES`, определённые в [.filename]#Makefile#.
+====
+
+[[makefile-maintainer]]
+== `MAINTAINER`
+
+Установите здесь свой адрес электронной почты. Пожалуйста. _:-)_
+
+Только один адрес без комментария допускается в качестве значения `MAINTAINER`. Используемый формат: `user@hostname.domain`. Пожалуйста, не включайте в эту запись описательный текст, например, настоящее имя. Это только вносит путаницу в инфраструктуру Ports и большинство инструментов, которые её используют.
-Он заглянет также в подкаталог с тем же именем на основном резервном сервере [.filename]#ftp.FreeBSD.org#. (Явное задание переменной `DISTDIR` в вашем файле `Makefile` этого не сделает, так что, пожалуйста, воспользуйтесь `DIST_SUBDIR`.)
+Ответственный за поддержку порта обязан поддерживать порт в актуальном состоянии и обеспечивать его корректную работу. Подробное описание обязанностей ответственного за поддержку порта приведено в разделе extref:{contributing}[Задача для сопровождающих портов,maintain-port].
[NOTE]
====
-Это не коснётся тех сайтов `MASTER_SITES`, которые вы указали в вашем файле [.filename]#Makefile#.
+Сопровождающий добровольно поддерживает порт в рабочем состоянии. Сопровождающие несут основную ответственность за свои порты, но не имеют исключительных прав на них. Порты существуют для пользы сообщества и, по сути, принадлежат сообществу. Это означает, что люди, не являющиеся сопровождающими, также могут вносить изменения в порт. Крупные изменения в коллекции портов могут потребовать правок во многих портах. Команда управления портами FreeBSD или члены других команд могут изменять порты для исправления проблем с зависимостями или других проблем, таких как обновление версии динамической библиотеки.
+
+Некоторые типы исправлений имеют "автоматическое согласование" от {portmgr}, что позволяет любому коммиттеру исправлять эти категории проблем в любом порте. Такие исправления не требуют одобрения от сопровождающего.
+
+Автоматическое согласование для большинства портов применяется к исправлениям, таким как изменения инфраструктуры, или тривиальным и _проверенным_ исправлениям сборки и выполнения. Текущий список доступен в extref:{committers-guide}[разделе Портов Руководства коммиттера, ports-qa-misc-blanket-approval].
====
-=== `ALWAYS_KEEP_DISTFILES`
+Другие изменения в порте будут отправлены сопровождающему на проверку и утверждение перед внесением. Если сопровождающий не отвечает на запрос об обновлении в течение двух недель (за исключением основных государственных праздников), это считается превышением времени ожидания сопровождающего, и обновление может быть внесено без его явного одобрения. Если сопровождающий не отвечает в течение трех месяцев или если произошло три последовательных превышения времени ожидания, то сопровождающий считается отсутствующим без уведомления, и все его порты могут быть возвращены в общий пул. Исключениями являются порты, сопровождаемые {portmgr} или {security-officer}. Никакие несанкционированные изменения не могут быть внесены в порты, сопровождаемые этими группами.
+
+Мы оставляем за собой право изменять представленные сопровождающим материалы, чтобы лучше соответствовать существующим политикам и стилю Коллекции портов, без явного одобрения отправителя или сопровождающего. Кроме того, масштабные инфраструктурные изменения могут привести к модификации порта без согласия сопровождающего. Подобные изменения никогда не повлияют на функциональность порта.
+
+{portmgr} оставляет за собой право отозвать или изменить права сопровождающего по любой причине, а {security-officer} оставляет за собой право отозвать или изменить права сопровождающего по соображениям безопасности.
+
+[[makefile-comment]]
+== `COMMENT`
+
+Комментарий — это однострочное описание порта, отображаемое командой `pkg info`. При составлении придерживайтесь следующих правил:
+
+. Строка COMMENT должна быть не длиннее 70 символов.
+. Не включайте название пакета или номер версии программного обеспечения.
+. Комментарий должен начинаться с заглавной буквы и заканчиваться без точки.
+. Не начинайте с неопределённого артикля (то есть A или An).
+. Пишите названия с заглавной буквы, например: Apache, JavaScript или Perl.
+. Используйте запятую для списков слов: "green, red, and blue."
+. Проверяйте на наличие орфографических ошибок.
+
+Вот пример:
+
+[.programlisting]
+....
+COMMENT= Cat chasing a mouse all over the screen
+....
+
+Переменная COMMENT следует сразу за переменной MAINTAINER в файле [.filename]#Makefile#.
+
+[[makefile-www]]
+== Веб-сайт проекта
+
+Каждый порт должен указывать на веб-сайт, предоставляющий дополнительную информацию о программном обеспечении.
+
+Везде, где это возможно, следует использовать официальный сайт проекта, поддерживаемый разработчиками программного обеспечения.
+
+[.programlisting]
+....
+WWW= https://ffmpeg.org/
+....
+
+Но это также может быть каталог или ресурс в репозитории исходного кода:
+
+[.programlisting]
+....
+WWW= https://sourceforge.net/projects/mpd/
+....
+
+Переменная WWW следует сразу за переменной COMMENT в файле [.filename]#Makefile#.
+
+Если один и тот же контент доступен по HTTP и HTTPS, следует использовать URL, начинающийся с `https://`. Если URI является корнем веб-сайта или директории, он должен заканчиваться косой чертой.
+
+Эта информация ранее размещалась в последней строке файла [.filename]#pkg-descr#. Она была перенесена в Makefile для удобства обслуживания и обработки. Наличие строки `WWW:` в конце файла [.filename]#pkg-descr# считается устаревшим.
-Если ваш порт использует двоичные дистрибутивные файлы и обладает лицензией, требующей, чтобы исходный код предоставлялся вместе с пакетами, распространяемыми в двоичной форме, например GPL, то `ALWAYS_KEEP_DISTFILES` даст кластеру построения FreeBSD указание сохранять копию файлов, указанных в `DISTFILES`. Пользователям таких портов эти файлы в основном не нужны, поэтому хорошей идеей является добавление в `DISTFILES` исходных дистрибутивных файлов, только когда определена переменная `PACKAGE_BUILDING`.
+[[licenses]]
+== Лицензии
-[[ports-master-sites-n-example-always-keep-distfiles]]
-.Использование `ALWAYS_KEEP_DISTFILES`.
+Каждый порт должен содержать документацию о лицензии, под которой он распространяется. Если лицензия не одобрена OSI, необходимо также указать любые ограничения на распространение.
+
+[[licenses-license]]
+=== `LICENSE`
+
+Краткое название лицензии или лицензий, если применяется более одной лицензии.
+
+Если это одна из лицензий, перечисленных в crossref:makefiles[licenses-license-list,Предопределенный список лицензий], можно задать только переменные `LICENSE_FILE` и `LICENSE_DISTFILES`.
+
+Если это лицензия, которая не определена в рамках портов (см. crossref:makefiles[licenses-license-list,Список предопределённых лицензий]), необходимо задать `LICENSE_PERMS` и `LICENSE_NAME`, а также `LICENSE_FILE` или `LICENSE_TEXT`. Также можно задать `LICENSE_DISTFILES` и `LICENSE_GROUPS`, но это не обязательно.
+
+Предопределенные лицензии показаны в crossref:makefiles[licenses-license-list,Список предопределенных лицензий]. Текущий список всегда доступен в [.filename]#Mk/bsd.licenses.db.mk#.
+
+[[licenses-license-ex1]]
+.Простейшее использование, предопределённые лицензии
[example]
====
+
+Когда в файле [.filename]#README# какого-либо программного обеспечения указано: «Данное программное обеспечение распространяется на условиях GNU Lesser General Public License, опубликованной Free Software Foundation; либо версии 2.1 Лицензии, либо (по вашему выбору) любой более поздней версии», но сам файл лицензии не предоставлен, используйте следующее:
+
[.programlisting]
....
-.if defined(PACKAGE_BUILDING)
-DISTFILES+= foo.tar.gz
-ALWAYS_KEEP_DISTFILES= yes
-.endif
+LICENSE= LGPL21+
+....
+
+Когда программное обеспечение предоставляет файл лицензии, используйте это:
+
+[.programlisting]
+....
+LICENSE= LGPL21+
+LICENSE_FILE= ${WRKSRC}/COPYING
....
====
-При добавлении дополнительных файлов в `DISTFILES` убедитесь, что вы их также добавляете в [.filename]#distinfo#. Кроме того, дополнительные файлы обычно распаковываются также в `WRKDIR`, что для некоторых портов может вызывать нежелательные подобные эффекты и требовать особую обработку.
+Для предопределённых лицензий права по умолчанию: `dist-mirror dist-sell pkg-mirror pkg-sell auto-accept`.
-[[makefile-maintainer]]
-== `MAINTAINER`
+[[licenses-license-list]]
+.Предопределенный список лицензий
+[cols="1,1,1,1", frame="none", options="header"]
+|===
+| Короткое имя
+| Имя
+| Группа
+| Разрешения
+
+|`AGPLv3`
+|Универсальная общественная лицензия GNU Affero версии 3
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`AGPLv3+`
+|Универсальная общественная лицензия GNU Affero версии 3 (или позднее)
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`APACHE10`
+|Apache License 1.0
+|`FSF`
+|(по умолчанию)
+
+|`APACHE11`
+|Apache License 1.1
+|`FSF OSI`
+|(по умолчанию)
+
+|`APACHE20`
+|Apache License 2.0
+|`FSF OSI`
+|(по умолчанию)
+
+|`ART10`
+|Художественная лицензия версия 1.0
+|`OSI`
+|(по умолчанию)
+
+|`ART20`
+|Художественная лицензия версии 2.0
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`ARTPERL10`
+|Художественная лицензия (perl) версия 1.0
+|`OSI`
+|(по умолчанию)
+
+|`BSD`
+|Лицензия BSD, общая версия (устарела)
+|`FSF OSI COPYFREE`
+|(по умолчанию)
+
+|`BSD2CLAUSE`
+|BSD 2-пунктная лицензия "Упрощенная"
+|`FSF OSI COPYFREE`
+|(по умолчанию)
+
+|`BSD3CLAUSE`
+|BSD 3-пунктная лицензия "Новая" или "Пересмотренная"
+|`FSF OSI COPYFREE`
+|(по умолчанию)
+
+|`BSD4CLAUSE`
+|BSD 4-пунктная лицензия "Оригинальная" или "Старая"
+|`FSF`
+|(по умолчанию)
+
+|`BSL`
+|Лицензия программного обеспечения Boost
+|`FSF OSI COPYFREE`
+|(по умолчанию)
+
+|`CC-BY-1.0`
+|Creative Commons с указанием авторства 1.0
+|
+|(по умолчанию)
+
+|`CC-BY-2.0`
+|Creative Commons с указанием авторства 2.0
+|
+|(по умолчанию)
+
+|`CC-BY-2.5`
+|Creative Commons с указанием авторства 2.5
+|
+|(по умолчанию)
+
+|`CC-BY-3.0`
+|Creative Commons с указанием авторства 3.0
+|
+|(по умолчанию)
+
+|`CC-BY-4.0`
+|Creative Commons с указанием авторства 4.0
+|
+|(по умолчанию)
+
+|`CC-BY-NC-1.0`
+|Creative Commons с указанием авторства – некоммерческая 1.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-2.0`
+|Creative Commons с указанием авторства – некоммерческая 2.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-2.5`
+|Creative Commons с указанием авторства – некоммерческая 2.5
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-3.0`
+|Creative Commons с указанием авторства – некоммерческая 3.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-4.0`
+|Creative Commons с указанием авторства – некоммерческая 4.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-ND-1.0`
+|Creative Commons с указанием авторства – некоммерческая – без производных 1.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-ND-2.0`
+|Creative Commons с указанием авторства – некоммерческая – без производных 2.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-ND-2.5`
+|Creative Commons с указанием авторства – некоммерческая – без производных 2.5
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-ND-3.0`
+|Creative Commons с указанием авторства – некоммерческая – без производных 3.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-ND-4.0`
+|Creative Commons с указанием авторства – некоммерческая – без производных 4.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-SA-1.0`
+|Creative Commons с указанием авторства – некоммерческая – на тех же условиях 1.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-SA-2.0`
+|Creative Commons с указанием авторства – некоммерческая – на тех же условиях 2.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-SA-2.5`
+|Creative Commons с указанием авторства – некоммерческая – на тех же условиях 2.5
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-SA-3.0`
+|Creative Commons с указанием авторства – некоммерческая – на тех же условиях 3.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-NC-SA-4.0`
+|Creative Commons с указанием авторства – некоммерческая – на тех же условиях 4.0
+|
+|`dist-mirror``pkg-mirror``auto-accept`
+
+|`CC-BY-ND-1.0`
+|Creative Commons с указанием авторства – без производных 1.0
+|
+|(по умолчанию)
+
+|`CC-BY-ND-2.0`
+|Creative Commons с указанием авторства – без производных 2.0
+|
+|(по умолчанию)
+
+|`CC-BY-ND-2.5`
+|Creative Commons с указанием авторства – без производных 2.5
+|
+|(по умолчанию)
+
+|`CC-BY-ND-3.0`
+|Creative Commons с указанием авторства – без производных 3.0
+|
+|(по умолчанию)
+
+|`CC-BY-ND-4.0`
+|Creative Commons с указанием авторства – без производных 4.0
+|
+|(по умолчанию)
+
+|`CC-BY-SA-1.0`
+|Creative Commons с указанием авторства – на тех же условиях 1.0
+|
+|(по умолчанию)
+
+|`CC-BY-SA-2.0`
+|Creative Commons с указанием авторства – на тех же условиях 2.0
+|
+|(по умолчанию)
+
+|`CC-BY-SA-2.5`
+|Creative Commons с указанием авторства – на тех же условиях 2.5
+|
+|(по умолчанию)
+
+|`CC-BY-SA-3.0`
+|Creative Commons с указанием авторства – на тех же условиях 3.0
+|
+|(по умолчанию)
+
+|`CC-BY-SA-4.0`
+|Creative Commons с указанием авторства – на тех же условиях 4.0
+|
+|(по умолчанию)
+
+|`CC0-1.0`
+|Creative Commons Zero v1.0 Universal (Отказ от прав 1.0 Универсальная)
+|`FSF GPL COPYFREE`
+|(по умолчанию)
+
+|`CDDL`
+|Лицензия на совместную разработку и распространение
+|`FSF OSI`
+|(по умолчанию)
+
+|`CPAL-1.0`
+|Публичная лицензия общего распространения с указанием авторства
+|`FSF OSI`
+|(по умолчанию)
+
+|`ClArtistic`
+|Уточнённая художественная лицензия
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`EPL`
+|Публичная лицензия Eclipse
+|`FSF OSI`
+|(по умолчанию)
+
+|`GFDL`
+|GNU Свободная лицензия на документацию
+|`FSF`
+|(по умолчанию)
+
+|`GMGPL`
+|Модифицированная Общедоступная лицензия GNAT
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`GPLv1`
+|Универсальная общественная лицензия GNU версии 1
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`GPLv1+`
+|Универсальная общественная лицензия GNU версии 1 (или более поздняя)
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`GPLv2`
+|Универсальная общественная лицензия GNU версии 2
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`GPLv2+`
+|Универсальная общественная лицензия GNU версии 2 (или более поздняя)
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`GPLv3`
+|Универсальная общественная лицензия GNU версии 3
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`GPLv3+`
+|Универсальная общественная лицензия GNU версии 3 (или более поздняя)
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`GPLv3RLE`
+|Исключение для библиотеки времени выполнения GNU GPL версии 3
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`GPLv3RLE+`
+|Исключение для библиотеки времени выполнения GNU GPL версии 3 (или более поздняя)
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`ISCL`
+|Лицензия Internet Systems Consortium
+|`FSF GPL OSI COPYFREE`
+|(по умолчанию)
+
+|`LGPL20`
+|Общедоступная лицензия GNU для библиотек, версия 2.0
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`LGPL20+`
+|Общедоступная лицензия GNU для библиотек, версия 2.0 (или более поздняя)
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`LGPL21`
+|Универсальная общественная лицензия GNU ограниченного применения, версия 2.1
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`LGPL21+`
+|Универсальная общественная лицензия GNU ограниченного применения, версия 2.1 (или более поздняя)
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`LGPL3`
+|Универсальная общественная лицензия GNU ограниченного применения, версия 3
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`LGPL3+`
+|Универсальная общественная лицензия GNU ограниченного применения, версия 3 (или более поздней)
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`LPPL10`
+|Публичная лицензия проекта LaTeX, версия 1.0
+|`FSF OSI`
+|`dist-mirror dist-sell`
+
+|`LPPL11`
+|Публичная лицензия проекта LaTeX, версия 1.1
+|`FSF OSI`
+|`dist-mirror dist-sell`
+
+|`LPPL12`
+|Публичная лицензия проекта LaTeX, версия 1.2
+|`FSF OSI`
+|`dist-mirror dist-sell`
+
+|`LPPL13`
+|Публичная лицензия проекта LaTeX, версия 1.3
+|`FSF OSI`
+|`dist-mirror dist-sell`
+
+|`LPPL13a`
+|Публичная лицензия проекта LaTeX, версия 1.3a
+|`FSF OSI`
+|`dist-mirror dist-sell`
+
+|`LPPL13b`
+|Публичная лицензия проекта LaTeX, версия 1.3b
+|`FSF OSI`
+|`dist-mirror dist-sell`
+
+|`LPPL13c`
+|Публичная лицензия проекта LaTeX, версия 1.3c
+|`FSF OSI`
+|`dist-mirror dist-sell`
+
+|`MIT`
+|Лицензия MIT / Лицензия X11
+|`COPYFREE FSF GPL OSI`
+|(по умолчанию)
+
+|`MPL10`
+|Публичная лицензия Mozilla, версия 1.0
+|`FSF OSI`
+|(по умолчанию)
+
+|`MPL11`
+|Публичная лицензия Mozilla, версия 1.1
+|`FSF OSI`
+|(по умолчанию)
+
+|`MPL20`
+|Публичная лицензия Mozilla, версия 2.0
+|`FSF OSI`
+|(по умолчанию)
+
+|`NCSA`
+|Открытая лицензия Университета Иллинойса/NCSA
+|`COPYFREE FSF GPL OSI`
+|(по умолчанию)
+
+|`NONE`
+|Лицензия не указана
+|
+|`none`
+
+|`OFL10`
+|Лицензия SIL Open Font версия 1.0 (https://scripts.sil.org/OFL/)
+|`FONTS`
+|(по умолчанию)
+
+|`OFL11`
+|Лицензия SIL Open Font версия 1.1 (https://scripts.sil.org/OFL/)
+|`FONTS`
+|(по умолчанию)
+
+|`OWL`
+|Лицензия Открытых Произведений (owl.apotheon.org)
+|`COPYFREE`
+|(по умолчанию)
+
+|`OpenSSL`
+|Лицензия OpenSSL
+|`FSF`
+|(по умолчанию)
+
+|`PD`
+|Общественное достояние
+|`GPL COPYFREE`
+|(по умолчанию)
+
+|`PHP202`
+|Лицензия PHP версии 2.02
+|`FSF OSI`
+|(по умолчанию)
+
+|`PHP30`
+|Лицензия PHP версии 3.0
+|`FSF OSI`
+|(по умолчанию)
+
+|`PHP301`
+|Лицензия PHP версии 3.01
+|`FSF OSI`
+|(по умолчанию)
+
+|`PSFL`
+|Лицензия Python Software Foundation
+|`FSF GPL OSI`
+|(по умолчанию)
+
+|`PostgreSQL`
+|Лицензия PostgreSQL
+|`FSF GPL OSI COPYFREE`
+|(по умолчанию)
+
+|`RUBY`
+|Лицензия Ruby
+|`FSF`
+|(по умолчанию)
+
+|`UNLICENSE`
+|Отказ от лицензии (The Unlicense)
+|`COPYFREE FSF GPL`
+|(по умолчанию)
+
+|`WTFPL`
+|Публичная лицензия "Делай что хочешь" версия 2
+|`GPL FSF COPYFREE`
+|(по умолчанию)
+
+|`WTFPL1`
+|Публичная лицензия "Делай что хочешь" версия 1
+|`GPL FSF COPYFREE`
+|(по умолчанию)
+
+|`ZLIB`
+|Лицензия zlib
+|`GPL FSF OSI`
+|(по умолчанию)
+
+|`ZPL21`
+|Публичная лицензия Zope версия 2.1
+|`GPL OSI`
+|(по умолчанию)
+|===
-Укажите здесь ваш адрес электронной почты. Пожалуйста. _:-)_
+[[licenses-license_perms]]
+=== `LICENSE_PERMS` и `LICENSE_PERMS_NAME_`
-Заметьте, что в качестве значения для `MAINTAINER` допустимо использование только одного адреса без поля комментария. Должен использоваться формат `user@hostname.domain`. Пожалуйста, не включайте никакого описательного текста, например, вашего настоящего имени в эту строку-это несколько сбивает с толку [.filename]#bsd.port.mk#.
+Разрешения. Используйте `none`, если пусто.
-Сопровождающий ответственен за поддержание порта в актуальном состоянии и обеспечение правильной работы порта. За подробным описанием обязанностей сопровождающего порт обращайтесь к главе extref:{contributing}[The challenge for port maintainers, maintain-port].
+.Список разрешений лицензии
+[[licenses-license_perms-dist-mirror]]
+`dist-mirror`::
+Разрешается распространение дистрибутивных файлов. Дистрибутивные файлы будут добавлены в CDN `MASTER_SITE_BACKUP` FreeBSD.
-Перед фиксацией в репозитории изменения в порте будут отправлены сопровождающему для просмотра и одобрения. Если сопровождающий порта не ответил на запрос пользователя об обновлении в течение двух недель (исключая большие праздники), то это можно считать тайм-аутом сопровождающего, и обновление может быть выполнено без явного подтверждения от сопровождающего. Если сопровождающий не отвечает в течение трёх месяцев, то считается, что он отсутствует, и как сопровождающий порта, о котором идёт речь, может быть заменён. Исключениями из этого правила является всё, что сопровождает {portmgr} или {security-officer}. Запрещено делать любые несанкционированные изменения в портах, которые ведут эти группы.
+[[licenses-license_perms-no-dist-mirror]]
+`no-dist-mirror`::
+Распространение дистрибутивных файлов запрещено. Это эквивалентно установке crossref:special[porting-restrictions-restricted,`RESTRICTED`]. Дистрибутивные файлы _не_ будут добавлены в CDN `MASTER_SITE_BACKUP` FreeBSD.
-Мы оставляем за собой право изменять сообщение сопровождающего для лучшего соответствия существующим политикам и стилю Коллекции Портов без явного одобрения со стороны отправителя. Также, крупные изменения в инфраструктуре могут повлечь изменения в порте без согласия сопровождающего. Такой вид изменений никогда не будет затрагивать функциональность порта.
+[[licenses-license_perms-dist-sell]]
+`dist-sell`::
+Продажа файлов дистрибутива разрешена. Файлы дистрибутива будут присутствовать на образах установщика.
-За {portmgr} оставляется право снять или назначить кого-либо сопровождающим по любой причине, а за {security-officer} оставляется право лишать или назначать права на сопровождение порта по соображениям информационной безопасности.
+[[licenses-license_perms-no-dist-sell]]
+`no-dist-sell`::
+Продажа файлов дистрибутива запрещена. Это эквивалентно установке crossref:special[porting-restrictions-no_cdrom,`NO_CDROM`].
-[[makefile-comment]]
-== `COMMENT`
+[[licenses-license_perms-pkg-mirror]]
+`pkg-mirror`::
+Свободное распространение пакета разрешено. Пакет будет распространяться через CDN пакетов FreeBSD https://pkg.freebsd.org/[https://pkg.freebsd.org/].
-Содержит однострочное описание порта. Пожалуйста, соблюдайте следующие правила:
+[[licenses-license_perms-no-pkg-mirror]]
+`no-pkg-mirror`::
+Свободное распространение пакета запрещено. Эквивалентно установке crossref:special[porting-restrictions-no_package,`NO_PACKAGE`]. Пакет _не_ будет распространяться через FreeBSD CDN для пакетов https://pkg.freebsd.org/[https://pkg.freebsd.org/].
-. Старайтесь делать строку COMMENT длиной не больше, чем 70 символов, так как эта строка будет использована командой `pkg info` (см. man:pkg-info[8]) для отображения однострочного описания порта;
-. _Не_ включайте сюда название пакета (или номер версии программного обеспечения);
-. Комментарий должен начинаться с заглавной буквы и не заканчиваться точкой;
-. Не начинайте комментарий с неопределённого артикля (A или An);
-. Имена пишутся с заглавной буквы (например, Apache, JavaScript, Perl);
-. Для перечислений используйте английскую Оксфордскую запятую (англ. Oxford comma) (например, green, red, and blue);
-. Используйте программу проверки орфографии.
+[[licenses-license_perms-pkg-sell]]
+`pkg-sell`::
+Продажа пакета разрешена. Пакет будет присутствовать на образах установщика.
-Вот пример:
+[[licenses-license_perms-no-pkg-sell]]
+`no-pkg-sell`::
+Продажа пакета запрещена. Это эквивалентно установке crossref:special[porting-restrictions-no_cdrom,`NO_CDROM`]. Пакет _не_ будет присутствовать на образах установщика.
+
+[[licenses-license_perms-auto-accept]]
+`auto-accept`::
+Лицензия принимается по умолчанию. Запросы на принятие лицензии не отображаются, если пользователь не определил `LICENSES_ASK`. Используйте это, если в лицензии не указано, что пользователь должен принять условия лицензии.
+
+[[licenses-license_perms-no-auto-accept]]
+`no-auto-accept`::
+Лицензия не принимается по умолчанию. Пользователь всегда будет запрошен на подтверждение принятия данной лицензии. Это должно использоваться, если лицензия требует, чтобы пользователь принял её условия.
+
+Когда присутствуют и `_permission_`, и `no-_permission_`, то `no-_permission_` отменяет `_permission_`.
+
+Когда `_permission_` отсутствует, это считается как `no-_permission_`.
+
+[WARNING]
+====
+Некоторые отсутствующие разрешения могут сделать порт (и все зависящие от него порты) непригодными для использования пользователями пакетов:
+
+Порт без разрешения `auto-accept` никогда не будет собран, и все зависящие от него порты будут проигнорированы.
+
+Порт без разрешения `pkg-mirror`, а также любые порты, зависящие от него, будут удалены после сборки, что гарантирует их отсутствие в дистрибуции.
+====
+
+[[licenses-license_perms-ex1]]
+.Нестандартная лицензия
+[example]
+====
+Прочитайте условия лицензии и переведите их, используя доступные разрешения.
[.programlisting]
....
-COMMENT= Cat chasing a mouse all over the screen
+LICENSE= UNKNOWN
+LICENSE_NAME= unknown
+LICENSE_TEXT= This program is NOT in public domain.\
+ It can be freely distributed for non-commercial purposes only.
+LICENSE_PERMS= dist-mirror no-dist-sell pkg-mirror no-pkg-sell auto-accept
....
-В файле [.filename]#Makefile# переменная COMMENT должна следовать сразу за переменной MAINTAINER.
+====
+
+[[licenses-license_perms-ex2]]
+.Стандартные и нестандартные лицензии
+[example]
+====
+
+Прочитайте условия лицензии и укажите их, используя доступные разрешения. В случае сомнений обратитесь за разъяснениями на {freebsd-ports}.
+
+[.programlisting]
+....
+LICENSE= WARSOW GPLv2
+LICENSE_COMB= multi
+LICENSE_NAME_WARSOW= Warsow Content License
+LICENSE_FILE_WARSOW= ${WRKSRC}/docs/license.txt
+LICENSE_PERMS_WARSOW= dist-mirror pkg-mirror auto-accept
+....
+
+Когда разрешения лицензий GPLv2 и UNKNOWN смешиваются, порт получает `dist-mirror dist-sell pkg-mirror pkg-sell auto-accept dist-mirror no-dist-sell pkg-mirror no-pkg-sell auto-accept`. Опции `no-_разрешения_` отменяют соответствующие _разрешения_. Итоговый список разрешений: _dist-mirror pkg-mirror auto-accept_. Файлы дистрибутива и пакеты не будут доступны в образах установщика.
+====
+
+[[licenses-license_groups]]
+=== `LICENSE_GROUPS` и `LICENSE_GROUPS_NAME`
+
+Группы, к которым принадлежит лицензия.
+
+.Список предопределенных групп лицензий
+[[licenses-license_groups-FSF]]
+`FSF`::
+Одобрено Free Software Foundation, см. https://www.fsf.org/licensing/[Команда по лицензированию и соответствию FSF].
+
+[[licenses-license_groups-GPL]]
+`GPL`::
+Совместимые с GPL
+
+[[licenses-license_groups-OSI]]
+`OSI`::
+Одобрено OSI, см. страницу https://opensource.org/licenses/[Открытых лицензий].
+
+[[licenses-license_groups-COPYFREE]]
+`COPYFREE`::
+Соответствует определению стандарта Copyfree, см. страницу https://copyfree.org/standard/licenses/[лицензий Copyfree].
+
+[[licenses-license_groups-FONTS]]
+`FONTS`::
+Лицензии на шрифты
+
+[[licenses-license_name]]
+=== `LICENSE_NAME` и `LICENSE_NAME_NAME`
+
+Полное название лицензии.
+
+[[licenses-license_name-ex1]]
+.`LICENSE_NAME`
+[example]
+====
+
+[.programlisting]
+....
+LICENSE= UNRAR
+LICENSE_NAME= UnRAR License
+LICENSE_FILE= ${WRKSRC}/license.txt
+LICENSE_PERMS= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
+....
+
+====
+
+[[licenses-license_file]]
+=== `LICENSE_FILE` и `LICENSE_FILE_NAME`
+
+Полный путь к файлу, содержащему текст лицензии, обычно [.filename]#${WRKSRC}/some/file#. Если файл отсутствует в дистрибутиве, а его содержимое слишком длинное для размещения в crossref:makefiles[licenses-license_text,`LICENSE_TEXT`], поместите его в новый файл в [.filename]#${FILESDIR}#.
+
+[[licenses-license_file-ex1]]
+.`LICENSE_FILE`
+[example]
+====
+
+[.programlisting]
+....
+LICENSE= GPLv3+
+LICENSE_FILE= ${WRKSRC}/COPYING
+....
+
+====
+
+[[licenses-license_text]]
+=== `LICENSE_TEXT` и `LICENSE_TEXT_NAME`
+
+Текст для использования в качестве лицензии. Полезно, когда лицензия отсутствует в файлах дистрибутива и её текст краток.
+
+[[licenses-license_text-ex1]]
+.`LICENSE_TEXT`
+[example]
+====
+[.programlisting]
+....
+LICENSE= UNKNOWN
+LICENSE_NAME= unknown
+LICENSE_TEXT= This program is NOT in public domain.\
+ It can be freely distributed for non-commercial purposes only,\
+ and THERE IS NO WARRANTY FOR THIS PROGRAM.
+LICENSE_PERMS= dist-mirror no-dist-sell pkg-mirror no-pkg-sell auto-accept
+....
+
+====
+
+[[licenses-license_distfiles]]
+=== `LICENSE_DISTFILES` и `LICENSE_DISTFILES_NAME`
+
+Файлы дистрибутива, к которым применяются лицензии. По умолчанию — все файлы дистрибутива.
+
+[[licenses-license_distfiles-ex1]]
+.`LICENSE_DISTFILES`
+[example]
+====
+Используется, когда файлы дистрибутива имеют разные лицензии. Например, один файл имеет лицензию на код, а другой содержит некоторые произведения искусства, которые нельзя распространять:
+
+[.programlisting]
+....
+MASTER_SITES= SF/some-game
+DISTFILES= ${DISTNAME}${EXTRACT_SUFX} artwork.zip
+
+LICENSE= BSD3CLAUSE ARTWORK
+LICENSE_COMB= dual
+LICENSE_NAME_ARTWORK= The game artwork license
+LICENSE_TEXT_ARTWORK= The README says that the files cannot be redistributed
+LICENSE_PERMS_ARTWORK= pkg-mirror pkg-sell auto-accept
+LICENSE_DISTFILES_BSD3CLAUSE= ${DISTNAME}${EXTRACT_SUFX}
+LICENSE_DISTFILES_ARTWORK= artwork.zip
+....
+
+====
+
+[[licenses-license_comb]]
+=== `LICENSE_COMB`
+
+Установите значение `multi`, если применяются все лицензии. Установите значение `dual`, если применяется любая из лицензий. По умолчанию используется значение `single`.
+
+[[licenses-license_comb-ex1]]
+.Двойные лицензии
+[example]
+====
+
+Когда порт содержит указание «Это программное обеспечение может распространяться под GNU General Public License или Artistic License», это означает, что можно использовать любую из этих лицензий. Используйте следующее:
+
+[.programlisting]
+....
+LICENSE= ART10 GPLv1
+LICENSE_COMB= dual
+....
+
+Если предоставлены файлы лицензий, используйте это:
+
+[.programlisting]
+....
+LICENSE= ART10 GPLv1
+LICENSE_COMB= dual
+LICENSE_FILE_ART10= ${WRKSRC}/Artistic
+LICENSE_FILE_GPLv1= ${WRKSRC}/Copying
+....
+
+====
+
+[[licenses-license_comb-ex2]]
+.Множественные лицензии
+[example]
+====
+
+Если часть порта имеет одну лицензию, а другая часть — другую, используйте `multi`:
+
+[.programlisting]
+....
+LICENSE= GPLv2 LGPL21+
+LICENSE_COMB= multi
+....
+
+====
[[makefile-portscout]]
== `PORTSCOUT`
-Portscout являет собой автоматизированное средство проверки доступности дистрибутивных файлов для Коллекции Портов FreeBSD, подробное описание которого предоставляет crossref:keeping-up[distfile-survey, Portscout: сканер дистрибутивных файлов портов FreeBSD].
+Portscout — это автоматизированная утилита проверки distfile для Коллекции портов FreeBSD, подробно описанная в crossref:keeping-up[distfile-survey,Portscout: сканирование distfile портов FreeBSD].
-Переменная `PORTSCOUT` задаёт специальные условия, ограничивающие работу Portscout - сканера дистрибутивных файлов.
+`PORTSCOUT` определяет специальные условия, в рамках которых работа сканера дистрибутивных файлов Portscout ограничена.
-Ситуации, при которых следует указывать переменную `PORTSCOUT`:
+Ситуации, когда установлена переменная `PORTSCOUT`, включают:
+
+* Когда необходимо игнорировать distfiles для определённых версий. Например, чтобы исключить версию _8.2_ и версию _8.3_ из проверок версий distfiles, так как известно, что они неработоспособны, добавьте:
++
+[.programlisting]
+....
+PORTSCOUT= skipv:8.2,8.3
+....
-* Когда должны игнорироваться дистрибутивные файлы для конкретных версий или младших ревизий. Например, чтобы исключить из проверок новых версий дистрибутивных файлов версию _8.2_ по причине того, что она является поломанной, добавьте следующее:
+* Когда проверки версий distfile необходимо полностью отключить. Например, если порт больше не будет обновляться, добавьте:
+
[.programlisting]
....
-PORTSCOUT= ignore:8.2
+PORTSCOUT= ignore:1
....
-* Когда должны проверяться конкретные версии или старшие и младшие ревизии дистрибутивных файлов. Например, если следует ограничиться проверкой версии _0.6.4_, потому что более новые версии имеют проблемы совместимости с FreeBSD, добавьте:
+* Когда необходимо проверять конкретные версии или определенные мажорные и минорные редакции distfile. Например, если нужно отслеживать только версию _0.6.4_, потому что более новые версии имеют проблемы совместимости с FreeBSD, добавьте:
+
[.programlisting]
....
PORTSCOUT= limit:^0\.6\.4
....
-* Когда URL, в которых указаны доступные версии, отличаются от URL их загрузки. Например, чтобы привязать проверку новых версий дистрибутивных файлов к странице загрузки для порта package:databases/pgtune[], добавьте:
+* Когда URL-адреса, перечисляющие доступные версии, отличаются от URL-адресов загрузки. Например, чтобы ограничить проверку версий distfile страницей загрузки для пакета: package:databases/pgtune[] добавьте:
+
[.programlisting]
....
-PORTSCOUT= site:http://pgfoundry.org/frs/?group_id=1000416
+PORTSCOUT= site:http://www.renpy.org/dl/release/
....
[[makefile-depend]]
== Зависимости
-Многие порты зависят от других портов. Это очень удобная замечательная особенность большинства Unix-подобных операционных систем, включая FreeBSD. Множество портов могут использовать общую зависимость совместно, а не включать её в состав каждого порта или пакета, который в ней нуждается. Имеется семь переменных, которые вы можете использовать для обеспечения того, что всё требуемое находится на машине пользователя. Имеется также несколько предопределённых переменных, отражающих зависимости для общих случаев, плюс ещё несколько для управления поведением зависимостей.
+Многие порты зависят от других портов. Это очень удобная особенность большинства Unix-подобных операционных систем, включая FreeBSD. Несколько портов могут использовать общую зависимость вместо того, чтобы включать эту зависимость в каждый порт или пакет, который в ней нуждается. Существует семь переменных, которые можно использовать для обеспечения наличия всех необходимых компонентов на машине пользователя. Также есть предопределенные переменные зависимостей для распространенных случаев и несколько дополнительных для управления поведением зависимостей.
+
+[IMPORTANT]
+====
+Когда у программного обеспечения есть дополнительные зависимости, предоставляющие дополнительные возможности, основные зависимости, перечисленные в `*_DEPENDS`, должны включать те дополнительные зависимости, которые будут полезны большинству пользователей. Основные зависимости никогда не должны быть "минимальным" набором зависимостей. Цель состоит не в том, чтобы включить все возможные зависимости. Включайте только те, которые будут полезны большинству людей.
+====
+[[makefile-lib_depends]]
=== `LIB_DEPENDS`
-Эта переменная указывает, от каких совместно используемых библиотек зависит порт. Это список пар lib:dir, где _lib_ - это имя библиотеки, _dir_ - это каталог, в котором можно ее найти в случае, если ее нет на машине. Например,
+Эта переменная определяет разделяемые библиотеки, от которых зависит данный порт. Это список кортежей вида `_lib:dir_`, где `_lib_` — имя разделяемой библиотеки, а `_dir_` — директория, в которой её следует искать, если она недоступна. Например,
[.programlisting]
....
-LIB_DEPENDS= libjpeg.so:${PORTSDIR}/graphics/jpeg
+LIB_DEPENDS= libjpeg.so:graphics/jpeg
....
-проверит наличие библиотеки jpeg с любым номером версии и перейдет в подкаталог [.filename]#graphics/jpeg# вашего дерева портов для ее построения и установки, если библиотека отсутствует.
+проверит наличие общей библиотеки jpeg с любой версией и перейдет в подкаталог [.filename]#graphics/jpeg# дерева портов, чтобы собрать и установить её, если она не найдена.
-Зависимость проверяется дважды, один раз внутри цели `build`, а затем из цели `install`. Кроме того, имя зависимости помещается в пакет, так что `pkg install` (см. man:pkg-install[8]) будет автоматически её устанавливать, если её нет на пользовательской системе.
+Зависимость проверяется дважды: один раз внутри цели `build` и затем внутри цели `install`. Также имя зависимости добавляется в пакет, чтобы `pkg install` (см. man:pkg-install[8]) автоматически установил её, если её нет в системе пользователя.
+[[makefile-run_depends]]
=== `RUN_DEPENDS`
-В этой переменной перечисляются выполнимые файлы или файлы, от которых зависит работа порта. Это список пар вида path:dir:target, где _path_ - это имя программы или файла, а _dir_ - каталог, в котором можно найти порт в случае, если его нет в системе, и _target_ - это цель, которую нужно вызвать в этом каталоге. Если _path_ начинается со слэша (`/`), он воспринимается как файл и его существование проверяется командой `test -e`; в противном случае предполагается, что это выполнимый файл, и для определения того, имеется ли программа в пути поиска, используется команда `which -s`.
+Эта переменная определяет исполняемые файлы или файлы, от которых зависит порт во время выполнения. Это список кортежей ``_path:dir_``[:``_target_``], где `_path_` — это имя исполняемого файла или файла, _dir_ — директория, в которой его следует искать, если он недоступен, а _target_ — цель, которую нужно вызвать в этой директории. Если _path_ начинается с косой черты (`/`), он считается файлом, и его существование проверяется с помощью `test -e`; в противном случае предполагается, что это исполняемый файл, и `which -s` используется для проверки наличия программы в пути поиска.
Например,
[.programlisting]
....
-RUN_DEPENDS= ${LOCALBASE}/news/bin/innd:${PORTSDIR}/news/inn \
- xmlcatmgr:${PORTSDIR}/textproc/xmlcatmgr
+RUN_DEPENDS= ${LOCALBASE}/news/bin/innd:news/inn \
+ xmlcatmgr:textproc/xmlcatmgr
....
-проверит существование файла или каталога [.filename]#/usr/local/news/bin/innd#, и если ничего не будет найдено, то построит и установит порт из подкаталога [.filename]#news/inn# дерева портов. Также будет выполнена проверка, присутствует ли в пути поиска исполняемый файл с именем `xmlcatmgr`, и перейдет в подкаталог [.filename]#textproc/xmlcatmgr# вашего дерева портов для его построения и установки, если он не будет найден.
+проверит, существует ли файл или каталог [.filename]#/usr/local/news/bin/innd#, и соберет и установит его из подкаталога [.filename]#news/inn# дерева портов, если он не найден. Также будет проверено, находится ли исполняемый файл `xmlcatmgr` в пути поиска, и если он не найден, будет выполнен переход в [.filename]#textproc/xmlcatmgr# для сборки и установки.
[NOTE]
====
-В приведенном примере `innd` является выполнимым файлом; если выполнимый файл находится в месте, которое отсутствует в списке путей файлов, то вы должны указать полный путь к файлу.
+В этом случае `innd` является исполняемым файлом; если исполняемый файл находится в месте, которое не ожидается в пути поиска, используйте полный путь.
====
[NOTE]
====
-Официальным значением переменной поиска `PATH`, используемым в кластере построения портов является
+Официальный путь поиска `PATH`, используемый в кластере сборки портов
[.programlisting]
....
@@ -1333,361 +3206,333 @@ RUN_DEPENDS= ${LOCALBASE}/news/bin/innd:${PORTSDIR}/news/inn \
====
-Зависимость проверяется внутри цели `install`. Кроме того, имя зависимости помещается в пакет, так что `pkg install` (см. man:pkg-install[8]) будет автоматически его устанавливать, если он не будет найден в пользовательской системе. Часть _target_ может быть опущена, если она совпадает с `DEPENDS_TARGET`.
+Зависимость проверяется внутри цели `install`. Также имя зависимости добавляется в пакет, чтобы команда `pkg install` (см. man:pkg-install[8]) автоматически установила её, если она отсутствует в системе пользователя. Часть _target_ может быть опущена, если она совпадает с `DEPENDS_TARGET`.
-Довольно распространенной является ситуация, когда `RUN_DEPENDS` буквально такая же как `BUILD_DEPENDS`, особенно если переносимое программное обеспечение написано на языке сценариев, или если оно требует такое же окружение для исполнения, как и используемое во время построения. В этом случае, очень заманчивым или довольно естественным является присвоение одного другому:
+Довольно распространённая ситуация, когда `RUN_DEPENDS` буквально совпадает с `BUILD_DEPENDS`, особенно если портируемое программное обеспечение написано на скриптовом языке или требует одинаковой среды для сборки и выполнения. В этом случае возникает соблазн и интуитивное желание напрямую присвоить одно другому:
[.programlisting]
....
RUN_DEPENDS= ${BUILD_DEPENDS}
....
-Тем не менее, подобные присвоения могут загрязнять зависимости времени исполнения содержимым, не заданным в `BUILD_DEPENDS` исходного порта. Такое случается из-за ленивого вычисления в man:make[1] присваиваемых переменных. Представьте [.filename]#Makefile# с переменными `USE_*`, которые обрабатываются в [.filename]#ports/Mk/bsd.*.mk# для пополнения первоначальных зависимостей построения. Например, `USES= gmake` добавляет package:devel/gmake[] в `BUILD_DEPENDS`. Для предотвращения загрязнения `RUN_DEPENDS` подобными дополнительными зависимостями проявляйте осторожность с присвоением с раскрытием, т.е. с раскрытием значения перед его присвоением переменной:
+Однако такое присваивание может загрязнить зависимости во время выполнения записями, не определёнными в оригинальном `BUILD_DEPENDS` порта. Это происходит из-за ленивого вычисления присваивания переменных в man:make[1]. Рассмотрим [.filename]#Makefile# с `USE_*`, которые обрабатываются [.filename]#ports/Mk/bsd.*.mk# для добавления начальных зависимостей сборки. Например, `USES= gmake` добавляет package:devel/gmake[] в `BUILD_DEPENDS`. Чтобы предотвратить попадание таких дополнительных зависимостей в `RUN_DEPENDS`, создайте другую переменную с текущим содержимым `BUILD_DEPENDS` и присвойте её как `BUILD_DEPENDS`, так и `RUN_DEPENDS`:
[.programlisting]
....
-RUN_DEPENDS:= ${BUILD_DEPENDS}
+MY_DEPENDS= some:devel/some \
+ other:lang/other
+BUILD_DEPENDS= ${MY_DEPENDS}
+RUN_DEPENDS= ${MY_DEPENDS}
....
+[IMPORTANT]
+====
+_Не используйте_ `:=` для присваивания `BUILD_DEPENDS` в `RUN_DEPENDS` или наоборот. Все переменные раскрываются немедленно, что является совершенно неправильным и почти всегда приводит к ошибке.
+====
+
+[[makefile-build_depends]]
=== `BUILD_DEPENDS`
-В этой переменной перечисляются выполнимые или обычные файлы, которые требуются порту для его построения. Как и `RUN_DEPENDS`, это список пар path:dir:target. Например,
+Эта переменная указывает исполняемые файлы или файлы, необходимые для сборки данного порта. Как и `RUN_DEPENDS`, это список кортежей ``_path:dir_``[:``_target_``]. Например,
[.programlisting]
....
-BUILD_DEPENDS= unzip:${PORTSDIR}/archivers/unzip
+BUILD_DEPENDS= unzip:archivers/unzip
....
-будет проверять наличие выполнимого фала с именем `unzip` и перейдет в подкаталог [.filename]#archivers/unzip# вашего дерева портов для его построения и установки, если последний не будет найден.
+проверит наличие исполняемого файла с именем `unzip` и перейдет в подкаталог [.filename]#archivers/unzip# дерева портов, чтобы собрать и установить его, если он не будет найден.
[NOTE]
====
-Под "построением" здесь понимается всё, от распаковки до компиляции. Зависимость проверяется из цели `extract`. Часть _target_ может быть опущена, если она совпадает с `DEPENDS_TARGET`.
+"build" здесь означает все процессы от извлечения до компиляции. Зависимость проверяется внутри цели `extract`. Часть _target_ может быть опущена, если она совпадает с `DEPENDS_TARGET`
====
+[[makefile-fetch_depends]]
=== `FETCH_DEPENDS`
-В этой переменной перечисляются выполняемые файлы или просто файлы, которые требуются порту для сгрузки. Как и предыдущие две переменные, это список пар path:dir:target. Например,
+Эта переменная определяет исполняемые файлы или файлы, необходимые для загрузки этого порта. Как и предыдущие две, это список кортежей ``_path:dir_``[:``_target_``]. Например,
[.programlisting]
....
-FETCH_DEPENDS= ncftp2:${PORTSDIR}/net/ncftp2
+FETCH_DEPENDS= ncftp2:net/ncftp2
....
-будет проверять наличие выполняемого файла с именем `ncftp2` и перейдет в каталог [.filename]#net/ncftp2# вашего дерева портов для его построения и установки, если тот не будет найден.
+проверит наличие исполняемого файла с именем `ncftp2` и перейдет в подкаталог [.filename]#net/ncftp2# дерева портов для сборки и установки, если файл не будет найден.
-Зависимость проверяется при выполнении цели `fetch`. Часть _target_ может быть опущена, если она совпадает с `DEPENDS_TARGET`.
+Зависимость проверяется внутри цели `fetch`. Часть _target_ может быть опущена, если она совпадает с `DEPENDS_TARGET`.
+[[makefile-extract_depends]]
=== `EXTRACT_DEPENDS`
-В этой переменной указываются программы или файлы, которые требуются для распаковки порта. Как и в предыдущих случаях, это список пар вида path:dir:target. Например,
+Эта переменная указывает исполняемые файлы или файлы, которые требуются для извлечения данного порта. Как и предыдущая, это список кортежей ``_path:dir_``[:``_target_``]. Например,
[.programlisting]
....
-EXTRACT_DEPENDS= unzip:${PORTSDIR}/archivers/unzip
+EXTRACT_DEPENDS= unzip:archivers/unzip
....
-будет проверять наличие программы с именем `unzip`, и перейдёт в подкаталог [.filename]#archivers/unzip# вашего дерева портов для её построения и установки, если такой программы не будет найдено.
+проверит наличие исполняемого файла с именем `unzip` и перейдет в подкаталог [.filename]#archivers/unzip# дерева портов, чтобы собрать и установить его, если он не будет найден.
Зависимость проверяется внутри цели `extract`. Часть _target_ может быть опущена, если она совпадает с `DEPENDS_TARGET`.
[NOTE]
====
-Используйте эту переменную, только если распаковка не работает (по умолчанию предполагается использование `gzip`) и это не исправляется при помощи `USE_ZIP` или `USE_BZIP2`, которые описаны в <<use-vars>>.
+Используйте эту переменную только если извлечение уже не работает (по умолчанию предполагается `tar`) и не может быть исправлено с помощью `USES=tar`, `USES=lha` или `USES=zip`, как описано в crossref:uses[uses,Использование макросов `USES`].
====
+[[makefile-patch_depends]]
=== `PATCH_DEPENDS`
-Эта переменная указывает на программы или файлы, которые нужны порту для применения патчей. Как и в предыдущих случаях, это список пар вида path:dir:target. Например,
+Эта переменная указывает исполняемые файлы или файлы, которые требуются этому порту для применения патчей. Как и предыдущая, это список кортежей ``_path:dir_``[:``_target_``]. Например,
[.programlisting]
....
-PATCH_DEPENDS= ${NONEXISTENT}:${PORTSDIR}/java/jfc:extract
+PATCH_DEPENDS= ${NONEXISTENT}:java/jfc:extract
....
-будет переходить в подкаталог [.filename]#java/jfc# вашего дерева портов для распаковки.
+будет спускаться в подкаталог [.filename]#java/jfc# дерева портов для его извлечения.
-Зависимость проверяется внутри цели `patch`. Часть _target_ может быть опущена, если она совпадает с `DEPENDS_TARGET`.
+Зависимость проверяется в рамках цели `patch`. Часть _target_ может быть опущена, если она совпадает с `DEPENDS_TARGET`.
-[[uses-makefiles]]
+[[makefile-uses]]
=== `USES`
-Могут быть добавлены параметры для определения различных характерных особенностей и зависимостей, которыми обладает данный порт. Они указываются путём добавления в [.filename]#Makefile# этой строки:
+Параметры могут быть добавлены для определения различных функций и зависимостей, используемых портом. Они указываются путем добавления этой строки в [.filename]#Makefile#:
[.programlisting]
....
USES= feature[:arguments]
....
-Для получения полного списка значений смотрите <<uses-makefiles>>.
+Для полного списка значений обратитесь к crossref:uses[uses,Использование макросов `USES`].
[WARNING]
====
-
-Значение `USES` нельзя присваивать после подключения [.filename]#bsd.port.pre.mk#.
+`USES` нельзя назначать после включения [.filename]#bsd.port.pre.mk#.
====
-[[use-vars]]
+[[makefile-use-vars]]
=== `USE_*`
-Для определения общих зависимостей, совместно используемых многими портами, предназначено несколько переменных. Их использование является необязательным, но помогает упростить избыточность файлов [.filename]#Makefile# порта. Каждый из них оформляется как `USE_*`. Эти переменные можно использовать только в [.filename]#Makefile# порта и [.filename]#ports/Mk/bsd.*.mk#. Они не предназначены для установки пользователями параметров - используйте для этих целей `PORT_OPTIONS`.
+Существует несколько переменных для определения общих зависимостей, используемых многими портами. Их использование необязательно, но помогает сократить многословность [.filename]##Makefile## портов. Каждая из них оформлена как `USE_*`. Эти переменные могут использоваться только в [.filename]##Makefile## портов и [.filename]#ports/Mk/bsd.*.mk#. Они не предназначены для настраиваемых пользователем опций — для этой цели используйте `PORT_OPTIONS`.
[NOTE]
====
-Установка любых `USE_*` в [.filename]#/etc/make.conf# _всегда_ является ошибочным действием. В частности, установка
+Всегда неправильно устанавливать любые `USE_*` в [.filename]#/etc/make.conf#. Например, установка
[.programlisting]
....
USE_GCC=X.Y
....
-(где X.Y соответствует версии) добавит зависимость от gccXY к каждому порту, включая и сам `lang/gccXY`!
+(где X.Y — номер версии) добавит зависимость от gccXY для каждого порта, включая сам `lang/gccXY`!
====
-.Переменные `USE_*`
+[[makefile-use-vars-table]]
+.`USE_*`
[cols="1,1", frame="none", options="header"]
|===
| Переменная
| Значение
-|`USE_BZIP2`
-|tar-архивы порта упакованы при помощи `bzip2`.
+|`USE_GCC`
+a|
-|`USE_ZIP`
-|tar-архивы порта упакованы при помощи `zip`.
+Порт требует GCC (`gcc` или `{g-plus-plus}`) для сборки.
+Некоторые порты нуждаются в определённой, старой версии GCC, другие требуют современных, актуальных версий.
+Обычно устанавливается в `yes` (означает всегда использовать стабильную, современную версию GCC из портов, согласно `GCC_DEFAULT` в [.filename]#Mk/bsd.default-versions.mk#).
+Это также значение по умолчанию.
+Точная версия также может быть указана, например, значением `10`.
+GCC из базовой системы используется, если он удовлетворяет запрашиваемой версии, в противном случае подходящий компилятор собирается из портов, а `CC` и `CXX` корректируются соответствующим образом.
+Аргумент `:build`, следующий за указанием версии, добавляет только зависимость во время сборки порта.
+
+Например:
+[example]
+====
+[.programlisting]
+....
+USE_GCC=yes # порт требует текущей версии GCC
+USE_GCC=11:build # порт требует GCC 11 только во время сборки
+....
+====
+
+[NOTE]
+====
+`USE_GCC=any` устарел и не должен использоваться в новых портах
+====
-|`USE_GCC`
-|Для сборки порта требуется GCC (gcc или {gcc-plus-plus}). Некоторым портам подходит любая версия, для других требуются последние современные версии. Обычно используется со значением `any` (в этом случае используется встроенный GCC в тех версиях FreeBSD, в состав которых он всё ещё входит, или устанавливается порт `lang/gcc`, когда Clang является компилятором C/C++ по умолчанию) или `yes` (всегда используется стабильная современная версия GCC из порта `lang/gcc`). Также в значении переменной можно указать точную версию, например `4.7`. Минимально допустимую версию можно указать как `4.6+`. GCC из основной системы используется в случае, если его версия удовлетворяет запрошенной, иначе собирается подходящая версии компилятора из порта с соответствующей коррекцией переменных `CC` и `CXX`.
|===
-Переменные, относящиеся к gmake и сценарию [.filename]#configure#, описаны в crossref:special[building, Механизмы построения], а autoconf, automake и libtool описаны в crossref:special[using-autotools, Использование GNU Autotools]. Переменные, связанные с Perl, описаны в crossref:special[using-perl, Использование Perl]. Переменные X11 перечислены в crossref:special[using-x11, Использование X11]. crossref:special[using-gnome, Использование GNOME] работает с переменными GNOME и crossref:special[using-kde, Использование KDE] с KDE. crossref:special[using-java, Использование Java] описывает переменные Java, а crossref:special[using-php, Веб-приложения, Apache и PHP] содержит информацию об Apache, PHP и модулях PEAR. Python обсуждается в crossref:special[using-python, Использование Python], а Ruby в crossref:special[using-ruby, Использование Ruby]. crossref:special[using-sdl, Использование SDL] предоставляет переменные, используемые для приложений SDL, и, наконец, crossref:special[using-xfce, Использование Xfce] содержит информацию о приложении Xfce.
+Переменные, связанные с gmake и [.filename]#configure#, описаны в crossref:special[building,Механизмы сборки], тогда как autoconf, automake и libtool описаны в crossref:special[using-autotools,Использование GNU Autotools]. Переменные, связанные с Perl, описаны в crossref:special[using-perl,Использование Perl]. Переменные X11 перечислены в crossref:special[using-x11,Использование X11]. crossref:special[using-gnome,Использование GNOME] посвящено GNOME, а crossref:special[using-kde,Использование KDE] — переменным, связанным с KDE. crossref:special[using-java,Использование Java] документирует переменные Java, тогда как crossref:special[using-php,Веб-приложения, Apache и PHP] содержит информацию о модулях Apache, PHP и PEAR. Python обсуждается в crossref:special[using-python,Использование Python], а Ruby — в crossref:special[using-ruby,Использование Ruby]. crossref:special[using-sdl,Использование SDL] предоставляет переменные, используемые для приложений SDL, и, наконец, crossref:special[using-xfce,Использование Xfce] содержит информацию о Xfce.
-=== Минимальная версия зависимости
+[[makefile-version-dependency]]
+=== Минимальная версия зависимого пакета
-Минимальная версия зависимости может быть указана в любой переменной `*_DEPENDS`, за исключением `LIB_DEPENDS`, с использованием следующего синтаксиса:
+Минимальная версия зависимого пакета может быть указана в любом `*_DEPENDS`, кроме `LIB_DEPENDS`, используя следующий синтаксис:
[.programlisting]
....
-p5-Spiffy>=0.26:${PORTSDIR}/devel/p5-Spiffy
+p5-Spiffy>=0.26:devel/p5-Spiffy
....
-Первое поле содержит название зависимого пакета, которое обязано совпадать с записью в базе данные пакетов, знак сравнения и версию пакета. Зависимость удовлетворяется, если на машине установлен p5-Spiffy-0.26 или новее.
+Первое поле содержит имя зависимого пакета, которое должно соответствовать записи в базе данных пакетов, знак сравнения и версию пакета. Зависимость считается удовлетворённой, если на машине установлен p5-Spiffy-0.26 или новее.
-=== Замечания касательно зависимостей
+[[makefile-note-on-dependencies]]
+=== Заметки о зависимостях
-Как уже отмечено выше, целью, которая вызывается по умолчанию в случае, когда это требует зависимость, является `DEPENDS_TARGET`. Она по умолчанию есть `install`. Это пользовательская переменная; она нигде не определена в файле [.filename]#Makefile# порта. Если вашему порту требуется особый метод обработки зависимости, воспользуйтесь частью `:target` переменной `*_DEPENDS` вместо того, чтобы переопределять `DEPENDS_TARGET`.
+Как упомянуто выше, цель по умолчанию, вызываемая при необходимости зависимости, — это `DEPENDS_TARGET`. По умолчанию она установлена в `install`. Это пользовательская переменная; она никогда не определяется в [.filename]#Makefile# порта. Если порту требуется особый способ обработки зависимости, используйте часть `:target` в `*_DEPENDS` вместо переопределения `DEPENDS_TARGET`.
-Когда вы набираете команду `make clean`, эта операция также выполняется и над зависимостями этого порта. Если вы не хотите, чтобы это случилось, определите переменную `NOCLEANDEPENDS` в вашем окружении. Это может быть особенно нужным, если порт имеет нечто, что занимает много времени на построение, в своём списке зависимостей, например, KDE, GNOME или Mozilla.
+При выполнении `make clean` зависимости портов также автоматически очищаются. Если это нежелательно, определите переменную `NOCLEANDEPENDS` в окружении. Это может быть особенно полезно, если среди зависимостей порта есть что-то, что требует много времени для пересборки, например KDE, GNOME или Mozilla.
-Чтобы безусловно зависеть от другого порта, укажите переменную `${NONEXISTENT}` в качестве первого поля переменной `BUILD_DEPENDS` или `RUN_DEPENDS`. Пользуйтесь этим, только когда вам нужно иметь исходный код другого порта. Вы можете сэкономить время на компиляции, указав также и цель. Например,
+Для безусловной зависимости от другого порта используйте переменную `${NONEXISTENT}` в качестве первого поля `BUILD_DEPENDS` или `RUN_DEPENDS`. Используйте это только в случае, когда необходим исходный код другого порта. Время компиляции можно сократить, указав также цель. Например
[.programlisting]
....
-BUILD_DEPENDS= ${NONEXISTENT}:${PORTSDIR}/graphics/jpeg:extract
+BUILD_DEPENDS= ${NONEXISTENT}:graphics/jpeg:extract
....
-всегда будет переходить в каталог с портом `jpeg` и распаковывать его.
+всегда будет переходить к порту `jpeg` и извлекать его.
-=== Зацикленные зависимости фатальны
+[[makefile-circular-dependencies]]
+=== Циклические зависимости фатальны
[IMPORTANT]
====
-Не помещайте зацикливающиеся зависимости в дерево портов!
+Не создавайте циклических зависимостей в дереве портов!
====
-Технология построения портов не защищена от зацикленных зависимостей. Если вы создадите такую, то у кого-нибудь и где-нибудь установка FreeBSD будет немедленно сломана, а у остальных сломается несколько позже. Это на самом деле очень трудно распознать; если вы сомневаетесь, то перед внесением изменений проверьте, что выполнили следующее: `cd /usr/ports; make index`. Этот процесс может быть достаточно медленным на старых машинах, хотя вы сможете спасти большое количество людей-включая себя-от грядущих бед.
+Технология сборки портов не допускает циклических зависимостей. Если такая зависимость будет добавлена, у кого-то в мире почти сразу окажется сломанной установка FreeBSD, а за этим последуют многие другие. Подобные проблемы бывает очень сложно обнаружить. Если есть сомнения, перед внесением изменений обязательно выполните: `cd /usr/ports; make index`. Этот процесс может быть довольно медленным на старых машинах, но он способен избавить множество людей, включая вас, от серьёзных проблем.
-=== Автоматические зависимости и проблемы, которые они вызывают
+[[makefile-automatic-dependencies]]
+=== Проблемы, вызванные автоматическими зависимостями
-Зависимости должны быть указаны либо явно, либо с использованием <<makefile-options,фреймворка OPTIONS>>. Использование прочих методов, таких как автоматическое обнаружение зависимостей, усложняет индексирование, что вызывает проблемы в управлении портами и пакетами.
+Зависимости должны быть объявлены явно или с использованием crossref:makefiles[makefile-options,OPTIONS framework]. Использование других методов, таких как автоматическое обнаружение, усложняет индексацию, что вызывает проблемы для управления портами и пакетами.
-.Некорректное объявление необязательной зависимости
+[[makefile-automatic-dependencies-bad]]
+.Неправильное объявление необязательной зависимости
[example]
====
+
[.programlisting]
....
.include <bsd.port.pre.mk>
.if exists(${LOCALBASE}/bin/foo)
-LIB_DEPENDS= libbar.so:${PORTSDIR}/foo/bar
+LIB_DEPENDS= libbar.so:foo/bar
.endif
....
====
-Проблема автоматического добавления зависимостей заключается в том, что файлы и настройки за пределами порта могут произвольно меняться. Пример: после построения индекса устанавливается набор портов. При этом один из них устанавливает проверяемый файл. На этом этапе индекс будет неправильным, потому что установленный порт неожиданно получит новую зависимость. Индекс может быть по прежнему неправильным даже после его перестроения, в случае если другие порты также определят дополнительные зависимости, основываясь на существовании других файлов.
+Проблема с попыткой автоматического добавления зависимостей заключается в том, что файлы и настройки за пределами отдельного порта могут измениться в любой момент. Например: индекс строится, затем устанавливается группа портов. Но один из портов устанавливает проверяемый файл. Теперь индекс неверен, потому что у установленного порта неожиданно появилась новая зависимость. Индекс может оставаться неверным даже после пересборки, если другие порты также определяют свою потребность в зависимостях на основе существования других файлов.
-.Корректное объявление необязательной зависимости
+[[makefile-automatic-dependencies-good]]
+.Правильное объявление необязательной зависимости
[example]
====
+
[.programlisting]
....
OPTIONS_DEFINE= BAR
-BAR_DESC= Bar support
+BAR_DESC= Calling cellphones via bar
-.include <bsd.port.options.mk>
-
-.if ${PORT_OPTIONS:MBAR}
-LIB_DEPENDS= libbar.so:${PORTSDIR}/foo/bar
-.endif
+BAR_LIB_DEPENDS= libbar.so:foo/bar
....
====
-Правильным способом является проверка переменных параметров. Этот способ не приводит к несоответствиям в индексе набора портов, поскольку параметры определены до построения индекса. При этом можно использовать простые скрипты для автоматизации построения, установки и обновления этих портов и соответствующих им пакетов.
-
-[[use-want]]
-=== `USE_` и `WANT_`
-
-Переменные `USE_` задаются мейнтейнером порта для определения программного обеспечения, от которого этот порт зависит. Порт, для которого нужен Firefox, укажет
-
-[.programlisting]
-....
-USE_FIREFOX= yes
-....
-
-Некоторые переменные `USE_` могут принимать номера версий или другие параметры. Например, порт, который требует Apache 2.2, укажет
-
-[.programlisting]
-....
-USE_APACHE= 22
-....
+Проверка переменных опций является правильным методом. Это не вызовет несоответствий в индексе группы портов, при условии что опции были определены до сборки индекса. Затем можно использовать простые скрипты для автоматизации сборки, установки и обновления этих портов и их пакетов.
-В некоторых случаях для большего контроля над зависимостями используются переменные `WANT_`, которые позволяют указывать требования в более точной форме. Например, взгляните на порт package:mail/squirrelmail[]. Этому порту нужны несколько модулей PHP, которые перечислены в переменной `USE_PHP`:
+[[makefile-masterdir]]
+== Подчиненные порты и `MASTERDIR`
-[.programlisting]
-....
-USE_PHP= session mhash gettext mbstring pcre openssl xml
-....
+Если порту необходимо собирать немного разные версии пакетов, используя переменную (например, разрешение или размер бумаги) с разными значениями, создайте по одному подкаталогу для каждого пакета, чтобы пользователям было проще понять, что делать, но старайтесь максимально использовать общие файлы между портами. Обычно, при грамотном использовании переменных, во всех каталогах, кроме одного, требуется лишь очень короткий [.filename]#Makefile#. В единственном [.filename]#Makefile# укажите директорию с остальными файлами с помощью `MASTERDIR`. Также используйте переменную как часть crossref:makefiles[porting-pkgname,`PKGNAMESUFFIX`], чтобы пакеты имели разные имена.
-Эти модули доступны в версиях CLI и web, поэтому версия web выбрана с переменной `WANT_`:
+Это лучше всего продемонстрировать на примере. Это часть файла [.filename]#print/pkfonts300/Makefile#;
[.programlisting]
....
-WANT_PHP_WEB= yes
-....
-
-Имеющиеся переменные `USE_` и `WANT_` определены в файлах в [.filename]#/usr/ports/Mk#.
-
-[[makefile-masterdir]]
-== `MASTERDIR`
-
-Если вашему порту требуется построение довольно различающихся версий пакетов через переменную (задающую, например, разрешение, или размер бумаги), которая принимает различные значения, создайте для каждого пакета отдельный подкаталог, чтобы пользователям было легче определить, каким пакетом воспользоваться, но попробуйте использовать совместно между портами как можно больше файлов. В типичном случае вам потребуются только очень короткие файлы [.filename]#Makefile# во всех каталогах, кроме одного, если вы будете использовать переменные с умом. В отдельных файлах [.filename]#Makefile# вы можете использовать переменную `MASTERDIR` для указания каталога, в котором находятся все остальные файлы. Также используйте переменную как часть <<porting-pkgname,`PKGNAMESUFFIX`>>, чтобы пакеты имели разные имена.
+PORTNAME= pkfonts${RESOLUTION}
+PORTVERSION= 1.0
+DISTFILES= pk${RESOLUTION}.tar.gz
-Продемонстрируем это на примере. Вот часть файла [.filename]#japanese/xdvi300/Makefile#:
+PLIST= ${PKGDIR}/pkg-plist.${RESOLUTION}
-[.programlisting]
-....
-PORTNAME= xdvi
-PORTVERSION= 17
-PKGNAMEPREFIX= ja-
-PKGNAMESUFFIX= ${RESOLUTION}
- :
-# default
-RESOLUTION?= 300
+.if !defined(RESOLUTION)
+RESOLUTION= 300
+.else
.if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \
- ${RESOLUTION} != 300 && ${RESOLUTION} != 400
+ ${RESOLUTION} != 300 && ${RESOLUTION} != 360 && \
+ ${RESOLUTION} != 400 && ${RESOLUTION} != 600
+.BEGIN:
@${ECHO_MSG} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\""
- @${ECHO_MSG} "Possible values are: 118, 240, 300 (default) and 400."
+ @${ECHO_MSG} "Possible values are: 118, 240, 300, 360, 400 and 600."
@${FALSE}
.endif
+.endif
....
-Порт package:japanese/xdvi300[] содержит также все обычные патчи, файлы для пакета и так далее. Если вы введете здесь команду `make`, она возьмет в качестве разрешения значение по умолчанию (300) и построит порт обычным образом.
+Пакет `package:print/pkfonts300[]` также содержит все обычные исправления, файлы пакетов и т.д. При запуске `make` в этом месте будет взято значение разрешения по умолчанию (300), и порт будет собран в обычном режиме.
-Для другого разрешения приведем _полный_[.filename]#xdvi118/Makefile#:
+Что касается других разрешений, это _полный_ [.filename]#print/pkfonts360/Makefile#:
[.programlisting]
....
-RESOLUTION= 118
-MASTERDIR= ${.CURDIR}/../xdvi300
+RESOLUTION= 360
+MASTERDIR= ${.CURDIR}/../pkfonts300
-.include "${MASTERDIR}/Makefile"
+.include "${MASTERDIR}/Makefile"
....
-([.filename]#xdvi240/Makefile# и [.filename]#xdvi400/Makefile# похожи). Задание `MASTERDIR` говорит [.filename]#bsd.port.mk#, что обычный набор подкаталогов типа `FILESDIR` и `SCRIPTDIR` находится в каталоге [.filename]#xdvi300#. Строчка `RESOLUTION=118` переопределят строку `RESOLUTION=300` в файле [.filename]#xdvi300/Makefile# и порт будет построен с разрешением 118.
+([.filename]#print/pkfonts118/Makefile#, [.filename]#print/pkfonts600/Makefile# и все остальные аналогичны). Определение `MASTERDIR` указывает [.filename]#bsd.port.mk#, что стандартный набор подкаталогов, таких как `FILESDIR` и `SCRIPTDIR`, следует искать в [.filename]#pkfonts300#. Строка `RESOLUTION=360` переопределит строку `RESOLUTION=300` в [.filename]#pkfonts300/Makefile#, и порт будет собран с разрешением, установленным на 360.
[[makefile-manpages]]
-== Страницы Справочника
+== Страницы Cправочника
-Если ваш порт определяет корнем для файлов Справочника каталог, отличный от `PREFIX`, вы можете использовать переменную `MANDIRS`, чтобы указать эти каталоги. Обратите внимание, что файлы страниц справочника следует размещать в [.filename]#pkg-plist# наряду с остальными файлами. `MANDIRS` предназначена для автоматического сжатия страниц справочника, так чтобы имена файлов оканчивались на [.filename]#.gz#.
+Если порт размещает дерево man в другом месте, отличном от `PREFIX`, используйте `MANDIRS` для указания этих каталогов. Обратите внимание, что файлы, соответствующие страницам руководства, должны быть добавлены в [.filename]#pkg-plist# вместе с остальными файлами. Назначение `MANDIRS` — обеспечить автоматическое сжатие страниц руководства, поэтому имена файлов имеют суффикс [.filename]#.gz#.
[[makefile-info]]
-== Файлы в формате info
+== Файлы информации
-Если в вашем пакете нужна установка файлов GNU info, они должны быть перечислены в переменной `INFO` (без окончания `.info`), по записи на документ. Предполагается, что эти файлы устанавливаются в [.filename]#PREFIX/INFO_PATH#. Вы можете изменить `INFO_PATH`, если ваш пакет использует другое место для размещения. Однако, это не рекомендуется делать. Эти записи всего лишь содержат путь относительно [.filename]#PREFIX/INFO_PATH#. Например, package:lang/gcc34[] устанавливает файлы info в [.filename]#PREFIX/INFO_PATH/gcc34#, и в `INFO` будет что-то вроде этого:
+Если пакету требуется установить файлы GNU info, перечислите их в `INFO` (без завершающего `.info`), по одному документу на строку. Предполагается, что эти файлы будут установлены в [.filename]#PREFIX/INFO_PATH#. Измените `INFO_PATH`, если пакет использует другое расположение. Однако это не рекомендуется. Эти записи содержат только путь относительно [.filename]#PREFIX/INFO_PATH#. Например, пакет package:lang/gcc34[] устанавливает файлы info в [.filename]#PREFIX/INFO_PATH/gcc34#, и `INFO` будет выглядеть примерно так:
[.programlisting]
....
INFO= gcc34/cpp gcc34/cppinternals gcc34/g77 ...
....
-Перед регистрацией пакета соответствующий код установки/удаления будет автоматически добавлен во временный [.filename]#pkg-plist#.
+Соответствующий код установки/удаления будет автоматически добавлен во временный файл [.filename]#pkg-plist# перед регистрацией пакета.
[[makefile-options]]
-== Опции для Makefile
+== Параметры Makefile
-Многие приложения могут быть построены в различных конфигурациях и с дополнительной функциональностью. Например, выбор естественного (человеческого) языка, GUI против командной строки или типа используемой базы данных. Пользователи могут нуждаться в различных конфигурациях, отличных от используемой по умолчанию, поэтому в системе портов предусмотрен механизм, позволяющий автору порта управлять сборкой того или иного варианта конфигурации. Правильная поддержка этих необязательных параметров облегчает пользователям жизнь и даёт два или более порта по цене одного.
-
-=== Knobs
-
-==== `WITH__*_` и `WITHOUT__*_`
-
-Эти переменные предназначены для установки системным администратором. Многие из них стандартизованы в файле http://svnweb.FreeBSD.org/ports/head/KNOBS?view=markup[ports/KNOBS].
-
-При создании порта не давайте имя для knob, специфичное для данного приложения. На примере порта Avahi, используйте `WITHOUT_MDNS` вместо `WITHOUT_AVAHI_MDNS`.
-
-[NOTE]
-====
-Не стоит рассчитывать, что `WITH__*_` обязательно имеет соответствующую переменную `WITHOUT__*_`, и наоборот. В общем случае, предполагается значение по умолчанию.
-====
-
-[NOTE]
-====
-Если обратное не указано, то проверяется только факт установки самих переменных, но не их конкретное значение типа `YES` или `NO`.
-====
-
-.Основные переменные `WITH__*_` и `WITHOUT__*_`
-[cols="1,1", frame="none", options="header"]
-|===
-| Переменная
-| Значение
-
-|`WITH_OPENSSL_BASE`
-|Использовать версию OpenSSL из базовой системы.
-
-|`WITH_OPENSSL_PORT`
-|Устанавливает версию OpenSSL из package:security/openssl[], даже если в базовой системе последняя версия.
-|===
-
-==== Наименование KNOBS
-
-Портеры должны использовать так называемые knobs для помощи конечным пользователям и для поддержания количества наименований knobs в небольшом количестве. Список популярных названий knobs можно найти в файле http://svnweb.FreeBSD.org/ports/head/KNOBS?view=markup[KNOBS]
-
-Названия knobs должны отражать, что это такое и что выполняет. Если у порта имеется библиотечный префикс в `PORTNAME`, то он должен присутствовать в названии knobs.
+Многие приложения могут быть собраны с дополнительными или различными конфигурациями. Примеры включают выбор естественного (человеческого) языка, графический интерфейс или командная строка, тип поддерживаемой базы данных. Пользователям может потребоваться конфигурация, отличная от стандартной, поэтому система портов предоставляет хуки, которые автор порта может использовать для управления вариантом сборки. Правильная поддержка этих опций сделает пользователей счастливыми и эффективно предоставит два или более порта по цене одного.
+[[makefile-options-options]]
=== `OPTIONS`
-==== Описание
+[[makefile-options-background]]
+==== Пояснения
-При установке порта переменные `OPTIONS_*` предоставляют пользователю окно диалога с отображением доступных параметров, с записью выбранных параметров в файл [.filename]#/var/db/ports/${UNIQUENAME}/options#. Эти опции повторно используются при следующем построении порта.
+`OPTIONS_*` предоставляют пользователю, устанавливающему порт, диалоговое окно с доступными опциями, после чего сохраняют выбранные опции в [.filename]#${PORT_DBDIR}/${OPTIONS_NAME}/options#. При следующей сборке порта эти опции будут использованы повторно. `PORT_DBDIR` по умолчанию имеет значение [.filename]#/var/db/ports#. `OPTIONS_NAME` соответствует имени порта (origin) с заменой разделителя на подчёркивания, например, для package:dns/bind99[] это будет `dns_bind99`.
-Когда пользователь запускает `make config` (или запускает впервые `make build`), инфраструктура выполняет проверку существования файла [.filename]#/var/db/ports/${UNIQUENAME}/options#. Если этот файл не существует, то используются значения `OPTIONS_*` и отображается диалоговое окно, в котором эти параметры можно включить или выключить. Затем сохраняется файл опций [.filename]#options#, и выбранные переменные используются при построении порта.
+Когда пользователь запускает `make config` (или впервые запускает `make build`), система проверяет наличие файла [.filename]#${PORT_DBDIR}/${OPTIONS_NAME}/options#. Если этот файл не существует, используются значения `OPTIONS_*`, и отображается диалоговое окно, где можно включить или отключить опции. Затем файл [.filename]#options# сохраняется, а настроенные переменные используются при сборке порта.
-Если новая версия порта добавляет новые значения `OPTIONS`, то пользователю будет представлено окно диалога с сохраненными заполненными значениями старых `OPTIONS.`
+Если новая версия порта добавляет новые `OPTIONS`, пользователю будет показан диалог с сохранёнными значениями старых `OPTIONS`, заполненными заранее.
-`make showconfig` отображает сохраненную конфигурацию. Для удаления сохраненной конфигурации используйте `make rmconfig`.
+`make showconfig` показывает сохранённую конфигурацию. Используйте `make rmconfig` для удаления сохранённой конфигурации.
+[[makefile-options-syntax]]
==== Синтаксис
-`OPTIONS_DEFINE` содержит список используемых `OPTIONS`. Они независимы друг от друга и не сгруппированы:
+`OPTIONS_DEFINE` содержит список `OPTIONS`, которые будут использоваться. Они независимы друг от друга и не сгруппированы:
[.programlisting]
....
OPTIONS_DEFINE= OPT1 OPT2
....
-Далее после определения следует описание `OPTIONS` (не является обязательным, но настоятельно рекомендуется):
+После определения `OPTIONS` описываются (необязательно, но настоятельно рекомендуется):
[.programlisting]
....
@@ -1699,19 +3544,19 @@ OPT5_DESC= Describe OPT5
OPT6_DESC= Describe OPT6
....
+[.filename]#ports/Mk/bsd.options.desc.mk# содержит описания для многих распространённых `OPTIONS`. Хотя они часто полезны, переопределите их, если описание недостаточно для порта.
+
[TIP]
====
-
-[.filename]#ports/Mk/bsd.options.desc.mk# содержит описание множества наиболее используемых `OPTIONS`; переопределять их, как правило, не нужно.
+При описании параметров рассматривайте их с точки зрения пользователя: «Какую функциональность это изменяет?» и «Зачем мне включать этот параметр?» Не просто повторяйте название. Например, описание параметра `NLS` как «включить поддержку NLS» не помогает пользователю, который уже видит название параметра, но может не знать, что оно означает. Описание вроде «Поддержка родного языка с помощью утилиты gettext» гораздо полезнее.
====
-[TIP]
+[IMPORTANT]
====
-
-При описании параметров старайтесь представить себя на месте пользователя: "Что это делает?" и "Для чего бы я захотел включить это?" Не делайте простое повторение названия. Например, описание параметра `NLS` как "include NLS support" ("включить поддержку NLS") не поможет пользователю, который уже видит название параметра, но может не знать, что это означает. Описав его как "Native Language Support via gettext utilities" ("Поддержка национального языка через утилиты gettext"), вы поможете пользователю гораздо больше.
+Названия параметров всегда пишутся в верхнем регистре. Они не могут использовать смешанный регистр или нижний регистр.
====
-`OPTIONS` можно группировать в виде переключателей, для которых разрешен выбор единственного варианта в каждой группе:
+`OPTIONS` могут быть сгруппированы как переключаемые варианты, где допускается только один выбор из каждой группы:
[.programlisting]
....
@@ -1719,7 +3564,12 @@ OPTIONS_SINGLE= SG1
OPTIONS_SINGLE_SG1= OPT3 OPT4
....
-`OPTIONS` можно группировать в виде переключателей, для которых разрешен выбор единственного варианта (или ни одного) в каждой группе:
+[WARNING]
+====
+В каждый момент времени _должна_ быть выбрана одна опция из каждой группы `OPTIONS_SINGLE`, чтобы параметры были действительными. Один вариант из каждой группы _должен_ быть добавлен в `OPTIONS_DEFAULT`.
+====
+
+`OPTIONS` могут быть сгруппированы как переключаемые варианты, где ни один или только один вариант из каждой группы разрешён:
[.programlisting]
....
@@ -1727,7 +3577,7 @@ OPTIONS_RADIO= RG1
OPTIONS_RADIO_RG1= OPT7 OPT8
....
-`OPTIONS` также можно группировать в виде списков со множественным выбором, для которых обязан быть включен _по крайней мере один_ из параметров:
+`OPTIONS` также могут быть сгруппированы в виде списков "множественного выбора", где _хотя бы одна_ опция должна быть включена:
[.programlisting]
....
@@ -1735,7 +3585,7 @@ OPTIONS_MULTI= MG1
OPTIONS_MULTI_MG1= OPT5 OPT6
....
-`OPTIONS` также можно группировать в виде списков со множественным выбором, для которых могут быть включены любые параметры, включая отсутствие выбора:
+`OPTIONS` также могут быть сгруппированы в виде списков "множественного выбора", где ни одна или любые опции могут быть включены:
[.programlisting]
....
@@ -1743,36 +3593,31 @@ OPTIONS_GROUP= GG1
OPTIONS_GROUP_GG1= OPT9 OPT10
....
-По умолчанию `OPTIONS` находится в выключенном положении, если при этом оно также отсутствует в списке `OPTIONS_DEFAULT`:
+`OPTIONS` по умолчанию не установлены, если они не перечислены в `OPTIONS_DEFAULT`:
[.programlisting]
....
OPTIONS_DEFAULT= OPT1 OPT3 OPT6
....
-Определения `OPTIONS` обязаны быть до подключения [.filename]#bsd.port.options.mk#. Переменные `PORT_OPTIONS` могут быть проверены только после подключения [.filename]#bsd.port.options.mk#. Вместо этого также можно использовать подключение [.filename]#bsd.port.pre.mk#, что все еще широко используется в портах, написанных до появления [.filename]#bsd.port.options.mk#. Но имейте в виду, что некоторые переменные, обычно, это некоторые флаги `USE_*`, после подключения [.filename]#bsd.port.pre.mk# будут работать не так, как этого от них ожидают.
+Определения `OPTIONS` должны быть указаны до включения файла [.filename]#bsd.port.options.mk#. Значения `PORT_OPTIONS` можно проверять только после включения [.filename]#bsd.port.options.mk#. Включение [.filename]#bsd.port.pre.mk# также может использоваться и до сих пор широко применяется в портах, написанных до введения [.filename]#bsd.port.options.mk#. Однако следует учитывать, что некоторые переменные не будут работать как ожидается после включения [.filename]#bsd.port.pre.mk#, обычно это некоторые флаги `USE_*`.
[[ports-options-simple-use]]
.Простое использование `OPTIONS`
[example]
====
+
[.programlisting]
....
OPTIONS_DEFINE= FOO BAR
-FOO_DESC= Enable option foo
-BAR_DESC= Support feature bar
+OPTIONS_DEFAULT=FOO
-.include <bsd.port.options.mk>
-
-.if ${PORT_OPTIONS:MFOO}
-CONFIGURE_ARGS+=--with-foo
-.else
-CONFIGURE_ARGS+=--without-foo
-.endif
+FOO_DESC= Option foo support
+BAR_DESC= Feature bar support
-.if ${PORT_OPTIONS:MBAR}
-RUN_DEPENDS+= bar:${PORTSDIR}/bar/bar
-.endif
+# Will add --with-foo / --without-foo
+FOO_CONFIGURE_WITH= foo
+BAR_RUN_DEPENDS= bar:bar/bar
.include <bsd.port.mk>
....
@@ -1780,9 +3625,10 @@ RUN_DEPENDS+= bar:${PORTSDIR}/bar/bar
====
[[ports-options-check-unset]]
-.Проверка незаданных значений `OPTIONS`
+.Проверка неустановленных `OPTIONS` порта
[example]
====
+
[.programlisting]
....
.if ! ${PORT_OPTIONS:MEXAMPLES}
@@ -1790,15 +3636,25 @@ CONFIGURE_ARGS+=--without-examples
.endif
....
+Приведённая выше форма не рекомендуется. Предпочтительный метод — использование параметра configure для фактического включения и отключения функции в соответствии с опцией:
+
+[.programlisting]
+....
+# Will add --with-examples / --without-examples
+EXAMPLES_CONFIGURE_WITH= examples
+....
+
====
[[ports-options-practical-use]]
.Пример реального использования `OPTIONS`
[example]
====
+
[.programlisting]
....
OPTIONS_DEFINE= EXAMPLES
+OPTIONS_DEFAULT= PGSQL LDAP SSL
OPTIONS_SINGLE= BACKEND
OPTIONS_SINGLE_BACKEND= MYSQL PGSQL BDB
@@ -1814,100 +3670,150 @@ LDAP_DESC= Build with LDAP authentication support
PAM_DESC= Build with PAM support
SSL_DESC= Build with OpenSSL support
-OPTIONS_DEFAULT= PGSQL LDAP SSL
-
-.include <bsd.port.options.mk>
-
-.if ${PORT_OPTIONS:MPGSQL}
-USE_PGSQL= yes
-CONFIGURE_ARGS+= --with-postgres
-.else
-CONFIGURE_ARGS+= --without-postgres
-.endif
+# Will add USE_PGSQL=yes
+PGSQL_USE= pgsql=yes
+# Will add --enable-postgres / --disable-postgres
+PGSQL_CONFIGURE_ENABLE= postgres
-.if ${PORT_OPTIONS:MICU}
-LIB_DEPENDS+= libicuuc.so:${PORTSDIR}/devel/icu
-.endif
+ICU_LIB_DEPENDS= libicuuc.so:devel/icu
-.if ! ${PORT_OPTIONS:MEXAMPLES}
-CONFIGURE_ARGS+= --without-examples
-.endif
+# Will add --with-examples / --without-examples
+EXAMPLES_CONFIGURE_WITH= examples
-# Проверка других параметров OPTIONS
+# Check other OPTIONS
.include <bsd.port.mk>
....
====
-==== Параметры по умолчанию
+[[makefile-options-default]]
+==== Опции по умолчанию
-Следующие параметры по умолчанию всегда включены.
+Эти опции всегда включены по умолчанию.
-* `DOCS` - построение и установка документации.
-* `NLS` - интернационализация.
-* `EXAMPLES` - построение и установка примеров использования.
-* `IPV6` - поддержка протокола IPv6.
+* `DOCS` — сборка и установка документации.
+* `NLS` — Поддержка родного языка.
+* `EXAMPLES` — сборка и установка примеров.
+* `IPV6` — Поддержка протокола IPv6.
[NOTE]
====
-Нет необходимости добавлять эти параметры в `OPTIONS_DEFAULT`. Тем не менее, чтобы отобразить их в окне диалога выбора параметров, они должны быть добавлены в `OPTIONS_DEFINE`.
+Нет необходимости добавлять их в `OPTIONS_DEFAULT`. Однако, чтобы они были активны и отображались в диалоге выбора опций, их необходимо добавить в `OPTIONS_DEFINE`.
====
-=== Функция автоматической активации
+[[makefile-options-auto-activation]]
+=== Автоматическая активация функций
-При использовании сценария GNU configure, следите за тем, какие необязательные функции задействуются посредством автоматической активации. Отключайте явным образом те необязательные функции, которые вы не хотели бы использовать, через передачу соответствующих `--without-xxx` или `--disable-xxx` в переменной `CONFIGURE_ARGS`.
+При использовании скрипта GNU configure следите за тем, какие дополнительные функции активируются автоматическим определением. Явно отключите ненужные дополнительные функции, добавив `--without-xxx` или `--disable-xxx` в `CONFIGURE_ARGS`.
-.Неправильное управление опцией
+[[makefile-options-auto-activation-bad]]
+.Неправильная обработка опции
[example]
====
+
[.programlisting]
....
.if ${PORT_OPTIONS:MFOO}
-LIB_DEPENDS+= libfoo.so:${PORTSDIR}/devel/foo
+LIB_DEPENDS+= libfoo.so:devel/foo
CONFIGURE_ARGS+= --enable-foo
.endif
....
====
-В приведенном выше примере представьте себе библиотеку libfoo, установленную в системе. Пользователь не желает, чтобы приложение использовало libfoo, и поэтому он выключает соответствующую опцию в диалоге `make config`. Но сценарий configure приложения определяет наличие библиотеки в системе и включает ее поддержку в итоговый исполняемый файл. Теперь, когда пользователь решит удалить libfoo из системы, система портов позволит это сделать (т.к. зависимость от libfoo не была записана), но приложение перестанет работать.
+В приведённом выше примере представьте, что библиотека libfoo установлена в системе. Пользователь не хочет, чтобы это приложение использовало libfoo, поэтому он отключил соответствующую опцию в диалоге `make config`. Однако скрипт configure приложения обнаруживает библиотеку в системе и включает её поддержку в итоговом исполняемом файле. Теперь, когда пользователь решает удалить libfoo из системы, система портов не протестует (зависимость от libfoo не была записана), но приложение перестаёт работать.
-.Правильное управление опцией
+[[makefile-options-auto-activation-good]]
+.Правильная обработка опции
[example]
====
+
[.programlisting]
....
-.if ${PORT_OPTIONS:MFOO}
-LIB_DEPENDS+= libfoo.so:${PORTSDIR}/devel/foo
-CONFIGURE_ARGS+= --enable-foo
-.else
-CONFIGURE_ARGS+= --disable-foo
-.endif
+FOO_LIB_DEPENDS= libfoo.so:devel/foo
+# Will add --enable-foo / --disable-foo
+FOO_CONFIGURE_ENABLE= foo
....
====
-Во втором примере библиотека libfoo отключена явным образом. Сценарий configure не включает соответствующие функции в приложении, несмотря на присутствие библиотеки в системе.
-
[NOTE]
====
-При определенных условиях сокращенный синтаксис записи условий может вызывать проблемы со сложными конструкциями. Если вы получаете ошибки, такие как `Malformed conditional`, то может быть использован альтернативный синтаксис.
+В некоторых случаях сокращенный синтаксис условных выражений может вызывать проблемы со сложными конструкциями. Ошибки обычно имеют вид `Malformed conditional`, тогда можно использовать альтернативный синтаксис.
[.programlisting]
....
.if !empty(VARIABLE:MVALUE)
-# as an alternative to
+....
+
+в качестве альтернативы
+
+[.programlisting]
+....
.if ${VARIABLE:MVALUE}
....
====
-=== Вспомогательные макросы
+[[options-helpers]]
+=== Помощники параметров
+
+Существуют макросы, которые помогают упростить условные значения, различающиеся в зависимости от установленных опций. Для удобства приведён полный список:
+
+`PLIST_SUB`, `SUB_LIST`::
+Для автоматической генерации `%%_OPT_%%` и `%%NO__OPT__%%` см. crossref:makefiles[options_sub, `OPTIONS_SUB`].
++
+Для более сложных случаев использования см. crossref:makefiles[options-variables, Замена общих переменных, `OPT_VARIABLE` и `OPT_VARIABLE_OFF`].
+
+`CONFIGURE_ARGS`::
+Для информации о `--enable-_x_` и `--disable-_x_` см. crossref:makefiles[options-configure_enable, `OPT_CONFIGURE_ENABLE`].
++
+О `--with-_x_` и `--without-_x_` см. crossref:makefiles[options-configure_with, `OPT_CONFIGURE_WITH`].
++
+Во всех остальных случаях см. crossref:makefiles[options-configure_on, `OPT_CONFIGURE_ON` и `OPT_CONFIGURE_OFF`].
+
+`CMAKE_ARGS`::
+Для аргументов, которые являются булевыми значениями (`on`, `off`, `true`, `false`, `0`, `1`), см. crossref:makefiles[options-cmake_bool, `OPT_CMAKE_BOOL` и `OPT_CMAKE_BOOL_OFF`].
++
+Для всех остальных случаев см. crossref:makefiles[options-cmake_on, `OPT_CMAKE_ON` и `OPT_CMAKE_OFF`].
+
+`MESON_ARGS`::
+Для аргументов, принимающих `true` или `false`, см. crossref:makefiles[options-meson_true, `OPT_MESON_TRUE` и `OPT_MESON_FALSE`].
++
+Для аргументов, принимающих `yes` или `no`, используйте crossref:makefiles[options-meson_yes, `OPT_MESON_YES` и `OPT_MESON_NO`].
++
+Для аргументов, принимающих `enabled` или `disabled`, см. crossref:makefiles[options-meson_enabled, `OPT_MESON_ENABLED` и `OPT_MESON_DISABLED`].
++
+Во всех остальных случаях используйте crossref:makefiles[options-meson_on, `OPT_MESON_ON` и `OPT_MESON_OFF`].
+
+`QMAKE_ARGS`::
+См. crossref:makefiles[options-qmake_on, `OPT_QMAKE_ON` и `OPT_QMAKE_OFF`].
-Существует несколько макросов, упрощающих запись условных значений, которые отличаются в зависимости от набора параметров.
+`USE_*`::
+См. crossref:makefiles[options-use, `OPT_USE` и `OPT_USE_OFF`].
-Если переменная `OPTIONS_SUB` имеет значение `yes`, то каждый из указанных в `OPTIONS_DEFINE` параметров будет добавлен в `PLIST_SUB`. Следующая запись:
+`*_DEPENDS`::
+См. crossref:makefiles[options-dependencies, Зависимости, `OPT_DEPTYPE` и `OPT_DEPTYPE_OFF`].
+
+`*` (Любая переменная)::
+Наиболее используемые переменные имеют своих помощников, см. crossref:makefiles[options-variables, Замена Общих Переменных, `OPT_VARIABLE` и `OPT_VARIABLE_OFF`].
++
+Для любой переменной без специального помощника см. crossref:makefiles[options-vars, `OPT_VARS` и `OPT_VARS_OFF`].
+
+Зависимости параметров::
+Когда для работы опции требуется другая опция, см. crossref:makefiles[options-implies, `OPT_IMPLIES`].
+
+Конфликты опций::
+Когда опция не может работать, если включена другая, см. crossref:makefiles[options-prevents, `OPT_PREVENTS` и `OPT_PREVENTS_MSG`].
+
+Цели сборки::
+Когда для опции требуется дополнительная обработка, см. crossref:makefiles[options-targets, Дополнительные цели сборки, `_target_-_OPT_-on` и `_target_-_OPT_-off`].
+
+[[options_sub]]
+==== `OPTIONS_SUB`
+
+Если `OPTIONS_SUB` установлен в `yes`, то каждая из опций, добавленных в `OPTIONS_DEFINE`, будет добавлена в `PLIST_SUB` и `SUB_LIST`, например:
[.programlisting]
....
@@ -1915,7 +3821,7 @@ OPTIONS_DEFINE= OPT1
OPTIONS_SUB= yes
....
-соответствует:
+эквивалентно:
[.programlisting]
....
@@ -1924,21 +3830,33 @@ OPTIONS_DEFINE= OPT1
.include <bsd.port.options.mk>
.if ${PORT_OPTIONS:MOPT1}
-PLIST_SUB+= OPT1=""
+PLIST_SUB+= OPT1="" NO_OPT1="@comment "
+SUB_LIST+= OPT1="" NO_OPT1="@comment "
.else
-PLIST_SUB+= OPT1="@comment "
+PLIST_SUB+= OPT1="@comment " NO_OPT1=""
+SUB_LIST+= OPT1="@comment " NO_OPT1=""
.endif
....
-`X_CONFIGURE_ENABLE` дописывает в `CONFIGURE_ARGS` строку `--enable-${X_CONFIGURE_ENABLE}` или `--disable-${X_CONFIGURE_ENABLE}` в соответствии с состоянием `X`. Следующая запись:
+[NOTE]
+====
+Значение `OPTIONS_SUB` игнорируется. Установка любого значения добавит записи `PLIST_SUB` и `SUB_LIST` для _всех_ опций.
+====
+
+[[options-use]]
+==== `OPT_USE` и `OPT_USE_OFF`
+
+Когда выбрана опция _OPT_, для каждой пары `_ключ=значение_` в ``OPT_USE``, _значение_ добавляется к соответствующему `USE_KEY`. Если _значение_ содержит пробелы, замените их запятыми, и они будут преобразованы обратно в пробелы во время обработки. `OPT_USE_OFF` работает аналогично, но когда `OPT` _не_ выбрана. Например:
[.programlisting]
....
OPTIONS_DEFINE= OPT1
-OPT1_CONFIGURE_ENABLE= test
+OPT1_USES= xorg
+OPT1_USE= mysql=yes xorg=x11,xextproto,xext,xrandr
+OPT1_USE_OFF= openssl=yes
....
-соответствует:
+эквивалентно:
[.programlisting]
....
@@ -1947,21 +3865,30 @@ OPTIONS_DEFINE= OPT1
.include <bsd.port.options.mk>
.if ${PORT_OPTIONS:MOPT1}
-CONFIGURE_ARGS+= --enable-test
+USE_MYSQL= yes
+USES+= xorg
+USE_XORG= x11 xextproto xext xrandr
.else
-CONFIGURE_ARGS+= --disable-test
+USE_OPENSSL= yes
.endif
....
-`X_CONFIGURE_WITH` дописывает в `CONFIGURE_ARGS` строку `--with-${X_CONFIGURE_WITH}` или `--without-${X_CONFIGURE_WITH}` в соответствии с состоянием `X`. Следующая запись:
+[[options-configure-helpers]]
+==== Помощники `CONFIGURE_ARGS`
+
+[[options-configure_enable]]
+===== `OPT_CONFIGURE_ENABLE`
+
+Когда выбрана опция _OPT_, для каждого _элемента_ в `OPT_CONFIGURE_ENABLE` к `CONFIGURE_ARGS` добавляется `--enable-_элемент_`. Если опция _OPT_ _не_ выбрана, к `CONFIGURE_ARGS` добавляется `--disable-_элемент_`. Необязательный аргумент может быть указан с помощью символа `=`. Этот аргумент добавляется только к опции конфигурации `--enable-_элемент_`. Например:
[.programlisting]
....
-OPTIONS_DEFINE= OPT1
-OPT1_CONFIGURE_WITH= test
+OPTIONS_DEFINE= OPT1 OPT2
+OPT1_CONFIGURE_ENABLE= test1 test2
+OPT2_CONFIGURE_ENABLE= test2=exhaustive
....
-соответствует:
+эквивалентно:
[.programlisting]
....
@@ -1970,21 +3897,64 @@ OPTIONS_DEFINE= OPT1
.include <bsd.port.options.mk>
.if ${PORT_OPTIONS:MOPT1}
-CONFIGURE_ARGS+= --with-test
+CONFIGURE_ARGS+= --enable-test1 --enable-test2
+.else
+CONFIGURE_ARGS+= --disable-test1 --disable-test2
+.endif
+
+.if ${PORT_OPTIONS:MOPT2}
+CONFIGURE_ARGS+= --enable-test2=exhaustive
+.else
+CONFIGURE_ARGS+= --disable-test2
+.endif
+....
+
+[[options-configure_with]]
+===== `OPT_CONFIGURE_WITH`
+
+Когда выбрана опция _OPT_, для каждого _элемента_ в `_OPT_CONFIGURE_WITH` к `CONFIGURE_ARGS` добавляется `--with-_элемент_`. Если опция _OPT_ _не_ выбрана, к `CONFIGURE_ARGS` добавляется `--without-_элемент_`. Необязательный аргумент можно указать с помощью символа `=`. Этот аргумент добавляется только к опции конфигурации `--with-_элемент_`. Например:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1 OPT2
+OPT1_CONFIGURE_WITH= test1
+OPT2_CONFIGURE_WITH= test2=exhaustive
+....
+
+эквивалентно:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1 OPT2
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MOPT1}
+CONFIGURE_ARGS+= --with-test1
+.else
+CONFIGURE_ARGS+= --without-test1
+.endif
+
+.if ${PORT_OPTIONS:MOPT2}
+CONFIGURE_ARGS+= --with-test2=exhaustive
.else
-CONFIGURE_ARGS+= --without-test
+CONFIGURE_ARGS+= --without-test2
.endif
....
-Значение переменной `X_CONFIGURE_ON` будет дописано в `CONFIGURE_ARGS` в соответствии с состоянием `X`. Следующая запись:
+[[options-configure_on]]
+===== `OPT_CONFIGURE_ON` и `OPT_CONFIGURE_OFF`
+
+Когда выбрана опция _OPT_, значение `OPT_CONFIGURE_ON`, если оно определено, добавляется к `CONFIGURE_ARGS`. `OPT_CONFIGURE_OFF` работает аналогично, но когда `OPT` _не_ выбрана. Например:
[.programlisting]
....
OPTIONS_DEFINE= OPT1
OPT1_CONFIGURE_ON= --add-test
+OPT1_CONFIGURE_OFF= --no-test
....
-соответствует:
+эквивалентно:
[.programlisting]
....
@@ -1994,37 +3964,65 @@ OPTIONS_DEFINE= OPT1
.if ${PORT_OPTIONS:MOPT1}
CONFIGURE_ARGS+= --add-test
+.else
+CONFIGURE_ARGS+= --no-test
.endif
....
-Значение переменной `X_CONFIGURE_OFF` будет дописано в `CONFIGURE_ARGS` в соответствии с состоянием `X`. Следующая запись:
+[TIP]
+====
+В большинстве случаев помощники crossref:makefiles[options-configure_enable, `OPT_CONFIGURE_ENABLE`] и crossref:makefiles[options-configure_with, `OPT_CONFIGURE_WITH`] предоставляют более короткий и понятный функционал.
+====
+
+[[options-cmake-helpers]]
+==== Помощники `CMAKE_ARGS`
+
+[[options-cmake_on]]
+===== `OPT_CMAKE_ON` и `OPT_CMAKE_OFF`
+
+Когда выбрана опция _OPT_, значение `OPT_CMAKE_ON`, если оно определено, добавляется к `CMAKE_ARGS`. `OPT_CMAKE_OFF` работает аналогично, но когда `OPT` _не_ выбрана. Например:
[.programlisting]
....
OPTIONS_DEFINE= OPT1
-OPT1_CONFIGURE_OFF= --no-test
+OPT1_CMAKE_ON= -DTEST:BOOL=true -DDEBUG:BOOL=true
+OPT1_CMAKE_OFF= -DOPTIMIZE:BOOL=true
....
-соответствует:
+эквивалентно:
[.programlisting]
....
OPTIONS_DEFINE= OPT1
+
.include <bsd.port.options.mk>
-.if ! ${PORT_OPTIONS:MOPT1}
-CONFIGURE_ARGS+= --no-test
+
+.if ${PORT_OPTIONS:MOPT1}
+CMAKE_ARGS+= -DTEST:BOOL=true -DDEBUG:BOOL=true
+.else
+CMAKE_ARGS+= -DOPTIMIZE:BOOL=true
.endif
....
-Значение переменной `X_CMAKE_ON` будет дописано в `CMAKE_ARGS` в соответствии с состоянием `X`. Следующая запись:
+[TIP]
+====
+
+См. crossref:makefiles[options-cmake_bool, `OPT_CMAKE_BOOL` и `OPT_CMAKE_BOOL_OFF`] для более краткой записи, когда значение является булевым.
+====
+
+[[options-cmake_bool]]
+===== `OPT_CMAKE_BOOL` и `OPT_CMAKE_BOOL_OFF`
+
+Когда выбрана опция _OPT_, для каждого _элемента_ в `OPT_CMAKE_BOOL` добавляется `-D_элемент_:BOOL=true` к `CMAKE_ARGS`. Если опция _OPT_ _не_ выбрана, `-D_элемент_:BOOL=false` добавляется к `CONFIGURE_ARGS`. `OPT_CMAKE_BOOL_OFF` работает наоборот: `-D_элемент_:BOOL=false` добавляется к `CMAKE_ARGS`, когда опция выбрана, и `-D_элемент_:BOOL=true`, когда опция _не_ выбрана. Например:
[.programlisting]
....
OPTIONS_DEFINE= OPT1
-OPT1_CMAKE_ON= -DTEST:BOOL=true
+OPT1_CMAKE_BOOL= TEST DEBUG
+OPT1_CMAKE_BOOL_OFF= OPTIMIZE
....
-соответствует:
+эквивалентно:
[.programlisting]
....
@@ -2033,19 +4031,30 @@ OPTIONS_DEFINE= OPT1
.include <bsd.port.options.mk>
.if ${PORT_OPTIONS:MOPT1}
-CMAKE_ARGS+= -DTEST:BOOL=true
+CMAKE_ARGS+= -DTEST:BOOL=true -DDEBUG:BOOL=true \
+ -DOPTIMIZE:BOOL=false
+.else
+CMAKE_ARGS+= -DTEST:BOOL=false -DDEBUG:BOOL=false \
+ -DOPTIMIZE:BOOL=true
.endif
....
-Значение переменной `X_CMAKE_OFF` будет дописано в `CMAKE_ARGS` в соответствии с состоянием `X`. Следующая запись:
+[[options-meson-helpers]]
+==== Помощники `MESON_ARGS`
+
+[[options-meson_on]]
+===== `OPT_MESON_ON` и `OPT_MESON_OFF`
+
+Когда выбрана опция _OPT_, значение `OPT_MESON_ON`, если оно определено, добавляется к `MESON_ARGS`. `OPT_MESON_OFF` работает аналогичным образом, но когда `OPT` _не_ выбрана. Например:
[.programlisting]
....
OPTIONS_DEFINE= OPT1
-OPT1_CMAKE_OFF= -DTEST:BOOL=false
+OPT1_MESON_ON= -Dopt=1
+OPT1_MESON_OFF= -Dopt=2
....
-соответствует:
+эквивалентно:
[.programlisting]
....
@@ -2053,42 +4062,55 @@ OPTIONS_DEFINE= OPT1
.include <bsd.port.options.mk>
-.if ! ${PORT_OPTIONS:MOPT1}
-CMAKE_ARGS+= -DTEST:BOOL=false
+.if ${PORT_OPTIONS:MOPT1}
+MESON_ARGS+= -Dopt=1
+.else
+MESON_ARGS+= -Dopt=2
.endif
....
-Для любой из следующих переменных:
+[[options-meson_true]]
+===== `OPT_MESON_TRUE` и `OPT_MESON_FALSE`
-* `ALL_TARGET`
-* `CATEGORIES`
-* `CFLAGS`
-* `CPPFLAGS`
-* `CXXFLAGS`
-* `CONFIGURE_ENV`
-* `DISTFILES`
-* `EXTRA_PATCHES`
-* `INSTALL_TARGET`
-* `LDFLAGS`
-* `MAKE_ARGS`
-* `MAKE_ENV`
-* `PATCH_SITES`
-* `PATCHFILES`
-* `PLIST_FILES`
-* `PLIST_DIRS`
-* `PLIST_DIRSTRY`
-* `USES`
+Когда выбрана опция _OPT_, для каждого _элемента_ в `OPT_MESON_TRUE` добавляется `-D_элемент_=true` в `MESON_ARGS`. Если опция _OPT_ _не_ выбрана, добавляется `-D_элемент_=false` в `MESON_ARGS`. `OPT_MESON_FALSE` работает противоположным образом: `-D_элемент_=false` добавляется в `MESON_ARGS`, когда опция выбрана, и `-D_элемент_=true`, когда опция _не_ выбрана. Например:
-Значение переменной `X_ABOVEVARIABLE` будет дописано в `ABOVEVARIABLE` в соответствии с состоянием `X`. Следующая запись:
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1
+OPT1_MESON_TRUE= test debug
+OPT1_MESON_FALSE= optimize
+....
+
+эквивалентно:
[.programlisting]
....
OPTIONS_DEFINE= OPT1
-OPT1_USES= gmake
-OPT1_CFLAGS= -DTEST
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MOPT1}
+MESON_ARGS+= -Dtest=true -Ddebug=true \
+ -Doptimize=false
+.else
+MESON_ARGS+= -Dtest=false -Ddebug=false \
+ -Doptimize=true
+.endif
....
-соответствует:
+[[options-meson_yes]]
+===== `OPT_MESON_YES` и `OPT_MESON_NO`
+
+Когда выбрана опция _OPT_, для каждого _элемента_ в `OPT_MESON_YES` добавляется `-D_элемент_=yes` к `MESON_ARGS`. Если опция _OPT_ _не_ выбрана, добавляется `-D_элемент_=no` к `MESON_ARGS`. `OPT_MESON_NO` работает противоположным образом: `-D_элемент_=no` добавляется к `MESON_ARGS`, когда опция выбрана, и `-D_элемент_=yes`, когда опция _не_ выбрана. Например:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1
+OPT1_MESON_YES= test debug
+OPT1_MESON_NO= optimize
+....
+
+эквивалентно:
[.programlisting]
....
@@ -2097,20 +4119,27 @@ OPTIONS_DEFINE= OPT1
.include <bsd.port.options.mk>
.if ${PORT_OPTIONS:MOPT1}
-USES+= gmake
-CFLAGS+= -DTEST
+MESON_ARGS+= -Dtest=yes -Ddebug=yes \
+ -Doptimize=no
+.else
+MESON_ARGS+= -Dtest=no -Ddebug=no \
+ -Doptimize=yes
.endif
....
-Если установлена `X_ABOVEVARIABLE_OFF`, то флаг `ABOVEVARIABLE` будет автоматически выставлен при выключенном параметре `X`. Например:
+[[options-meson_enabled]]
+===== `OPT_MESON_ENABLED` и `OPT_MESON_DISABLED`
+
+Когда выбрана опция _OPT_, для каждого _элемента_ в `OPT_MESON_ENABLED` добавляется `-D_элемент_=enabled` к `MESON_ARGS`. Когда опция _OPT_ _не_ выбрана, добавляется `-D_элемент_=disabled` к `MESON_ARGS`. `OPT_MESON_DISABLED` работает противоположным образом: `-D_элемент_=disabled` добавляется к `MESON_ARGS`, когда опция выбрана, и `-D_элемент_=enabled`, когда опция _не_ выбрана. Например:
[.programlisting]
....
OPTIONS_DEFINE= OPT1
-OPT1_USES_OFF=gmake
+OPT1_MESON_ENABLED= test
+OPT1_MESON_DISABLED= debug
....
-соответствует:
+эквивалентно:
[.programlisting]
....
@@ -2118,12 +4147,220 @@ OPTIONS_DEFINE= OPT1
.include <bsd.port.options.mk>
-.if ! ${PORT_OPTIONS:MOPT1}
-USES+= gmake
+.if ${PORT_OPTIONS:MOPT1}
+MESON_ARGS+= -Dtest=enabled -Ddebug=disabled
+.else
+MESON_ARGS+= -Dtest=disabled -Ddebug=enabled
.endif
....
-Для любого из следующих типов зависимости:
+[[options-qmake_on]]
+==== `OPT_QMAKE_ON` и `OPT_QMAKE_OFF`
+
+Когда выбрана опция _OPT_, значение `OPT_QMAKE_ON`, если оно определено, добавляется к `QMAKE_ARGS`. `OPT_QMAKE_OFF` работает аналогичным образом, но когда `OPT` _не_ выбрана. Например:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1
+OPT1_QMAKE_ON= -DTEST:BOOL=true
+OPT1_QMAKE_OFF= -DPRODUCTION:BOOL=true
+....
+
+эквивалентно:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MOPT1}
+QMAKE_ARGS+= -DTEST:BOOL=true
+.else
+QMAKE_ARGS+= -DPRODUCTION:BOOL=true
+.endif
+....
+
+[[options-implies]]
+==== `OPT_IMPLIES`
+
+Предоставляет способ добавления зависимостей между опциями.
+
+При выборе _OPT_ все перечисленные в этой переменной опции также будут выбраны. В качестве примера можно использовать описанный ранее crossref:makefiles[options-configure_enable,`OPT_CONFIGURE_ENABLE`]:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1 OPT2
+OPT1_IMPLIES= OPT2
+
+OPT1_CONFIGURE_ENABLE= opt1
+OPT2_CONFIGURE_ENABLE= opt2
+....
+
+Эквивалентно:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1 OPT2
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MOPT1}
+CONFIGURE_ARGS+= --enable-opt1
+.else
+CONFIGURE_ARGS+= --disable-opt1
+.endif
+
+.if ${PORT_OPTIONS:MOPT2} || ${PORT_OPTIONS:MOPT1}
+CONFIGURE_ARGS+= --enable-opt2
+.else
+CONFIGURE_ARGS+= --disable-opt2
+.endif
+....
+
+[[options-implies-ex1]]
+.Простое использование `OPT_IMPLIES`
+[example]
+====
+
+Этот порт имеет опцию `X11` и опцию `GNOME`, для сборки которой необходимо выбрать опцию `X11`.
+
+[.programlisting]
+....
+OPTIONS_DEFINE= X11 GNOME
+OPTIONS_DEFAULT= X11
+
+X11_USES= xorg
+X11_USE= xorg=xi,xextproto
+GNOME_USE= gnome=gtk30
+GNOME_IMPLIES= X11
+....
+
+====
+
+[[options-prevents]]
+==== `OPT_PREVENTS` и `OPT_PREVENTS_MSG`
+
+Предоставляет способ добавления конфликтов между опциями.
+
+Когда выбрана _OPT_, все опции, перечисленные в `OPT_PREVENTS`, должны быть сняты. Если задано `OPT_PREVENTS_MSG` и возникает конфликт, его содержимое будет показано с объяснением причины конфликта. Например:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1 OPT2
+OPT1_PREVENTS= OPT2
+OPT1_PREVENTS_MSG= OPT1 and OPT2 enable conflicting options
+....
+
+Примерно эквивалентно:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1 OPT2
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MOPT2} && ${PORT_OPTIONS:MOPT1}
+BROKEN= Option OPT1 conflicts with OPT2 (select only one)
+.endif
+....
+
+Единственное отличие заключается в том, что первый вариант выведет ошибку после выполнения `make config`, предлагая изменить выбранные настройки.
+
+[[options-prevents-ex1]]
+.Простое использование `OPT_PREVENTS`
+[example]
+====
+
+Этот порт имеет опции `X509` и `SCTP`. Обе опции добавляют патчи, но патчи конфликтуют друг с другом, поэтому их нельзя выбрать одновременно.
+
+[.programlisting]
+....
+OPTIONS_DEFINE= X509 SCTP
+
+SCTP_PATCHFILES= ${PORTNAME}-6.8p1-sctp-2573.patch.gz:-p1
+SCTP_CONFIGURE_WITH= sctp
+
+X509_PATCH_SITES= http://www.roumenpetrov.info/openssh/x509/:x509
+X509_PATCHFILES= ${PORTNAME}-7.0p1+x509-8.5.diff.gz:-p1:x509
+X509_PREVENTS= SCTP
+X509_PREVENTS_MSG= X509 and SCTP patches conflict
+....
+
+====
+
+[[options-vars]]
+==== `OPT_VARS` и `OPT_VARS_OFF`
+
+Предоставляет универсальный способ установки и добавления значений переменным.
+
+[WARNING]
+====
+Перед использованием `OPT_VARS` и `OPT_VARS_OFF` проверьте, доступен ли более специфичный вспомогательный инструмент в crossref:makefiles[options-variables, Универсальная замена переменных, `OPT_VARIABLE` и `OPT_VARIABLE_OFF`].
+====
+
+Когда выбрана опция _OPT_ и определены `OPT_VARS`, пары `_key_=_value_` и `_key_+=_value_` обрабатываются из `OPT_VARS`. Оператор `=` приводит к перезаписи существующего значения `KEY`, а `+=` добавляет к значению. `OPT_VARS_OFF` работает аналогично, но когда `OPT` _не_ выбрана.
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1 OPT2 OPT3
+OPT1_VARS= also_build+=bin1
+OPT2_VARS= also_build+=bin2
+OPT3_VARS= bin3_build=yes
+OPT3_VARS_OFF= bin3_build=no
+
+MAKE_ARGS= ALSO_BUILD="${ALSO_BUILD}" BIN3_BUILD="${BIN3_BUILD}"
+....
+
+эквивалентно:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1 OPT2
+
+MAKE_ARGS= ALSO_BUILD="${ALSO_BUILD}" BIN3_BUILD="${BIN3_BUILD}"
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MOPT1}
+ALSO_BUILD+= bin1
+.endif
+
+.if ${PORT_OPTIONS:MOPT2}
+ALSO_BUILD+= bin2
+.endif
+
+.if ${PORT_OPTIONS:MOPT2}
+BIN3_BUILD= yes
+.else
+BIN3_BUILD= no
+.endif
+....
+
+[IMPORTANT]
+====
+Значения, содержащие пробелы, должны быть заключены в кавычки:
+
+[.programlisting]
+....
+OPT_VARS= foo="bar baz"
+....
+
+Это связано с тем, как man:make[1] обрабатывает пробелы при раскрытии переменных. Когда `OPT_VARS= foo=bar baz` раскрывается, переменная в итоге содержит две строки: `foo=bar` и `baz`. Однако отправитель, вероятно, предполагал, что должна быть только одна строка — `foo=bar baz`. Заключение значения в кавычки предотвращает использование пробела в качестве разделителя.
+
+Также _не_ добавляйте лишние пробелы после знака `_var_=` и перед значением, это также разобьёт строку на две части. _Это не сработает_:
+
+[.programlisting]
+....
+OPT_VARS= foo= bar
+....
+
+====
+
+[[options-dependencies]]
+==== Зависимости, `OPT_DEPTYPE` и `OPT_DEPTYPE_OFF`
+
+Для любого из этих типов зависимостей:
* `PKG_DEPENDS`
* `EXTRACT_DEPENDS`
@@ -2133,15 +4370,16 @@ USES+= gmake
* `LIB_DEPENDS`
* `RUN_DEPENDS`
-Значение переменной `X_ABOVEVARIABLE` будет дописано в `ABOVEVARIABLE` в соответствии с состоянием `X`. Следующая запись:
+Когда выбрана опция _OPT_, значение `OPT_DEPTYPE`, если оно определено, добавляется к `DEPTYPE`. `OPT_DEPTYPE_OFF` работает аналогично, но когда _не_ выбрана `OPT`. Например:
[.programlisting]
....
OPTIONS_DEFINE= OPT1
-OPT1_LIB_DEPENDS= liba.so:${PORTSDIR}/devel/a
+OPT1_LIB_DEPENDS= liba.so:devel/a
+OPT1_LIB_DEPENDS_OFF= libb.so:devel/b
....
-соответствует:
+эквивалентно:
[.programlisting]
....
@@ -2150,118 +4388,365 @@ OPTIONS_DEFINE= OPT1
.include <bsd.port.options.mk>
.if ${PORT_OPTIONS:MOPT1}
-LIB_DEPENDS+= liba.so:${PORTSDIR}/devel/a
+LIB_DEPENDS+= liba.so:devel/a
+.else
+LIB_DEPENDS+= libb.so:devel/b
.endif
....
-Если установлена `X_ABOVEVARIABLE_OFF`, то зависимость типа `ABOVEVARIABLE` будет добавлена при выключенном параметре `X`. Например:
+[[options-variables]]
+==== Универсальная замена переменных, `OPT_VARIABLE` и `OPT_VARIABLE_OFF`
+
+Для любой из этих переменных:
+
+* `ALL_TARGET`
+* `BINARY_ALIAS`
+* `BROKEN`
+* `CATEGORIES`
+* `CFLAGS`
+* `CONFIGURE_ENV`
+* `CONFLICTS`
+* `CONFLICTS_BUILD`
+* `CONFLICTS_INSTALL`
+* `CPPFLAGS`
+* `CXXFLAGS`
+* `DESKTOP_ENTRIES`
+* `DISTFILES`
+* `EXTRACT_ONLY`
+* `EXTRA_PATCHES`
+* `GH_ACCOUNT`
+* `GH_PROJECT`
+* `GH_SUBDIR`
+* `GH_TAGNAME`
+* `GH_TUPLE`
+* `GL_ACCOUNT`
+* `GL_COMMIT`
+* `GL_PROJECT`
+* `GL_SITE`
+* `GL_SUBDIR`
+* `GL_TUPLE`
+* `IGNORE`
+* `INFO`
+* `INSTALL_TARGET`
+* `LDFLAGS`
+* `LIBS`
+* `MAKE_ARGS`
+* `MAKE_ENV`
+* `MASTER_SITES`
+* `PATCHFILES`
+* `PATCH_SITES`
+* `PLIST_DIRS`
+* `PLIST_FILES`
+* `PLIST_SUB`
+* `PORTDOCS`
+* `PORTEXAMPLES`
+* `SUB_FILES`
+* `SUB_LIST`
+* `TEST_TARGET`
+* `USES`
+
+Когда выбрана опция _OPT_, значение `OPT_ABOVEVARIABLE`, если оно определено, добавляется к `_ABOVEVARIABLE_`. `OPT_ABOVEVARIABLE_OFF` работает аналогично, но когда `OPT` _не_ выбрана. Например:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1
+OPT1_USES= gmake
+OPT1_CFLAGS_OFF= -DTEST
+....
+
+эквивалентно:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= OPT1
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MOPT1}
+USES+= gmake
+.else
+CFLAGS+= -DTEST
+.endif
+....
+
+[NOTE]
+====
+Некоторые переменные отсутствуют в этом списке, в частности `PKGNAMEPREFIX` и `PKGNAMESUFFIX`. Это сделано намеренно. Порт _не должен_ изменять своё имя при изменении набора опций.
+====
+
+[WARNING]
+====
+Некоторые из этих переменных, по крайней мере `ALL_TARGET`, `DISTFILES` и `INSTALL_TARGET`, получают свои значения по умолчанию _после_ обработки опций.
+
+С такими строками в [.filename]#Makefile#:
+
+[.programlisting]
+....
+ALL_TARGET= all
+
+DOCS_ALL_TARGET= doc
+....
+
+Если опция `DOCS` включена, `ALL_TARGET` будет иметь конечное значение `all doc`; если опция отключена, значение будет `all`.
+
+Только со строкой помощника опций в [.filename]#Makefile#:
+
+[.programlisting]
+....
+DOCS_ALL_TARGET= doc
+....
+
+Если опция `DOCS` включена, `ALL_TARGET` будет иметь окончательное значение `doc`; если опция отключена, значение будет `all`.
+====
+
+[[options-targets]]
+==== Дополнительные цели сборки, `_target_-_OPT_-on` и `_target_-_OPT_-off`
+
+Эти цели в [.filename]#Makefile# могут принимать дополнительные опциональные цели сборки:
+
+* `pre-fetch`
+* `do-fetch`
+* `post-fetch`
+* `pre-extract`
+* `do-extract`
+* `post-extract`
+* `pre-patch`
+* `do-patch`
+* `post-patch`
+* `pre-configure`
+* `do-configure`
+* `post-configure`
+* `pre-build`
+* `do-build`
+* `post-build`
+* `pre-install`
+* `do-install`
+* `post-install`
+* `post-stage`
+* `pre-package`
+* `do-package`
+* `post-package`
+
+Когда выбрана опция _OPT_, цель `_TARGET_-_OPT_-on`, если она определена, выполняется после `_TARGET_`. `_TARGET_-_OPT_-off` работает аналогично, но когда `OPT` _не_ выбрана. Например:
[.programlisting]
....
OPTIONS_DEFINE= OPT1
-OPT1_LIB_DEPENDS_OFF= liba.so:${PORTSDIR}/devel/a
+
+post-patch-OPT1-on:
+ @${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${EXAMPLESDIR}/|' ${WRKSRC}/Makefile
+
+post-patch-OPT1-off:
+ @${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${PREFIX}/bin/|' ${WRKSRC}/Makefile
....
-соответствует:
+эквивалентно:
[.programlisting]
....
-OPTIONS_DEFINE= OPT1
+OPTIONS_DEFINE= OPT1
.include <bsd.port.options.mk>
-. if ! ${PORT_OPTIONS:MOPT1}
-LIB_DEPENDS+= liba.so:${PORTSDIR}/devel/a
+post-patch:
+.if ${PORT_OPTIONS:MOPT1}
+ @${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${EXAMPLESDIR}/|' ${WRKSRC}/Makefile
+.else
+ @${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${PREFIX}/bin/|' ${WRKSRC}/Makefile
.endif
....
[[makefile-wrkdir]]
-== Задание рабочего каталога
+== Указание рабочего каталога
-Каждый порт распаковывается в рабочий каталог, который должен быть доступным для записи. В системе портов по умолчанию `DISTFILES` распаковываются в каталог с именем `${DISTNAME}`. Другими словами, если вы задали:
+Каждый порт извлекается в рабочий каталог, который должен быть доступен для записи. Система портов по умолчанию распаковывает `DISTFILES` в каталог с именем `${DISTNAME}`. Другими словами, если в [.filename]#Makefile# указано:
[.programlisting]
....
PORTNAME= foo
-PORTVERSION= 1.0
+DISTVERSION= 1.0
....
-то дистрибутивные файлы порта содержат каталог верхнего уровня, [.filename]#foo-1.0#, и все файлы расположены в этом каталоге.
+то файлы дистрибутива порта содержат каталог верхнего уровня [.filename]#foo-1.0#, и остальные файлы находятся в этом каталоге.
-Если это не ваш случай, то имеется несколько переменных, которые вы можете переопределить.
+Если нужно расположение файлов в других каталогах, можно переопределить ряд переменных.
+[[makefile-wrksrc]]
=== `WRKSRC`
-Эта переменная задаёт имя каталога, который создаётся при распаковке исходных файлов приложения. В нашем предыдущем примере если бы распаковка происходила в каталог с именем [.filename]#foo# (а не [.filename]#foo-1.0#), то вы должны написать:
+Переменная указывает имя каталога, который создается при распаковке distfiles приложения. Чтобы в нашем предыдущем примере распаковка происходила в каталог с именем [.filename]#foo# (а не [.filename]#foo-1.0#), напишите:
[.programlisting]
....
WRKSRC= ${WRKDIR}/foo
....
-или, как вариант
+или можно
[.programlisting]
....
WRKSRC= ${WRKDIR}/${PORTNAME}
....
+[[makefile-wrksrc_subdir]]
+=== `WRKSRC_SUBDIR`
+
+Если исходные файлы, необходимые для порта, находятся в подкаталоге распакованного дистрибутива, присвойте `WRKSRC_SUBDIR` имя этого каталога.
+
+[.programlisting]
+....
+WRKSRC_SUBDIR= src
+....
+
+[[makefile-no_wrksubdir]]
=== `NO_WRKSUBDIR`
-Если порт вообще не распаковывается ни в какой каталог, то вы должны задать для этого переменную `NO_WRKSUBDIR`.
+Если порт не распаковывается в подкаталог вообще, установите `NO_WRKSUBDIR`, чтобы указать это.
[.programlisting]
....
NO_WRKSUBDIR= yes
....
+[NOTE]
+====
+Поскольку `WRKDIR` является единственной директорией, которая должна быть доступна для записи во время сборки, и используется для хранения многих файлов, фиксирующих состояние сборки, извлечение порта будет принудительно выполнено в поддиректорию.
+====
+
[[conflicts]]
-== Разрешение конфликтов
+== Обработка конфликтов
-Для регистрации конфликта между пакетами и портами используются три различные переменные: `CONFLICTS`, `CONFLICTS_INSTALL` и `CONFLICTS_BUILD`.
+Существует три различные переменные для регистрации конфликтов между пакетами и портами: `CONFLICTS`, `CONFLICTS_INSTALL` и `CONFLICTS_BUILD`.
[NOTE]
====
-Переменные регистрации конфликта автоматически определяют переменную `IGNORE`, которая более подробно описана в crossref:porting-dads[dads-noinstall, "Пометка неустанавливаемого порта как `BROKEN`, `FORBIDDEN` или `IGNORE` "].
+Эти переменные автоматически устанавливают переменную `IGNORE`, более подробно описанную в crossref:porting-dads[dads-noinstall,Пометка порта как неустанавливаемого с помощью `BROKEN`, `FORBIDDEN` или `IGNORE`].
+====
+
+При удалении одного из нескольких конфликтующих портов рекомендуется оставлять `CONFLICTS` в тех других портах на несколько месяцев, чтобы учесть пользователей, которые обновляются лишь время от времени.
+
+[[conclicts-conflicts_install]]
+`CONFLICTS_INSTALL`::
+Если пакет не может сосуществовать с другими пакетами (из-за конфликтов файлов, несовместимости во время выполнения и т.д.). Проверка `CONFLICTS_INSTALL` выполняется после этапа сборки и перед этапом установки.
+
+[[conclicts-conflicts_build]]
+`CONFLICTS_BUILD`::
+Если порт не может быть собран, когда уже установлены другие определённые порты. Конфликты сборки не фиксируются в результирующем пакете.
+
+[[conclicts-conflicts]]
+`CONFLICTS`::
+Если порт не может быть собран, когда определённый порт уже установлен и итоговый пакет не может сосуществовать с другим пакетом. Проверка `CONFLICTS` выполняется до этапа сборки и до этапа установки.
+
+Каждый элемент, разделённый пробелами, в значениях переменных `CONFLICTS*` сопоставляется с пакетами(кроме того, который собирается) с использованием правил раскрытия шаблонов имен файлов в оболочке shell. Это позволяет перечислить все варианты порта в списке конфликтов вместо необходимости исключать собираемый вариант из этого списка. Например, если установлен git-lite, `CONFLICTS_INSTALL=git git-lite` позволит выполнить:
+[source, shell]
+....
+% make -C devel/git FLAVOR=lite all deinstall install
+....
+
+Но следующая команда сообщит о конфликте, так как установленное имя базового пакета — `git-lite`, а `git` будет собран, но не может быть установлен вместе с `git-lite`:
+[source, shell]
+....
+% make -C devel/git FLAVOR=default all deinstall install
+....
+
+Без этой функции Makefile потребовал бы по одному `_flavor__CONFLICTS_INSTALL` для каждого варианта, перечисляя все остальные варианты.
+
+Наиболее распространённым содержимым одной из этих переменных является база пакета другого порта. База пакета — это имя пакета без указания версии, её можно получить, выполнив команду `make -V PKGBASE`.
+
+[[conflicts-ex1]]
+.Простой пример использования `CONFLICTS*`
+[example]
+====
+
+Пакет package:dns/bind99[] не может быть установлен, если присутствует пакет package:dns/bind910[], так как они устанавливают одинаковые файлы. Сначала соберите базовый пакет для использования:
+
+[source, shell]
+....
+% make -C dns/bind99 -V PKGBASE
+bind99
+% make -C dns/bind910 -V PKGBASE
+bind910
+....
+
+Затем добавьте в [.filename]#Makefile# пакета package:dns/bind99[]:
+
+[.programlisting]
+....
+CONFLICTS_INSTALL= bind910
+....
+
+И добавьте в [.filename]#Makefile# пакета package:dns/bind910[]:
+
+[.programlisting]
+....
+CONFLICTS_INSTALL= bind99
+....
+
+====
+
+Иногда только определенные версии другого порта несовместимы. В этом случае используйте полное имя пакета, включая версию. При необходимости используйте подстановочные символы шаблонов имён файлов оболочки, такие как `*` и `?`, чтобы охватить все необходимые версии.
+
+[[conflicts-ex2]]
+.Использование `CONFLICTS*` с шаблонами имён файлов.
+[example]
====
-При удалении одного из конфликтующих портов целесообразно сохранить записи `CONFLICTS` в тех других портах в течении нескольких месяцев, чтобы позаботиться о тех пользователей, которые обновляются от случая к случаю.
+В версиях с 2.0 по 2.4.1_2 пакет package:deskutils/gnotime[] устанавливал встроенную версию пакета package:databases/qof[].
-=== `CONFLICTS_INSTALL`
+Чтобы отразить это прошлое, [.filename]#Makefile# пакета package:databases/qof[] содержит:
-Если ваш пакет не может существовать вместе с другими (из-за конфликта файлов, несовместимости времени выполнения и так далее), перечислите имена остальных пакетов в переменной `CONFLICTS_INSTALL`. Здесь вы можете использовать шаблоны командного интерпретатора, такие как `*` и `?`. Имена пакетов должны выглядеть так же, как в [.filename]#/var/db/pkg#. Пожалуйста, убедитесь, что `CONFLICTS_INSTALL` не содержит пакет самого этого порта. В противном случае не будет работать установка с использованием переменной `FORCE_PKG_REGISTER`. Проверка CONFLICTS_INSTALL выполняется после процесса сборки и до процесса установки.
+[.programlisting]
+....
+CONFLICTS_INSTALL= gnotime-2.[0-3]* \
+ gnotime-2.4.0* gnotime-2.4.1 \
+ gnotime-2.4.1_[12]
+....
-=== `CONFLICTS_BUILD`
+Первый элемент соответствует версиям `2.0`–`2.3`, второй — всем редакциям `2.4.0`, третий — точно версии `2.4.1`, а последний — первой и второй редакциям версии `2.4.1`.
-Если ваш порт не может быть собран, когда уже установлен другой, перечислите имена остальных портов в переменной `CONFLICTS_BUILD`. Здесь вы можете использовать шаблоны командного интерпретатора, такие как `*` и `?`. Имена пакетов должны выглядеть так же, как в [.filename]#/var/db/pkg#. Проверка CONFLICTS_BUILD выполняется до процесса сборки. Конфликты сборки в получаемом пакете не записываются.
+package:deskutils/gnotime[] не имеет строки конфликтов, потому что его текущая версия не конфликтует ни с чем другим.
+====
-=== `CONFLICTS`
+Переменная `DISABLE_CONFLICTS` может быть временно установлена при выполнении целей, на которые не влияют конфликты. Эту переменную не следует устанавливать в Makefiles портов.
-Если ваш порт не может быть собран, когда уже установлен другой, а получаемый пакет не может существовать вместе с другими, перечислите имена остальных пакетов в переменной `CONFLICTS`. Здесь вы можете использовать шаблоны командного интерпретатора, такие как `*` и `?`. Имена пакетов должны выглядеть так же, как в [.filename]#/var/db/pkg#. Пожалуйста, убедитесь, что `CONFLICTS` не содержит пакет самого этого порта. В противном случае не будет работать установка с использованием переменной `FORCE_PKG_REGISTER`. Проверка CONFLICTS выполняется до процессов сборки и установки.
+[source, shell]
+....
+% make -DDISABLE_CONFLICTS patch
+....
[[install]]
== Установка файлов
+[IMPORTANT]
+====
+Фаза `install` очень важна для конечного пользователя, так как она добавляет файлы в его систему. Все дополнительные команды, выполняемые в целях `*-install` [.filename]#Makefile# порта, должны выводиться на экран. _Не_ заглушайте эти команды с помощью `@` или `.SILENT`.
+====
+
[[install-macros]]
=== Макросы `INSTALL_*`
-Используйте макросы, которые есть в файле [.filename]#bsd.port.mk# для обеспечения правильных прав доступа файлов в целях `*-install` порта. Устанавливайте права владения напрямую в [.filename]#pkg-plist# через соответствующие записи `@owner owner` и `@group group`. Эти операторы работают до момента их переопределения или до конца [.filename]#pkg-plist#, поэтому не забывайте их сбрасывать, когда они больше не нужны. По умолчанию владение устанавливается для `root:wheel`.
+Используйте макросы, предоставленные в [.filename]#bsd.port.mk#, чтобы обеспечить корректные режимы файлов в целях `*-install` порта. Устанавливайте владельца напрямую в [.filename]#pkg-plist# в соответствующих записях, таких как `@(_владелец_,_группа_,)`, `@owner _владелец_` и `@group _группа_`. Эти операторы действуют до переопределения или до конца [.filename]#pkg-plist#, поэтому не забудьте сбросить их, когда они больше не нужны. Владелец по умолчанию — `root:wheel`. Дополнительную информацию см. в crossref:plist[plist-keywords-base,Базовые Ключевые Слова].
-* `INSTALL_PROGRAM` - это команда для установки бинарных выполнимых файлов.
-* `INSTALL_SCRIPT` - это команда для установки выполнимых скриптов.
-* `INSTALL_LIB` - это команда для установки динамических библиотек.
-* `INSTALL_KLD` - это команда для установки загружаемых модулей ядра. Некоторые архитектуры предпочитают, чтобы для модулей сохранялись отладочные сведения, по этой причине используйте эту команду вместо `INSTALL_PROGRAM`.
-* `INSTALL_DATA` - это команда для установки совместно используемых файлов данных.
-* `INSTALL_MAN` - это команда для установки страниц Справочника и другой документации (никаких файлов она не сжимает).
+* `INSTALL_PROGRAM` — команда для установки бинарных исполняемых файлов.
+* `INSTALL_SCRIPT` — команда для установки исполняемых скриптов.
+* `INSTALL_LIB` — это команда для установки общих библиотек (но не статических библиотек).
+* `INSTALL_KLD` — это команда для установки загружаемых модулей ядра. Некоторые архитектуры не поддерживают удаление символов из модулей, поэтому используйте эту команду вместо `INSTALL_PROGRAM`.
+* `INSTALL_DATA` — это команда для установки общих данных, включая статические библиотеки.
+* `INSTALL_MAN` — это команда для установки man-страниц и другой документации (она ничего не сжимает).
-В основе работы этих макросов лежит команда `install` со всеми соответствующими флагами. Смотрите пример их использования ниже.
+Эти переменные передаются команде man:install[1] с соответствующими флагами для каждой ситуации.
+
+[IMPORTANT]
+====
+Не используйте `INSTALL_LIB` для установки статических библиотек, так как их удаление делает их бесполезными. Вместо этого используйте `INSTALL_DATA`.
+====
[[install-strip]]
-=== Удаление отладочной информации в бинарных файлах и динамических библиотеках
+=== Удаление символов из бинарных файлов и разделяемых библиотек
-Не удаляйте отладочную информацию из бинарных файлов вручную, если вы это делали. Во всех двоичных файлах отладочная информация должна быть удалена, и макрос `INSTALL_PROGRAM` выполнит установку и удаление отладочной информации одновременно (обратитесь к следующему разделу). Макрос `INSTALL_LIB` делает то же самое для динамических библиотек.
+Установленные бинарные файлы должны быть очищены от отладочной информации. Не очищайте бинарные файлы вручную, если это не является абсолютно необходимым. Макрос `INSTALL_PROGRAM` устанавливает и очищает бинарный файл одновременно. Макрос `INSTALL_LIB` делает то же самое с разделяемыми библиотеками.
-Если вам нужно удалить отладочную информацию из файла без использования макросов `INSTALL_PROGRAM` и `INSTALL_LIB`, то это можно сделать при помощи `${STRIP_CMD}`. Обычно это делается внутри цели `post-install`. К примеру:
+Когда файл необходимо очистить, но ни макросы `INSTALL_PROGRAM`, ни `INSTALL_LIB` не подходят, `${STRIP_CMD}` очищает программу или разделяемую библиотеку. Обычно это делается в цели `post-install`. Например:
[.programlisting]
....
@@ -2269,24 +4754,33 @@ post-install:
${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/xdl
....
-Удаление отладочной информации из нескольких файлов:
+Когда необходимо удалить отладочную информацию из нескольких файлов:
[.programlisting]
....
post-install:
- .for l in geometry media body track world
+.for l in geometry media body track world
${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/lib${PORTNAME}-${l}.so.0
- .endfor
+.endfor
....
-Для проверки того, удалена ли отладочная информация из файла, используйте man:file[1]. Для двоичных файлов man:file[1] печатает `stripped` или `not stripped`. Кроме того, man:strip[1] определяет, была ли уже удалена из программы отладочная информация, и в этом случае просто завершает свою работу.
+Используйте man:file[1] для файла, чтобы определить, был ли он подвергнут удалению символов. man:file[1] сообщает, что бинарные файлы либо `stripped` (удалены символы), либо `not stripped` (символы не удалены). Кроме того, man:strip[1] обнаружит программы, которые уже были подвергнуты удалению символов, и завершит работу без ошибок.
+
+[IMPORTANT]
+====
+Когда определён `WITH_DEBUG`, elf-файлы _не должны_ быть очищены.
+
+Переменные (`STRIP_CMD`, `INSTALL_PROGRAM`, `INSTALL_LIB`, ...) и crossref:uses[uses,`USES`], предоставляемые фреймворком, обрабатывают это автоматически.
+
+Некоторое программное обеспечение добавляет `-s` к своим `LDFLAGS`. В этом случае либо удалите `-s`, если установлен `WITH_DEBUG`, либо удалите его безусловно и используйте `STRIP_CMD` в `post-install`.
+====
[[install-copytree]]
=== Установка целого дерева файлов
-Иногда должно быть установлено большое количество файлов с сохранением их иерархической организации. Например, копирование дерева каталогов целиком из `WRKSRC` в целевой каталог внутри `PREFIX`. Обратите внимание, что `PREFIX`, `EXAMPLESDIR`, `DATADIR` и другие переменные пути всегда должны предваряться `STAGEDIR`, чтобы не ломать staging (смотрите <<staging>>).
+Иногда необходимо установить большое количество файлов с сохранением их иерархической структуры. Например, копирование всего дерева каталогов из `WRKSRC` в целевой каталог под `PREFIX`. Обратите внимание, что `PREFIX`, `EXAMPLESDIR`, `DATADIR` и другие переменные путей всегда должны предваряться `STAGEDIR` для соблюдения процедуры промежуточной установки (см. crossref:special[staging,Промежуточная установка]).
-Для этой ситуации существует два макроса. Преимущество от использования этих макросов вместо команды `cp` в том, что они гарантируют установку правильного владельца и прав на конечные файлы. Первый макрос, `COPYTREE_BIN`, делает все устанавливаемые файлы исполняемыми, что подходит для установки в [.filename]#PREFIX/bin#. Второй макрос, `COPYTREE_SHARE`, не устанавливает на файлы права исполнения, и, таким образом, подходит для установки файлов внутри каталога [.filename]#PREFIX/share#.
+Для этой ситуации существуют два макроса. Преимущество использования этих макросов вместо `cp` заключается в том, что они гарантируют целевым файлам правильные значения владельца и разрешений. Первый макрос, `COPYTREE_BIN`, устанавливает все установленные файлы как исполняемые, что делает его подходящим для установки в [.filename]#PREFIX/bin#. Второй макрос, `COPYTREE_SHARE#, не устанавливает исполняемые разрешения для файлов и, следовательно, подходит для установки файлов в [.filename]#PREFIX/share#.
[.programlisting]
....
@@ -2295,7 +4789,7 @@ post-install:
(cd ${WRKSRC}/examples && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR})
....
-В этом примере устанавливается содержимое каталога [.filename]#examples# из установочных файлов производителя в надлежащее место для примеров вашего порта.
+Этот пример установит содержимое каталога [.filename]#examples# из дистрибутива вендора в соответствующее расположение примеров порта.
[.programlisting]
....
@@ -2304,9 +4798,9 @@ post-install:
(cd ${WRKSRC}/temperatures && ${COPYTREE_SHARE} "June July August" ${STAGEDIR}${DATADIR}/summer)
....
-А в этом примере будут установлены данные летних месяцев в подкаталог [.filename]#summer# каталога [.filename]#DATADIR#.
+И этот пример установит данные летних месяцев в подкаталог [.filename]#summer# каталога [.filename]#DATADIR#.
-В качестве третьего параметра в макросе `COPYTREE_*` можно передать дополнительные параметры `find`. Например, чтобы в первом примере установить все файлы кроме файлов Makefile, можно использовать следующую команду.
+Дополнительные аргументы `find` могут быть переданы через третий аргумент макросов `COPYTREE_*`. Например, чтобы установить все файлы из первого примера, кроме Makefiles, можно использовать следующие команды.
[.programlisting]
....
@@ -2316,50 +4810,51 @@ post-install:
${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR} "! -name Makefile")
....
-Эти макросы не производят добавление устанавливаемых файлов в [.filename]#pkg-plist#. Они должны быть добавлены туда вручную. Необязательные файлы документации (`PORTDOCS`, смотрите <<install-documentation>>) и примеров (`PORTEXAMPLES`) всегда должны предваряться в [.filename]#pkg-plist# префиксами `%%PORTDOCS%%` или `%%PORTEXAMPLES%%`.
+Эти макросы не добавляют установленные файлы в [.filename]#pkg-plist#. Их необходимо добавлять вручную. Для дополнительной документации (`PORTDOCS`, см. crossref:makefiles[install-documentation, Установка дополнительной документации]) и примеров (`PORTEXAMPLES`), префиксы `%%PORTDOCS%%` или `%%PORTEXAMPLES%%` должны быть добавлены в [.filename]#pkg-plist#.
[[install-documentation]]
=== Установка дополнительной документации
-Если с вашим программным обеспечением поставляется некоторая документация, отличающаяся от стандартных страниц Справочника и файлов info, которая, как вы думаете, будет полезна пользователям, установите ее в каталог [.filename]#PREFIX/shared/doc#. Это может быть сделано, как и в предыдущем разделе, в цели `post-install`.
+Если у программного обеспечения есть документация, помимо стандартных страниц man и info, которая может быть полезна пользователю, установите её в `DOCSDIR`. Это можно сделать, как и в предыдущем пункте, в цели `post-install`.
-Создайте для вашего порта новый каталог. Имя каталога должно соответствовать тому, что представляет из себя порт. Обычно это означает `PORTNAME`. Однако, если вы думаете, что пользователь захочет иметь разные версии порта, установленные одновременно, то вы можете использовать полное имя `PKGNAME`.
+Создайте новый каталог для порта. Имя каталога — `DOCSDIR`. Обычно оно равно `PORTNAME`. Однако, если пользователю может потребоваться установка разных версий порта одновременно, можно использовать полное имя `PKGNAME`.
-Поскольку устанавливаются только файлы, перечисленные в [.filename]#pkg-plist#, безопасным способом будет устанавливать документацию в `STAGEDIR` всегда (смотрите crossref:special[staging, Staging]). Следовательно, блоки `.if` нужны только для файлов достаточно большого размера, установка которых влечёт значительные накладные расходы на операции ввода/вывода.
+Поскольку устанавливаются только файлы, перечисленные в [.filename]#pkg-plist#, можно безопасно всегда устанавливать документацию в `STAGEDIR` (см. crossref:special[staging,Staging]). Поэтому блоки `.if` требуются только в тех случаях, когда устанавливаемые файлы достаточно велики, чтобы вызвать значительные накладные расходы на ввод-вывод.
[.programlisting]
....
post-install:
${MKDIR} ${STAGEDIR}${DOCSDIR}
- ${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${STAGEDIR}${DOCSDIR}
+ ${INSTALL_DATA} ${WRKSRC}/docs/xvdocs.ps ${STAGEDIR}${DOCSDIR}
....
-Вот несколько полезных переменных и то, как они преобразуются по умолчанию при использовании в [.filename]#Makefile#:
+С другой стороны, если в порте есть опция DOCS, установите документацию в цели `post-install-DOCS-on`. Эти цели описаны в crossref:makefiles[options-targets, Дополнительные цели сборки, `_target_-_OPT_-on` и `_target_-_OPT_-off`].
-* `DATADIR` преобразуется в [.filename]#PREFIX/shared/PORTNAME#.
-* `DATADIR_REL` преобразуется в [.filename]#share/PORTNAME#.
-* `DOCSDIR` преобразуется в [.filename]#PREFIX/shared/doc/PORTNAME#.
-* `DOCSDIR_REL` преобразуется в [.filename]#share/doc/PORTNAME#.
-* `EXAMPLESDIR` преобразуется в [.filename]#PREFIX/shared/examples/PORTNAME#.
-* `EXAMPLESDIR_REL` преобразуется в [.filename]#share/examples/PORTNAME#.
+Вот несколько полезных переменных и их стандартное раскрытие при использовании в [.filename]#Makefile#:
+
+* `DATADIR` раскрывается в [.filename]#PREFIX/share/PORTNAME#.
+* `DATADIR_REL` раскрывается в [.filename]#share/PORTNAME#.
+* `DOCSDIR` раскрывается в [.filename]#PREFIX/share/doc/PORTNAME#.
+* `DOCSDIR_REL` раскрывается в [.filename]#share/doc/PORTNAME#.
+* `EXAMPLESDIR` раскрывается в [.filename]#PREFIX/share/examples/PORTNAME#.
+* `EXAMPLESDIR_REL` раскрывается в [.filename]#share/examples/PORTNAME#.
[NOTE]
====
-Параметр `DOCS` управляет установкой дополнительной документации в `DOCSDIR`. Это не относится к стандартным страницам справочника и страницам info. Все, что устанавливается в `DATADIR` и `EXAMPLESDIR`, соответственно управляется через параметры `DATA` и `EXAMPLES`.
+Опция `DOCS` управляет только дополнительной документацией, устанавливаемой в `DOCSDIR`. Она не применяется к стандартным man-страницам и info-страницам. Содержимое, устанавливаемое в `EXAMPLESDIR`, контролируется опцией `EXAMPLES`.
====
-Эти переменные экспортируются в `PLIST_SUB`. Их значения появятся там в виде имён путей относительно [.filename]#PREFIX#, если это возможно. То есть [.filename]#share/doc/PORTNAME# в списке сборки по умолчанию будет заменен на `%%DOCSDIR%%`, и так далее. (Дополнительную информацию о подстановке в [.filename]#pkg-plist# можно найти <<plist-sub,здесь>>.)
+Эти переменные экспортируются в `PLIST_SUB`. Их значения будут представлены там в виде путей относительно [.filename]#PREFIX#, если это возможно. То есть, [.filename]#share/doc/PORTNAME# будет заменено на `%%DOCSDIR%%` в списке упаковки по умолчанию и так далее. (Подробнее о подстановках в [.filename]#pkg-plist# см. crossref:plist[plist-sub,здесь].)
-Все условно устанавливаемые файлы и каталоги с документацией должны быть перечислены в файле [.filename]#pkg-plist# с префиксом `%%PORTDOCS%%`, например:
+Все условно устанавливаемые файлы и каталоги документации включаются в [.filename]#pkg-plist# с префиксом `%%PORTDOCS%%`, например:
[.programlisting]
....
%%PORTDOCS%%%%DOCSDIR%%/AUTHORS
%%PORTDOCS%%%%DOCSDIR%%/CONTACT
-%%PORTDOCS%%@dirrm %%DOCSDIR%%
....
-В качестве альтернативы перечислению файлов документации в файле [.filename]#pkg-plist#, порт может указать в переменной `PORTDOCS` список имён файлов и глобальных шаблонов командного процессора для добавления в окончательный список сборки. Имена будут задаваться относительно `DOCSDIR`. Таким образом, порт, использующий `PORTDOCS` и нестандартное местоположение документации, должен задавать соответствующим образом и `DOCSDIR`. Если каталог указан в `PORTDOCS` или соответствует шаблону для этой переменной, то полное поддерево с входящими в него файлами и каталогами будет регистрироваться в окончательном списке сборки. Если параметр `DOCS` не задан, то файлы и каталоги, перечисленные в `PORTDOCS`, не будут установлены и добавлены в список сборки порта. Установка документации в `PORTDOCS`, как это показано выше, остаётся за самим портом. Типичный пример использования `PORTDOCS` выглядит следующим образом:
+В качестве альтернативы перечислению файлов документации в [.filename]#pkg-plist#, порт может установить переменную `PORTDOCS` в список имён файлов и шаблонов имен файлов shell для добавления в итоговый список упаковки. Имена будут относительны к `DOCSDIR`. Поэтому порт, использующий `PORTDOCS` и нестандартное расположение документации, должен соответствующим образом установить `DOCSDIR`. Если в `PORTDOCS` указан каталог или он соответствует шаблону из этой переменной, всё поддерево содержащихся файлов и каталогов будет зарегистрировано в итоговом списке упаковки. Если опция `DOCS` отключена, файлы и каталоги, перечисленные в `PORTDOCS`, не будут установлены или добавлены в список упаковки порта. Установка документации в `PORTDOCS`, как показано выше, остаётся на усмотрение самого порта. Типичный пример использования `PORTDOCS`:
[.programlisting]
....
@@ -2368,12 +4863,57 @@ PORTDOCS= README.* ChangeLog docs/*
[NOTE]
====
-Эквивалентами `PORTDOCS` для файлов, устанавливаемых в `DATADIR` и `EXAMPLESDIR` являются `PORTDATA` и `PORTEXAMPLES` соответственно.
+Эквивалентами `PORTDOCS` для файлов, установленных в `DATADIR` и `EXAMPLESDIR`, являются `PORTDATA` и `PORTEXAMPLES` соответственно.
-Во время установки выводится содержимое [.filename]#pkg-message#. За подробной информацией обратитесь к <<porting-message,разделу об использовании [.filename]#pkg-message#>>. Файл [.filename]#pkg-message# не нужно добавлять в [.filename]#pkg-plist#.
+Содержимое файла [.filename]#pkg-message# отображается при установке. Подробности см. в разделе crossref:pkg-files[porting-message,использование файла [.filename]#pkg-message#]. Файл [.filename]#pkg-message# не нужно добавлять в [.filename]#pkg-plist#.
====
[[install-subdirs]]
-=== Подкаталоги внутри PREFIX
+=== Подкаталоги в `PREFIX`
+
+Попробуйте сделать так, чтобы порт размещал файлы в правильных подкаталогах `PREFIX`. Некоторые порты собирают всё в кучу и помещают в подкаталог с именем порта, что неверно. Также многие порты размещают все файлы, кроме бинарников, заголовочных файлов и страниц руководства, в подкаталоге [.filename]#lib#, что плохо согласуется с парадигмой BSD. Многие из этих файлов должны быть перемещены в один из следующих каталогов: [.filename]#etc# (файлы настройки/конфигурации), [.filename]#libexec# (исполняемые файлы для внутреннего использования), [.filename]#sbin# (исполняемые файлы для суперпользователей/администраторов), [.filename]#info# (документация для браузера info) или [.filename]#share# (архитектурно-независимые файлы). Подробности см. в man:hier[7]; правила, действующие для [.filename]#/usr#, в основном применимы и к [.filename]#/usr/local#. Исключение составляют порты, связанные с USENET "news". Они могут использовать [.filename]#PREFIX/news# в качестве места назначения для своих файлов.
+
+[[binary-alias]]
+== Используйте `BINARY_ALIAS` для переименования команд вместо исправления сборки
+
+Когда определена переменная `BINARY_ALIAS`, будут созданы символьные ссылки на указанные команды в каталоге, который будет добавлен в начало переменной `PATH`.
+
+Используйте это для замены жёстко заданных команд, от которых зависит этап сборки, без необходимости исправлять какие-либо файлы сборки.
+
+[[binary-alias-ex1]]
+.Использование `BINARY_ALIAS` для предоставления `gsed` в качестве `sed`
+[example]
+====
+Некоторые порты ожидают, что `sed` будет вести себя как GNU sed и используют возможности, которые man:sed[1] не предоставляет. GNU sed доступен в пакете package:textproc/gsed[] на FreeBSD.
+
+Используйте `BINARY_ALIAS` для замены `sed` на `gsed` на время сборки:
+
+[.programlisting]
+....
+BUILD_DEPENDS= gsed:textproc/gsed
+...
+BINARY_ALIAS= sed=gsed
+....
+
+====
+
+[[binary-alias-ex2]]
+.Использование `BINARY_ALIAS` для создания псевдонимов жестко заданных команд `python3`
+[example]
+====
+Порт, в котором есть жёсткая ссылка на `python3` в скриптах сборки, требует его наличия в `PATH` во время сборки. Используйте `BINARY_ALIAS` для создания псевдонима, указывающего на нужный бинарный файл Python 3:
+
+[.programlisting]
+....
+USES= python:3.4+,build
+...
+BINARY_ALIAS= python3=${PYTHON_CMD}
+....
-Попробуйте поместить все файлы порта в правильных подкаталогах каталога `PREFIX`. Некоторые порты игнорируют все установки и помещают все в подкаталог с именем порта, что неправильно. Также многие порты помещают все, кроме бинарных файлов, файлов заголовков и страниц Справочника, в подкаталог каталога [.filename]#lib#, что не очень хорошо работает с подходом BSD. Многие файлы должны быть перемещены в одно из следующих местоположений: [.filename]#etc# (настроечные/конфигурационные файлы), [.filename]#libexec# (выполнимые файлы, запускаемые из других программ), [.filename]#sbin# (исполнимые файлы для администраторов/менеджеров системы), [.filename]#info# (документация в формате info для просмотрщика info) или [.filename]#share# (независимые от архитектуры файлы). Обратитесь к man:hier[7] для прояснения деталей; правила, покрывающие [.filename]#/usr#, достаточно хорошо подходят также и к [.filename]#/usr/local#. Исключением являются порты, имеющие дело с "новостями" USENET. Они могут использовать каталог [.filename]#PREFIX/news# для установки своих файлов.
+См. crossref:special[using-python,Использование Python] для получения дополнительной информации о `USES=python`.
+====
+
+[NOTE]
+====
+Бинарные псевдонимы создаются после обработки зависимостей, указанных через `BUILD_DEPENDS` и `LIB_DEPENDS`, но до цели `configure`. Это приводит к различным ограничениям. Например, программы, установленные через `TEST_DEPENDS`, нельзя использовать для создания бинарного псевдонима, так как тестовые зависимости, указанные таким образом, обрабатываются после создания бинарных псевдонимов.
+====
diff --git a/documentation/content/ru/books/porters-handbook/makefiles/_index.po b/documentation/content/ru/books/porters-handbook/makefiles/_index.po
new file mode 100644
index 0000000000..359d99d977
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/makefiles/_index.po
@@ -0,0 +1,14066 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-09-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookmakefiles_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1
+#, no-wrap
+msgid "Configuring the Makefile for FreeBSD Ports"
+msgstr "Настройка Makefile для портов FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1
+#, no-wrap
+msgid "Chapter 5. Configuring the Makefile"
+msgstr "Глава 5. Настройка Makefile"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:14
+#, no-wrap
+msgid "Configuring the Makefile"
+msgstr "Настройка Makefile"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:55
+msgid ""
+"Configuring the [.filename]#Makefile# is pretty simple, and again we suggest "
+"looking at existing examples before starting. Also, there is a "
+"crossref:porting-samplem[porting-samplem,sample Makefile] in this handbook, "
+"so take a look and please follow the ordering of variables and sections in "
+"that template to make the port easier for others to read."
+msgstr ""
+"Настройка [.filename]#Makefile# довольно проста, и мы снова рекомендуем "
+"изучить существующие примеры перед началом. Также в этом руководстве есть "
+"crossref:porting-samplem[porting-samplem,пример Makefile], поэтому "
+"ознакомьтесь с ним и, пожалуйста, соблюдайте порядок переменных и разделов в "
+"этом шаблоне, чтобы порт был удобнее для чтения другими."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:57
+msgid ""
+"Consider these problems in sequence during the design of the new "
+"[.filename]#Makefile#:"
+msgstr ""
+"Рассмотрите эти проблемы последовательно при разработке нового "
+"[.filename]#Makefile#:"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:59
+#, no-wrap
+msgid "The Original Source"
+msgstr "Оригинальный исходный код"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:63
+msgid ""
+"Does it live in `DISTDIR` as a standard ``gzip``ped tarball named something "
+"like [.filename]#foozolix-1.2.tar.gz#? If so, go on to the next step. If "
+"not, the distribution file format might require overriding one or more of "
+"`DISTVERSION`, `DISTNAME`, `EXTRACT_CMD`, `EXTRACT_BEFORE_ARGS`, "
+"`EXTRACT_AFTER_ARGS`, `EXTRACT_SUFX`, or `DISTFILES`."
+msgstr ""
+"Находится ли он в `DISTDIR` в виде стандартного архива ``gzip`` с именем "
+"вроде [.filename]#foozolix-1.2.tar.gz#? Если да, переходите к следующему "
+"шагу. Если нет, возможно, для формата имени файла дистрибутива потребуется "
+"переопределить одну или несколько переменных: `DISTVERSION`, `DISTNAME`, "
+"`EXTRACT_CMD`, `EXTRACT_BEFORE_ARGS`, `EXTRACT_AFTER_ARGS`, `EXTRACT_SUFX` "
+"или `DISTFILES`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:66
+msgid ""
+"In the worst case, create a custom `do-extract` target to override the "
+"default. This is rarely, if ever, necessary."
+msgstr ""
+"В худшем случае создайте пользовательскую цель `do-extract`, чтобы "
+"переопределить стандартную. Это редко, если вообще когда-либо, необходимо."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:68
+#, no-wrap
+msgid "Naming"
+msgstr "Именование"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:71
+msgid ""
+"The first part of the port's [.filename]#Makefile# names the port, describes "
+"its version number, and lists it in the correct category."
+msgstr ""
+"Первая часть [.filename]#Makefile# порта указывает его название, описывает "
+"номер версии и помещает его в соответствующую категорию."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:73
+#, no-wrap
+msgid "`PORTNAME`"
+msgstr "`PORTNAME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:77
+msgid ""
+"Set `PORTNAME` to the base name of the software. It is used as the base for "
+"the FreeBSD package, and for crossref:makefiles[makefile-"
+"distname,`DISTNAME`]."
+msgstr ""
+"Установите `PORTNAME` как базовое имя программы. Оно используется в качестве "
+"основы для пакета FreeBSD и для crossref:makefiles[makefile-"
+"distname,`DISTNAME`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:84
+msgid ""
+"The package name must be unique across the entire ports tree. Make sure "
+"that the `PORTNAME` is not already in use by an existing port, and that no "
+"other port already has the same `PKGBASE`. If the name has already been "
+"used, add either crossref:makefiles[porting-pkgnameprefix-"
+"suffix,`PKGNAMEPREFIX` or `PKGNAMESUFFIX`]."
+msgstr ""
+"Название пакета должно быть уникальным во всём дереве портов. Убедитесь, что "
+"`PORTNAME` ещё не используется существующим портом и что никакой другой порт "
+"уже не имеет такой же `PKGBASE`. Если имя уже занято, добавьте либо "
+"crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMEPREFIX`, либо "
+"`PKGNAMESUFFIX`]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:87
+#, no-wrap
+msgid "Versions, `DISTVERSION` _or_ `PORTVERSION`"
+msgstr "Версии, `DISTVERSION` _или_ `PORTVERSION`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:90
+msgid "Set `DISTVERSION` to the version number of the software."
+msgstr "Установите `DISTVERSION` в номер версии программы."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:94
+msgid ""
+"`PORTVERSION` is the version used for the FreeBSD package. It will be "
+"automatically derived from `DISTVERSION` to be compatible with FreeBSD's "
+"package versioning scheme. If the version contains _letters_, it might be "
+"needed to set `PORTVERSION` and not `DISTVERSION`."
+msgstr ""
+"`PORTVERSION` — это версия, используемая для пакета FreeBSD. Она будет "
+"автоматически вычислена из `DISTVERSION` в соответствии со схемой "
+"версионирования пакетов FreeBSD. Если версия содержит _буквы_, может "
+"потребоваться задать `PORTVERSION` вместо `DISTVERSION`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:98
+msgid "Only one of `PORTVERSION` and `DISTVERSION` can be set at a time."
+msgstr ""
+"Только одна из переменных `PORTVERSION` и `DISTVERSION` может быть "
+"установлена одновременно."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:101
+msgid ""
+"From time to time, some software will use a version scheme that is not "
+"compatible with how `DISTVERSION` translates in `PORTVERSION`."
+msgstr ""
+"Время от времени некоторые программы используют схему версионирования, "
+"которая несовместима с тем, как `DISTVERSION` преобразуется в `PORTVERSION`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:106
+msgid ""
+"When updating a port, it is possible to use the `-t` argument of man:pkg-"
+"version[8] to check if the new version is greater or lesser than before. "
+"See below on how to use man:pkg-version[8] to compare versions."
+msgstr ""
+"При обновлении порта можно использовать аргумент `-t` утилиты man:pkg-"
+"version[8], чтобы проверить, является ли новая версия больше или меньше "
+"предыдущей. Смотрите ниже, как использовать man:pkg-version[8] для сравнения "
+"версий."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:109
+#, no-wrap
+msgid "Using man:pkg-version[8] to Compare Versions"
+msgstr "Использование man:pkg-version[8] для сравнения версий"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:113
+msgid ""
+"`pkg version -t` takes two versions as arguments, it will respond with `<`, "
+"`=` or `>` if the first version is less, equal, or more than the second "
+"version, respectively."
+msgstr ""
+"`pkg version -t` принимает две версии в качестве аргументов и возвращает "
+"`<`, `=` или `>`, если первая версия меньше, равна или больше второй версии "
+"соответственно."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:119
+#, no-wrap
+msgid ""
+"% pkg version -t 1.2 1.3\n"
+"< <.>\n"
+"% pkg version -t 1.2 1.2\n"
+msgstr ""
+"% pkg version -t 1.2 1.3\n"
+"< <.>\n"
+"% pkg version -t 1.2 1.2\n"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:119
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:121
+#, no-wrap
+msgid "<.>"
+msgstr "<.>"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:121
+msgid "% pkg version -t 1.2 1.2.0"
+msgstr "% pkg version -t 1.2 1.2.0"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:128
+msgid ""
+"% pkg version -t 1.2 1.2.p1 > <.> % pkg version -t 1.2.a1 1.2.b1 < <.> % pkg "
+"version -t 1.2 1.2p1 < <.>"
+msgstr ""
+"% pkg version -t 1.2 1.2.p1\n"
+"> <.>\n"
+"% pkg version -t 1.2.a1 1.2.b1\n"
+"< <.>\n"
+"% pkg version -t 1.2 1.2p1\n"
+"< <.>"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:131
+msgid "`1.2` is before `1.3`."
+msgstr "`1.2` идёт перед `1.3`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:132
+msgid "`1.2` and `1.2` are equal as they have the same version."
+msgstr "`1.2` и `1.2` равны, так как имеют одинаковую версию."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:133
+msgid "`1.2` and `1.2.0` are equal as nothing equals zero."
+msgstr "`1.2` и `1.2.0` равны, так как ноль ничего не значит."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:134
+msgid "`1.2` is after `1.2.p1` as `.p1`, think \"pre-release 1\"."
+msgstr ""
+"`1.2` идёт после `1.2.p1`, так как `.p1` означает «pre-release 1» "
+"(предрелизная версия 1)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:135
+msgid ""
+"`1.2.a1` is before `1.2.b1`, think \"alpha\" and \"beta\", and `a` is before "
+"`b`."
+msgstr ""
+"`1.2.a1` предшествует `1.2.b1`, представьте \"alpha\" и \"beta\", где `a` "
+"идёт перед `b`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:136
+msgid ""
+"`1.2` is before `1.2p1` as `2p1`, think \"2, patch level 1\" which is a "
+"version after any `2.X` but before `3`."
+msgstr ""
+"`1.2` находится перед `1.2p1`, так же как `2p1` (читается как \"2, уровень "
+"исправления 1\") — это версия, следующая после любой `2.X`, но перед `3`."
+
+#. type: delimited block * 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:141
+msgid ""
+"In here, the `a`, `b`, and `p` are used as if meaning \"alpha\", \"beta\" or "
+"\"pre-release\" and \"patch level\", but they are only letters and are "
+"sorted alphabetically, so any letter can be used, and they will be sorted "
+"appropriately."
+msgstr ""
+"Здесь `a`, `b` и `p` используются так, как если бы они означали \"альфа\", "
+"\"бета\" или \"пре-релиз\" и \"уровень патча\", но на самом деле это просто "
+"буквы, которые сортируются в алфавитном порядке, поэтому можно использовать "
+"любую букву, и они будут отсортированы соответствующим образом."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:145
+#, no-wrap
+msgid "Examples of `DISTVERSION` and the Derived `PORTVERSION`"
+msgstr "Примеры `DISTVERSION` и производной `PORTVERSION`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:149
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:499
+#, no-wrap
+msgid "DISTVERSION"
+msgstr "DISTVERSION"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:151
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:500
+#, no-wrap
+msgid "PORTVERSION"
+msgstr ".PORTVERSION"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:152
+#, no-wrap
+msgid "0.7.1d"
+msgstr "0.7.1d"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:154
+#, no-wrap
+msgid "0.7.1.d"
+msgstr "0.7.1.d"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:155
+#, no-wrap
+msgid "10Alpha3"
+msgstr "10Alpha3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:157
+#, no-wrap
+msgid "10.a3"
+msgstr "10.a3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:158
+#, no-wrap
+msgid "3Beta7-pre2"
+msgstr "3Beta7-pre2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:160
+#, no-wrap
+msgid "3.b7.p2"
+msgstr "3.b7.p2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:161
+#, no-wrap
+msgid "8:f_17"
+msgstr "8:f_17"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:162
+#, no-wrap
+msgid "8f.17"
+msgstr "8f.17"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:165
+#, no-wrap
+msgid "Using `DISTVERSION`"
+msgstr "Использование `DISTVERSION`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:169
+msgid ""
+"When the version only contains numbers separated by dots, dashes or "
+"underscores, use `DISTVERSION`."
+msgstr ""
+"Если версия содержит только числа, разделённые точками, тире или "
+"подчёркиваниями, используйте `DISTVERSION`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:174
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"DISTVERSION=\t1.2-4\n"
+msgstr ""
+"PORTNAME= nekoto\n"
+"DISTVERSION=\t1.2-4\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:177
+msgid "It will generate a `PORTVERSION` of `1.2.4`."
+msgstr "Это сгенерирует `PORTVERSION` равный `1.2.4`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:180
+#, no-wrap
+msgid "Using `DISTVERSION` When the Version Starts with a Letter or a Prefix"
+msgstr "Использование `DISTVERSION` когда версия начинается с буквы или префикса"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:184
+msgid ""
+"When the version starts or ends with a letter, or a prefix or a suffix that "
+"is not part of the version, use `DISTVERSIONPREFIX`, `DISTVERSION`, and "
+"`DISTVERSIONSUFFIX`."
+msgstr ""
+"Когда версия начинается или заканчивается буквой, или префиксом, или "
+"суффиксом, которые не являются частью версии, используйте "
+"`DISTVERSIONPREFIX`, `DISTVERSION` и `DISTVERSIONSUFFIX`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:186
+msgid "If the version is `v1.2-4`:"
+msgstr "Если версия `v1.2-4`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:192
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"DISTVERSIONPREFIX= v\n"
+"DISTVERSION=\t1_2_4\n"
+msgstr ""
+"PORTNAME= nekoto\n"
+"DISTVERSIONPREFIX= v\n"
+"DISTVERSION=\t1_2_4\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:196
+msgid ""
+"Some of the time, projects using GitHub will use their name in their "
+"versions. For example, the version could be `nekoto-1.2-4`:"
+msgstr ""
+"Некоторые проекты, использующие GitHub, могут включать своё название в "
+"версии. Например, версия может выглядеть как `nekoto-1.2-4`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:202
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"DISTVERSIONPREFIX= nekoto-\n"
+"DISTVERSION=\t1.2_4\n"
+msgstr ""
+"PORTNAME= nekoto\n"
+"DISTVERSIONPREFIX= nekoto-\n"
+"DISTVERSION=\t1.2_4\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:205
+msgid ""
+"Those projects also sometimes use some string at the end of the version, for "
+"example, `1.2-4_RELEASE`:"
+msgstr ""
+"Эти проекты также иногда используют строку в конце версии, например, "
+"`1.2-4_RELEASE`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:211
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"DISTVERSION=\t1.2-4\n"
+"DISTVERSIONSUFFIX= _RELEASE\n"
+msgstr ""
+"PORTNAME= nekoto\n"
+"DISTVERSION=\t1.2-4\n"
+"DISTVERSIONSUFFIX= _RELEASE\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:214
+msgid "Or they do both, for example, `nekoto-1.2-4_RELEASE`:"
+msgstr "Или они делают и то, и другое, например, `nekoto-1.2-4_RELEASE`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:221
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"DISTVERSIONPREFIX= nekoto-\n"
+"DISTVERSION=\t1.2-4\n"
+"DISTVERSIONSUFFIX= _RELEASE\n"
+msgstr ""
+"PORTNAME= nekoto\n"
+"DISTVERSIONPREFIX= nekoto-\n"
+"DISTVERSION=\t1.2-4\n"
+"DISTVERSIONSUFFIX= _RELEASE\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:224
+msgid ""
+"`DISTVERSIONPREFIX` and `DISTVERSIONSUFFIX` will not be used while "
+"constructing `PORTVERSION`, but only used in `DISTNAME`."
+msgstr ""
+"`DISTVERSIONPREFIX` и `DISTVERSIONSUFFIX` не будут использоваться при "
+"формировании `PORTVERSION`, а только в `DISTNAME`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:226
+msgid "All will generate a `PORTVERSION` of `1.2.4`."
+msgstr "Все сгенерируют `PORTVERSION` равный `1.2.4`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:229
+#, no-wrap
+msgid "Using `DISTVERSION` When the Version Contains Letters Meaning \"alpha\", \"beta\", or \"pre-release\""
+msgstr "Использование `DISTVERSION`, когда версия содержит буквы, означающие \"alpha\", \"beta\" или \"pre-release\""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:233
+msgid ""
+"When the version contains numbers separated by dots, dashes or underscores, "
+"and letters are used to mean \"alpha\", \"beta\" or \"pre-release\", which "
+"is, before the version without the letters, use `DISTVERSION`."
+msgstr ""
+"Если версия содержит числа, разделённые точками, тире или подчёркиваниями, а "
+"буквы используются для обозначения \"альфа\", \"бета\" или \"предварительной "
+"версии\" (то есть до версии без букв), используйте `DISTVERSION`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:238
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"DISTVERSION=\t1.2-pre4\n"
+msgstr ""
+"PORTNAME= nekoto\n"
+"DISTVERSION=\t1.2-pre4\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:244
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"DISTVERSION=\t1.2p4\n"
+msgstr ""
+"PORTNAME= nekoto\n"
+"DISTVERSION=\t1.2p4\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:247
+msgid ""
+"Both will generate a `PORTVERSION` of `1.2.p4` which is before than 1.2. "
+"man:pkg-version[8] can be used to check that fact:"
+msgstr ""
+"Оба варианта создадут `PORTVERSION` равную `1.2.p4`, что предшествует версии "
+"1.2. Для проверки этого факта можно использовать man:pkg-version[8]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:252
+#, no-wrap
+msgid ""
+"% pkg version -t 1.2.p4 1.2\n"
+"<\n"
+msgstr ""
+"% pkg version -t 1.2.p4 1.2\n"
+"<\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:257
+#, no-wrap
+msgid "Not Using `DISTVERSION` When the Version Contains Letters Meaning \"Patch Level\""
+msgstr "Не использовать `DISTVERSION`, если версия содержит буквы, означающие \"уровень патча\""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:261
+msgid ""
+"When the version contains letters that are not meant as \"alpha\", \"beta\", "
+"or \"pre\", but more in a \"patch level\", and meaning after the version "
+"without the letters, use `PORTVERSION`."
+msgstr ""
+"Если версия содержит буквы, которые не означают \"alpha\", \"beta\" или "
+"\"pre\", а скорее указывают на \"уровень исправления\" и следуют после "
+"версии без букв, используйте `PORTVERSION`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:266
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"PORTVERSION=\t1.2p4\n"
+msgstr ""
+"PORTNAME= nekoto\n"
+"PORTVERSION=\t1.2p4\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:270
+msgid ""
+"In this case, using `DISTVERSION` is not possible because it would generate "
+"a version of `1.2.p4` which would be before `1.2` and not after. man:pkg-"
+"version[8] will verify this:"
+msgstr ""
+"В данном случае использование `DISTVERSION` невозможно, так как это приведёт "
+"к генерации версии `1.2.p4`, которая будет считаться более ранней, чем "
+"`1.2`, а не более поздней. man:pkg-version[8] подтвердит это:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:277
+#, no-wrap
+msgid ""
+"% pkg version -t 1.2 1.2.p4\n"
+"> <.>\n"
+"% pkg version -t 1.2 1.2p4\n"
+"< <.>\n"
+msgstr ""
+"% pkg version -t 1.2 1.2.p4\n"
+"> <.>\n"
+"% pkg version -t 1.2 1.2p4\n"
+"< <.>\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:280
+msgid "`1.2` is after `1.2.p4`, which is _wrong_ in this case."
+msgstr "`1.2` идёт после `1.2.p4`, что в данном случае _неверно_."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:281
+msgid "`1.2` is before `1.2p4`, which is what was needed."
+msgstr "`1.2` находится перед `1.2p4`, что и требовалось."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:287
+msgid ""
+"For some more advanced examples of setting `PORTVERSION`, when the "
+"software's versioning is really not compatible with FreeBSD's, or `DISTNAME` "
+"when the distribution file does not contain the version itself, see "
+"crossref:makefiles[makefile-distname, `DISTNAME`]."
+msgstr ""
+"Для более сложных примеров настройки `PORTVERSION`, когда версия "
+"программного обеспечения действительно несовместима с FreeBSD, или "
+"`DISTNAME`, когда файл дистрибутива не содержит саму версию, см. "
+"crossref:makefiles[makefile-distname, `DISTNAME`]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:289
+#, no-wrap
+msgid "`PORTREVISION` and `PORTEPOCH`"
+msgstr "`PORTREVISION` и `PORTEPOCH`"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:292
+#, no-wrap
+msgid "`PORTREVISION`"
+msgstr "`PORTREVISION`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:296
+msgid ""
+"`PORTREVISION` is a monotonically increasing value which is reset to 0 with "
+"every increase of `DISTVERSION`, typically every time there is a new "
+"official vendor release. If `PORTREVISION` is non-zero, the value is "
+"appended to the package name. Changes to `PORTREVISION` are used by "
+"automated tools like man:pkg-version[8] to determine that a new package is "
+"available."
+msgstr ""
+"`PORTREVISION` — это монотонно возрастающее значение, которое сбрасывается в "
+"0 при каждом увеличении `DISTVERSION`, обычно при каждом новом официальном "
+"выпуске от поставщика. Если `PORTREVISION` не равен нулю, его значение "
+"добавляется к имени пакета. Изменения `PORTREVISION` используются "
+"автоматизированными инструментами, такими как man:pkg-version[8], для "
+"определения доступности нового пакета."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:300
+msgid ""
+"`PORTREVISION` must be increased each time a change is made to the port that "
+"changes the generated package in any way. That includes changes that only "
+"affect a package built with non-default crossref:makefiles[makefile-"
+"options,options]."
+msgstr ""
+"`PORTREVISION` должен быть увеличен каждый раз, когда в порт вносятся "
+"изменения, которые так или иначе влияют на сгенерированный пакет. Это "
+"включает изменения, затрагивающие только пакеты, собранные с нестандартными "
+"crossref:makefiles[makefile-options,опциями]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:302
+msgid "Examples of when `PORTREVISION` must be bumped:"
+msgstr "Примеры случаев, когда необходимо увеличить `PORTREVISION`:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:304
+msgid ""
+"Addition of patches to correct security vulnerabilities, bugs, or to add new "
+"functionality to the port."
+msgstr ""
+"Добавление исправлений для устранения уязвимостей безопасности, ошибок или "
+"для добавления новой функциональности в порт."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:305
+msgid ""
+"Changes to the port [.filename]#Makefile# to enable or disable compile-time "
+"options in the package."
+msgstr ""
+"Изменения в [.filename]#Makefile# порта для включения или отключения "
+"параметров сборки в пакете."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:306
+msgid ""
+"Changes in the packing list or the install-time behavior of the package. For "
+"example, a change to a script which generates initial data for the package, "
+"like man:ssh[1] host keys."
+msgstr ""
+"Изменения в списке файлов пакета или в поведении во время установки. "
+"Например, изменение скрипта, который генерирует начальные данные для пакета, "
+"такие как ключи хоста man:ssh[1]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:307
+msgid ""
+"Version bump of a port's shared library dependency (in this case, someone "
+"trying to install the old package after installing a newer version of the "
+"dependency will fail since it will look for the old libfoo.x instead of "
+"libfoo.(x+1))."
+msgstr ""
+"Увеличение версии зависимости порта от общей библиотеки (в данном случае, "
+"попытка установить старый пакет после установки более новой версии "
+"зависимости завершится неудачей, так как будет искаться старая версия "
+"libfoo.x вместо libfoo.(x+1))."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:308
+msgid ""
+"Silent changes to the port distfile which have significant functional "
+"differences. For example, changes to the distfile requiring a correction to "
+"[.filename]#distinfo# with no corresponding change to `DISTVERSION`, where a "
+"`diff -ru` of the old and new versions shows non-trivial changes to the code."
+msgstr ""
+"Тихие изменения в дистрибутивном файле порта, которые имеют значительные "
+"функциональные отличия. Например, изменения в дистрибутивном файле, "
+"требующие корректировки файла [.filename]#distinfo# без соответствующего "
+"изменения `DISTVERSION`, когда сравнение `diff -ru` старой и новой версий "
+"показывает нетривиальные изменения в коде."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:309
+msgid "Changes to `MAINTAINER`."
+msgstr "Изменения в `MAINTAINER`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:311
+msgid "Examples of changes which do not require a `PORTREVISION` bump:"
+msgstr "Примеры изменений, которые не требуют увеличения `PORTREVISION`:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:313
+msgid ""
+"Style changes to the port skeleton with no functional change to what appears "
+"in the resulting package."
+msgstr ""
+"Стилевые изменения в каркасе портов без функциональных изменений в итоговом "
+"пакете."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:314
+msgid ""
+"Changes to `MASTER_SITES` or other functional changes to the port which do "
+"not affect the resulting package."
+msgstr ""
+"Изменения в `MASTER_SITES` или другие функциональные изменения порта, "
+"которые не влияют на итоговый пакет."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:315
+msgid ""
+"Trivial patches to the distfile such as correction of typos, which are not "
+"important enough that users of the package have to go to the trouble of "
+"upgrading."
+msgstr ""
+"Тривиальные исправления в дистрибутивном файле, такие как исправление "
+"опечаток, которые не настолько важны, чтобы пользователи пакета были "
+"вынуждены тратить время на обновление."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:316
+msgid ""
+"Build fixes which cause a package to become compilable where it was "
+"previously failing. As long as the changes do not introduce any functional "
+"change on any other platforms on which the port did previously build. Since "
+"`PORTREVISION` reflects the content of the package, if the package was not "
+"previously buildable then there is no need to increase `PORTREVISION` to "
+"mark a change."
+msgstr ""
+"Исправления сборки, которые позволяют пакету компилироваться там, где ранее "
+"это не удавалось. При условии, что изменения не вносят функциональных "
+"изменений на других платформах, где порт ранее собирался. Поскольку "
+"`PORTREVISION` отражает содержимое пакета, если пакет ранее не мог быть "
+"собран, то нет необходимости увеличивать `PORTREVISION` для обозначения "
+"изменений."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:321
+msgid ""
+"A rule of thumb is to decide whether a change committed to a port is "
+"something which _some_ people would benefit from having. Either because of "
+"an enhancement, fix, or by virtue that the new package will actually work at "
+"all. Then weigh that against that fact that it will cause everyone who "
+"regularly updates their ports tree to be compelled to update. If yes, "
+"`PORTREVISION` must be bumped."
+msgstr ""
+"Эмпирическое правило заключается в том, чтобы решить, является ли изменение, "
+"внесённое в порт, чем-то, что принесёт пользу _некоторым_ пользователям. "
+"Будь то улучшение, исправление или просто факт, что новый пакет вообще будет "
+"работать. Затем необходимо сопоставить это с тем, что всем, кто регулярно "
+"обновляет своё дерево портов, придётся выполнить обновление. Если ответ "
+"положительный, необходимо увеличить `PORTREVISION`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:326
+msgid ""
+"People using binary packages will _never_ see the update if `PORTREVISION` "
+"is not bumped. Without increasing `PORTREVISION`, the package builders have "
+"no way to detect the change and thus, will not rebuild the package."
+msgstr ""
+"Пользователи бинарных пакетов _никогда_ не увидят обновления, если "
+"`PORTREVISION` не увеличен. Без увеличения `PORTREVISION` сборщики пакетов "
+"не могут обнаружить изменение и, следовательно, не пересоберут пакет."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:329
+#, no-wrap
+msgid "`PORTEPOCH`"
+msgstr "`PORTEPOCH`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:333
+msgid ""
+"From time to time a software vendor or FreeBSD porter will do something "
+"silly and release a version of their software which is actually numerically "
+"less than the previous version. An example of this is a port which goes "
+"from foo-20000801 to foo-1.0 (the former will be incorrectly treated as a "
+"newer version since 20000801 is a numerically greater value than 1)."
+msgstr ""
+"Время от времени разработчики программного обеспечения или сопровождающие "
+"портов FreeBSD совершают ошибку и выпускают версию своего ПО, которая "
+"фактически имеет меньший номер по сравнению с предыдущей. Примером может "
+"служить переход с foo-20000801 на foo-1.0 (первая версия будет ошибочно "
+"считаться более новой, поскольку число 20000801 больше, чем 1.0)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:339
+msgid ""
+"The results of version number comparisons are not always obvious. `pkg "
+"version` (see man:pkg-version[8]) can be used to test the comparison of two "
+"version number strings. For example:"
+msgstr ""
+"Результаты сравнения номеров версий не всегда очевидны. Команда `pkg "
+"version` (см. man:pkg-version[8]) может быть использована для проверки "
+"сравнения двух строк с номерами версий. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:344
+#, no-wrap
+msgid ""
+"% pkg version -t 0.031 0.29\n"
+">\n"
+msgstr ""
+"% pkg version -t 0.031 0.29\n"
+">\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:347
+msgid ""
+"The `>` output indicates that version 0.031 is considered greater than "
+"version 0.29, which may not have been obvious to the porter."
+msgstr ""
+"Символ `>` в выводе указывает, что версия 0.031 считается больше, чем версия "
+"0.29, что могло быть неочевидно для сопровождающего."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:354
+msgid ""
+"In situations such as this, `PORTEPOCH` must be increased. If `PORTEPOCH` "
+"is nonzero it is appended to the package name as described in section 0 "
+"above. `PORTEPOCH` must never be decreased or reset to zero, because that "
+"would cause comparison to a package from an earlier epoch to fail. For "
+"example, the package would not be detected as out of date. The new version "
+"number, `1.0,1` in the above example, is still numerically less than the "
+"previous version, 20000801, but the `,1` suffix is treated specially by "
+"automated tools and found to be greater than the implied suffix `,0` on the "
+"earlier package."
+msgstr ""
+"В таких ситуациях необходимо увеличить `PORTEPOCH`. Если `PORTEPOCH` не "
+"равен нулю, он добавляется к имени пакета, как описано в разделе 0 выше. "
+"`PORTEPOCH` никогда не должен уменьшаться или сбрасываться до нуля, потому "
+"что это приведёт к ошибке при сравнении с пакетом из более ранней эпохи. "
+"Например, пакет не будет обнаружен как устаревший. Новый номер версии, "
+"`1.0,1` в приведённом выше примере, всё ещё численно меньше предыдущей "
+"версии, 20000801, но суффикс `,1` обрабатывается автоматизированными "
+"инструментами особым образом и считается большим, чем подразумеваемый "
+"суффикс `,0` у предыдущего пакета."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:357
+msgid ""
+"Dropping or resetting `PORTEPOCH` incorrectly leads to no end of grief. If "
+"the discussion above was not clear enough, please consult the {freebsd-"
+"ports}."
+msgstr ""
+"Неправильное удаление или сброс `PORTEPOCH` приводит к бесконечным "
+"проблемам. Если приведённое выше объяснение недостаточно ясно, обратитесь к "
+"{freebsd-ports}."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:361
+msgid ""
+"It is expected that `PORTEPOCH` will not be used for the majority of ports, "
+"and that sensible use of `DISTVERSION`, or that use `PORTVERSION` carefully, "
+"can often preempt it becoming necessary if a future release of the software "
+"changes the version structure. However, care is needed by FreeBSD porters "
+"when a vendor release is made without an official version number - such as a "
+"code \"snapshot\" release. The temptation is to label the release with the "
+"release date, which will cause problems as in the example above when a new "
+"\"official\" release is made."
+msgstr ""
+"Ожидается, что `PORTEPOCH` не будет использоваться для большинства портов, и "
+"что разумное использование `DISTVERSION` или аккуратное применение "
+"`PORTVERSION` часто может предотвратить необходимость его использования, "
+"если будущий выпуск программного обеспечения изменит структуру версий. "
+"Однако разработчикам портов FreeBSD следует быть осторожными, когда вендор "
+"выпускает релиз без официального номера версии — например, релиз в виде "
+"\"снимка\" кода. Возникает соблазн обозначить такой релиз датой выпуска, что "
+"вызовет проблемы, как в примере выше, когда будет сделан новый "
+"\"официальный\" релиз."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:364
+msgid ""
+"For example, if a snapshot release is made on the date `20000917`, and the "
+"previous version of the software was version `1.2`, do not use `20000917` "
+"for `DISTVERSION`. The correct way is a `DISTVERSION` of `1.2.20000917`, or "
+"similar, so that the succeeding release, say `1.3`, is still a numerically "
+"greater value."
+msgstr ""
+"Например, если снимок выпущен на дату `20000917`, а предыдущая версия "
+"программного обеспечения была `1.2`, не следует использовать `20000917` для "
+"`DISTVERSION`. Правильным будет указать `DISTVERSION` как `1.2.20000917` или "
+"подобное, чтобы следующая версия, например `1.3`, оставалась численно "
+"большей."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:366
+#, no-wrap
+msgid "Example of `PORTREVISION` and `PORTEPOCH` Usage"
+msgstr "Пример использования `PORTREVISION` и `PORTEPOCH`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:369
+msgid ""
+"The `gtkmumble` port, version `0.10`, is committed to the ports collection:"
+msgstr "Порт `gtkmumble` версии `0.10` добавлен в коллекцию портов:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:374
+#, no-wrap
+msgid ""
+"PORTNAME=\tgtkmumble\n"
+"DISTVERSION=\t0.10\n"
+msgstr ""
+"PORTNAME=\tgtkmumble\n"
+"DISTVERSION=\t0.10\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:377
+msgid "`PKGNAME` becomes `gtkmumble-0.10`."
+msgstr "`PKGNAME` становится `gtkmumble-0.10`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:380
+msgid ""
+"A security hole is discovered which requires a local FreeBSD patch. "
+"`PORTREVISION` is bumped accordingly."
+msgstr ""
+"Обнаружена уязвимость в безопасности, требующая локального исправления "
+"FreeBSD. `PORTREVISION` соответствующим образом увеличивается."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:386
+#, no-wrap
+msgid ""
+"PORTNAME=\tgtkmumble\n"
+"DISTVERSION=\t0.10\n"
+"PORTREVISION=\t1\n"
+msgstr ""
+"PORTNAME=\tgtkmumble\n"
+"DISTVERSION=\t0.10\n"
+"PORTREVISION=\t1\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:389
+msgid "`PKGNAME` becomes `gtkmumble-0.10_1`"
+msgstr "`PKGNAME` принимает значение `gtkmumble-0.10_1`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:393
+msgid ""
+"A new version is released by the vendor, numbered `0.2` (it turns out the "
+"author actually intended `0.10` to actually mean `0.1.0`, not \"what comes "
+"after 0.9\" - oops, too late now). Since the new minor version `2` is "
+"numerically less than the previous version `10`, `PORTEPOCH` must be bumped "
+"to manually force the new package to be detected as \"newer\". Since it is "
+"a new vendor release of the code, `PORTREVISION` is reset to 0 (or removed "
+"from the [.filename]#Makefile#)."
+msgstr ""
+"Выпущена новая версия от поставщика под номером `0.2` (оказывается, автор "
+"изначально подразумевал, что `0.10` на самом деле означает `0.1.0`, а не "
+"\"то, что идет после 0.9\" — увы, теперь уже поздно). Поскольку новая "
+"минорная версия `2` численно меньше предыдущей версии `10`, необходимо "
+"увеличить `PORTEPOCH`, чтобы вручную заставить систему распознавать новый "
+"пакет как \"более новый\". Так как это новый релиз кода от поставщика, "
+"`PORTREVISION` сбрасывается до 0 (или удаляется из [.filename]#Makefile#)."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:399
+#, no-wrap
+msgid ""
+"PORTNAME=\tgtkmumble\n"
+"DISTVERSION=\t0.2\n"
+"PORTEPOCH=\t1\n"
+msgstr ""
+"PORTNAME=\tgtkmumble\n"
+"DISTVERSION=\t0.2\n"
+"PORTEPOCH=\t1\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:402
+msgid "`PKGNAME` becomes `gtkmumble-0.2,1`"
+msgstr "`PKGNAME` становится `gtkmumble-0.2,1`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:405
+msgid ""
+"The next release is 0.3. Since `PORTEPOCH` never decreases, the version "
+"variables are now:"
+msgstr ""
+"Следующий выпуск — 0.3. Поскольку `PORTEPOCH` никогда не уменьшается, "
+"переменные версий теперь выглядят так:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:411
+#, no-wrap
+msgid ""
+"PORTNAME=\tgtkmumble\n"
+"DISTVERSION=\t0.3\n"
+"PORTEPOCH=\t1\n"
+msgstr ""
+"PORTNAME=\tgtkmumble\n"
+"DISTVERSION=\t0.3\n"
+"PORTEPOCH=\t1\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:414
+msgid "`PKGNAME` becomes `gtkmumble-0.3,1`"
+msgstr "`PKGNAME` принимает значение `gtkmumble-0.3,1`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:419
+msgid ""
+"If `PORTEPOCH` were reset to `0` with this upgrade, someone who had "
+"installed the `gtkmumble-0.10_1` package would not detect the "
+"`gtkmumble-0.3` package as newer, since `3` is still numerically less than "
+"`10`. Remember, this is the whole point of `PORTEPOCH` in the first place."
+msgstr ""
+"Если бы `PORTEPOCH` был сброшен в `0` при этом обновлении, пользователь, "
+"установивший пакет `gtkmumble-0.10_1`, не увидел бы пакет `gtkmumble-0.3` "
+"как более новый, поскольку `3` всё ещё численно меньше, чем `10`. Помните, в "
+"этом и заключается вся суть `PORTEPOCH` изначально."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:422
+#, no-wrap
+msgid "`PKGNAMEPREFIX` and `PKGNAMESUFFIX`"
+msgstr "`PKGNAMEPREFIX` и `PKGNAMESUFFIX`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:429
+msgid ""
+"Two optional variables, `PKGNAMEPREFIX` and `PKGNAMESUFFIX`, are combined "
+"with `PORTNAME` and `PORTVERSION` to form `PKGNAME` as `${PKGNAMEPREFIX}$"
+"{PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}`. Make sure this conforms to our "
+"crossref:makefiles[porting-pkgname,guidelines for a good package name]. In "
+"particular, the use of a hyphen (`-`) in `PORTVERSION` is _not_ allowed. "
+"Also, if the package name has the _language-_ or the _-compiled.specifics_ "
+"part (see below), use `PKGNAMEPREFIX` and `PKGNAMESUFFIX`, respectively. Do "
+"not make them part of `PORTNAME`."
+msgstr ""
+"Две необязательные переменные, `PKGNAMEPREFIX` и `PKGNAMESUFFIX`, "
+"объединяются с `PORTNAME` и `PORTVERSION` для формирования `PKGNAME` в виде "
+"`${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}`. Убедитесь, что "
+"это соответствует нашим crossref:makefiles[porting-pkgname,рекомендациям по "
+"именованию пакетов]. В частности, использование дефиса (`-`) в `PORTVERSION` "
+"_не_ допускается. Кроме того, если имя пакета содержит часть _language-_ или "
+"_-compiled.specifics_ (см. ниже), используйте `PKGNAMEPREFIX` и "
+"`PKGNAMESUFFIX` соответственно. Не включайте их в `PORTNAME`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:431
+#, no-wrap
+msgid "Package Naming Conventions"
+msgstr "Соглашения о наименовании пакетов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:435
+msgid ""
+"These are the conventions to follow when naming packages. This is to make "
+"the package directory easy to scan, as there are already thousands of "
+"packages and users are going to turn away if they hurt their eyes!"
+msgstr ""
+"Вот соглашения, которым следует придерживаться при наименовании пакетов. Это "
+"сделано для того, чтобы каталог пакетов было легко просматривать, поскольку "
+"там уже тысячи пакетов, и пользователи могут отказаться от их использования, "
+"если это будет напрягать их глаза!"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:437
+msgid ""
+"Package names take the form of [.filename]#language_region-name-"
+"compiled.specifics-version.numbers#."
+msgstr ""
+"Имена пакетов имеют формат [.filename]#language_region-name-"
+"compiled.specifics-version.numbers#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:440
+msgid ""
+"The package name is defined as `${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-$"
+"{PORTVERSION}`. Make sure to set the variables to conform to that format."
+msgstr ""
+"Имя пакета определяется как `${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-$"
+"{PORTVERSION}`. Убедитесь, что переменные заданы в соответствии с этим "
+"форматом."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:442
+#, no-wrap
+msgid "[.filename]#language_region-#"
+msgstr "[.filename]#language_region-#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:446
+msgid ""
+"FreeBSD strives to support the native language of its users. The _language-"
+"_ part is a two letter abbreviation of the natural language defined by "
+"ISO-639 when the port is specific to a certain language. Examples are `ja` "
+"for Japanese, `ru` for Russian, `vi` for Vietnamese, `zh` for Chinese, `ko` "
+"for Korean and `de` for German."
+msgstr ""
+"FreeBSD стремится поддерживать родной язык своих пользователей. Часть "
+"_language-_ представляет собой двухбуквенное сокращение естественного языка, "
+"определённое стандартом ISO-639, когда порт относится к определённому "
+"языку. Примерами являются `ja` для японского, `ru` для русского, `vi` для "
+"вьетнамского, `zh` для китайского, `ko` для корейского и `de` для немецкого."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:449
+msgid ""
+"If the port is specific to a certain region within the language area, add "
+"the two letter country code as well. Examples are `en_US` for US English "
+"and `fr_CH` for Swiss French."
+msgstr ""
+"Если порт относится к определённому региону в языковой зоне, добавьте также "
+"двухбуквенный код страны. Например, `en_US` для американского английского и "
+"`fr_CH` для швейцарского французского."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:451
+msgid "The _language-_ part is set in `PKGNAMEPREFIX`."
+msgstr "Часть _language-_ задается в `PKGNAMEPREFIX`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:453
+#, no-wrap
+msgid "[.filename]#name#"
+msgstr "[.filename]#name#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:458
+msgid ""
+"Make sure that the port's name and version are clearly separated and placed "
+"into `PORTNAME` and `DISTVERSION`. The only reason for `PORTNAME` to "
+"contain a version part is if the upstream distribution is really named that "
+"way, as in the package:textproc/libxml2[] or package:japanese/kinput2-"
+"freewnn[] ports. Otherwise, `PORTNAME` cannot contain any version-specific "
+"information. It is quite normal for several ports to have the same "
+"`PORTNAME`, as the package:www/apache*[] ports do; in that case, different "
+"versions (and different index entries) are distinguished by `PKGNAMEPREFIX` "
+"and `PKGNAMESUFFIX` values."
+msgstr ""
+"Убедитесь, что название порта и его версия четко разделены и указаны в "
+"`PORTNAME` и `DISTVERSION`. Единственная причина, по которой `PORTNAME` "
+"может содержать часть версии, — это если вышестоящее распространяемое ПО "
+"действительно так названо, как в портах package:textproc/libxml2[] или "
+"package:japanese/kinput2-freewnn[]. В противном случае `PORTNAME` не может "
+"содержать информацию о версии. Довольно нормально, когда несколько портов "
+"имеют одинаковый `PORTNAME`, как это делают порты package:www/apache*[]; в "
+"таком случае разные версии (и разные записи в индексе) различаются "
+"значениями `PKGNAMEPREFIX` и `PKGNAMESUFFIX`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:461
+msgid ""
+"There is a tradition of naming `Perl 5` modules by prepending `p5-` and "
+"converting the double-colon separator to a hyphen. For example, the "
+"`Data::Dumper` module becomes `p5-Data-Dumper`."
+msgstr ""
+"Существует традиция называть модули `Perl 5`, добавляя префикс `p5-` и "
+"заменя разделитель в виде двойного двоеточия на дефис. Например, модуль "
+"`Data::Dumper` становится `p5-Data-Dumper`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:462
+#, no-wrap
+msgid "[.filename]#-compiled.specifics#"
+msgstr "[.filename]#-compiled.specifics#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:467
+msgid ""
+"If the port can be built with different crossref:makefiles[makefile-"
+"masterdir,hardcoded defaults] (usually part of the directory name in a "
+"family of ports), the _-compiled.specifics_ part states the compiled-in "
+"defaults. The hyphen is optional. Examples are paper size and font units."
+msgstr ""
+"Если порт может быть собран с различными crossref:makefiles[makefile-"
+"masterdir,жестко заданными значениями по умолчанию] (обычно это часть имени "
+"каталога в семействе портов), часть _-compiled.specifics_ указывает "
+"скомпилированные значения по умолчанию. Дефис является необязательным. "
+"Примерами могут служить размер бумаги и единицы измерения шрифтов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:469
+msgid "The _-compiled.specifics_ part is set in `PKGNAMESUFFIX`."
+msgstr "Часть _-compiled.specifics_ задаётся в `PKGNAMESUFFIX`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:471
+#, no-wrap
+msgid "[.filename]#-version.numbers#"
+msgstr "[.filename]#-version.numbers#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:477
+msgid ""
+"The version string follows a dash (`-`) and is a period-separated list of "
+"integers and single lowercase alphabetics. In particular, it is not "
+"permissible to have another dash inside the version string. The only "
+"exception is the string `pl` (meaning \"patchlevel\"), which can be used "
+"_only_ when there are no major and minor version numbers in the software. "
+"If the software version has strings like \"alpha\", \"beta\", \"rc\", or "
+"\"pre\", take the first letter and put it immediately after a period. If "
+"the version string continues after those names, the numbers follow the "
+"single alphabet without an extra period between them (for example, `1.0b2`)."
+msgstr ""
+"Строка версии следует после тире (`-`) и представляет собой разделённый "
+"точками список целых чисел и строчных букв латинского алфавита. В частности, "
+"не допускается использование дополнительных тире внутри строки версии. "
+"Единственное исключение — строка `pl` (означающая \"уровень исправления\"), "
+"которую можно использовать _только_ в случае отсутствия у программного "
+"обеспечения номеров основной и дополнительной версий. Если в версии "
+"программного обеспечения встречаются строки типа \"alpha\", \"beta\", \"rc\" "
+"или \"pre\", следует взять первую букву и поместить её сразу после точки. "
+"Если после таких названий строка версии продолжается, числа следуют за "
+"буквой без дополнительной точки между ними (например, `1.0b2`)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:481
+msgid ""
+"The idea is to make it easier to sort ports by looking at the version "
+"string. In particular, make sure version number components are always "
+"delimited by a period, and if the date is part of the string, use the "
+"`d__yyyy.mm.dd__` format, not `_dd.mm.yyyy_` or the non-Y2K compliant "
+"`_yy.mm.dd_` format. It is important to prefix the version with a letter, "
+"here `d` (for date), in case a release with an actual version number is "
+"made, which would be numerically less than `_yyyy_`."
+msgstr ""
+"Идея заключается в упрощении сортировки портов за счёт анализа строки "
+"версии. В частности, необходимо убедиться, что компоненты номера версии "
+"всегда разделены точкой, а если дата является частью строки, использовать "
+"формат `d__yyyy.mm.dd__`, а не `_dd.mm.yyyy_` или не соответствующий "
+"стандарту Y2K формат `_yy.mm.dd_`. Важно добавлять перед версией букву, в "
+"данном случае `d` (от слова \"дата\"), на случай, если будет выпущена версия "
+"с фактическим номером, который численно окажется меньше `_yyyy_`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:487
+msgid ""
+"Package name must be unique among all of the ports tree, check that there is "
+"not already a port with the same `PORTNAME` and if there is add one of "
+"crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMEPREFIX` or "
+"`PKGNAMESUFFIX`]."
+msgstr ""
+"Название пакета должно быть уникальным среди всех портов в дереве. "
+"Убедитесь, что порт с таким же `PORTNAME` ещё не существует, и если он есть, "
+"добавьте один из crossref:makefiles[porting-pkgnameprefix-"
+"suffix,`PKGNAMEPREFIX` или `PKGNAMESUFFIX`]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:490
+msgid ""
+"Here are some (real) examples on how to convert the name as called by the "
+"software authors to a suitable package name, for each line, only one of "
+"`DISTVERSION` or `PORTVERSION` is set in, depending on which would be used "
+"in the port's [.filename]#Makefile#:"
+msgstr ""
+"Вот несколько (реальных) примеров преобразования названия, указанного "
+"авторами программного обеспечения, в подходящее имя пакета. В каждой строке "
+"указана только одна из переменных `DISTVERSION` или `PORTVERSION`, в "
+"зависимости от того, какая используется в [.filename]#Makefile# порта:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:491
+#, no-wrap
+msgid "Package Naming Examples"
+msgstr "Примеры наименования пакетов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:495
+#, no-wrap
+msgid "Distribution Name"
+msgstr "Имя дистрибутива"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:496
+#, no-wrap
+msgid "PKGNAMEPREFIX"
+msgstr "PKGNAMEPREFIX"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:497
+#, no-wrap
+msgid "PORTNAME"
+msgstr "PORTNAME"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:498
+#, no-wrap
+msgid "PKGNAMESUFFIX"
+msgstr "PKGNAMESUFFIX"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:502
+#, no-wrap
+msgid "Reason or comment"
+msgstr "Причина или комментарий"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:503
+#, no-wrap
+msgid "mule-2.2.2"
+msgstr "mule-2.2.2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:504
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:506
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:512
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:520
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:522
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:528
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:530
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:536
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:538
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:544
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:546
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:552
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:554
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:560
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:562
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:568
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:570
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:576
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:578
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:586
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:592
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:600
+#, no-wrap
+msgid "(empty)"
+msgstr "(пусто)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:505
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:513
+#, no-wrap
+msgid "mule"
+msgstr "mule"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:507
+#, no-wrap
+msgid "2.2.2"
+msgstr "2.2.2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:510
+#, no-wrap
+msgid "No changes required"
+msgstr "Никаких изменений не требуется"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:511
+#, no-wrap
+msgid "mule-1.0.1"
+msgstr "mule-1.0.1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:514
+#, no-wrap
+msgid "1"
+msgstr "1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:515
+#, no-wrap
+msgid "1.0.1"
+msgstr "1.0.1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:518
+#, no-wrap
+msgid "This is version 1 of mule, and version 2 already exists"
+msgstr "Это версия 1 mule, а версия 2 уже существует"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:519
+#, no-wrap
+msgid "EmiClock-1.0.2"
+msgstr "EmiClock-1.0.2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:521
+#, no-wrap
+msgid "emiclock"
+msgstr "emiclock"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:523
+#, no-wrap
+msgid "1.0.2"
+msgstr "1.0.2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:526
+#, no-wrap
+msgid "No uppercase names for single programs"
+msgstr "Нет имен в верхнем регистре для отдельных программ"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:527
+#, no-wrap
+msgid "rdist-1.3alpha"
+msgstr "rdist-1.3alpha"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:529
+#, no-wrap
+msgid "rdist"
+msgstr "rdist"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:531
+#, no-wrap
+msgid "1.3alpha"
+msgstr "1.3alpha"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:534
+#, no-wrap
+msgid "Version will be `1.3.a`"
+msgstr "Версия будет `1.3.a`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:535
+#, no-wrap
+msgid "es-0.9-beta1"
+msgstr "es-0.9-beta1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:537
+#, no-wrap
+msgid "es"
+msgstr "es"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:539
+#, no-wrap
+msgid "0.9-beta1"
+msgstr "0.9-beta1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:542
+#, no-wrap
+msgid "Version will be `0.9.b1`"
+msgstr "Версия будет `0.9.b1`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:543
+#, no-wrap
+msgid "mailman-2.0rc3"
+msgstr "mailman-2.0rc3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:545
+#, no-wrap
+msgid "mailman"
+msgstr "mailman"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:547
+#, no-wrap
+msgid "2.0rc3"
+msgstr "2.0rc3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:550
+#, no-wrap
+msgid "Version will be `2.0.r3`"
+msgstr "Версия будет `2.0.r3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:551
+#, no-wrap
+msgid "v3.3beta021.src"
+msgstr "v3.3beta021.src"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:553
+#, no-wrap
+msgid "tiff"
+msgstr "tiff"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:556
+#, no-wrap
+msgid "3.3"
+msgstr "3.3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:558
+#, no-wrap
+msgid "What the heck was that anyway?"
+msgstr "Что это вообще было?"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:559
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:561
+#, no-wrap
+msgid "tvtwm"
+msgstr "tvtwm"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:564
+#, no-wrap
+msgid "p11"
+msgstr "p11"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:566
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:574
+#, no-wrap
+msgid "No version in the filename, use what upstream says it is"
+msgstr "Нет версии в имени файла, используйте то, что указано в исходном коде"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:567
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:569
+#, no-wrap
+msgid "piewm"
+msgstr "piewm"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:571
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:603
+#, no-wrap
+msgid "1.0"
+msgstr "1.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:575
+#, no-wrap
+msgid "xvgr-2.10pl1"
+msgstr "xvgr-2.10pl1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:577
+#, no-wrap
+msgid "xvgr"
+msgstr "xvgr"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:580
+#, no-wrap
+msgid "2.10.pl1"
+msgstr "2.10.pl1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:582
+#, no-wrap
+msgid "In that case, `pl1` means patch level, so using DISTVERSION is not possible."
+msgstr "В таком случае, `pl1` означает уровень патча, поэтому использование DISTVERSION невозможно."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:583
+#, no-wrap
+msgid "gawk-2.15.6"
+msgstr "gawk-2.15.6"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:584
+#, no-wrap
+msgid "ja-"
+msgstr "ja-"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:585
+#, no-wrap
+msgid "gawk"
+msgstr "gawk"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:587
+#, no-wrap
+msgid "2.15.6"
+msgstr "2.15.6"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:590
+#, no-wrap
+msgid "Japanese language version"
+msgstr "Японская языковая версия"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:591
+#, no-wrap
+msgid "psutils-1.13"
+msgstr "psutils-1.13"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:593
+#, no-wrap
+msgid "psutils"
+msgstr "psutils"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:594
+#, no-wrap
+msgid "-letter"
+msgstr "-letter"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:595
+#, no-wrap
+msgid "1.13"
+msgstr "1.13"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:598
+#, no-wrap
+msgid "Paper size hardcoded at package build time"
+msgstr "Размер бумаги жестко задан во время сборки пакета"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:599
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:601
+#, no-wrap
+msgid "pkfonts"
+msgstr "pkfonts"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:602
+#, no-wrap
+msgid "300"
+msgstr "300"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:605
+#, no-wrap
+msgid "Package for 300dpi fonts"
+msgstr "Пакет для шрифтов с разрешением 300dpi"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:609
+msgid ""
+"If there is absolutely no trace of version information in the original "
+"source and it is unlikely that the original author will ever release another "
+"version, just set the version string to `1.0` (like the `piewm` example "
+"above). Otherwise, ask the original author or use the date string the "
+"source file was released on (`d__yyyy.mm.dd__`, or `d__yyyymmdd__`) as the "
+"version."
+msgstr ""
+"Если в исходном источнике полностью отсутствует информация о версии и "
+"маловероятно, что автор когда-либо выпустит новую версию, просто укажите "
+"строку версии как `1.0` (как в примере с `piewm` выше). В противном случае, "
+"спросите автора или используйте дату выпуска исходного файла в формате "
+"`d__yyyy.mm.dd__` или `d__yyyymmdd__` в качестве версии."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:614
+msgid ""
+"Use any letter. Here, `d` here stands for date, if the source is a Git "
+"repository, `g` followed by the commit date is commonly used, using `s` for "
+"snapshot is also common."
+msgstr ""
+"Используйте любую букву. Здесь `d` означает дату, если источник — это "
+"репозиторий Git, часто используется `g` с последующей датой коммита, также "
+"распространено использование `s` для снимка."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:617
+#, no-wrap
+msgid "Categorization"
+msgstr "Категоризация"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:620
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4867
+#, no-wrap
+msgid "`CATEGORIES`"
+msgstr "`CATEGORIES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:626
+msgid ""
+"When a package is created, it is put under [.filename]#/usr/ports/packages/"
+"All# and links are made from one or more subdirectories of [.filename]#/usr/"
+"ports/packages#. The names of these subdirectories are specified by the "
+"variable `CATEGORIES`. It is intended to make life easier for the user when "
+"he is wading through the pile of packages on the FTP site or the CDROM. "
+"Please take a look at the crossref:makefiles[porting-categories,current list "
+"of categories] and pick the ones that are suitable for the port."
+msgstr ""
+"При создании пакета он помещается в [.filename]#/usr/ports/packages/All#, и "
+"ссылки на него создаются в одной или нескольких поддиректориях [.filename]#/"
+"usr/ports/packages#. Имена этих поддиректорий задаются переменной "
+"`CATEGORIES`. Это предназначено для облегчения поиска пакетов пользователем "
+"при просмотре большого количества пакетов на FTP-сайте или CDROM. "
+"Пожалуйста, ознакомьтесь с crossref:makefiles[porting-categories,текущим "
+"списком категорий] и выберите подходящие для данного порта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:630
+msgid ""
+"This list also determines where in the ports tree the port is imported. If "
+"there is more than one category here, the port files must be put in the "
+"subdirectory with the name of the first category. See "
+"crossref:makefiles[choosing-categories,below] for more discussion about how "
+"to pick the right categories."
+msgstr ""
+"Этот список также определяет, где в дереве портов будет размещён порт. Если "
+"здесь указано несколько категорий, файлы порта должны быть помещены в "
+"подкаталог с названием первой категории. Дополнительные сведения о выборе "
+"подходящих категорий см. в crossref:makefiles[choosing-categories,ниже]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:632
+#, no-wrap
+msgid "Current List of Categories"
+msgstr "Текущий список категорий"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:637
+msgid ""
+"Here is the current list of port categories. Those marked with an asterisk "
+"(`*`) are _virtual_ categories-those that do not have a corresponding "
+"subdirectory in the ports tree. They are only used as secondary categories, "
+"and only for search purposes."
+msgstr ""
+"Вот текущий список категорий портов. Категории, помеченные звёздочкой (`*`), "
+"являются _виртуальными_ — они не имеют соответствующего подкаталога в дереве "
+"портов. Они используются только как вторичные категории и исключительно для "
+"целей поиска."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:641
+msgid ""
+"For non-virtual categories, there is a one-line description in `COMMENT` in "
+"that subdirectory's [.filename]#Makefile#."
+msgstr ""
+"Для невиртуальных категорий в `COMMENT` в [.filename]#Makefile# "
+"соответствующего подкаталога содержится однострочное описание."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:647
+#, no-wrap
+msgid "Category"
+msgstr "Категория"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:648
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1473
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1882
+#, no-wrap
+msgid "Description"
+msgstr "Описание"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:650
+#, no-wrap
+msgid "Notes"
+msgstr "Заметки"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:651
+#, no-wrap
+msgid "[.filename]#accessibility#"
+msgstr "[.filename]#accessibility#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:652
+#, no-wrap
+msgid "Ports to help disabled users."
+msgstr "Порты для помощи пользователям с ограниченными возможностями."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:655
+#, no-wrap
+msgid "[.filename]#afterstep#`*`"
+msgstr "[.filename]#afterstep#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:656
+#, no-wrap
+msgid "Ports to support the http://www.afterstep.org/[AfterStep] window manager."
+msgstr "Порты для поддержки оконного менеджера http://www.afterstep.org/[AfterStep]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:659
+#, no-wrap
+msgid "[.filename]#arabic#"
+msgstr "[.filename]#arabic#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:660
+#, no-wrap
+msgid "Arabic language support."
+msgstr "Поддержка арабского языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:663
+#, no-wrap
+msgid "[.filename]#archivers#"
+msgstr "[.filename]#archivers#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:664
+#, no-wrap
+msgid "Archiving tools."
+msgstr "Инструменты для архивирования."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:667
+#, no-wrap
+msgid "[.filename]#astro#"
+msgstr "[.filename]#astro#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:668
+#, no-wrap
+msgid "Astronomical ports."
+msgstr "Астрономические порты."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:671
+#, no-wrap
+msgid "[.filename]#audio#"
+msgstr "[.filename]#audio#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:672
+#, no-wrap
+msgid "Sound support."
+msgstr "Поддержка звука."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:675
+#, no-wrap
+msgid "[.filename]#benchmarks#"
+msgstr "[.filename]#benchmarks#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:676
+#, no-wrap
+msgid "Benchmarking utilities."
+msgstr "Утилиты для тестирования производительности."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:679
+#, no-wrap
+msgid "[.filename]#biology#"
+msgstr "[.filename]#biology#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:680
+#, no-wrap
+msgid "Biology-related software."
+msgstr "Программное обеспечение, связанное с биологией."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:683
+#, no-wrap
+msgid "[.filename]#cad#"
+msgstr "[.filename]#cad#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:684
+#, no-wrap
+msgid "Computer aided design tools."
+msgstr "Компьютерные средства автоматизированного проектирования."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:687
+#, no-wrap
+msgid "[.filename]#chinese#"
+msgstr "[.filename]#chinese#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:688
+#, no-wrap
+msgid "Chinese language support."
+msgstr "Поддержка китайского языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:691
+#, no-wrap
+msgid "[.filename]#comms#"
+msgstr "[.filename]#comms#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:692
+#, no-wrap
+msgid "Communication software."
+msgstr "Программное обеспечение для связи."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:694
+#, no-wrap
+msgid "Mostly software to talk to the serial port."
+msgstr "В основном программное обеспечение для работы с последовательным портом."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:695
+#, no-wrap
+msgid "[.filename]#converters#"
+msgstr "[.filename]#converters#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:696
+#, no-wrap
+msgid "Character code converters."
+msgstr "Преобразователи символьных кодировок."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:699
+#, no-wrap
+msgid "[.filename]#databases#"
+msgstr "[.filename]#databases#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:700
+#, no-wrap
+msgid "Databases."
+msgstr "Базы данных."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:703
+#, no-wrap
+msgid "[.filename]#deskutils#"
+msgstr "[.filename]#deskutils#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:704
+#, no-wrap
+msgid "Things that used to be on the desktop before computers were invented."
+msgstr "Вещи, которые раньше находились на рабочем столе до изобретения компьютеров."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:707
+#, no-wrap
+msgid "[.filename]#devel#"
+msgstr "[.filename]#devel#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:708
+#, no-wrap
+msgid "Development utilities."
+msgstr "Средства разработки."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:710
+#, no-wrap
+msgid "Do not put libraries here just because they are libraries. They should _not_ be in this category unless they truly do not belong anywhere else."
+msgstr "Не размещайте библиотеки здесь только потому, что они являются библиотеками. Они _не_ должны быть в этой категории, если только они действительно не подходят никуда больше."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:711
+#, no-wrap
+msgid "[.filename]#dns#"
+msgstr "[.filename]#dns#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:712
+#, no-wrap
+msgid "DNS-related software."
+msgstr "Программное обеспечение, связанное с DNS."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:715
+#, no-wrap
+msgid "[.filename]#docs#`*`"
+msgstr "[.filename]#docs#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:716
+#, no-wrap
+msgid "Meta-ports for FreeBSD documentation."
+msgstr "Мета-порты для документации FreeBSD."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:719
+#, no-wrap
+msgid "[.filename]#editors#"
+msgstr "[.filename]#editors#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:720
+#, no-wrap
+msgid "General editors."
+msgstr "Общие редакторы."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:722
+#, no-wrap
+msgid "Specialized editors go in the section for those tools. For example, a mathematical-formula editor will go in [.filename]#math#, and have [.filename]#editors# as a second category."
+msgstr "Специализированные редакторы помещаются в раздел соответствующих инструментов. Например, редактор математических формул будет помещён в [.filename]#math#, а [.filename]#editors# будет для него второй категорией."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:723
+#, no-wrap
+msgid "[.filename]#education#`*`"
+msgstr "[.filename]#education#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:724
+#, no-wrap
+msgid "Education-related software."
+msgstr "Программное обеспечение для образования."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:726
+#, no-wrap
+msgid "This includes applications, utilities, or games primarily or substantially designed to help the user learn a specific topic or study in general. It also includes course-writing applications, course-delivery applications, and classroom or school management applications"
+msgstr "Это включает приложения, утилиты или игры, разработанные в первую очередь или в значительной степени для помощи пользователю в изучении конкретной темы или обучении в целом. Также сюда входят приложения для создания курсов, приложения для предоставления курсов и приложения для управления классом или школой"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:727
+#, no-wrap
+msgid "[.filename]#elisp#`*`"
+msgstr "[.filename]#elisp#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:728
+#, no-wrap
+msgid "Emacs-lisp ports."
+msgstr "Порты Emacs-lisp."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:731
+#, no-wrap
+msgid "[.filename]#emulators#"
+msgstr "[.filename]#emulators#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:732
+#, no-wrap
+msgid "Emulators for other operating systems."
+msgstr "Эмуляторы других операционных систем."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:734
+#, no-wrap
+msgid "Terminal emulators do _not_ belong here. X-based ones go to [.filename]#x11# and text-based ones to either [.filename]#comms# or [.filename]#misc#, depending on the exact functionality."
+msgstr "Терминальные эмуляторы _не_ относятся сюда. Основанные на X идут в [.filename]#x11#, а текстовые — либо в [.filename]#comms#, либо в [.filename]#misc#, в зависимости от конкретной функциональности."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:735
+#, no-wrap
+msgid "[.filename]#enlightenment#`*`"
+msgstr "[.filename]#enlightenment#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:736
+#, no-wrap
+msgid "Ports related to the Enlightenment window manager."
+msgstr "Порты, связанные с оконным менеджером Enlightenment."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:739
+#, no-wrap
+msgid "[.filename]#filesystems#"
+msgstr "[.filename]#filesystems#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:740
+#, no-wrap
+msgid "File systems and related utilities."
+msgstr "Файловые системы и связанные утилиты."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:743
+#, no-wrap
+msgid "[.filename]#finance#"
+msgstr "[.filename]#finance#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:744
+#, no-wrap
+msgid "Monetary, financial and related applications."
+msgstr "Монетарные, финансовые и связанные с ними приложения."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:747
+#, no-wrap
+msgid "[.filename]#french#"
+msgstr "[.filename]#french#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:748
+#, no-wrap
+msgid "French language support."
+msgstr "Поддержка французского языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:751
+#, no-wrap
+msgid "[.filename]#ftp#"
+msgstr "[.filename]#ftp#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:752
+#, no-wrap
+msgid "FTP client and server utilities."
+msgstr "Клиентские и серверные утилиты FTP."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:754
+#, no-wrap
+msgid "If the port speaks both FTP and HTTP, put it in [.filename]#ftp# with a secondary category of [.filename]#www#."
+msgstr "Если порт поддерживает как FTP, так и HTTP, поместите его в [.filename]#ftp# с дополнительной категорией [.filename]#www#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:755
+#, no-wrap
+msgid "[.filename]#games#"
+msgstr "[.filename]#games#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:756
+#, no-wrap
+msgid "Games."
+msgstr "Игры."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:759
+#, no-wrap
+msgid "[.filename]#geography#`*`"
+msgstr "[.filename]#география#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:760
+#, no-wrap
+msgid "Geography-related software."
+msgstr "Программное обеспечение, связанное с географией."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:763
+#, no-wrap
+msgid "[.filename]#german#"
+msgstr "[.filename]#german#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:764
+#, no-wrap
+msgid "German language support."
+msgstr "Поддержка немецкого языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:767
+#, no-wrap
+msgid "[.filename]#gnome#`*`"
+msgstr "[.filename]#gnome#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:768
+#, no-wrap
+msgid "Ports from the https://www.gnome.org/[GNOME] Project."
+msgstr "Порты из проекта https://www.gnome.org/[GNOME]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:771
+#, no-wrap
+msgid "[.filename]#gnustep#`*`"
+msgstr "[.filename]#gnustep#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:772
+#, no-wrap
+msgid "Software related to the GNUstep desktop environment."
+msgstr "Программное обеспечение, связанное со средой рабочего стола GNUstep."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:775
+#, no-wrap
+msgid "[.filename]#graphics#"
+msgstr "[.filename]#graphics#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:776
+#, no-wrap
+msgid "Graphics utilities."
+msgstr "Графические утилиты."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:779
+#, no-wrap
+msgid "[.filename]#hamradio#`*`"
+msgstr "[.filename]#hamradio#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:780
+#, no-wrap
+msgid "Software for amateur radio."
+msgstr "Программное обеспечение для радиолюбителей."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:783
+#, no-wrap
+msgid "[.filename]#haskell#`*`"
+msgstr "[.filename]#haskell#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:784
+#, no-wrap
+msgid "Software related to the Haskell language."
+msgstr "Программное обеспечение, связанное с языком Haskell."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:787
+#, no-wrap
+msgid "[.filename]#hebrew#"
+msgstr "[.filename]#hebrew#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:788
+#, no-wrap
+msgid "Hebrew language support."
+msgstr "Поддержка иврита."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:791
+#, no-wrap
+msgid "[.filename]#hungarian#"
+msgstr "[.filename]#hungarian#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:792
+#, no-wrap
+msgid "Hungarian language support."
+msgstr "Венгерская языковая поддержка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:795
+#, no-wrap
+msgid "[.filename]#irc#"
+msgstr "[.filename]#irc#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:796
+#, no-wrap
+msgid "Internet Relay Chat utilities."
+msgstr "Утилиты Internet Relay Chat."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:799
+#, no-wrap
+msgid "[.filename]#japanese#"
+msgstr "[.filename]#japanese#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:800
+#, no-wrap
+msgid "Japanese language support."
+msgstr "Поддержка японского языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:803
+#, no-wrap
+msgid "[.filename]#java#"
+msgstr "[.filename]#java#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:804
+#, no-wrap
+msgid "Software related to the Java(TM) language."
+msgstr "Программное обеспечение, связанное с языком Java(TM)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:806
+#, no-wrap
+msgid "The [.filename]#java# category must not be the only one for a port. Save for ports directly related to the Java language, porters are also encouraged not to use [.filename]#java# as the main category of a port."
+msgstr "Категория [.filename]#java# не должна быть единственной для порта. За исключением портов, непосредственно связанных с языком Java, разработчикам также рекомендуется не использовать [.filename]#java# в качестве основной категории для порта."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:807
+#, no-wrap
+msgid "[.filename]#kde#`*`"
+msgstr "[.filename]#kde#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:808
+#, no-wrap
+msgid "Ports from the https://www.kde.org/[KDE] Project (generic)."
+msgstr "Порты проекта https://www.kde.org/[KDE] (общие)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:811
+#, no-wrap
+msgid "[.filename]#kde-applications#`*`"
+msgstr "[.filename]#kde-приложения#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:812
+#, no-wrap
+msgid "Applications from the https://www.kde.org/[KDE] Project."
+msgstr "Приложения от проекта https://www.kde.org/[KDE]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:815
+#, no-wrap
+msgid "[.filename]#kde-frameworks#`*`"
+msgstr "[.filename]#kde-frameworks#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:816
+#, no-wrap
+msgid "Add-on libraries from the https://www.kde.org/[KDE] Project for programming with Qt."
+msgstr "Дополнительные библиотеки от проекта https://www.kde.org/[KDE] для программирования с использованием Qt."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:819
+#, no-wrap
+msgid "[.filename]#kde-plasma#`*`"
+msgstr "[.filename]#kde-plasma#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:820
+#, no-wrap
+msgid "Desktop from the https://www.kde.org/[KDE] Project."
+msgstr "Рабочий стол от проекта https://www.kde.org/[KDE]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:823
+#, no-wrap
+msgid "[.filename]#kld#`*`"
+msgstr "[.filename]#kld#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:824
+#, no-wrap
+msgid "Kernel loadable modules."
+msgstr "Загружаемые модули ядра."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:827
+#, no-wrap
+msgid "[.filename]#korean#"
+msgstr "[.filename]#korean#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:828
+#, no-wrap
+msgid "Korean language support."
+msgstr "Поддержка корейского языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:831
+#, no-wrap
+msgid "[.filename]#lang#"
+msgstr "[.filename]#lang#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:832
+#, no-wrap
+msgid "Programming languages."
+msgstr "Языки программирования."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:835
+#, no-wrap
+msgid "[.filename]#linux#`*`"
+msgstr "[.filename]#linux#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:836
+#, no-wrap
+msgid "Linux applications and support utilities."
+msgstr "Приложения и вспомогательные утилиты Linux."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:839
+#, no-wrap
+msgid "[.filename]#lisp#`*`"
+msgstr "[.filename]#lisp#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:840
+#, no-wrap
+msgid "Software related to the Lisp language."
+msgstr "Программное обеспечение, связанное с языком Lisp."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:843
+#, no-wrap
+msgid "[.filename]#mail#"
+msgstr "[.filename]#mail#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:844
+#, no-wrap
+msgid "Mail software."
+msgstr "Почтовое программное обеспечение."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:847
+#, no-wrap
+msgid "[.filename]#mate#`*`"
+msgstr "[.filename]#mate#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:848
+#, no-wrap
+msgid "Ports related to the MATE desktop environment, a fork of GNOME 2."
+msgstr "Порты, связанные с окружением рабочего стола MATE, форком GNOME 2."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:851
+#, no-wrap
+msgid "[.filename]#math#"
+msgstr "[.filename]#math#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:852
+#, no-wrap
+msgid "Numerical computation software and other utilities for mathematics."
+msgstr "Численные расчеты и другие математические утилиты."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:855
+#, no-wrap
+msgid "[.filename]#mbone#`*`"
+msgstr "[.filename]#mbone#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:856
+#, no-wrap
+msgid "MBone applications."
+msgstr "Приложения MBone."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:859
+#, no-wrap
+msgid "[.filename]#misc#"
+msgstr "[.filename]#misc#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:860
+#, no-wrap
+msgid "Miscellaneous utilities"
+msgstr "Различные утилиты"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:862
+#, no-wrap
+msgid "Things that do not belong anywhere else. If at all possible, try to find a better category for the port than `misc`, as ports tend to be overlooked in here."
+msgstr "Вещи, которые не подходят никуда больше. По возможности, попытайтесь найти для порта категорию лучше, чем `misc`, так как порты здесь часто остаются без внимания."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:863
+#, no-wrap
+msgid "[.filename]#multimedia#"
+msgstr "[.filename]#multimedia#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:864
+#, no-wrap
+msgid "Multimedia software."
+msgstr "Мультимедийное программное обеспечение."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:867
+#, no-wrap
+msgid "[.filename]#net#"
+msgstr "[.filename]#net#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:868
+#, no-wrap
+msgid "Miscellaneous networking software."
+msgstr "Различное сетевое программное обеспечение."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:871
+#, no-wrap
+msgid "[.filename]#net-im#"
+msgstr "[.filename]#net-im#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:872
+#, no-wrap
+msgid "Instant messaging software."
+msgstr "Программное обеспечение для обмена мгновенными сообщениями."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:875
+#, no-wrap
+msgid "[.filename]#net-mgmt#"
+msgstr "[.filename]#net-mgmt#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:876
+#, no-wrap
+msgid "Networking management software."
+msgstr "Программное обеспечение для управления сетями."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:879
+#, no-wrap
+msgid "[.filename]#net-p2p#"
+msgstr "[.filename]#net-p2p#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:880
+#, no-wrap
+msgid "Peer to peer network applications."
+msgstr "Одноранговые сетевые приложения."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:883
+#, no-wrap
+msgid "[.filename]#net-vpn#`*`"
+msgstr "[.filename]#сеть-vpn#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:884
+#, no-wrap
+msgid "Virtual Private Network applications."
+msgstr "Виртуальные частные сети."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:887
+#, no-wrap
+msgid "[.filename]#news#"
+msgstr "[.filename]#news#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:888
+#, no-wrap
+msgid "USENET news software."
+msgstr "Программное обеспечение для USENET-новостей."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:891
+#, no-wrap
+msgid "[.filename]#parallel#`*`"
+msgstr "[.filename]#parallel#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:892
+#, no-wrap
+msgid "Applications dealing with parallelism in computing."
+msgstr "Приложения, работающие с параллелизмом в вычислениях."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:895
+#, no-wrap
+msgid "[.filename]#pear#`*`"
+msgstr "[.filename]#pear#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:896
+#, no-wrap
+msgid "Ports related to the Pear PHP framework."
+msgstr "Порты, связанные с PHP-фреймворком Pear."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:899
+#, no-wrap
+msgid "[.filename]#perl5#`*`"
+msgstr "[.filename]#perl5#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:900
+#, no-wrap
+msgid "Ports that require Perl version 5 to run."
+msgstr "Порты, требующие Perl версии 5 для работы."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:903
+#, no-wrap
+msgid "[.filename]#plan9#`*`"
+msgstr "[.filename]#plan9#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:904
+#, no-wrap
+msgid "Various programs from https://9p.io/wiki/plan9/Download/index.html[Plan9]."
+msgstr "Различные программы с https://9p.io/wiki/plan9/Download/index.html[Plan9]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:907
+#, no-wrap
+msgid "[.filename]#polish#"
+msgstr "[.filename]#polish#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:908
+#, no-wrap
+msgid "Polish language support."
+msgstr "Поддержка польского языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:911
+#, no-wrap
+msgid "[.filename]#ports-mgmt#"
+msgstr "[.filename]#ports-mgmt#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:912
+#, no-wrap
+msgid "Ports for managing, installing and developing FreeBSD ports and packages."
+msgstr "Порты для управления, установки и разработки портов и пакетов FreeBSD."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:915
+#, no-wrap
+msgid "[.filename]#portuguese#"
+msgstr "[.filename]#portuguese#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:916
+#, no-wrap
+msgid "Portuguese language support."
+msgstr "Поддержка португальского языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:919
+#, no-wrap
+msgid "[.filename]#print#"
+msgstr "[.filename]#print#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:920
+#, no-wrap
+msgid "Printing software."
+msgstr "Программное обеспечение для печати."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:922
+#, no-wrap
+msgid "Desktop publishing tools (previewers, etc.) belong here too."
+msgstr "Инструменты для настольных издательских систем (превьюеры и т. д.) также относятся сюда."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:923
+#, no-wrap
+msgid "[.filename]#python#`*`"
+msgstr "[.filename]#python#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:924
+#, no-wrap
+msgid "Software related to the https://www.python.org/[Python] language."
+msgstr "Программное обеспечение, связанное с языком https://www.python.org/[Python]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:927
+#, no-wrap
+msgid "[.filename]#ruby#`*`"
+msgstr "[.filename]#ruby#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:928
+#, no-wrap
+msgid "Software related to the https://www.ruby-lang.org/[Ruby] language."
+msgstr "Программное обеспечение, связанное с языком https://www.ruby-lang.org/[Ruby]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:931
+#, no-wrap
+msgid "[.filename]#rubygems#`*`"
+msgstr "[.filename]#rubygems#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:932
+#, no-wrap
+msgid "Ports of https://www.rubygems.org/[RubyGems] packages."
+msgstr "Порты пакетов https://www.rubygems.org/[RubyGems]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:935
+#, no-wrap
+msgid "[.filename]#russian#"
+msgstr "[.filename]#russian#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:936
+#, no-wrap
+msgid "Russian language support."
+msgstr "Поддержка русского языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:939
+#, no-wrap
+msgid "[.filename]#scheme#`*`"
+msgstr "[.filename]#scheme#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:940
+#, no-wrap
+msgid "Software related to the Scheme language."
+msgstr "Программное обеспечение, связанное с языком Scheme."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:943
+#, no-wrap
+msgid "[.filename]#science#"
+msgstr "[.filename]#science#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:944
+#, no-wrap
+msgid "Scientific ports that do not fit into other categories such as [.filename]#astro#, [.filename]#biology# and [.filename]#math#."
+msgstr "Научные порты, которые не входят в другие категории, такие как [.filename]#astro#, [.filename]#biology# и [.filename]#math#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:947
+#, no-wrap
+msgid "[.filename]#security#"
+msgstr "[.filename]#security#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:948
+#, no-wrap
+msgid "Security utilities."
+msgstr "Средства обеспечения безопасности."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:951
+#, no-wrap
+msgid "[.filename]#shells#"
+msgstr "[.filename]#shells#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:952
+#, no-wrap
+msgid "Command line shells."
+msgstr "Командные оболочки."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:955
+#, no-wrap
+msgid "[.filename]#spanish#`*`"
+msgstr "[.filename]#spanish#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:956
+#, no-wrap
+msgid "Spanish language support."
+msgstr "Поддержка испанского языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:959
+#, no-wrap
+msgid "[.filename]#sysutils#"
+msgstr "[.filename]#sysutils#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:960
+#, no-wrap
+msgid "System utilities."
+msgstr "Системные утилиты."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:963
+#, no-wrap
+msgid "[.filename]#tcl#`*`"
+msgstr "[.filename]#tcl#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:964
+#, no-wrap
+msgid "Ports that use Tcl to run."
+msgstr "Порты, использующие Tcl для запуска."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:967
+#, no-wrap
+msgid "[.filename]#textproc#"
+msgstr "[.filename]#textproc#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:968
+#, no-wrap
+msgid "Text processing utilities."
+msgstr "Средства обработки текста."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:970
+#, no-wrap
+msgid "It does not include desktop publishing tools, which go to [.filename]#print#."
+msgstr "Он не включает инструменты для настольных издательских систем, которые помещаются в [.filename]#print#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:971
+#, no-wrap
+msgid "[.filename]#tk#`*`"
+msgstr "[.filename]#tk#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:972
+#, no-wrap
+msgid "Ports that use Tk to run."
+msgstr "Порты, использующие Tk для работы."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:975
+#, no-wrap
+msgid "[.filename]#ukrainian#"
+msgstr "[.filename]#ukrainian#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:976
+#, no-wrap
+msgid "Ukrainian language support."
+msgstr "Поддержка украинского языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:979
+#, no-wrap
+msgid "[.filename]#vietnamese#"
+msgstr "[.filename]#vietnamese#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:980
+#, no-wrap
+msgid "Vietnamese language support."
+msgstr "Поддержка вьетнамского языка."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:983
+#, no-wrap
+msgid "[.filename]#wayland#`*`"
+msgstr "[.filename]#wayland#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:984
+#, no-wrap
+msgid "Ports to support the Wayland display server."
+msgstr "Порты для поддержки сервера дисплея Wayland."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:987
+#, no-wrap
+msgid "[.filename]#windowmaker#`*`"
+msgstr "[.filename]#windowmaker#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:988
+#, no-wrap
+msgid "Ports to support the Window Maker window manager."
+msgstr "Порты для поддержки оконного менеджера Window Maker."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:991
+#, no-wrap
+msgid "[.filename]#www#"
+msgstr "[.filename]#www#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:992
+#, no-wrap
+msgid "Software related to the World Wide Web."
+msgstr "Программное обеспечение, связанное с Всемирной паутиной."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:994
+#, no-wrap
+msgid "HTML language support belongs here too."
+msgstr "Поддержка языка HTML также относится сюда."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:995
+#, no-wrap
+msgid "[.filename]#x11#"
+msgstr "[.filename]#x11#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:996
+#, no-wrap
+msgid "The X Window System and friends."
+msgstr "Система X Window и связанные компоненты."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:998
+#, no-wrap
+msgid "This category is only for software that directly supports the window system. Do not put regular X applications here. Most of them go into other [.filename]#x11-*# categories (see below)."
+msgstr "Эта категория предназначена только для программного обеспечения, которое напрямую поддерживает оконную систему. Не помещайте сюда обычные X-приложения. Большинство из них относятся к другим категориям [.filename]#x11-*# (см. ниже)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:999
+#, no-wrap
+msgid "[.filename]#x11-clocks#"
+msgstr "[.filename]#x11-clocks#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1000
+#, no-wrap
+msgid "X11 clocks."
+msgstr "Часы X11."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1003
+#, no-wrap
+msgid "[.filename]#x11-drivers#"
+msgstr "[.filename]#x11-drivers#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1004
+#, no-wrap
+msgid "X11 drivers."
+msgstr "Драйверы X11."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1007
+#, no-wrap
+msgid "[.filename]#x11-fm#"
+msgstr "[.filename]#x11-fm#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1008
+#, no-wrap
+msgid "X11 file managers."
+msgstr "Менеджеры файлов X11."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1011
+#, no-wrap
+msgid "[.filename]#x11-fonts#"
+msgstr "[.filename]#x11-fonts#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1012
+#, no-wrap
+msgid "X11 fonts and font utilities."
+msgstr "Шрифты и утилиты для работы со шрифтами в X11."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1015
+#, no-wrap
+msgid "[.filename]#x11-servers#"
+msgstr "[.filename]#x11-servers#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1016
+#, no-wrap
+msgid "X11 servers."
+msgstr "Серверы X11."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1019
+#, no-wrap
+msgid "[.filename]#x11-themes#"
+msgstr "[.filename]#x11-themes#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1020
+#, no-wrap
+msgid "X11 themes."
+msgstr "Темы X11."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1023
+#, no-wrap
+msgid "[.filename]#x11-toolkits#"
+msgstr "[.filename]#x11-toolkits#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1024
+#, no-wrap
+msgid "X11 toolkits."
+msgstr "Инструментарии X11."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1027
+#, no-wrap
+msgid "[.filename]#x11-wm#"
+msgstr "[.filename]#x11-wm#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1028
+#, no-wrap
+msgid "X11 window managers."
+msgstr "Оконные менеджеры X11."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1031
+#, no-wrap
+msgid "[.filename]#xfce#`*`"
+msgstr "[.filename]#xfce#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1032
+#, no-wrap
+msgid "Ports related to the https://www.xfce.org/[Xfce] desktop environment."
+msgstr "Порты, связанные с окружением рабочего стола https://www.xfce.org/[Xfce]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1035
+#, no-wrap
+msgid "[.filename]#zope#`*`"
+msgstr "[.filename]#zope#`*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1036
+#, no-wrap
+msgid "https://www.zope.org/[Zope] support."
+msgstr "https://www.zope.org/[Zope] поддержка."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1040
+#, no-wrap
+msgid "Choosing the Right Category"
+msgstr "Выбор подходящей категории"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1045
+msgid ""
+"As many of the categories overlap, choosing which of the categories will be "
+"the primary category of the port can be tedious. There are several rules "
+"that govern this issue. Here is the list of priorities, in decreasing order "
+"of precedence:"
+msgstr ""
+"Поскольку многие категории пересекаются, выбор основной категории для порта "
+"может быть утомительным. Существует несколько правил, регулирующих этот "
+"вопрос. Вот список приоритетов в порядке убывания важности:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1048
+msgid ""
+"The first category must be a physical category (see "
+"crossref:makefiles[porting-categories,above]). This is necessary to make the "
+"packaging work. Virtual categories and physical categories may be intermixed "
+"after that."
+msgstr ""
+"Первая категория должна быть физической (см. crossref:makefiles[porting-"
+"categories,выше]). Это необходимо для работы упаковки. Виртуальные категории "
+"и физические категории могут чередоваться после этого."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1049
+msgid ""
+"Language specific categories always come first. For example, if the port "
+"installs Japanese X11 fonts, then the `CATEGORIES` line would read "
+"[.filename]#japanese x11-fonts#."
+msgstr ""
+"Языковые категории всегда указываются первыми. Например, если порт "
+"устанавливает японские шрифты для X11, то строка `CATEGORIES` будет "
+"выглядеть так: [.filename]#japanese x11-fonts#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1050
+msgid ""
+"Specific categories are listed before less-specific ones. For instance, an "
+"HTML editor is listed as [.filename]#www editors#, not the other way around. "
+"Also, do not list [.filename]#net# when the port belongs to any of "
+"[.filename]#irc#, [.filename]#mail#, [.filename]#news#, "
+"[.filename]#security#, or [.filename]#www#, as [.filename]#net# is included "
+"implicitly."
+msgstr ""
+"Конкретные категории перечислены перед менее специфичными. Например, HTML-"
+"редактор указывается как [.filename]#www editors#, а не наоборот. Также не "
+"следует указывать [.filename]#net#, если порт принадлежит к любой из "
+"категорий [.filename]#irc#, [.filename]#mail#, [.filename]#news#, "
+"[.filename]#security# или [.filename]#www#, так как [.filename]#net# "
+"подразумевается автоматически."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1051
+msgid ""
+"[.filename]#x11# is used as a secondary category only when the primary "
+"category is a natural language. In particular, do not put [.filename]#x11# "
+"in the category line for X applications."
+msgstr ""
+"[.filename]#x11# используется как вторичная категория только в случае, когда "
+"основной категорией указан естественный язык. В частности, не указывайте "
+"[.filename]#x11# в строке категории для X-приложений."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1052
+msgid ""
+"Emacs modes are placed in the same ports category as the application "
+"supported by the mode, not in [.filename]#editors#. For example, an Emacs "
+"mode to edit source files of some programming language goes into "
+"[.filename]#lang#."
+msgstr ""
+"Режимы Emacs размещаются в той же категории портов, что и приложение, "
+"поддерживаемое данным режимом, а не в [.filename]#editors#. Например, режим "
+"Emacs для редактирования исходных файлов какого-либо языка программирования "
+"попадает в [.filename]#lang#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1053
+msgid ""
+"Ports installing loadable kernel modules also have the virtual category "
+"[.filename]#kld# in their `CATEGORIES` line. This is one of the things "
+"handled automatically by adding `USES=kmod`."
+msgstr ""
+"Порты, устанавливающие загружаемые модули ядра, также имеют виртуальную "
+"категорию [.filename]#kld# в строке `CATEGORIES`. Это одна из вещей, "
+"автоматически обрабатываемых при добавлении `USES=kmod`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1054
+msgid ""
+"[.filename]#misc# does not appear with any other non-virtual category. If "
+"there is `misc` with something else in `CATEGORIES`, that means `misc` can "
+"safely be deleted and the port placed only in the other subdirectory."
+msgstr ""
+"[.filename]#misc# не встречается вместе с другими невиртуальными "
+"категориями. Если `misc` указан вместе с чем-то еще в `CATEGORIES`, это "
+"означает, что `misc` можно безопасно удалить, а порт разместить только в "
+"другом подкаталоге."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1055
+msgid ""
+"If the port truly does not belong anywhere else, put it in [.filename]#misc#."
+msgstr ""
+"Если порт действительно не подходит никуда больше, поместите его в "
+"[.filename]#misc#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1059
+msgid ""
+"If the category is not clearly defined, please put a comment to that effect "
+"in the https://bugs.freebsd.org/submit/[port submission] in the bug database "
+"so we can discuss it before we import it. As a committer, send a note to "
+"the {freebsd-ports} so we can discuss it first. Too often, new ports are "
+"imported to the wrong category only to be moved right away."
+msgstr ""
+"Если категория не определена четко, пожалуйста, укажите это в комментарии "
+"при https://bugs.freebsd.org/submit/[отправке порта] в баг-трекере, чтобы мы "
+"могли обсудить её перед импортом. Как коммиттер, отправьте сообщение в "
+"рассылку {freebsd-ports}, чтобы мы сначала обсудили это. Слишком часто новые "
+"порты импортируются в неправильную категорию, после чего их сразу же "
+"приходится перемещать."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1061
+#, no-wrap
+msgid "Proposing a New Category"
+msgstr "Предложение новой категории"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1066
+msgid ""
+"As the Ports Collection has grown over time, various new categories have "
+"been introduced. New categories can either be _virtual_ categories-those "
+"that do not have a corresponding subdirectory in the ports tree- or "
+"_physical_ categories-those that do. This section discusses the issues "
+"involved in creating a new physical category. Read it thoroughly before "
+"proposing a new one."
+msgstr ""
+"По мере роста Коллекции портов со временем были введены различные новые "
+"категории. Новые категории могут быть _виртуальными_ — те, у которых нет "
+"соответствующего подкаталога в дереве портов, или _физическими_ — те, у "
+"которых он есть. В этом разделе обсуждаются вопросы, связанные с созданием "
+"новой физической категории. Внимательно ознакомьтесь с ним, прежде чем "
+"предлагать новую."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1068
+msgid ""
+"Our existing practice has been to avoid creating a new physical category "
+"unless either a large number of ports would logically belong to it, or the "
+"ports that would belong to it are a logically distinct group that is of "
+"limited general interest (for instance, categories related to spoken human "
+"languages), or preferably both."
+msgstr ""
+"Наша текущая практика заключается в том, чтобы избегать создания новой "
+"физической категории, если только либо большое количество портов логически "
+"принадлежит к ней, либо порты, которые к ней относятся, представляют собой "
+"логически обособленную группу, представляющую ограниченный общий интерес "
+"(например, категории, связанные с разговорными человеческими языками), или, "
+"желательно, оба условия одновременно."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1072
+msgid ""
+"The rationale for this is that such a change creates a extref:{committers-"
+"guide}[fair amount of work, ports] for both the committers and also for all "
+"users who track changes to the Ports Collection. In addition, proposed "
+"category changes just naturally seem to attract controversy. (Perhaps this "
+"is because there is no clear consensus on when a category is \"too big\", "
+"nor whether categories should lend themselves to browsing (and thus what "
+"number of categories would be an ideal number), and so forth.)"
+msgstr ""
+"Обоснование этого заключается в том, что такое изменение создает extref:"
+"{committers-guide}[значительный объем работы, ports] как для коммиттеров, "
+"так и для всех пользователей, которые отслеживают изменения в Коллекции "
+"портов. Кроме того, предлагаемые изменения категорий, как правило, вызывают "
+"споры. (Возможно, это связано с отсутствием четкого консенсуса относительно "
+"того, когда категория становится «слишком большой», а также относительно "
+"того, должны ли категории способствовать удобству просмотра (и, "
+"следовательно, какое количество категорий было бы идеальным), и так далее.)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1074
+msgid "Here is the procedure:"
+msgstr "Вот процедура:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1077
+msgid ""
+"Propose the new category on {freebsd-ports}. Include a detailed rationale "
+"for the new category, including why the existing categories are not "
+"sufficient, and the list of existing ports proposed to move. (If there are "
+"new ports pending in Bugzilla that would fit this category, list them too.) "
+"If you are the maintainer and/or submitter, respectively, mention that as it "
+"may help the case."
+msgstr ""
+"Предложите новую категорию на {freebsd-ports}. Включите подробное "
+"обоснование для новой категории, объясните, почему существующие категории "
+"недостаточны, и укажите список существующих портов, предлагаемых к "
+"перемещению. (Если в Bugzilla есть ожидающие рассмотрения новые порты, "
+"которые подходят под эту категорию, также перечислите их.) Если вы являетесь "
+"сопровождающим и/или подающим предложение, укажите это, так как это может "
+"помочь в рассмотрении."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1078
+msgid "Participate in the discussion."
+msgstr "Участвуйте в обсуждении."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1079
+msgid ""
+"If it seems that there is support for the idea, file a PR which includes "
+"both the rationale and the list of existing ports that need to be moved. "
+"Ideally, this PR would also include these patches:"
+msgstr ""
+"Если кажется, что идея находит поддержку, оформите PR, включающий как "
+"обоснование, так и список существующих портов, которые необходимо "
+"переместить. В идеале, этот PR также должен содержать следующие исправления:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1081
+msgid "[.filename]##Makefile##s for the new ports once they are repocopied"
+msgstr ""
+"[.filename]##Makefile## для новых портов после копирования их репозитория"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1082
+msgid "[.filename]#Makefile# for the new category"
+msgstr "[.filename]#Makefile# для новой категории"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1083
+msgid "[.filename]#Makefile# for the old ports' categories"
+msgstr "[.filename]#Makefile# для старых категорий портов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1084
+msgid "[.filename]##Makefile##s for ports that depend on the old ports"
+msgstr "[.filename]##Makefile## для портов, зависящих от старых портов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1085
+msgid ""
+"(for extra credit, include the other files that have to change, as per the "
+"procedure in the Committer's Guide.)"
+msgstr ""
+"(для дополнительной оценки включите другие файлы, которые необходимо "
+"изменить, в соответствии с процедурой, описанной в Руководстве коммиттера.)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1087
+msgid ""
+"Since it affects the ports infrastructure and involves moving and patching "
+"many ports but also possibly running regression tests on the build cluster, "
+"assign the PR to the {portmgr}."
+msgstr ""
+"Поскольку это затрагивает инфраструктуру портов и включает перемещение и "
+"исправление многих портов, а также, возможно, проведение регрессионных "
+"тестов на сборочном кластере, назначьте PR для {portmgr}."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1088
+msgid ""
+"If that PR is approved, a committer will need to follow the rest of the "
+"procedure that is extref:{committers-guide}[outlined in the Committer's "
+"Guide, ports]."
+msgstr ""
+"Если этот PR будет одобрен, коммиттер должен будет выполнить оставшуюся "
+"часть процедуры, extref:{committers-guide}[описанной в Руководстве "
+"коммиттера,ports]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1091
+msgid ""
+"Proposing a new virtual category is similar to the above but much less "
+"involved, since no ports will actually have to move. In this case, the only "
+"patches to include in the PR would be those to add the new category to "
+"`CATEGORIES` of the affected ports."
+msgstr ""
+"Предложение новой виртуальной категории аналогично описанному выше, но "
+"гораздо менее трудоёмко, так как фактически не потребуется перемещать порты. "
+"В этом случае единственные патчи, которые нужно включить в PR, — это "
+"добавление новой категории в `CATEGORIES` затронутых портов."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1093
+#, no-wrap
+msgid "Proposing Reorganizing All the Categories"
+msgstr "Предложение о реорганизации всех категорий"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1099
+msgid ""
+"Occasionally someone proposes reorganizing the categories with either a 2-"
+"level structure, or some other kind of keyword structure. To date, nothing "
+"has come of any of these proposals because, while they are very easy to "
+"make, the effort involved to retrofit the entire existing ports collection "
+"with any kind of reorganization is daunting to say the very least. Please "
+"read the history of these proposals in the mailing list archives before "
+"posting this idea. Furthermore, be prepared to be challenged to offer a "
+"working prototype."
+msgstr ""
+"Изредка кто-то предлагает реорганизовать категории, используя либо "
+"двухуровневую структуру, либо какую-либо другую структуру ключевых слов. На "
+"сегодняшний день ни одно из этих предложений не было реализовано, потому "
+"что, хотя их очень легко выдвинуть, усилия, необходимые для переработки всей "
+"существующей коллекции портов в рамках любой реорганизации, пугают, мягко "
+"говоря. Пожалуйста, ознакомьтесь с историей этих предложений в архивах "
+"списка рассылки, прежде чем публиковать эту идею. Более того, будьте готовы "
+"к тому, что вас попросят предоставить рабочий прототип."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1101
+#, no-wrap
+msgid "The Distribution Files"
+msgstr "Файлы дистрибутива"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1104
+msgid ""
+"The second part of the [.filename]#Makefile# describes the files that must "
+"be downloaded to build the port, and where they can be downloaded."
+msgstr ""
+"Вторая часть [.filename]#Makefile# описывает файлы, которые необходимо "
+"загрузить для сборки порта, и места, откуда их можно скачать."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1106
+#, no-wrap
+msgid "`DISTNAME`"
+msgstr "`DISTNAME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1113
+msgid ""
+"`DISTNAME` is the name of the port as called by the authors of the "
+"software. `DISTNAME` defaults to `${PORTNAME}-${DISTVERSIONPREFIX}$"
+"{DISTVERSION}${DISTVERSIONSUFFIX}`, and if not set, `DISTVERSION` defaults "
+"to `${PORTVERSION}` so override `DISTNAME` only if necessary. `DISTNAME` is "
+"only used in two places. First, the distribution file list (`DISTFILES`) "
+"defaults to `${DISTNAME}${EXTRACT_SUFX}`. Second, the distribution file is "
+"expected to extract into a subdirectory named `WRKSRC`, which defaults to "
+"[.filename]#work/${DISTNAME}#."
+msgstr ""
+"`DISTNAME` — это имя порта, используемое авторами программного обеспечения. "
+"По умолчанию `DISTNAME` имеет значение `${PORTNAME}-${DISTVERSIONPREFIX}$"
+"{DISTVERSION}${DISTVERSIONSUFFIX}`, а если не задано, `DISTVERSION` по "
+"умолчанию принимает значение `${PORTVERSION}`, поэтому переопределяйте "
+"`DISTNAME` только при необходимости. `DISTNAME` используется только в двух "
+"случаях. Во-первых, список файлов дистрибутива (`DISTFILES`) по умолчанию "
+"имеет значение `${DISTNAME}${EXTRACT_SUFX}`. Во-вторых, ожидается, что файл "
+"дистрибутива распакуется в подкаталог с именем `WRKSRC`, который по "
+"умолчанию равен [.filename]#work/${DISTNAME}#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1116
+msgid ""
+"Some vendor's distribution names which do not fit into the `${PORTNAME}-$"
+"{PORTVERSION}`-scheme can be handled automatically by setting "
+"`DISTVERSIONPREFIX`, `DISTVERSION`, and `DISTVERSIONSUFFIX`. `PORTVERSION` "
+"will be derived from `DISTVERSION` automatically."
+msgstr ""
+"Некоторые названия дистрибутивов от поставщиков, которые не соответствуют "
+"схеме `${PORTNAME}-${PORTVERSION}`, могут обрабатываться автоматически путем "
+"установки `DISTVERSIONPREFIX`, `DISTVERSION` и `DISTVERSIONSUFFIX`. "
+"`PORTVERSION` будет автоматически вычисляться из `DISTVERSION`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1121
+msgid ""
+"Only one of `PORTVERSION` and `DISTVERSION` can be set at a time. If "
+"`DISTVERSION` does not derive a correct `PORTVERSION`, do not use "
+"`DISTVERSION`."
+msgstr ""
+"Только одна из переменных `PORTVERSION` и `DISTVERSION` может быть "
+"установлена одновременно. Если `DISTVERSION` не определяет корректную "
+"`PORTVERSION`, не используйте `DISTVERSION`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1125
+msgid ""
+"If the upstream version scheme can be derived into a ports-compatible "
+"version scheme, set some variable to the upstream version, _do not_ use "
+"`DISTVERSION` as the variable name. Set `PORTVERSION` to the computed "
+"version based on the variable you created, and set `DISTNAME` accordingly."
+msgstr ""
+"Если схема версий исходного проекта может быть преобразована в схему, "
+"совместимую с портами, установите некоторую переменную в версию исходного "
+"проекта, _не используйте_ имя переменной `DISTVERSION`. Установите "
+"`PORTVERSION` в вычисленную версию на основе созданной вами переменной и "
+"задайте `DISTNAME` соответствующим образом."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1127
+msgid ""
+"If the upstream version scheme cannot easily be coerced into a ports-"
+"compatible value, set `PORTVERSION` to a sensible value, and set `DISTNAME` "
+"with `PORTNAME` with the verbatim upstream version."
+msgstr ""
+"Если схема версионирования вышестоящего проекта не может быть легко "
+"преобразована в значение, совместимое с портами, установите `PORTVERSION` в "
+"разумное значение и задайте `DISTNAME` как `PORTNAME` с дословной версией "
+"вышестоящего проекта."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1129
+#, no-wrap
+msgid "Deriving `PORTVERSION` Manually"
+msgstr "Получение `PORTVERSION` вручную"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1135
+msgid ""
+"BIND9 uses a version scheme that is not compatible with the ports versions "
+"(it has `-` in its versions) and cannot be derived using `DISTVERSION` "
+"because after the 9.9.9 release, it will release a \"patchlevels\" in the "
+"form of `9.9.9-P1`. DISTVERSION would translate that into `9.9.9.p1`, "
+"which, in the ports versioning scheme means 9.9.9 pre-release 1, which is "
+"before 9.9.9 and not after. So `PORTVERSION` is manually derived from an "
+"`ISCVERSION` variable to output `9.9.9p1`."
+msgstr ""
+"BIND9 использует схему версионирования, несовместимую с версиями портов (в "
+"версиях используется `-`), и её нельзя получить с помощью `DISTVERSION`, так "
+"как после выпуска 9.9.9 выходят «уровни исправлений» в формате `9.9.9-P1`. "
+"`DISTVERSION` преобразует это в `9.9.9.p1`, что в схеме версионирования "
+"портов означает 9.9.9 pre-release 1, то есть версию, предшествующую 9.9.9, а "
+"не следующую за ней. Поэтому `PORTVERSION` вручную формируется из переменной "
+"`ISCVERSION`, чтобы получить `9.9.9p1`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1137
+msgid ""
+"The order into which the ports framework, and pkg, will sort versions is "
+"checked using the `-t` argument of man:pkg-version[8]:"
+msgstr ""
+"Порядок, в котором система портов и pkg будут сортировать версии, "
+"проверяется с помощью аргумента `-t` из man:pkg-version[8]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1144
+#, no-wrap
+msgid ""
+"% pkg version -t 9.9.9 9.9.9.p1\n"
+"> <.>\n"
+"% pkg version -t 9.9.9 9.9.9p1\n"
+"< <.>\n"
+msgstr ""
+"% pkg version -t 9.9.9 9.9.9.p1\n"
+"> <.>\n"
+"% pkg version -t 9.9.9 9.9.9p1\n"
+"< <.>\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1147
+msgid ""
+"The `>` sign means that the first argument passed to `-t` is greater than "
+"the second argument. `9.9.9` is after `9.9.9.p1`."
+msgstr ""
+"Знак `>` означает, что первый аргумент, переданный в `-t`, больше второго "
+"аргумента. `9.9.9` находится после `9.9.9.p1`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1148
+msgid ""
+"The `<` sign means that the first argument passed to `-t` is less than the "
+"second argument. `9.9.9` is before `9.9.9p1`."
+msgstr ""
+"Знак `<` означает, что первый аргумент, переданный в `-t`, меньше второго "
+"аргумента. `9.9.9` находится перед `9.9.9p1`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1150
+msgid ""
+"In the port [.filename]#Makefile#, for example package:dns/bind99[], it is "
+"achieved by:"
+msgstr ""
+"В файле [.filename]#Makefile# порта, например package:dns/bind99[], это "
+"достигается с помощью:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1159
+#, no-wrap
+msgid ""
+"PORTNAME=\tbind\n"
+"PORTVERSION=\t${ISCVERSION:S/-P/P/:S/b/.b/:S/a/.a/:S/rc/.rc/}\n"
+"CATEGORIES=\tdns net\n"
+"MASTER_SITES=\tISC/bind9/${ISCVERSION}\n"
+"PKGNAMESUFFIX=\t99\n"
+"DISTNAME=\t${PORTNAME}-${ISCVERSION}\n"
+msgstr ""
+"PORTNAME=\tbind\n"
+"PORTVERSION=\t${ISCVERSION:S/-P/P/:S/b/.b/:S/a/.a/:S/rc/.rc/}\n"
+"CATEGORIES=\tdns net\n"
+"MASTER_SITES=\tISC/bind9/${ISCVERSION}\n"
+"PKGNAMESUFFIX=\t99\n"
+"DISTNAME=\t${PORTNAME}-${ISCVERSION}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1163
+#, no-wrap
+msgid ""
+"MAINTAINER=\tmat@FreeBSD.org\n"
+"COMMENT=\tBIND DNS suite with updated DNSSEC and DNS64\n"
+"WWW=\t\thttps://www.isc.org/bind/\n"
+msgstr ""
+"MAINTAINER=\tmat@FreeBSD.org\n"
+"COMMENT=\tBIND DNS suite with updated DNSSEC and DNS64\n"
+"WWW=\t\thttps://www.isc.org/bind/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1165
+#, no-wrap
+msgid "LICENSE=\tISCL\n"
+msgstr "LICENSE=\tISCL\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1168
+#, no-wrap
+msgid ""
+"# ISC releases things like 9.8.0-P1 or 9.8.1rc1, which our versioning does not like\n"
+"ISCVERSION=\t9.9.9-P6\n"
+msgstr ""
+"# ISC releases things like 9.8.0-P1 or 9.8.1rc1, which our versioning does not like\n"
+"ISCVERSION=\t9.9.9-P6\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1174
+msgid ""
+"Define upstream version in `ISCVERSION`, with a comment saying _why_ it is "
+"needed. Use `ISCVERSION` to get a ports-compatible `PORTVERSION`. Use "
+"`ISCVERSION` directly to get the correct URL for fetching the distribution "
+"file. Use `ISCVERSION` directly to name the distribution file."
+msgstr ""
+"Определите версию вышестоящего пакета в `ISCVERSION`, с комментарием, "
+"объясняющим, _почему_ это необходимо. Используйте `ISCVERSION` для получения "
+"совместимого с портами `PORTVERSION`. Используйте `ISCVERSION` напрямую для "
+"получения правильного URL для загрузки файла дистрибутива. Используйте "
+"`ISCVERSION` напрямую для именования дистрибутивного файла."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1177
+#, no-wrap
+msgid "Derive `DISTNAME` from `PORTVERSION`"
+msgstr "Получить `DISTNAME` из `PORTVERSION`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1181
+msgid ""
+"From time to time, the distribution file name has little or no relation to "
+"the version of the software."
+msgstr ""
+"Время от времени имя файла дистрибутива имеет мало отношения или вообще "
+"никакого отношения к версии программного обеспечения."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1183
+msgid ""
+"In package:comms/kermit[], only the last element of the version is present "
+"in the distribution file:"
+msgstr ""
+"В пакете package:comms/kermit[], в файле дистрибутива присутствует только "
+"последний элемент версии:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1191
+#, no-wrap
+msgid ""
+"PORTNAME=\tkermit\n"
+"PORTVERSION=\t9.0.304\n"
+"CATEGORIES=\tcomms ftp net\n"
+"MASTER_SITES=\tftp://ftp.kermitproject.org/kermit/test/tar/\n"
+"DISTNAME=\tcku${PORTVERSION:E}-dev20\n"
+msgstr ""
+"PORTNAME=\tkermit\n"
+"PORTVERSION=\t9.0.304\n"
+"CATEGORIES=\tcomms ftp net\n"
+"MASTER_SITES=\tftp://ftp.kermitproject.org/kermit/test/tar/\n"
+"DISTNAME=\tcku${PORTVERSION:E}-dev20\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1195
+msgid ""
+"The `:E` man:make[1] modifier returns the suffix of the variable, in this "
+"case, `304`. The distribution file is correctly generated as `cku304-"
+"dev20.tar.gz`."
+msgstr ""
+"Модификатор `:E` man:make[1] возвращает суффикс переменной, в данном случае "
+"`304`. Файл дистрибутива корректно создаётся как `cku304-dev20.tar.gz`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1198
+#, no-wrap
+msgid "Exotic Case 1"
+msgstr "Экзотический случай 1"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1202
+msgid ""
+"Sometimes, there is no relation between the software name, its version, and "
+"the distribution file it is distributed in."
+msgstr ""
+"Иногда нет связи между названием программы, её версией и файлом "
+"дистрибутива, в котором она распространяется."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1204
+msgid "From package:audio/libworkman[]:"
+msgstr "Из пакета package:audio/libworkman[]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1212
+#, no-wrap
+msgid ""
+"PORTNAME= libworkman\n"
+"PORTVERSION= 1.4\n"
+"CATEGORIES= audio\n"
+"MASTER_SITES= LOCAL/jim\n"
+"DISTNAME= ${PORTNAME}-1999-06-20\n"
+msgstr ""
+"PORTNAME= libworkman\n"
+"PORTVERSION= 1.4\n"
+"CATEGORIES= audio\n"
+"MASTER_SITES= LOCAL/jim\n"
+"DISTNAME= ${PORTNAME}-1999-06-20\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1217
+#, no-wrap
+msgid "Exotic Case 2"
+msgstr "Экзотический случай 2"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1222
+msgid ""
+"In package:comms/librs232[], the distribution file is not versioned, so "
+"using crossref:makefiles[makefile-dist_subdir,`DIST_SUBDIR`] is needed:"
+msgstr ""
+"В пакете package:comms/librs232[] файл дистрибутива не имеет версии, поэтому "
+"необходимо использовать crossref:makefiles[makefile-"
+"dist_subdir,`DIST_SUBDIR`]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1231
+#, no-wrap
+msgid ""
+"PORTNAME= librs232\n"
+"PORTVERSION= 20160710\n"
+"CATEGORIES= comms\n"
+"MASTER_SITES= http://www.teuniz.net/RS-232/\n"
+"DISTNAME= RS-232\n"
+"DIST_SUBDIR=\t${PORTNAME}-${PORTVERSION}\n"
+msgstr ""
+"PORTNAME= librs232\n"
+"PORTVERSION= 20160710\n"
+"CATEGORIES= comms\n"
+"MASTER_SITES= http://www.teuniz.net/RS-232/\n"
+"DISTNAME= RS-232\n"
+"DIST_SUBDIR=\t${PORTNAME}-${PORTVERSION}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1239
+msgid ""
+"`PKGNAMEPREFIX` and `PKGNAMESUFFIX` do not affect `DISTNAME`. Also note "
+"that if `WRKSRC` is equal to [.filename]#${WRKDIR}/${DISTNAME}# while the "
+"original source archive is named something other than `${PORTNAME}-$"
+"{PORTVERSION}${EXTRACT_SUFX}`, leave `DISTNAME` alone- defining only "
+"`DISTFILES` is easier than both `DISTNAME` and `WRKSRC` (and possibly "
+"`EXTRACT_SUFX`)."
+msgstr ""
+"`PKGNAMEPREFIX` и `PKGNAMESUFFIX` не влияют на `DISTNAME`. Также обратите "
+"внимание, что если `WRKSRC` равно [.filename]#${WRKDIR}/${DISTNAME}#, а "
+"исходный архив с исходным кодом называется иначе, чем `${PORTNAME}-$"
+"{PORTVERSION}${EXTRACT_SUFX}`, оставьте `DISTNAME` без изменений — "
+"определение только `DISTFILES` проще, чем определение и `DISTNAME`, и "
+"`WRKSRC` (а возможно, и `EXTRACT_SUFX`)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1242
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4897
+#, no-wrap
+msgid "`MASTER_SITES`"
+msgstr "`MASTER_SITES`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1246
+msgid ""
+"Record the directory part of the FTP/HTTP-URL pointing at the original "
+"tarball in `MASTER_SITES`. Do not forget the trailing slash ([.filename]#/"
+"#)!"
+msgstr ""
+"Запишите именем каталога из FTP/HTTP-URL, указывающего на исходный tarball, "
+"в `MASTER_SITES`. Не забудьте завершающий слэш ([.filename]#/#)!"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1248
+msgid ""
+"The `make` macros will try to use this specification for grabbing the "
+"distribution file with `FETCH` if they cannot find it already on the system."
+msgstr ""
+"Макросы `make` будут пытаться использовать эту спецификацию для загрузки "
+"файла дистрибутива с помощью `FETCH`, если не смогут найти его уже в системе."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1251
+msgid ""
+"It is recommended that multiple sites are included on this list, preferably "
+"from different continents. This will safeguard against wide-area network "
+"problems."
+msgstr ""
+"Рекомендуется включать в этот список несколько сайтов, желательно с разных "
+"континентов. Это обеспечит защиту от проблем в глобальной сети."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1259
+msgid ""
+"`MASTER_SITES` must not be blank. It must point to the actual site hosting "
+"the distribution files. It cannot point to web archives, or the FreeBSD "
+"distribution files cache sites. The only exception to this rule is ports "
+"that do not have any distribution files. For example, meta-ports do not "
+"have any distribution files, so `MASTER_SITES` does not need to be set."
+msgstr ""
+"`MASTER_SITES` не должен быть пустым. Он должен указывать на реальный сайт, "
+"где размещены файлы дистрибутива. Он не может указывать на веб-архивы или "
+"кэшированные сайты с файлами дистрибутива FreeBSD. Единственное исключение "
+"из этого правила — порты, у которых нет файлов дистрибутива. Например, мета-"
+"порты не имеют файлов дистрибутива, поэтому `MASTER_SITES` не нужно задавать."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1262
+#, no-wrap
+msgid "Using `MASTER_SITE_*` Variables"
+msgstr "Использование переменных `MASTER_SITE_*`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1265
+msgid ""
+"Shortcut abbreviations are available for popular archives like SourceForge "
+"(`SOURCEFORGE`), GNU (`GNU`), or Perl CPAN (`PERL_CPAN`). `MASTER_SITES` can "
+"use them directly:"
+msgstr ""
+"Для популярных архивов, таких как SourceForge (`SOURCEFORGE`), GNU (`GNU`) "
+"или Perl CPAN (`PERL_CPAN`), доступны сокращённые обозначения. "
+"`MASTER_SITES` может использовать их напрямую:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1269
+#, no-wrap
+msgid "MASTER_SITES=\tGNU/make\n"
+msgstr "MASTER_SITES=\tGNU/make\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1273
+msgid ""
+"The older expanded format still works, but all ports have been converted to "
+"the compact format. The expanded format looks like this:"
+msgstr ""
+"Старый расширенный формат по-прежнему работает, но все порты были "
+"преобразованы в компактный формат. Расширенный формат выглядит следующим "
+"образом:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1278
+#, no-wrap
+msgid ""
+"MASTER_SITES=\t\t${MASTER_SITE_GNU}\n"
+"MASTER_SITE_SUBDIR=\tmake\n"
+msgstr ""
+"MASTER_SITES=\t\t${MASTER_SITE_GNU}\n"
+"MASTER_SITE_SUBDIR=\tmake\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1282
+msgid ""
+"These values and variables are defined in https://cgit.freebsd.org/ports/"
+"tree/Mk/bsd.sites.mk[Mk/bsd.sites.mk]. New entries are added often, so make "
+"sure to check the latest version of this file before submitting a port."
+msgstr ""
+"Эти значения и переменные определены в https://cgit.freebsd.org/ports/tree/"
+"Mk/bsd.sites.mk[Mk/bsd.sites.mk]. Новые записи добавляются часто, поэтому "
+"обязательно проверяйте последнюю версию этого файла перед отправкой порта."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1287
+msgid ""
+"For any `MASTER_SITE_FOO` variable, the shorthand `_FOO_` can be used. For "
+"example, use:"
+msgstr ""
+"Для любой переменной `MASTER_SITE_FOO` можно использовать сокращение "
+"`_FOO_`. Например, используйте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1291
+#, no-wrap
+msgid "MASTER_SITES=\tFOO\n"
+msgstr "MASTER_SITES=\tFOO\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1294
+msgid "If `MASTER_SITE_SUBDIR` is needed, use this:"
+msgstr "Если требуется `MASTER_SITE_SUBDIR`, используйте следующее:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1298
+#, no-wrap
+msgid "MASTER_SITES=\tFOO/bar\n"
+msgstr "MASTER_SITES=\tFOO/bar\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1305
+msgid ""
+"Some `MASTER_SITE_*` names are quite long, and for ease of use, shortcuts "
+"have been defined:"
+msgstr ""
+"Некоторые имена `MASTER_SITE_*` довольно длинные, и для удобства "
+"использования были определены сокращения:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1307
+#, no-wrap
+msgid "Shortcuts for `MASTER_SITE_*` Macros"
+msgstr "Сокращения для макросов `MASTER_SITE_*`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1311
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1369
+#, no-wrap
+msgid "Macro"
+msgstr "Макрос"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1313
+#, no-wrap
+msgid "Shortcut"
+msgstr "Сокращение"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1314
+#, no-wrap
+msgid "`PERL_CPAN`"
+msgstr "`PERL_CPAN`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1316
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1387
+#, no-wrap
+msgid "`CPAN`"
+msgstr "`CPAN`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1317
+#, no-wrap
+msgid "`GITHUB`"
+msgstr "`GITHUB`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1319
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1408
+#, no-wrap
+msgid "`GH`"
+msgstr "`GH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1320
+#, no-wrap
+msgid "`GITHUB_CLOUD`"
+msgstr "`GITHUB_CLOUD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1322
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1411
+#, no-wrap
+msgid "`GHC`"
+msgstr "`GHC`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1323
+#, no-wrap
+msgid "`LIBREOFFICE_DEV`"
+msgstr "`LIBREOFFICE_DEV`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1325
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1429
+#, no-wrap
+msgid "`LODEV`"
+msgstr "`LODEV`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1326
+#, no-wrap
+msgid "`NETLIB`"
+msgstr "`NETLIB`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1328
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1438
+#, no-wrap
+msgid "`NL`"
+msgstr "`NL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1329
+#, no-wrap
+msgid "`RUBYGEMS`"
+msgstr "`RUBYGEMS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1331
+#, no-wrap
+msgid "`RG`"
+msgstr "`RG`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1332
+#, no-wrap
+msgid "`SOURCEFORGE`"
+msgstr "`SOURCEFORGE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1333
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1450
+#, no-wrap
+msgid "`SF`"
+msgstr "`SF`"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1337
+#, no-wrap
+msgid "Magic MASTER_SITES Macros"
+msgstr "Волшебные макросы MASTER_SITES"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1342
+msgid ""
+"Several \"magic\" macros exist for popular sites with a predictable "
+"directory structure. For these, just use the abbreviation and the system "
+"will choose a subdirectory automatically. For a port named `Stardict`, of "
+"version `1.2.3`, and hosted on SourceForge, adding this line:"
+msgstr ""
+"Существует несколько \"волшебных\" макросов для популярных сайтов с "
+"предсказуемой структурой каталогов. Для них достаточно использовать "
+"сокращение, и система автоматически выберет подкаталог. Например, для порта "
+"с именем `Stardict`, версии `1.2.3`, размещенного на SourceForge, добавьте "
+"следующую строку:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1346
+#, no-wrap
+msgid "MASTER_SITES=\tSF\n"
+msgstr "MASTER_SITES=\tSF\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1350
+msgid ""
+"infers a subdirectory named `/project/stardict/stardict/1.2.3`. If the "
+"inferred directory is incorrect, it can be overridden:"
+msgstr ""
+"подразумевает подкаталог с именем `/project/stardict/stardict/1.2.3`. Если "
+"подразумеваемый каталог указан неверно, его можно переопределить:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1354
+#, no-wrap
+msgid "MASTER_SITES=\tSF/stardict/WyabdcRealPeopleTTS/${PORTVERSION}\n"
+msgstr "MASTER_SITES=\tSF/stardict/WyabdcRealPeopleTTS/${PORTVERSION}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1357
+msgid "This can also be written as"
+msgstr "Это также можно записать как"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1362
+#, no-wrap
+msgid ""
+"MASTER_SITES=\tSF\n"
+"MASTER_SITE_SUBDIR=\tstardict/WyabdcRealPeopleTTS/${PORTVERSION}\n"
+msgstr ""
+"MASTER_SITES=\tSF\n"
+"MASTER_SITE_SUBDIR=\tstardict/WyabdcRealPeopleTTS/${PORTVERSION}\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1365
+#, no-wrap
+msgid "Magic `MASTER_SITES` Macros"
+msgstr "Волшебные макросы `MASTER_SITES`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1371
+#, no-wrap
+msgid "Assumed subdirectory"
+msgstr "Предполагаемая поддиректория"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1372
+#, no-wrap
+msgid "`APACHE_COMMONS_BINARIES`"
+msgstr "`APACHE_COMMONS_BINARIES`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1374
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1377
+#, no-wrap
+msgid "`${PORTNAME:S,commons-,,}`"
+msgstr "`${PORTNAME:S,commons-,,}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1375
+#, no-wrap
+msgid "`APACHE_COMMONS_SOURCE`"
+msgstr "`APACHE_COMMONS_SOURCE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1378
+#, no-wrap
+msgid "`APACHE_JAKARTA`"
+msgstr "`APACHE_JAKARTA`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1380
+#, no-wrap
+msgid "`${PORTNAME:S,-,/,}/source`"
+msgstr "`${PORTNAME:S,-,/,}/source`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1381
+#, no-wrap
+msgid "`BERLIOS`"
+msgstr "`BERLIOS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1383
+#, no-wrap
+msgid "`${PORTNAME:tl}.berlios`"
+msgstr "`${PORTNAME:tl}.berlios`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1384
+#, no-wrap
+msgid "`CHEESESHOP`"
+msgstr "`CHEESESHOP`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1386
+#, no-wrap
+msgid "`source/${DISTNAME:C/(.).\\*/\\1/}/${DISTNAME:C/(.*)-[0-9].*/\\1/}`"
+msgstr "`source/${DISTNAME:C/(.).\\*/\\1/}/${DISTNAME:C/(.*)-[0-9].*/\\1/}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1389
+#, no-wrap
+msgid "`${PORTNAME:C/-.*//}`"
+msgstr "`${PORTNAME:C/-.*//}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1390
+#, no-wrap
+msgid "`DEBIAN`"
+msgstr "`DEBIAN`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1392
+#, no-wrap
+msgid "`pool/main/${PORTNAME:C/^((lib)?.).*$/\\1/}/${PORTNAME}`"
+msgstr "`pool/main/${PORTNAME:C/^((lib)?.).*$/\\1/}/${PORTNAME}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1393
+#, no-wrap
+msgid "`FARSIGHT`"
+msgstr "`FARSIGHT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1395
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1419
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1422
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1425
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1428
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1431
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1440
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1446
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1479
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1483
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1892
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1896
+#, no-wrap
+msgid "`${PORTNAME}`"
+msgstr "`${PORTNAME}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1396
+#, no-wrap
+msgid "`FESTIVAL`"
+msgstr "`FESTIVAL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1398
+#, no-wrap
+msgid "`${PORTREVISION}`"
+msgstr "`${PORTREVISION}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1399
+#, no-wrap
+msgid "`GCC`"
+msgstr "`GCC`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1401
+#, no-wrap
+msgid "`releases/${DISTNAME}`"
+msgstr "`releases/${DISTNAME}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1402
+#, no-wrap
+msgid "`GENTOO`"
+msgstr "`GENTOO`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1404
+#, no-wrap
+msgid "`distfiles`"
+msgstr "`distfiles`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1405
+#, no-wrap
+msgid "`GIMP`"
+msgstr "`GIMP`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1407
+#, no-wrap
+msgid "`${PORTNAME}/${PORTVERSION:R}/`"
+msgstr "`${PORTNAME}/${PORTVERSION:R}/`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1410
+#, no-wrap
+msgid "`${GH_ACCOUNT}/${GH_PROJECT}/tar.gz/${GH_TAGNAME}?dummy=/`"
+msgstr "`${GH_ACCOUNT}/${GH_PROJECT}/tar.gz/${GH_TAGNAME}?dummy=/`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1413
+#, no-wrap
+msgid "`${GH_ACCOUNT}/${GH_PROJECT}/`"
+msgstr "`${GH_ACCOUNT}/${GH_PROJECT}/`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1414
+#, no-wrap
+msgid "`GNOME`"
+msgstr "`GNOME`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1416
+#, no-wrap
+msgid "`sources/${PORTNAME}/${PORTVERSION:C/^([0-9]+\\.[0-9]+).*/\\1/}`"
+msgstr "`sources/${PORTNAME}/${PORTVERSION:C/^([0-9]+\\.[0-9]+).*/\\1/}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1417
+#, no-wrap
+msgid "`GNU`"
+msgstr "`GNU`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1420
+#, no-wrap
+msgid "`GNUPG`"
+msgstr "`GNUPG`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1423
+#, no-wrap
+msgid "`GNU_ALPHA`"
+msgstr "`GNU_ALPHA`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1426
+#, no-wrap
+msgid "`HORDE`"
+msgstr "`HORDE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1432
+#, no-wrap
+msgid "`MATE`"
+msgstr "`MATE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1434
+#, no-wrap
+msgid "`${PORTVERSION:C/^([0-9]+\\.[0-9]+).*/\\1/}`"
+msgstr "`${PORTVERSION:C/^([0-9]+\\.[0-9]+).*/\\1/}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1435
+#, no-wrap
+msgid "`MOZDEV`"
+msgstr "`MOZDEV`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1437
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1449
+#, no-wrap
+msgid "`${PORTNAME:tl}`"
+msgstr "`${PORTNAME:tl}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1441
+#, no-wrap
+msgid "`QT`"
+msgstr "`QT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1443
+#, no-wrap
+msgid "`archive/qt/${PORTVERSION:R}`"
+msgstr "`archive/qt/${PORTVERSION:R}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1444
+#, no-wrap
+msgid "`SAMBA`"
+msgstr "`SAMBA`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1447
+#, no-wrap
+msgid "`SAVANNAH`"
+msgstr "`SAVANNAH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1451
+#, no-wrap
+msgid "`${PORTNAME:tl}/${PORTNAME:tl}/${PORTVERSION}`"
+msgstr "`${PORTNAME:tl}/${PORTNAME:tl}/${PORTVERSION}`"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1454
+#, no-wrap
+msgid "`USE_GITHUB`"
+msgstr "`USE_GITHUB`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1458
+msgid ""
+"If the distribution file comes from a specific commit or tag on https://"
+"github.com/[GitHub] for which there is no officially released file, there is "
+"an easy way to set the right `DISTNAME` and `MASTER_SITES` automatically."
+msgstr ""
+"Если файл дистрибутива получен из определённого коммита или тега на https://"
+"github.com/[GitHub], для которого нет официально выпущенного файла, "
+"существует простой способ автоматически установить правильные значения "
+"`DISTNAME` и `MASTER_SITES`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1463
+msgid ""
+"As of 2023-02-21 link:https://github.blog/2023-02-21-update-on-the-future-"
+"stability-of-source-code-archives-and-hashes/[GitHub] have announced that "
+"source downloads will be stable for a year. Please switch to release assets "
+"and if not available ask upstream to generate ones."
+msgstr ""
+"По состоянию на 2023-02-21 link:https://github.blog/2023-02-21-update-on-the-"
+"future-stability-of-source-code-archives-and-hashes/[GitHub] объявили, что "
+"загрузки исходного кода будут стабильными в течение года. Пожалуйста, "
+"переключитесь на ресурсы выпусков (release assets), а если они недоступны, "
+"запросите их создание у вышестоящих разработчиков."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1466
+msgid "These variables are available:"
+msgstr "Доступны следующие переменные:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1468
+#, no-wrap
+msgid "`USE_GITHUB` Description"
+msgstr "`USE_GITHUB` Описание"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1472
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1881
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3681
+#, no-wrap
+msgid "Variable"
+msgstr "Переменная"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1475
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1884
+#, no-wrap
+msgid "Default"
+msgstr "По умолчанию"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1476
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4879
+#, no-wrap
+msgid "`GH_ACCOUNT`"
+msgstr "`GH_ACCOUNT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1477
+#, no-wrap
+msgid "Account name of the GitHub user hosting the project"
+msgstr "Имя учётной записи пользователя GitHub, который размещает проект"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1480
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4880
+#, no-wrap
+msgid "`GH_PROJECT`"
+msgstr "`GH_PROJECT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1481
+#, no-wrap
+msgid "Name of the project on GitHub"
+msgstr "Название проекта на GitHub"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1484
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4882
+#, no-wrap
+msgid "`GH_TAGNAME`"
+msgstr "`GH_TAGNAME`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1485
+#, no-wrap
+msgid "Name of the tag to download (2.0.1, hash, ...) Using the name of a branch here is incorrect. It is also possible to use the hash of a commit id to do a snapshot."
+msgstr "Имя тега для загрузки (2.0.1, хэш, ...) Использование имени ветки здесь некорректно. Также можно использовать хэш идентификатора коммита для создания снимка состояния."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1487
+#, no-wrap
+msgid "`${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}`"
+msgstr "`${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1488
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4881
+#, no-wrap
+msgid "`GH_SUBDIR`"
+msgstr "`GH_SUBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1491
+#, no-wrap
+msgid ""
+"When the software needs an additional distribution file to be extracted within\n"
+"`${WRKSRC}`, this variable can be used. See the examples in\n"
+"crossref:makefiles[makefile-master_sites-github-multiple, Fetching Multiple Files from GitHub] for more information."
+msgstr ""
+"Когда программному обеспечению требуется дополнительный файл дистрибутива для извлечения в\n"
+"`${WRKSRC}`, можно использовать эту переменную. Примеры можно найти в\n"
+"crossref:makefiles[makefile-master_sites-github-multiple, Загрузка нескольких файлов из GitHub] для получения дополнительной информации."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1493
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1906
+#, no-wrap
+msgid "(none)"
+msgstr "(отсутствует)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1494
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4883
+#, no-wrap
+msgid "`GH_TUPLE`"
+msgstr "`GH_TUPLE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1495
+#, no-wrap
+msgid "`GH_TUPLE` allows putting `GH_ACCOUNT`, `GH_PROJECT`, `GH_TAGNAME`, and `GH_SUBDIR` into a single variable. The format is _account_`:`_project_`:`_tagname_`:`_group_`/`_subdir_. The `/`_subdir_ part is optional. It is helpful when there is more than one GitHub project from which to fetch."
+msgstr "`GH_TUPLE` позволяет объединить `GH_ACCOUNT`, `GH_PROJECT`, `GH_TAGNAME` и `GH_SUBDIR` в одну переменную. Формат следующий: _account_`:`_project_`:`_tagname_`:`_group_`/`_subdir_. Часть `/`_subdir_ является необязательной. Это полезно, когда требуется получить несколько проектов с GitHub."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1501
+msgid ""
+"Do not use `GH_TUPLE` for the default distribution file, as it has no "
+"default."
+msgstr ""
+"Не используйте `GH_TUPLE` для файла дистрибутива по умолчанию, так как у "
+"него нет значения по умолчанию."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1504
+#, no-wrap
+msgid "Simple Use of `USE_GITHUB`"
+msgstr "Простое использование `USE_GITHUB`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1509
+msgid ""
+"While trying to make a port for version `1.2.7` of pkg from the FreeBSD user "
+"on github, at https://github.com/freebsd/pkg/[], The [.filename]#Makefile# "
+"would end up looking like this (slightly stripped for the example):"
+msgstr ""
+"При попытке создать порт для версии `1.2.7` pkg от пользователя FreeBSD на "
+"github, по адресу https://github.com/freebsd/pkg/[], файл "
+"[.filename]#Makefile# в итоге будет выглядеть следующим образом "
+"(незначительно сокращено для примера):"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1514
+#, no-wrap
+msgid ""
+"PORTNAME=\tpkg\n"
+"DISTVERSION=\t1.2.7\n"
+msgstr ""
+"PORTNAME=\tpkg\n"
+"DISTVERSION=\t1.2.7\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1517
+#, no-wrap
+msgid ""
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tfreebsd\n"
+msgstr ""
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tfreebsd\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1520
+msgid ""
+"It will automatically have `MASTER_SITES` set to `GH` and `WRKSRC` to `$"
+"{WRKDIR}/pkg-1.2.7`."
+msgstr ""
+"Он автоматически получит `MASTER_SITES` установленным в `GH` и `WRKSRC` в `$"
+"{WRKDIR}/pkg-1.2.7`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1523
+#, no-wrap
+msgid "More Complete Use of `USE_GITHUB`"
+msgstr "Более полное использование `USE_GITHUB`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1527
+msgid ""
+"While trying to make a port for the bleeding edge version of pkg from the "
+"FreeBSD user on github, at https://github.com/freebsd/pkg/[], the "
+"[.filename]#Makefile# ends up looking like this (slightly stripped for the "
+"example):"
+msgstr ""
+"При попытке создать порт для самой последней версии pkg от пользователя "
+"FreeBSD на github, по адресу https://github.com/freebsd/pkg/[], файл "
+"[.filename]#Makefile# в итоге выглядит следующим образом (незначительно "
+"сокращено для примера):"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1532
+#, no-wrap
+msgid ""
+"PORTNAME=\tpkg-devel\n"
+"DISTVERSION=\t1.3.0.a.20140411\n"
+msgstr ""
+"PORTNAME=\tpkg-devel\n"
+"DISTVERSION=\t1.3.0.a.20140411\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1537
+#, no-wrap
+msgid ""
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tfreebsd\n"
+"GH_PROJECT=\tpkg\n"
+"GH_TAGNAME=\t6dbb17b\n"
+msgstr ""
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tfreebsd\n"
+"GH_PROJECT=\tpkg\n"
+"GH_TAGNAME=\t6dbb17b\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1540
+msgid ""
+"It will automatically have `MASTER_SITES` set to `GH` and `WRKSRC` to `$"
+"{WRKDIR}/pkg-6dbb17b`."
+msgstr ""
+"Он автоматически получит `MASTER_SITES` со значением `GH` и `WRKSRC` со "
+"значением `${WRKDIR}/pkg-6dbb17b`."
+
+#. type: delimited block * 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1544
+msgid ""
+"`20140411` is the date of the commit referenced in `GH_TAGNAME`, not the "
+"date the [.filename]#Makefile# is edited, or the date the commit is made."
+msgstr ""
+"`20140411` — это дата коммита, указанного в `GH_TAGNAME`, а не дата "
+"редактирования файла [.filename]#Makefile# или дата создания коммита."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1549
+#, no-wrap
+msgid "Use of `USE_GITHUB` with `DISTVERSIONPREFIX`"
+msgstr "Использование `USE_GITHUB` с `DISTVERSIONPREFIX`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1555
+msgid ""
+"From time to time, `GH_TAGNAME` is a slight variation from `DISTVERSION`. "
+"For example, if the version is `1.0.2`, the tag is `v1.0.2`. In those "
+"cases, it is possible to use `DISTVERSIONPREFIX` or `DISTVERSIONSUFFIX`:"
+msgstr ""
+"Время от времени `GH_TAGNAME` немного отличается от `DISTVERSION`. Например, "
+"если версия `1.0.2`, то тег будет `v1.0.2`. В таких случаях можно "
+"использовать `DISTVERSIONPREFIX` или `DISTVERSIONSUFFIX`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1561
+#, no-wrap
+msgid ""
+"PORTNAME=\tfoo\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION=\t1.0.2\n"
+msgstr ""
+"PORTNAME=\tfoo\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION=\t1.0.2\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1563
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1627
+#, no-wrap
+msgid "USE_GITHUB=\tyes\n"
+msgstr "USE_GITHUB=\tyes\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1566
+msgid ""
+"It will automatically set `GH_TAGNAME` to `v1.0.2`, while `WRKSRC` will be "
+"kept to `${WRKDIR}/foo-1.0.2`."
+msgstr ""
+"Он автоматически установит `GH_TAGNAME` в `v1.0.2`, в то время как `WRKSRC` "
+"останется `${WRKDIR}/foo-1.0.2`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1569
+#, no-wrap
+msgid "Using `USE_GITHUB` When Upstream Does Not Use Versions"
+msgstr "Использование `USE_GITHUB` при отсутствии версий у исходного проекта"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1574
+msgid ""
+"If there never was a version upstream, do not invent one like `0.1` or "
+"`1.0`. Create the port with a `DISTVERSION` of `g__YYYYMMDD__`, where `g` "
+"is for Git, and `_YYYYMMDD_` represents the date the commit referenced in "
+"`GH_TAGNAME`."
+msgstr ""
+"Если никогда не было версии вышестоящего репозитория, не изобретайте её, "
+"например `0.1` или `1.0`. Создайте порт с `DISTVERSION` в формате "
+"`g__YYYYMMDD__`, где `g` означает Git, а `_YYYYMMDD_` представляет дату "
+"коммита, указанного в `GH_TAGNAME`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1579
+#, no-wrap
+msgid ""
+"PORTNAME=\tbar\n"
+"DISTVERSION=\tg20140411\n"
+msgstr ""
+"PORTNAME=\tbar\n"
+"DISTVERSION=\tg20140411\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1582
+#, no-wrap
+msgid ""
+"USE_GITHUB=\tyes\n"
+"GH_TAGNAME=\tc472d66b\n"
+msgstr ""
+"USE_GITHUB=\tyes\n"
+"GH_TAGNAME=\tc472d66b\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1586
+msgid ""
+"This creates a versioning scheme that increases over time, and that is still "
+"before version `0`. See crossref:makefiles[makefile-versions-ex-pkg-"
+"version, this secion on how to compare versions] using man:pkg-version[8]):"
+msgstr ""
+"Это создаёт схему версионирования, которая увеличивается со временем и всё "
+"ещё находится до версии `0`. Подробности об использовании man:pkg-version[8] "
+"для сравнения версий смотрите в crossref:makefiles[makefile-versions-ex-pkg-"
+"version, этой секции]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1591
+#, no-wrap
+msgid ""
+"% pkg version -t g20140411 0\n"
+"<\n"
+msgstr ""
+"% pkg version -t g20140411 0\n"
+"<\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1594
+msgid ""
+"Which means using `PORTEPOCH` will not be needed in case upstream decides to "
+"cut versions in the future."
+msgstr ""
+"Что означает, что использование `PORTEPOCH` не потребуется, если вышестоящий "
+"проект решит сократить версии в будущем."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1597
+#, no-wrap
+msgid "Using `USE_GITHUB` to Access a Commit Between Two Versions"
+msgstr "Использование `USE_GITHUB` для доступа к коммиту между двумя версиями"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1601
+msgid ""
+"If the current version of the software uses a Git tag, and the port needs to "
+"be updated to a newer, intermediate version, without a tag, use man:git-"
+"describe[1] to find out the version to use:"
+msgstr ""
+"Если текущая версия программного обеспечения использует тег Git, и порт "
+"необходимо обновить до более новой промежуточной версии без тега, "
+"используйте man:git-describe[1], чтобы определить версию для использования:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1606
+#, no-wrap
+msgid ""
+"% git describe --tags f0038b1\n"
+"v0.7.3-14-gf0038b1\n"
+msgstr ""
+"% git describe --tags f0038b1\n"
+"v0.7.3-14-gf0038b1\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1609
+msgid "`v0.7.3-14-gf0038b1` can be split into three parts:"
+msgstr "`v0.7.3-14-gf0038b1` можно разделить на три части:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1610
+#, no-wrap
+msgid "`v0.7.3`"
+msgstr "`v0.7.3`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1612
+msgid ""
+"This is the last Git tag that appears in the commit history before the "
+"requested commit."
+msgstr ""
+"Это последний тег Git, который появляется в истории коммитов перед "
+"запрошенным коммитом."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1613
+#, no-wrap
+msgid "`-14`"
+msgstr "`-14`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1615
+msgid ""
+"This means that the requested commit, `f0038b1`, is the 14th commit after "
+"the `v0.7.3` tag."
+msgstr ""
+"Это означает, что запрошенный коммит `f0038b1` является 14-м коммитом после "
+"тега `v0.7.3`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1616
+#, no-wrap
+msgid "`-gf0038b1`"
+msgstr "`-gf0038b1`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1618
+msgid ""
+"The `-g` means \"Git\", and the `f0038b1` is the commit hash that this "
+"reference points to."
+msgstr ""
+"`-g` означает \"Git\", а `f0038b1` — это хеш коммита, на который указывает "
+"данная ссылка."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1625
+#, no-wrap
+msgid ""
+"PORTNAME=\tbar\n"
+"DISTVERSIONPREFIX= v\n"
+"DISTVERSION=\t0.7.3-14\n"
+"DISTVERSIONSUFFIX= -gf0038b1\n"
+msgstr ""
+"PORTNAME=\tbar\n"
+"DISTVERSIONPREFIX= v\n"
+"DISTVERSION=\t0.7.3-14\n"
+"DISTVERSIONSUFFIX= -gf0038b1\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1631
+msgid ""
+"This creates a versioning scheme that increases over time (well, over "
+"commits), and does not conflict with the creation of a `0.7.4` version. See "
+"crossref:makefiles[makefile-versions-ex-pkg-version, this section for how to "
+"compare versions] using man:pkg-version[8]):"
+msgstr ""
+"Это создаёт схему версионирования, которая увеличивается со временем "
+"(точнее, с коммитами) и не конфликтует с созданием версии `0.7.4`. "
+"Подробности об использовании man:pkg-version[8] для сравнения версий "
+"смотрите в crossref:makefiles[makefile-versions-ex-pkg-version, этой "
+"секции] :"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1638
+#, no-wrap
+msgid ""
+"% pkg version -t 0.7.3 0.7.3.14\n"
+"<\n"
+"% pkg version -t 0.7.3.14 0.7.4\n"
+"<\n"
+msgstr ""
+"% pkg version -t 0.7.3 0.7.3.14\n"
+"<\n"
+"% pkg version -t 0.7.3.14 0.7.4\n"
+"<\n"
+
+#. type: delimited block * 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1644
+msgid ""
+"If the requested commit is the same as a tag, a shorter description is shown "
+"by default. The longer version is equivalent:"
+msgstr ""
+"Если запрошенный коммит совпадает с тегом, по умолчанию отображается более "
+"короткое описание. Полная версия эквивалентна:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1649
+#, no-wrap
+msgid ""
+"% git describe --tags c66c71d\n"
+"v0.7.3\n"
+msgstr ""
+"% git describe --tags c66c71d\n"
+"v0.7.3\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1652
+#, no-wrap
+msgid ""
+"% git describe --tags --long c66c71d\n"
+"v0.7.3-0-gc66c71d\n"
+msgstr ""
+"% git describe --tags --long c66c71d\n"
+"v0.7.3-0-gc66c71d\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1659
+#, no-wrap
+msgid "Fetching Multiple Files from GitHub"
+msgstr "Извлечение нескольких файлов из GitHub"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1663
+msgid ""
+"The `USE_GITHUB` framework also supports fetching multiple distribution "
+"files from different places in GitHub. It works in a way very similar to "
+"crossref:makefiles[porting-master-sites-n, Multiple Distribution or Patches "
+"Files from Multiple Locations]."
+msgstr ""
+"Фреймворк `USE_GITHUB` также поддерживает загрузку нескольких файлов "
+"дистрибутива из разных мест в GitHub. Он работает очень похоже на "
+"crossref:makefiles[porting-master-sites-n, Файлы дистрибуции или патчей из "
+"нескольких мест]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1669
+msgid ""
+"Multiple values are added to `GH_ACCOUNT`, `GH_PROJECT`, and `GH_TAGNAME`. "
+"Each different value is assigned a group. The main value can either have no "
+"group, or the `:DEFAULT` group. A value can be omitted if it is the same as "
+"the default as listed in crossref:makefiles[makefile-master_sites-github-"
+"description,`USE_GITHUB` Description]."
+msgstr ""
+"В `GH_ACCOUNT`, `GH_PROJECT` и `GH_TAGNAME` добавляются несколько значений. "
+"Каждому различному значению присваивается группа. Основное значение может не "
+"иметь группы или принадлежать группе `:DEFAULT`. Значение может быть "
+"опущено, если оно совпадает со значением по умолчанию, указанным в "
+"crossref:makefiles[makefile-master_sites-github-description,описании "
+"`USE_GITHUB`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1672
+msgid ""
+"`GH_TUPLE` can also be used when there are a lot of distribution files. It "
+"helps keep the account, project, tagname, and group information at the same "
+"place."
+msgstr ""
+"`GH_TUPLE` также можно использовать, когда имеется множество файлов "
+"дистрибутива. Это помогает сохранять учётные данные, проект, имя тега и "
+"информацию о группе в одном месте."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1675
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1979
+msgid ""
+"For each group, a `${WRKSRC_group}` helper variable is created, containing "
+"the directory into which the file has been extracted. The `${WRKSRC_group}` "
+"variables can be used to move directories around during `post-extract`, or "
+"add to `CONFIGURE_ARGS`, or whatever is needed so that the software builds "
+"correctly."
+msgstr ""
+"Для каждой группы создаётся вспомогательная переменная `${WRKSRC_group}`, "
+"содержащая каталог, в который был извлечён файл. Переменные `${WRKSRC_group}"
+"` могут использоваться для перемещения каталогов во время `post-extract`, "
+"добавления в `CONFIGURE_ARGS` или любых других действий, необходимых для "
+"корректной сборки программного обеспечения."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1680
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1984
+msgid ""
+"The `:__group__` part _must_ be used for _only one_ distribution file. It "
+"is used as a unique key and using it more than once will overwrite the "
+"previous values."
+msgstr ""
+"Часть `:__group__` _должна_ использоваться _только для одного_ файла "
+"дистрибутива. Она служит уникальным ключом, и её повторное использование "
+"приведёт к перезаписи предыдущих значений."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1687
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1991
+msgid ""
+"As this is only syntactic sugar above `DISTFILES` and `MASTER_SITES`, the "
+"group names must adhere to the restrictions on group names outlined in "
+"crossref:makefiles[porting-master-sites-n, Multiple Distribution or Patches "
+"Files from Multiple Locations]"
+msgstr ""
+"Поскольку это всего лишь синтаксический сахар над `DISTFILES` и "
+"`MASTER_SITES`, имена групп должны соответствовать ограничениям на имена "
+"групп, описанным в crossref:makefiles[porting-master-sites-n, Файлы "
+"дистрибутивов или патчей из нескольких источников]"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1691
+msgid ""
+"When fetching multiple files from GitHub, sometimes the default distribution "
+"file is not fetched from GitHub. To disable fetching the default "
+"distribution, set:"
+msgstr ""
+"При получении нескольких файлов из GitHub иногда файл дистрибутива по "
+"умолчанию не загружается из GitHub. Чтобы отключить загрузку файла "
+"дистрибутива по умолчанию, установите:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1695
+#, no-wrap
+msgid "USE_GITHUB=\tnodefault\n"
+msgstr "USE_GITHUB=\tnodefault\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1700
+msgid ""
+"When using `USE_GITHUB=nodefault`, the [.filename]#Makefile# must set "
+"`DISTFILES` in its crossref:porting-order[porting-order-portname,top block]. "
+"The definition should be:"
+msgstr ""
+"При использовании `USE_GITHUB=nodefault` в [.filename]#Makefile# необходимо "
+"указать `DISTFILES` в его crossref:porting-order[porting-order-"
+"portname,верхнем блоке]. Определение должно быть следующим:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1704
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2010
+#, no-wrap
+msgid "DISTFILES= ${DISTNAME}${EXTRACT_SUFX}\n"
+msgstr "DISTFILES= ${DISTNAME}${EXTRACT_SUFX}\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1709
+#, no-wrap
+msgid "Use of `USE_GITHUB` with Multiple Distribution Files"
+msgstr "Использование `USE_GITHUB` с несколькими файлами дистрибутива"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1715
+msgid ""
+"From time to time, there is a need to fetch more than one distribution "
+"file. For example, when the upstream git repository uses submodules. This "
+"can be done easily using groups in the `GH_*` variables:"
+msgstr ""
+"Время от времени возникает необходимость загрузить более одного файла "
+"дистрибутива. Например, когда вышестоящий репозиторий git использует "
+"подмодули. Это можно легко сделать с помощью групп в переменных `GH_*`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1720
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1766
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2026
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2072
+#, no-wrap
+msgid ""
+"PORTNAME=\tfoo\n"
+"DISTVERSION=\t1.0.2\n"
+msgstr ""
+"PORTNAME=\tfoo\n"
+"DISTVERSION=\t1.0.2\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1726
+#, no-wrap
+msgid ""
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tbar:icons,contrib\n"
+"GH_PROJECT=\tfoo-icons:icons foo-contrib:contrib\n"
+"GH_TAGNAME=\t1.0:icons fa579bc:contrib\n"
+"GH_SUBDIR=\text/icons:icons\n"
+msgstr ""
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tbar:icons,contrib\n"
+"GH_PROJECT=\tfoo-icons:icons foo-contrib:contrib\n"
+"GH_TAGNAME=\t1.0:icons fa579bc:contrib\n"
+"GH_SUBDIR=\text/icons:icons\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1728
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1772
+#, no-wrap
+msgid "CONFIGURE_ARGS=\t--with-contrib=${WRKSRC_contrib}\n"
+msgstr "CONFIGURE_ARGS=\t--with-contrib=${WRKSRC_contrib}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1735
+msgid ""
+"This will fetch three distribution files from github. The default one comes "
+"from [.filename]#foo/foo# and is version `1.0.2`. The second one, with the "
+"`icons` group, comes from [.filename]#bar/foo-icons# and is in version "
+"`1.0`. The third one comes from [.filename]#bar/foo-contrib# and uses the "
+"Git commit `fa579bc`. The distribution files are named [.filename]#foo-"
+"foo-1.0.2_GH0.tar.gz#, [.filename]#bar-foo-icons-1.0_GH0.tar.gz#, and "
+"[.filename]#bar-foo-contrib-fa579bc_GH0.tar.gz#."
+msgstr ""
+"Это загрузит три файла дистрибутива с github. Стандартный берется из "
+"[.filename]#foo/foo# и имеет версию `1.0.2`. Второй, с группой `icons`, "
+"берется из [.filename]#bar/foo-icons# и имеет версию `1.0`. Третий берется "
+"из [.filename]#bar/foo-contrib# и использует Git-коммит `fa579bc`. Файлы "
+"дистрибутива называются [.filename]#foo-foo-1.0.2_GH0.tar.gz#, "
+"[.filename]#bar-foo-icons-1.0_GH0.tar.gz# и [.filename]#bar-foo-contrib-"
+"fa579bc_GH0.tar.gz#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1741
+msgid ""
+"All the distribution files are extracted in `${WRKDIR}` in their respective "
+"subdirectories. The default file is still extracted in `${WRKSRC}`, in this "
+"case, [.filename]#${WRKDIR}/foo-1.0.2#. Each additional distribution file "
+"is extracted in `${WRKSRC_group}`. Here, for the `icons` group, it is "
+"called `${WRKSRC_icons}` and it contains [.filename]#${WRKDIR}/foo-"
+"icons-1.0#. The file with the `contrib` group is called `${WRKSRC_contrib}` "
+"and contains `${WRKDIR}/foo-contrib-fa579bc`."
+msgstr ""
+"Все файлы дистрибутива извлекаются в `${WRKDIR}` в соответствующих "
+"подкаталогах. Основной файл по-прежнему извлекается в `${WRKSRC}`, в данном "
+"случае, [.filename]#${WRKDIR}/foo-1.0.2#. Каждый дополнительный файл "
+"дистрибутива извлекается в `${WRKSRC_group}`. Здесь, для группы `icons`, он "
+"называется `${WRKSRC_icons}` и содержит [.filename]#${WRKDIR}/foo-"
+"icons-1.0#. Файл с группой `contrib` называется `${WRKSRC_contrib}` и "
+"содержит `${WRKDIR}/foo-contrib-fa579bc`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1745
+msgid ""
+"The software's build system expects to find the icons in a [.filename]#ext/"
+"icons# subdirectory in its sources, so `GH_SUBDIR` is used. `GH_SUBDIR` "
+"makes sure that [.filename]#ext# exists, but that [.filename]#ext/icons# "
+"does not already exist. Then it does this:"
+msgstr ""
+"Система сборки программы ожидает найти иконки в подкаталоге [.filename]#ext/"
+"icons# в её исходниках, поэтому используется `GH_SUBDIR`. `GH_SUBDIR` "
+"гарантирует, что [.filename]#ext# существует, но [.filename]#ext/icons# ещё "
+"не существует. Затем он выполняет следующее:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1750
+#, no-wrap
+msgid ""
+"post-extract:\n"
+" @${MV} ${WRKSRC_icons} ${WRKSRC}/ext/icons\n"
+msgstr ""
+"post-extract:\n"
+" @${MV} ${WRKSRC_icons} ${WRKSRC}/ext/icons\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1755
+#, no-wrap
+msgid "Use of `USE_GITHUB` with Multiple Distribution Files Using `GH_TUPLE`"
+msgstr "Использование `USE_GITHUB` с несколькими файлами дистрибутива с помощью `GH_TUPLE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1761
+msgid ""
+"This is functionally equivalent to crossref:makefiles[makefile-master_sites-"
+"github-multi,Use of `USE_GITHUB` with Multiple Distribution Files], but "
+"using `GH_TUPLE`:"
+msgstr ""
+"Это функционально эквивалентно crossref:makefiles[makefile-master_sites-"
+"github-multi,Использованию `USE_GITHUB` с несколькими файлами дистрибутива], "
+"но с использованием `GH_TUPLE`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1770
+#, no-wrap
+msgid ""
+"USE_GITHUB=\tyes\n"
+"GH_TUPLE=\tbar:foo-icons:1.0:icons/ext/icons \\\n"
+"\t\tbar:foo-contrib:fa579bc:contrib\n"
+msgstr ""
+"USE_GITHUB=\tyes\n"
+"GH_TUPLE=\tbar:foo-icons:1.0:icons/ext/icons \\\n"
+"\t\tbar:foo-contrib:fa579bc:contrib\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1776
+msgid ""
+"Grouping was used in the previous example with `bar:icons,contrib`. Some "
+"redundant information is present with `GH_TUPLE` because grouping is not "
+"possible."
+msgstr ""
+"В предыдущем примере использовалась группировка с `bar:icons,contrib`. В "
+"`GH_TUPLE` присутствует избыточная информация, так как группировка "
+"невозможна."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1779
+#, no-wrap
+msgid "How to Use `USE_GITHUB` with Git Submodules?"
+msgstr "Как использовать `USE_GITHUB` с подмодулями Git?"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1784
+msgid ""
+"Ports with GitHub as an upstream repository sometimes use submodules. See "
+"man:git-submodule[1] for more information."
+msgstr ""
+"Порты, использующие GitHub в качестве вышестоящего репозитория, иногда "
+"применяют подмодули. Подробнее см. man:git-submodule[1]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1787
+msgid ""
+"The problem with submodules is that each is a separate repository. As such, "
+"they each must be fetched separately."
+msgstr ""
+"Проблема с подмодулями заключается в том, что каждый из них является "
+"отдельным репозиторием. Таким образом, каждый из них должен быть загружен "
+"отдельно."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1792
+msgid ""
+"Using package:finance/moneymanagerex[] as an example, its GitHub repository "
+"is https://github.com/moneymanagerex/moneymanagerex/[]. It has a https://"
+"github.com/moneymanagerex/moneymanagerex/blob/"
+"master/.gitmodules[.gitmodules] file at the root. This file describes all "
+"the submodules used in this repository, and lists additional repositories "
+"needed. This file will tell what additional repositories are needed:"
+msgstr ""
+"В качестве примера используем пакет package:finance/moneymanagerex[], его "
+"репозиторий на GitHub находится по адресу https://github.com/moneymanagerex/"
+"moneymanagerex/[]. В корне репозитория есть файл https://github.com/"
+"moneymanagerex/moneymanagerex/blob/master/.gitmodules[.gitmodules]. Этот "
+"файл описывает все подмодули, используемые в данном репозитории, и "
+"перечисляет дополнительные необходимые репозитории. Этот файл покажет, какие "
+"дополнительные репозитории требуются:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1808
+#, no-wrap
+msgid ""
+"[submodule \"lib/wxsqlite3\"]\n"
+"\tpath = lib/wxsqlite3\n"
+"\turl = https://github.com/utelle/wxsqlite3.git\n"
+"[submodule \"3rd/mongoose\"]\n"
+"\tpath = 3rd/mongoose\n"
+"\turl = https://github.com/cesanta/mongoose.git\n"
+"[submodule \"3rd/LuaGlue\"]\n"
+"\tpath = 3rd/LuaGlue\n"
+"\turl = https://github.com/moneymanagerex/LuaGlue.git\n"
+"[submodule \"3rd/cgitemplate\"]\n"
+"\tpath = 3rd/cgitemplate\n"
+"\turl = https://github.com/moneymanagerex/html-template.git\n"
+"[...]\n"
+msgstr ""
+"[submodule \"lib/wxsqlite3\"]\n"
+"\tpath = lib/wxsqlite3\n"
+"\turl = https://github.com/utelle/wxsqlite3.git\n"
+"[submodule \"3rd/mongoose\"]\n"
+"\tpath = 3rd/mongoose\n"
+"\turl = https://github.com/cesanta/mongoose.git\n"
+"[submodule \"3rd/LuaGlue\"]\n"
+"\tpath = 3rd/LuaGlue\n"
+"\turl = https://github.com/moneymanagerex/LuaGlue.git\n"
+"[submodule \"3rd/cgitemplate\"]\n"
+"\tpath = 3rd/cgitemplate\n"
+"\turl = https://github.com/moneymanagerex/html-template.git\n"
+"[...]\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1812
+msgid ""
+"The only information missing from that file is the commit hash or tag to use "
+"as a version. This information is found after cloning the repository:"
+msgstr ""
+"Единственная информация, отсутствующая в этом файле, — это хэш коммита или "
+"тег, который следует использовать в качестве версии. Эта информация "
+"находится после клонирования репозитория:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1841
+#, no-wrap
+msgid ""
+"% git clone --recurse-submodules https://github.com/moneymanagerex/moneymanagerex.git\n"
+"Cloning into 'moneymanagerex'...\n"
+"remote: Counting objects: 32387, done.\n"
+"[...]\n"
+"Submodule '3rd/LuaGlue' (https://github.com/moneymanagerex/LuaGlue.git) registered for path '3rd/LuaGlue'\n"
+"Submodule '3rd/cgitemplate' (https://github.com/moneymanagerex/html-template.git) registered for path '3rd/cgitemplate'\n"
+"Submodule '3rd/mongoose' (https://github.com/cesanta/mongoose.git) registered for path '3rd/mongoose'\n"
+"Submodule 'lib/wxsqlite3' (https://github.com/utelle/wxsqlite3.git) registered for path 'lib/wxsqlite3'\n"
+"[...]\n"
+"Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/3rd/LuaGlue'...\n"
+"Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/3rd/cgitemplate'...\n"
+"Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/3rd/mongoose'...\n"
+"Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/lib/wxsqlite3'...\n"
+"[...]\n"
+"Submodule path '3rd/LuaGlue': checked out 'c51d11a247ee4d1e9817dfa2a8da8d9e2f97ae3b'\n"
+"Submodule path '3rd/cgitemplate': checked out 'cd434eeeb35904ebcd3d718ba29c281a649b192c'\n"
+"Submodule path '3rd/mongoose': checked out '2140e5992ab9a3a9a34ce9a281abf57f00f95cda'\n"
+"Submodule path 'lib/wxsqlite3': checked out 'fb66eb230d8aed21dec273b38c7c054dcb7d6b51'\n"
+"[...]\n"
+"% cd moneymanagerex\n"
+"% git submodule status\n"
+" c51d11a247ee4d1e9817dfa2a8da8d9e2f97ae3b 3rd/LuaGlue (heads/master)\n"
+" cd434eeeb35904ebcd3d718ba29c281a649b192c 3rd/cgitemplate (cd434ee)\n"
+" 2140e5992ab9a3a9a34ce9a281abf57f00f95cda 3rd/mongoose (6.2-138-g2140e59)\n"
+" fb66eb230d8aed21dec273b38c7c054dcb7d6b51 lib/wxsqlite3 (v3.4.0)\n"
+"[...]\n"
+msgstr ""
+"% git clone --recurse-submodules https://github.com/moneymanagerex/moneymanagerex.git\n"
+"Cloning into 'moneymanagerex'...\n"
+"remote: Counting objects: 32387, done.\n"
+"[...]\n"
+"Submodule '3rd/LuaGlue' (https://github.com/moneymanagerex/LuaGlue.git) registered for path '3rd/LuaGlue'\n"
+"Submodule '3rd/cgitemplate' (https://github.com/moneymanagerex/html-template.git) registered for path '3rd/cgitemplate'\n"
+"Submodule '3rd/mongoose' (https://github.com/cesanta/mongoose.git) registered for path '3rd/mongoose'\n"
+"Submodule 'lib/wxsqlite3' (https://github.com/utelle/wxsqlite3.git) registered for path 'lib/wxsqlite3'\n"
+"[...]\n"
+"Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/3rd/LuaGlue'...\n"
+"Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/3rd/cgitemplate'...\n"
+"Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/3rd/mongoose'...\n"
+"Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/lib/wxsqlite3'...\n"
+"[...]\n"
+"Submodule path '3rd/LuaGlue': checked out 'c51d11a247ee4d1e9817dfa2a8da8d9e2f97ae3b'\n"
+"Submodule path '3rd/cgitemplate': checked out 'cd434eeeb35904ebcd3d718ba29c281a649b192c'\n"
+"Submodule path '3rd/mongoose': checked out '2140e5992ab9a3a9a34ce9a281abf57f00f95cda'\n"
+"Submodule path 'lib/wxsqlite3': checked out 'fb66eb230d8aed21dec273b38c7c054dcb7d6b51'\n"
+"[...]\n"
+"% cd moneymanagerex\n"
+"% git submodule status\n"
+" c51d11a247ee4d1e9817dfa2a8da8d9e2f97ae3b 3rd/LuaGlue (heads/master)\n"
+" cd434eeeb35904ebcd3d718ba29c281a649b192c 3rd/cgitemplate (cd434ee)\n"
+" 2140e5992ab9a3a9a34ce9a281abf57f00f95cda 3rd/mongoose (6.2-138-g2140e59)\n"
+" fb66eb230d8aed21dec273b38c7c054dcb7d6b51 lib/wxsqlite3 (v3.4.0)\n"
+"[...]\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1845
+msgid ""
+"It can also be found on GitHub. Each subdirectory that is a submodule is "
+"shown as `_directory @ hash_`, for example, `mongoose @ 2140e59`."
+msgstr ""
+"Это также можно найти на GitHub. Каждый подкаталог, который является "
+"подмодулем, отображается как `_директория @ хэш_`, например, `mongoose @ "
+"2140e59`."
+
+#. type: delimited block * 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1851
+msgid ""
+"While getting the information from GitHub seems more straightforward, the "
+"information found using `git submodule status` will provide more meaningful "
+"information. For example, here, ``lib/wxsqlite3``'s commit hash `fb66eb2` "
+"correspond to `v3.4.0`. Both can be used interchangeably, but when a tag is "
+"available, use it."
+msgstr ""
+"Хотя получение информации из GitHub кажется более простым, данные, "
+"полученные с помощью `git submodule status`, будут более информативными. "
+"Например, здесь хеш коммита ``lib/wxsqlite3`` `fb66eb2` соответствует "
+"`v3.4.0`. Оба варианта можно использовать взаимозаменяемо, но если доступен "
+"тег, предпочтительнее использовать его."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1854
+msgid ""
+"Now that all the required information has been gathered, the "
+"[.filename]#Makefile# can be written (only GitHub-related lines are shown):"
+msgstr ""
+"Теперь, когда вся необходимая информация собрана, можно написать "
+"[.filename]#Makefile# (показаны только строки, связанные с GitHub):"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1860
+#, no-wrap
+msgid ""
+"PORTNAME=\tmoneymanagerex\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION=\t1.3.0\n"
+msgstr ""
+"PORTNAME=\tmoneymanagerex\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION=\t1.3.0\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1867
+#, no-wrap
+msgid ""
+"USE_GITHUB=\tyes\n"
+"GH_TUPLE=\tutelle:wxsqlite3:v3.4.0:wxsqlite3/lib/wxsqlite3 \\\n"
+"\t\tmoneymanagerex:LuaGlue:c51d11a:lua_glue/3rd/LuaGlue \\\n"
+"\t\tmoneymanagerex:html-template:cd434ee:html_template/3rd/cgitemplate \\\n"
+"\t\tcesanta:mongoose:2140e59:mongoose/3rd/mongoose \\\n"
+"\t\t[...]\n"
+msgstr ""
+"USE_GITHUB=\tyes\n"
+"GH_TUPLE=\tutelle:wxsqlite3:v3.4.0:wxsqlite3/lib/wxsqlite3 \\\n"
+"\t\tmoneymanagerex:LuaGlue:c51d11a:lua_glue/3rd/LuaGlue \\\n"
+"\t\tmoneymanagerex:html-template:cd434ee:html_template/3rd/cgitemplate \\\n"
+"\t\tcesanta:mongoose:2140e59:mongoose/3rd/mongoose \\\n"
+"\t\t[...]\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1872
+#, no-wrap
+msgid "`USE_GITLAB`"
+msgstr "`USE_GITLAB`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1875
+msgid ""
+"Similar to GitHub, if the distribution file comes from https://gitlab.com/"
+"[gitlab.com] or is hosting the GitLab software, these variables are "
+"available for use and might need to be set."
+msgstr ""
+"Подобно GitHub, если файл дистрибутива поставляется с https://gitlab.com/"
+"[gitlab.com] или использует программное обеспечение GitLab, эти переменные "
+"доступны для использования и могут потребовать установки."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1877
+#, no-wrap
+msgid "`USE_GITLAB` Description"
+msgstr "Описание `USE_GITLAB`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1885
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4887
+#, no-wrap
+msgid "`GL_SITE`"
+msgstr "`GL_SITE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1886
+#, no-wrap
+msgid "Site name hosting the GitLab project"
+msgstr "Название сайта, на котором размещен проект GitLab"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1888
+#, no-wrap
+msgid "https://gitlab.com/"
+msgstr "https://gitlab.com/"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1889
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4884
+#, no-wrap
+msgid "`GL_ACCOUNT`"
+msgstr "`GL_ACCOUNT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1890
+#, no-wrap
+msgid "Account name of the GitLab user hosting the project"
+msgstr "Имя учётной записи пользователя GitLab, размещающего проект"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1893
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4886
+#, no-wrap
+msgid "`GL_PROJECT`"
+msgstr "`GL_PROJECT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1894
+#, no-wrap
+msgid "Name of the project on GitLab"
+msgstr "Название проекта на GitLab"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1897
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4885
+#, no-wrap
+msgid "`GL_COMMIT`"
+msgstr "`GL_COMMIT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1898
+#, no-wrap
+msgid "The commit hash to download. Must be the full 160 bit, 40 character hex sha1 hash. This is a required variable for GitLab."
+msgstr "Хэш коммита для загрузки. Должен быть полным 160-битным, 40-символьным шестнадцатеричным хэшем sha1. Это обязательная переменная для GitLab."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1900
+#, no-wrap
+msgid "`(none)`"
+msgstr "`(нет)`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1901
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4888
+#, no-wrap
+msgid "`GL_SUBDIR`"
+msgstr "`GL_SUBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1904
+#, no-wrap
+msgid ""
+"When the software needs an additional distribution file to be extracted within\n"
+"`${WRKSRC}`, this variable can be used. See the examples in\n"
+"\tcrossref:makefiles[makefile-master_sites-gitlab-multiple, Fetching Multiple Files from GitLab] for more information."
+msgstr ""
+"Когда программному обеспечению требуется дополнительный файл дистрибутива для извлечения в\n"
+"`${WRKSRC}`, можно использовать эту переменную. Примеры можно найти в\n"
+"\tcrossref:makefiles[makefile-master_sites-gitlab-multiple, Загрузка нескольких файлов из GitLab] для получения дополнительной информации."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1907
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4889
+#, no-wrap
+msgid "`GL_TUPLE`"
+msgstr "`GL_TUPLE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1908
+#, no-wrap
+msgid "`GL_TUPLE` allows putting `GL_SITE`, `GL_ACCOUNT`, `GL_PROJECT`, `GL_COMMIT`, and `GL_SUBDIR` into a single variable. The format is _site_`:`_account_`:`_project_`:`_commit_`:`_group_`/`_subdir_. The _site_`:` and `/`_subdir_ part is optional. It is helpful when there are more than one GitLab project from which to fetch."
+msgstr "`GL_TUPLE` позволяет объединить `GL_SITE`, `GL_ACCOUNT`, `GL_PROJECT`, `GL_COMMIT` и `GL_SUBDIR` в одну переменную. Формат записи: _сайт_`:`_учётная запись_`:`_проект_`:`_коммит_`:`_группа_`/`_поддиректория_. Части _сайт_`:` и `/`_поддиректория_ являются необязательными. Это полезно, когда требуется загрузить данные из нескольких проектов GitLab."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1912
+#, no-wrap
+msgid "Simple Use of `USE_GITLAB`"
+msgstr "Простое использование `USE_GITLAB`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1916
+msgid ""
+"While trying to make a port for version `1.14` of libsignon-glib from the "
+"accounts-sso user on gitlab.com, at https://gitlab.com/accounts-sso/"
+"libsignon-glib/[], The [.filename]#Makefile# would end up looking like this "
+"for fetching the distribution files:"
+msgstr ""
+"Пытаясь создать порт для версии `1.14` библиотеки libsignon-glib от "
+"пользователя accounts-sso на gitlab.com, по адресу https://gitlab.com/"
+"accounts-sso/libsignon-glib/[], файл [.filename]#Makefile# будет выглядеть "
+"следующим образом для загрузки дистрибутивных файлов:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1921
+#, no-wrap
+msgid ""
+"PORTNAME=\tlibsignon-glib\n"
+"DISTVERSION=\t1.14\n"
+msgstr ""
+"PORTNAME=\tlibsignon-glib\n"
+"DISTVERSION=\t1.14\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1925
+#, no-wrap
+msgid ""
+"USE_GITLAB=\tyes\n"
+"GL_ACCOUNT=\taccounts-sso\n"
+"GL_COMMIT=\te90302e342bfd27bc8c9132ab9d0ea3d8723fd03\n"
+msgstr ""
+"USE_GITLAB=\tyes\n"
+"GL_ACCOUNT=\taccounts-sso\n"
+"GL_COMMIT=\te90302e342bfd27bc8c9132ab9d0ea3d8723fd03\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1928
+msgid ""
+"It will automatically have `MASTER_SITES` set to https://gitlab.com/"
+"[gitlab.com] and `WRKSRC` to `${WRKDIR}/libsignon-glib-"
+"e90302e342bfd27bc8c9132ab9d0ea3d8723fd03-"
+"e90302e342bfd27bc8c9132ab9d0ea3d8723fd03`."
+msgstr ""
+"Он автоматически получит `MASTER_SITES`, установленный на https://gitlab.com/"
+"[gitlab.com], и `WRKSRC` на `${WRKDIR}/libsignon-glib-"
+"e90302e342bfd27bc8c9132ab9d0ea3d8723fd03-"
+"e90302e342bfd27bc8c9132ab9d0ea3d8723fd03`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1931
+#, no-wrap
+msgid "More Complete Use of `USE_GITLAB`"
+msgstr "Более полное использование `USE_GITLAB`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1936
+msgid ""
+"A more complete use of the above if port had no versioning and foobar from "
+"the foo user on project bar on a self hosted GitLab site `https://"
+"gitlab.example.com/`, the [.filename]#Makefile# ends up looking like this "
+"for fetching distribution files:"
+msgstr ""
+"Более полный пример использования вышеописанного, если порт не имеет "
+"версионирования и foobar принадлежит пользователю foo в проекте bar на "
+"самостоятельно размещенном сайте GitLab `https://gitlab.example.com/`, тогда "
+"[.filename]#Makefile# будет выглядеть следующим образом для загрузки "
+"дистрибутивных файлов:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1941
+#, no-wrap
+msgid ""
+"PORTNAME=\tfoobar\n"
+"DISTVERSION=\tg20170906\n"
+msgstr ""
+"PORTNAME=\tfoobar\n"
+"DISTVERSION=\tg20170906\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1947
+#, no-wrap
+msgid ""
+"USE_GITLAB=\tyes\n"
+"GL_SITE=\thttps://gitlab.example.com\n"
+"GL_ACCOUNT=\tfoo\n"
+"GL_PROJECT=\tbar\n"
+"GL_COMMIT=\t9c1669ce60c3f4f5eb43df874d7314483fb3f8a6\n"
+msgstr ""
+"USE_GITLAB=\tyes\n"
+"GL_SITE=\thttps://gitlab.example.com\n"
+"GL_ACCOUNT=\tfoo\n"
+"GL_PROJECT=\tbar\n"
+"GL_COMMIT=\t9c1669ce60c3f4f5eb43df874d7314483fb3f8a6\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1950
+msgid ""
+"It will have `MASTER_SITES` set to `\"https://gitlab.example.com\"` and "
+"`WRKSRC` to `${WRKDIR}/"
+"bar-9c1669ce60c3f4f5eb43df874d7314483fb3f8a6-9c1669ce60c3f4f5eb43df874d7314483fb3f8a6`."
+msgstr ""
+"В нем будет установлено `MASTER_SITES` в `\"https://gitlab.example.com\"` и "
+"`WRKSRC` в `${WRKDIR}/"
+"bar-9c1669ce60c3f4f5eb43df874d7314483fb3f8a6-9c1669ce60c3f4f5eb43df874d7314483fb3f8a6`."
+
+#. type: delimited block = 6
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1954
+msgid ""
+"`20170906` is the date of the commit referenced in `GL_COMMIT`, not the date "
+"the [.filename]#Makefile# is edited, or the date the commit to the FreeBSD "
+"ports tree is made."
+msgstr ""
+"`20170906` — это дата коммита, указанного в `GL_COMMIT`, а не дата "
+"редактирования файла [.filename]#Makefile# или дата коммита в дерево портов "
+"FreeBSD."
+
+#. type: delimited block = 6
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1959
+msgid ""
+"``GL_SITE``'s protocol, port and webroot can all be modified in the same "
+"variable."
+msgstr ""
+"Протокол, порт и корневая директория веб-сервера ``GL_SITE`` могут быть "
+"изменены в той же переменной."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1964
+#, no-wrap
+msgid "Fetching Multiple Files from GitLab"
+msgstr "Извлечение нескольких файлов из GitLab"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1969
+msgid ""
+"The `USE_GITLAB` framework also supports fetching multiple distribution "
+"files from different places from GitLab and GitLab hosted sites. It works "
+"in a way very similar to crossref:makefiles[porting-master-sites-n, Multiple "
+"Distribution or Patches Files from Multiple Locations] and "
+"crossref:makefiles[makefile-master_sites-gitlab-multiple, Fetching Multiple "
+"Files from GitLab]."
+msgstr ""
+"Фреймворк `USE_GITLAB` также поддерживает загрузку нескольких файлов "
+"дистрибутивов из различных мест GitLab и сайтов, размещённых на GitLab. Он "
+"работает очень похоже на crossref:makefiles[porting-master-sites-n, "
+"Несколько файлов дистрибутивов или патчей из разных местоположений] и "
+"crossref:makefiles[makefile-master_sites-gitlab-multiple, Загрузка "
+"нескольких файлов из GitLab]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1973
+msgid ""
+"Multiple values are added to `GL_SITE`, `GL_ACCOUNT`, `GL_PROJECT` and "
+"`GL_COMMIT`. Each different value is assigned a group. "
+"crossref:makefiles[makefile-master_sites-gitlab-description,`USE_GITLAB` "
+"Description]."
+msgstr ""
+"В `GL_SITE`, `GL_ACCOUNT`, `GL_PROJECT` и `GL_COMMIT` добавляются "
+"множественные значения. Каждое уникальное значение назначается группе. "
+"crossref:makefiles[makefile-master_sites-gitlab-description,Описание "
+"`USE_GITLAB`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1976
+msgid ""
+"`GL_TUPLE` can also be used when there are a lot of distribution files. It "
+"helps keep the site, account, project, commit, and group information at the "
+"same place."
+msgstr ""
+"`GL_TUPLE` также может использоваться, когда имеется множество файлов "
+"дистрибутива. Это помогает хранить информацию о сайте, учётной записи, "
+"проекте, коммите и группе в одном месте."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1995
+msgid ""
+"When fetching multiple files using GitLab, sometimes the default "
+"distribution file is not fetched from a GitLab site. To disable fetching "
+"the default distribution, set:"
+msgstr ""
+"При получении нескольких файлов с использованием GitLab иногда файл "
+"дистрибутива по умолчанию не загружается с сайта GitLab. Чтобы отключить "
+"загрузку файла дистрибутива по умолчанию, установите:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1999
+#, no-wrap
+msgid "USE_GITLAB=\tnodefault\n"
+msgstr "USE_GITLAB=\tnodefault\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2006
+msgid ""
+"When using `USE_GITLAB=nodefault`, the [.filename]#Makefile# must set "
+"`DISTFILES` in its crossref:makefiles[porting-order-portname,top block]. "
+"The definition should be:"
+msgstr ""
+"При использовании `USE_GITLAB=nodefault`, [.filename]#Makefile# должен "
+"устанавливать `DISTFILES` в своем crossref:makefiles[porting-order-"
+"portname,верхнем блоке]. Определение должно быть следующим:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2015
+#, no-wrap
+msgid "Use of `USE_GITLAB` with Multiple Distribution Files"
+msgstr "Использование `USE_GITLAB` с несколькими файлами дистрибутива"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2021
+msgid ""
+"From time to time, there is a need to fetch more than one distribution "
+"file. For example, when the upstream git repository uses submodules. This "
+"can be done easily using groups in the `GL_*` variables:"
+msgstr ""
+"Время от времени возникает необходимость загрузить более одного файла "
+"дистрибутива. Например, когда вышестоящий git-репозиторий использует "
+"подмодули. Это можно легко сделать с помощью групп в переменных `GL_*`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2033
+#, no-wrap
+msgid ""
+"USE_GITLAB=\tyes\n"
+"GL_SITE=\thttps://gitlab.example.com:9434/gitlab:icons\n"
+"GL_ACCOUNT=\tbar:icons,contrib\n"
+"GL_PROJECT=\tfoo-icons:icons foo-contrib:contrib\n"
+"GL_COMMIT=\tc189207a55da45305c884fe2b50e086fcad4724b ae7368cab1ca7ca754b38d49da064df87968ffe4:icons 9e4dd76ad9b38f33fdb417a4c01935958d5acd2a:contrib\n"
+"GL_SUBDIR=\text/icons:icons\n"
+msgstr ""
+"USE_GITLAB=\tyes\n"
+"GL_SITE=\thttps://gitlab.example.com:9434/gitlab:icons\n"
+"GL_ACCOUNT=\tbar:icons,contrib\n"
+"GL_PROJECT=\tfoo-icons:icons foo-contrib:contrib\n"
+"GL_COMMIT=\tc189207a55da45305c884fe2b50e086fcad4724b ae7368cab1ca7ca754b38d49da064df87968ffe4:icons 9e4dd76ad9b38f33fdb417a4c01935958d5acd2a:contrib\n"
+"GL_SUBDIR=\text/icons:icons\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2035
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2079
+#, no-wrap
+msgid "CONFIGURE_ARGS= --with-contrib=${WRKSRC_contrib}\n"
+msgstr "CONFIGURE_ARGS= --with-contrib=${WRKSRC_contrib}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2042
+msgid ""
+"This will fetch two distribution files from gitlab.com and one from "
+"`gitlab.example.com` hosting GitLab. The default one comes from "
+"[.filename]#https://gitlab.com/foo/foo# and commit is "
+"`c189207a55da45305c884fe2b50e086fcad4724b`. The second one, with the "
+"`icons` group, comes from [.filename]#https://gitlab.example.com:9434/gitlab/"
+"bar/foo-icons# and commit is `ae7368cab1ca7ca754b38d49da064df87968ffe4`. "
+"The third one comes from [.filename]#https://gitlab.com/bar/foo-contrib# and "
+"is commit `9e4dd76ad9b38f33fdb417a4c01935958d5acd2a`. The distribution "
+"files are named [.filename]#foo-foo-"
+"c189207a55da45305c884fe2b50e086fcad4724b_GL0.tar.gz#, [.filename]#bar-foo-"
+"icons-ae7368cab1ca7ca754b38d49da064df87968ffe4_GL0.tar.gz#, and "
+"[.filename]#bar-foo-"
+"contrib-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a_GL0.tar.gz#."
+msgstr ""
+"Это загрузит два файла дистрибутива с gitlab.com и один с "
+"`gitlab.example.com`, где размещается GitLab. По умолчанию файл берется из "
+"[.filename]#https://gitlab.com/foo/foo#, а коммит — "
+"`c189207a55da45305c884fe2b50e086fcad4724b`. Второй файл, из группы `icons`, "
+"берется из [.filename]#https://gitlab.example.com:9434/gitlab/bar/foo-"
+"icons#, а коммит — `ae7368cab1ca7ca754b38d49da064df87968ffe4`. Третий файл "
+"берется из [.filename]#https://gitlab.com/bar/foo-contrib#, а коммит — "
+"`9e4dd76ad9b38f33fdb417a4c01935958d5acd2a`. Файлы дистрибутива называются "
+"[.filename]#foo-foo-c189207a55da45305c884fe2b50e086fcad4724b_GL0.tar.gz#, "
+"[.filename]#bar-foo-icons-"
+"ae7368cab1ca7ca754b38d49da064df87968ffe4_GL0.tar.gz# и [.filename]#bar-foo-"
+"contrib-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a_GL0.tar.gz#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2048
+msgid ""
+"All the distribution files are extracted in `${WRKDIR}` in their respective "
+"subdirectories. The default file is still extracted in `${WRKSRC}`, in this "
+"case, [.filename]#${WRKDIR}/foo-c189207a55da45305c884fe2b50e086fcad4724b-"
+"c189207a55da45305c884fe2b50e086fcad4724b#. Each additional distribution "
+"file is extracted in `${WRKSRC_group}`. Here, for the `icons` group, it is "
+"called `${WRKSRC_icons}` and it contains [.filename]#${WRKDIR}/foo-icons-"
+"ae7368cab1ca7ca754b38d49da064df87968ffe4-"
+"ae7368cab1ca7ca754b38d49da064df87968ffe4#. The file with the `contrib` "
+"group is called `${WRKSRC_contrib}` and contains `${WRKDIR}/foo-"
+"contrib-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a`."
+msgstr ""
+"Все файлы дистрибутива извлекаются в `${WRKDIR}` в соответствующих "
+"подкаталогах. Основной файл по-прежнему извлекается в `${WRKSRC}`, в данном "
+"случае это [.filename]#${WRKDIR}/foo-"
+"c189207a55da45305c884fe2b50e086fcad4724b-"
+"c189207a55da45305c884fe2b50e086fcad4724b#. Каждый дополнительный файл "
+"дистрибутива извлекается в `${WRKSRC_group}`. Здесь для группы `icons` он "
+"называется `${WRKSRC_icons}` и содержит [.filename]#${WRKDIR}/foo-icons-"
+"ae7368cab1ca7ca754b38d49da064df87968ffe4-"
+"ae7368cab1ca7ca754b38d49da064df87968ffe4#. Файл группы `contrib` называется "
+"`${WRKSRC_contrib}` и содержит `${WRKDIR}/foo-"
+"contrib-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2052
+msgid ""
+"The software's build system expects to find the icons in a [.filename]#ext/"
+"icons# subdirectory in its sources, so `GL_SUBDIR` is used. `GL_SUBDIR` "
+"makes sure that [.filename]#ext# exists, but that [.filename]#ext/icons# "
+"does not already exist. Then it does this:"
+msgstr ""
+"Система сборки программного обеспечения ожидает найти иконки в подкаталоге "
+"[.filename]#ext/icons# в своих исходниках, поэтому используется `GL_SUBDIR`. "
+"`GL_SUBDIR` гарантирует, что [.filename]#ext# существует, но [.filename]#ext/"
+"icons# ещё не существует. Затем она выполняет следующее:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2057
+#, no-wrap
+msgid ""
+"post-extract:\n"
+" @${MV} ${WRKSRC_icons} ${WRKSRC}/ext/icons\n"
+msgstr ""
+"post-extract:\n"
+" @${MV} ${WRKSRC_icons} ${WRKSRC}/ext/icons\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2062
+#, no-wrap
+msgid "Use of `USE_GITLAB` with Multiple Distribution Files Using `GL_TUPLE`"
+msgstr "Использование `USE_GITLAB` с несколькими файлами дистрибуции с помощью `GL_TUPLE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2067
+msgid ""
+"This is functionally equivalent to crossref:makefiles[makefile-master_sites-"
+"gitlab-multi,Use of `USE_GITLAB` with Multiple Distribution Files], but "
+"using `GL_TUPLE`:"
+msgstr ""
+"Это функционально эквивалентно crossref:makefiles[makefile-master_sites-"
+"gitlab-multi,Использование `USE_GITLAB` с несколькими файлами дистрибуции], "
+"но с использованием `GL_TUPLE`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2077
+#, no-wrap
+msgid ""
+"USE_GITLAB=\tyes\n"
+"GL_COMMIT=\tc189207a55da45305c884fe2b50e086fcad4724b\n"
+"GL_TUPLE=\thttps://gitlab.example.com:9434/gitlab:bar:foo-icons:ae7368cab1ca7ca754b38d49da064df87968ffe4:icons/ext/icons \\\n"
+"\t\tbar:foo-contrib:9e4dd76ad9b38f33fdb417a4c01935958d5acd2a:contrib\n"
+msgstr ""
+"USE_GITLAB=\tyes\n"
+"GL_COMMIT=\tc189207a55da45305c884fe2b50e086fcad4724b\n"
+"GL_TUPLE=\thttps://gitlab.example.com:9434/gitlab:bar:foo-icons:ae7368cab1ca7ca754b38d49da064df87968ffe4:icons/ext/icons \\\n"
+"\t\tbar:foo-contrib:9e4dd76ad9b38f33fdb417a4c01935958d5acd2a:contrib\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2083
+msgid ""
+"Grouping was used in the previous example with `bar:icons,contrib`. Some "
+"redundant information is present with `GL_TUPLE` because grouping is not "
+"possible."
+msgstr ""
+"В предыдущем примере использовалась группировка с `bar:icons,contrib`. "
+"Некоторую избыточную информацию приходится указывать с `GL_TUPLE`, так как "
+"группировка невозможна."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2086
+#, no-wrap
+msgid "`EXTRACT_SUFX`"
+msgstr "`EXTRACT_SUFX`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2089
+msgid ""
+"If there is one distribution file, and it uses an odd suffix to indicate the "
+"compression mechanism, set `EXTRACT_SUFX`."
+msgstr ""
+"Если имеется один файл дистрибутива, и он использует нестандартное суффикс "
+"для указания механизма сжатия, установите `EXTRACT_SUFX`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2091
+msgid ""
+"For example, if the distribution file was named [.filename]#foo.tar.gzip# "
+"instead of the more normal [.filename]#foo.tar.gz#, write:"
+msgstr ""
+"Например, если файл дистрибутива был назван [.filename]#foo.tar.gzip# вместо "
+"более привычного [.filename]#foo.tar.gz#, напишите:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2096
+#, no-wrap
+msgid ""
+"DISTNAME=\tfoo\n"
+"EXTRACT_SUFX=\t.tar.gzip\n"
+msgstr ""
+"DISTNAME=\tfoo\n"
+"EXTRACT_SUFX=\t.tar.gzip\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2100
+msgid ""
+"The `USES=tar[:__xxx__]`, `USES=lha` or `USES=zip` automatically set "
+"`EXTRACT_SUFX` to the most common archives extensions as necessary, see "
+"crossref:uses[uses,Using `USES` Macros] for more details. If neither of "
+"these are set then `EXTRACT_SUFX` defaults to `.tar.gz`."
+msgstr ""
+"`USES=tar[:__xxx__]`, `USES=lha` или `USES=zip` автоматически устанавливают "
+"`EXTRACT_SUFX` в наиболее распространённые расширения архивов при "
+"необходимости, подробнее см. crossref:uses[uses,Использование макросов "
+"`USES`]. Если ни один из них не задан, `EXTRACT_SUFX` по умолчанию принимает "
+"значение `.tar.gz`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2104
+msgid "As `EXTRACT_SUFX` is only used in `DISTFILES`, only set one of them.."
+msgstr ""
+"Как `EXTRACT_SUFX` используется только в `DISTFILES`, следует задавать "
+"только один из них."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2107
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4876
+#, no-wrap
+msgid "`DISTFILES`"
+msgstr "`DISTFILES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2112
+msgid ""
+"Sometimes the names of the files to be downloaded have no resemblance to the "
+"name of the port. For example, it might be called "
+"[.filename]#source.tar.gz# or similar. In other cases the application's "
+"source code might be in several different archives, all of which must be "
+"downloaded."
+msgstr ""
+"Иногда названия файлов для загрузки не имеют ничего общего с именем порта. "
+"Например, файл может называться [.filename]#source.tar.gz# или подобным "
+"образом. В других случаях исходный код приложения может быть разбит на "
+"несколько различных архивов, все из которых необходимо загрузить."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2114
+msgid ""
+"If this is the case, set `DISTFILES` to be a space separated list of all the "
+"files that must be downloaded."
+msgstr ""
+"Если это так, установите `DISTFILES` как список разделённых пробелами "
+"файлов, которые необходимо загрузить."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2118
+#, no-wrap
+msgid "DISTFILES=\tsource1.tar.gz source2.tar.gz\n"
+msgstr "DISTFILES=\tsource1.tar.gz source2.tar.gz\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2121
+msgid ""
+"If not explicitly set, `DISTFILES` defaults to `${DISTNAME}${EXTRACT_SUFX}`."
+msgstr ""
+"Если явно не задано, `DISTFILES` по умолчанию равно `${DISTNAME}$"
+"{EXTRACT_SUFX}`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2123
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4877
+#, no-wrap
+msgid "`EXTRACT_ONLY`"
+msgstr "`EXTRACT_ONLY`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2126
+msgid ""
+"If only some of the `DISTFILES` must be extracted-for example, one of them "
+"is the source code, while another is an uncompressed document-list the "
+"filenames that must be extracted in `EXTRACT_ONLY`."
+msgstr ""
+"Если необходимо извлечь только некоторые из `DISTFILES` — например, один из "
+"них является исходным кодом, а другой — несжатым документом — укажите имена "
+"файлов, которые нужно извлечь, в `EXTRACT_ONLY`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2131
+#, no-wrap
+msgid ""
+"DISTFILES=\tsource.tar.gz manual.html\n"
+"EXTRACT_ONLY=\tsource.tar.gz\n"
+msgstr ""
+"DISTFILES=\tsource.tar.gz manual.html\n"
+"EXTRACT_ONLY=\tsource.tar.gz\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2134
+msgid ""
+"When none of the `DISTFILES` need to be uncompressed, set `EXTRACT_ONLY` to "
+"the empty string."
+msgstr ""
+"Если ни один из `DISTFILES` не требует распаковки, установите `EXTRACT_ONLY` "
+"в пустую строку."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2138
+#, no-wrap
+msgid "EXTRACT_ONLY=\n"
+msgstr "EXTRACT_ONLY=\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2141
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4898
+#, no-wrap
+msgid "`PATCHFILES`"
+msgstr "`PATCHFILES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2144
+msgid ""
+"If the port requires some additional patches that are available by FTP or "
+"HTTP, set `PATCHFILES` to the names of the files and `PATCH_SITES` to the "
+"URL of the directory that contains them (the format is the same as "
+"`MASTER_SITES`)."
+msgstr ""
+"Если порт требует дополнительных исправлений, доступных через FTP или HTTP, "
+"установите `PATCHFILES` в имена файлов, а `PATCH_SITES` — в URL каталога, "
+"содержащего их (формат такой же, как у `MASTER_SITES`)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2147
+msgid ""
+"If the patch is not relative to the top of the source tree (that is, "
+"`WRKSRC`) because it contains some extra pathnames, set `PATCH_DIST_STRIP` "
+"accordingly. For instance, if all the pathnames in the patch have an extra "
+"`foozolix-1.0/` in front of the filenames, then set `PATCH_DIST_STRIP=-p1`."
+msgstr ""
+"Если патч не относится к корню исходного дерева (то есть к `WRKSRC`), потому "
+"что содержит дополнительные пути, установите `PATCH_DIST_STRIP` "
+"соответствующим образом. Например, если все пути в патче имеют "
+"дополнительный префикс `foozolix-1.0/` перед именами файлов, задайте "
+"`PATCH_DIST_STRIP=-p1`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2149
+msgid ""
+"Do not worry if the patches are compressed; they will be decompressed "
+"automatically if the filenames end with [.filename]#.Z#, [.filename]#.gz#, "
+"[.filename]#.bz2# or [.filename]#.xz#."
+msgstr ""
+"Не беспокойтесь, если патчи сжаты; они будут автоматически распакованы, если "
+"их имена заканчиваются на [.filename]#.Z#, [.filename]#.gz#, "
+"[.filename]#.bz2# или [.filename]#.xz#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2155
+msgid ""
+"If the patch is distributed with some other files, such as documentation, in "
+"a compressed tarball, using `PATCHFILES` is not possible. If that is the "
+"case, add the name and the location of the patch tarball to `DISTFILES` and "
+"`MASTER_SITES`. Then, use `EXTRA_PATCHES` to point to those files and "
+"[.filename]#bsd.port.mk# will automatically apply them. In particular, do "
+"_not_ copy patch files into [.filename]#${PATCHDIR}#. That directory may "
+"not be writable."
+msgstr ""
+"Если патч распространяется вместе с другими файлами, такими как "
+"документация, в сжатом tarball, использование `PATCHFILES` невозможно. В "
+"таком случае добавьте имя и расположение tarball с патчами в `DISTFILES` и "
+"`MASTER_SITES`. Затем используйте `EXTRA_PATCHES`, чтобы указать на эти "
+"файлы, и [.filename]#bsd.port.mk# автоматически применит их. В частности, "
+"_не_ копируйте файлы патчей в [.filename]#${PATCHDIR}#. Этот каталог может "
+"быть недоступен для записи."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2159
+msgid ""
+"If there are multiple patches and they need mixed values for the strip "
+"parameter, it can be added alongside the patch name in `PATCHFILES`, e.g:"
+msgstr ""
+"Если есть несколько патчей и для них требуются разные значения параметра "
+"strip, его можно добавить рядом с именем патча в `PATCHFILES`, например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2163
+#, no-wrap
+msgid "PATCHFILES=\tpatch1 patch2:-p1\n"
+msgstr "PATCHFILES=\tpatch1 patch2:-p1\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2166
+msgid ""
+"This does not conflict with crossref:makefiles[porting-master-sites-n,the "
+"master site grouping feature], adding a group also works:"
+msgstr ""
+"Это не конфликтует с crossref:makefiles[porting-master-sites-n,функцией "
+"группировки мастер-сайтов], добавление группы также работает:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2170
+#, no-wrap
+msgid "PATCHFILES=\tpatch2:-p1:source2\n"
+msgstr "PATCHFILES=\tpatch2:-p1:source2\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2178
+msgid ""
+"The tarball will have been extracted alongside the regular source by then, "
+"so there is no need to explicitly extract it if it is a regular compressed "
+"tarball. Take extra care not to overwrite something that already exists in "
+"that directory if extracting it manually. Also, do not forget to add a "
+"command to remove the copied patch in the `pre-clean` target."
+msgstr ""
+"Tarball уже будет распакован вместе с обычными исходными кодами, поэтому нет "
+"необходимости явно его распаковывать, если это обычный сжатый tarball. "
+"Будьте особенно осторожны, чтобы не перезаписать существующие файлы в этом "
+"каталоге при ручной распаковке. Также не забудьте добавить команду для "
+"удаления скопированного патча в цель `pre-clean`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2181
+#, no-wrap
+msgid "Multiple Distribution or Patches Files from Multiple Locations"
+msgstr "Несколько файлов дистрибутивов или исправлений из нескольких местоположений"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2184
+msgid ""
+"(Consider this to be a somewhat \"advanced topic\"; those new to this "
+"document may wish to skip this section at first)."
+msgstr ""
+"(Считайте, что это несколько «продвинутая тема»; тем, кто впервые читает "
+"этот документ, возможно, стоит сначала пропустить этот раздел)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2187
+msgid ""
+"This section has information on the fetching mechanism known as both "
+"`MASTER_SITES:n` and `MASTER_SITES_NN`. We will refer to this mechanism as "
+"`MASTER_SITES:n`."
+msgstr ""
+"Этот раздел содержит информацию о механизме загрузки, известном как "
+"`MASTER_SITES:n` и `MASTER_SITES_NN`. Мы будем называть этот механизм "
+"`MASTER_SITES:n`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2192
+msgid ""
+"A little background first. OpenBSD has a neat feature inside `DISTFILES` "
+"and `PATCHFILES` which allows files and patches to be postfixed with `:n` "
+"identifiers. Here, `n` can be any word containing `[0-9a-zA-Z_]` and denote "
+"a group designation. For example:"
+msgstr ""
+"Небольшая предыстория. В OpenBSD есть удобная функция внутри `DISTFILES` и "
+"`PATCHFILES`, которая позволяет добавлять постфикс `:n` к файлам и патчам. "
+"Здесь `n` может быть любым словом, содержащим `[0-9a-zA-Z_]`, и обозначать "
+"группу. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2196
+#, no-wrap
+msgid "DISTFILES=\talpha:0 beta:1\n"
+msgstr "DISTFILES=\talpha:0 beta:1\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2199
+msgid ""
+"In OpenBSD, distribution file [.filename]#alpha# will be associated with "
+"variable `MASTER_SITES0` instead of our common `MASTER_SITES` and "
+"[.filename]#beta# with `MASTER_SITES1`."
+msgstr ""
+"В OpenBSD файл дистрибутива [.filename]#alpha# будет связан с переменной "
+"`MASTER_SITES0`, а не с нашей общей `MASTER_SITES`, а [.filename]#beta# — с "
+"`MASTER_SITES1`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2201
+msgid ""
+"This is a very interesting feature which can decrease that endless search "
+"for the correct download site."
+msgstr ""
+"Это очень интересная функция, которая может сократить бесконечные поиски "
+"нужного сайта для загрузки."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2204
+msgid ""
+"Just picture 2 files in `DISTFILES` and 20 sites in `MASTER_SITES`, the "
+"sites slow as hell where [.filename]#beta# is carried by all sites in "
+"`MASTER_SITES`, and [.filename]#alpha# can only be found in the 20th site. "
+"It would be such a waste to check all of them if the maintainer knew this "
+"beforehand, would it not? Not a good start for that lovely weekend!"
+msgstr ""
+"Представьте 2 файла в `DISTFILES` и 20 сайтов в `MASTER_SITES`, причём сайты "
+"медленные как черепаха, где [.filename]#beta# есть на всех сайтах из "
+"`MASTER_SITES`, а [.filename]#alpha# можно найти только на 20-м сайте. Было "
+"бы так обидно проверять их все, если бы сопровождающий знал это заранее, не "
+"так ли? Не самое лучшее начало для чудесных выходных!"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2207
+msgid ""
+"Now that you have the idea, just imagine more `DISTFILES` and more "
+"`MASTER_SITES`. Surely our \"distfiles survey meister\" would appreciate "
+"the relief to network strain that this would bring."
+msgstr ""
+"Теперь, когда вы поняли идею, представьте больше `DISTFILES` и больше "
+"`MASTER_SITES`. Безусловно, наш \"мастер по исследованию distfiles\" оценил "
+"бы снижение нагрузки на сеть, которое это принесло бы."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2210
+msgid ""
+"In the next sections, information will follow on the FreeBSD implementation "
+"of this idea. We improved a bit on OpenBSD's concept."
+msgstr ""
+"В следующих разделах будет приведена информация о реализации этой идеи в "
+"FreeBSD. Мы немного улучшили концепцию OpenBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2215
+msgid ""
+"The group names cannot have dashes in them (`-`), in fact, they cannot have "
+"any characters out of the `[a-zA-Z0-9_]` range. This is because, while "
+"man:make[1] is ok with variable names containing dashes, man:sh[1] is not."
+msgstr ""
+"Имена групп не могут содержать дефисы (`-`), более того, они не могут "
+"содержать любые символы вне диапазона `[a-zA-Z0-9_]`. Это связано с тем, "
+"что, хотя man:make[1] допускает использование имён переменных с дефисами, "
+"man:sh[1] — нет."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2218
+#, no-wrap
+msgid "Simplified Information"
+msgstr "Упрощенная информация"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2225
+msgid ""
+"This section explains how to quickly prepare fine grained fetching of "
+"multiple distribution files and patches from different sites and "
+"subdirectories. We describe here a case of simplified `MASTER_SITES:n` "
+"usage. This will be sufficient for most scenarios. More detailed "
+"information are available in crossref:makefiles[ports-master-sites-n-"
+"detailed, Detailed Information]."
+msgstr ""
+"В этом разделе объясняется, как быстро настроить детализированное получение "
+"нескольких файлов дистрибутивов и патчей с разных сайтов и подкаталогов. "
+"Здесь описывается случай упрощённого использования `MASTER_SITES:n`. Этого "
+"будет достаточно для большинства сценариев. Более подробная информация "
+"доступна в crossref:makefiles[ports-master-sites-n-detailed, Подробная "
+"Информация]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2229
+msgid ""
+"Some applications consist of multiple distribution files that must be "
+"downloaded from a number of different sites. For example, Ghostscript "
+"consists of the core of the program, and then a large number of driver files "
+"that are used depending on the user's printer. Some of these driver files "
+"are supplied with the core, but many others must be downloaded from a "
+"variety of different sites."
+msgstr ""
+"Некоторые приложения состоят из нескольких распространяемых файлов, которые "
+"необходимо загрузить с различных сайтов. Например, Ghostscript включает "
+"основную часть программы и множество драйверов, используемых в зависимости "
+"от принтера пользователя. Некоторые из этих драйверов поставляются вместе с "
+"основной частью, но многие другие необходимо загружать с различных сайтов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2232
+msgid ""
+"To support this, each entry in `DISTFILES` may be followed by a colon and a "
+"\"group name\". Each site listed in `MASTER_SITES` is then followed by a "
+"colon, and the group that indicates which distribution files are downloaded "
+"from this site."
+msgstr ""
+"Для поддержки этого, каждая запись в `DISTFILES` может сопровождаться "
+"двоеточием и \"именем группы\". Затем каждый сайт, указанный в "
+"`MASTER_SITES`, сопровождается двоеточием и группой, которая указывает, "
+"какие файлы дистрибутива загружаются с данного сайта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2236
+msgid ""
+"For example, consider an application with the source split in two parts, "
+"[.filename]#source1.tar.gz# and [.filename]#source2.tar.gz#, which must be "
+"downloaded from two different sites. The port's [.filename]#Makefile# would "
+"include lines like crossref:makefiles[ports-master-sites-n-example-simple-"
+"use-one-file-per-site,Simplified Use of `MASTER_SITES:n` with One File Per "
+"Site]."
+msgstr ""
+"Например, рассмотрим приложение, исходный код которого разделён на две "
+"части: [.filename]#source1.tar.gz# и [.filename]#source2.tar.gz#, которые "
+"необходимо загрузить с двух разных сайтов. В [.filename]#Makefile# порта "
+"будут присутствовать строки, подобные crossref:makefiles[ports-master-sites-"
+"n-example-simple-use-one-file-per-site,Упрощённое использование "
+"`MASTER_SITES:n` с одним файлом на сайт]."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2238
+#, no-wrap
+msgid "Simplified Use of `MASTER_SITES:n` with One File Per Site"
+msgstr "Упрощённое использование `MASTER_SITES:n` с одним файлом на сайт"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2248
+#, no-wrap
+msgid ""
+"MASTER_SITES=\tftp://ftp1.example.com/:source1 \\\n"
+"\t\thttp://www.example.com/:source2\n"
+"DISTFILES=\tsource1.tar.gz:source1 \\\n"
+"\t\tsource2.tar.gz:source2\n"
+msgstr ""
+"MASTER_SITES=\tftp://ftp1.example.com/:source1 \\\n"
+"\t\thttp://www.example.com/:source2\n"
+"DISTFILES=\tsource1.tar.gz:source1 \\\n"
+"\t\tsource2.tar.gz:source2\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2256
+msgid ""
+"Multiple distribution files can have the same group. Continuing the "
+"previous example, suppose that there was a third distfile, "
+"[.filename]#source3.tar.gz#, that is downloaded from `ftp.example2.com`. "
+"The [.filename]#Makefile# would then be written like "
+"crossref:makefiles[ports-master-sites-n-example-simple-use-more-than-one-"
+"file-per-site,Simplified Use of `MASTER_SITES:n` with More Than One File Per "
+"Site]."
+msgstr ""
+"Несколько файлов дистрибутивов могут принадлежать одной группе. Продолжая "
+"предыдущий пример, предположим, что существует третий файл дистрибутива "
+"[.filename]#source3.tar.gz#, который загружается с `ftp.example2.com`. Тогда "
+"[.filename]#Makefile# будет записан, как показано в crossref:makefiles[ports-"
+"master-sites-n-example-simple-use-more-than-one-file-per-site,Упрощённое "
+"использование `MASTER_SITES:n` с несколькими файлами на один сайт]."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2258
+#, no-wrap
+msgid "Simplified Use of `MASTER_SITES:n` with More Than One File Per Site"
+msgstr "Упрощённое использование `MASTER_SITES:n` с несколькими файлами на одном сайте"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2269
+#, no-wrap
+msgid ""
+"MASTER_SITES=\tftp://ftp.example.com/:source1 \\\n"
+"\t\thttp://www.example.com/:source2\n"
+"DISTFILES=\tsource1.tar.gz:source1 \\\n"
+"\t\tsource2.tar.gz:source2 \\\n"
+"\t\tsource3.tar.gz:source2\n"
+msgstr ""
+"MASTER_SITES=\tftp://ftp.example.com/:source1 \\\n"
+"\t\thttp://www.example.com/:source2\n"
+"DISTFILES=\tsource1.tar.gz:source1 \\\n"
+"\t\tsource2.tar.gz:source2 \\\n"
+"\t\tsource3.tar.gz:source2\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2274
+#, no-wrap
+msgid "Detailed Information"
+msgstr "Подробная информация"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2277
+msgid ""
+"Okay, so the previous example did not reflect the new port's needs? In this "
+"section we will explain in detail how the fine grained fetching mechanism "
+"`MASTER_SITES:n` works and how it can be used."
+msgstr ""
+"Хорошо, значит, предыдущий пример не отражал потребности нового порта? В "
+"этом разделе мы подробно объясним, как работает механизм детализированного "
+"получения `MASTER_SITES:n` и как его можно использовать."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2279
+msgid ""
+"Elements can be postfixed with `:__n__` where _n_ is `[^:,]\\+`, that is, "
+"_n_ could conceptually be any alphanumeric string but we will limit it to "
+"`[a-zA-Z_][0-9a-zA-Z_]+` for now."
+msgstr ""
+"Элементы могут иметь постфикс `:__n__`, где _n_ — это `[^:,]+`, то есть _n_ "
+"концептуально может быть любой буквенно-цифровой строкой, но пока мы "
+"ограничим её `[a-zA-Z_][0-9a-zA-Z_]+`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2281
+msgid ""
+"Moreover, string matching is case sensitive; that is, `n` is different from "
+"`N`."
+msgstr ""
+"Более того, сравнение строк чувствительно к регистру; то есть, `n` "
+"отличается от `N`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2287
+msgid ""
+"However, these words cannot be used for postfixing purposes since they yield "
+"special meaning: `default`, `all` and `ALL` (they are used internally in "
+"item crossref:makefiles[porting-master-sites-n-what-changes-in-port-targets, "
+"ii]). Furthermore, `DEFAULT` is a special purpose word (check item "
+"crossref:makefiles[porting-master-sites-n-DEFAULT-group,3])."
+msgstr ""
+"Однако эти слова не могут использоваться для постфиксных целей, так как "
+"имеют специальное значение: `default`, `all` и `ALL` (они используются "
+"внутри системы, см. crossref:makefiles[porting-master-sites-n-what-changes-"
+"in-port-targets, ii]). Кроме того, `DEFAULT` является словом специального "
+"назначения (проверьте пункт crossref:makefiles[porting-master-sites-n-"
+"DEFAULT-group,3])."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2288
+msgid ""
+"Elements postfixed with `:n` belong to the group `n`, `:m` belong to group "
+"`m` and so forth."
+msgstr ""
+"Элементы с постфиксом `:n` принадлежат группе `n`, `:m` — группе `m` и так "
+"далее."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2294
+msgid ""
+"Elements without a postfix are groupless, they all belong to the special "
+"group `DEFAULT`. Any elements postfixed with `DEFAULT`, is just being "
+"redundant unless an element belongs to both `DEFAULT` and other groups at "
+"the same time (check item crossref:makefiles[porting-master-sites-n-comma-"
+"operator,5])."
+msgstr ""
+"Элементы без постфикса не принадлежат к группам, все они относятся к "
+"специальной группе `DEFAULT`. Элементы с постфиксом `DEFAULT` избыточны, за "
+"исключением случаев, когда элемент одновременно принадлежит и к `DEFAULT`, и "
+"к другим группам (см. пункт crossref:makefiles[porting-master-sites-n-comma-"
+"operator,5])."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2296
+msgid "These examples are equivalent but the first one is preferred:"
+msgstr "Эти примеры эквивалентны, но первый предпочтительнее:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2300
+#, no-wrap
+msgid "MASTER_SITES=\talpha\n"
+msgstr "MASTER_SITES=\talpha\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2305
+#, no-wrap
+msgid "MASTER_SITES=\talpha:DEFAULT\n"
+msgstr "MASTER_SITES=\talpha:DEFAULT\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2308
+msgid ""
+"Groups are not exclusive, an element may belong to several different groups "
+"at the same time and a group can either have either several different "
+"elements or none at all."
+msgstr ""
+"Группы не являются исключительными, элемент может принадлежать нескольким "
+"разным группам одновременно, а группа может содержать несколько разных "
+"элементов или не содержать их вовсе."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2311
+msgid ""
+"When an element belongs to several groups at the same time, use the comma "
+"operator (`,`)."
+msgstr ""
+"Когда элемент принадлежит нескольким группам одновременно, используйте "
+"оператор запятую (`,`)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2314
+msgid ""
+"Instead of repeating it several times, each time with a different postfix, "
+"we can list several groups at once in a single postfix. For instance, "
+"`:m,n,o` marks an element that belongs to group `m`, `n` and `o`."
+msgstr ""
+"Вместо повторения несколько раз, каждый раз с разным постфиксом, мы можем "
+"перечислить несколько групп сразу в одном постфиксе. Например, `:m,n,o` "
+"обозначает элемент, принадлежащий группам `m`, `n` и `o`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2316
+msgid "All these examples are equivalent but the last one is preferred:"
+msgstr "Все эти примеры эквивалентны, но последний является предпочтительным:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2320
+#, no-wrap
+msgid "MASTER_SITES=\talpha alpha:SOME_SITE\n"
+msgstr "MASTER_SITES=\talpha alpha:SOME_SITE\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2325
+#, no-wrap
+msgid "MASTER_SITES=\talpha:DEFAULT alpha:SOME_SITE\n"
+msgstr "MASTER_SITES=\talpha:DEFAULT alpha:SOME_SITE\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2330
+#, no-wrap
+msgid "MASTER_SITES=\talpha:SOME_SITE,DEFAULT\n"
+msgstr "MASTER_SITES=\talpha:SOME_SITE,DEFAULT\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2335
+#, no-wrap
+msgid "MASTER_SITES=\talpha:DEFAULT,SOME_SITE\n"
+msgstr "MASTER_SITES=\talpha:DEFAULT,SOME_SITE\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2338
+msgid ""
+"All sites within a given group are sorted according to `MASTER_SORT_AWK`. "
+"All groups within `MASTER_SITES` and `PATCH_SITES` are sorted as well."
+msgstr ""
+"Все сайты в заданной группе сортируются согласно `MASTER_SORT_AWK`. Все "
+"группы в `MASTER_SITES` и `PATCH_SITES` также сортируются."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2341
+msgid ""
+"Group semantics can be used in any of the variables `MASTER_SITES`, "
+"`PATCH_SITES`, `MASTER_SITE_SUBDIR`, `PATCH_SITE_SUBDIR`, `DISTFILES`, and "
+"`PATCHFILES` according to this syntax:"
+msgstr ""
+"Семантика групп может использоваться в любых переменных `MASTER_SITES`, "
+"`PATCH_SITES`, `MASTER_SITE_SUBDIR`, `PATCH_SITE_SUBDIR`, `DISTFILES` и "
+"`PATCHFILES` согласно следующему синтаксису:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2355
+msgid ""
+"All `MASTER_SITES`, `PATCH_SITES`, `MASTER_SITE_SUBDIR` and "
+"`PATCH_SITE_SUBDIR` elements must be terminated with the forward slash `/` "
+"character. If any elements belong to any groups, the group postfix `:__n__` "
+"must come right after the terminator `/`. The `MASTER_SITES:n` mechanism "
+"relies on the existence of the terminator `/` to avoid confusing elements "
+"where a `:n` is a valid part of the element with occurrences where `:n` "
+"denotes group `n`. For compatibility purposes, since the `/` terminator was "
+"not required before in both `MASTER_SITE_SUBDIR` and `PATCH_SITE_SUBDIR` "
+"elements, if the postfix immediate preceding character is not a `/` then "
+"`:n` will be considered a valid part of the element instead of a group "
+"postfix even if an element is postfixed with `:n`. See both "
+"crossref:makefiles[ports-master-sites-n-example-detailed-use-master-site-"
+"subdir,Detailed Use of `MASTER_SITES:n` in `MASTER_SITE_SUBDIR`] and "
+"crossref:makefiles[ports-master-sites-n-example-detailed-use-complete-"
+"example-master-sites,Detailed Use of `MASTER_SITES:n` with Comma Operator, "
+"Multiple Files, Multiple Sites and Multiple Subdirectories]."
+msgstr ""
+"Все элементы `MASTER_SITES`, `PATCH_SITES`, `MASTER_SITE_SUBDIR` и "
+"`PATCH_SITE_SUBDIR` должны заканчиваться символом дробной черты `/`. Если "
+"элементы принадлежат к какой-либо группе, постфикс группы `:__n__` должен "
+"следовать сразу после завершающего символа `/`. Механизм `MASTER_SITES:n` "
+"полагается на наличие завершающего символа `/`, чтобы избежать путаницы "
+"между элементами, где `:n` является допустимой частью элемента, и случаями, "
+"где `:n` обозначает группу `n`. В целях совместимости, поскольку ранее "
+"завершающий символ `/` не требовался в элементах `MASTER_SITE_SUBDIR` и "
+"`PATCH_SITE_SUBDIR`, если символ, непосредственно предшествующий постфиксу, "
+"не является `/`, то `:n` будет считаться допустимой частью элемента, а не "
+"постфиксом группы, даже если элемент оканчивается на `:n`. См. оба раздела "
+"crossref:makefiles[ports-master-sites-n-example-detailed-use-master-site-"
+"subdir,Подробное использование `MASTER_SITES:n` в `MASTER_SITE_SUBDIR`] и "
+"crossref:makefiles[ports-master-sites-n-example-detailed-use-complete-"
+"example-master-sites,Подробное использование `MASTER_SITES:n` с оператором "
+"запятая, несколькими файлами, несколькими сайтами и несколькими "
+"подкаталогами]."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2357
+#, no-wrap
+msgid "Detailed Use of `MASTER_SITES:n` in `MASTER_SITE_SUBDIR`"
+msgstr "Подробное использование `MASTER_SITES:n` в `MASTER_SITE_SUBDIR`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2364
+#, no-wrap
+msgid "MASTER_SITE_SUBDIR=\told:n new/:NEW\n"
+msgstr "MASTER_SITE_SUBDIR=\told:n new/:NEW\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2367
+msgid "Directories within group `DEFAULT` -> old:n"
+msgstr "Каталоги в группе `DEFAULT` -> old:n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2368
+msgid "Directories within group `NEW` -> new"
+msgstr "Каталоги в группе `NEW` -> new"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2372
+#, no-wrap
+msgid "Detailed Use of `MASTER_SITES:n` with Comma Operator, Multiple Files, Multiple Sites and Multiple Subdirectories"
+msgstr "Подробное использование `MASTER_SITES:n` с оператором запятая, несколькими файлами, сайтами и подкаталогами"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2390
+#, no-wrap
+msgid ""
+"MASTER_SITES=\thttp://site1/%SUBDIR%/ http://site2/:DEFAULT \\\n"
+"\t\thttp://site3/:group3 http://site4/:group4 \\\n"
+"\t\thttp://site5/:group5 http://site6/:group6 \\\n"
+"\t\thttp://site7/:DEFAULT,group6 \\\n"
+"\t\thttp://site8/%SUBDIR%/:group6,group7 \\\n"
+"\t\thttp://site9/:group8\n"
+"DISTFILES=\tfile1 file2:DEFAULT file3:group3 \\\n"
+"\t\tfile4:group4,group5,group6 file5:grouping \\\n"
+"\t\tfile6:group7\n"
+"MASTER_SITE_SUBDIR=\tdirectory-trial:1 directory-n/:groupn \\\n"
+"\t\tdirectory-one/:group6,DEFAULT \\\n"
+"\t\tdirectory\n"
+msgstr ""
+"MASTER_SITES=\thttp://site1/%SUBDIR%/ http://site2/:DEFAULT \\\n"
+"\t\thttp://site3/:group3 http://site4/:group4 \\\n"
+"\t\thttp://site5/:group5 http://site6/:group6 \\\n"
+"\t\thttp://site7/:DEFAULT,group6 \\\n"
+"\t\thttp://site8/%SUBDIR%/:group6,group7 \\\n"
+"\t\thttp://site9/:group8\n"
+"DISTFILES=\tfile1 file2:DEFAULT file3:group3 \\\n"
+"\t\tfile4:group4,group5,group6 file5:grouping \\\n"
+"\t\tfile6:group7\n"
+"MASTER_SITE_SUBDIR=\tdirectory-trial:1 directory-n/:groupn \\\n"
+"\t\tdirectory-one/:group6,DEFAULT \\\n"
+"\t\tdirectory\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2394
+msgid ""
+"The previous example results in this fine grained fetching. Sites are "
+"listed in the exact order they will be used."
+msgstr ""
+"Предыдущий пример приводит к такой детализированной загрузке файлов. Сайты "
+"перечислены в точном порядке их использования."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2396
+msgid "[.filename]#file1# will be fetched from"
+msgstr "[.filename]#file1# будет загружен из"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2398
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2408
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2418
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2424
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2434
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2439
+msgid "`MASTER_SITE_OVERRIDE`"
+msgstr "`MASTER_SITE_OVERRIDE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2399
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2409
+msgid "http://site1/directory-trial:1/"
+msgstr "http://site1/directory-trial:1/"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2400
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2410
+msgid "http://site1/directory-one/"
+msgstr "http://site1/directory-one/"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2401
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2411
+msgid "http://site1/directory/"
+msgstr "http://site1/directory/"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2402
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2412
+msgid "http://site2/"
+msgstr "http://site2/"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2403
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2413
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2428
+msgid "http://site7/"
+msgstr "http://site7/"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2404
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2414
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2420
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2430
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2435
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2441
+msgid "`MASTER_SITE_BACKUP`"
+msgstr "`MASTER_SITE_BACKUP`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2406
+msgid ""
+"[.filename]#file2# will be fetched exactly as [.filename]#file1# since they "
+"both belong to the same group"
+msgstr ""
+"[.filename]#file2# будет загружен точно так же, как [.filename]#file1#, "
+"поскольку они оба принадлежат к одной и той же группе"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2416
+msgid "[.filename]#file3# will be fetched from"
+msgstr "[.filename]#file3# будет загружен из"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2419
+msgid "http://site3/"
+msgstr "http://site3/"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2422
+msgid "[.filename]#file4# will be fetched from"
+msgstr "[.filename]#file4# будет загружен из"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2425
+msgid "http://site4/"
+msgstr "http://site4/"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2426
+msgid "http://site5/"
+msgstr "http://site5/"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2427
+msgid "http://site6/"
+msgstr "http://site6/"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2429
+msgid "http://site8/directory-one/"
+msgstr "http://site8/directory-one/"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2432
+msgid "[.filename]#file5# will be fetched from"
+msgstr "[.filename]#file5# будет загружен из"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2437
+msgid "[.filename]#file6# will be fetched from"
+msgstr "[.filename]#file6# будет получен из"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2440
+msgid "http://site8/"
+msgstr "http://site8/"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2445
+msgid ""
+"How do I group one of the special macros from [.filename]#bsd.sites.mk#, for "
+"example, SourceForge (`SF`)?"
+msgstr ""
+"Как сгруппировать один из специальных макросов из [.filename]#bsd.sites.mk#, "
+"например, SourceForge (`SF`)?"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2449
+msgid ""
+"This has been simplified as much as possible. See crossref:makefiles[ports-"
+"master-sites-n-example-detailed-use-master-site-sourceforge,Detailed Use of "
+"`MASTER_SITES:n` with SourceForge (`SF`)]."
+msgstr ""
+"Это максимально упрощено. См. crossref:makefiles[ports-master-sites-n-"
+"example-detailed-use-master-site-sourceforge,Подробное использование "
+"`MASTER_SITES:n` с SourceForge (`SF`)]."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2451
+#, no-wrap
+msgid "Detailed Use of `MASTER_SITES:n` with SourceForge (`SF`)"
+msgstr "Подробное использование `MASTER_SITES:n` с SourceForge (`SF`)"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2459
+#, no-wrap
+msgid ""
+"MASTER_SITES=\thttp://site1/ SF/something/1.0:sourceforge,TEST\n"
+"DISTFILES=\tsomething.tar.gz:sourceforge\n"
+msgstr ""
+"MASTER_SITES=\thttp://site1/ SF/something/1.0:sourceforge,TEST\n"
+"DISTFILES=\tsomething.tar.gz:sourceforge\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2462
+msgid ""
+"[.filename]#something.tar.gz# will be fetched from all sites within "
+"SourceForge."
+msgstr ""
+"[.filename]#something.tar.gz# будет загружен со всех сайтов в пределах "
+"SourceForge."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2464
+msgid "How do I use this with `PATCH*`?"
+msgstr "Как использовать это с `PATCH*`?"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2468
+msgid ""
+"All examples were done with `MASTER*` but they work exactly the same for "
+"`PATCH*` ones as can be seen in crossref:makefiles[ports-master-sites-n-"
+"example-detailed-use-patch-sites,Simplified Use of `MASTER_SITES:n` with "
+"`PATCH_SITES`]."
+msgstr ""
+"Все примеры были выполнены с `MASTER*`, но они работают точно так же для "
+"`PATCH*`, как можно увидеть в crossref:makefiles[ports-master-sites-n-"
+"example-detailed-use-patch-sites,Упрощённое использование `MASTER_SITES:n` с "
+"`PATCH_SITES`]."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2470
+#, no-wrap
+msgid "Simplified Use of `MASTER_SITES:n` with `PATCH_SITES`"
+msgstr "Упрощённое использование `MASTER_SITES:n` с `PATCH_SITES`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2478
+#, no-wrap
+msgid ""
+"PATCH_SITES=\thttp://site1/ http://site2/:test\n"
+"PATCHFILES=\tpatch1:test\n"
+msgstr ""
+"PATCH_SITES=\thttp://site1/ http://site2/:test\n"
+"PATCHFILES=\tpatch1:test\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2483
+#, no-wrap
+msgid "What Does Change for Ports? What Does Not?"
+msgstr "Что меняется для портов? Что остается неизменным?"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2490
+msgid ""
+"All current ports remain the same. The `MASTER_SITES:n` feature code is only "
+"activated if there are elements postfixed with `:__n__` like elements "
+"according to the aforementioned syntax rules, especially as shown in item "
+"crossref:makefiles[porting-master-sites-n-group-semantics, 7]."
+msgstr ""
+"Все текущие порты остаются без изменений. Функция `MASTER_SITES:n` "
+"активируется только при наличии элементов с постфиксом `:__n__`, "
+"соответствующих указанным выше синтаксическим правилам, в частности, как "
+"показано в пункте crossref:makefiles[porting-master-sites-n-group-semantics, "
+"7]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2493
+msgid ""
+"The port targets remain the same: `checksum`, `makesum`, `patch`, "
+"`configure`, `build`, etc. With the obvious exceptions of `do-fetch`, `fetch-"
+"list`, `master-sites` and `patch-sites`."
+msgstr ""
+"Порты сохраняют те же цели: `checksum`, `makesum`, `patch`, `configure`, "
+"`build` и т.д., за исключением очевидных случаев: `do-fetch`, `fetch-list`, "
+"`master-sites` и `patch-sites`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2499
+msgid ""
+"`do-fetch`: deploys the new grouping postfixed `DISTFILES` and `PATCHFILES` "
+"with their matching group elements within both `MASTER_SITES` and "
+"`PATCH_SITES` which use matching group elements within both "
+"`MASTER_SITE_SUBDIR` and `PATCH_SITE_SUBDIR`. Check crossref:makefiles[ports-"
+"master-sites-n-example-detailed-use-complete-example-master-sites,Detailed "
+"Use of `MASTER_SITES:n` with Comma Operator, Multiple Files, Multiple Sites "
+"and Multiple Subdirectories]."
+msgstr ""
+"`do-fetch`: развертывает новую группировку с постфиксом `DISTFILES` и "
+"`PATCHFILES` с соответствующими групповыми элементами в `MASTER_SITES` и "
+"`PATCH_SITES`, которые используют соответствующие групповые элементы в "
+"`MASTER_SITE_SUBDIR` и `PATCH_SITE_SUBDIR`. Проверьте "
+"crossref:makefiles[ports-master-sites-n-example-detailed-use-complete-"
+"example-master-sites,Подробное использование `MASTER_SITES:n` с оператором "
+"запятой, множественными файлами, множественными сайтами и множественными "
+"подкаталогами]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2500
+msgid ""
+"`fetch-list`: works like old `fetch-list` with the exception that it groups "
+"just like `do-fetch`."
+msgstr ""
+"`fetch-list`: работает как старый `fetch-list`, за исключением того, что "
+"группировка происходит так же, как в `do-fetch`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2501
+msgid ""
+"`master-sites` and `patch-sites`: (incompatible with older versions) only "
+"return the elements of group `DEFAULT`; in fact, they execute targets "
+"`master-sites-default` and `patch-sites-default` respectively."
+msgstr ""
+"`master-sites` и `patch-sites`: (несовместимо с более старыми версиями) "
+"возвращают только элементы группы `DEFAULT`; фактически они выполняют цели "
+"`master-sites-default` и `patch-sites-default` соответственно."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2506
+msgid ""
+"Furthermore, using target either `master-sites-all` or `patch-sites-all` is "
+"preferred to directly checking either `MASTER_SITES` or `PATCH_SITES`. "
+"Also, directly checking is not guaranteed to work in any future versions. "
+"Check item crossref:makefiles[porting-master-sites-n-new-port-targets-master-"
+"sites-all, B] for more information on these new port targets."
+msgstr ""
+"Кроме того, предпочтительнее использовать цель `master-sites-all` или `patch-"
+"sites-all`, чем напрямую проверять `MASTER_SITES` или `PATCH_SITES`. Кроме "
+"того, прямая проверка не гарантирует работу в будущих версиях. Для получения "
+"дополнительной информации об этих новых целях портов см. пункт "
+"crossref:makefiles[porting-master-sites-n-new-port-targets-master-sites-all, "
+"B]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2508
+msgid "New port targets"
+msgstr "Новые цели портов"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2509
+msgid ""
+"There are `master-sites-_n_` and `patch-sites-_n_` targets which will list "
+"the elements of the respective group _n_ within `MASTER_SITES` and "
+"`PATCH_SITES` respectively. For instance, both `master-sites-DEFAULT` and "
+"`patch-sites-DEFAULT` will return the elements of group `DEFAULT`, `master-"
+"sites-test` and `patch-sites-test` of group `test`, and thereon."
+msgstr ""
+"Существуют цели `master-sites-_n_` и `patch-sites-_n_`, которые будут "
+"выводить элементы соответствующей группы _n_ в `MASTER_SITES` и "
+"`PATCH_SITES` соответственно. Например, и `master-sites-DEFAULT`, и `patch-"
+"sites-DEFAULT` вернут элементы группы `DEFAULT`, `master-sites-test` и "
+"`patch-sites-test` — группы `test`, и так далее."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2512
+msgid ""
+"There are new targets `master-sites-all` and `patch-sites-all` which do the "
+"work of the old `master-sites` and `patch-sites` ones. They return the "
+"elements of all groups as if they all belonged to the same group with the "
+"caveat that it lists as many `MASTER_SITE_BACKUP` and `MASTER_SITE_OVERRIDE` "
+"as there are groups defined within either `DISTFILES` or `PATCHFILES`; "
+"respectively for `master-sites-all` and `patch-sites-all`."
+msgstr ""
+"Существуют новые цели `master-sites-all` и `patch-sites-all`, которые "
+"выполняют работу старых `master-sites` и `patch-sites`. Они возвращают "
+"элементы всех групп, как если бы они все принадлежали одной группе, с "
+"оговоркой, что перечисляется столько же `MASTER_SITE_BACKUP` и "
+"`MASTER_SITE_OVERRIDE`, сколько определено групп в `DISTFILES` или "
+"`PATCHFILES`; соответственно для `master-sites-all` и `patch-sites-all`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2514
+#, no-wrap
+msgid "`DIST_SUBDIR`"
+msgstr "`DIST_SUBDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2519
+msgid ""
+"Do not let the port clutter [.filename]#/usr/ports/distfiles#. If the port "
+"requires a lot of files to be fetched, or contains a file that has a name "
+"that might conflict with other ports (for example, [.filename]#Makefile#), "
+"set `DIST_SUBDIR` to the name of the port (`${PORTNAME}` or `${PKGNAMEPREFIX}"
+"${PORTNAME}` are fine). This will change `DISTDIR` from the default "
+"[.filename]#/usr/ports/distfiles# to [.filename]#/usr/ports/distfiles/$"
+"{DIST_SUBDIR}#, and in effect puts everything that is required for the port "
+"into that subdirectory."
+msgstr ""
+"Не допускайте захламления портом каталога [.filename]#/usr/ports/distfiles#. "
+"Если порт требует загрузки большого количества файлов или содержит файл с "
+"именем, которое может конфликтовать с другими портами (например, "
+"[.filename]#Makefile#), установите `DIST_SUBDIR` в имя порта (подойдут `$"
+"{PORTNAME}` или `${PKGNAMEPREFIX}${PORTNAME}`). Это изменит `DISTDIR` со "
+"значения по умолчанию [.filename]#/usr/ports/distfiles# на [.filename]#/usr/"
+"ports/distfiles/${DIST_SUBDIR}#, фактически помещая все необходимые для "
+"порта файлы в этот подкаталог."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2521
+msgid ""
+"It will also look at the subdirectory with the same name on the backup "
+"master site at http://distcache.FreeBSD.org[http://distcache.FreeBSD.org] "
+"(Setting `DISTDIR` explicitly in [.filename]#Makefile# will not accomplish "
+"this, so please use `DIST_SUBDIR`.)"
+msgstr ""
+"Также будет проверяться подкаталог с тем же именем на основном резервном "
+"сайте по адресу http://distcache.FreeBSD.org[http://distcache.FreeBSD.org] "
+"(Явное указание `DISTDIR` в [.filename]#Makefile# не решит эту задачу, "
+"поэтому используйте `DIST_SUBDIR`.)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2525
+msgid ""
+"This does not affect `MASTER_SITES` defined in the [.filename]#Makefile#."
+msgstr ""
+"Это не влияет на сайты в `MASTER_SITES`, определённые в "
+"[.filename]#Makefile#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2528
+#, no-wrap
+msgid "`MAINTAINER`"
+msgstr "`MAINTAINER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2531
+msgid "Set your mail-address here. Please. _:-)_"
+msgstr "Установите здесь свой адрес электронной почты. Пожалуйста. _:-)_"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2536
+msgid ""
+"Only a single address without the comment part is allowed as a `MAINTAINER` "
+"value. The format used is `user@hostname.domain`. Please do not include "
+"any descriptive text such as a real name in this entry. That merely "
+"confuses the Ports infrastructure and most tools using it."
+msgstr ""
+"Только один адрес без комментария допускается в качестве значения "
+"`MAINTAINER`. Используемый формат: `user@hostname.domain`. Пожалуйста, не "
+"включайте в эту запись описательный текст, например, настоящее имя. Это "
+"только вносит путаницу в инфраструктуру Ports и большинство инструментов, "
+"которые её используют."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2539
+msgid ""
+"The maintainer is responsible for keeping the port up to date and making "
+"sure that it works correctly. For a detailed description of the "
+"responsibilities of a port maintainer, refer to extref:{contributing}[The "
+"challenge for port maintainers, maintain-port]."
+msgstr ""
+"Ответственный за поддержку порта обязан поддерживать порт в актуальном "
+"состоянии и обеспечивать его корректную работу. Подробное описание "
+"обязанностей ответственного за поддержку порта приведено в разделе extref:"
+"{contributing}[Задача для сопровождающих портов,maintain-port]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2548
+msgid ""
+"A maintainer volunteers to keep a port in good working order. Maintainers "
+"have the primary responsibility for their ports, but not exclusive "
+"ownership. Ports exist for the benefit of the community and, in reality, "
+"belong to the community. What this means is that people other than the "
+"maintainer can make changes to a port. Large changes to the Ports "
+"Collection might require changes to many ports. The FreeBSD Ports "
+"Management Team or members of other teams might modify ports to fix "
+"dependency issues or other problems, like a version bump for a shared "
+"library update."
+msgstr ""
+"Сопровождающий добровольно поддерживает порт в рабочем состоянии. "
+"Сопровождающие несут основную ответственность за свои порты, но не имеют "
+"исключительных прав на них. Порты существуют для пользы сообщества и, по "
+"сути, принадлежат сообществу. Это означает, что люди, не являющиеся "
+"сопровождающими, также могут вносить изменения в порт. Крупные изменения в "
+"коллекции портов могут потребовать правок во многих портах. Команда "
+"управления портами FreeBSD или члены других команд могут изменять порты для "
+"исправления проблем с зависимостями или других проблем, таких как обновление "
+"версии динамической библиотеки."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2551
+msgid ""
+"Some types of fixes have \"blanket approval\" from the {portmgr}, allowing "
+"any committer to fix those categories of problems on any port. These fixes "
+"do not need approval from the maintainer."
+msgstr ""
+"Некоторые типы исправлений имеют \"автоматическое согласование\" от "
+"{portmgr}, что позволяет любому коммиттеру исправлять эти категории проблем "
+"в любом порте. Такие исправления не требуют одобрения от сопровождающего."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2554
+msgid ""
+"Blanket approval for most ports applies to fixes like infrastructure "
+"changes, or trivial and _tested_ build and runtime fixes. The current list "
+"is available in extref:{committers-guide}[Ports section of the Committer's "
+"Guide, ports-qa-misc-blanket-approval]."
+msgstr ""
+"Автоматическое согласование для большинства портов применяется к "
+"исправлениям, таким как изменения инфраструктуры, или тривиальным и "
+"_проверенным_ исправлениям сборки и выполнения. Текущий список доступен в "
+"extref:{committers-guide}[разделе Портов Руководства коммиттера, ports-qa-"
+"misc-blanket-approval]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2561
+msgid ""
+"Other changes to the port will be sent to the maintainer for review and "
+"approval before being committed. If the maintainer does not respond to an "
+"update request after two weeks (excluding major public holidays), then that "
+"is considered a maintainer timeout, and the update can be made without "
+"explicit maintainer approval. If the maintainer does not respond within "
+"three months, or if there have been three consecutive timeouts, then that "
+"maintainer is considered absent without leave, and all of their ports can be "
+"assigned back to the pool. Exceptions to this are anything maintained by "
+"the {portmgr}, or the {security-officer}. No unauthorized commits may ever "
+"be made to ports maintained by those groups."
+msgstr ""
+"Другие изменения в порте будут отправлены сопровождающему на проверку и "
+"утверждение перед внесением. Если сопровождающий не отвечает на запрос об "
+"обновлении в течение двух недель (за исключением основных государственных "
+"праздников), это считается превышением времени ожидания сопровождающего, и "
+"обновление может быть внесено без его явного одобрения. Если сопровождающий "
+"не отвечает в течение трех месяцев или если произошло три последовательных "
+"превышения времени ожидания, то сопровождающий считается отсутствующим без "
+"уведомления, и все его порты могут быть возвращены в общий пул. Исключениями "
+"являются порты, сопровождаемые {portmgr} или {security-officer}. Никакие "
+"несанкционированные изменения не могут быть внесены в порты, сопровождаемые "
+"этими группами."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2565
+msgid ""
+"We reserve the right to modify the maintainer's submission to better match "
+"existing policies and style of the Ports Collection without explicit "
+"blessing from the submitter or the maintainer. Also, large infrastructural "
+"changes can result in a port being modified without the maintainer's "
+"consent. These kinds of changes will never affect the port's functionality."
+msgstr ""
+"Мы оставляем за собой право изменять представленные сопровождающим "
+"материалы, чтобы лучше соответствовать существующим политикам и стилю "
+"Коллекции портов, без явного одобрения отправителя или сопровождающего. "
+"Кроме того, масштабные инфраструктурные изменения могут привести к "
+"модификации порта без согласия сопровождающего. Подобные изменения никогда "
+"не повлияют на функциональность порта."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2567
+msgid ""
+"The {portmgr} reserves the right to revoke or override anyone's "
+"maintainership for any reason, and the {security-officer} reserves the right "
+"to revoke or override maintainership for security reasons."
+msgstr ""
+"{portmgr} оставляет за собой право отозвать или изменить права "
+"сопровождающего по любой причине, а {security-officer} оставляет за собой "
+"право отозвать или изменить права сопровождающего по соображениям "
+"безопасности."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2569
+#, no-wrap
+msgid "`COMMENT`"
+msgstr "`COMMENT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2573
+msgid ""
+"The comment is a one-line description of a port shown by `pkg info`. Please "
+"follow these rules when composing it:"
+msgstr ""
+"Комментарий — это однострочное описание порта, отображаемое командой `pkg "
+"info`. При составлении придерживайтесь следующих правил:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2575
+msgid "The COMMENT string should be 70 characters or less."
+msgstr "Строка COMMENT должна быть не длиннее 70 символов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2576
+msgid "Do _not_ include the package name or version number of software."
+msgstr ""
+"Не включайте название пакета или номер версии программного обеспечения."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2577
+msgid "The comment must begin with a capital and end without a period."
+msgstr ""
+"Комментарий должен начинаться с заглавной буквы и заканчиваться без точки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2578
+msgid "Do not start with an indefinite article (that is, A or An)."
+msgstr "Не начинайте с неопределённого артикля (то есть A или An)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2579
+msgid "Capitalize names such as Apache, JavaScript, or Perl."
+msgstr ""
+"Пишите названия с заглавной буквы, например: Apache, JavaScript или Perl."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2580
+msgid "Use a serial comma for lists of words: \"green, red, and blue.\""
+msgstr "Используйте запятую для списков слов: \"green, red, and blue.\""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2581
+msgid "Check for spelling errors."
+msgstr "Проверяйте на наличие орфографических ошибок."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2583
+msgid "Here is an example:"
+msgstr "Вот пример:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2587
+#, no-wrap
+msgid "COMMENT=\tCat chasing a mouse all over the screen\n"
+msgstr "COMMENT=\tCat chasing a mouse all over the screen\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2590
+msgid ""
+"The COMMENT variable immediately follows the MAINTAINER variable in the "
+"[.filename]#Makefile#."
+msgstr ""
+"Переменная COMMENT следует сразу за переменной MAINTAINER в файле "
+"[.filename]#Makefile#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2592
+#, no-wrap
+msgid "Project website"
+msgstr "Веб-сайт проекта"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2595
+msgid ""
+"Each port should point to a website that provides more information about the "
+"software."
+msgstr ""
+"Каждый порт должен указывать на веб-сайт, предоставляющий дополнительную "
+"информацию о программном обеспечении."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2597
+msgid ""
+"Whenever possible, this should be the official project website maintained by "
+"the developers of the software."
+msgstr ""
+"Везде, где это возможно, следует использовать официальный сайт проекта, "
+"поддерживаемый разработчиками программного обеспечения."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2601
+#, no-wrap
+msgid "WWW=\t\thttps://ffmpeg.org/\n"
+msgstr "WWW=\t\thttps://ffmpeg.org/\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2604
+msgid ""
+"But it can also be a directory or resource in the source code repository:"
+msgstr ""
+"Но это также может быть каталог или ресурс в репозитории исходного кода:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2608
+#, no-wrap
+msgid "WWW=\t\thttps://sourceforge.net/projects/mpd/\n"
+msgstr "WWW=\t\thttps://sourceforge.net/projects/mpd/\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2611
+msgid ""
+"The WWW variable immediately follows the COMMENT variable in the "
+"[.filename]#Makefile#."
+msgstr ""
+"Переменная WWW следует сразу за переменной COMMENT в файле "
+"[.filename]#Makefile#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2614
+msgid ""
+"If the same content can be accessed via HTTP and HTTPS, the URL starting "
+"with `https://` shall be used. If the URI is the root of the website or "
+"directory, it must be terminated with a slash."
+msgstr ""
+"Если один и тот же контент доступен по HTTP и HTTPS, следует использовать "
+"URL, начинающийся с `https://`. Если URI является корнем веб-сайта или "
+"директории, он должен заканчиваться косой чертой."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2618
+msgid ""
+"This information used to be placed into the last line of the [.filename]#pkg-"
+"descr# file. It has been moved into the Makefile for easier maintenance and "
+"processing. Having a `WWW:` line at the end of the [.filename]#pkg-descr# "
+"file is deprecated."
+msgstr ""
+"Эта информация ранее размещалась в последней строке файла [.filename]#pkg-"
+"descr#. Она была перенесена в Makefile для удобства обслуживания и "
+"обработки. Наличие строки `WWW:` в конце файла [.filename]#pkg-descr# "
+"считается устаревшим."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2620
+#, no-wrap
+msgid "Licenses"
+msgstr "Лицензии"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2624
+msgid ""
+"Each port must document the license under which it is available. If it is "
+"not an OSI approved license it must also document any restrictions on "
+"redistribution."
+msgstr ""
+"Каждый порт должен содержать документацию о лицензии, под которой он "
+"распространяется. Если лицензия не одобрена OSI, необходимо также указать "
+"любые ограничения на распространение."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2626
+#, no-wrap
+msgid "`LICENSE`"
+msgstr "`LICENSE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2629
+msgid ""
+"A short name for the license or licenses if more than one license apply."
+msgstr ""
+"Краткое название лицензии или лицензий, если применяется более одной "
+"лицензии."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2631
+msgid ""
+"If it is one of the licenses listed in crossref:makefiles[licenses-license-"
+"list,Predefined License List], only `LICENSE_FILE` and `LICENSE_DISTFILES` "
+"variables can be set."
+msgstr ""
+"Если это одна из лицензий, перечисленных в crossref:makefiles[licenses-"
+"license-list,Предопределенный список лицензий], можно задать только "
+"переменные `LICENSE_FILE` и `LICENSE_DISTFILES`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2635
+msgid ""
+"If this is a license that has not been defined in the ports framework (see "
+"crossref:makefiles[licenses-license-list,Predefined License List]), the "
+"`LICENSE_PERMS` and `LICENSE_NAME` must be set, along with either "
+"`LICENSE_FILE` or `LICENSE_TEXT`. `LICENSE_DISTFILES` and `LICENSE_GROUPS` "
+"can also be set, but are not required."
+msgstr ""
+"Если это лицензия, которая не определена в рамках портов (см. "
+"crossref:makefiles[licenses-license-list,Список предопределённых лицензий]), "
+"необходимо задать `LICENSE_PERMS` и `LICENSE_NAME`, а также `LICENSE_FILE` "
+"или `LICENSE_TEXT`. Также можно задать `LICENSE_DISTFILES` и "
+"`LICENSE_GROUPS`, но это не обязательно."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2638
+msgid ""
+"The predefined licenses are shown in crossref:makefiles[licenses-license-"
+"list,Predefined License List]. The current list is always available in "
+"[.filename]#Mk/bsd.licenses.db.mk#."
+msgstr ""
+"Предопределенные лицензии показаны в crossref:makefiles[licenses-license-"
+"list,Список предопределенных лицензий]. Текущий список всегда доступен в "
+"[.filename]#Mk/bsd.licenses.db.mk#."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2640
+#, no-wrap
+msgid "Simplest Usage, Predefined Licenses"
+msgstr "Простейшее использование, предопределённые лицензии"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2645
+msgid ""
+"When the [.filename]#README# of some software says \"This software is under "
+"the terms of the GNU Lesser General Public License as published by the Free "
+"Software Foundation; either version 2.1 of the License, or (at your option) "
+"any later version.\" but does not provide the license file, use this:"
+msgstr ""
+"Когда в файле [.filename]#README# какого-либо программного обеспечения "
+"указано: «Данное программное обеспечение распространяется на условиях GNU "
+"Lesser General Public License, опубликованной Free Software Foundation; либо "
+"версии 2.1 Лицензии, либо (по вашему выбору) любой более поздней версии», но "
+"сам файл лицензии не предоставлен, используйте следующее:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2649
+#, no-wrap
+msgid "LICENSE=\tLGPL21+\n"
+msgstr "LICENSE=\tLGPL21+\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2652
+msgid "When the software provides the license file, use this:"
+msgstr ""
+"Когда программное обеспечение предоставляет файл лицензии, используйте это:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2657
+#, no-wrap
+msgid ""
+"LICENSE=\tLGPL21+\n"
+"LICENSE_FILE=\t${WRKSRC}/COPYING\n"
+msgstr ""
+"LICENSE=\tLGPL21+\n"
+"LICENSE_FILE=\t${WRKSRC}/COPYING\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2662
+msgid ""
+"For the predefined licenses, the default permissions are `dist-mirror dist-"
+"sell pkg-mirror pkg-sell auto-accept`."
+msgstr ""
+"Для предопределённых лицензий права по умолчанию: `dist-mirror dist-sell pkg-"
+"mirror pkg-sell auto-accept`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2664
+#, no-wrap
+msgid "Predefined License List"
+msgstr "Предопределенный список лицензий"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2668
+#, no-wrap
+msgid "Short Name"
+msgstr "Короткое имя"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2669
+#, no-wrap
+msgid "Name"
+msgstr "Имя"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2670
+#, no-wrap
+msgid "Group"
+msgstr "Группа"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2672
+#, no-wrap
+msgid "Permissions"
+msgstr "Разрешения"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2673
+#, no-wrap
+msgid "`AGPLv3`"
+msgstr "`AGPLv3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2674
+#, no-wrap
+msgid "GNU Affero General Public License version 3"
+msgstr "Универсальная общественная лицензия GNU Affero версии 3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2675
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2680
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2705
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2905
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2920
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2925
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2930
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2935
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2940
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2945
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2950
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2955
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2960
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2970
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2975
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2980
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2985
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2990
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2995
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3105
+#, no-wrap
+msgid "`FSF GPL OSI`"
+msgstr "`FSF GPL OSI`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2677
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2682
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2687
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2692
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2697
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2702
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2707
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2712
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2717
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2722
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2727
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2732
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2737
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2742
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2747
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2752
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2757
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2762
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2842
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2847
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2852
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2857
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2862
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2867
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2872
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2877
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2882
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2887
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2892
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2897
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2902
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2907
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2912
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2917
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2922
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2927
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2932
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2937
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2942
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2947
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2952
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2957
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2962
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2967
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2972
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2977
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2982
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2987
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2992
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2997
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3037
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3042
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3047
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3052
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3057
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3067
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3072
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3077
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3082
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3087
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3092
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3097
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3102
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3107
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3112
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3117
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3122
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3127
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3132
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3137
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3141
+#, no-wrap
+msgid "(default)"
+msgstr "(по умолчанию)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2678
+#, no-wrap
+msgid "`AGPLv3+`"
+msgstr "`AGPLv3+`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2679
+#, no-wrap
+msgid "GNU Affero General Public License version 3 (or later)"
+msgstr "Универсальная общественная лицензия GNU Affero версии 3 (или позднее)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2683
+#, no-wrap
+msgid "`APACHE10`"
+msgstr "`APACHE10`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2684
+#, no-wrap
+msgid "Apache License 1.0"
+msgstr "Apache License 1.0"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2685
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2730
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2915
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3080
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3115
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3264
+#, no-wrap
+msgid "`FSF`"
+msgstr "`FSF`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2688
+#, no-wrap
+msgid "`APACHE11`"
+msgstr "`APACHE11`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2689
+#, no-wrap
+msgid "Apache License 1.1"
+msgstr "Apache License 1.1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2690
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2695
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2895
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2900
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2910
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3000
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3005
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3010
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3015
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3020
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3025
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3030
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3040
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3045
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3050
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3090
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3095
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3100
+#, no-wrap
+msgid "`FSF OSI`"
+msgstr "`FSF OSI`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2693
+#, no-wrap
+msgid "`APACHE20`"
+msgstr "`APACHE20`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2694
+#, no-wrap
+msgid "Apache License 2.0"
+msgstr "Apache License 2.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2698
+#, no-wrap
+msgid "`ART10`"
+msgstr "`ART10`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2699
+#, no-wrap
+msgid "Artistic License version 1.0"
+msgstr "Художественная лицензия версия 1.0"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2700
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2710
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3272
+#, no-wrap
+msgid "`OSI`"
+msgstr "`OSI`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2703
+#, no-wrap
+msgid "`ART20`"
+msgstr "`ART20`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2704
+#, no-wrap
+msgid "Artistic License version 2.0"
+msgstr "Художественная лицензия версии 2.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2708
+#, no-wrap
+msgid "`ARTPERL10`"
+msgstr "`ARTPERL10`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2709
+#, no-wrap
+msgid "Artistic License (perl) version 1.0"
+msgstr "Художественная лицензия (perl) версия 1.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2713
+#, no-wrap
+msgid "`BSD`"
+msgstr "`BSD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2714
+#, no-wrap
+msgid "BSD license Generic Version (deprecated)"
+msgstr "Лицензия BSD, общая версия (устарела)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2715
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2720
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2725
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2735
+#, no-wrap
+msgid "`FSF OSI COPYFREE`"
+msgstr "`FSF OSI COPYFREE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2718
+#, no-wrap
+msgid "`BSD2CLAUSE`"
+msgstr "`BSD2CLAUSE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2719
+#, no-wrap
+msgid "BSD 2-clause \"Simplified\" License"
+msgstr "BSD 2-пунктная лицензия \"Упрощенная\""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2723
+#, no-wrap
+msgid "`BSD3CLAUSE`"
+msgstr "`BSD3CLAUSE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2724
+#, no-wrap
+msgid "BSD 3-clause \"New\" or \"Revised\" License"
+msgstr "BSD 3-пунктная лицензия \"Новая\" или \"Пересмотренная\""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2728
+#, no-wrap
+msgid "`BSD4CLAUSE`"
+msgstr "`BSD4CLAUSE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2729
+#, no-wrap
+msgid "BSD 4-clause \"Original\" or \"Old\" License"
+msgstr "BSD 4-пунктная лицензия \"Оригинальная\" или \"Старая\""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2733
+#, no-wrap
+msgid "`BSL`"
+msgstr "`BSL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2734
+#, no-wrap
+msgid "Boost Software License"
+msgstr "Лицензия программного обеспечения Boost"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2738
+#, no-wrap
+msgid "`CC-BY-1.0`"
+msgstr "`CC-BY-1.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2739
+#, no-wrap
+msgid "Creative Commons Attribution 1.0"
+msgstr "Creative Commons с указанием авторства 1.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2743
+#, no-wrap
+msgid "`CC-BY-2.0`"
+msgstr "`CC-BY-2.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2744
+#, no-wrap
+msgid "Creative Commons Attribution 2.0"
+msgstr "Creative Commons с указанием авторства 2.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2748
+#, no-wrap
+msgid "`CC-BY-2.5`"
+msgstr "`CC-BY-2.5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2749
+#, no-wrap
+msgid "Creative Commons Attribution 2.5"
+msgstr "Creative Commons с указанием авторства 2.5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2753
+#, no-wrap
+msgid "`CC-BY-3.0`"
+msgstr "`CC-BY-3.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2754
+#, no-wrap
+msgid "Creative Commons Attribution 3.0"
+msgstr "Creative Commons с указанием авторства 3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2758
+#, no-wrap
+msgid "`CC-BY-4.0`"
+msgstr "`CC-BY-4.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2759
+#, no-wrap
+msgid "Creative Commons Attribution 4.0"
+msgstr "Creative Commons с указанием авторства 4.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2763
+#, no-wrap
+msgid "`CC-BY-NC-1.0`"
+msgstr "`CC-BY-NC-1.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2764
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial 1.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая 1.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2767
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2772
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2777
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2782
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2787
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2792
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2797
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2802
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2807
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2812
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2817
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2822
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2827
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2832
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2837
+#, no-wrap
+msgid "`dist-mirror``pkg-mirror``auto-accept`"
+msgstr "`dist-mirror``pkg-mirror``auto-accept`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2768
+#, no-wrap
+msgid "`CC-BY-NC-2.0`"
+msgstr "`CC-BY-NC-2.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2769
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial 2.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая 2.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2773
+#, no-wrap
+msgid "`CC-BY-NC-2.5`"
+msgstr "`CC-BY-NC-2.5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2774
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial 2.5"
+msgstr "Creative Commons с указанием авторства – некоммерческая 2.5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2778
+#, no-wrap
+msgid "`CC-BY-NC-3.0`"
+msgstr "`CC-BY-NC-3.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2779
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial 3.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая 3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2783
+#, no-wrap
+msgid "`CC-BY-NC-4.0`"
+msgstr "`CC-BY-NC-4.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2784
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial 4.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая 4.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2788
+#, no-wrap
+msgid "`CC-BY-NC-ND-1.0`"
+msgstr "`CC-BY-NC-ND-1.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2789
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial No Derivatives 1.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая – без производных 1.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2793
+#, no-wrap
+msgid "`CC-BY-NC-ND-2.0`"
+msgstr "`CC-BY-NC-ND-2.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2794
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial No Derivatives 2.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая – без производных 2.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2798
+#, no-wrap
+msgid "`CC-BY-NC-ND-2.5`"
+msgstr "`CC-BY-NC-ND-2.5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2799
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial No Derivatives 2.5"
+msgstr "Creative Commons с указанием авторства – некоммерческая – без производных 2.5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2803
+#, no-wrap
+msgid "`CC-BY-NC-ND-3.0`"
+msgstr "`CC-BY-NC-ND-3.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2804
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial No Derivatives 3.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая – без производных 3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2808
+#, no-wrap
+msgid "`CC-BY-NC-ND-4.0`"
+msgstr "`CC-BY-NC-ND-4.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2809
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial No Derivatives 4.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая – без производных 4.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2813
+#, no-wrap
+msgid "`CC-BY-NC-SA-1.0`"
+msgstr "`CC-BY-NC-SA-1.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2814
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial Share Alike 1.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая – на тех же условиях 1.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2818
+#, no-wrap
+msgid "`CC-BY-NC-SA-2.0`"
+msgstr "`CC-BY-NC-SA-2.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2819
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial Share Alike 2.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая – на тех же условиях 2.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2823
+#, no-wrap
+msgid "`CC-BY-NC-SA-2.5`"
+msgstr "`CC-BY-NC-SA-2.5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2824
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial Share Alike 2.5"
+msgstr "Creative Commons с указанием авторства – некоммерческая – на тех же условиях 2.5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2828
+#, no-wrap
+msgid "`CC-BY-NC-SA-3.0`"
+msgstr "`CC-BY-NC-SA-3.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2829
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial Share Alike 3.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая – на тех же условиях 3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2833
+#, no-wrap
+msgid "`CC-BY-NC-SA-4.0`"
+msgstr "`CC-BY-NC-SA-4.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2834
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial Share Alike 4.0"
+msgstr "Creative Commons с указанием авторства – некоммерческая – на тех же условиях 4.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2838
+#, no-wrap
+msgid "`CC-BY-ND-1.0`"
+msgstr "`CC-BY-ND-1.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2839
+#, no-wrap
+msgid "Creative Commons Attribution No Derivatives 1.0"
+msgstr "Creative Commons с указанием авторства – без производных 1.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2843
+#, no-wrap
+msgid "`CC-BY-ND-2.0`"
+msgstr "`CC-BY-ND-2.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2844
+#, no-wrap
+msgid "Creative Commons Attribution No Derivatives 2.0"
+msgstr "Creative Commons с указанием авторства – без производных 2.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2848
+#, no-wrap
+msgid "`CC-BY-ND-2.5`"
+msgstr "`CC-BY-ND-2.5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2849
+#, no-wrap
+msgid "Creative Commons Attribution No Derivatives 2.5"
+msgstr "Creative Commons с указанием авторства – без производных 2.5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2853
+#, no-wrap
+msgid "`CC-BY-ND-3.0`"
+msgstr "`CC-BY-ND-3.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2854
+#, no-wrap
+msgid "Creative Commons Attribution No Derivatives 3.0"
+msgstr "Creative Commons с указанием авторства – без производных 3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2858
+#, no-wrap
+msgid "`CC-BY-ND-4.0`"
+msgstr "`CC-BY-ND-4.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2859
+#, no-wrap
+msgid "Creative Commons Attribution No Derivatives 4.0"
+msgstr "Creative Commons с указанием авторства – без производных 4.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2863
+#, no-wrap
+msgid "`CC-BY-SA-1.0`"
+msgstr "`CC-BY-SA-1.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2864
+#, no-wrap
+msgid "Creative Commons Attribution Share Alike 1.0"
+msgstr "Creative Commons с указанием авторства – на тех же условиях 1.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2868
+#, no-wrap
+msgid "`CC-BY-SA-2.0`"
+msgstr "`CC-BY-SA-2.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2869
+#, no-wrap
+msgid "Creative Commons Attribution Share Alike 2.0"
+msgstr "Creative Commons с указанием авторства – на тех же условиях 2.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2873
+#, no-wrap
+msgid "`CC-BY-SA-2.5`"
+msgstr "`CC-BY-SA-2.5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2874
+#, no-wrap
+msgid "Creative Commons Attribution Share Alike 2.5"
+msgstr "Creative Commons с указанием авторства – на тех же условиях 2.5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2878
+#, no-wrap
+msgid "`CC-BY-SA-3.0`"
+msgstr "`CC-BY-SA-3.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2879
+#, no-wrap
+msgid "Creative Commons Attribution Share Alike 3.0"
+msgstr "Creative Commons с указанием авторства – на тех же условиях 3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2883
+#, no-wrap
+msgid "`CC-BY-SA-4.0`"
+msgstr "`CC-BY-SA-4.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2884
+#, no-wrap
+msgid "Creative Commons Attribution Share Alike 4.0"
+msgstr "Creative Commons с указанием авторства – на тех же условиях 4.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2888
+#, no-wrap
+msgid "`CC0-1.0`"
+msgstr "`CC0-1.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2889
+#, no-wrap
+msgid "Creative Commons Zero v1.0 Universal"
+msgstr "Creative Commons Zero v1.0 Universal (Отказ от прав 1.0 Универсальная)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2890
+#, no-wrap
+msgid "`FSF GPL COPYFREE`"
+msgstr "`FSF GPL COPYFREE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2893
+#, no-wrap
+msgid "`CDDL`"
+msgstr "`CDDL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2894
+#, no-wrap
+msgid "Common Development and Distribution License"
+msgstr "Лицензия на совместную разработку и распространение"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2898
+#, no-wrap
+msgid "`CPAL-1.0`"
+msgstr "`CPAL-1.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2899
+#, no-wrap
+msgid "Common Public Attribution License"
+msgstr "Публичная лицензия общего распространения с указанием авторства"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2903
+#, no-wrap
+msgid "`ClArtistic`"
+msgstr "`ClArtistic`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2904
+#, no-wrap
+msgid "Clarified Artistic License"
+msgstr "Уточнённая художественная лицензия"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2908
+#, no-wrap
+msgid "`EPL`"
+msgstr "`EPL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2909
+#, no-wrap
+msgid "Eclipse Public License"
+msgstr "Публичная лицензия Eclipse"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2913
+#, no-wrap
+msgid "`GFDL`"
+msgstr "`GFDL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2914
+#, no-wrap
+msgid "GNU Free Documentation License"
+msgstr "GNU Свободная лицензия на документацию"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2918
+#, no-wrap
+msgid "`GMGPL`"
+msgstr "`GMGPL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2919
+#, no-wrap
+msgid "GNAT Modified General Public License"
+msgstr "Модифицированная Общедоступная лицензия GNAT"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2923
+#, no-wrap
+msgid "`GPLv1`"
+msgstr "`GPLv1`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2924
+#, no-wrap
+msgid "GNU General Public License version 1"
+msgstr "Универсальная общественная лицензия GNU версии 1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2928
+#, no-wrap
+msgid "`GPLv1+`"
+msgstr "`GPLv1+`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2929
+#, no-wrap
+msgid "GNU General Public License version 1 (or later)"
+msgstr "Универсальная общественная лицензия GNU версии 1 (или более поздняя)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2933
+#, no-wrap
+msgid "`GPLv2`"
+msgstr "`GPLv2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2934
+#, no-wrap
+msgid "GNU General Public License version 2"
+msgstr "Универсальная общественная лицензия GNU версии 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2938
+#, no-wrap
+msgid "`GPLv2+`"
+msgstr "`GPLv2+`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2939
+#, no-wrap
+msgid "GNU General Public License version 2 (or later)"
+msgstr "Универсальная общественная лицензия GNU версии 2 (или более поздняя)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2943
+#, no-wrap
+msgid "`GPLv3`"
+msgstr "`GPLv3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2944
+#, no-wrap
+msgid "GNU General Public License version 3"
+msgstr "Универсальная общественная лицензия GNU версии 3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2948
+#, no-wrap
+msgid "`GPLv3+`"
+msgstr "`GPLv3+`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2949
+#, no-wrap
+msgid "GNU General Public License version 3 (or later)"
+msgstr "Универсальная общественная лицензия GNU версии 3 (или более поздняя)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2953
+#, no-wrap
+msgid "`GPLv3RLE`"
+msgstr "`GPLv3RLE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2954
+#, no-wrap
+msgid "GNU GPL version 3 Runtime Library Exception"
+msgstr "Исключение для библиотеки времени выполнения GNU GPL версии 3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2958
+#, no-wrap
+msgid "`GPLv3RLE+`"
+msgstr "`GPLv3RLE+`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2959
+#, no-wrap
+msgid "GNU GPL version 3 Runtime Library Exception (or later)"
+msgstr "Исключение для библиотеки времени выполнения GNU GPL версии 3 (или более поздняя)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2963
+#, no-wrap
+msgid "`ISCL`"
+msgstr "`ISCL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2964
+#, no-wrap
+msgid "Internet Systems Consortium License"
+msgstr "Лицензия Internet Systems Consortium"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2965
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3110
+#, no-wrap
+msgid "`FSF GPL OSI COPYFREE`"
+msgstr "`FSF GPL OSI COPYFREE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2968
+#, no-wrap
+msgid "`LGPL20`"
+msgstr "`LGPL20`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2969
+#, no-wrap
+msgid "GNU Library General Public License version 2.0"
+msgstr "Общедоступная лицензия GNU для библиотек, версия 2.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2973
+#, no-wrap
+msgid "`LGPL20+`"
+msgstr "`LGPL20+`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2974
+#, no-wrap
+msgid "GNU Library General Public License version 2.0 (or later)"
+msgstr "Общедоступная лицензия GNU для библиотек, версия 2.0 (или более поздняя)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2978
+#, no-wrap
+msgid "`LGPL21`"
+msgstr "`LGPL21`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2979
+#, no-wrap
+msgid "GNU Lesser General Public License version 2.1"
+msgstr "Универсальная общественная лицензия GNU ограниченного применения, версия 2.1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2983
+#, no-wrap
+msgid "`LGPL21+`"
+msgstr "`LGPL21+`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2984
+#, no-wrap
+msgid "GNU Lesser General Public License version 2.1 (or later)"
+msgstr "Универсальная общественная лицензия GNU ограниченного применения, версия 2.1 (или более поздняя)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2988
+#, no-wrap
+msgid "`LGPL3`"
+msgstr "`LGPL3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2989
+#, no-wrap
+msgid "GNU Lesser General Public License version 3"
+msgstr "Универсальная общественная лицензия GNU ограниченного применения, версия 3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2993
+#, no-wrap
+msgid "`LGPL3+`"
+msgstr "`LGPL3+`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2994
+#, no-wrap
+msgid "GNU Lesser General Public License version 3 (or later)"
+msgstr "Универсальная общественная лицензия GNU ограниченного применения, версия 3 (или более поздней)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2998
+#, no-wrap
+msgid "`LPPL10`"
+msgstr "`LPPL10`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2999
+#, no-wrap
+msgid "LaTeX Project Public License version 1.0"
+msgstr "Публичная лицензия проекта LaTeX, версия 1.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3002
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3007
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3012
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3017
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3022
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3027
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3032
+#, no-wrap
+msgid "`dist-mirror dist-sell`"
+msgstr "`dist-mirror dist-sell`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3003
+#, no-wrap
+msgid "`LPPL11`"
+msgstr "`LPPL11`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3004
+#, no-wrap
+msgid "LaTeX Project Public License version 1.1"
+msgstr "Публичная лицензия проекта LaTeX, версия 1.1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3008
+#, no-wrap
+msgid "`LPPL12`"
+msgstr "`LPPL12`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3009
+#, no-wrap
+msgid "LaTeX Project Public License version 1.2"
+msgstr "Публичная лицензия проекта LaTeX, версия 1.2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3013
+#, no-wrap
+msgid "`LPPL13`"
+msgstr "`LPPL13`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3014
+#, no-wrap
+msgid "LaTeX Project Public License version 1.3"
+msgstr "Публичная лицензия проекта LaTeX, версия 1.3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3018
+#, no-wrap
+msgid "`LPPL13a`"
+msgstr "`LPPL13a`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3019
+#, no-wrap
+msgid "LaTeX Project Public License version 1.3a"
+msgstr "Публичная лицензия проекта LaTeX, версия 1.3a"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3023
+#, no-wrap
+msgid "`LPPL13b`"
+msgstr "`LPPL13b`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3024
+#, no-wrap
+msgid "LaTeX Project Public License version 1.3b"
+msgstr "Публичная лицензия проекта LaTeX, версия 1.3b"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3028
+#, no-wrap
+msgid "`LPPL13c`"
+msgstr "`LPPL13c`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3029
+#, no-wrap
+msgid "LaTeX Project Public License version 1.3c"
+msgstr "Публичная лицензия проекта LaTeX, версия 1.3c"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3033
+#, no-wrap
+msgid "`MIT`"
+msgstr "`MIT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3034
+#, no-wrap
+msgid "MIT license / X11 license"
+msgstr "Лицензия MIT / Лицензия X11"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3035
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3055
+#, no-wrap
+msgid "`COPYFREE FSF GPL OSI`"
+msgstr "`COPYFREE FSF GPL OSI`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3038
+#, no-wrap
+msgid "`MPL10`"
+msgstr "`MPL10`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3039
+#, no-wrap
+msgid "Mozilla Public License version 1.0"
+msgstr "Публичная лицензия Mozilla, версия 1.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3043
+#, no-wrap
+msgid "`MPL11`"
+msgstr "`MPL11`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3044
+#, no-wrap
+msgid "Mozilla Public License version 1.1"
+msgstr "Публичная лицензия Mozilla, версия 1.1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3048
+#, no-wrap
+msgid "`MPL20`"
+msgstr "`MPL20`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3049
+#, no-wrap
+msgid "Mozilla Public License version 2.0"
+msgstr "Публичная лицензия Mozilla, версия 2.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3053
+#, no-wrap
+msgid "`NCSA`"
+msgstr "`NCSA`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3054
+#, no-wrap
+msgid "University of Illinois/NCSA Open Source License"
+msgstr "Открытая лицензия Университета Иллинойса/NCSA"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3058
+#, no-wrap
+msgid "`NONE`"
+msgstr "`NONE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3059
+#, no-wrap
+msgid "No license specified"
+msgstr "Лицензия не указана"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3062
+#, no-wrap
+msgid "`none`"
+msgstr "`none`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3063
+#, no-wrap
+msgid "`OFL10`"
+msgstr "`OFL10`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3064
+#, no-wrap
+msgid "SIL Open Font License version 1.0 (https://scripts.sil.org/OFL/)"
+msgstr "Лицензия SIL Open Font версия 1.0 (https://scripts.sil.org/OFL/)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3065
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3070
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3280
+#, no-wrap
+msgid "`FONTS`"
+msgstr "`FONTS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3068
+#, no-wrap
+msgid "`OFL11`"
+msgstr "`OFL11`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3069
+#, no-wrap
+msgid "SIL Open Font License version 1.1 (https://scripts.sil.org/OFL/)"
+msgstr "Лицензия SIL Open Font версия 1.1 (https://scripts.sil.org/OFL/)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3073
+#, no-wrap
+msgid "`OWL`"
+msgstr "`OWL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3074
+#, no-wrap
+msgid "Open Works License (owl.apotheon.org)"
+msgstr "Лицензия Открытых Произведений (owl.apotheon.org)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3075
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3276
+#, no-wrap
+msgid "`COPYFREE`"
+msgstr "`COPYFREE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3078
+#, no-wrap
+msgid "`OpenSSL`"
+msgstr "`OpenSSL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3079
+#, no-wrap
+msgid "OpenSSL License"
+msgstr "Лицензия OpenSSL"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3083
+#, no-wrap
+msgid "`PD`"
+msgstr "`PD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3084
+#, no-wrap
+msgid "Public Domain"
+msgstr "Общественное достояние"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3085
+#, no-wrap
+msgid "`GPL COPYFREE`"
+msgstr "`GPL COPYFREE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3088
+#, no-wrap
+msgid "`PHP202`"
+msgstr "`PHP202`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3089
+#, no-wrap
+msgid "PHP License version 2.02"
+msgstr "Лицензия PHP версии 2.02"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3093
+#, no-wrap
+msgid "`PHP30`"
+msgstr "`PHP30`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3094
+#, no-wrap
+msgid "PHP License version 3.0"
+msgstr "Лицензия PHP версии 3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3098
+#, no-wrap
+msgid "`PHP301`"
+msgstr "`PHP301`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3099
+#, no-wrap
+msgid "PHP License version 3.01"
+msgstr "Лицензия PHP версии 3.01"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3103
+#, no-wrap
+msgid "`PSFL`"
+msgstr "`PSFL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3104
+#, no-wrap
+msgid "Python Software Foundation License"
+msgstr "Лицензия Python Software Foundation"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3108
+#, no-wrap
+msgid "`PostgreSQL`"
+msgstr "`PostgreSQL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3109
+#, no-wrap
+msgid "PostgreSQL License"
+msgstr "Лицензия PostgreSQL"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3113
+#, no-wrap
+msgid "`RUBY`"
+msgstr "`RUBY`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3114
+#, no-wrap
+msgid "Ruby License"
+msgstr "Лицензия Ruby"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3118
+#, no-wrap
+msgid "`UNLICENSE`"
+msgstr "`UNLICENSE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3119
+#, no-wrap
+msgid "The Unlicense"
+msgstr "Отказ от лицензии (The Unlicense)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3120
+#, no-wrap
+msgid "`COPYFREE FSF GPL`"
+msgstr "`COPYFREE FSF GPL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3123
+#, no-wrap
+msgid "`WTFPL`"
+msgstr "`WTFPL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3124
+#, no-wrap
+msgid "Do What the Fuck You Want To Public License version 2"
+msgstr "Публичная лицензия \"Делай что хочешь\" версия 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3125
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3130
+#, no-wrap
+msgid "`GPL FSF COPYFREE`"
+msgstr "`GPL FSF COPYFREE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3128
+#, no-wrap
+msgid "`WTFPL1`"
+msgstr "`WTFPL1`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3129
+#, no-wrap
+msgid "Do What the Fuck You Want To Public License version 1"
+msgstr "Публичная лицензия \"Делай что хочешь\" версия 1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3133
+#, no-wrap
+msgid "`ZLIB`"
+msgstr "`ZLIB`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3134
+#, no-wrap
+msgid "zlib License"
+msgstr "Лицензия zlib"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3135
+#, no-wrap
+msgid "`GPL FSF OSI`"
+msgstr "`GPL FSF OSI`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3138
+#, no-wrap
+msgid "`ZPL21`"
+msgstr "`ZPL21`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3139
+#, no-wrap
+msgid "Zope Public License version 2.1"
+msgstr "Публичная лицензия Zope версия 2.1"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3140
+#, no-wrap
+msgid "`GPL OSI`"
+msgstr "`GPL OSI`"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3144
+#, no-wrap
+msgid "`LICENSE_PERMS` and `LICENSE_PERMS_NAME_`"
+msgstr "`LICENSE_PERMS` и `LICENSE_PERMS_NAME_`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3147
+msgid "Permissions. use `none` if empty."
+msgstr "Разрешения. Используйте `none`, если пусто."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3148
+#, no-wrap
+msgid "License Permissions List"
+msgstr "Список разрешений лицензии"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3150
+#, no-wrap
+msgid "`dist-mirror`"
+msgstr "`dist-mirror`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3153
+msgid ""
+"Redistribution of the distribution files is permitted. The distribution "
+"files will be added to the FreeBSD `MASTER_SITE_BACKUP` CDN."
+msgstr ""
+"Разрешается распространение дистрибутивных файлов. Дистрибутивные файлы "
+"будут добавлены в CDN `MASTER_SITE_BACKUP` FreeBSD."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3155
+#, no-wrap
+msgid "`no-dist-mirror`"
+msgstr "`no-dist-mirror`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3159
+msgid ""
+"Redistribution of the distribution files is prohibited. This is equivalent "
+"to setting crossref:special[porting-restrictions-restricted,`RESTRICTED`]. "
+"The distribution files will _not_ be added to the FreeBSD "
+"`MASTER_SITE_BACKUP` CDN."
+msgstr ""
+"Распространение дистрибутивных файлов запрещено. Это эквивалентно установке "
+"crossref:special[porting-restrictions-restricted,`RESTRICTED`]. "
+"Дистрибутивные файлы _не_ будут добавлены в CDN `MASTER_SITE_BACKUP` FreeBSD."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3161
+#, no-wrap
+msgid "`dist-sell`"
+msgstr "`dist-sell`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3164
+msgid ""
+"Selling of distribution files is permitted. The distribution files will be "
+"present on the installer images."
+msgstr ""
+"Продажа файлов дистрибутива разрешена. Файлы дистрибутива будут "
+"присутствовать на образах установщика."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3166
+#, no-wrap
+msgid "`no-dist-sell`"
+msgstr "`no-dist-sell`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3169
+msgid ""
+"Selling of distribution files is prohibited. This is equivalent to setting "
+"crossref:special[porting-restrictions-no_cdrom,`NO_CDROM`]."
+msgstr ""
+"Продажа файлов дистрибутива запрещена. Это эквивалентно установке "
+"crossref:special[porting-restrictions-no_cdrom,`NO_CDROM`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3171
+#, no-wrap
+msgid "`pkg-mirror`"
+msgstr "`pkg-mirror`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3174
+msgid ""
+"Free redistribution of package is permitted. The package will be "
+"distributed on the FreeBSD package CDN https://pkg.freebsd.org/[https://"
+"pkg.freebsd.org/]."
+msgstr ""
+"Свободное распространение пакета разрешено. Пакет будет распространяться "
+"через CDN пакетов FreeBSD https://pkg.freebsd.org/[https://pkg.freebsd.org/]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3176
+#, no-wrap
+msgid "`no-pkg-mirror`"
+msgstr "`no-pkg-mirror`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3180
+msgid ""
+"Free redistribution of package is prohibited. Equivalent to setting "
+"crossref:special[porting-restrictions-no_package,`NO_PACKAGE`]. The package "
+"will _not_ be distributed from the FreeBSD package CDN https://"
+"pkg.freebsd.org/[https://pkg.freebsd.org/]."
+msgstr ""
+"Свободное распространение пакета запрещено. Эквивалентно установке "
+"crossref:special[porting-restrictions-no_package,`NO_PACKAGE`]. Пакет _не_ "
+"будет распространяться через FreeBSD CDN для пакетов https://pkg.freebsd.org/"
+"[https://pkg.freebsd.org/]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3182
+#, no-wrap
+msgid "`pkg-sell`"
+msgstr "`pkg-sell`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3185
+msgid ""
+"Selling of package is permitted. The package will be present on the "
+"installer images."
+msgstr ""
+"Продажа пакета разрешена. Пакет будет присутствовать на образах установщика."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3187
+#, no-wrap
+msgid "`no-pkg-sell`"
+msgstr "`no-pkg-sell`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3191
+msgid ""
+"Selling of package is prohibited. This is equivalent to setting "
+"crossref:special[porting-restrictions-no_cdrom,`NO_CDROM`]. The package "
+"will _not_ be present on the installer images."
+msgstr ""
+"Продажа пакета запрещена. Это эквивалентно установке "
+"crossref:special[porting-restrictions-no_cdrom,`NO_CDROM`]. Пакет _не_ будет "
+"присутствовать на образах установщика."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3193
+#, no-wrap
+msgid "`auto-accept`"
+msgstr "`auto-accept`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3197
+msgid ""
+"License is accepted by default. Prompts to accept a license are not "
+"displayed unless the user has defined `LICENSES_ASK`. Use this unless the "
+"license states the user must accept the terms of the license."
+msgstr ""
+"Лицензия принимается по умолчанию. Запросы на принятие лицензии не "
+"отображаются, если пользователь не определил `LICENSES_ASK`. Используйте "
+"это, если в лицензии не указано, что пользователь должен принять условия "
+"лицензии."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3199
+#, no-wrap
+msgid "`no-auto-accept`"
+msgstr "`no-auto-accept`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3203
+msgid ""
+"License is not accepted by default. The user will always be asked to "
+"confirm the acceptance of this license. This must be used if the license "
+"states that the user must accept its terms."
+msgstr ""
+"Лицензия не принимается по умолчанию. Пользователь всегда будет запрошен на "
+"подтверждение принятия данной лицензии. Это должно использоваться, если "
+"лицензия требует, чтобы пользователь принял её условия."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3205
+msgid ""
+"When both `_permission_` and `no-_permission_` is present the `no-"
+"_permission_` will cancel `_permission_`."
+msgstr ""
+"Когда присутствуют и `_permission_`, и `no-_permission_`, то `no-"
+"_permission_` отменяет `_permission_`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3207
+msgid ""
+"When `_permission_` is not present, it is considered to be a `no-"
+"_permission_`."
+msgstr "Когда `_permission_` отсутствует, это считается как `no-_permission_`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3211
+msgid ""
+"Some missing permissions will prevent a port (and all ports depending on it) "
+"from being usable by package users:"
+msgstr ""
+"Некоторые отсутствующие разрешения могут сделать порт (и все зависящие от "
+"него порты) непригодными для использования пользователями пакетов:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3213
+msgid ""
+"A port without the `auto-accept` permission will never be be built and all "
+"the ports depending on it will be ignored."
+msgstr ""
+"Порт без разрешения `auto-accept` никогда не будет собран, и все зависящие "
+"от него порты будут проигнорированы."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3215
+msgid ""
+"A port without the `pkg-mirror` permission, and any ports that depend on it, "
+"will be removed after the build, thus ensuring they are not distributed."
+msgstr ""
+"Порт без разрешения `pkg-mirror`, а также любые порты, зависящие от него, "
+"будут удалены после сборки, что гарантирует их отсутствие в дистрибуции."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3218
+#, no-wrap
+msgid "Nonstandard License"
+msgstr "Нестандартная лицензия"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3222
+msgid ""
+"Read the terms of the license and translate those using the available "
+"permissions."
+msgstr ""
+"Прочитайте условия лицензии и переведите их, используя доступные разрешения."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3230
+#, no-wrap
+msgid ""
+"LICENSE= UNKNOWN\n"
+"LICENSE_NAME= unknown\n"
+"LICENSE_TEXT= This program is NOT in public domain.\\\n"
+" It can be freely distributed for non-commercial purposes only.\n"
+"LICENSE_PERMS= dist-mirror no-dist-sell pkg-mirror no-pkg-sell auto-accept\n"
+msgstr ""
+"LICENSE= UNKNOWN\n"
+"LICENSE_NAME= unknown\n"
+"LICENSE_TEXT= This program is NOT in public domain.\\\n"
+" It can be freely distributed for non-commercial purposes only.\n"
+"LICENSE_PERMS= dist-mirror no-dist-sell pkg-mirror no-pkg-sell auto-accept\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3235
+#, no-wrap
+msgid "Standard and Nonstandard Licenses"
+msgstr "Стандартные и нестандартные лицензии"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3241
+msgid ""
+"Read the terms of the license and express those using the available "
+"permissions. In case of doubt, please ask for guidance on the {freebsd-"
+"ports}."
+msgstr ""
+"Прочитайте условия лицензии и укажите их, используя доступные разрешения. В "
+"случае сомнений обратитесь за разъяснениями на {freebsd-ports}."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3249
+#, no-wrap
+msgid ""
+"LICENSE= WARSOW GPLv2\n"
+"LICENSE_COMB= multi\n"
+"LICENSE_NAME_WARSOW= Warsow Content License\n"
+"LICENSE_FILE_WARSOW= ${WRKSRC}/docs/license.txt\n"
+"LICENSE_PERMS_WARSOW= dist-mirror pkg-mirror auto-accept\n"
+msgstr ""
+"LICENSE= WARSOW GPLv2\n"
+"LICENSE_COMB= multi\n"
+"LICENSE_NAME_WARSOW= Warsow Content License\n"
+"LICENSE_FILE_WARSOW= ${WRKSRC}/docs/license.txt\n"
+"LICENSE_PERMS_WARSOW= dist-mirror pkg-mirror auto-accept\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3255
+msgid ""
+"When the permissions of the GPLv2 and the UNKNOWN licenses are mixed, the "
+"port ends up with `dist-mirror dist-sell pkg-mirror pkg-sell auto-accept "
+"dist-mirror no-dist-sell pkg-mirror no-pkg-sell auto-accept`. The `no-"
+"_permissions_` cancel the _permissions_. The resulting list of permissions "
+"are _dist-mirror pkg-mirror auto-accept_. The distribution files and the "
+"packages will not be available on the installer images."
+msgstr ""
+"Когда разрешения лицензий GPLv2 и UNKNOWN смешиваются, порт получает `dist-"
+"mirror dist-sell pkg-mirror pkg-sell auto-accept dist-mirror no-dist-sell "
+"pkg-mirror no-pkg-sell auto-accept`. Опции `no-_разрешения_` отменяют "
+"соответствующие _разрешения_. Итоговый список разрешений: _dist-mirror pkg-"
+"mirror auto-accept_. Файлы дистрибутива и пакеты не будут доступны в образах "
+"установщика."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3258
+#, no-wrap
+msgid "`LICENSE_GROUPS` and `LICENSE_GROUPS_NAME`"
+msgstr "`LICENSE_GROUPS` и `LICENSE_GROUPS_NAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3261
+msgid "Groups the license belongs."
+msgstr "Группы, к которым принадлежит лицензия."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3262
+#, no-wrap
+msgid "Predefined License Groups List"
+msgstr "Список предопределенных групп лицензий"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3266
+msgid ""
+"Free Software Foundation Approved, see the https://www.fsf.org/licensing/"
+"[FSF Licensing & Compliance Team]."
+msgstr ""
+"Одобрено Free Software Foundation, см. https://www.fsf.org/licensing/"
+"[Команда по лицензированию и соответствию FSF]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3268
+#, no-wrap
+msgid "`GPL`"
+msgstr "`GPL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3270
+msgid "GPL Compatible"
+msgstr "Совместимые с GPL"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3274
+msgid ""
+"OSI Approved, see the Open Source Initiative https://opensource.org/licenses/"
+"[Open Source Licenses] page."
+msgstr ""
+"Одобрено OSI, см. страницу https://opensource.org/licenses/[Открытых "
+"лицензий]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3278
+msgid ""
+"Comply with Copyfree Standard Definition, see the https://copyfree.org/"
+"standard/licenses/[Copyfree Licenses] page."
+msgstr ""
+"Соответствует определению стандарта Copyfree, см. страницу https://"
+"copyfree.org/standard/licenses/[лицензий Copyfree]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3282
+msgid "Font licenses"
+msgstr "Лицензии на шрифты"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3284
+#, no-wrap
+msgid "`LICENSE_NAME` and `LICENSE_NAME_NAME`"
+msgstr "`LICENSE_NAME` и `LICENSE_NAME_NAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3287
+msgid "Full name of the license."
+msgstr "Полное название лицензии."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3289
+#, no-wrap
+msgid "`LICENSE_NAME`"
+msgstr "`LICENSE_NAME`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3299
+#, no-wrap
+msgid ""
+"LICENSE= UNRAR\n"
+"LICENSE_NAME= UnRAR License\n"
+"LICENSE_FILE= ${WRKSRC}/license.txt\n"
+"LICENSE_PERMS= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept\n"
+msgstr ""
+"LICENSE= UNRAR\n"
+"LICENSE_NAME= UnRAR License\n"
+"LICENSE_FILE= ${WRKSRC}/license.txt\n"
+"LICENSE_PERMS= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3304
+#, no-wrap
+msgid "`LICENSE_FILE` and `LICENSE_FILE_NAME`"
+msgstr "`LICENSE_FILE` и `LICENSE_FILE_NAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3309
+msgid ""
+"Full path to the file containing the license text, usually [.filename]#$"
+"{WRKSRC}/some/file#. If the file is not in the distfile, and its content is "
+"too long to be put in crossref:makefiles[licenses-"
+"license_text,`LICENSE_TEXT`], put it in a new file in [.filename]#${FILESDIR}"
+"#."
+msgstr ""
+"Полный путь к файлу, содержащему текст лицензии, обычно [.filename]#$"
+"{WRKSRC}/some/file#. Если файл отсутствует в дистрибутиве, а его содержимое "
+"слишком длинное для размещения в crossref:makefiles[licenses-"
+"license_text,`LICENSE_TEXT`], поместите его в новый файл в [.filename]#$"
+"{FILESDIR}#."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3311
+#, no-wrap
+msgid "`LICENSE_FILE`"
+msgstr "`LICENSE_FILE`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3319
+#, no-wrap
+msgid ""
+"LICENSE=\tGPLv3+\n"
+"LICENSE_FILE=\t${WRKSRC}/COPYING\n"
+msgstr ""
+"LICENSE=\tGPLv3+\n"
+"LICENSE_FILE=\t${WRKSRC}/COPYING\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3324
+#, no-wrap
+msgid "`LICENSE_TEXT` and `LICENSE_TEXT_NAME`"
+msgstr "`LICENSE_TEXT` и `LICENSE_TEXT_NAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3328
+msgid ""
+"Text to use as a license. Useful when the license is not in the "
+"distribution files and its text is short."
+msgstr ""
+"Текст для использования в качестве лицензии. Полезно, когда лицензия "
+"отсутствует в файлах дистрибутива и её текст краток."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3330
+#, no-wrap
+msgid "`LICENSE_TEXT`"
+msgstr "`LICENSE_TEXT`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3341
+#, no-wrap
+msgid ""
+"LICENSE= UNKNOWN\n"
+"LICENSE_NAME= unknown\n"
+"LICENSE_TEXT= This program is NOT in public domain.\\\n"
+" It can be freely distributed for non-commercial purposes only,\\\n"
+" and THERE IS NO WARRANTY FOR THIS PROGRAM.\n"
+"LICENSE_PERMS= dist-mirror no-dist-sell pkg-mirror no-pkg-sell auto-accept\n"
+msgstr ""
+"LICENSE= UNKNOWN\n"
+"LICENSE_NAME= unknown\n"
+"LICENSE_TEXT= This program is NOT in public domain.\\\n"
+" It can be freely distributed for non-commercial purposes only,\\\n"
+" and THERE IS NO WARRANTY FOR THIS PROGRAM.\n"
+"LICENSE_PERMS= dist-mirror no-dist-sell pkg-mirror no-pkg-sell auto-accept\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3346
+#, no-wrap
+msgid "`LICENSE_DISTFILES` and `LICENSE_DISTFILES_NAME`"
+msgstr "`LICENSE_DISTFILES` и `LICENSE_DISTFILES_NAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3350
+msgid ""
+"The distribution files to which the licenses apply. Defaults to all the "
+"distribution files."
+msgstr ""
+"Файлы дистрибутива, к которым применяются лицензии. По умолчанию — все файлы "
+"дистрибутива."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3352
+#, no-wrap
+msgid "`LICENSE_DISTFILES`"
+msgstr "`LICENSE_DISTFILES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3357
+msgid ""
+"Used when the distribution files do not all have the same license. For "
+"example, one has a code license, and another has some artwork that cannot be "
+"redistributed:"
+msgstr ""
+"Используется, когда файлы дистрибутива имеют разные лицензии. Например, один "
+"файл имеет лицензию на код, а другой содержит некоторые произведения "
+"искусства, которые нельзя распространять:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3362
+#, no-wrap
+msgid ""
+"MASTER_SITES= SF/some-game\n"
+"DISTFILES= ${DISTNAME}${EXTRACT_SUFX} artwork.zip\n"
+msgstr ""
+"MASTER_SITES= SF/some-game\n"
+"DISTFILES= ${DISTNAME}${EXTRACT_SUFX} artwork.zip\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3370
+#, no-wrap
+msgid ""
+"LICENSE= BSD3CLAUSE ARTWORK\n"
+"LICENSE_COMB= dual\n"
+"LICENSE_NAME_ARTWORK= The game artwork license\n"
+"LICENSE_TEXT_ARTWORK= The README says that the files cannot be redistributed\n"
+"LICENSE_PERMS_ARTWORK= pkg-mirror pkg-sell auto-accept\n"
+"LICENSE_DISTFILES_BSD3CLAUSE= ${DISTNAME}${EXTRACT_SUFX}\n"
+"LICENSE_DISTFILES_ARTWORK= artwork.zip\n"
+msgstr ""
+"LICENSE= BSD3CLAUSE ARTWORK\n"
+"LICENSE_COMB= dual\n"
+"LICENSE_NAME_ARTWORK= The game artwork license\n"
+"LICENSE_TEXT_ARTWORK= The README says that the files cannot be redistributed\n"
+"LICENSE_PERMS_ARTWORK= pkg-mirror pkg-sell auto-accept\n"
+"LICENSE_DISTFILES_BSD3CLAUSE= ${DISTNAME}${EXTRACT_SUFX}\n"
+"LICENSE_DISTFILES_ARTWORK= artwork.zip\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3375
+#, no-wrap
+msgid "`LICENSE_COMB`"
+msgstr "`LICENSE_COMB`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3380
+msgid ""
+"Set to `multi` if all licenses apply. Set to `dual` if any license "
+"applies. Defaults to `single`."
+msgstr ""
+"Установите значение `multi`, если применяются все лицензии. Установите "
+"значение `dual`, если применяется любая из лицензий. По умолчанию "
+"используется значение `single`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3382
+#, no-wrap
+msgid "Dual Licenses"
+msgstr "Двойные лицензии"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3389
+msgid ""
+"When a port says \"This software may be distributed under the GNU General "
+"Public License or the Artistic License\", it means that either license can "
+"be used. Use this:"
+msgstr ""
+"Когда порт содержит указание «Это программное обеспечение может "
+"распространяться под GNU General Public License или Artistic License», это "
+"означает, что можно использовать любую из этих лицензий. Используйте "
+"следующее:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3394
+#, no-wrap
+msgid ""
+"LICENSE=\tART10 GPLv1\n"
+"LICENSE_COMB= dual\n"
+msgstr ""
+"LICENSE=\tART10 GPLv1\n"
+"LICENSE_COMB= dual\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3397
+msgid "If license files are provided, use this:"
+msgstr "Если предоставлены файлы лицензий, используйте это:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3404
+#, no-wrap
+msgid ""
+"LICENSE=\tART10 GPLv1\n"
+"LICENSE_COMB= dual\n"
+"LICENSE_FILE_ART10= ${WRKSRC}/Artistic\n"
+"LICENSE_FILE_GPLv1= ${WRKSRC}/Copying\n"
+msgstr ""
+"LICENSE=\tART10 GPLv1\n"
+"LICENSE_COMB= dual\n"
+"LICENSE_FILE_ART10= ${WRKSRC}/Artistic\n"
+"LICENSE_FILE_GPLv1= ${WRKSRC}/Copying\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3409
+#, no-wrap
+msgid "Multiple Licenses"
+msgstr "Множественные лицензии"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3414
+msgid ""
+"When part of a port has one license, and another part has a different "
+"license, use `multi`:"
+msgstr ""
+"Если часть порта имеет одну лицензию, а другая часть — другую, используйте "
+"`multi`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3419
+#, no-wrap
+msgid ""
+"LICENSE=\tGPLv2 LGPL21+\n"
+"LICENSE_COMB=\tmulti\n"
+msgstr ""
+"LICENSE=\tGPLv2 LGPL21+\n"
+"LICENSE_COMB=\tmulti\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3424
+#, no-wrap
+msgid "`PORTSCOUT`"
+msgstr "`PORTSCOUT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3427
+msgid ""
+"Portscout is an automated distfile check utility for the FreeBSD Ports "
+"Collection, described in detail in crossref:keeping-up[distfile-"
+"survey,Portscout: the FreeBSD Ports Distfile Scanner]."
+msgstr ""
+"Portscout — это автоматизированная утилита проверки distfile для Коллекции "
+"портов FreeBSD, подробно описанная в crossref:keeping-up[distfile-"
+"survey,Portscout: сканирование distfile портов FreeBSD]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3429
+msgid ""
+"`PORTSCOUT` defines special conditions within which the Portscout distfile "
+"scanner is restricted."
+msgstr ""
+"`PORTSCOUT` определяет специальные условия, в рамках которых работа сканера "
+"дистрибутивных файлов Portscout ограничена."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3431
+msgid "Situations where `PORTSCOUT` is set include:"
+msgstr "Ситуации, когда установлена переменная `PORTSCOUT`, включают:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3433
+msgid ""
+"When distfiles have to be ignored for specific versions. For example, to "
+"exclude version _8.2_ and version _8.3_ from distfile version checks because "
+"they are known to be broken, add:"
+msgstr ""
+"Когда необходимо игнорировать distfiles для определённых версий. Например, "
+"чтобы исключить версию _8.2_ и версию _8.3_ из проверок версий distfiles, "
+"так как известно, что они неработоспособны, добавьте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3437
+#, no-wrap
+msgid "PORTSCOUT=\tskipv:8.2,8.3\n"
+msgstr "PORTSCOUT=\tskipv:8.2,8.3\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3440
+msgid ""
+"When distfile version checks have to be disabled completely. For example, if "
+"a port is not going to be updated ever again, add:"
+msgstr ""
+"Когда проверки версий distfile необходимо полностью отключить. Например, "
+"если порт больше не будет обновляться, добавьте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3444
+#, no-wrap
+msgid "PORTSCOUT=\tignore:1\n"
+msgstr "PORTSCOUT=\tignore:1\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3447
+msgid ""
+"When specific versions or specific major and minor revisions of a distfile "
+"must be checked. For example, if only version _0.6.4_ must be monitored "
+"because newer versions have compatibility issues with FreeBSD, add:"
+msgstr ""
+"Когда необходимо проверять конкретные версии или определенные мажорные и "
+"минорные редакции distfile. Например, если нужно отслеживать только версию "
+"_0.6.4_, потому что более новые версии имеют проблемы совместимости с "
+"FreeBSD, добавьте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3451
+#, no-wrap
+msgid "PORTSCOUT=\tlimit:^0\\.6\\.4\n"
+msgstr "PORTSCOUT=\tlimit:^0\\.6\\.4\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3454
+msgid ""
+"When URLs listing the available versions differ from the download URLs. For "
+"example, to limit distfile version checks to the download page for the "
+"package:databases/pgtune[] port, add:"
+msgstr ""
+"Когда URL-адреса, перечисляющие доступные версии, отличаются от URL-адресов "
+"загрузки. Например, чтобы ограничить проверку версий distfile страницей "
+"загрузки для пакета: package:databases/pgtune[] добавьте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3458
+#, no-wrap
+msgid "PORTSCOUT=\tsite:http://www.renpy.org/dl/release/\n"
+msgstr "PORTSCOUT=\tsite:http://www.renpy.org/dl/release/\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3461
+#, no-wrap
+msgid "Dependencies"
+msgstr "Зависимости"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3468
+msgid ""
+"Many ports depend on other ports. This is a very convenient feature of most "
+"Unix-like operating systems, including FreeBSD. Multiple ports can share a "
+"common dependency, rather than bundling that dependency with every port or "
+"package that needs it. There are seven variables that can be used to ensure "
+"that all the required bits will be on the user's machine. There are also "
+"some pre-supported dependency variables for common cases, plus a few more to "
+"control the behavior of dependencies."
+msgstr ""
+"Многие порты зависят от других портов. Это очень удобная особенность "
+"большинства Unix-подобных операционных систем, включая FreeBSD. Несколько "
+"портов могут использовать общую зависимость вместо того, чтобы включать эту "
+"зависимость в каждый порт или пакет, который в ней нуждается. Существует "
+"семь переменных, которые можно использовать для обеспечения наличия всех "
+"необходимых компонентов на машине пользователя. Также есть предопределенные "
+"переменные зависимостей для распространенных случаев и несколько "
+"дополнительных для управления поведением зависимостей."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3474
+msgid ""
+"When software has extra dependencies that provide extra features, the base "
+"dependencies listed in `*_DEPENDS` should include the extra dependencies "
+"that would benefit most users. The base dependencies should never be a "
+"\"minimal\" dependency set. The goal is not to include every dependency "
+"possible. Only include those that will benefit most people."
+msgstr ""
+"Когда у программного обеспечения есть дополнительные зависимости, "
+"предоставляющие дополнительные возможности, основные зависимости, "
+"перечисленные в `*_DEPENDS`, должны включать те дополнительные зависимости, "
+"которые будут полезны большинству пользователей. Основные зависимости "
+"никогда не должны быть \"минимальным\" набором зависимостей. Цель состоит не "
+"в том, чтобы включить все возможные зависимости. Включайте только те, "
+"которые будут полезны большинству людей."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3477
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4830
+#, no-wrap
+msgid "`LIB_DEPENDS`"
+msgstr "`LIB_DEPENDS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3482
+msgid ""
+"This variable specifies the shared libraries this port depends on. It is a "
+"list of `_lib:dir_` tuples where `_lib_` is the name of the shared library, "
+"`_dir_` is the directory in which to find it in case it is not available. "
+"For example,"
+msgstr ""
+"Эта переменная определяет разделяемые библиотеки, от которых зависит данный "
+"порт. Это список кортежей вида `_lib:dir_`, где `_lib_` — имя разделяемой "
+"библиотеки, а `_dir_` — директория, в которой её следует искать, если она "
+"недоступна. Например,"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3486
+#, no-wrap
+msgid "LIB_DEPENDS= libjpeg.so:graphics/jpeg\n"
+msgstr "LIB_DEPENDS= libjpeg.so:graphics/jpeg\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3489
+msgid ""
+"will check for a shared jpeg library with any version, and descend into the "
+"[.filename]#graphics/jpeg# subdirectory of the ports tree to build and "
+"install it if it is not found."
+msgstr ""
+"проверит наличие общей библиотеки jpeg с любой версией и перейдет в "
+"подкаталог [.filename]#graphics/jpeg# дерева портов, чтобы собрать и "
+"установить её, если она не найдена."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3492
+msgid ""
+"The dependency is checked twice, once from within the `build` target and "
+"then from within the `install` target. Also, the name of the dependency is "
+"put into the package so that `pkg install` (see man:pkg-install[8]) will "
+"automatically install it if it is not on the user's system."
+msgstr ""
+"Зависимость проверяется дважды: один раз внутри цели `build` и затем внутри "
+"цели `install`. Также имя зависимости добавляется в пакет, чтобы `pkg "
+"install` (см. man:pkg-install[8]) автоматически установил её, если её нет в "
+"системе пользователя."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3494
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4831
+#, no-wrap
+msgid "`RUN_DEPENDS`"
+msgstr "`RUN_DEPENDS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3499
+msgid ""
+"This variable specifies executables or files this port depends on during run-"
+"time. It is a list of ``_path:dir_``[:``_target_``] tuples where `_path_` "
+"is the name of the executable or file, _dir_ is the directory in which to "
+"find it in case it is not available, and _target_ is the target to call in "
+"that directory. If _path_ starts with a slash (`/`), it is treated as a "
+"file and its existence is tested with `test -e`; otherwise, it is assumed to "
+"be an executable, and `which -s` is used to determine if the program exists "
+"in the search path."
+msgstr ""
+"Эта переменная определяет исполняемые файлы или файлы, от которых зависит "
+"порт во время выполнения. Это список кортежей ``_path:dir_``[:``_target_``], "
+"где `_path_` — это имя исполняемого файла или файла, _dir_ — директория, в "
+"которой его следует искать, если он недоступен, а _target_ — цель, которую "
+"нужно вызвать в этой директории. Если _path_ начинается с косой черты (`/`), "
+"он считается файлом, и его существование проверяется с помощью `test -e`; в "
+"противном случае предполагается, что это исполняемый файл, и `which -s` "
+"используется для проверки наличия программы в пути поиска."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3501
+msgid "For example,"
+msgstr "Например,"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3506
+#, no-wrap
+msgid ""
+"RUN_DEPENDS=\t${LOCALBASE}/news/bin/innd:news/inn \\\n"
+"\t\txmlcatmgr:textproc/xmlcatmgr\n"
+msgstr ""
+"RUN_DEPENDS=\t${LOCALBASE}/news/bin/innd:news/inn \\\n"
+"\t\txmlcatmgr:textproc/xmlcatmgr\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3510
+msgid ""
+"will check if the file or directory [.filename]#/usr/local/news/bin/innd# "
+"exists, and build and install it from the [.filename]#news/inn# subdirectory "
+"of the ports tree if it is not found. It will also see if an executable "
+"called `xmlcatmgr` is in the search path, and descend into "
+"[.filename]#textproc/xmlcatmgr# to build and install it if it is not found."
+msgstr ""
+"проверит, существует ли файл или каталог [.filename]#/usr/local/news/bin/"
+"innd#, и соберет и установит его из подкаталога [.filename]#news/inn# дерева "
+"портов, если он не найден. Также будет проверено, находится ли исполняемый "
+"файл `xmlcatmgr` в пути поиска, и если он не найден, будет выполнен переход "
+"в [.filename]#textproc/xmlcatmgr# для сборки и установки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3515
+msgid ""
+"In this case, `innd` is actually an executable; if an executable is in a "
+"place that is not expected to be in the search path, use the full pathname."
+msgstr ""
+"В этом случае `innd` является исполняемым файлом; если исполняемый файл "
+"находится в месте, которое не ожидается в пути поиска, используйте полный "
+"путь."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3520
+msgid "The official search `PATH` used on the ports build cluster is"
+msgstr "Официальный путь поиска `PATH`, используемый в кластере сборки портов"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3524
+#, no-wrap
+msgid "/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin\n"
+msgstr "/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3531
+msgid ""
+"The dependency is checked from within the `install` target. Also, the name "
+"of the dependency is put into the package so that `pkg install` (see man:pkg-"
+"install[8]) will automatically install it if it is not on the user's "
+"system. The _target_ part can be omitted if it is the same as "
+"`DEPENDS_TARGET`."
+msgstr ""
+"Зависимость проверяется внутри цели `install`. Также имя зависимости "
+"добавляется в пакет, чтобы команда `pkg install` (см. man:pkg-install[8]) "
+"автоматически установила её, если она отсутствует в системе пользователя. "
+"Часть _target_ может быть опущена, если она совпадает с `DEPENDS_TARGET`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3534
+msgid ""
+"A quite common situation is when `RUN_DEPENDS` is literally the same as "
+"`BUILD_DEPENDS`, especially if ported software is written in a scripted "
+"language or if it requires the same build and run-time environment. In this "
+"case, it is both tempting and intuitive to directly assign one to the other:"
+msgstr ""
+"Довольно распространённая ситуация, когда `RUN_DEPENDS` буквально совпадает "
+"с `BUILD_DEPENDS`, особенно если портируемое программное обеспечение "
+"написано на скриптовом языке или требует одинаковой среды для сборки и "
+"выполнения. В этом случае возникает соблазн и интуитивное желание напрямую "
+"присвоить одно другому:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3538
+#, no-wrap
+msgid "RUN_DEPENDS=\t${BUILD_DEPENDS}\n"
+msgstr "RUN_DEPENDS=\t${BUILD_DEPENDS}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3545
+msgid ""
+"However, such assignment can pollute run-time dependencies with entries not "
+"defined in the port's original `BUILD_DEPENDS`. This happens because of "
+"man:make[1]'s lazy evaluation of variable assignment. Consider a "
+"[.filename]#Makefile# with `USE_*`, which are processed by [.filename]#ports/"
+"Mk/bsd.*.mk# to augment initial build dependencies. For example, `USES= "
+"gmake` adds package:devel/gmake[] to `BUILD_DEPENDS`. To prevent such "
+"additional dependencies from polluting `RUN_DEPENDS`, create another "
+"variable with the current content of `BUILD_DEPENDS` and assign it to both "
+"`BUILD_DEPENDS` and `RUN_DEPENDS`:"
+msgstr ""
+"Однако такое присваивание может загрязнить зависимости во время выполнения "
+"записями, не определёнными в оригинальном `BUILD_DEPENDS` порта. Это "
+"происходит из-за ленивого вычисления присваивания переменных в man:make[1]. "
+"Рассмотрим [.filename]#Makefile# с `USE_*`, которые обрабатываются "
+"[.filename]#ports/Mk/bsd.*.mk# для добавления начальных зависимостей сборки. "
+"Например, `USES= gmake` добавляет package:devel/gmake[] в `BUILD_DEPENDS`. "
+"Чтобы предотвратить попадание таких дополнительных зависимостей в "
+"`RUN_DEPENDS`, создайте другую переменную с текущим содержимым "
+"`BUILD_DEPENDS` и присвойте её как `BUILD_DEPENDS`, так и `RUN_DEPENDS`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3552
+#, no-wrap
+msgid ""
+"MY_DEPENDS=\tsome:devel/some \\\n"
+"\t\tother:lang/other\n"
+"BUILD_DEPENDS=\t${MY_DEPENDS}\n"
+"RUN_DEPENDS=\t${MY_DEPENDS}\n"
+msgstr ""
+"MY_DEPENDS=\tsome:devel/some \\\n"
+"\t\tother:lang/other\n"
+"BUILD_DEPENDS=\t${MY_DEPENDS}\n"
+"RUN_DEPENDS=\t${MY_DEPENDS}\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3558
+msgid ""
+"_Do not_ use `:=` to assign `BUILD_DEPENDS` to `RUN_DEPENDS` or vice-versa. "
+"All variables are expanded immediately, which is exactly the wrong thing to "
+"do and almost always a failure."
+msgstr ""
+"_Не используйте_ `:=` для присваивания `BUILD_DEPENDS` в `RUN_DEPENDS` или "
+"наоборот. Все переменные раскрываются немедленно, что является совершенно "
+"неправильным и почти всегда приводит к ошибке."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3561
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4829
+#, no-wrap
+msgid "`BUILD_DEPENDS`"
+msgstr "`BUILD_DEPENDS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3566
+msgid ""
+"This variable specifies executables or files this port requires to build. "
+"Like `RUN_DEPENDS`, it is a list of ``_path:dir_``[:``_target_``] tuples. "
+"For example,"
+msgstr ""
+"Эта переменная указывает исполняемые файлы или файлы, необходимые для сборки "
+"данного порта. Как и `RUN_DEPENDS`, это список кортежей "
+"``_path:dir_``[:``_target_``]. Например,"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3570
+#, no-wrap
+msgid "BUILD_DEPENDS=\tunzip:archivers/unzip\n"
+msgstr "BUILD_DEPENDS=\tunzip:archivers/unzip\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3573
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3611
+msgid ""
+"will check for an executable called `unzip`, and descend into the "
+"[.filename]#archivers/unzip# subdirectory of the ports tree to build and "
+"install it if it is not found."
+msgstr ""
+"проверит наличие исполняемого файла с именем `unzip` и перейдет в подкаталог "
+"[.filename]#archivers/unzip# дерева портов, чтобы собрать и установить его, "
+"если он не будет найден."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3579
+msgid ""
+"\"build\" here means everything from extraction to compilation. The "
+"dependency is checked from within the `extract` target. The _target_ part "
+"can be omitted if it is the same as `DEPENDS_TARGET`"
+msgstr ""
+"\"build\" здесь означает все процессы от извлечения до компиляции. "
+"Зависимость проверяется внутри цели `extract`. Часть _target_ может быть "
+"опущена, если она совпадает с `DEPENDS_TARGET`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3582
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4828
+#, no-wrap
+msgid "`FETCH_DEPENDS`"
+msgstr "`FETCH_DEPENDS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3587
+msgid ""
+"This variable specifies executables or files this port requires to fetch. "
+"Like the previous two, it is a list of ``_path:dir_``[:``_target_``] "
+"tuples. For example,"
+msgstr ""
+"Эта переменная определяет исполняемые файлы или файлы, необходимые для "
+"загрузки этого порта. Как и предыдущие две, это список кортежей "
+"``_path:dir_``[:``_target_``]. Например,"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3591
+#, no-wrap
+msgid "FETCH_DEPENDS=\tncftp2:net/ncftp2\n"
+msgstr "FETCH_DEPENDS=\tncftp2:net/ncftp2\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3594
+msgid ""
+"will check for an executable called `ncftp2`, and descend into the "
+"[.filename]#net/ncftp2# subdirectory of the ports tree to build and install "
+"it if it is not found."
+msgstr ""
+"проверит наличие исполняемого файла с именем `ncftp2` и перейдет в "
+"подкаталог [.filename]#net/ncftp2# дерева портов для сборки и установки, "
+"если файл не будет найден."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3597
+msgid ""
+"The dependency is checked from within the `fetch` target. The _target_ part "
+"can be omitted if it is the same as `DEPENDS_TARGET`."
+msgstr ""
+"Зависимость проверяется внутри цели `fetch`. Часть _target_ может быть "
+"опущена, если она совпадает с `DEPENDS_TARGET`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3599
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4826
+#, no-wrap
+msgid "`EXTRACT_DEPENDS`"
+msgstr "`EXTRACT_DEPENDS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3604
+msgid ""
+"This variable specifies executables or files this port requires for "
+"extraction. Like the previous, it is a list of "
+"``_path:dir_``[:``_target_``] tuples. For example,"
+msgstr ""
+"Эта переменная указывает исполняемые файлы или файлы, которые требуются для "
+"извлечения данного порта. Как и предыдущая, это список кортежей "
+"``_path:dir_``[:``_target_``]. Например,"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3608
+#, no-wrap
+msgid "EXTRACT_DEPENDS=\tunzip:archivers/unzip\n"
+msgstr "EXTRACT_DEPENDS=\tunzip:archivers/unzip\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3614
+msgid ""
+"The dependency is checked from within the `extract` target. The _target_ "
+"part can be omitted if it is the same as `DEPENDS_TARGET`."
+msgstr ""
+"Зависимость проверяется внутри цели `extract`. Часть _target_ может быть "
+"опущена, если она совпадает с `DEPENDS_TARGET`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3618
+msgid ""
+"Use this variable only if the extraction does not already work (the default "
+"assumes `tar`) and cannot be made to work using `USES=tar`, `USES=lha` or "
+"`USES=zip` described in crossref:uses[uses,Using `USES` Macros]."
+msgstr ""
+"Используйте эту переменную только если извлечение уже не работает (по "
+"умолчанию предполагается `tar`) и не может быть исправлено с помощью "
+"`USES=tar`, `USES=lha` или `USES=zip`, как описано в "
+"crossref:uses[uses,Использование макросов `USES`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3621
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4827
+#, no-wrap
+msgid "`PATCH_DEPENDS`"
+msgstr "`PATCH_DEPENDS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3625
+msgid ""
+"This variable specifies executables or files this port requires to patch. "
+"Like the previous, it is a list of ``_path:dir_``[:``_target_``] tuples. For "
+"example,"
+msgstr ""
+"Эта переменная указывает исполняемые файлы или файлы, которые требуются "
+"этому порту для применения патчей. Как и предыдущая, это список кортежей "
+"``_path:dir_``[:``_target_``]. Например,"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3629
+#, no-wrap
+msgid "PATCH_DEPENDS=\t${NONEXISTENT}:java/jfc:extract\n"
+msgstr "PATCH_DEPENDS=\t${NONEXISTENT}:java/jfc:extract\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3632
+msgid ""
+"will descend into the [.filename]#java/jfc# subdirectory of the ports tree "
+"to extract it."
+msgstr ""
+"будет спускаться в подкаталог [.filename]#java/jfc# дерева портов для его "
+"извлечения."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3635
+msgid ""
+"The dependency is checked from within the `patch` target. The _target_ part "
+"can be omitted if it is the same as `DEPENDS_TARGET`."
+msgstr ""
+"Зависимость проверяется в рамках цели `patch`. Часть _target_ может быть "
+"опущена, если она совпадает с `DEPENDS_TARGET`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3637
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4908
+#, no-wrap
+msgid "`USES`"
+msgstr "`USES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3641
+msgid ""
+"Parameters can be added to define different features and dependencies used "
+"by the port. They are specified by adding this line to the "
+"[.filename]#Makefile#:"
+msgstr ""
+"Параметры могут быть добавлены для определения различных функций и "
+"зависимостей, используемых портом. Они указываются путем добавления этой "
+"строки в [.filename]#Makefile#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3645
+#, no-wrap
+msgid "USES= feature[:arguments]\n"
+msgstr "USES= feature[:arguments]\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3648
+msgid ""
+"For the complete list of values, please see crossref:uses[uses,Using `USES` "
+"Macros]."
+msgstr ""
+"Для полного списка значений обратитесь к crossref:uses[uses,Использование "
+"макросов `USES`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3652
+msgid ""
+"`USES` cannot be assigned after inclusion of [.filename]#bsd.port.pre.mk#."
+msgstr "`USES` нельзя назначать после включения [.filename]#bsd.port.pre.mk#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3655
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3677
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4205
+#, no-wrap
+msgid "`USE_*`"
+msgstr "`USE_*`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3662
+msgid ""
+"Several variables exist to define common dependencies shared by many ports. "
+"Their use is optional, but helps to reduce the verbosity of the port "
+"[.filename]##Makefile##s. Each of them is styled as `USE_*`. These "
+"variables may be used only in the port [.filename]##Makefile##s and "
+"[.filename]#ports/Mk/bsd.*.mk#. They are not meant for user-settable "
+"options - use `PORT_OPTIONS` for that purpose."
+msgstr ""
+"Существует несколько переменных для определения общих зависимостей, "
+"используемых многими портами. Их использование необязательно, но помогает "
+"сократить многословность [.filename]##Makefile## портов. Каждая из них "
+"оформлена как `USE_*`. Эти переменные могут использоваться только в "
+"[.filename]##Makefile## портов и [.filename]#ports/Mk/bsd.*.mk#. Они не "
+"предназначены для настраиваемых пользователем опций — для этой цели "
+"используйте `PORT_OPTIONS`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3667
+msgid ""
+"It is _always_ incorrect to set any `USE_*` in [.filename]#/etc/make.conf#. "
+"For instance, setting"
+msgstr ""
+"Всегда неправильно устанавливать любые `USE_*` в [.filename]#/etc/"
+"make.conf#. Например, установка"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3671
+#, no-wrap
+msgid "USE_GCC=X.Y\n"
+msgstr "USE_GCC=X.Y\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3674
+msgid ""
+"(where X.Y is version number) would add a dependency on gccXY for every "
+"port, including `lang/gccXY` itself!"
+msgstr ""
+"(где X.Y — номер версии) добавит зависимость от gccXY для каждого порта, "
+"включая сам `lang/gccXY`!"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3683
+#, no-wrap
+msgid "Means"
+msgstr "Значение"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3684
+#, no-wrap
+msgid "`USE_GCC`"
+msgstr "`USE_GCC`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3709
+#, no-wrap
+msgid ""
+"The port requires GCC (`gcc` or `{g-plus-plus}`) to build.\n"
+"Some ports need a specific, old GCC version, some require modern, recent versions.\n"
+"It is typically set to `yes` (means always use stable, modern GCC from ports per `GCC_DEFAULT` in [.filename]#Mk/bsd.default-versions.mk#).\n"
+"This is also the default value.\n"
+"The exact version can also be specified, with a value such as `10`.\n"
+"GCC from the base system is used when it satisfies the requested version, otherwise an appropriate compiler is built from ports, and `CC` and `CXX` are adjusted accordingly.\n"
+"The `:build` argument following the version specifier adds only a build time dependency to the port.\n"
+"\n"
+"For example:\n"
+"[example]\n"
+"====\n"
+"[.programlisting]\n"
+"....\n"
+"USE_GCC=yes\t\t# port requires a current version of GCC\n"
+"USE_GCC=11:build\t# port requires GCC 11 at build time only\n"
+"....\n"
+"====\n"
+"\n"
+"[NOTE]\n"
+"====\n"
+"`USE_GCC=any` is deprecated and should not be used in new ports\n"
+"===="
+msgstr ""
+"Порт требует GCC (`gcc` или `{g-plus-plus}`) для сборки.\n"
+"Некоторые порты нуждаются в определённой, старой версии GCC, другие требуют современных, актуальных версий.\n"
+"Обычно устанавливается в `yes` (означает всегда использовать стабильную, современную версию GCC из портов, согласно `GCC_DEFAULT` в [.filename]#Mk/bsd.default-versions.mk#).\n"
+"Это также значение по умолчанию.\n"
+"Точная версия также может быть указана, например, значением `10`.\n"
+"GCC из базовой системы используется, если он удовлетворяет запрашиваемой версии, в противном случае подходящий компилятор собирается из портов, а `CC` и `CXX` корректируются соответствующим образом.\n"
+"Аргумент `:build`, следующий за указанием версии, добавляет только зависимость во время сборки порта.\n"
+"\n"
+"Например:\n"
+"[example]\n"
+"====\n"
+"[.programlisting]\n"
+"....\n"
+"USE_GCC=yes\t\t# порт требует текущей версии GCC\n"
+"USE_GCC=11:build\t# порт требует GCC 11 только во время сборки\n"
+"....\n"
+"====\n"
+"\n"
+"[NOTE]\n"
+"====\n"
+"`USE_GCC=any` устарел и не должен использоваться в новых портах\n"
+"===="
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3718
+msgid ""
+"Variables related to gmake and [.filename]#configure# are described in "
+"crossref:special[building,Building Mechanisms], while autoconf, automake and "
+"libtool are described in crossref:special[using-autotools,Using GNU "
+"Autotools]. Perl related variables are described in crossref:special[using-"
+"perl,Using Perl]. X11 variables are listed in crossref:special[using-"
+"x11,Using X11]. crossref:special[using-gnome,Using Gnome] deals with GNOME "
+"and crossref:special[using-kde,Using KDE] with KDE related variables. "
+"crossref:special[using-java,Using Java] documents Java variables, while "
+"crossref:special[using-php,Web Applications, Apache and PHP] contains "
+"information on Apache, PHP and PEAR modules. Python is discussed in "
+"crossref:special[using-python,Using Python], while Ruby in "
+"crossref:special[using-ruby,Using Ruby]. crossref:special[using-sdl,Using "
+"SDL] provides variables used for SDL applications and finally, "
+"crossref:special[using-xfce,Using Xfce] contains information on Xfce."
+msgstr ""
+"Переменные, связанные с gmake и [.filename]#configure#, описаны в "
+"crossref:special[building,Механизмы сборки], тогда как autoconf, automake и "
+"libtool описаны в crossref:special[using-autotools,Использование GNU "
+"Autotools]. Переменные, связанные с Perl, описаны в crossref:special[using-"
+"perl,Использование Perl]. Переменные X11 перечислены в "
+"crossref:special[using-x11,Использование X11]. crossref:special[using-"
+"gnome,Использование GNOME] посвящено GNOME, а crossref:special[using-"
+"kde,Использование KDE] — переменным, связанным с KDE. crossref:special[using-"
+"java,Использование Java] документирует переменные Java, тогда как "
+"crossref:special[using-php,Веб-приложения, Apache и PHP] содержит информацию "
+"о модулях Apache, PHP и PEAR. Python обсуждается в crossref:special[using-"
+"python,Использование Python], а Ruby — в crossref:special[using-"
+"ruby,Использование Ruby]. crossref:special[using-sdl,Использование SDL] "
+"предоставляет переменные, используемые для приложений SDL, и, наконец, "
+"crossref:special[using-xfce,Использование Xfce] содержит информацию о Xfce."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3720
+#, no-wrap
+msgid "Minimal Version of a Dependency"
+msgstr "Минимальная версия зависимого пакета"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3723
+msgid ""
+"A minimal version of a dependency can be specified in any `*_DEPENDS` except "
+"`LIB_DEPENDS` using this syntax:"
+msgstr ""
+"Минимальная версия зависимого пакета может быть указана в любом `*_DEPENDS`, "
+"кроме `LIB_DEPENDS`, используя следующий синтаксис:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3727
+#, no-wrap
+msgid "p5-Spiffy>=0.26:devel/p5-Spiffy\n"
+msgstr "p5-Spiffy>=0.26:devel/p5-Spiffy\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3731
+msgid ""
+"The first field contains a dependent package name, which must match the "
+"entry in the package database, a comparison sign, and a package version. "
+"The dependency is satisfied if p5-Spiffy-0.26 or newer is installed on the "
+"machine."
+msgstr ""
+"Первое поле содержит имя зависимого пакета, которое должно соответствовать "
+"записи в базе данных пакетов, знак сравнения и версию пакета. Зависимость "
+"считается удовлетворённой, если на машине установлен p5-Spiffy-0.26 или "
+"новее."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3733
+#, no-wrap
+msgid "Notes on Dependencies"
+msgstr "Заметки о зависимостях"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3739
+msgid ""
+"As mentioned above, the default target to call when a dependency is required "
+"is `DEPENDS_TARGET`. It defaults to `install`. This is a user variable; it "
+"is never defined in a port's [.filename]#Makefile#. If the port needs a "
+"special way to handle a dependency, use the `:target` part of `*_DEPENDS` "
+"instead of redefining `DEPENDS_TARGET`."
+msgstr ""
+"Как упомянуто выше, цель по умолчанию, вызываемая при необходимости "
+"зависимости, — это `DEPENDS_TARGET`. По умолчанию она установлена в "
+"`install`. Это пользовательская переменная; она никогда не определяется в "
+"[.filename]#Makefile# порта. Если порту требуется особый способ обработки "
+"зависимости, используйте часть `:target` в `*_DEPENDS` вместо "
+"переопределения `DEPENDS_TARGET`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3743
+msgid ""
+"When running `make clean`, the port dependencies are automatically cleaned "
+"too. If this is not desirable, define `NOCLEANDEPENDS` in the environment. "
+"This may be particularly desirable if the port has something that takes a "
+"long time to rebuild in its dependency list, such as KDE, GNOME or Mozilla."
+msgstr ""
+"При выполнении `make clean` зависимости портов также автоматически "
+"очищаются. Если это нежелательно, определите переменную `NOCLEANDEPENDS` в "
+"окружении. Это может быть особенно полезно, если среди зависимостей порта "
+"есть что-то, что требует много времени для пересборки, например KDE, GNOME "
+"или Mozilla."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3748
+msgid ""
+"To depend on another port unconditionally, use the variable `${NONEXISTENT}` "
+"as the first field of `BUILD_DEPENDS` or `RUN_DEPENDS`. Use this only when "
+"the source of the other port is needed. Compilation time can be saved by "
+"specifying the target too. For instance"
+msgstr ""
+"Для безусловной зависимости от другого порта используйте переменную `$"
+"{NONEXISTENT}` в качестве первого поля `BUILD_DEPENDS` или `RUN_DEPENDS`. "
+"Используйте это только в случае, когда необходим исходный код другого порта. "
+"Время компиляции можно сократить, указав также цель. Например"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3752
+#, no-wrap
+msgid "BUILD_DEPENDS=\t${NONEXISTENT}:graphics/jpeg:extract\n"
+msgstr "BUILD_DEPENDS=\t${NONEXISTENT}:graphics/jpeg:extract\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3755
+msgid "will always descend to the `jpeg` port and extract it."
+msgstr "всегда будет переходить к порту `jpeg` и извлекать его."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3757
+#, no-wrap
+msgid "Circular Dependencies Are Fatal"
+msgstr "Циклические зависимости фатальны"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3762
+msgid "Do not introduce any circular dependencies into the ports tree!"
+msgstr "Не создавайте циклических зависимостей в дереве портов!"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3769
+msgid ""
+"The ports building technology does not tolerate circular dependencies. If "
+"one is introduced, someone, somewhere in the world, will have their FreeBSD "
+"installation broken almost immediately, with many others quickly to follow. "
+"These can really be hard to detect. If in doubt, before making that change, "
+"make sure to run: `cd /usr/ports; make index`. That process can be quite "
+"slow on older machines, but it may be able to save a large number of people, "
+"including yourself, a lot of grief in the process."
+msgstr ""
+"Технология сборки портов не допускает циклических зависимостей. Если такая "
+"зависимость будет добавлена, у кого-то в мире почти сразу окажется сломанной "
+"установка FreeBSD, а за этим последуют многие другие. Подобные проблемы "
+"бывает очень сложно обнаружить. Если есть сомнения, перед внесением "
+"изменений обязательно выполните: `cd /usr/ports; make index`. Этот процесс "
+"может быть довольно медленным на старых машинах, но он способен избавить "
+"множество людей, включая вас, от серьёзных проблем."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3771
+#, no-wrap
+msgid "Problems Caused by Automatic Dependencies"
+msgstr "Проблемы, вызванные автоматическими зависимостями"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3776
+msgid ""
+"Dependencies must be declared either explicitly or by using the "
+"crossref:makefiles[makefile-options,OPTIONS framework]. Using other methods "
+"like automatic detection complicates indexing, which causes problems for "
+"port and package management."
+msgstr ""
+"Зависимости должны быть объявлены явно или с использованием "
+"crossref:makefiles[makefile-options,OPTIONS framework]. Использование других "
+"методов, таких как автоматическое обнаружение, усложняет индексацию, что "
+"вызывает проблемы для управления портами и пакетами."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3778
+#, no-wrap
+msgid "Wrong Declaration of an Optional Dependency"
+msgstr "Неправильное объявление необязательной зависимости"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3785
+#, no-wrap
+msgid ".include <bsd.port.pre.mk>\n"
+msgstr ".include <bsd.port.pre.mk>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3789
+#, no-wrap
+msgid ""
+".if exists(${LOCALBASE}/bin/foo)\n"
+"LIB_DEPENDS=\tlibbar.so:foo/bar\n"
+".endif\n"
+msgstr ""
+".if exists(${LOCALBASE}/bin/foo)\n"
+"LIB_DEPENDS=\tlibbar.so:foo/bar\n"
+".endif\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3798
+msgid ""
+"The problem with trying to automatically add dependencies is that files and "
+"settings outside an individual port can change at any time. For example: an "
+"index is built, then a batch of ports are installed. But one of the ports "
+"installs the tested file. The index is now incorrect, because an installed "
+"port unexpectedly has a new dependency. The index may still be wrong even "
+"after rebuilding if other ports also determine their need for dependencies "
+"based on the existence of other files."
+msgstr ""
+"Проблема с попыткой автоматического добавления зависимостей заключается в "
+"том, что файлы и настройки за пределами отдельного порта могут измениться в "
+"любой момент. Например: индекс строится, затем устанавливается группа "
+"портов. Но один из портов устанавливает проверяемый файл. Теперь индекс "
+"неверен, потому что у установленного порта неожиданно появилась новая "
+"зависимость. Индекс может оставаться неверным даже после пересборки, если "
+"другие порты также определяют свою потребность в зависимостях на основе "
+"существования других файлов."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3800
+#, no-wrap
+msgid "Correct Declaration of an Optional Dependency"
+msgstr "Правильное объявление необязательной зависимости"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3808
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tBAR\n"
+"BAR_DESC=\tCalling cellphones via bar\n"
+msgstr ""
+"OPTIONS_DEFINE=\tBAR\n"
+"BAR_DESC=\tCalling cellphones via bar\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3810
+#, no-wrap
+msgid "BAR_LIB_DEPENDS=\tlibbar.so:foo/bar\n"
+msgstr "BAR_LIB_DEPENDS=\tlibbar.so:foo/bar\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3817
+msgid ""
+"Testing option variables is the correct method. It will not cause "
+"inconsistencies in the index of a batch of ports, provided the options were "
+"defined prior to the index build. Simple scripts can then be used to "
+"automate the building, installation, and updating of these ports and their "
+"packages."
+msgstr ""
+"Проверка переменных опций является правильным методом. Это не вызовет "
+"несоответствий в индексе группы портов, при условии что опции были "
+"определены до сборки индекса. Затем можно использовать простые скрипты для "
+"автоматизации сборки, установки и обновления этих портов и их пакетов."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3819
+#, no-wrap
+msgid "Slave Ports and `MASTERDIR`"
+msgstr "Подчиненные порты и `MASTERDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3826
+msgid ""
+"If the port needs to build slightly different versions of packages by having "
+"a variable (for instance, resolution, or paper size) take different values, "
+"create one subdirectory per package to make it easier for users to see what "
+"to do, but try to share as many files as possible between ports. Typically, "
+"by using variables cleverly, only a very short [.filename]#Makefile# is "
+"needed in all but one of the directories. In the sole "
+"[.filename]#Makefile#, use `MASTERDIR` to specify the directory where the "
+"rest of the files are. Also, use a variable as part of "
+"crossref:makefiles[porting-pkgname,`PKGNAMESUFFIX`] so the packages will "
+"have different names."
+msgstr ""
+"Если порту необходимо собирать немного разные версии пакетов, используя "
+"переменную (например, разрешение или размер бумаги) с разными значениями, "
+"создайте по одному подкаталогу для каждого пакета, чтобы пользователям было "
+"проще понять, что делать, но старайтесь максимально использовать общие файлы "
+"между портами. Обычно, при грамотном использовании переменных, во всех "
+"каталогах, кроме одного, требуется лишь очень короткий "
+"[.filename]#Makefile#. В единственном [.filename]#Makefile# укажите "
+"директорию с остальными файлами с помощью `MASTERDIR`. Также используйте "
+"переменную как часть crossref:makefiles[porting-pkgname,`PKGNAMESUFFIX`], "
+"чтобы пакеты имели разные имена."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3829
+msgid ""
+"This will be best demonstrated by an example. This is part of "
+"[.filename]#print/pkfonts300/Makefile#;"
+msgstr ""
+"Это лучше всего продемонстрировать на примере. Это часть файла "
+"[.filename]#print/pkfonts300/Makefile#;"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3835
+#, no-wrap
+msgid ""
+"PORTNAME=\tpkfonts${RESOLUTION}\n"
+"PORTVERSION=\t1.0\n"
+"DISTFILES=\tpk${RESOLUTION}.tar.gz\n"
+msgstr ""
+"PORTNAME=\tpkfonts${RESOLUTION}\n"
+"PORTVERSION=\t1.0\n"
+"DISTFILES=\tpk${RESOLUTION}.tar.gz\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3837
+#, no-wrap
+msgid "PLIST=\t\t${PKGDIR}/pkg-plist.${RESOLUTION}\n"
+msgstr "PLIST=\t\t${PKGDIR}/pkg-plist.${RESOLUTION}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3850
+#, no-wrap
+msgid ""
+".if !defined(RESOLUTION)\n"
+"RESOLUTION=\t300\n"
+".else\n"
+".if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \\\n"
+"\t${RESOLUTION} != 300 && ${RESOLUTION} != 360 && \\\n"
+"\t${RESOLUTION} != 400 && ${RESOLUTION} != 600\n"
+".BEGIN:\n"
+"\t@${ECHO_MSG} \"Error: invalid value for RESOLUTION: \\\"${RESOLUTION}\\\"\"\n"
+"\t@${ECHO_MSG} \"Possible values are: 118, 240, 300, 360, 400 and 600.\"\n"
+"\t@${FALSE}\n"
+".endif\n"
+".endif\n"
+msgstr ""
+".if !defined(RESOLUTION)\n"
+"RESOLUTION=\t300\n"
+".else\n"
+".if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \\\n"
+"\t${RESOLUTION} != 300 && ${RESOLUTION} != 360 && \\\n"
+"\t${RESOLUTION} != 400 && ${RESOLUTION} != 600\n"
+".BEGIN:\n"
+"\t@${ECHO_MSG} \"Error: invalid value for RESOLUTION: \\\"${RESOLUTION}\\\"\"\n"
+"\t@${ECHO_MSG} \"Possible values are: 118, 240, 300, 360, 400 and 600.\"\n"
+"\t@${FALSE}\n"
+".endif\n"
+".endif\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3854
+msgid ""
+"package:print/pkfonts300[] also has all the regular patches, package files, "
+"etc. Running `make` there, it will take the default value for the "
+"resolution (300) and build the port normally."
+msgstr ""
+"Пакет `package:print/pkfonts300[]` также содержит все обычные исправления, "
+"файлы пакетов и т.д. При запуске `make` в этом месте будет взято значение "
+"разрешения по умолчанию (300), и порт будет собран в обычном режиме."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3856
+msgid ""
+"As for other resolutions, this is the _entire_ [.filename]#print/pkfonts360/"
+"Makefile#:"
+msgstr ""
+"Что касается других разрешений, это _полный_ [.filename]#print/pkfonts360/"
+"Makefile#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3861
+#, no-wrap
+msgid ""
+"RESOLUTION=\t360\n"
+"MASTERDIR=\t${.CURDIR}/../pkfonts300\n"
+msgstr ""
+"RESOLUTION=\t360\n"
+"MASTERDIR=\t${.CURDIR}/../pkfonts300\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3863
+#, no-wrap
+msgid ".include\t\"${MASTERDIR}/Makefile\"\n"
+msgstr ".include\t\"${MASTERDIR}/Makefile\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3868
+msgid ""
+"([.filename]#print/pkfonts118/Makefile#, [.filename]#print/pkfonts600/"
+"Makefile#, and all the other are similar). `MASTERDIR` definition tells "
+"[.filename]#bsd.port.mk# that the regular set of subdirectories like "
+"`FILESDIR` and `SCRIPTDIR` are to be found under [.filename]#pkfonts300#. "
+"The `RESOLUTION=360` line will override the `RESOLUTION=300` line in "
+"[.filename]#pkfonts300/Makefile# and the port will be built with resolution "
+"set to 360."
+msgstr ""
+"([.filename]#print/pkfonts118/Makefile#, [.filename]#print/pkfonts600/"
+"Makefile# и все остальные аналогичны). Определение `MASTERDIR` указывает "
+"[.filename]#bsd.port.mk#, что стандартный набор подкаталогов, таких как "
+"`FILESDIR` и `SCRIPTDIR`, следует искать в [.filename]#pkfonts300#. Строка "
+"`RESOLUTION=360` переопределит строку `RESOLUTION=300` в "
+"[.filename]#pkfonts300/Makefile#, и порт будет собран с разрешением, "
+"установленным на 360."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3870
+#, no-wrap
+msgid "Man Pages"
+msgstr "Страницы Cправочника"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3875
+msgid ""
+"If the port anchors its man tree somewhere other than `PREFIX`, use "
+"`MANDIRS` to specify those directories. Note that the files corresponding "
+"to manual pages must be placed in [.filename]#pkg-plist# along with the rest "
+"of the files. The purpose of `MANDIRS` is to enable automatic compression "
+"of manual pages, therefore the file names are suffixed with [.filename]#.gz#."
+msgstr ""
+"Если порт размещает дерево man в другом месте, отличном от `PREFIX`, "
+"используйте `MANDIRS` для указания этих каталогов. Обратите внимание, что "
+"файлы, соответствующие страницам руководства, должны быть добавлены в "
+"[.filename]#pkg-plist# вместе с остальными файлами. Назначение `MANDIRS` — "
+"обеспечить автоматическое сжатие страниц руководства, поэтому имена файлов "
+"имеют суффикс [.filename]#.gz#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3877
+#, no-wrap
+msgid "Info Files"
+msgstr "Файлы информации"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3884
+msgid ""
+"If the package needs to install GNU info files, list them in `INFO` (without "
+"the trailing `.info`), one entry per document. These files are assumed to "
+"be installed to [.filename]#PREFIX/INFO_PATH#. Change `INFO_PATH` if the "
+"package uses a different location. However, this is not recommended. These "
+"entries contain just the path relative to [.filename]#PREFIX/INFO_PATH#. "
+"For example, package:lang/gcc34[] installs info files to [.filename]#PREFIX/"
+"INFO_PATH/gcc34#, and `INFO` will be something like this:"
+msgstr ""
+"Если пакету требуется установить файлы GNU info, перечислите их в `INFO` "
+"(без завершающего `.info`), по одному документу на строку. Предполагается, "
+"что эти файлы будут установлены в [.filename]#PREFIX/INFO_PATH#. Измените "
+"`INFO_PATH`, если пакет использует другое расположение. Однако это не "
+"рекомендуется. Эти записи содержат только путь относительно "
+"[.filename]#PREFIX/INFO_PATH#. Например, пакет package:lang/gcc34[] "
+"устанавливает файлы info в [.filename]#PREFIX/INFO_PATH/gcc34#, и `INFO` "
+"будет выглядеть примерно так:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3888
+#, no-wrap
+msgid "INFO=\tgcc34/cpp gcc34/cppinternals gcc34/g77 ...\n"
+msgstr "INFO=\tgcc34/cpp gcc34/cppinternals gcc34/g77 ...\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3891
+msgid ""
+"Appropriate installation/de-installation code will be automatically added to "
+"the temporary [.filename]#pkg-plist# before package registration."
+msgstr ""
+"Соответствующий код установки/удаления будет автоматически добавлен во "
+"временный файл [.filename]#pkg-plist# перед регистрацией пакета."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3893
+#, no-wrap
+msgid "Makefile Options"
+msgstr "Параметры Makefile"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3898
+msgid ""
+"Many applications can be built with optional or differing configurations. "
+"Examples include choice of natural (human) language, GUI versus command-"
+"line, or type of database to support. Users may need a different "
+"configuration than the default, so the ports system provides hooks the port "
+"author can use to control which variant will be built. Supporting these "
+"options properly will make users happy, and effectively provide two or more "
+"ports for the price of one."
+msgstr ""
+"Многие приложения могут быть собраны с дополнительными или различными "
+"конфигурациями. Примеры включают выбор естественного (человеческого) языка, "
+"графический интерфейс или командная строка, тип поддерживаемой базы данных. "
+"Пользователям может потребоваться конфигурация, отличная от стандартной, "
+"поэтому система портов предоставляет хуки, которые автор порта может "
+"использовать для управления вариантом сборки. Правильная поддержка этих "
+"опций сделает пользователей счастливыми и эффективно предоставит два или "
+"более порта по цене одного."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3900
+#, no-wrap
+msgid "`OPTIONS`"
+msgstr "`OPTIONS`"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3903
+#, no-wrap
+msgid "Background"
+msgstr "Пояснения"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3909
+msgid ""
+"`OPTIONS_*` give the user installing the port a dialog showing the available "
+"options, and then saves those options to [.filename]#${PORT_DBDIR}/$"
+"{OPTIONS_NAME}/options#. The next time the port is built, the options are "
+"reused. `PORT_DBDIR` defaults to [.filename]#/var/db/ports#. "
+"`OPTIONS_NAME` is to the port origin with an underscore as the space "
+"separator, for example, for package:dns/bind99[] it will be `dns_bind99`."
+msgstr ""
+"`OPTIONS_*` предоставляют пользователю, устанавливающему порт, диалоговое "
+"окно с доступными опциями, после чего сохраняют выбранные опции в "
+"[.filename]#${PORT_DBDIR}/${OPTIONS_NAME}/options#. При следующей сборке "
+"порта эти опции будут использованы повторно. `PORT_DBDIR` по умолчанию имеет "
+"значение [.filename]#/var/db/ports#. `OPTIONS_NAME` соответствует имени "
+"порта (origin) с заменой разделителя на подчёркивания, например, для "
+"package:dns/bind99[] это будет `dns_bind99`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3913
+msgid ""
+"When the user runs `make config` (or runs `make build` for the first time), "
+"the framework checks for [.filename]#${PORT_DBDIR}/${OPTIONS_NAME}/"
+"options#. If that file does not exist, the values of `OPTIONS_*` are used, "
+"and a dialog box is displayed where the options can be enabled or disabled. "
+"Then [.filename]#options# is saved and the configured variables are used "
+"when building the port."
+msgstr ""
+"Когда пользователь запускает `make config` (или впервые запускает `make "
+"build`), система проверяет наличие файла [.filename]#${PORT_DBDIR}/$"
+"{OPTIONS_NAME}/options#. Если этот файл не существует, используются значения "
+"`OPTIONS_*`, и отображается диалоговое окно, где можно включить или "
+"отключить опции. Затем файл [.filename]#options# сохраняется, а настроенные "
+"переменные используются при сборке порта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3915
+msgid ""
+"If a new version of the port adds new `OPTIONS`, the dialog will be "
+"presented to the user with the saved values of old `OPTIONS` prefilled."
+msgstr ""
+"Если новая версия порта добавляет новые `OPTIONS`, пользователю будет "
+"показан диалог с сохранёнными значениями старых `OPTIONS`, заполненными "
+"заранее."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3918
+msgid ""
+"`make showconfig` shows the saved configuration. Use `make rmconfig` to "
+"remove the saved configuration."
+msgstr ""
+"`make showconfig` показывает сохранённую конфигурацию. Используйте `make "
+"rmconfig` для удаления сохранённой конфигурации."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3920
+#, no-wrap
+msgid "Syntax"
+msgstr "Синтаксис"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3924
+msgid ""
+"`OPTIONS_DEFINE` contains a list of `OPTIONS` to be used. These are "
+"independent of each other and are not grouped:"
+msgstr ""
+"`OPTIONS_DEFINE` содержит список `OPTIONS`, которые будут использоваться. "
+"Они независимы друг от друга и не сгруппированы:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3928
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4357
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4654
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4711
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4775
+#, no-wrap
+msgid "OPTIONS_DEFINE=\tOPT1 OPT2\n"
+msgstr "OPTIONS_DEFINE=\tOPT1 OPT2\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3931
+msgid ""
+"Once defined, `OPTIONS` are described (optional, but strongly recommended):"
+msgstr ""
+"После определения `OPTIONS` описываются (необязательно, но настоятельно "
+"рекомендуется):"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3940
+#, no-wrap
+msgid ""
+"OPT1_DESC=\tDescribe OPT1\n"
+"OPT2_DESC=\tDescribe OPT2\n"
+"OPT3_DESC=\tDescribe OPT3\n"
+"OPT4_DESC=\tDescribe OPT4\n"
+"OPT5_DESC=\tDescribe OPT5\n"
+"OPT6_DESC=\tDescribe OPT6\n"
+msgstr ""
+"OPT1_DESC=\tDescribe OPT1\n"
+"OPT2_DESC=\tDescribe OPT2\n"
+"OPT3_DESC=\tDescribe OPT3\n"
+"OPT4_DESC=\tDescribe OPT4\n"
+"OPT5_DESC=\tDescribe OPT5\n"
+"OPT6_DESC=\tDescribe OPT6\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3944
+msgid ""
+"[.filename]#ports/Mk/bsd.options.desc.mk# has descriptions for many common "
+"`OPTIONS`. While often useful, override them if the description is "
+"insufficient for the port."
+msgstr ""
+"[.filename]#ports/Mk/bsd.options.desc.mk# содержит описания для многих "
+"распространённых `OPTIONS`. Хотя они часто полезны, переопределите их, если "
+"описание недостаточно для порта."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3950
+msgid ""
+"When describing options, view it from the perspective of the user: \"What "
+"functionality does it change?\" and \"Why would I want to enable this?\" Do "
+"not just repeat the name. For example, describing the `NLS` option as "
+"\"include NLS support\" does not help the user, who can already see the "
+"option name but may not know what it means. Describing it as \"Native "
+"Language Support via gettext utilities\" is much more helpful."
+msgstr ""
+"При описании параметров рассматривайте их с точки зрения пользователя: "
+"«Какую функциональность это изменяет?» и «Зачем мне включать этот параметр?» "
+"Не просто повторяйте название. Например, описание параметра `NLS` как "
+"«включить поддержку NLS» не помогает пользователю, который уже видит "
+"название параметра, но может не знать, что оно означает. Описание вроде "
+"«Поддержка родного языка с помощью утилиты gettext» гораздо полезнее."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3956
+msgid ""
+"Option names are always in all uppercase. They cannot use mixed case or "
+"lowercase."
+msgstr ""
+"Названия параметров всегда пишутся в верхнем регистре. Они не могут "
+"использовать смешанный регистр или нижний регистр."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3959
+msgid ""
+"`OPTIONS` can be grouped as radio choices, where only one choice from each "
+"group is allowed:"
+msgstr ""
+"`OPTIONS` могут быть сгруппированы как переключаемые варианты, где "
+"допускается только один выбор из каждой группы:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3964
+#, no-wrap
+msgid ""
+"OPTIONS_SINGLE=\t\tSG1\n"
+"OPTIONS_SINGLE_SG1=\tOPT3 OPT4\n"
+msgstr ""
+"OPTIONS_SINGLE=\t\tSG1\n"
+"OPTIONS_SINGLE_SG1=\tOPT3 OPT4\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3970
+msgid ""
+"There _must_ be one of each `OPTIONS_SINGLE` group selected at all times for "
+"the options to be valid. One option of each group _must_ be added to "
+"`OPTIONS_DEFAULT`."
+msgstr ""
+"В каждый момент времени _должна_ быть выбрана одна опция из каждой группы "
+"`OPTIONS_SINGLE`, чтобы параметры были действительными. Один вариант из "
+"каждой группы _должен_ быть добавлен в `OPTIONS_DEFAULT`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3973
+msgid ""
+"`OPTIONS` can be grouped as radio choices, where none or only one choice "
+"from each group is allowed:"
+msgstr ""
+"`OPTIONS` могут быть сгруппированы как переключаемые варианты, где ни один "
+"или только один вариант из каждой группы разрешён:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3978
+#, no-wrap
+msgid ""
+"OPTIONS_RADIO=\t\tRG1\n"
+"OPTIONS_RADIO_RG1=\tOPT7 OPT8\n"
+msgstr ""
+"OPTIONS_RADIO=\t\tRG1\n"
+"OPTIONS_RADIO_RG1=\tOPT7 OPT8\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3981
+msgid ""
+"`OPTIONS` can also be grouped as \"multiple-choice\" lists, where _at least "
+"one_ option must be enabled:"
+msgstr ""
+"`OPTIONS` также могут быть сгруппированы в виде списков \"множественного "
+"выбора\", где _хотя бы одна_ опция должна быть включена:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3986
+#, no-wrap
+msgid ""
+"OPTIONS_MULTI=\t\tMG1\n"
+"OPTIONS_MULTI_MG1=\tOPT5 OPT6\n"
+msgstr ""
+"OPTIONS_MULTI=\t\tMG1\n"
+"OPTIONS_MULTI_MG1=\tOPT5 OPT6\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3989
+msgid ""
+"`OPTIONS` can also be grouped as \"multiple-choice\" lists, where none or "
+"any option can be enabled:"
+msgstr ""
+"`OPTIONS` также могут быть сгруппированы в виде списков \"множественного "
+"выбора\", где ни одна или любые опции могут быть включены:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3994
+#, no-wrap
+msgid ""
+"OPTIONS_GROUP=\t\tGG1\n"
+"OPTIONS_GROUP_GG1=\tOPT9 OPT10\n"
+msgstr ""
+"OPTIONS_GROUP=\t\tGG1\n"
+"OPTIONS_GROUP_GG1=\tOPT9 OPT10\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3997
+msgid ""
+"`OPTIONS` are unset by default, unless they are listed in `OPTIONS_DEFAULT`:"
+msgstr ""
+"`OPTIONS` по умолчанию не установлены, если они не перечислены в "
+"`OPTIONS_DEFAULT`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4001
+#, no-wrap
+msgid "OPTIONS_DEFAULT=\tOPT1 OPT3 OPT6\n"
+msgstr "OPTIONS_DEFAULT=\tOPT1 OPT3 OPT6\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4007
+msgid ""
+"`OPTIONS` definitions must appear before the inclusion of "
+"[.filename]#bsd.port.options.mk#. `PORT_OPTIONS` values can only be tested "
+"after the inclusion of [.filename]#bsd.port.options.mk#. Inclusion of "
+"[.filename]#bsd.port.pre.mk# can be used instead, too, and is still widely "
+"used in ports written before the introduction of "
+"[.filename]#bsd.port.options.mk#. But be aware that some variables will not "
+"work as expected after the inclusion of [.filename]#bsd.port.pre.mk#, "
+"typically some `USE_*` flags."
+msgstr ""
+"Определения `OPTIONS` должны быть указаны до включения файла "
+"[.filename]#bsd.port.options.mk#. Значения `PORT_OPTIONS` можно проверять "
+"только после включения [.filename]#bsd.port.options.mk#. Включение "
+"[.filename]#bsd.port.pre.mk# также может использоваться и до сих пор широко "
+"применяется в портах, написанных до введения "
+"[.filename]#bsd.port.options.mk#. Однако следует учитывать, что некоторые "
+"переменные не будут работать как ожидается после включения "
+"[.filename]#bsd.port.pre.mk#, обычно это некоторые флаги `USE_*`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4009
+#, no-wrap
+msgid "Simple Use of `OPTIONS`"
+msgstr "Простое использование `OPTIONS`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4017
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tFOO BAR\n"
+"OPTIONS_DEFAULT=FOO\n"
+msgstr ""
+"OPTIONS_DEFINE=\tFOO BAR\n"
+"OPTIONS_DEFAULT=FOO\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4020
+#, no-wrap
+msgid ""
+"FOO_DESC=\tOption foo support\n"
+"BAR_DESC=\tFeature bar support\n"
+msgstr ""
+"FOO_DESC=\tOption foo support\n"
+"BAR_DESC=\tFeature bar support\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4024
+#, no-wrap
+msgid ""
+"# Will add --with-foo / --without-foo\n"
+"FOO_CONFIGURE_WITH=\tfoo\n"
+"BAR_RUN_DEPENDS=\tbar:bar/bar\n"
+msgstr ""
+"# Will add --with-foo / --without-foo\n"
+"FOO_CONFIGURE_WITH=\tfoo\n"
+"BAR_RUN_DEPENDS=\tbar:bar/bar\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4026
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4090
+#, no-wrap
+msgid ".include <bsd.port.mk>\n"
+msgstr ".include <bsd.port.mk>\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4031
+#, no-wrap
+msgid "Check for Unset Port `OPTIONS`"
+msgstr "Проверка неустановленных `OPTIONS` порта"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4040
+#, no-wrap
+msgid ""
+".if ! ${PORT_OPTIONS:MEXAMPLES}\n"
+"CONFIGURE_ARGS+=--without-examples\n"
+".endif\n"
+msgstr ""
+".if ! ${PORT_OPTIONS:MEXAMPLES}\n"
+"CONFIGURE_ARGS+=--without-examples\n"
+".endif\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4044
+msgid ""
+"The form shown above is discouraged. The preferred method is using a "
+"configure knob to really enable and disable the feature to match the option:"
+msgstr ""
+"Приведённая выше форма не рекомендуется. Предпочтительный метод — "
+"использование параметра configure для фактического включения и отключения "
+"функции в соответствии с опцией:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4049
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4086
+#, no-wrap
+msgid ""
+"# Will add --with-examples / --without-examples\n"
+"EXAMPLES_CONFIGURE_WITH=\texamples\n"
+msgstr ""
+"# Will add --with-examples / --without-examples\n"
+"EXAMPLES_CONFIGURE_WITH=\texamples\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4054
+#, no-wrap
+msgid "Practical Use of `OPTIONS`"
+msgstr "Пример реального использования `OPTIONS`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4062
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\t\tEXAMPLES\n"
+"OPTIONS_DEFAULT=\tPGSQL LDAP SSL\n"
+msgstr ""
+"OPTIONS_DEFINE=\t\tEXAMPLES\n"
+"OPTIONS_DEFAULT=\tPGSQL LDAP SSL\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4065
+#, no-wrap
+msgid ""
+"OPTIONS_SINGLE=\t\tBACKEND\n"
+"OPTIONS_SINGLE_BACKEND=\tMYSQL PGSQL BDB\n"
+msgstr ""
+"OPTIONS_SINGLE=\t\tBACKEND\n"
+"OPTIONS_SINGLE_BACKEND=\tMYSQL PGSQL BDB\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4068
+#, no-wrap
+msgid ""
+"OPTIONS_MULTI=\t\tAUTH\n"
+"OPTIONS_MULTI_AUTH=\tLDAP PAM SSL\n"
+msgstr ""
+"OPTIONS_MULTI=\t\tAUTH\n"
+"OPTIONS_MULTI_AUTH=\tLDAP PAM SSL\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4076
+#, no-wrap
+msgid ""
+"EXAMPLES_DESC=\t\tInstall extra examples\n"
+"MYSQL_DESC=\t\tUse MySQL as backend\n"
+"PGSQL_DESC=\t\tUse PostgreSQL as backend\n"
+"BDB_DESC=\t\tUse Berkeley DB as backend\n"
+"LDAP_DESC=\t\tBuild with LDAP authentication support\n"
+"PAM_DESC=\t\tBuild with PAM support\n"
+"SSL_DESC=\t\tBuild with OpenSSL support\n"
+msgstr ""
+"EXAMPLES_DESC=\t\tInstall extra examples\n"
+"MYSQL_DESC=\t\tUse MySQL as backend\n"
+"PGSQL_DESC=\t\tUse PostgreSQL as backend\n"
+"BDB_DESC=\t\tUse Berkeley DB as backend\n"
+"LDAP_DESC=\t\tBuild with LDAP authentication support\n"
+"PAM_DESC=\t\tBuild with PAM support\n"
+"SSL_DESC=\t\tBuild with OpenSSL support\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4081
+#, no-wrap
+msgid ""
+"# Will add USE_PGSQL=yes\n"
+"PGSQL_USE=\tpgsql=yes\n"
+"# Will add --enable-postgres / --disable-postgres\n"
+"PGSQL_CONFIGURE_ENABLE=\tpostgres\n"
+msgstr ""
+"# Will add USE_PGSQL=yes\n"
+"PGSQL_USE=\tpgsql=yes\n"
+"# Will add --enable-postgres / --disable-postgres\n"
+"PGSQL_CONFIGURE_ENABLE=\tpostgres\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4083
+#, no-wrap
+msgid "ICU_LIB_DEPENDS=\tlibicuuc.so:devel/icu\n"
+msgstr "ICU_LIB_DEPENDS=\tlibicuuc.so:devel/icu\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4088
+#, no-wrap
+msgid "# Check other OPTIONS\n"
+msgstr "# Check other OPTIONS\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4095
+#, no-wrap
+msgid "Default Options"
+msgstr "Опции по умолчанию"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4098
+msgid "These options are always on by default."
+msgstr "Эти опции всегда включены по умолчанию."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4100
+msgid "`DOCS` - build and install documentation."
+msgstr "`DOCS` — сборка и установка документации."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4101
+msgid "`NLS` - Native Language Support."
+msgstr "`NLS` — Поддержка родного языка."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4102
+msgid "`EXAMPLES` - build and install examples."
+msgstr "`EXAMPLES` — сборка и установка примеров."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4103
+msgid "`IPV6` - IPv6 protocol support."
+msgstr "`IPV6` — Поддержка протокола IPv6."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4108
+msgid ""
+"There is no need to add these to `OPTIONS_DEFAULT`. To have them active, "
+"and show up in the options selection dialog, however, they must be added to "
+"`OPTIONS_DEFINE`."
+msgstr ""
+"Нет необходимости добавлять их в `OPTIONS_DEFAULT`. Однако, чтобы они были "
+"активны и отображались в диалоге выбора опций, их необходимо добавить в "
+"`OPTIONS_DEFINE`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4111
+#, no-wrap
+msgid "Feature Auto-Activation"
+msgstr "Автоматическая активация функций"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4115
+msgid ""
+"When using a GNU configure script, keep an eye on which optional features "
+"are activated by auto-detection. Explicitly disable optional features that "
+"are not needed by adding `--without-xxx` or `--disable-xxx` in "
+"`CONFIGURE_ARGS`."
+msgstr ""
+"При использовании скрипта GNU configure следите за тем, какие дополнительные "
+"функции активируются автоматическим определением. Явно отключите ненужные "
+"дополнительные функции, добавив `--without-xxx` или `--disable-xxx` в "
+"`CONFIGURE_ARGS`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4117
+#, no-wrap
+msgid "Wrong Handling of an Option"
+msgstr "Неправильная обработка опции"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4127
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MFOO}\n"
+"LIB_DEPENDS+=\t\tlibfoo.so:devel/foo\n"
+"CONFIGURE_ARGS+=\t--enable-foo\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MFOO}\n"
+"LIB_DEPENDS+=\t\tlibfoo.so:devel/foo\n"
+"CONFIGURE_ARGS+=\t--enable-foo\n"
+".endif\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4135
+msgid ""
+"In the example above, imagine a library libfoo is installed on the system. "
+"The user does not want this application to use libfoo, so he toggled the "
+"option off in the `make config` dialog. But the application's configure "
+"script detects the library present in the system and includes its support in "
+"the resulting executable. Now when the user decides to remove libfoo from "
+"the system, the ports system does not protest (no dependency on libfoo was "
+"recorded) but the application breaks."
+msgstr ""
+"В приведённом выше примере представьте, что библиотека libfoo установлена в "
+"системе. Пользователь не хочет, чтобы это приложение использовало libfoo, "
+"поэтому он отключил соответствующую опцию в диалоге `make config`. Однако "
+"скрипт configure приложения обнаруживает библиотеку в системе и включает её "
+"поддержку в итоговом исполняемом файле. Теперь, когда пользователь решает "
+"удалить libfoo из системы, система портов не протестует (зависимость от "
+"libfoo не была записана), но приложение перестаёт работать."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4137
+#, no-wrap
+msgid "Correct Handling of an Option"
+msgstr "Правильная обработка опции"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4146
+#, no-wrap
+msgid ""
+"FOO_LIB_DEPENDS=\t\tlibfoo.so:devel/foo\n"
+"# Will add --enable-foo / --disable-foo\n"
+"FOO_CONFIGURE_ENABLE=\tfoo\n"
+msgstr ""
+"FOO_LIB_DEPENDS=\t\tlibfoo.so:devel/foo\n"
+"# Will add --enable-foo / --disable-foo\n"
+"FOO_CONFIGURE_ENABLE=\tfoo\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4154
+msgid ""
+"Under some circumstances, the shorthand conditional syntax can cause "
+"problems with complex constructs. The errors are usually `Malformed "
+"conditional`, an alternative syntax can be used."
+msgstr ""
+"В некоторых случаях сокращенный синтаксис условных выражений может вызывать "
+"проблемы со сложными конструкциями. Ошибки обычно имеют вид `Malformed "
+"conditional`, тогда можно использовать альтернативный синтаксис."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4158
+#, no-wrap
+msgid ".if !empty(VARIABLE:MVALUE)\n"
+msgstr ".if !empty(VARIABLE:MVALUE)\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4161
+msgid "as an alternative to"
+msgstr "в качестве альтернативы"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4165
+#, no-wrap
+msgid ".if ${VARIABLE:MVALUE}\n"
+msgstr ".if ${VARIABLE:MVALUE}\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4170
+#, no-wrap
+msgid "Options Helpers"
+msgstr "Помощники параметров"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4174
+msgid ""
+"There are some macros to help simplify conditional values which differ based "
+"on the options set. For easier access, a comprehensive list is provided:"
+msgstr ""
+"Существуют макросы, которые помогают упростить условные значения, "
+"различающиеся в зависимости от установленных опций. Для удобства приведён "
+"полный список:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4175
+#, no-wrap
+msgid "`PLIST_SUB`, `SUB_LIST`"
+msgstr "`PLIST_SUB`, `SUB_LIST`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4177
+msgid ""
+"For automatic `%%_OPT_%%` and `%%NO__OPT__%%` generation, see "
+"crossref:makefiles[options_sub, `OPTIONS_SUB`]."
+msgstr ""
+"Для автоматической генерации `%%_OPT_%%` и `%%NO__OPT__%%` см. "
+"crossref:makefiles[options_sub, `OPTIONS_SUB`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4179
+msgid ""
+"For more complex usage, see crossref:makefiles[options-variables, Generic "
+"Variables Replacement, `OPT_VARIABLE` and `OPT_VARIABLE_OFF`]."
+msgstr ""
+"Для более сложных случаев использования см. crossref:makefiles[options-"
+"variables, Замена общих переменных, `OPT_VARIABLE` и `OPT_VARIABLE_OFF`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4180
+#, no-wrap
+msgid "`CONFIGURE_ARGS`"
+msgstr "`CONFIGURE_ARGS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4182
+msgid ""
+"For `--enable-_x_` and `--disable-_x_`, see crossref:makefiles[options-"
+"configure_enable, `OPT_CONFIGURE_ENABLE`]."
+msgstr ""
+"Для информации о `--enable-_x_` и `--disable-_x_` см. "
+"crossref:makefiles[options-configure_enable, `OPT_CONFIGURE_ENABLE`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4184
+msgid ""
+"For `--with-_x_` and `--without-_x_`, see crossref:makefiles[options-"
+"configure_with, `OPT_CONFIGURE_WITH`]."
+msgstr ""
+"О `--with-_x_` и `--without-_x_` см. crossref:makefiles[options-"
+"configure_with, `OPT_CONFIGURE_WITH`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4186
+msgid ""
+"For all other cases, see crossref:makefiles[options-configure_on, "
+"`OPT_CONFIGURE_ON` and `OPT_CONFIGURE_OFF`]."
+msgstr ""
+"Во всех остальных случаях см. crossref:makefiles[options-configure_on, "
+"`OPT_CONFIGURE_ON` и `OPT_CONFIGURE_OFF`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4187
+#, no-wrap
+msgid "`CMAKE_ARGS`"
+msgstr "`CMAKE_ARGS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4190
+msgid ""
+"For arguments that are booleans (`on`, `off`, `true`, `false`, `0`, `1`) see "
+"crossref:makefiles[options-cmake_bool, `OPT_CMAKE_BOOL` and "
+"`OPT_CMAKE_BOOL_OFF`]."
+msgstr ""
+"Для аргументов, которые являются булевыми значениями (`on`, `off`, `true`, "
+"`false`, `0`, `1`), см. crossref:makefiles[options-cmake_bool, "
+"`OPT_CMAKE_BOOL` и `OPT_CMAKE_BOOL_OFF`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4192
+msgid ""
+"For all other cases, see crossref:makefiles[options-cmake_on, `OPT_CMAKE_ON` "
+"and `OPT_CMAKE_OFF`]."
+msgstr ""
+"Для всех остальных случаев см. crossref:makefiles[options-cmake_on, "
+"`OPT_CMAKE_ON` и `OPT_CMAKE_OFF`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4193
+#, no-wrap
+msgid "`MESON_ARGS`"
+msgstr "`MESON_ARGS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4195
+msgid ""
+"For arguments that take `true` or `false`, see crossref:makefiles[options-"
+"meson_true, `OPT_MESON_TRUE` and `OPT_MESON_FALSE`]."
+msgstr ""
+"Для аргументов, принимающих `true` или `false`, см. "
+"crossref:makefiles[options-meson_true, `OPT_MESON_TRUE` и `OPT_MESON_FALSE`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4197
+msgid ""
+"For arguments that take `yes` or `no`, use crossref:makefiles[options-"
+"meson_yes, `OPT_MESON_YES` and `OPT_MESON_NO`]."
+msgstr ""
+"Для аргументов, принимающих `yes` или `no`, используйте "
+"crossref:makefiles[options-meson_yes, `OPT_MESON_YES` и `OPT_MESON_NO`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4199
+msgid ""
+"For arguments that take `enabled` or `disabled`, see "
+"crossref:makefiles[options-meson_enabled, `OPT_MESON_ENABLED` and "
+"`OPT_MESON_DISABLED`]."
+msgstr ""
+"Для аргументов, принимающих `enabled` или `disabled`, см. "
+"crossref:makefiles[options-meson_enabled, `OPT_MESON_ENABLED` и "
+"`OPT_MESON_DISABLED`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4201
+msgid ""
+"For all other cases, use crossref:makefiles[options-meson_on, `OPT_MESON_ON` "
+"and `OPT_MESON_OFF`]."
+msgstr ""
+"Во всех остальных случаях используйте crossref:makefiles[options-meson_on, "
+"`OPT_MESON_ON` и `OPT_MESON_OFF`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4202
+#, no-wrap
+msgid "`QMAKE_ARGS`"
+msgstr "`QMAKE_ARGS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4204
+msgid ""
+"See crossref:makefiles[options-qmake_on, `OPT_QMAKE_ON` and `OPT_QMAKE_OFF`]."
+msgstr ""
+"См. crossref:makefiles[options-qmake_on, `OPT_QMAKE_ON` и `OPT_QMAKE_OFF`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4207
+msgid "See crossref:makefiles[options-use, `OPT_USE` and `OPT_USE_OFF`]."
+msgstr "См. crossref:makefiles[options-use, `OPT_USE` и `OPT_USE_OFF`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4208
+#, no-wrap
+msgid "`*_DEPENDS`"
+msgstr "`*_DEPENDS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4210
+msgid ""
+"See crossref:makefiles[options-dependencies, Dependencies, `OPT_DEPTYPE` and "
+"`OPT_DEPTYPE_OFF`]."
+msgstr ""
+"См. crossref:makefiles[options-dependencies, Зависимости, `OPT_DEPTYPE` и "
+"`OPT_DEPTYPE_OFF`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4211
+#, no-wrap
+msgid "`*` (Any variable)"
+msgstr "`*` (Любая переменная)"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4214
+msgid ""
+"The most used variables have direct helpers, see crossref:makefiles[options-"
+"variables, Generic Variables Replacement, `OPT_VARIABLE` and "
+"`OPT_VARIABLE_OFF`]."
+msgstr ""
+"Наиболее используемые переменные имеют своих помощников, см. "
+"crossref:makefiles[options-variables, Замена Общих Переменных, "
+"`OPT_VARIABLE` и `OPT_VARIABLE_OFF`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4216
+msgid ""
+"For any variable without a specific helper, see crossref:makefiles[options-"
+"vars, `OPT_VARS` and `OPT_VARS_OFF`]."
+msgstr ""
+"Для любой переменной без специального помощника см. "
+"crossref:makefiles[options-vars, `OPT_VARS` и `OPT_VARS_OFF`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4217
+#, no-wrap
+msgid "Options dependencies"
+msgstr "Зависимости параметров"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4220
+msgid ""
+"When an option need another option to work, see crossref:makefiles[options-"
+"implies, `OPT_IMPLIES`]."
+msgstr ""
+"Когда для работы опции требуется другая опция, см. "
+"crossref:makefiles[options-implies, `OPT_IMPLIES`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4221
+#, no-wrap
+msgid "Options conflicts"
+msgstr "Конфликты опций"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4224
+msgid ""
+"When an option cannot work if another is also enabled, see "
+"crossref:makefiles[options-prevents, `OPT_PREVENTS` and `OPT_PREVENTS_MSG`]."
+msgstr ""
+"Когда опция не может работать, если включена другая, см. "
+"crossref:makefiles[options-prevents, `OPT_PREVENTS` и `OPT_PREVENTS_MSG`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4225
+#, no-wrap
+msgid "Build targets"
+msgstr "Цели сборки"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4228
+msgid ""
+"When an option need some extra processing, see crossref:makefiles[options-"
+"targets, Additional Build Targets, `_target_-_OPT_-on` and `_target_-_OPT_-"
+"off`]."
+msgstr ""
+"Когда для опции требуется дополнительная обработка, см. "
+"crossref:makefiles[options-targets, Дополнительные цели сборки, `_target_-"
+"_OPT_-on` и `_target_-_OPT_-off`]."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4230
+#, no-wrap
+msgid "`OPTIONS_SUB`"
+msgstr "`OPTIONS_SUB`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4233
+msgid ""
+"If `OPTIONS_SUB` is set to `yes` then each of the options added to "
+"`OPTIONS_DEFINE` will be added to `PLIST_SUB` and `SUB_LIST`, for example:"
+msgstr ""
+"Если `OPTIONS_SUB` установлен в `yes`, то каждая из опций, добавленных в "
+"`OPTIONS_DEFINE`, будет добавлена в `PLIST_SUB` и `SUB_LIST`, например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4238
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPTIONS_SUB=\tyes\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPTIONS_SUB=\tyes\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4241
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4280
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4316
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4353
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4388
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4425
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4461
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4495
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4525
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4557
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4589
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4618
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4771
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4844
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4921
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5011
+msgid "is equivalent to:"
+msgstr "эквивалентно:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4245
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4284
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4320
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4392
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4429
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4465
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4499
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4529
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4561
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4593
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4622
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4848
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4925
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5002
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5015
+#, no-wrap
+msgid "OPTIONS_DEFINE=\tOPT1\n"
+msgstr "OPTIONS_DEFINE=\tOPT1\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4247
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4286
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4322
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4359
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4394
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4431
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4467
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4501
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4531
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4563
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4595
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4624
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4656
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4713
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4779
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4850
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4927
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5017
+#, no-wrap
+msgid ".include <bsd.port.options.mk>\n"
+msgstr ".include <bsd.port.options.mk>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4255
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"PLIST_SUB+=\tOPT1=\"\" NO_OPT1=\"@comment \"\n"
+"SUB_LIST+=\tOPT1=\"\" NO_OPT1=\"@comment \"\n"
+".else\n"
+"PLIST_SUB+=\tOPT1=\"@comment \" NO_OPT1=\"\"\n"
+"SUB_LIST+=\tOPT1=\"@comment \" NO_OPT1=\"\"\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"PLIST_SUB+=\tOPT1=\"\" NO_OPT1=\"@comment \"\n"
+"SUB_LIST+=\tOPT1=\"\" NO_OPT1=\"@comment \"\n"
+".else\n"
+"PLIST_SUB+=\tOPT1=\"@comment \" NO_OPT1=\"\"\n"
+"SUB_LIST+=\tOPT1=\"@comment \" NO_OPT1=\"\"\n"
+".endif\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4261
+msgid ""
+"The value of `OPTIONS_SUB` is ignored. Setting it to any value will add "
+"`PLIST_SUB` and `SUB_LIST` entries for _all_ options."
+msgstr ""
+"Значение `OPTIONS_SUB` игнорируется. Установка любого значения добавит "
+"записи `PLIST_SUB` и `SUB_LIST` для _всех_ опций."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4264
+#, no-wrap
+msgid "`OPT_USE` and `OPT_USE_OFF`"
+msgstr "`OPT_USE` и `OPT_USE_OFF`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4270
+msgid ""
+"When option _OPT_ is selected, for each `_key=value_` pair in ``OPT_USE``, "
+"_value_ is appended to the corresponding `USE_KEY`. If _value_ has spaces "
+"in it, replace them with commas and they will be changed back to spaces "
+"during processing. `OPT_USE_OFF` works the same way, but when `OPT` is "
+"_not_ selected. For example:"
+msgstr ""
+"Когда выбрана опция _OPT_, для каждой пары `_ключ=значение_` в ``OPT_USE``, "
+"_значение_ добавляется к соответствующему `USE_KEY`. Если _значение_ "
+"содержит пробелы, замените их запятыми, и они будут преобразованы обратно в "
+"пробелы во время обработки. `OPT_USE_OFF` работает аналогично, но когда "
+"`OPT` _не_ выбрана. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4277
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_USES=\txorg\n"
+"OPT1_USE=\tmysql=yes xorg=x11,xextproto,xext,xrandr\n"
+"OPT1_USE_OFF=\topenssl=yes\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_USES=\txorg\n"
+"OPT1_USE=\tmysql=yes xorg=x11,xextproto,xext,xrandr\n"
+"OPT1_USE_OFF=\topenssl=yes\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4294
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"USE_MYSQL=\tyes\n"
+"USES+=\t\txorg\n"
+"USE_XORG=\tx11 xextproto xext xrandr\n"
+".else\n"
+"USE_OPENSSL=\tyes\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"USE_MYSQL=\tyes\n"
+"USES+=\t\txorg\n"
+"USE_XORG=\tx11 xextproto xext xrandr\n"
+".else\n"
+"USE_OPENSSL=\tyes\n"
+".endif\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4297
+#, no-wrap
+msgid "`CONFIGURE_ARGS` Helpers"
+msgstr "Помощники `CONFIGURE_ARGS`"
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4300
+#, no-wrap
+msgid "`OPT_CONFIGURE_ENABLE`"
+msgstr "`OPT_CONFIGURE_ENABLE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4307
+msgid ""
+"When option _OPT_ is selected, for each _entry_ in `OPT_CONFIGURE_ENABLE` "
+"then `--enable-_entry_` is appended to `CONFIGURE_ARGS`. When option _OPT_ "
+"is _not_ selected, `--disable-_entry_` is appended to `CONFIGURE_ARGS`. An "
+"optional argument can be specified with an `=` symbol. This argument is "
+"only appended to the `--enable-_entry_` configure option. For example:"
+msgstr ""
+"Когда выбрана опция _OPT_, для каждого _элемента_ в `OPT_CONFIGURE_ENABLE` к "
+"`CONFIGURE_ARGS` добавляется `--enable-_элемент_`. Если опция _OPT_ _не_ "
+"выбрана, к `CONFIGURE_ARGS` добавляется `--disable-_элемент_`. "
+"Необязательный аргумент может быть указан с помощью символа `=`. Этот "
+"аргумент добавляется только к опции конфигурации `--enable-_элемент_`. "
+"Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4313
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1 OPT2\n"
+"OPT1_CONFIGURE_ENABLE=\ttest1 test2\n"
+"OPT2_CONFIGURE_ENABLE=\ttest2=exhaustive\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1 OPT2\n"
+"OPT1_CONFIGURE_ENABLE=\ttest1 test2\n"
+"OPT2_CONFIGURE_ENABLE=\ttest2=exhaustive\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4328
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"CONFIGURE_ARGS+=\t--enable-test1 --enable-test2\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--disable-test1 --disable-test2\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"CONFIGURE_ARGS+=\t--enable-test1 --enable-test2\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--disable-test1 --disable-test2\n"
+".endif\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4334
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT2}\n"
+"CONFIGURE_ARGS+=\t--enable-test2=exhaustive\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--disable-test2\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT2}\n"
+"CONFIGURE_ARGS+=\t--enable-test2=exhaustive\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--disable-test2\n"
+".endif\n"
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4337
+#, no-wrap
+msgid "`OPT_CONFIGURE_WITH`"
+msgstr "`OPT_CONFIGURE_WITH`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4344
+msgid ""
+"When option _OPT_ is selected, for each _entry_ in `_OPT_CONFIGURE_WITH` "
+"then `--with-_entry_` is appended to `CONFIGURE_ARGS`. When option _OPT_ is "
+"_not_ selected, `--without-_entry_` is appended to `CONFIGURE_ARGS`. An "
+"optional argument can be specified with an `=` symbol. This argument is "
+"only appended to the `--with-_entry_` configure option. For example:"
+msgstr ""
+"Когда выбрана опция _OPT_, для каждого _элемента_ в `_OPT_CONFIGURE_WITH` к "
+"`CONFIGURE_ARGS` добавляется `--with-_элемент_`. Если опция _OPT_ _не_ "
+"выбрана, к `CONFIGURE_ARGS` добавляется `--without-_элемент_`. "
+"Необязательный аргумент можно указать с помощью символа `=`. Этот аргумент "
+"добавляется только к опции конфигурации `--with-_элемент_`. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4350
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1 OPT2\n"
+"OPT1_CONFIGURE_WITH=\ttest1\n"
+"OPT2_CONFIGURE_WITH=\ttest2=exhaustive\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1 OPT2\n"
+"OPT1_CONFIGURE_WITH=\ttest1\n"
+"OPT2_CONFIGURE_WITH=\ttest2=exhaustive\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4365
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"CONFIGURE_ARGS+=\t--with-test1\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--without-test1\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"CONFIGURE_ARGS+=\t--with-test1\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--without-test1\n"
+".endif\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4371
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT2}\n"
+"CONFIGURE_ARGS+=\t--with-test2=exhaustive\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--without-test2\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT2}\n"
+"CONFIGURE_ARGS+=\t--with-test2=exhaustive\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--without-test2\n"
+".endif\n"
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4374
+#, no-wrap
+msgid "`OPT_CONFIGURE_ON` and `OPT_CONFIGURE_OFF`"
+msgstr "`OPT_CONFIGURE_ON` и `OPT_CONFIGURE_OFF`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4379
+msgid ""
+"When option _OPT_ is selected, the value of `OPT_CONFIGURE_ON`, if defined, "
+"is appended to `CONFIGURE_ARGS`. `OPT_CONFIGURE_OFF` works the same way, "
+"but when `OPT` is _not_ selected. For example:"
+msgstr ""
+"Когда выбрана опция _OPT_, значение `OPT_CONFIGURE_ON`, если оно определено, "
+"добавляется к `CONFIGURE_ARGS`. `OPT_CONFIGURE_OFF` работает аналогично, но "
+"когда `OPT` _не_ выбрана. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4385
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_CONFIGURE_ON=\t--add-test\n"
+"OPT1_CONFIGURE_OFF=\t--no-test\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_CONFIGURE_ON=\t--add-test\n"
+"OPT1_CONFIGURE_OFF=\t--no-test\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4400
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"CONFIGURE_ARGS+=\t--add-test\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--no-test\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"CONFIGURE_ARGS+=\t--add-test\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--no-test\n"
+".endif\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4406
+msgid ""
+"Most of the time, the helpers in crossref:makefiles[options-"
+"configure_enable, `OPT_CONFIGURE_ENABLE`] and crossref:makefiles[options-"
+"configure_with, `OPT_CONFIGURE_WITH`] provide a shorter and more "
+"comprehensive functionality."
+msgstr ""
+"В большинстве случаев помощники crossref:makefiles[options-configure_enable, "
+"`OPT_CONFIGURE_ENABLE`] и crossref:makefiles[options-configure_with, "
+"`OPT_CONFIGURE_WITH`] предоставляют более короткий и понятный функционал."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4409
+#, no-wrap
+msgid "`CMAKE_ARGS` Helpers"
+msgstr "Помощники `CMAKE_ARGS`"
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4412
+#, no-wrap
+msgid "`OPT_CMAKE_ON` and `OPT_CMAKE_OFF`"
+msgstr "`OPT_CMAKE_ON` и `OPT_CMAKE_OFF`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4416
+msgid ""
+"When option _OPT_ is selected, the value of `OPT_CMAKE_ON`, if defined, is "
+"appended to `CMAKE_ARGS`. `OPT_CMAKE_OFF` works the same way, but when `OPT` "
+"is _not_ selected. For example:"
+msgstr ""
+"Когда выбрана опция _OPT_, значение `OPT_CMAKE_ON`, если оно определено, "
+"добавляется к `CMAKE_ARGS`. `OPT_CMAKE_OFF` работает аналогично, но когда "
+"`OPT` _не_ выбрана. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4422
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_CMAKE_ON=\t-DTEST:BOOL=true -DDEBUG:BOOL=true\n"
+"OPT1_CMAKE_OFF=\t-DOPTIMIZE:BOOL=true\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_CMAKE_ON=\t-DTEST:BOOL=true -DDEBUG:BOOL=true\n"
+"OPT1_CMAKE_OFF=\t-DOPTIMIZE:BOOL=true\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4437
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"CMAKE_ARGS+=\t-DTEST:BOOL=true -DDEBUG:BOOL=true\n"
+".else\n"
+"CMAKE_ARGS+=\t-DOPTIMIZE:BOOL=true\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"CMAKE_ARGS+=\t-DTEST:BOOL=true -DDEBUG:BOOL=true\n"
+".else\n"
+"CMAKE_ARGS+=\t-DOPTIMIZE:BOOL=true\n"
+".endif\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4443
+msgid ""
+"See crossref:makefiles[options-cmake_bool, `OPT_CMAKE_BOOL` and "
+"`OPT_CMAKE_BOOL_OFF`] for a shorter helper when the value is boolean."
+msgstr ""
+"См. crossref:makefiles[options-cmake_bool, `OPT_CMAKE_BOOL` и "
+"`OPT_CMAKE_BOOL_OFF`] для более краткой записи, когда значение является "
+"булевым."
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4446
+#, no-wrap
+msgid "`OPT_CMAKE_BOOL` and `OPT_CMAKE_BOOL_OFF`"
+msgstr "`OPT_CMAKE_BOOL` и `OPT_CMAKE_BOOL_OFF`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4452
+msgid ""
+"When option _OPT_ is selected, for each _entry_ in `OPT_CMAKE_BOOL` then `-"
+"D_entry_:BOOL=true` is appended to `CMAKE_ARGS`. When option _OPT_ is _not_ "
+"selected, `-D_entry_:BOOL=false` is appended to `CONFIGURE_ARGS`. "
+"`OPT_CMAKE_BOOL_OFF` is the opposite, `-D_entry_:BOOL=false` is appended to "
+"`CMAKE_ARGS` when the option is selected, and `-D_entry_:BOOL=true` when the "
+"option is _not_ selected. For example:"
+msgstr ""
+"Когда выбрана опция _OPT_, для каждого _элемента_ в `OPT_CMAKE_BOOL` "
+"добавляется `-D_элемент_:BOOL=true` к `CMAKE_ARGS`. Если опция _OPT_ _не_ "
+"выбрана, `-D_элемент_:BOOL=false` добавляется к `CONFIGURE_ARGS`. "
+"`OPT_CMAKE_BOOL_OFF` работает наоборот: `-D_элемент_:BOOL=false` добавляется "
+"к `CMAKE_ARGS`, когда опция выбрана, и `-D_элемент_:BOOL=true`, когда опция "
+"_не_ выбрана. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4458
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_CMAKE_BOOL=\tTEST DEBUG\n"
+"OPT1_CMAKE_BOOL_OFF=\tOPTIMIZE\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_CMAKE_BOOL=\tTEST DEBUG\n"
+"OPT1_CMAKE_BOOL_OFF=\tOPTIMIZE\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4475
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"CMAKE_ARGS+=\t-DTEST:BOOL=true -DDEBUG:BOOL=true \\\n"
+"\t\t-DOPTIMIZE:BOOL=false\n"
+".else\n"
+"CMAKE_ARGS+=\t-DTEST:BOOL=false -DDEBUG:BOOL=false \\\n"
+"\t\t-DOPTIMIZE:BOOL=true\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"CMAKE_ARGS+=\t-DTEST:BOOL=true -DDEBUG:BOOL=true \\\n"
+"\t\t-DOPTIMIZE:BOOL=false\n"
+".else\n"
+"CMAKE_ARGS+=\t-DTEST:BOOL=false -DDEBUG:BOOL=false \\\n"
+"\t\t-DOPTIMIZE:BOOL=true\n"
+".endif\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4478
+#, no-wrap
+msgid "`MESON_ARGS` Helpers"
+msgstr "Помощники `MESON_ARGS`"
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4481
+#, no-wrap
+msgid "`OPT_MESON_ON` and `OPT_MESON_OFF`"
+msgstr "`OPT_MESON_ON` и `OPT_MESON_OFF`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4486
+msgid ""
+"When option _OPT_ is selected, the value of `OPT_MESON_ON`, if defined, is "
+"appended to `MESON_ARGS`. `OPT_MESON_OFF` works the same way, but when "
+"`OPT` is _not_ selected. For example:"
+msgstr ""
+"Когда выбрана опция _OPT_, значение `OPT_MESON_ON`, если оно определено, "
+"добавляется к `MESON_ARGS`. `OPT_MESON_OFF` работает аналогичным образом, "
+"но когда `OPT` _не_ выбрана. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4492
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_MESON_ON=\t-Dopt=1\n"
+"OPT1_MESON_OFF=\t-Dopt=2\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_MESON_ON=\t-Dopt=1\n"
+"OPT1_MESON_OFF=\t-Dopt=2\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4507
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"MESON_ARGS+=\t-Dopt=1\n"
+".else\n"
+"MESON_ARGS+=\t-Dopt=2\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"MESON_ARGS+=\t-Dopt=1\n"
+".else\n"
+"MESON_ARGS+=\t-Dopt=2\n"
+".endif\n"
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4510
+#, no-wrap
+msgid "`OPT_MESON_TRUE` and `OPT_MESON_FALSE`"
+msgstr "`OPT_MESON_TRUE` и `OPT_MESON_FALSE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4516
+msgid ""
+"When option _OPT_ is selected, for each _entry_ in `OPT_MESON_TRUE` then `-"
+"D_entry_=true` is appended to `MESON_ARGS`. When option _OPT_ is _not_ "
+"selected, `-D_entry_=false` is appended to `MESON_ARGS`. `OPT_MESON_FALSE` "
+"is the opposite, `-D_entry_=false` is appended to `MESON_ARGS` when the "
+"option is selected, and `-D_entry_=true` when the option is _not_ selected. "
+"For example:"
+msgstr ""
+"Когда выбрана опция _OPT_, для каждого _элемента_ в `OPT_MESON_TRUE` "
+"добавляется `-D_элемент_=true` в `MESON_ARGS`. Если опция _OPT_ _не_ "
+"выбрана, добавляется `-D_элемент_=false` в `MESON_ARGS`. `OPT_MESON_FALSE` "
+"работает противоположным образом: `-D_элемент_=false` добавляется в "
+"`MESON_ARGS`, когда опция выбрана, и `-D_элемент_=true`, когда опция _не_ "
+"выбрана. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4522
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_MESON_TRUE=\ttest debug\n"
+"OPT1_MESON_FALSE=\toptimize\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_MESON_TRUE=\ttest debug\n"
+"OPT1_MESON_FALSE=\toptimize\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4539
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"MESON_ARGS+=\t-Dtest=true -Ddebug=true \\\n"
+"\t\t-Doptimize=false\n"
+".else\n"
+"MESON_ARGS+=\t-Dtest=false -Ddebug=false \\\n"
+"\t\t-Doptimize=true\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"MESON_ARGS+=\t-Dtest=true -Ddebug=true \\\n"
+"\t\t-Doptimize=false\n"
+".else\n"
+"MESON_ARGS+=\t-Dtest=false -Ddebug=false \\\n"
+"\t\t-Doptimize=true\n"
+".endif\n"
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4542
+#, no-wrap
+msgid "`OPT_MESON_YES` and `OPT_MESON_NO`"
+msgstr "`OPT_MESON_YES` и `OPT_MESON_NO`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4548
+msgid ""
+"When option _OPT_ is selected, for each _entry_ in `OPT_MESON_YES` then `-"
+"D_entry_=yes` is appended to `MESON_ARGS`. When option _OPT_ is _not_ "
+"selected, `-D_entry_=no` is appended to `MESON_ARGS`. `OPT_MESON_NO` is the "
+"opposite, `-D_entry_=no` is appended to `MESON_ARGS` when the option is "
+"selected, and `-D_entry_=yes` when the option is _not_ selected. For "
+"example:"
+msgstr ""
+"Когда выбрана опция _OPT_, для каждого _элемента_ в `OPT_MESON_YES` "
+"добавляется `-D_элемент_=yes` к `MESON_ARGS`. Если опция _OPT_ _не_ выбрана, "
+"добавляется `-D_элемент_=no` к `MESON_ARGS`. `OPT_MESON_NO` работает "
+"противоположным образом: `-D_элемент_=no` добавляется к `MESON_ARGS`, когда "
+"опция выбрана, и `-D_элемент_=yes`, когда опция _не_ выбрана. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4554
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_MESON_YES=\ttest debug\n"
+"OPT1_MESON_NO=\toptimize\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_MESON_YES=\ttest debug\n"
+"OPT1_MESON_NO=\toptimize\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4571
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"MESON_ARGS+=\t-Dtest=yes -Ddebug=yes \\\n"
+"\t\t-Doptimize=no\n"
+".else\n"
+"MESON_ARGS+=\t-Dtest=no -Ddebug=no \\\n"
+"\t\t-Doptimize=yes\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"MESON_ARGS+=\t-Dtest=yes -Ddebug=yes \\\n"
+"\t\t-Doptimize=no\n"
+".else\n"
+"MESON_ARGS+=\t-Dtest=no -Ddebug=no \\\n"
+"\t\t-Doptimize=yes\n"
+".endif\n"
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4574
+#, no-wrap
+msgid "`OPT_MESON_ENABLED` and `OPT_MESON_DISABLED`"
+msgstr "`OPT_MESON_ENABLED` и `OPT_MESON_DISABLED`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4580
+msgid ""
+"When option _OPT_ is selected, for each _entry_ in `OPT_MESON_ENABLED` then "
+"`-D_entry_=enabled` is appended to `MESON_ARGS`. When option _OPT_ is _not_ "
+"selected, `-D_entry_=disabled` is appended to `MESON_ARGS`. "
+"`OPT_MESON_DISABLED` is the opposite, `-D_entry_=disabled` is appended to "
+"`MESON_ARGS` when the option is selected, and `-D_entry_=enabled` when the "
+"option is _not_ selected. For example:"
+msgstr ""
+"Когда выбрана опция _OPT_, для каждого _элемента_ в `OPT_MESON_ENABLED` "
+"добавляется `-D_элемент_=enabled` к `MESON_ARGS`. Когда опция _OPT_ _не_ "
+"выбрана, добавляется `-D_элемент_=disabled` к `MESON_ARGS`. "
+"`OPT_MESON_DISABLED` работает противоположным образом: `-"
+"D_элемент_=disabled` добавляется к `MESON_ARGS`, когда опция выбрана, и `-"
+"D_элемент_=enabled`, когда опция _не_ выбрана. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4586
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_MESON_ENABLED=\ttest\n"
+"OPT1_MESON_DISABLED=\tdebug\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_MESON_ENABLED=\ttest\n"
+"OPT1_MESON_DISABLED=\tdebug\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4601
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"MESON_ARGS+=\t-Dtest=enabled -Ddebug=disabled\n"
+".else\n"
+"MESON_ARGS+=\t-Dtest=disabled -Ddebug=enabled\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"MESON_ARGS+=\t-Dtest=enabled -Ddebug=disabled\n"
+".else\n"
+"MESON_ARGS+=\t-Dtest=disabled -Ddebug=enabled\n"
+".endif\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4604
+#, no-wrap
+msgid "`OPT_QMAKE_ON` and `OPT_QMAKE_OFF`"
+msgstr "`OPT_QMAKE_ON` и `OPT_QMAKE_OFF`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4609
+msgid ""
+"When option _OPT_ is selected, the value of `OPT_QMAKE_ON`, if defined, is "
+"appended to `QMAKE_ARGS`. `OPT_QMAKE_OFF` works the same way, but when "
+"`OPT` is _not_ selected. For example:"
+msgstr ""
+"Когда выбрана опция _OPT_, значение `OPT_QMAKE_ON`, если оно определено, "
+"добавляется к `QMAKE_ARGS`. `OPT_QMAKE_OFF` работает аналогичным образом, "
+"но когда `OPT` _не_ выбрана. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4615
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_QMAKE_ON=\t-DTEST:BOOL=true\n"
+"OPT1_QMAKE_OFF=\t-DPRODUCTION:BOOL=true\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_QMAKE_ON=\t-DTEST:BOOL=true\n"
+"OPT1_QMAKE_OFF=\t-DPRODUCTION:BOOL=true\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4630
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"QMAKE_ARGS+=\t-DTEST:BOOL=true\n"
+".else\n"
+"QMAKE_ARGS+=\t-DPRODUCTION:BOOL=true\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"QMAKE_ARGS+=\t-DTEST:BOOL=true\n"
+".else\n"
+"QMAKE_ARGS+=\t-DPRODUCTION:BOOL=true\n"
+".endif\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4633
+#, no-wrap
+msgid "`OPT_IMPLIES`"
+msgstr "`OPT_IMPLIES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4636
+msgid "Provides a way to add dependencies between options."
+msgstr "Предоставляет способ добавления зависимостей между опциями."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4639
+msgid ""
+"When _OPT_ is selected, all the options listed in this variable will be "
+"selected too. Using the crossref:makefiles[options-"
+"configure_enable,`OPT_CONFIGURE_ENABLE`] described earlier to illustrate:"
+msgstr ""
+"При выборе _OPT_ все перечисленные в этой переменной опции также будут "
+"выбраны. В качестве примера можно использовать описанный ранее "
+"crossref:makefiles[options-configure_enable,`OPT_CONFIGURE_ENABLE`]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4644
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1 OPT2\n"
+"OPT1_IMPLIES=\tOPT2\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1 OPT2\n"
+"OPT1_IMPLIES=\tOPT2\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4647
+#, no-wrap
+msgid ""
+"OPT1_CONFIGURE_ENABLE=\topt1\n"
+"OPT2_CONFIGURE_ENABLE=\topt2\n"
+msgstr ""
+"OPT1_CONFIGURE_ENABLE=\topt1\n"
+"OPT2_CONFIGURE_ENABLE=\topt2\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4650
+msgid "Is equivalent to:"
+msgstr "Эквивалентно:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4662
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"CONFIGURE_ARGS+=\t--enable-opt1\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--disable-opt1\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"CONFIGURE_ARGS+=\t--enable-opt1\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--disable-opt1\n"
+".endif\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4668
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT2} || ${PORT_OPTIONS:MOPT1}\n"
+"CONFIGURE_ARGS+=\t--enable-opt2\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--disable-opt2\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT2} || ${PORT_OPTIONS:MOPT1}\n"
+"CONFIGURE_ARGS+=\t--enable-opt2\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--disable-opt2\n"
+".endif\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4671
+#, no-wrap
+msgid "Simple Use of `OPT_IMPLIES`"
+msgstr "Простое использование `OPT_IMPLIES`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4676
+msgid ""
+"This port has a `X11` option, and a `GNOME` option that needs the `X11` "
+"option to be selected to build."
+msgstr ""
+"Этот порт имеет опцию `X11` и опцию `GNOME`, для сборки которой необходимо "
+"выбрать опцию `X11`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4681
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tX11 GNOME\n"
+"OPTIONS_DEFAULT=\tX11\n"
+msgstr ""
+"OPTIONS_DEFINE=\tX11 GNOME\n"
+"OPTIONS_DEFAULT=\tX11\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4686
+#, no-wrap
+msgid ""
+"X11_USES=\txorg\n"
+"X11_USE=\txorg=xi,xextproto\n"
+"GNOME_USE=\tgnome=gtk30\n"
+"GNOME_IMPLIES=\tX11\n"
+msgstr ""
+"X11_USES=\txorg\n"
+"X11_USE=\txorg=xi,xextproto\n"
+"GNOME_USE=\tgnome=gtk30\n"
+"GNOME_IMPLIES=\tX11\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4691
+#, no-wrap
+msgid "`OPT_PREVENTS` and `OPT_PREVENTS_MSG`"
+msgstr "`OPT_PREVENTS` и `OPT_PREVENTS_MSG`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4694
+msgid "Provides a way to add conflicts between options."
+msgstr "Предоставляет способ добавления конфликтов между опциями."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4698
+msgid ""
+"When _OPT_ is selected, all the options listed in `OPT_PREVENTS` must be un-"
+"selected. If `OPT_PREVENTS_MSG` is set and a conflict is triggered, its "
+"content will be shown explaining why they conflict. For example:"
+msgstr ""
+"Когда выбрана _OPT_, все опции, перечисленные в `OPT_PREVENTS`, должны быть "
+"сняты. Если задано `OPT_PREVENTS_MSG` и возникает конфликт, его содержимое "
+"будет показано с объяснением причины конфликта. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4704
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1 OPT2\n"
+"OPT1_PREVENTS=\tOPT2\n"
+"OPT1_PREVENTS_MSG=\tOPT1 and OPT2 enable conflicting options\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1 OPT2\n"
+"OPT1_PREVENTS=\tOPT2\n"
+"OPT1_PREVENTS_MSG=\tOPT1 and OPT2 enable conflicting options\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4707
+msgid "Is roughly equivalent to:"
+msgstr "Примерно эквивалентно:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4717
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT2} && ${PORT_OPTIONS:MOPT1}\n"
+"BROKEN=\tOption OPT1 conflicts with OPT2 (select only one)\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT2} && ${PORT_OPTIONS:MOPT1}\n"
+"BROKEN=\tOption OPT1 conflicts with OPT2 (select only one)\n"
+".endif\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4720
+msgid ""
+"The only difference is that the first one will write an error after running "
+"`make config`, suggesting changing the selected options."
+msgstr ""
+"Единственное отличие заключается в том, что первый вариант выведет ошибку "
+"после выполнения `make config`, предлагая изменить выбранные настройки."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4722
+#, no-wrap
+msgid "Simple Use of `OPT_PREVENTS`"
+msgstr "Простое использование `OPT_PREVENTS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4728
+msgid ""
+"This port has `X509` and `SCTP` options. Both options add patches, but the "
+"patches conflict with each other, so they cannot be selected at the same "
+"time."
+msgstr ""
+"Этот порт имеет опции `X509` и `SCTP`. Обе опции добавляют патчи, но патчи "
+"конфликтуют друг с другом, поэтому их нельзя выбрать одновременно."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4732
+#, no-wrap
+msgid "OPTIONS_DEFINE=\tX509 SCTP\n"
+msgstr "OPTIONS_DEFINE=\tX509 SCTP\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4735
+#, no-wrap
+msgid ""
+"SCTP_PATCHFILES=\t${PORTNAME}-6.8p1-sctp-2573.patch.gz:-p1\n"
+"SCTP_CONFIGURE_WITH=\tsctp\n"
+msgstr ""
+"SCTP_PATCHFILES=\t${PORTNAME}-6.8p1-sctp-2573.patch.gz:-p1\n"
+"SCTP_CONFIGURE_WITH=\tsctp\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4740
+#, no-wrap
+msgid ""
+"X509_PATCH_SITES=\thttp://www.roumenpetrov.info/openssh/x509/:x509\n"
+"X509_PATCHFILES=\t${PORTNAME}-7.0p1+x509-8.5.diff.gz:-p1:x509\n"
+"X509_PREVENTS=\t\tSCTP\n"
+"X509_PREVENTS_MSG=\tX509 and SCTP patches conflict\n"
+msgstr ""
+"X509_PATCH_SITES=\thttp://www.roumenpetrov.info/openssh/x509/:x509\n"
+"X509_PATCHFILES=\t${PORTNAME}-7.0p1+x509-8.5.diff.gz:-p1:x509\n"
+"X509_PREVENTS=\t\tSCTP\n"
+"X509_PREVENTS_MSG=\tX509 and SCTP patches conflict\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4745
+#, no-wrap
+msgid "`OPT_VARS` and `OPT_VARS_OFF`"
+msgstr "`OPT_VARS` и `OPT_VARS_OFF`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4748
+msgid "Provides a generic way to set and append to variables."
+msgstr ""
+"Предоставляет универсальный способ установки и добавления значений "
+"переменным."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4753
+msgid ""
+"Before using `OPT_VARS` and `OPT_VARS_OFF`, see if there is already a more "
+"specific helper available in crossref:makefiles[options-variables, Generic "
+"Variables Replacement, `OPT_VARIABLE` and `OPT_VARIABLE_OFF`]."
+msgstr ""
+"Перед использованием `OPT_VARS` и `OPT_VARS_OFF` проверьте, доступен ли "
+"более специфичный вспомогательный инструмент в crossref:makefiles[options-"
+"variables, Универсальная замена переменных, `OPT_VARIABLE` и "
+"`OPT_VARIABLE_OFF`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4758
+msgid ""
+"When option _OPT_ is selected, and `OPT_VARS` defined, `_key_=_value_` and "
+"`_key_+=_value_` pairs are evaluated from `OPT_VARS`. An `=` cause the "
+"existing value of `KEY` to be overwritten, an `+=` appends to the value. "
+"`OPT_VARS_OFF` works the same way, but when `OPT` is _not_ selected."
+msgstr ""
+"Когда выбрана опция _OPT_ и определены `OPT_VARS`, пары `_key_=_value_` и "
+"`_key_+=_value_` обрабатываются из `OPT_VARS`. Оператор `=` приводит к "
+"перезаписи существующего значения `KEY`, а `+=` добавляет к значению. "
+"`OPT_VARS_OFF` работает аналогично, но когда `OPT` _не_ выбрана."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4766
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1 OPT2 OPT3\n"
+"OPT1_VARS=\talso_build+=bin1\n"
+"OPT2_VARS=\talso_build+=bin2\n"
+"OPT3_VARS=\tbin3_build=yes\n"
+"OPT3_VARS_OFF=\tbin3_build=no\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1 OPT2 OPT3\n"
+"OPT1_VARS=\talso_build+=bin1\n"
+"OPT2_VARS=\talso_build+=bin2\n"
+"OPT3_VARS=\tbin3_build=yes\n"
+"OPT3_VARS_OFF=\tbin3_build=no\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4768
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4777
+#, no-wrap
+msgid "MAKE_ARGS=\tALSO_BUILD=\"${ALSO_BUILD}\" BIN3_BUILD=\"${BIN3_BUILD}\"\n"
+msgstr "MAKE_ARGS=\tALSO_BUILD=\"${ALSO_BUILD}\" BIN3_BUILD=\"${BIN3_BUILD}\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4783
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"ALSO_BUILD+=\tbin1\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"ALSO_BUILD+=\tbin1\n"
+".endif\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4787
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT2}\n"
+"ALSO_BUILD+=\tbin2\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT2}\n"
+"ALSO_BUILD+=\tbin2\n"
+".endif\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4793
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT2}\n"
+"BIN3_BUILD=\tyes\n"
+".else\n"
+"BIN3_BUILD=\tno\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT2}\n"
+"BIN3_BUILD=\tyes\n"
+".else\n"
+"BIN3_BUILD=\tno\n"
+".endif\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4798
+msgid "Values containing whitespace must be enclosed in quotes:"
+msgstr "Значения, содержащие пробелы, должны быть заключены в кавычки:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4802
+#, no-wrap
+msgid "OPT_VARS=\tfoo=\"bar baz\"\n"
+msgstr "OPT_VARS=\tfoo=\"bar baz\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4808
+msgid ""
+"This is due to the way man:make[1] variable expansion deals with "
+"whitespace. When `OPT_VARS= foo=bar baz` is expanded, the variable ends up "
+"containing two strings, `foo=bar` and `baz`. But the submitter probably "
+"intended there to be only one string, `foo=bar baz`. Quoting the value "
+"prevents whitespace from being used as a delimiter."
+msgstr ""
+"Это связано с тем, как man:make[1] обрабатывает пробелы при раскрытии "
+"переменных. Когда `OPT_VARS= foo=bar baz` раскрывается, переменная в итоге "
+"содержит две строки: `foo=bar` и `baz`. Однако отправитель, вероятно, "
+"предполагал, что должна быть только одна строка — `foo=bar baz`. Заключение "
+"значения в кавычки предотвращает использование пробела в качестве "
+"разделителя."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4811
+msgid ""
+"Also, _do not_ add extra spaces after the `_var_=` sign and before the "
+"value, it would also be split into two strings. _This will not work_:"
+msgstr ""
+"Также _не_ добавляйте лишние пробелы после знака `_var_=` и перед значением, "
+"это также разобьёт строку на две части. _Это не сработает_:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4815
+#, no-wrap
+msgid "OPT_VARS=\tfoo=\tbar\n"
+msgstr "OPT_VARS=\tfoo=\tbar\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4820
+#, no-wrap
+msgid "Dependencies, `OPT_DEPTYPE` and `OPT_DEPTYPE_OFF`"
+msgstr "Зависимости, `OPT_DEPTYPE` и `OPT_DEPTYPE_OFF`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4823
+msgid "For any of these dependency types:"
+msgstr "Для любого из этих типов зависимостей:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4825
+msgid "`PKG_DEPENDS`"
+msgstr "`PKG_DEPENDS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4835
+msgid ""
+"When option _OPT_ is selected, the value of `OPT_DEPTYPE`, if defined, is "
+"appended to `DEPTYPE`. `OPT_DEPTYPE_OFF` works the same, but when `OPT` is "
+"_not_ selected. For example:"
+msgstr ""
+"Когда выбрана опция _OPT_, значение `OPT_DEPTYPE`, если оно определено, "
+"добавляется к `DEPTYPE`. `OPT_DEPTYPE_OFF` работает аналогично, но когда "
+"_не_ выбрана `OPT`. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4841
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_LIB_DEPENDS=\tliba.so:devel/a\n"
+"OPT1_LIB_DEPENDS_OFF=\tlibb.so:devel/b\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_LIB_DEPENDS=\tliba.so:devel/a\n"
+"OPT1_LIB_DEPENDS_OFF=\tlibb.so:devel/b\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4856
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"LIB_DEPENDS+=\tliba.so:devel/a\n"
+".else\n"
+"LIB_DEPENDS+=\tlibb.so:devel/b\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"LIB_DEPENDS+=\tliba.so:devel/a\n"
+".else\n"
+"LIB_DEPENDS+=\tlibb.so:devel/b\n"
+".endif\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4859
+#, no-wrap
+msgid "Generic Variables Replacement, `OPT_VARIABLE` and `OPT_VARIABLE_OFF`"
+msgstr "Универсальная замена переменных, `OPT_VARIABLE` и `OPT_VARIABLE_OFF`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4862
+msgid "For any of these variables:"
+msgstr "Для любой из этих переменных:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4864
+msgid "`ALL_TARGET`"
+msgstr "`ALL_TARGET`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4865
+msgid "`BINARY_ALIAS`"
+msgstr "`BINARY_ALIAS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4866
+msgid "`BROKEN`"
+msgstr "`BROKEN`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4868
+msgid "`CFLAGS`"
+msgstr "`CFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4869
+msgid "`CONFIGURE_ENV`"
+msgstr "`CONFIGURE_ENV`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4870
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5109
+#, no-wrap
+msgid "`CONFLICTS`"
+msgstr "`CONFLICTS`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4871
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5104
+#, no-wrap
+msgid "`CONFLICTS_BUILD`"
+msgstr "`CONFLICTS_BUILD`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4872
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5099
+#, no-wrap
+msgid "`CONFLICTS_INSTALL`"
+msgstr "`CONFLICTS_INSTALL`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4873
+msgid "`CPPFLAGS`"
+msgstr "`CPPFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4874
+msgid "`CXXFLAGS`"
+msgstr "`CXXFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4875
+msgid "`DESKTOP_ENTRIES`"
+msgstr "`DESKTOP_ENTRIES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4878
+msgid "`EXTRA_PATCHES`"
+msgstr "`EXTRA_PATCHES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4890
+msgid "`IGNORE`"
+msgstr "`IGNORE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4891
+msgid "`INFO`"
+msgstr "`INFO`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4892
+msgid "`INSTALL_TARGET`"
+msgstr "`INSTALL_TARGET`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4893
+msgid "`LDFLAGS`"
+msgstr "`LDFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4894
+msgid "`LIBS`"
+msgstr "`LIBS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4895
+msgid "`MAKE_ARGS`"
+msgstr "`MAKE_ARGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4896
+msgid "`MAKE_ENV`"
+msgstr "`MAKE_ENV`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4899
+msgid "`PATCH_SITES`"
+msgstr "`PATCH_SITES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4900
+msgid "`PLIST_DIRS`"
+msgstr "`PLIST_DIRS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4901
+msgid "`PLIST_FILES`"
+msgstr "`PLIST_FILES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4902
+msgid "`PLIST_SUB`"
+msgstr "`PLIST_SUB`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4903
+msgid "`PORTDOCS`"
+msgstr "`PORTDOCS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4904
+msgid "`PORTEXAMPLES`"
+msgstr "`PORTEXAMPLES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4905
+msgid "`SUB_FILES`"
+msgstr "`SUB_FILES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4906
+msgid "`SUB_LIST`"
+msgstr "`SUB_LIST`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4907
+msgid "`TEST_TARGET`"
+msgstr "`TEST_TARGET`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4912
+msgid ""
+"When option _OPT_ is selected, the value of `OPT_ABOVEVARIABLE`, if defined, "
+"is appended to `_ABOVEVARIABLE_`. `OPT_ABOVEVARIABLE_OFF` works the same "
+"way, but when `OPT` is _not_ selected. For example:"
+msgstr ""
+"Когда выбрана опция _OPT_, значение `OPT_ABOVEVARIABLE`, если оно "
+"определено, добавляется к `_ABOVEVARIABLE_`. `OPT_ABOVEVARIABLE_OFF` "
+"работает аналогично, но когда `OPT` _не_ выбрана. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4918
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_USES=\tgmake\n"
+"OPT1_CFLAGS_OFF=\t-DTEST\n"
+msgstr ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_USES=\tgmake\n"
+"OPT1_CFLAGS_OFF=\t-DTEST\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4933
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"USES+=\t\tgmake\n"
+".else\n"
+"CFLAGS+=\t-DTEST\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"USES+=\t\tgmake\n"
+".else\n"
+"CFLAGS+=\t-DTEST\n"
+".endif\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4940
+msgid ""
+"Some variables are not in this list, in particular `PKGNAMEPREFIX` and "
+"`PKGNAMESUFFIX`. This is intentional. A port _must not_ change its name "
+"when its option set changes."
+msgstr ""
+"Некоторые переменные отсутствуют в этом списке, в частности `PKGNAMEPREFIX` "
+"и `PKGNAMESUFFIX`. Это сделано намеренно. Порт _не должен_ изменять своё имя "
+"при изменении набора опций."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4945
+msgid ""
+"Some of these variables, at least `ALL_TARGET`, `DISTFILES` and "
+"`INSTALL_TARGET`, have their default values set _after_ the options are "
+"processed."
+msgstr ""
+"Некоторые из этих переменных, по крайней мере `ALL_TARGET`, `DISTFILES` и "
+"`INSTALL_TARGET`, получают свои значения по умолчанию _после_ обработки "
+"опций."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4947
+msgid "With these lines in the [.filename]#Makefile#:"
+msgstr "С такими строками в [.filename]#Makefile#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4951
+#, no-wrap
+msgid "ALL_TARGET=\tall\n"
+msgstr "ALL_TARGET=\tall\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4953
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4962
+#, no-wrap
+msgid "DOCS_ALL_TARGET=\tdoc\n"
+msgstr "DOCS_ALL_TARGET=\tdoc\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4956
+msgid ""
+"If the `DOCS` option is enabled, `ALL_TARGET` will have a final value of "
+"`all doc`; if the option is disabled, it would have a value of `all`."
+msgstr ""
+"Если опция `DOCS` включена, `ALL_TARGET` будет иметь конечное значение `all "
+"doc`; если опция отключена, значение будет `all`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4958
+msgid "With only the options helper line in the [.filename]#Makefile#:"
+msgstr "Только со строкой помощника опций в [.filename]#Makefile#:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4965
+msgid ""
+"If the `DOCS` option is enabled, `ALL_TARGET` will have a final value of "
+"`doc`; if the option is disabled, it would have a value of `all`."
+msgstr ""
+"Если опция `DOCS` включена, `ALL_TARGET` будет иметь окончательное значение "
+"`doc`; если опция отключена, значение будет `all`."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4968
+#, no-wrap
+msgid "Additional Build Targets, `_target_-_OPT_-on` and `_target_-_OPT_-off`"
+msgstr "Дополнительные цели сборки, `_target_-_OPT_-on` и `_target_-_OPT_-off`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4971
+msgid ""
+"These [.filename]#Makefile# targets can accept optional extra build targets:"
+msgstr ""
+"Эти цели в [.filename]#Makefile# могут принимать дополнительные опциональные "
+"цели сборки:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4973
+msgid "`pre-fetch`"
+msgstr "`pre-fetch`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4974
+msgid "`do-fetch`"
+msgstr "`do-fetch`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4975
+msgid "`post-fetch`"
+msgstr "`post-fetch`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4976
+msgid "`pre-extract`"
+msgstr "`pre-extract`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4977
+msgid "`do-extract`"
+msgstr "`do-extract`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4978
+msgid "`post-extract`"
+msgstr "`post-extract`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4979
+msgid "`pre-patch`"
+msgstr "`pre-patch`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4980
+msgid "`do-patch`"
+msgstr "`do-patch`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4981
+msgid "`post-patch`"
+msgstr "`post-patch`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4982
+msgid "`pre-configure`"
+msgstr "`pre-configure`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4983
+msgid "`do-configure`"
+msgstr "`do-configure`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4984
+msgid "`post-configure`"
+msgstr "`post-configure`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4985
+msgid "`pre-build`"
+msgstr "`pre-build`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4986
+msgid "`do-build`"
+msgstr "`do-build`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4987
+msgid "`post-build`"
+msgstr "`post-build`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4988
+msgid "`pre-install`"
+msgstr "`pre-install`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4989
+msgid "`do-install`"
+msgstr "`do-install`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4990
+msgid "`post-install`"
+msgstr "`post-install`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4991
+msgid "`post-stage`"
+msgstr "`post-stage`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4992
+msgid "`pre-package`"
+msgstr "`pre-package`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4993
+msgid "`do-package`"
+msgstr "`do-package`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4994
+msgid "`post-package`"
+msgstr "`post-package`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4998
+msgid ""
+"When option _OPT_ is selected, the target `_TARGET_-_OPT_-on`, if defined, "
+"is executed after `_TARGET_`. `_TARGET_-_OPT_-off` works the same way, but "
+"when `OPT` is _not_ selected. For example:"
+msgstr ""
+"Когда выбрана опция _OPT_, цель `_TARGET_-_OPT_-on`, если она определена, "
+"выполняется после `_TARGET_`. `_TARGET_-_OPT_-off` работает аналогично, но "
+"когда `OPT` _не_ выбрана. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5005
+#, no-wrap
+msgid ""
+"post-patch-OPT1-on:\n"
+"\t@${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${EXAMPLESDIR}/|' ${WRKSRC}/Makefile\n"
+msgstr ""
+"post-patch-OPT1-on:\n"
+"\t@${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${EXAMPLESDIR}/|' ${WRKSRC}/Makefile\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5008
+#, no-wrap
+msgid ""
+"post-patch-OPT1-off:\n"
+"\t@${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${PREFIX}/bin/|' ${WRKSRC}/Makefile\n"
+msgstr ""
+"post-patch-OPT1-off:\n"
+"\t@${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${PREFIX}/bin/|' ${WRKSRC}/Makefile\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5024
+#, no-wrap
+msgid ""
+"post-patch:\n"
+".if ${PORT_OPTIONS:MOPT1}\n"
+"\t@${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${EXAMPLESDIR}/|' ${WRKSRC}/Makefile\n"
+".else\n"
+"\t@${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${PREFIX}/bin/|' ${WRKSRC}/Makefile\n"
+".endif\n"
+msgstr ""
+"post-patch:\n"
+".if ${PORT_OPTIONS:MOPT1}\n"
+"\t@${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${EXAMPLESDIR}/|' ${WRKSRC}/Makefile\n"
+".else\n"
+"\t@${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${PREFIX}/bin/|' ${WRKSRC}/Makefile\n"
+".endif\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5027
+#, no-wrap
+msgid "Specifying the Working Directory"
+msgstr "Указание рабочего каталога"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5032
+msgid ""
+"Each port is extracted into a working directory, which must be writable. "
+"The ports system defaults to having `DISTFILES` unpack in to a directory "
+"called `${DISTNAME}`. In other words, if the [.filename]#Makefile# has:"
+msgstr ""
+"Каждый порт извлекается в рабочий каталог, который должен быть доступен для "
+"записи. Система портов по умолчанию распаковывает `DISTFILES` в каталог с "
+"именем `${DISTNAME}`. Другими словами, если в [.filename]#Makefile# указано:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5037
+#, no-wrap
+msgid ""
+"PORTNAME=\tfoo\n"
+"DISTVERSION=\t1.0\n"
+msgstr ""
+"PORTNAME=\tfoo\n"
+"DISTVERSION=\t1.0\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5040
+msgid ""
+"then the port's distribution files contain a top-level directory, "
+"[.filename]#foo-1.0#, and the rest of the files are located under that "
+"directory."
+msgstr ""
+"то файлы дистрибутива порта содержат каталог верхнего уровня "
+"[.filename]#foo-1.0#, и остальные файлы находятся в этом каталоге."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5042
+msgid "A number of variables can be overridden if that is not the case."
+msgstr ""
+"Если нужно расположение файлов в других каталогах, можно переопределить ряд "
+"переменных."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5044
+#, no-wrap
+msgid "`WRKSRC`"
+msgstr "`WRKSRC`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5048
+msgid ""
+"The variable lists the name of the directory that is created when the "
+"application's distfiles are extracted. If our previous example extracted "
+"into a directory called [.filename]#foo# (and not [.filename]#foo-1.0#) "
+"write:"
+msgstr ""
+"Переменная указывает имя каталога, который создается при распаковке "
+"distfiles приложения. Чтобы в нашем предыдущем примере распаковка "
+"происходила в каталог с именем [.filename]#foo# (а не [.filename]#foo-1.0#), "
+"напишите:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5052
+#, no-wrap
+msgid "WRKSRC=\t${WRKDIR}/foo\n"
+msgstr "WRKSRC=\t${WRKDIR}/foo\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5055
+msgid "or possibly"
+msgstr "или можно"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5059
+#, no-wrap
+msgid "WRKSRC=\t${WRKDIR}/${PORTNAME}\n"
+msgstr "WRKSRC=\t${WRKDIR}/${PORTNAME}\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5062
+#, no-wrap
+msgid "`WRKSRC_SUBDIR`"
+msgstr "`WRKSRC_SUBDIR`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5065
+msgid ""
+"If the source files needed for the port are in a subdirectory of the "
+"extracted distribution file, set `WRKSRC_SUBDIR` to that directory."
+msgstr ""
+"Если исходные файлы, необходимые для порта, находятся в подкаталоге "
+"распакованного дистрибутива, присвойте `WRKSRC_SUBDIR` имя этого каталога."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5069
+#, no-wrap
+msgid "WRKSRC_SUBDIR=\tsrc\n"
+msgstr "WRKSRC_SUBDIR=\tsrc\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5072
+#, no-wrap
+msgid "`NO_WRKSUBDIR`"
+msgstr "`NO_WRKSUBDIR`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5075
+msgid ""
+"If the port does not extract in to a subdirectory at all, then set "
+"`NO_WRKSUBDIR` to indicate that."
+msgstr ""
+"Если порт не распаковывается в подкаталог вообще, установите `NO_WRKSUBDIR`, "
+"чтобы указать это."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5079
+#, no-wrap
+msgid "NO_WRKSUBDIR=\tyes\n"
+msgstr "NO_WRKSUBDIR=\tyes\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5084
+msgid ""
+"Because `WRKDIR` is the only directory that is supposed to be writable "
+"during the build, and is used to store many files recording the status of "
+"the build, the port's extraction will be forced into a subdirectory."
+msgstr ""
+"Поскольку `WRKDIR` является единственной директорией, которая должна быть "
+"доступна для записи во время сборки, и используется для хранения многих "
+"файлов, фиксирующих состояние сборки, извлечение порта будет принудительно "
+"выполнено в поддиректорию."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5087
+#, no-wrap
+msgid "Conflict Handling"
+msgstr "Обработка конфликтов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5090
+msgid ""
+"There are three different variables to register a conflict between packages "
+"and ports: `CONFLICTS`, `CONFLICTS_INSTALL` and `CONFLICTS_BUILD`."
+msgstr ""
+"Существует три различные переменные для регистрации конфликтов между "
+"пакетами и портами: `CONFLICTS`, `CONFLICTS_INSTALL` и `CONFLICTS_BUILD`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5094
+msgid ""
+"The conflict variables automatically set the variable `IGNORE`, which is "
+"more fully documented in crossref:porting-dads[dads-noinstall,Marking a Port "
+"Not Installable with `BROKEN`, `FORBIDDEN`, or `IGNORE`]."
+msgstr ""
+"Эти переменные автоматически устанавливают переменную `IGNORE`, более "
+"подробно описанную в crossref:porting-dads[dads-noinstall,Пометка порта как "
+"неустанавливаемого с помощью `BROKEN`, `FORBIDDEN` или `IGNORE`]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5097
+msgid ""
+"When removing one of several conflicting ports, it is advisable to retain "
+"`CONFLICTS` in those other ports for a few months to cater for users who "
+"only update once in a while."
+msgstr ""
+"При удалении одного из нескольких конфликтующих портов рекомендуется "
+"оставлять `CONFLICTS` в тех других портах на несколько месяцев, чтобы учесть "
+"пользователей, которые обновляются лишь время от времени."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5102
+msgid ""
+"If the package cannot coexist with other packages (because of file "
+"conflicts, runtime incompatibilities, etc.). `CONFLICTS_INSTALL` check is "
+"done after the build stage and prior to the install stage."
+msgstr ""
+"Если пакет не может сосуществовать с другими пакетами (из-за конфликтов "
+"файлов, несовместимости во время выполнения и т.д.). Проверка "
+"`CONFLICTS_INSTALL` выполняется после этапа сборки и перед этапом установки."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5107
+msgid ""
+"If the port cannot be built when other specific ports are already "
+"installed. Build conflicts are not recorded in the resulting package."
+msgstr ""
+"Если порт не может быть собран, когда уже установлены другие определённые "
+"порты. Конфликты сборки не фиксируются в результирующем пакете."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5112
+msgid ""
+"If the port cannot be built if a certain port is already installed and the "
+"resulting package cannot coexist with the other package. `CONFLICTS` check "
+"is done prior to the build stage and prior to the install stage."
+msgstr ""
+"Если порт не может быть собран, когда определённый порт уже установлен и "
+"итоговый пакет не может сосуществовать с другим пакетом. Проверка "
+"`CONFLICTS` выполняется до этапа сборки и до этапа установки."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5116
+msgid ""
+"Each space-separated item in the `CONFLICTS*` variable values is matched "
+"against packages except the one being built, using shell globbing rules. "
+"This allows listing all flavors of a port in a conflict list instead of "
+"having to take pains to exclude the flavor being built from that list. For "
+"example, if git-lite is installed, `CONFLICTS_INSTALL=git git-lite` would "
+"allow to perform:"
+msgstr ""
+"Каждый элемент, разделённый пробелами, в значениях переменных `CONFLICTS*` "
+"сопоставляется с пакетами(кроме того, который собирается) с использованием "
+"правил раскрытия шаблонов имен файлов в оболочке shell. Это позволяет "
+"перечислить все варианты порта в списке конфликтов вместо необходимости "
+"исключать собираемый вариант из этого списка. Например, если установлен git-"
+"lite, `CONFLICTS_INSTALL=git git-lite` позволит выполнить:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5119
+#, no-wrap
+msgid "% make -C devel/git FLAVOR=lite all deinstall install\n"
+msgstr "% make -C devel/git FLAVOR=lite all deinstall install\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5122
+msgid ""
+"But the following command would report a conflict, since the package base "
+"name installed is `git-lite`, while `git` would be built, but cannot be "
+"installed in addition to `git-lite`:"
+msgstr ""
+"Но следующая команда сообщит о конфликте, так как установленное имя базового "
+"пакета — `git-lite`, а `git` будет собран, но не может быть установлен "
+"вместе с `git-lite`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5125
+#, no-wrap
+msgid "% make -C devel/git FLAVOR=default all deinstall install\n"
+msgstr "% make -C devel/git FLAVOR=default all deinstall install\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5128
+msgid ""
+"Without that feature, the Makefile would need one "
+"`_flavor__CONFLICTS_INSTALL` for each flavor, listing every other flavor."
+msgstr ""
+"Без этой функции Makefile потребовал бы по одному "
+"`_flavor__CONFLICTS_INSTALL` для каждого варианта, перечисляя все остальные "
+"варианты."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5131
+msgid ""
+"The most common content of one of these variable is the package base of "
+"another port. The package base is the package name without the appended "
+"version, it can be obtained by running `make -V PKGBASE`."
+msgstr ""
+"Наиболее распространённым содержимым одной из этих переменных является база "
+"пакета другого порта. База пакета — это имя пакета без указания версии, её "
+"можно получить, выполнив команду `make -V PKGBASE`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5133
+#, no-wrap
+msgid "Basic usage of `CONFLICTS*`"
+msgstr "Простой пример использования `CONFLICTS*`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5139
+msgid ""
+"package:dns/bind99[] cannot be installed if package:dns/bind910[] is present "
+"because they install same files. First gather the package base to use:"
+msgstr ""
+"Пакет package:dns/bind99[] не может быть установлен, если присутствует пакет "
+"package:dns/bind910[], так как они устанавливают одинаковые файлы. Сначала "
+"соберите базовый пакет для использования:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5146
+#, no-wrap
+msgid ""
+"% make -C dns/bind99 -V PKGBASE\n"
+"bind99\n"
+"% make -C dns/bind910 -V PKGBASE\n"
+"bind910\n"
+msgstr ""
+"% make -C dns/bind99 -V PKGBASE\n"
+"bind99\n"
+"% make -C dns/bind910 -V PKGBASE\n"
+"bind910\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5149
+msgid "Then add to the [.filename]#Makefile# of package:dns/bind99[]:"
+msgstr "Затем добавьте в [.filename]#Makefile# пакета package:dns/bind99[]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5153
+#, no-wrap
+msgid "CONFLICTS_INSTALL=\tbind910\n"
+msgstr "CONFLICTS_INSTALL=\tbind910\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5156
+msgid "And add to the [.filename]#Makefile# of package:dns/bind910[]:"
+msgstr "И добавьте в [.filename]#Makefile# пакета package:dns/bind910[]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5160
+#, no-wrap
+msgid "CONFLICTS_INSTALL=\tbind99\n"
+msgstr "CONFLICTS_INSTALL=\tbind99\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5167
+msgid ""
+"Sometimes, only certain versions of another port are incompatible. When "
+"this is the case, use the full package name including the version. If "
+"necessary, use shell globs like `*` and `?` so that all necessary versions "
+"are matched."
+msgstr ""
+"Иногда только определенные версии другого порта несовместимы. В этом случае "
+"используйте полное имя пакета, включая версию. При необходимости используйте "
+"подстановочные символы шаблонов имён файлов оболочки, такие как `*` и `?`, "
+"чтобы охватить все необходимые версии."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5169
+#, no-wrap
+msgid "Using `CONFLICTS*` With Globs."
+msgstr "Использование `CONFLICTS*` с шаблонами имён файлов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5174
+msgid ""
+"From versions from 2.0 and up-to 2.4.1_2, package:deskutils/gnotime[] used "
+"to install a bundled version of package:databases/qof[]."
+msgstr ""
+"В версиях с 2.0 по 2.4.1_2 пакет package:deskutils/gnotime[] устанавливал "
+"встроенную версию пакета package:databases/qof[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5176
+msgid ""
+"To reflect this past, the [.filename]#Makefile# of package:databases/qof[] "
+"contains:"
+msgstr ""
+"Чтобы отразить это прошлое, [.filename]#Makefile# пакета package:databases/"
+"qof[] содержит:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5182
+#, no-wrap
+msgid ""
+"CONFLICTS_INSTALL=\tgnotime-2.[0-3]* \\\n"
+"\t\t\tgnotime-2.4.0* gnotime-2.4.1 \\\n"
+"\t\t\tgnotime-2.4.1_[12]\n"
+msgstr ""
+"CONFLICTS_INSTALL=\tgnotime-2.[0-3]* \\\n"
+"\t\t\tgnotime-2.4.0* gnotime-2.4.1 \\\n"
+"\t\t\tgnotime-2.4.1_[12]\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5185
+msgid ""
+"The first entry match versions `2.0` through `2.3`, the second all the "
+"revisions of `2.4.0`, the third the exact `2.4.1` version, and the last the "
+"first and second revisions of the `2.4.1` version."
+msgstr ""
+"Первый элемент соответствует версиям `2.0`–`2.3`, второй — всем редакциям "
+"`2.4.0`, третий — точно версии `2.4.1`, а последний — первой и второй "
+"редакциям версии `2.4.1`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5187
+msgid ""
+"package:deskutils/gnotime[] does not have any conflicts line because its "
+"current version does not conflict with anything else."
+msgstr ""
+"package:deskutils/gnotime[] не имеет строки конфликтов, потому что его "
+"текущая версия не конфликтует ни с чем другим."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5191
+msgid ""
+"The variable `DISABLE_CONFLICTS` may be temporarily set when making targets "
+"that are not affected by conflicts. The variable is not to be set in port "
+"Makefiles."
+msgstr ""
+"Переменная `DISABLE_CONFLICTS` может быть временно установлена при "
+"выполнении целей, на которые не влияют конфликты. Эту переменную не следует "
+"устанавливать в Makefiles портов."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5195
+#, no-wrap
+msgid "% make -DDISABLE_CONFLICTS patch\n"
+msgstr "% make -DDISABLE_CONFLICTS patch\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5198
+#, no-wrap
+msgid "Installing Files"
+msgstr "Установка файлов"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5205
+msgid ""
+"The `install` phase is very important to the end user because it adds files "
+"to their system. All the additional commands run in the port "
+"[.filename]#Makefile#'s `*-install` targets should be echoed to the screen. "
+"_Do not_ silence these commands with `@` or `.SILENT`."
+msgstr ""
+"Фаза `install` очень важна для конечного пользователя, так как она добавляет "
+"файлы в его систему. Все дополнительные команды, выполняемые в целях `*-"
+"install` [.filename]#Makefile# порта, должны выводиться на экран. _Не_ "
+"заглушайте эти команды с помощью `@` или `.SILENT`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5208
+#, no-wrap
+msgid "`INSTALL_*` Macros"
+msgstr "Макросы `INSTALL_*`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5215
+msgid ""
+"Use the macros provided in [.filename]#bsd.port.mk# to ensure correct modes "
+"of files in the port's `*-install` targets. Set ownership directly in "
+"[.filename]#pkg-plist# with the corresponding entries, such as "
+"`@(_owner_,_group_,)`, `@owner _owner_`, and `@group _group_`. These "
+"operators work until overridden, or until the end of [.filename]#pkg-plist#, "
+"so remember to reset them after they are no longer needed. The default "
+"ownership is `root:wheel`. See crossref:plist[plist-keywords-base,Base "
+"Keywords] for more information."
+msgstr ""
+"Используйте макросы, предоставленные в [.filename]#bsd.port.mk#, чтобы "
+"обеспечить корректные режимы файлов в целях `*-install` порта. "
+"Устанавливайте владельца напрямую в [.filename]#pkg-plist# в соответствующих "
+"записях, таких как `@(_владелец_,_группа_,)`, `@owner _владелец_` и `@group "
+"_группа_`. Эти операторы действуют до переопределения или до конца "
+"[.filename]#pkg-plist#, поэтому не забудьте сбросить их, когда они больше не "
+"нужны. Владелец по умолчанию — `root:wheel`. Дополнительную информацию см. в "
+"crossref:plist[plist-keywords-base,Базовые Ключевые Слова]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5217
+msgid "`INSTALL_PROGRAM` is a command to install binary executables."
+msgstr "`INSTALL_PROGRAM` — команда для установки бинарных исполняемых файлов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5218
+msgid "`INSTALL_SCRIPT` is a command to install executable scripts."
+msgstr "`INSTALL_SCRIPT` — команда для установки исполняемых скриптов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5219
+msgid ""
+"`INSTALL_LIB` is a command to install shared libraries (but not static "
+"libraries)."
+msgstr ""
+"`INSTALL_LIB` — это команда для установки общих библиотек (но не статических "
+"библиотек)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5220
+msgid ""
+"`INSTALL_KLD` is a command to install kernel loadable modules. Some "
+"architectures do not like having the modules stripped, so use this command "
+"instead of `INSTALL_PROGRAM`."
+msgstr ""
+"`INSTALL_KLD` — это команда для установки загружаемых модулей ядра. "
+"Некоторые архитектуры не поддерживают удаление символов из модулей, поэтому "
+"используйте эту команду вместо `INSTALL_PROGRAM`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5221
+msgid ""
+"`INSTALL_DATA` is a command to install sharable data, including static "
+"libraries."
+msgstr ""
+"`INSTALL_DATA` — это команда для установки общих данных, включая статические "
+"библиотеки."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5222
+msgid ""
+"`INSTALL_MAN` is a command to install manpages and other documentation (it "
+"does not compress anything)."
+msgstr ""
+"`INSTALL_MAN` — это команда для установки man-страниц и другой документации "
+"(она ничего не сжимает)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5224
+msgid ""
+"These variables are set to the man:install[1] command with the appropriate "
+"flags for each situation."
+msgstr ""
+"Эти переменные передаются команде man:install[1] с соответствующими флагами "
+"для каждой ситуации."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5228
+msgid ""
+"Do not use `INSTALL_LIB` to install static libraries, because stripping them "
+"renders them useless. Use `INSTALL_DATA` instead."
+msgstr ""
+"Не используйте `INSTALL_LIB` для установки статических библиотек, так как их "
+"удаление делает их бесполезными. Вместо этого используйте `INSTALL_DATA`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5231
+#, no-wrap
+msgid "Stripping Binaries and Shared Libraries"
+msgstr "Удаление символов из бинарных файлов и разделяемых библиотек"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5236
+msgid ""
+"Installed binaries should be stripped. Do not strip binaries manually unless "
+"absolutely required. The `INSTALL_PROGRAM` macro installs and strips a "
+"binary at the same time. The `INSTALL_LIB` macro does the same thing to "
+"shared libraries."
+msgstr ""
+"Установленные бинарные файлы должны быть очищены от отладочной информации. "
+"Не очищайте бинарные файлы вручную, если это не является абсолютно "
+"необходимым. Макрос `INSTALL_PROGRAM` устанавливает и очищает бинарный файл "
+"одновременно. Макрос `INSTALL_LIB` делает то же самое с разделяемыми "
+"библиотеками."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5239
+msgid ""
+"When a file must be stripped, but neither `INSTALL_PROGRAM` nor "
+"`INSTALL_LIB` macros are desirable, `${STRIP_CMD}` strips the program or "
+"shared library. This is typically done within the `post-install` target. "
+"For example:"
+msgstr ""
+"Когда файл необходимо очистить, но ни макросы `INSTALL_PROGRAM`, ни "
+"`INSTALL_LIB` не подходят, `${STRIP_CMD}` очищает программу или разделяемую "
+"библиотеку. Обычно это делается в цели `post-install`. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5244
+#, no-wrap
+msgid ""
+"post-install:\n"
+"\t${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/xdl\n"
+msgstr ""
+"post-install:\n"
+"\t${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/xdl\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5247
+msgid "When multiple files need to be stripped:"
+msgstr "Когда необходимо удалить отладочную информацию из нескольких файлов:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5254
+#, no-wrap
+msgid ""
+"post-install:\n"
+".for l in geometry media body track world\n"
+"\t${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/lib${PORTNAME}-${l}.so.0\n"
+".endfor\n"
+msgstr ""
+"post-install:\n"
+".for l in geometry media body track world\n"
+"\t${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/lib${PORTNAME}-${l}.so.0\n"
+".endfor\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5259
+msgid ""
+"Use man:file[1] on a file to determine if it has been stripped. Binaries "
+"are reported by man:file[1] as `stripped`, or `not stripped`. Additionally, "
+"man:strip[1] will detect programs that have already been stripped and exit "
+"cleanly."
+msgstr ""
+"Используйте man:file[1] для файла, чтобы определить, был ли он подвергнут "
+"удалению символов. man:file[1] сообщает, что бинарные файлы либо `stripped` "
+"(удалены символы), либо `not stripped` (символы не удалены). Кроме того, "
+"man:strip[1] обнаружит программы, которые уже были подвергнуты удалению "
+"символов, и завершит работу без ошибок."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5263
+msgid "When `WITH_DEBUG` is defined, elf files _must not_ be stripped."
+msgstr "Когда определён `WITH_DEBUG`, elf-файлы _не должны_ быть очищены."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5265
+msgid ""
+"The variables (`STRIP_CMD`, `INSTALL_PROGRAM`, `INSTALL_LIB`, ...) and "
+"crossref:uses[uses,`USES`] provided by the framework handle this "
+"automatically."
+msgstr ""
+"Переменные (`STRIP_CMD`, `INSTALL_PROGRAM`, `INSTALL_LIB`, ...) и "
+"crossref:uses[uses,`USES`], предоставляемые фреймворком, обрабатывают это "
+"автоматически."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5267
+msgid ""
+"Some software, add `-s` to their `LDFLAGS`, in this case, either remove `-s` "
+"if `WITH_DEBUG` is set, or remove it unconditionally and use `STRIP_CMD` in "
+"`post-install`."
+msgstr ""
+"Некоторое программное обеспечение добавляет `-s` к своим `LDFLAGS`. В этом "
+"случае либо удалите `-s`, если установлен `WITH_DEBUG`, либо удалите его "
+"безусловно и используйте `STRIP_CMD` в `post-install`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5270
+#, no-wrap
+msgid "Installing a Whole Tree of Files"
+msgstr "Установка целого дерева файлов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5275
+msgid ""
+"Sometimes, a large number of files must be installed while preserving their "
+"hierarchical organization. For example, copying over a whole directory tree "
+"from `WRKSRC` to a target directory under `PREFIX`. Note that `PREFIX`, "
+"`EXAMPLESDIR`, `DATADIR`, and other path variables must always be prepended "
+"with `STAGEDIR` to respect staging (see crossref:special[staging,Staging])."
+msgstr ""
+"Иногда необходимо установить большое количество файлов с сохранением их "
+"иерархической структуры. Например, копирование всего дерева каталогов из "
+"`WRKSRC` в целевой каталог под `PREFIX`. Обратите внимание, что `PREFIX`, "
+"`EXAMPLESDIR`, `DATADIR` и другие переменные путей всегда должны "
+"предваряться `STAGEDIR` для соблюдения процедуры промежуточной установки "
+"(см. crossref:special[staging,Промежуточная установка])."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5280
+msgid ""
+"Two macros exist for this situation. The advantage of using these macros "
+"instead of `cp` is that they guarantee proper file ownership and permissions "
+"on target files. The first macro, `COPYTREE_BIN`, will set all the "
+"installed files to be executable, thus being suitable for installing into "
+"[.filename]#PREFIX/bin#. The second macro, `COPYTREE_SHARE`, does not set "
+"executable permissions on files, and is therefore suitable for installing "
+"files under [.filename]#PREFIX/share# target."
+msgstr ""
+"Для этой ситуации существуют два макроса. Преимущество использования этих "
+"макросов вместо `cp` заключается в том, что они гарантируют целевым файлам "
+"правильные значения владельца и разрешений. Первый макрос, `COPYTREE_BIN`, "
+"устанавливает все установленные файлы как исполняемые, что делает его "
+"подходящим для установки в [.filename]#PREFIX/bin#. Второй макрос, "
+"`COPYTREE_SHARE#, не устанавливает исполняемые разрешения для файлов и, "
+"следовательно, подходит для установки файлов в [.filename]#PREFIX/share#."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5286
+#, no-wrap
+msgid ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${EXAMPLESDIR}\n"
+"\t(cd ${WRKSRC}/examples && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR})\n"
+msgstr ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${EXAMPLESDIR}\n"
+"\t(cd ${WRKSRC}/examples && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR})\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5289
+msgid ""
+"This example will install the contents of the [.filename]#examples# "
+"directory in the vendor distfile to the proper examples location of the port."
+msgstr ""
+"Этот пример установит содержимое каталога [.filename]#examples# из "
+"дистрибутива вендора в соответствующее расположение примеров порта."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5295
+#, no-wrap
+msgid ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${DATADIR}/summer\n"
+"\t(cd ${WRKSRC}/temperatures && ${COPYTREE_SHARE} \"June July August\" ${STAGEDIR}${DATADIR}/summer)\n"
+msgstr ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${DATADIR}/summer\n"
+"\t(cd ${WRKSRC}/temperatures && ${COPYTREE_SHARE} \"June July August\" ${STAGEDIR}${DATADIR}/summer)\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5298
+msgid ""
+"And this example will install the data of summer months to the "
+"[.filename]#summer# subdirectory of a [.filename]#DATADIR#."
+msgstr ""
+"И этот пример установит данные летних месяцев в подкаталог "
+"[.filename]#summer# каталога [.filename]#DATADIR#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5301
+msgid ""
+"Additional `find` arguments can be passed via the third argument to "
+"`COPYTREE_*` macros. For example, to install all files from the first "
+"example except Makefiles, one can use these commands."
+msgstr ""
+"Дополнительные аргументы `find` могут быть переданы через третий аргумент "
+"макросов `COPYTREE_*`. Например, чтобы установить все файлы из первого "
+"примера, кроме Makefiles, можно использовать следующие команды."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5308
+#, no-wrap
+msgid ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${EXAMPLESDIR}\n"
+"\t(cd ${WRKSRC}/examples && \\\n"
+"\t${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR} \"! -name Makefile\")\n"
+msgstr ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${EXAMPLESDIR}\n"
+"\t(cd ${WRKSRC}/examples && \\\n"
+"\t${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR} \"! -name Makefile\")\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5314
+msgid ""
+"These macros do not add the installed files to [.filename]#pkg-plist#. They "
+"must be added manually. For optional documentation (`PORTDOCS`, see "
+"crossref:makefiles[install-documentation, Install Additional Documentation]) "
+"and examples (`PORTEXAMPLES`), the `%%PORTDOCS%%` or `%%PORTEXAMPLES%%` "
+"prefixes must be prepended in [.filename]#pkg-plist#."
+msgstr ""
+"Эти макросы не добавляют установленные файлы в [.filename]#pkg-plist#. Их "
+"необходимо добавлять вручную. Для дополнительной документации (`PORTDOCS`, "
+"см. crossref:makefiles[install-documentation, Установка дополнительной "
+"документации]) и примеров (`PORTEXAMPLES`), префиксы `%%PORTDOCS%%` или `%"
+"%PORTEXAMPLES%%` должны быть добавлены в [.filename]#pkg-plist#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5316
+#, no-wrap
+msgid "Install Additional Documentation"
+msgstr "Установка дополнительной документации"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5320
+msgid ""
+"If the software has some documentation other than the standard man and info "
+"pages that is useful for the user, install it under `DOCSDIR`. This can be "
+"done, like the previous item, in the `post-install` target."
+msgstr ""
+"Если у программного обеспечения есть документация, помимо стандартных "
+"страниц man и info, которая может быть полезна пользователю, установите её в "
+"`DOCSDIR`. Это можно сделать, как и в предыдущем пункте, в цели `post-"
+"install`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5325
+msgid ""
+"Create a new directory for the port. The directory name is `DOCSDIR`. This "
+"usually equals `PORTNAME`. However, if the user might want different "
+"versions of the port to be installed at the same time, the whole `PKGNAME` "
+"can be used."
+msgstr ""
+"Создайте новый каталог для порта. Имя каталога — `DOCSDIR`. Обычно оно равно "
+"`PORTNAME`. Однако, если пользователю может потребоваться установка разных "
+"версий порта одновременно, можно использовать полное имя `PKGNAME`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5328
+msgid ""
+"Since only the files listed in [.filename]#pkg-plist# are installed, it is "
+"safe to always install documentation to `STAGEDIR` (see "
+"crossref:special[staging,Staging]). Hence `.if` blocks are only needed when "
+"the installed files are large enough to cause significant I/O overhead."
+msgstr ""
+"Поскольку устанавливаются только файлы, перечисленные в [.filename]#pkg-"
+"plist#, можно безопасно всегда устанавливать документацию в `STAGEDIR` (см. "
+"crossref:special[staging,Staging]). Поэтому блоки `.if` требуются только в "
+"тех случаях, когда устанавливаемые файлы достаточно велики, чтобы вызвать "
+"значительные накладные расходы на ввод-вывод."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5334
+#, no-wrap
+msgid ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${DOCSDIR}\n"
+"\t${INSTALL_DATA} ${WRKSRC}/docs/xvdocs.ps ${STAGEDIR}${DOCSDIR}\n"
+msgstr ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${DOCSDIR}\n"
+"\t${INSTALL_DATA} ${WRKSRC}/docs/xvdocs.ps ${STAGEDIR}${DOCSDIR}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5338
+msgid ""
+"On the other hand, if there is a DOCS option in the port, install the "
+"documentation in a `post-install-DOCS-on` target. These targets are "
+"described in crossref:makefiles[options-targets, Additional Build Targets, "
+"`_target_-_OPT_-on` and `_target_-_OPT_-off`]."
+msgstr ""
+"С другой стороны, если в порте есть опция DOCS, установите документацию в "
+"цели `post-install-DOCS-on`. Эти цели описаны в crossref:makefiles[options-"
+"targets, Дополнительные цели сборки, `_target_-_OPT_-on` и `_target_-_OPT_-"
+"off`]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5340
+msgid ""
+"Here are some handy variables and how they are expanded by default when used "
+"in the [.filename]#Makefile#:"
+msgstr ""
+"Вот несколько полезных переменных и их стандартное раскрытие при "
+"использовании в [.filename]#Makefile#:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5342
+msgid "`DATADIR` gets expanded to [.filename]#PREFIX/share/PORTNAME#."
+msgstr "`DATADIR` раскрывается в [.filename]#PREFIX/share/PORTNAME#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5343
+msgid "`DATADIR_REL` gets expanded to [.filename]#share/PORTNAME#."
+msgstr "`DATADIR_REL` раскрывается в [.filename]#share/PORTNAME#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5344
+msgid "`DOCSDIR` gets expanded to [.filename]#PREFIX/share/doc/PORTNAME#."
+msgstr "`DOCSDIR` раскрывается в [.filename]#PREFIX/share/doc/PORTNAME#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5345
+msgid "`DOCSDIR_REL` gets expanded to [.filename]#share/doc/PORTNAME#."
+msgstr "`DOCSDIR_REL` раскрывается в [.filename]#share/doc/PORTNAME#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5346
+msgid ""
+"`EXAMPLESDIR` gets expanded to [.filename]#PREFIX/share/examples/PORTNAME#."
+msgstr ""
+"`EXAMPLESDIR` раскрывается в [.filename]#PREFIX/share/examples/PORTNAME#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5347
+msgid ""
+"`EXAMPLESDIR_REL` gets expanded to [.filename]#share/examples/PORTNAME#."
+msgstr "`EXAMPLESDIR_REL` раскрывается в [.filename]#share/examples/PORTNAME#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5353
+msgid ""
+"The `DOCS` option only controls additional documentation installed in "
+"`DOCSDIR`. It does not apply to standard man pages and info pages. Things "
+"installed in `EXAMPLESDIR` are controlled by the `EXAMPLES` option."
+msgstr ""
+"Опция `DOCS` управляет только дополнительной документацией, устанавливаемой "
+"в `DOCSDIR`. Она не применяется к стандартным man-страницам и info-"
+"страницам. Содержимое, устанавливаемое в `EXAMPLESDIR`, контролируется "
+"опцией `EXAMPLES`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5359
+msgid ""
+"These variables are exported to `PLIST_SUB`. Their values will appear there "
+"as pathnames relative to [.filename]#PREFIX# if possible. That is, "
+"[.filename]#share/doc/PORTNAME# will be substituted for `%%DOCSDIR%%` in the "
+"packing list by default, and so on. (See more on [.filename]#pkg-plist# "
+"substitution crossref:plist[plist-sub,here].)"
+msgstr ""
+"Эти переменные экспортируются в `PLIST_SUB`. Их значения будут представлены "
+"там в виде путей относительно [.filename]#PREFIX#, если это возможно. То "
+"есть, [.filename]#share/doc/PORTNAME# будет заменено на `%%DOCSDIR%%` в "
+"списке упаковки по умолчанию и так далее. (Подробнее о подстановках в "
+"[.filename]#pkg-plist# см. crossref:plist[plist-sub,здесь].)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5361
+msgid ""
+"All conditionally installed documentation files and directories are included "
+"in [.filename]#pkg-plist# with the `%%PORTDOCS%%` prefix, for example:"
+msgstr ""
+"Все условно устанавливаемые файлы и каталоги документации включаются в "
+"[.filename]#pkg-plist# с префиксом `%%PORTDOCS%%`, например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5366
+#, no-wrap
+msgid ""
+"%%PORTDOCS%%%%DOCSDIR%%/AUTHORS\n"
+"%%PORTDOCS%%%%DOCSDIR%%/CONTACT\n"
+msgstr ""
+"%%PORTDOCS%%%%DOCSDIR%%/AUTHORS\n"
+"%%PORTDOCS%%%%DOCSDIR%%/CONTACT\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5375
+msgid ""
+"As an alternative to enumerating the documentation files in [.filename]#pkg-"
+"plist#, a port can set the variable `PORTDOCS` to a list of file names and "
+"shell glob patterns to add to the final packing list. The names will be "
+"relative to `DOCSDIR`. Therefore, a port that utilizes `PORTDOCS`, and uses "
+"a non-default location for its documentation, must set `DOCSDIR` "
+"accordingly. If a directory is listed in `PORTDOCS` or matched by a glob "
+"pattern from this variable, the entire subtree of contained files and "
+"directories will be registered in the final packing list. If the `DOCS` "
+"option has been unset then files and directories listed in `PORTDOCS` would "
+"not be installed or added to port packing list. Installing the "
+"documentation at `PORTDOCS` as shown above remains up to the port itself. A "
+"typical example of utilizing `PORTDOCS`:"
+msgstr ""
+"В качестве альтернативы перечислению файлов документации в [.filename]#pkg-"
+"plist#, порт может установить переменную `PORTDOCS` в список имён файлов и "
+"шаблонов имен файлов shell для добавления в итоговый список упаковки. Имена "
+"будут относительны к `DOCSDIR`. Поэтому порт, использующий `PORTDOCS` и "
+"нестандартное расположение документации, должен соответствующим образом "
+"установить `DOCSDIR`. Если в `PORTDOCS` указан каталог или он соответствует "
+"шаблону из этой переменной, всё поддерево содержащихся файлов и каталогов "
+"будет зарегистрировано в итоговом списке упаковки. Если опция `DOCS` "
+"отключена, файлы и каталоги, перечисленные в `PORTDOCS`, не будут "
+"установлены или добавлены в список упаковки порта. Установка документации в "
+"`PORTDOCS`, как показано выше, остаётся на усмотрение самого порта. Типичный "
+"пример использования `PORTDOCS`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5379
+#, no-wrap
+msgid "PORTDOCS=\tREADME.* ChangeLog docs/*\n"
+msgstr "PORTDOCS=\tREADME.* ChangeLog docs/*\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5384
+msgid ""
+"The equivalents of `PORTDOCS` for files installed under `DATADIR` and "
+"`EXAMPLESDIR` are `PORTDATA` and `PORTEXAMPLES`, respectively."
+msgstr ""
+"Эквивалентами `PORTDOCS` для файлов, установленных в `DATADIR` и "
+"`EXAMPLESDIR`, являются `PORTDATA` и `PORTEXAMPLES` соответственно."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5388
+msgid ""
+"The contents of [.filename]#pkg-message# are displayed upon installation. "
+"See crossref:pkg-files[porting-message,the section on using [.filename]#pkg-"
+"message#] for details. [.filename]#pkg-message# does not need to be added "
+"to [.filename]#pkg-plist#."
+msgstr ""
+"Содержимое файла [.filename]#pkg-message# отображается при установке. "
+"Подробности см. в разделе crossref:pkg-files[porting-message,использование "
+"файла [.filename]#pkg-message#]. Файл [.filename]#pkg-message# не нужно "
+"добавлять в [.filename]#pkg-plist#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5391
+#, no-wrap
+msgid "Subdirectories Under `PREFIX`"
+msgstr "Подкаталоги в `PREFIX`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5400
+msgid ""
+"Try to let the port put things in the right subdirectories of `PREFIX`. "
+"Some ports lump everything and put it in the subdirectory with the port's "
+"name, which is incorrect. Also, many ports put everything except binaries, "
+"header files and manual pages in a subdirectory of [.filename]#lib#, which "
+"does not work well with the BSD paradigm. Many of the files must be moved "
+"to one of these directories: [.filename]#etc# (setup/configuration files), "
+"[.filename]#libexec# (executables started internally), [.filename]#sbin# "
+"(executables for superusers/managers), [.filename]#info# (documentation for "
+"info browser) or [.filename]#share# (architecture independent files). See "
+"man:hier[7] for details; the rules governing [.filename]#/usr# pretty much "
+"apply to [.filename]#/usr/local# too. The exception are ports dealing with "
+"USENET \"news\". They may use [.filename]#PREFIX/news# as a destination for "
+"their files."
+msgstr ""
+"Попробуйте сделать так, чтобы порт размещал файлы в правильных подкаталогах "
+"`PREFIX`. Некоторые порты собирают всё в кучу и помещают в подкаталог с "
+"именем порта, что неверно. Также многие порты размещают все файлы, кроме "
+"бинарников, заголовочных файлов и страниц руководства, в подкаталоге "
+"[.filename]#lib#, что плохо согласуется с парадигмой BSD. Многие из этих "
+"файлов должны быть перемещены в один из следующих каталогов: "
+"[.filename]#etc# (файлы настройки/конфигурации), [.filename]#libexec# "
+"(исполняемые файлы для внутреннего использования), [.filename]#sbin# "
+"(исполняемые файлы для суперпользователей/администраторов), "
+"[.filename]#info# (документация для браузера info) или [.filename]#share# "
+"(архитектурно-независимые файлы). Подробности см. в man:hier[7]; правила, "
+"действующие для [.filename]#/usr#, в основном применимы и к [.filename]#/usr/"
+"local#. Исключение составляют порты, связанные с USENET \"news\". Они могут "
+"использовать [.filename]#PREFIX/news# в качестве места назначения для своих "
+"файлов."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5402
+#, no-wrap
+msgid "Use `BINARY_ALIAS` to Rename Commands Instead of Patching the Build"
+msgstr "Используйте `BINARY_ALIAS` для переименования команд вместо исправления сборки"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5405
+msgid ""
+"When `BINARY_ALIAS` is defined it will create symlinks of the given commands "
+"in a directory which will be prepended to `PATH`."
+msgstr ""
+"Когда определена переменная `BINARY_ALIAS`, будут созданы символьные ссылки "
+"на указанные команды в каталоге, который будет добавлен в начало переменной "
+"`PATH`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5407
+msgid ""
+"Use it to substitute hardcoded commands the build phase relies on without "
+"having to patch any build files."
+msgstr ""
+"Используйте это для замены жёстко заданных команд, от которых зависит этап "
+"сборки, без необходимости исправлять какие-либо файлы сборки."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5409
+#, no-wrap
+msgid "Using `BINARY_ALIAS` to Make `gsed` Available as `sed`"
+msgstr "Использование `BINARY_ALIAS` для предоставления `gsed` в качестве `sed`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5414
+msgid ""
+"Some ports expect `sed` to behave like GNU sed and use features that "
+"man:sed[1] does not provide. GNU sed is available from package:textproc/"
+"gsed[] on FreeBSD."
+msgstr ""
+"Некоторые порты ожидают, что `sed` будет вести себя как GNU sed и используют "
+"возможности, которые man:sed[1] не предоставляет. GNU sed доступен в пакете "
+"package:textproc/gsed[] на FreeBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5416
+msgid ""
+"Use `BINARY_ALIAS` to substitute `sed` with `gsed` for the duration of the "
+"build:"
+msgstr "Используйте `BINARY_ALIAS` для замены `sed` на `gsed` на время сборки:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5422
+#, no-wrap
+msgid ""
+"BUILD_DEPENDS=\tgsed:textproc/gsed\n"
+"...\n"
+"BINARY_ALIAS=\tsed=gsed\n"
+msgstr ""
+"BUILD_DEPENDS=\tgsed:textproc/gsed\n"
+"...\n"
+"BINARY_ALIAS=\tsed=gsed\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5427
+#, no-wrap
+msgid "Using `BINARY_ALIAS` to Provide Aliases for Hardcoded `python3` Commands"
+msgstr "Использование `BINARY_ALIAS` для создания псевдонимов жестко заданных команд `python3`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5432
+msgid ""
+"A port that has a hardcoded reference to `python3` in its build scripts will "
+"need to have it available in `PATH` at build time. Use `BINARY_ALIAS` to "
+"create an alias that points to the right Python 3 binary:"
+msgstr ""
+"Порт, в котором есть жёсткая ссылка на `python3` в скриптах сборки, требует "
+"его наличия в `PATH` во время сборки. Используйте `BINARY_ALIAS` для "
+"создания псевдонима, указывающего на нужный бинарный файл Python 3:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5438
+#, no-wrap
+msgid ""
+"USES=\tpython:3.4+,build\n"
+"...\n"
+"BINARY_ALIAS=\tpython3=${PYTHON_CMD}\n"
+msgstr ""
+"USES=\tpython:3.4+,build\n"
+"...\n"
+"BINARY_ALIAS=\tpython3=${PYTHON_CMD}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5441
+msgid ""
+"See crossref:special[using-python,Using Python] for more information about "
+"`USES=python`."
+msgstr ""
+"См. crossref:special[using-python,Использование Python] для получения "
+"дополнительной информации о `USES=python`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5448
+msgid ""
+"Binary aliases are created after the dependencies provided via "
+"`BUILD_DEPENDS` and `LIB_DEPENDS` are processed and before the `configure` "
+"target. This leads to various limitations. For example, programs installed "
+"via `TEST_DEPENDS` cannot be used to create a binary alias as test "
+"dependencies specified this way are processed after binary aliases are "
+"created."
+msgstr ""
+"Бинарные псевдонимы создаются после обработки зависимостей, указанных через "
+"`BUILD_DEPENDS` и `LIB_DEPENDS`, но до цели `configure`. Это приводит к "
+"различным ограничениям. Например, программы, установленные через "
+"`TEST_DEPENDS`, нельзя использовать для создания бинарного псевдонима, так "
+"как тестовые зависимости, указанные таким образом, обрабатываются после "
+"создания бинарных псевдонимов."
diff --git a/documentation/content/ru/books/porters-handbook/new-port/_index.adoc b/documentation/content/ru/books/porters-handbook/new-port/_index.adoc
index fc44c12e37..dc7350143a 100644
--- a/documentation/content/ru/books/porters-handbook/new-port/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/new-port/_index.adoc
@@ -1,15 +1,17 @@
---
-title: Глава 2. Как самому сделать новый порт
-prev: books/porters-handbook/porting-why
+description: 'Как сделать новый порт'
next: books/porters-handbook/quick-porting
+params:
+ path: /books/porters-handbook/new-port/
+prev: books/porters-handbook/porting-why
showBookMenu: true
+tags: ["new port", "upgrading", "guidelines", "ports"]
+title: 'Глава 2. Как самому сделать новый порт'
weight: 2
-params:
- path: "/books/porters-handbook/new-port/"
---
[[own-port]]
-= Making a New Port
+= Как самому сделать новый порт
:doctype: book
:toc: macro
:toclevels: 1
@@ -57,4 +59,4 @@ endif::[]
Только часть переменных (`_VAR_`), которые могут быть переопределены, описаны в этом документе. Большинство (если не все) описаны в начале файла [.filename]#/usr/ports/Mk/bsd.port.mk#; остальные, скорее всего, тоже там описаны. Заметьте, что в этом файле используется нестандартная настройка шага табуляции: Emacs и Vim должны распознать это при загрузке файла. Как man:vi[1], так и man:ex[1] могут быть настроены на использование правильного значения выдачей команды `:set tabstop=4` после загрузки файла.
====
-Ищете, с чего бы начать попроще? Посмотрите на http://wiki.freebsd.org/WantedPorts[перечень запрошенных портов], есть ли там такие, над которыми вы можете работать.
+Ищете, с чего бы начать попроще? Посмотрите на https://wiki.freebsd.org/WantedPorts[перечень запрошенных портов], есть ли там такие, над которыми вы можете работать.
diff --git a/documentation/content/ru/books/porters-handbook/new-port/_index.po b/documentation/content/ru/books/porters-handbook/new-port/_index.po
new file mode 100644
index 0000000000..8908fe56d6
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/new-port/_index.po
@@ -0,0 +1,101 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-12 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbooknew-port_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/new-port/_index.adoc:1
+#, no-wrap
+msgid "How to make a new FreeBSD Port"
+msgstr "Как сделать новый порт"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/new-port/_index.adoc:1
+#, no-wrap
+msgid "Chapter 2. Making a New Port"
+msgstr "Глава 2. Как самому сделать новый порт"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/new-port/_index.adoc:14
+#, no-wrap
+msgid "Making a New Port"
+msgstr "Как самому сделать новый порт"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/new-port/_index.adoc:52
+msgid "Interested in making a new port, or upgrading existing ports? Great!"
+msgstr ""
+"Итак, вы интересуетесь, как создать собственный порт или обновить "
+"существующий? Великолепно!"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/new-port/_index.adoc:55
+msgid ""
+"What follows are some guidelines for creating a new port for FreeBSD. To "
+"upgrade an existing port, read this, then read crossref:upgrading[port-"
+"upgrading,Upgrading a Port]."
+msgstr ""
+"Ниже находятся некоторые указания по созданию нового порта для FreeBSD. Если "
+"вы хотите обновить существующий порт, вы должны прочесть их, а затем "
+"crossref:upgrading[port-upgrading, Обновление отдельного порта]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/new-port/_index.adoc:59
+msgid ""
+"When this document is not sufficiently detailed, refer to [.filename]#/usr/"
+"ports/Mk/bsd.port.mk#, which is included by all port "
+"[.filename]#Makefiles#. Even those not hacking [.filename]##Makefile##s "
+"daily can gain much knowledge from it. Additionally, specific questions can "
+"be sent to the {freebsd-ports}."
+msgstr ""
+"Если этот документ недостаточно подробен, вы должны обратиться к файлу "
+"[.filename]#/usr/ports/Mk/bsd.port.mk#, который включается в make-файл "
+"каждого порта. Он хорошо прокомментирован, и даже если вы не занимаетесь "
+"хакингом make-файлов каждодневно, из него вы сможете узнать много нового. "
+"Кроме того, конкретные вопросы можно задать, послав письмо на адрес {freebsd-"
+"ports}."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/new-port/_index.adoc:66
+msgid ""
+"Only a fraction of the variables (`_VAR_`) that can be overridden are "
+"mentioned in this document. Most (if not all) are documented at the start "
+"of [.filename]#/usr/ports/Mk/bsd.port.mk#; the others probably ought to be. "
+"Note that this file uses a non-standard tab setting: Emacs and Vim will "
+"recognize the setting on loading the file. Both man:vi[1] and man:ex[1] can "
+"be set to use the correct value by typing `:set tabstop=4` once the file has "
+"been loaded."
+msgstr ""
+"Только часть переменных (`_VAR_`), которые могут быть переопределены, "
+"описаны в этом документе. Большинство (если не все) описаны в начале файла "
+"[.filename]#/usr/ports/Mk/bsd.port.mk#; остальные, скорее всего, тоже там "
+"описаны. Заметьте, что в этом файле используется нестандартная настройка "
+"шага табуляции: Emacs и Vim должны распознать это при загрузке файла. Как "
+"man:vi[1], так и man:ex[1] могут быть настроены на использование правильного "
+"значения выдачей команды `:set tabstop=4` после загрузки файла."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/new-port/_index.adoc:68
+msgid ""
+"Looking for something easy to start with? Take a look at the https://"
+"wiki.freebsd.org/WantedPorts[list of requested ports] and see if you can "
+"work on one (or more)."
+msgstr ""
+"Ищете, с чего бы начать попроще? Посмотрите на https://wiki.freebsd.org/"
+"WantedPorts[перечень запрошенных портов], есть ли там такие, над которыми вы "
+"можете работать."
diff --git a/documentation/content/ru/books/porters-handbook/order/_index.adoc b/documentation/content/ru/books/porters-handbook/order/_index.adoc
new file mode 100644
index 0000000000..82869f5a85
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/order/_index.adoc
@@ -0,0 +1,260 @@
+---
+description: 'Порядок переменных в Makefile портов FreeBSD'
+next: books/porters-handbook/keeping-up
+params:
+ path: /books/porters-handbook/order/
+prev: books/porters-handbook/porting-samplem
+showBookMenu: true
+tags: ["order", "PORTNAME", "PATCHFILES", "MAINTAINER", "LICENSE", "dependencies", "USES"]
+title: 'Глава 15. Порядок переменных в Makefile портов'
+weight: 15
+---
+
+[[porting-order]]
+= Порядок переменных в Makefile портов
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 15
+: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::[]
+
+Первые разделы [.filename]#Makefile# всегда должны идти в одном и том же порядке. Это стандартное правило позволяет любому легко читать любой порт, не тратя время на поиск переменных в произвольном порядке.
+
+[NOTE]
+====
+Описаные здесь разделы и переменные являются обязательными в обычном порте. В подчиненном порте многие разделы и переменные могут быть пропущены.
+====
+
+[IMPORTANT]
+====
+Каждый следующий блок должен быть отделен от предыдущего одним пустым пробелом.
+
+В следующих блоках устанавливайте только переменные, которые требуются для порта. Определяйте эти переменные в порядке, указанном здесь.
+====
+
+[[porting-order-portname]]
+== Блок `PORTNAME`
+
+Этот блок является наиболее важным. Он определяет имя порта, версию, расположение файла дистрибутива и категорию. Переменные должны быть в следующем порядке:
+
+* crossref:makefiles[makefile-portname,`PORTNAME`] * crossref:makefiles[makefile-versions,`PORTVERSION`][crossref:order[portversion-footnote, 1]]
+* crossref:makefiles[makefile-versions,`DISTVERSIONPREFIX`] * crossref:makefiles[makefile-versions,`DISTVERSION`][crossref:order[portversion-footnote, 1]]
+* crossref:makefiles[makefile-versions,`DISTVERSIONSUFFIX`]
+* crossref:makefiles[makefile-portrevision,`PORTREVISION`]
+* crossref:makefiles[makefile-portepoch,`PORTEPOCH`]
+* crossref:makefiles[makefile-categories,`CATEGORIES`]
+* crossref:makefiles[makefile-master_sites,`MASTER_SITES`]
+* crossref:makefiles[makefile-master_sites-shorthand,`MASTER_SITE_SUBDIR`] (устарело)
+* crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMEPREFIX`]
+* crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMESUFFIX`]
+* crossref:makefiles[makefile-distname,`DISTNAME`]
+* crossref:makefiles[makefile-extract_sufx,`EXTRACT_SUFX`]
+* crossref:makefiles[makefile-distfiles-definition,`DISTFILES`]
+* crossref:makefiles[makefile-dist_subdir,`DIST_SUBDIR`]
+* crossref:makefiles[makefile-extract_only,`EXTRACT_ONLY`]
+
+[[portversion-footnote]]
+[IMPORTANT]
+====
+Может быть использован только один из параметров — PORTVERSION или DISTVERSION.
+====
+
+[[porting-order-patch]]
+== Блок `PATCHFILES`
+
+Этот блок является необязательным. Переменные:
+
+* crossref:makefiles[porting-patchfiles,`PATCH_SITES`]
+* crossref:makefiles[porting-patchfiles,`PATCHFILES`]
+* crossref:makefiles[porting-patchfiles,`PATCH_DIST_STRIP`]
+
+[[porting-order-maintainer]]
+== Блок `MAINTAINER`
+
+Этот блок является обязательным. Переменные следующие:
+
+* crossref:makefiles[makefile-maintainer,`MAINTAINER`]
+* crossref:makefiles[makefile-comment,`COMMENT`]
+* crossref:makefiles[makefile-www,`WWW`]
+
+[[porting-order-license]]
+== Блок `LICENSE`
+
+Этот блок является необязательным, хотя настоятельно рекомендуется. Переменные:
+
+* crossref:makefiles[licenses-license,`LICENSE`]
+* crossref:makefiles[licenses-license_comb,`LICENSE_COMB`]
+* crossref:makefiles[licenses-license_groups,`LICENSE_GROUPS`] или `LICENSE_GROUPS_NAME`
+* crossref:makefiles[licenses-license_name,`LICENSE_NAME`] или `LICENSE_NAME_NAME`
+* crossref:makefiles[licenses-license_text,`LICENSE_TEXT`] или `LICENSE_TEXT_NAME`
+* crossref:makefiles[licenses-license_file,`LICENSE_FILE`] или `LICENSE_FILE_NAME`
+* crossref:makefiles[licenses-license_perms,`LICENSE_PERMS`] или `LICENSE_PERMS_NAME_`
+* crossref:makefiles[licenses-license_distfiles,`LICENSE_DISTFILES`] или `LICENSE_DISTFILES_NAME`
+
+Если имеется несколько лицензий, отсортируйте различные переменные LICENSE_VAR_NAME по названию лицензии.
+
+[[porting-order-broken]]
+== Общие сообщения `BROKEN`/`IGNORE`/`DEPRECATED`
+
+Этот блок необязателен. Переменные:
+
+* crossref:porting-dads[dads-deprecated,`DEPRECATED`]
+* crossref:porting-dads[dads-deprecated,`EXPIRATION_DATE`]
+* crossref:porting-dads[dads-noinstall,`FORBIDDEN`]
+* crossref:porting-dads[dads-noinstall,`BROKEN`]
+* crossref:porting-dads[dads-noinstall,`BROKEN_*`]
+* crossref:porting-dads[dads-noinstall,`IGNORE`]
+* crossref:porting-dads[dads-noinstall,`IGNORE_*`]
+* crossref:porting-dads[dads-noinstall,`ONLY_FOR_ARCHS`]
+* crossref:porting-dads[dads-noinstall,`ONLY_FOR_ARCHS_REASON*`]
+* crossref:porting-dads[dads-noinstall,`NOT_FOR_ARCHS`]
+* crossref:porting-dads[dads-noinstall,`NOT_FOR_ARCHS_REASON*`]
+
+[NOTE]
+====
+`BROKEN_*` и `IGNORE_*` могут быть любыми общими переменными, например, `IGNORE_amd64`, `BROKEN_FreeBSD_10` и т.д. За исключением переменных, которые зависят от crossref:uses[uses,`USES`], их следует размещать в crossref:order[porting-order-uses, `USES` и `USE_x`]. Например, `IGNORE_WITH_PHP` работает только если установлен crossref:uses[uses-php,`php`], а `BROKEN_SSL` — только если установлен crossref:uses[uses-ssl,`ssl`].
+
+Если порт помечен как BROKEN при выполнении определённых условий, и эти условия можно проверить только после включения [.filename]#bsd.port.options.mk# или [.filename]#bsd.port.pre.mk#, то такие переменные должны быть установлены позже, в crossref:order[porting-order-rest, Остальные Переменные].
+====
+
+[[porting-order-depends]]
+== Блок зависимостей
+
+Этот блок необязателен. Переменные:
+
+* crossref:makefiles[makefile-fetch_depends,`FETCH_DEPENDS`]
+* crossref:makefiles[makefile-extract_depends,`EXTRACT_DEPENDS`]
+* crossref:makefiles[makefile-patch_depends,`PATCH_DEPENDS`]
+* crossref:makefiles[makefile-build_depends,`BUILD_DEPENDS`]
+* crossref:makefiles[makefile-lib_depends,`LIB_DEPENDS`]
+* crossref:makefiles[makefile-run_depends,`RUN_DEPENDS`]
+* `TEST_DEPENDS`
+
+[[porting-order-flavors]]
+== Флейворы
+
+Этот блок необязателен.
+
+Начните этот раздел с определения `FLAVORS`. Затем рассмотрите возможные вспомогательные инструменты флейворов. Дополнительную информацию см. в разделе crossref:flavors[flavors-using,Использование флейворов (FLAVORS)].
+
+Конструкции, устанавливающие переменные, недоступные в виде помощников, с использованием `.if ${FLAVOR:U} == foo`, должны быть размещены в соответствующих разделах ниже.
+
+[[porting-order-uses]]
+== `USES` и `USE_x`
+
+Начните этот раздел с определения `USES`, а затем возможных `USE_x`.
+
+Держите связанные переменные рядом. Например, если используется crossref:makefiles[makefile-master_sites-github,`USE_GITHUB`], всегда размещайте переменные `GH_*` сразу после неё.
+
+[[porting-order-variables]]
+== Стандартные переменные bsd.port.mk
+
+Этот блок раздела предназначен для переменных, которые могут быть определены в [.filename]#bsd.port.mk# и не принадлежат ни к одному из предыдущих блоков разделов.
+
+Порядок не важен, однако старайтесь держать схожие переменные вместе. Например, переменные uid и gid `USERS` и `GROUPS`. Конфигурационные переменные `CONFIGURE_*` и `*_CONFIGURE`. Списки файлов и директорий `PORTDOCS` и `PORTEXAMPLES`.
+
+[[porting-order-options]]
+== Параметры и помощники
+
+Если порт использует crossref:makefiles[makefile-options,фреймворк опций], сначала определите `OPTIONS_DEFINE` и `OPTIONS_DEFAULT`, затем остальные переменные `OPTIONS_*`, далее описания `*_DESC`, а затем вспомогательные опции. Старайтесь сортировать их все в алфавитном порядке.
+
+[[porting-order-options-ex1]]
+.Пример порядка переменных-опций
+[example]
+====
+Опции `FOO` и `BAR` не имеют стандартного описания, поэтому его необходимо написать. Остальные опции уже имеют описание в [.filename]#Mk/bsd.options.desc.mk#, поэтому его создание не требуется. Переменные `DOCS` и `EXAMPLES` используют вспомогательные цели для установки своих файлов, они приведены здесь для полноты, хотя относятся к разделу crossref:order[porting-order-targets, Цели], поэтому перед ними могут быть вставлены другие переменные и цели.
+
+[.programlisting]
+....
+OPTIONS_DEFINE= DOCS EXAMPLES FOO BAR
+OPTIONS_DEFAULT= FOO
+OPTIONS_RADIO= SSL
+OPTIONS_RADIO_SSL= OPENSSL GNUTLS
+OPTIONS_SUB= yes
+
+BAR_DESC= Enable bar support
+FOO_DESC= Enable foo support
+
+BAR_CONFIGURE_WITH= bar=${LOCALBASE}
+FOO_CONFIGURE_ENABLE= foo
+GNUTLS_CONFIGURE_ON= --with-ssl=gnutls
+OPENSSL_CONFIGURE_ON= --with-ssl=openssl
+
+post-install-DOCS-on:
+ ${MKDIR} ${STAGEDIR}${DOCSDIR}
+ cd ${WRKSRC}/doc && ${COPYTREE_SHARE} . ${STAGEDIR}${DOCSDIR}
+
+post-install-EXAMPLES-on:
+ ${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
+ cd ${WRKSRC}/ex && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR}
+....
+
+====
+
+[[porting-order-rest]]
+== Остальные переменные
+
+И затем, остальные переменные, которые не упоминались в предыдущих блоках.
+
+[[porting-order-targets]]
+== Цели
+
+После определения всех переменных можно определить дополнительные цели man:make[1]. Следует располагать `pre-*` перед `post-*` и в том же порядке, в котором выполняются различные этапы:
+
+* `fetch`
+* `extract`
+* `patch`
+* `configure`
+* `build`
+* `install`
+* `test`
+
+[TIP]
+====
+При использовании опций `helpers` для цели `target` сохраняйте их в алфавитном порядке, но оставляйте `*-on` перед `*-off`. Если также используется основная цель, размещайте её перед дополнительными:
+
+[.programlisting]
+....
+post-install:
+ # install generic bits
+
+post-install-DOCS-on:
+ # Install documentation
+
+post-install-X11-on:
+ # Install X11 related bits
+
+post-install-X11-off:
+ # Install bits that should be there if X11 is disabled
+....
+====
diff --git a/documentation/content/ru/books/porters-handbook/order/_index.po b/documentation/content/ru/books/porters-handbook/order/_index.po
new file mode 100644
index 0000000000..0492f69f9a
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/order/_index.po
@@ -0,0 +1,780 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-16 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookorder_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:1
+#, no-wrap
+msgid "Order of Variables in FreeBSD Port Makefiles"
+msgstr "Порядок переменных в Makefile портов FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:1
+#, no-wrap
+msgid "Chapter 15. Order of Variables in Port Makefiles"
+msgstr "Глава 15. Порядок переменных в Makefile портов"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:14
+#, no-wrap
+msgid "Order of Variables in Port Makefiles"
+msgstr "Порядок переменных в Makefile портов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:53
+msgid ""
+"The first sections of the [.filename]#Makefile# must always come in the same "
+"order. This standard makes it so everyone can easily read any port without "
+"having to search for variables in a random order."
+msgstr ""
+"Первые разделы [.filename]#Makefile# всегда должны идти в одном и том же "
+"порядке. Это стандартное правило позволяет любому легко читать любой порт, "
+"не тратя время на поиск переменных в произвольном порядке."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:58
+msgid ""
+"The sections and variables described here are mandatory in a ordinary port. "
+"In a slave port, many sections and variables can be skipped."
+msgstr ""
+"Описаные здесь разделы и переменные являются обязательными в обычном порте. "
+"В подчиненном порте многие разделы и переменные могут быть пропущены."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:63
+msgid ""
+"Each following block must be separated from the previous block by a single "
+"blank line."
+msgstr ""
+"Каждый следующий блок должен быть отделен от предыдущего одним пустым "
+"пробелом."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:66
+msgid ""
+"In the following blocks, only set the variables that are required by the "
+"port. Define these variables in the order they are shown here."
+msgstr ""
+"В следующих блоках устанавливайте только переменные, которые требуются для "
+"порта. Определяйте эти переменные в порядке, указанном здесь."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:69
+#, no-wrap
+msgid "`PORTNAME` Block"
+msgstr "Блок `PORTNAME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:73
+msgid ""
+"This block is the most important. It defines the port name, version, "
+"distribution file location, and category. The variables must be in this "
+"order:"
+msgstr ""
+"Этот блок является наиболее важным. Он определяет имя порта, версию, "
+"расположение файла дистрибутива и категорию. Переменные должны быть в "
+"следующем порядке:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:77
+msgid ""
+"crossref:makefiles[makefile-portname,`PORTNAME`] * "
+"crossref:makefiles[makefile-versions,`PORTVERSION`]"
+"[crossref:order[portversion-footnote, 1]]"
+msgstr ""
+"crossref:makefiles[makefile-portname,`PORTNAME`] * "
+"crossref:makefiles[makefile-versions,`PORTVERSION`]"
+"[crossref:order[portversion-footnote, 1]]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:80
+msgid ""
+"crossref:makefiles[makefile-versions,`DISTVERSIONPREFIX`] * "
+"crossref:makefiles[makefile-versions,`DISTVERSION`]"
+"[crossref:order[portversion-footnote, 1]]"
+msgstr ""
+"crossref:makefiles[makefile-versions,`DISTVERSIONPREFIX`] * "
+"crossref:makefiles[makefile-versions,`DISTVERSION`]"
+"[crossref:order[portversion-footnote, 1]]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:81
+msgid "crossref:makefiles[makefile-versions,`DISTVERSIONSUFFIX`]"
+msgstr "crossref:makefiles[makefile-versions,`DISTVERSIONSUFFIX`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:82
+msgid "crossref:makefiles[makefile-portrevision,`PORTREVISION`]"
+msgstr "crossref:makefiles[makefile-portrevision,`PORTREVISION`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:83
+msgid "crossref:makefiles[makefile-portepoch,`PORTEPOCH`]"
+msgstr "crossref:makefiles[makefile-portepoch,`PORTEPOCH`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:84
+msgid "crossref:makefiles[makefile-categories,`CATEGORIES`]"
+msgstr "crossref:makefiles[makefile-categories,`CATEGORIES`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:85
+msgid "crossref:makefiles[makefile-master_sites,`MASTER_SITES`]"
+msgstr "crossref:makefiles[makefile-master_sites,`MASTER_SITES`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:86
+msgid ""
+"crossref:makefiles[makefile-master_sites-shorthand,`MASTER_SITE_SUBDIR`] "
+"(deprecated)"
+msgstr ""
+"crossref:makefiles[makefile-master_sites-shorthand,`MASTER_SITE_SUBDIR`] "
+"(устарело)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:87
+msgid "crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMEPREFIX`]"
+msgstr "crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMEPREFIX`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:88
+msgid "crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMESUFFIX`]"
+msgstr "crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMESUFFIX`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:89
+msgid "crossref:makefiles[makefile-distname,`DISTNAME`]"
+msgstr "crossref:makefiles[makefile-distname,`DISTNAME`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:90
+msgid "crossref:makefiles[makefile-extract_sufx,`EXTRACT_SUFX`]"
+msgstr "crossref:makefiles[makefile-extract_sufx,`EXTRACT_SUFX`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:91
+msgid "crossref:makefiles[makefile-distfiles-definition,`DISTFILES`]"
+msgstr "crossref:makefiles[makefile-distfiles-definition,`DISTFILES`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:92
+msgid "crossref:makefiles[makefile-dist_subdir,`DIST_SUBDIR`]"
+msgstr "crossref:makefiles[makefile-dist_subdir,`DIST_SUBDIR`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:93
+msgid "crossref:makefiles[makefile-extract_only,`EXTRACT_ONLY`]"
+msgstr "crossref:makefiles[makefile-extract_only,`EXTRACT_ONLY`]"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:98
+msgid "Only one of PORTVERSION and DISTVERSION can be used."
+msgstr ""
+"Может быть использован только один из параметров — PORTVERSION или "
+"DISTVERSION."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:101
+#, no-wrap
+msgid "`PATCHFILES` Block"
+msgstr "Блок `PATCHFILES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:105
+msgid "This block is optional. The variables are:"
+msgstr "Этот блок является необязательным. Переменные:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:107
+msgid "crossref:makefiles[porting-patchfiles,`PATCH_SITES`]"
+msgstr "crossref:makefiles[porting-patchfiles,`PATCH_SITES`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:108
+msgid "crossref:makefiles[porting-patchfiles,`PATCHFILES`]"
+msgstr "crossref:makefiles[porting-patchfiles,`PATCHFILES`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:109
+msgid "crossref:makefiles[porting-patchfiles,`PATCH_DIST_STRIP`]"
+msgstr "crossref:makefiles[porting-patchfiles,`PATCH_DIST_STRIP`]"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:111
+#, no-wrap
+msgid "`MAINTAINER` Block"
+msgstr "Блок `MAINTAINER`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:115
+msgid "This block is mandatory. The variables are:"
+msgstr "Этот блок является обязательным. Переменные следующие:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:117
+msgid "crossref:makefiles[makefile-maintainer,`MAINTAINER`]"
+msgstr "crossref:makefiles[makefile-maintainer,`MAINTAINER`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:118
+msgid "crossref:makefiles[makefile-comment,`COMMENT`]"
+msgstr "crossref:makefiles[makefile-comment,`COMMENT`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:119
+msgid "crossref:makefiles[makefile-www,`WWW`]"
+msgstr "crossref:makefiles[makefile-www,`WWW`]"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:121
+#, no-wrap
+msgid "`LICENSE` Block"
+msgstr "Блок `LICENSE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:125
+msgid ""
+"This block is optional, although it is highly recommended. The variables "
+"are:"
+msgstr ""
+"Этот блок является необязательным, хотя настоятельно рекомендуется. "
+"Переменные:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:127
+msgid "crossref:makefiles[licenses-license,`LICENSE`]"
+msgstr "crossref:makefiles[licenses-license,`LICENSE`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:128
+msgid "crossref:makefiles[licenses-license_comb,`LICENSE_COMB`]"
+msgstr "crossref:makefiles[licenses-license_comb,`LICENSE_COMB`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:129
+msgid ""
+"crossref:makefiles[licenses-license_groups,`LICENSE_GROUPS`] or "
+"`LICENSE_GROUPS_NAME`"
+msgstr ""
+"crossref:makefiles[licenses-license_groups,`LICENSE_GROUPS`] или "
+"`LICENSE_GROUPS_NAME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:130
+msgid ""
+"crossref:makefiles[licenses-license_name,`LICENSE_NAME`] or "
+"`LICENSE_NAME_NAME`"
+msgstr ""
+"crossref:makefiles[licenses-license_name,`LICENSE_NAME`] или "
+"`LICENSE_NAME_NAME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:131
+msgid ""
+"crossref:makefiles[licenses-license_text,`LICENSE_TEXT`] or "
+"`LICENSE_TEXT_NAME`"
+msgstr ""
+"crossref:makefiles[licenses-license_text,`LICENSE_TEXT`] или "
+"`LICENSE_TEXT_NAME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:132
+msgid ""
+"crossref:makefiles[licenses-license_file,`LICENSE_FILE`] or "
+"`LICENSE_FILE_NAME`"
+msgstr ""
+"crossref:makefiles[licenses-license_file,`LICENSE_FILE`] или "
+"`LICENSE_FILE_NAME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:133
+msgid ""
+"crossref:makefiles[licenses-license_perms,`LICENSE_PERMS`] or "
+"`LICENSE_PERMS_NAME_`"
+msgstr ""
+"crossref:makefiles[licenses-license_perms,`LICENSE_PERMS`] или "
+"`LICENSE_PERMS_NAME_`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:134
+msgid ""
+"crossref:makefiles[licenses-license_distfiles,`LICENSE_DISTFILES`] or "
+"`LICENSE_DISTFILES_NAME`"
+msgstr ""
+"crossref:makefiles[licenses-license_distfiles,`LICENSE_DISTFILES`] или "
+"`LICENSE_DISTFILES_NAME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:136
+msgid ""
+"If there are multiple licenses, sort the different LICENSE_VAR_NAME "
+"variables by license name."
+msgstr ""
+"Если имеется несколько лицензий, отсортируйте различные переменные "
+"LICENSE_VAR_NAME по названию лицензии."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:138
+#, no-wrap
+msgid "Generic `BROKEN`/`IGNORE`/`DEPRECATED` Messages"
+msgstr "Общие сообщения `BROKEN`/`IGNORE`/`DEPRECATED`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:141
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:171
+msgid "This block is optional. The variables are:"
+msgstr "Этот блок необязателен. Переменные:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:143
+msgid "crossref:porting-dads[dads-deprecated,`DEPRECATED`]"
+msgstr "crossref:porting-dads[dads-deprecated,`DEPRECATED`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:144
+msgid "crossref:porting-dads[dads-deprecated,`EXPIRATION_DATE`]"
+msgstr "crossref:porting-dads[dads-deprecated,`EXPIRATION_DATE`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:145
+msgid "crossref:porting-dads[dads-noinstall,`FORBIDDEN`]"
+msgstr "crossref:porting-dads[dads-noinstall,`FORBIDDEN`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:146
+msgid "crossref:porting-dads[dads-noinstall,`BROKEN`]"
+msgstr "crossref:porting-dads[dads-noinstall,`BROKEN`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:147
+msgid "crossref:porting-dads[dads-noinstall,`BROKEN_*`]"
+msgstr "crossref:porting-dads[dads-noinstall,`BROKEN_*`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:148
+msgid "crossref:porting-dads[dads-noinstall,`IGNORE`]"
+msgstr "crossref:porting-dads[dads-noinstall,`IGNORE`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:149
+msgid "crossref:porting-dads[dads-noinstall,`IGNORE_*`]"
+msgstr "crossref:porting-dads[dads-noinstall,`IGNORE_*`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:150
+msgid "crossref:porting-dads[dads-noinstall,`ONLY_FOR_ARCHS`]"
+msgstr "crossref:porting-dads[dads-noinstall,`ONLY_FOR_ARCHS`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:151
+msgid "crossref:porting-dads[dads-noinstall,`ONLY_FOR_ARCHS_REASON*`]"
+msgstr "crossref:porting-dads[dads-noinstall,`ONLY_FOR_ARCHS_REASON*`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:152
+msgid "crossref:porting-dads[dads-noinstall,`NOT_FOR_ARCHS`]"
+msgstr "crossref:porting-dads[dads-noinstall,`NOT_FOR_ARCHS`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:153
+msgid "crossref:porting-dads[dads-noinstall,`NOT_FOR_ARCHS_REASON*`]"
+msgstr "crossref:porting-dads[dads-noinstall,`NOT_FOR_ARCHS_REASON*`]"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:160
+msgid ""
+"`BROKEN_*` and `IGNORE_*` can be any generic variables, for example, "
+"`IGNORE_amd64`, `BROKEN_FreeBSD_10`, etc. With the exception of variables "
+"that depend on a crossref:uses[uses,`USES`], place those in "
+"crossref:order[porting-order-uses, `USES` and `USE_x`]. For instance, "
+"`IGNORE_WITH_PHP` only works if crossref:uses[uses-php,`php`] is set, and "
+"`BROKEN_SSL` only if crossref:uses[uses-ssl,`ssl`] is set."
+msgstr ""
+"`BROKEN_*` и `IGNORE_*` могут быть любыми общими переменными, например, "
+"`IGNORE_amd64`, `BROKEN_FreeBSD_10` и т.д. За исключением переменных, "
+"которые зависят от crossref:uses[uses,`USES`], их следует размещать в "
+"crossref:order[porting-order-uses, `USES` и `USE_x`]. Например, "
+"`IGNORE_WITH_PHP` работает только если установлен crossref:uses[uses-"
+"php,`php`], а `BROKEN_SSL` — только если установлен crossref:uses[uses-"
+"ssl,`ssl`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:165
+msgid ""
+"If the port is marked BROKEN when some conditions are met, and such "
+"conditions can only be tested after including "
+"[.filename]#bsd.port.options.mk# or [.filename]#bsd.port.pre.mk#, then those "
+"variables should be set later, in crossref:order[porting-order-rest, The "
+"Rest of the Variables]."
+msgstr ""
+"Если порт помечен как BROKEN при выполнении определённых условий, и эти "
+"условия можно проверить только после включения "
+"[.filename]#bsd.port.options.mk# или [.filename]#bsd.port.pre.mk#, то такие "
+"переменные должны быть установлены позже, в crossref:order[porting-order-"
+"rest, Остальные Переменные]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:168
+#, no-wrap
+msgid "The Dependencies Block"
+msgstr "Блок зависимостей"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:173
+msgid "crossref:makefiles[makefile-fetch_depends,`FETCH_DEPENDS`]"
+msgstr "crossref:makefiles[makefile-fetch_depends,`FETCH_DEPENDS`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:174
+msgid "crossref:makefiles[makefile-extract_depends,`EXTRACT_DEPENDS`]"
+msgstr "crossref:makefiles[makefile-extract_depends,`EXTRACT_DEPENDS`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:175
+msgid "crossref:makefiles[makefile-patch_depends,`PATCH_DEPENDS`]"
+msgstr "crossref:makefiles[makefile-patch_depends,`PATCH_DEPENDS`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:176
+msgid "crossref:makefiles[makefile-build_depends,`BUILD_DEPENDS`]"
+msgstr "crossref:makefiles[makefile-build_depends,`BUILD_DEPENDS`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:177
+msgid "crossref:makefiles[makefile-lib_depends,`LIB_DEPENDS`]"
+msgstr "crossref:makefiles[makefile-lib_depends,`LIB_DEPENDS`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:178
+msgid "crossref:makefiles[makefile-run_depends,`RUN_DEPENDS`]"
+msgstr "crossref:makefiles[makefile-run_depends,`RUN_DEPENDS`]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:179
+msgid "`TEST_DEPENDS`"
+msgstr "`TEST_DEPENDS`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:181
+#, no-wrap
+msgid "Flavors"
+msgstr "Флейворы"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:184
+msgid "This block is optional."
+msgstr "Этот блок необязателен."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:188
+msgid ""
+"Start this section with defining `FLAVORS`. Continue with the possible "
+"Flavors helpers. See crossref:flavors[flavors-using,Using FLAVORS] for more "
+"Information."
+msgstr ""
+"Начните этот раздел с определения `FLAVORS`. Затем рассмотрите возможные "
+"вспомогательные инструменты флейворов. Дополнительную информацию см. в "
+"разделе crossref:flavors[flavors-using,Использование флейворов (FLAVORS)]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:190
+msgid ""
+"Constructs setting variables not available as helpers using `.if ${FLAVOR:U} "
+"== foo` should go in their respective sections below."
+msgstr ""
+"Конструкции, устанавливающие переменные, недоступные в виде помощников, с "
+"использованием `.if ${FLAVOR:U} == foo`, должны быть размещены в "
+"соответствующих разделах ниже."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:192
+#, no-wrap
+msgid "`USES` and `USE_x`"
+msgstr "`USES` и `USE_x`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:195
+msgid "Start this section with defining `USES`, and then possible `USE_x`."
+msgstr "Начните этот раздел с определения `USES`, а затем возможных `USE_x`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:198
+msgid ""
+"Keep related variables close together. For example, if using "
+"crossref:makefiles[makefile-master_sites-github,`USE_GITHUB`], always put "
+"the `GH_*` variables right after it."
+msgstr ""
+"Держите связанные переменные рядом. Например, если используется "
+"crossref:makefiles[makefile-master_sites-github,`USE_GITHUB`], всегда "
+"размещайте переменные `GH_*` сразу после неё."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:200
+#, no-wrap
+msgid "Standard bsd.port.mk Variables"
+msgstr "Стандартные переменные bsd.port.mk"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:203
+msgid ""
+"This section block is for variables that can be defined in "
+"[.filename]#bsd.port.mk# that do not belong in any of the previous section "
+"blocks."
+msgstr ""
+"Этот блок раздела предназначен для переменных, которые могут быть определены "
+"в [.filename]#bsd.port.mk# и не принадлежат ни к одному из предыдущих блоков "
+"разделов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:208
+msgid ""
+"Order is not important, however try to keep similar variables together. For "
+"example uid and gid variables `USERS` and `GROUPS`. Configuration variables "
+"`CONFIGURE_*` and `*_CONFIGURE`. List of files, and directories `PORTDOCS` "
+"and `PORTEXAMPLES`."
+msgstr ""
+"Порядок не важен, однако старайтесь держать схожие переменные вместе. "
+"Например, переменные uid и gid `USERS` и `GROUPS`. Конфигурационные "
+"переменные `CONFIGURE_*` и `*_CONFIGURE`. Списки файлов и директорий "
+"`PORTDOCS` и `PORTEXAMPLES`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:210
+#, no-wrap
+msgid "Options and Helpers"
+msgstr "Параметры и помощники"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:215
+msgid ""
+"If the port uses the crossref:makefiles[makefile-options,options framework], "
+"define `OPTIONS_DEFINE` and `OPTIONS_DEFAULT` first, then the other "
+"`OPTIONS_*` variables first, then the `*_DESC` descriptions, then the "
+"options helpers. Try and sort all of those alphabetically."
+msgstr ""
+"Если порт использует crossref:makefiles[makefile-options,фреймворк опций], "
+"сначала определите `OPTIONS_DEFINE` и `OPTIONS_DEFAULT`, затем остальные "
+"переменные `OPTIONS_*`, далее описания `*_DESC`, а затем вспомогательные "
+"опции. Старайтесь сортировать их все в алфавитном порядке."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:217
+#, no-wrap
+msgid "Options Variables Order Example"
+msgstr "Пример порядка переменных-опций"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:224
+msgid ""
+"The `FOO` and `BAR` options do not have a standard description, so one need "
+"to be written. The other options already have one in [.filename]#Mk/"
+"bsd.options.desc.mk# so writing one is not needed. The `DOCS` and "
+"`EXAMPLES` use target helpers to install their files, they are shown here "
+"for completeness, though they belong in crossref:order[porting-order-"
+"targets, The Targets], so other variables and targets could be inserted "
+"before them."
+msgstr ""
+"Опции `FOO` и `BAR` не имеют стандартного описания, поэтому его необходимо "
+"написать. Остальные опции уже имеют описание в [.filename]#Mk/"
+"bsd.options.desc.mk#, поэтому его создание не требуется. Переменные `DOCS` и "
+"`EXAMPLES` используют вспомогательные цели для установки своих файлов, они "
+"приведены здесь для полноты, хотя относятся к разделу crossref:order[porting-"
+"order-targets, Цели], поэтому перед ними могут быть вставлены другие "
+"переменные и цели."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:232
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tDOCS EXAMPLES FOO BAR\n"
+"OPTIONS_DEFAULT=\tFOO\n"
+"OPTIONS_RADIO=\tSSL\n"
+"OPTIONS_RADIO_SSL= OPENSSL GNUTLS\n"
+"OPTIONS_SUB=\tyes\n"
+msgstr ""
+"OPTIONS_DEFINE=\tDOCS EXAMPLES FOO BAR\n"
+"OPTIONS_DEFAULT=\tFOO\n"
+"OPTIONS_RADIO=\tSSL\n"
+"OPTIONS_RADIO_SSL= OPENSSL GNUTLS\n"
+"OPTIONS_SUB=\tyes\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:235
+#, no-wrap
+msgid ""
+"BAR_DESC=\t\tEnable bar support\n"
+"FOO_DESC=\t\tEnable foo support\n"
+msgstr ""
+"BAR_DESC=\t\tEnable bar support\n"
+"FOO_DESC=\t\tEnable foo support\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:240
+#, no-wrap
+msgid ""
+"BAR_CONFIGURE_WITH=\tbar=${LOCALBASE}\n"
+"FOO_CONFIGURE_ENABLE=\tfoo\n"
+"GNUTLS_CONFIGURE_ON=\t--with-ssl=gnutls\n"
+"OPENSSL_CONFIGURE_ON=\t--with-ssl=openssl\n"
+msgstr ""
+"BAR_CONFIGURE_WITH=\tbar=${LOCALBASE}\n"
+"FOO_CONFIGURE_ENABLE=\tfoo\n"
+"GNUTLS_CONFIGURE_ON=\t--with-ssl=gnutls\n"
+"OPENSSL_CONFIGURE_ON=\t--with-ssl=openssl\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:244
+#, no-wrap
+msgid ""
+"post-install-DOCS-on:\n"
+" ${MKDIR} ${STAGEDIR}${DOCSDIR}\n"
+" cd ${WRKSRC}/doc && ${COPYTREE_SHARE} . ${STAGEDIR}${DOCSDIR}\n"
+msgstr ""
+"post-install-DOCS-on:\n"
+" ${MKDIR} ${STAGEDIR}${DOCSDIR}\n"
+" cd ${WRKSRC}/doc && ${COPYTREE_SHARE} . ${STAGEDIR}${DOCSDIR}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:248
+#, no-wrap
+msgid ""
+"post-install-EXAMPLES-on:\n"
+" ${MKDIR} ${STAGEDIR}${EXAMPLESDIR}\n"
+" cd ${WRKSRC}/ex && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR}\n"
+msgstr ""
+"post-install-EXAMPLES-on:\n"
+" ${MKDIR} ${STAGEDIR}${EXAMPLESDIR}\n"
+" cd ${WRKSRC}/ex && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR}\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:253
+#, no-wrap
+msgid "The Rest of the Variables"
+msgstr "Остальные переменные"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:256
+msgid ""
+"And then, the rest of the variables that are not mentioned in the previous "
+"blocks."
+msgstr ""
+"И затем, остальные переменные, которые не упоминались в предыдущих блоках."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:258
+#, no-wrap
+msgid "The Targets"
+msgstr "Цели"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:262
+msgid ""
+"After all the variables are defined, the optional man:make[1] targets can be "
+"defined. Keep `pre-*` before `post-*` and in the same order as the "
+"different stages run:"
+msgstr ""
+"После определения всех переменных можно определить дополнительные цели "
+"man:make[1]. Следует располагать `pre-*` перед `post-*` и в том же порядке, "
+"в котором выполняются различные этапы:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:264
+msgid "`fetch`"
+msgstr "`fetch`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:265
+msgid "`extract`"
+msgstr "`extract`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:266
+msgid "`patch`"
+msgstr "`patch`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:267
+msgid "`configure`"
+msgstr "`configure`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:268
+msgid "`build`"
+msgstr "`build`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:269
+msgid "`install`"
+msgstr "`install`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:270
+msgid "`test`"
+msgstr "`test`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:275
+msgid ""
+"When using options helpers target keep them alphabetically sorted, but keep "
+"the `*-on` before the `*-off`. When also using the main target, keep the "
+"main target before the optional ones:"
+msgstr ""
+"При использовании опций `helpers` для цели `target` сохраняйте их в "
+"алфавитном порядке, но оставляйте `*-on` перед `*-off`. Если также "
+"используется основная цель, размещайте её перед дополнительными:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:280
+#, no-wrap
+msgid ""
+"post-install:\n"
+"\t# install generic bits\n"
+msgstr ""
+"post-install:\n"
+"\t# install generic bits\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:283
+#, no-wrap
+msgid ""
+"post-install-DOCS-on:\n"
+"\t# Install documentation\n"
+msgstr ""
+"post-install-DOCS-on:\n"
+"\t# Install documentation\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:286
+#, no-wrap
+msgid ""
+"post-install-X11-on:\n"
+"\t# Install X11 related bits\n"
+msgstr ""
+"post-install-X11-on:\n"
+"\t# Install X11 related bits\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:289
+#, no-wrap
+msgid ""
+"post-install-X11-off:\n"
+"\t# Install bits that should be there if X11 is disabled\n"
+msgstr ""
+"post-install-X11-off:\n"
+"\t# Install bits that should be there if X11 is disabled\n"
diff --git a/documentation/content/ru/books/porters-handbook/pkg-files/_index.adoc b/documentation/content/ru/books/porters-handbook/pkg-files/_index.adoc
index f68daf0dd9..dc1f0d89a5 100644
--- a/documentation/content/ru/books/porters-handbook/pkg-files/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/pkg-files/_index.adoc
@@ -1,22 +1,24 @@
---
-title: Глава 8. Файлы pkg-*
-prev: books/porters-handbook/plist
+description: 'Хитрости с файлами pkg-*'
next: books/porters-handbook/testing
-showBookMenu: true
-weight: 8
params:
- path: "/books/porters-handbook/pkg-files/"
+ path: /books/porters-handbook/pkg-files/
+prev: books/porters-handbook/plist
+showBookMenu: true
+tags: ["pkg", "pkg-message", "UCL", "pkg-install", "pkg-deinstall"]
+title: 'Глава 9. Файлы pkg-*'
+weight: 9
---
[[pkg-files]]
-= Файлы pkg-*
+= pkg-*
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 8
+:sectnumoffset: 9
:partnums:
:source-highlighter: rouge
:experimental:
@@ -49,48 +51,212 @@ endif::[]
Есть несколько приёмов работы с файлами [.filename]#pkg-*#, которые мы ещё не описали, но они иногда могут быть очень кстати.
[[porting-message]]
-== [.filename]#pkg-message#
+== pkg-message
Если вам нужно вывести сообщение для человека, устанавливающего приложение, то вы можете поместить сообщение в файл [.filename]#pkg-message#. Эта возможность часто оказывается полезной для вывода дополнительных шагов установки, которые нужно предпринять после выполнения команды `pkg install`, или для вывода информации о лицензировании.
-Если должны выводиться некоторые строки о knobs времени построения или предупреждения, используйте `ECHO_MSG`. Файл [.filename]#pkg-message# только для послеустановочных шагов. Также следует иметь в виду различие между `ECHO_MSG` и `ECHO_CMD`. Первое предназначено для вывода на экран информационного текста, а второе для конвейера команд:
+[IMPORTANT]
+====
+* Файл [.filename]#pkg-message# должен содержать только информацию, _критически важную_ для настройки и работы в FreeBSD, а также уникальную для данного порта.
+* Информация по настройке должна отображаться только при первоначальной установке. Инструкции по обновлению должны показываться только при обновлении с соответствующей версии.
+* Не обрамляйте сообщения ни пробелами, ни строками символов (такими как `----------`, `**********` или `==========`). Оставьте форматирование man:pkg[8].
+* Коммиттеры имеют полное право ограничивать существующие сообщения диапазонами установки или обновления, используя спецификации формата UCL.
+* Пожалуйста, убедитесь, что используете соответствующие инструменты для управления службами.
+** Используйте `service имя start` для запуска службы вместо `/usr/local/etc/rc.d/имя start`
+** Используйте `sysrc name_enable=YES` для изменения параметров в rc.conf
+
+====
+
+pkg-message поддерживает два формата:
+
+raw::
+Обычный текстовый файл. Его сообщение отображается только при установке.
+
+UCL::
+Если файл начинается с символа "`[`", то он считается файлом в формате UCL. Формат UCL описан на странице https://github.com/vstakhov/libucl[libucl's GitHub page].
+
+[NOTE]
+====
+Не добавляйте запись для [.filename]#pkg-message# в [.filename]#pkg-plist#.
+====
+
+[[porting-message-ucl]]
+=== UCL в pkg-message
+
+Формат следующий. Это должен быть массив объектов. Сами объекты могут содержать следующие ключевые слова:
+
+`message`::
+Отображаемое сообщение. Этот ключевой параметр является обязательным.
+
+`type`::
+Когда сообщение должно быть отображено.
+
+`maximum_version`::
+Только если `type` имеет значение `upgrade`. Отображается, если обновление выполняется с версии строго ниже указанной.
+
+`minimum_version`::
+Только если `type` имеет значение `upgrade`. Отображается, если обновление выполняется с версии, строго большей, чем указанная.
+
+Ключевые слова `maximum_version` и `minimum_version` можно комбинировать.
+
+Ключевое слово `type` может иметь три значения:
+
+`install`::
+Сообщение должно отображаться только при установке пакета.
+
+`remove`::
+Сообщение должно отображаться только при удалении пакета.
+
+`upgrade`::
+сообщение должно отображаться только во время обновления пакета.
+
+[IMPORTANT]
+====
+Для сохранения совместимости с файлами [.filename]#pkg-message#, не использующими UCL, первая строка UCL [.filename]#pkg-message# _ДОЛЖНА быть_ одиночным символом "`[`", а последняя строка _ДОЛЖНА быть_ одиночным символом "`]`".
+====
+
+[[porting-message-ucl-short-ex]]
+.Короткие строки UCL
+[example]
+====
+
+Сообщение ограничено двойными кавычками `"`, это используется для простых однострочных строк:
[.programlisting]
....
-update-etc-shells:
- @${ECHO_MSG} "updating /etc/shells"
- @${CP} /etc/shells /etc/shells.bak
- @( ${GREP} -v ${PREFIX}/bin/bash /etc/shells.bak; \
- ${ECHO_CMD} ${PREFIX}/bin/bash) >/etc/shells
- @${RM} /etc/shells.bak
+[
+{ type: install
+ message: "Simple message"
+}
+]
....
-[NOTE]
====
-Файл [.filename]#pkg-message# не нужно добавлять в [.filename]#pkg-plist#.
+
+[[porting-message-ucl-multiline-ex]]
+.Многострочные строки UCL
+[example]
+====
+
+Многострочные строки используют стандартную нотацию heredoc. Разделитель многострочной строки _должен_ начинаться сразу после символов `<<` без пробелов и _должен_ состоять только из заглавных букв. Чтобы завершить многострочную строку, добавьте строку-разделитель на отдельной строке без пробелов. Сообщение из раздела crossref:pkg-files[porting-message-ucl-short-ex,Короткие строки UCL] может быть записано как:
+
+[.programlisting]
+....
+[
+{ type: install
+ message: <<EOM
+Simple message
+EOM
+}
+]
+....
+
+====
+
+[[porting-message-ucl-ex2]]
+.Показать сообщение при установке/удалении
+[example]
+====
+
+Когда сообщение нужно отображать только при установке или удалении, укажите тип:
+
+[.programlisting]
+....
+[
+{
+ type: remove
+ message: "package being removed."
+}
+{ type: install, message: "package being installed."}
+]
+....
+
+====
+
+[[porting-message-ucl-ex3]]
+.Показать сообщение при обновлении
+[example]
+====
+
+При обновлении порта отображаемое сообщение может быть ещё более адаптировано к потребностям порта.
+
+[.programlisting]
+....
+[
+{
+ type: upgrade
+ message: "Package is being upgraded."
+}
+{
+ type: upgrade
+ maximum_version: "1.0"
+ message: "Upgrading from before 1.0 need to do this."
+}
+{
+ type: upgrade
+ minimum_version: "1.0"
+ message: "Upgrading from after 1.0 should do that."
+}
+{
+ type: upgrade
+ maximum_version: "3.0"
+ minimum_version: "1.0"
+ message: "Upgrading from > 1.0 and < 3.0 remove that file."
+}
+]
+....
+
+[IMPORTANT]
+****
+При отображении сообщения во время обновления важно ограничить случаи, когда оно показывается пользователю. Чаще всего это делается с помощью `maximum_version`, чтобы ограничить его использование обновлениями до определенной версии, когда требуется выполнить конкретное действие.
+****
+
====
[[pkg-install]]
-== [.filename]#pkg-install#
+== pkg-install, pkg-pre-install и pkg-post-install
-Если при установке бинарного пакета по команде `pkg add` или `pkg install` вашему порту нужно выполнить какие-то команды, то вы можете это сделать с помощью скрипта [.filename]#pkg-install#. Этот скрипт будет автоматически добавлен к пакету и будет дважды запускаться командой `pkg`: первый раз в виде `${SH} pkg-install ${PKGNAME} PRE-INSTALL`, а второй раз как `${SH} {PKGNAME} POST-INSTALL`. Для распознавания того, в каком режиме запущен скрипт, можно использовать параметр `$2`. Переменная окружения `PKG_PREFIX` будет принимать значение, соответствующее каталогу, в который устанавливается пакет.
+Если порту необходимо выполнять команды при установке бинарного пакета с помощью `pkg add` или `pkg install`, используйте [.filename]#pkg-install#. Он запускается дважды через `pkg`: первый раз как `${SH} pkg-install ${PKGNAME} PRE-INSTALL` перед установкой пакета и второй раз как `${SH} pkg-install ${PKGNAME} POST-INSTALL` после его установки. Переменная `$2` может быть проверена, чтобы определить, в каком режиме выполняется скрипт. Переменная окружения `PKG_PREFIX` устанавливается равной имени каталога установки пакета.
+
+Если используется [.filename]#pkg-pre-install# или [.filename]#pkg-post-install#, скрипт выполняется только один раз (до или после установки пакета), с единственным аргументом `${PKGNAME}`. Использование [.filename]#pkg-pre-install.lua# или [.filename]#pkg-post-install.lua# запускает скрипт на Lua вместо shell-скрипта. Скрипты на Lua, выполняемые `pkg`, предоставляют некоторые расширения и несколько ограничений, которые описаны в man:pkg-lua-script[5].
[NOTE]
====
-Этот скрипт не запускается автоматически, если вы устанавливаете порт командой `make install`. Если же вам действительно необходимо его запустить, то запустите его явно из файла [.filename]#Makefile# порта строкой вида `PKG_PREFIX=${PREFIX} ${SH} $ {PKGINSTALL}${PKGNAME} PRE-INSTALL`.
+Использование [.filename]#pkg-pre-install# (или [.filename]#pkg-pre-install.lua#) и [.filename]#pkg-post-install# (или [.filename]#pkg-post-install.lua#) предпочтительнее, чем использование [.filename]#pkg-install#.
+====
+
+Эти скрипты автоматически добавляются в список упаковки.
+
+[IMPORTANT]
+====
+Эти скрипты предназначены для упрощения настройки пакетов после установки. Они _не должны_ использоваться для запуска служб, остановки служб или выполнения любых других команд, которые изменяют текущую работающую систему.
====
[[pkg-deinstall]]
-== [.filename]#pkg-deinstall#
+== pkg-deinstall, pkg-pre-deinstall и pkg-post-deinstall
-Этот скрипт вызывается при удалении пакета.
+Эти скрипты выполняются при удалении пакета.
-Этот скрипт будет дважды запускаться командой `pkg delete`. Первый раз как `${SH} pkg-deinstall ${PKGNAME} DEINSTALL`, а второй раз как `${SH} pkg-deinstall ${PKGNAME} POST-DEINSTALL`.
+Скрипт [.filename]#pkg-deinstall# выполняется дважды командой `pkg delete`. Первый раз как `${SH} pkg-deinstall ${PKGNAME} DEINSTALL` до удаления порта и второй раз как `${SH} pkg-deinstall ${PKGNAME} POST-DEINSTALL` после удаления порта. Переменная `$2` может быть проверена для определения режима, в котором выполняется скрипт. Переменная окружения `PKG_PREFIX` устанавливается в каталог установки пакета.
+
+Если используется [.filename]#pkg-pre-deinstall# или [.filename]#pkg-post-deinstall#, скрипт выполняется только один раз (до или после удаления пакета) с единственным аргументом `${PKGNAME}`. Использование [.filename]#pkg-pre-deinstall.lua# или [.filename]#pkg-post-deinstall.lua# запустит скрипт на Lua вместо shell-скрипта. Скрипты на Lua, выполняемые `pkg`, предоставляют некоторые расширения и ограничения, которые описаны в man:pkg-lua-script[5].
+
+[NOTE]
+====
+Использование [.filename]#pkg-pre-deinstall# (или [.filename]#pkg-pre-deinstall.lua#) и [.filename]#pkg-post-deinstall# (или [.filename]#pkg-post-deinstall.lua#) предпочтительнее, чем использование [.filename]#pkg-deinstall#.
+====
+
+Эти скрипты автоматически добавляются в список упаковки.
+
+[IMPORTANT]
+====
+Эти скрипты предназначены для упрощения очистки после удаления пакетов. Они _не должны_ использоваться для запуска служб, остановки служб или выполнения любых других команд, которые изменяют текущую работающую систему.
+====
[[pkg-names]]
== Изменение имён файлов [.filename]#pkg-*#
-Все имена файлов [.filename]#pkg-\*# определяются с помощью переменных, так что вы можете изменить их, если это нужно, в вашем файле [.filename]#Makefile#. Это особенно полезно, если вы используете одни и те же файлы [.filename]#pkg-*# совместно между несколькими портами или пишете в один из вышеперечисленных файлов (в главе о <<porting-wrkdir,"записи в каталоги, отличные от ``WRKDIR``">> объяснено, почему не рекомендуется осуществлять запись непосредственно в файлы [.filename]#pkg-*#.
+Все имена файлов [.filename]#pkg-\*# определяются с помощью переменных, так что вы можете изменить их, если это нужно, в вашем файле [.filename]#Makefile#. Это особенно полезно, если вы используете одни и те же файлы [.filename]#pkg-*# совместно между несколькими портами или пишете в один из вышеперечисленных файлов (в главе о crossref:porting-dads[porting-wrkdir,"записи в каталоги, отличные от ``WRKDIR``"] объяснено, почему не рекомендуется осуществлять запись непосредственно в файлы [.filename]#pkg-*#).
Вот список имён переменных и их значений по умолчанию. (Значение `PKGDIR` по умолчанию равно `${MASTERDIR}`.)
@@ -109,15 +275,25 @@ update-etc-shells:
|`PKGINSTALL`
|`${PKGDIR}/pkg-install`
+|`PKGPREINSTALL`
+|`${PKGDIR}/pkg-pre-install`
+
+|`PKGPOSTINSTALL`
+|`${PKGDIR}/pkg-post-install`
+
|`PKGDEINSTALL`
|`${PKGDIR}/pkg-deinstall`
+|`PKGPREDEINSTALL`
+|`${PKGDIR}/pkg-pre-deinstall`
+
+|`PKGPOSTDEINSTALL`
+|`${PKGDIR}/pkg-post-deinstall`
+
|`PKGMESSAGE`
|`${PKGDIR}/pkg-message`
|===
-Пожалуйста, изменяйте значения этих переменных, а не переопределяйте `PKG_ARGS`. Если вы измените значение переменных `PKG_ARGS`, то эти файлы при установке из порта будут установлены в каталог [.filename]#/var/db/pkg# некорректно.
-
[[using-sub-files]]
== Использование `SUB_FILES` и `SUB_LIST`
diff --git a/documentation/content/ru/books/porters-handbook/pkg-files/_index.po b/documentation/content/ru/books/porters-handbook/pkg-files/_index.po
new file mode 100644
index 0000000000..245b823d41
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/pkg-files/_index.po
@@ -0,0 +1,873 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-16 22:10+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookpkg-files_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:1
+#, no-wrap
+msgid "Tricks about the pkg-* files"
+msgstr "Хитрости с файлами pkg-*"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:1
+#, no-wrap
+msgid "Chapter 9. pkg-*"
+msgstr "Глава 9. Файлы pkg-*"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:14
+#, no-wrap
+msgid "pkg-*"
+msgstr "pkg-*"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:52
+msgid ""
+"There are some tricks we have not mentioned yet about the [.filename]#pkg-*# "
+"files that come in handy sometimes."
+msgstr ""
+"Есть несколько приёмов работы с файлами [.filename]#pkg-*#, которые мы ещё "
+"не описали, но они иногда могут быть очень кстати."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:54
+#, no-wrap
+msgid "pkg-message"
+msgstr "pkg-message"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:58
+msgid ""
+"To display a message when the package is installed, place the message in "
+"[.filename]#pkg-message#. This capability is often useful to display "
+"additional installation steps to be taken after a `pkg install` or `pkg "
+"upgrade`."
+msgstr ""
+"Если вам нужно вывести сообщение для человека, устанавливающего приложение, "
+"то вы можете поместить сообщение в файл [.filename]#pkg-message#. Эта "
+"возможность часто оказывается полезной для вывода дополнительных шагов "
+"установки, которые нужно предпринять после выполнения команды `pkg install`, "
+"или для вывода информации о лицензировании."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:62
+msgid ""
+"[.filename]#pkg-message# must contain only information that is _vital_ to "
+"setup and operation on FreeBSD, and that is unique to the port in question."
+msgstr ""
+"Файл [.filename]#pkg-message# должен содержать только информацию, "
+"_критически важную_ для настройки и работы в FreeBSD, а также уникальную для "
+"данного порта."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:63
+msgid ""
+"Setup information should only be shown on initial install. Upgrade "
+"instructions should be shown only when upgrading from the relevant version."
+msgstr ""
+"Информация по настройке должна отображаться только при первоначальной "
+"установке. Инструкции по обновлению должны показываться только при "
+"обновлении с соответствующей версии."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:64
+msgid ""
+"Do not surround the messages with either whitespace or lines of symbols "
+"(like `----------`, `**********`, or `==========`). Leave the formatting to "
+"man:pkg[8]."
+msgstr ""
+"Не обрамляйте сообщения ни пробелами, ни строками символов (такими как "
+"`----------`, `**********` или `==========`). Оставьте форматирование "
+"man:pkg[8]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:65
+msgid ""
+"Committers have blanket approval to constrain existing messages to install "
+"or upgrade ranges using the UCL format specifications."
+msgstr ""
+"Коммиттеры имеют полное право ограничивать существующие сообщения "
+"диапазонами установки или обновления, используя спецификации формата UCL."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:66
+msgid "Please be sure to refer to the proper tools for handling services."
+msgstr ""
+"Пожалуйста, убедитесь, что используете соответствующие инструменты для "
+"управления службами."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:67
+msgid ""
+"Use `service name start` to start a service rather than using `/usr/local/"
+"etc/rc.d/name start`"
+msgstr ""
+"Используйте `service имя start` для запуска службы вместо `/usr/local/etc/"
+"rc.d/имя start`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:68
+msgid "Use `sysrc name_enable=YES` to change options in rc.conf"
+msgstr "Используйте `sysrc name_enable=YES` для изменения параметров в rc.conf"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:72
+msgid "pkg-message supports two formats:"
+msgstr "pkg-message поддерживает два формата:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:73
+#, no-wrap
+msgid "raw"
+msgstr "raw"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:76
+msgid "A regular plain text file. Its message is only displayed on install."
+msgstr ""
+"Обычный текстовый файл. Его сообщение отображается только при установке."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:77
+#, no-wrap
+msgid "UCL"
+msgstr "UCL"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:80
+msgid ""
+"If the file starts with \"`[`\" then it is considered to be a UCL file. The "
+"UCL format is described on https://github.com/vstakhov/libucl[libucl's "
+"GitHub page]."
+msgstr ""
+"Если файл начинается с символа \"`[`\", то он считается файлом в формате "
+"UCL. Формат UCL описан на странице https://github.com/vstakhov/"
+"libucl[libucl's GitHub page]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:84
+msgid ""
+"Do not add an entry for [.filename]#pkg-message# in [.filename]#pkg-plist#."
+msgstr ""
+"Не добавляйте запись для [.filename]#pkg-message# в [.filename]#pkg-plist#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:87
+#, no-wrap
+msgid "UCL in pkg-message"
+msgstr "UCL в pkg-message"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:92
+msgid ""
+"The format is the following. It should be an array of objects. The objects "
+"themselves can have these keywords:"
+msgstr ""
+"Формат следующий. Это должен быть массив объектов. Сами объекты могут "
+"содержать следующие ключевые слова:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:93
+#, no-wrap
+msgid "`message`"
+msgstr "`message`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:96
+msgid "The actual message to be displayed. This keyword is mandatory."
+msgstr "Отображаемое сообщение. Этот ключевой параметр является обязательным."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:97
+#, no-wrap
+msgid "`type`"
+msgstr "`type`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:99
+msgid "When the message should be displayed."
+msgstr "Когда сообщение должно быть отображено."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:100
+#, no-wrap
+msgid "`maximum_version`"
+msgstr "`maximum_version`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:103
+msgid ""
+"Only if `type` is `upgrade`. Display if upgrading from a version strictly "
+"lower than the version specified."
+msgstr ""
+"Только если `type` имеет значение `upgrade`. Отображается, если обновление "
+"выполняется с версии строго ниже указанной."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:104
+#, no-wrap
+msgid "`minimum_version`"
+msgstr "`minimum_version`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:107
+msgid ""
+"Only if `type` is `upgrade`. Display if upgrading from a version strictly "
+"greater than the version specified."
+msgstr ""
+"Только если `type` имеет значение `upgrade`. Отображается, если обновление "
+"выполняется с версии, строго большей, чем указанная."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:109
+msgid "The `maximum_version` and `minimum_version` keywords can be combined."
+msgstr ""
+"Ключевые слова `maximum_version` и `minimum_version` можно комбинировать."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:111
+msgid "The `type` keyword can have three values:"
+msgstr "Ключевое слово `type` может иметь три значения:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:112
+#, no-wrap
+msgid "`install`"
+msgstr "`install`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:114
+msgid "The message should only be displayed when the package is installed."
+msgstr "Сообщение должно отображаться только при установке пакета."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:115
+#, no-wrap
+msgid "`remove`"
+msgstr "`remove`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:117
+msgid "The message should only be displayed when the package is removed."
+msgstr "Сообщение должно отображаться только при удалении пакета."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:118
+#, no-wrap
+msgid "`upgrade`"
+msgstr "`upgrade`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:120
+msgid "the message should only be displayed during an upgrade of the package.."
+msgstr "сообщение должно отображаться только во время обновления пакета."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:125
+msgid ""
+"To preserve the compatibility with non UCL [.filename]#pkg-message# files, "
+"the first line of a UCL [.filename]#pkg-message# _MUST be_ a single \"`[`\", "
+"and the last line _MUST be_ a single \"`]`\"."
+msgstr ""
+"Для сохранения совместимости с файлами [.filename]#pkg-message#, не "
+"использующими UCL, первая строка UCL [.filename]#pkg-message# _ДОЛЖНА быть_ "
+"одиночным символом \"`[`\", а последняя строка _ДОЛЖНА быть_ одиночным "
+"символом \"`]`\"."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:128
+#, no-wrap
+msgid "UCL Short Strings"
+msgstr "Короткие строки UCL"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:133
+msgid ""
+"The message is delimited by double quotes `\"`, this is used for simple "
+"single line strings:"
+msgstr ""
+"Сообщение ограничено двойными кавычками `\"`, это используется для простых "
+"однострочных строк:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:141
+#, no-wrap
+msgid ""
+"[\n"
+"{ type: install\n"
+" message: \"Simple message\"\n"
+"}\n"
+"]\n"
+msgstr ""
+"[\n"
+"{ type: install\n"
+" message: \"Simple message\"\n"
+"}\n"
+"]\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:146
+#, no-wrap
+msgid "UCL Multiline Strings"
+msgstr "Многострочные строки UCL"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:154
+msgid ""
+"Multiline strings use the standard here document notation. The multiline "
+"delimiter _must_ start just after `<<` symbols without any whitespace and it "
+"_must_ consist of capital letters only. To finish a multiline string, add "
+"the delimiter string on a line of its own without any whitespace. The "
+"message from crossref:pkg-files[porting-message-ucl-short-ex,UCL Short "
+"Strings] can be written as:"
+msgstr ""
+"Многострочные строки используют стандартную нотацию heredoc. Разделитель "
+"многострочной строки _должен_ начинаться сразу после символов `<<` без "
+"пробелов и _должен_ состоять только из заглавных букв. Чтобы завершить "
+"многострочную строку, добавьте строку-разделитель на отдельной строке без "
+"пробелов. Сообщение из раздела crossref:pkg-files[porting-message-ucl-short-"
+"ex,Короткие строки UCL] может быть записано как:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:164
+#, no-wrap
+msgid ""
+"[\n"
+"{ type: install\n"
+" message: <<EOM\n"
+"Simple message\n"
+"EOM\n"
+"}\n"
+"]\n"
+msgstr ""
+"[\n"
+"{ type: install\n"
+" message: <<EOM\n"
+"Simple message\n"
+"EOM\n"
+"}\n"
+"]\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:169
+#, no-wrap
+msgid "Display a Message on Install/Deinstall"
+msgstr "Показать сообщение при установке/удалении"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:174
+msgid ""
+"When a message only needs to be displayed on installation or uninstallation, "
+"set the type:"
+msgstr ""
+"Когда сообщение нужно отображать только при установке или удалении, укажите "
+"тип:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:184
+#, no-wrap
+msgid ""
+"[\n"
+"{\n"
+" type: remove\n"
+" message: \"package being removed.\"\n"
+"}\n"
+"{ type: install, message: \"package being installed.\"}\n"
+"]\n"
+msgstr ""
+"[\n"
+"{\n"
+" type: remove\n"
+" message: \"package being removed.\"\n"
+"}\n"
+"{ type: install, message: \"package being installed.\"}\n"
+"]\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:189
+#, no-wrap
+msgid "Display a Message on Upgrade"
+msgstr "Показать сообщение при обновлении"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:194
+msgid ""
+"When a port is upgraded, the message displayed can be even more tailored to "
+"the port's needs."
+msgstr ""
+"При обновлении порта отображаемое сообщение может быть ещё более "
+"адаптировано к потребностям порта."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:219
+#, no-wrap
+msgid ""
+"[\n"
+"{\n"
+" type: upgrade\n"
+" message: \"Package is being upgraded.\"\n"
+"}\n"
+"{\n"
+" type: upgrade\n"
+" maximum_version: \"1.0\"\n"
+" message: \"Upgrading from before 1.0 need to do this.\"\n"
+"}\n"
+"{\n"
+" type: upgrade\n"
+" minimum_version: \"1.0\"\n"
+" message: \"Upgrading from after 1.0 should do that.\"\n"
+"}\n"
+"{\n"
+" type: upgrade\n"
+" maximum_version: \"3.0\"\n"
+" minimum_version: \"1.0\"\n"
+" message: \"Upgrading from > 1.0 and < 3.0 remove that file.\"\n"
+"}\n"
+"]\n"
+msgstr ""
+"[\n"
+"{\n"
+" type: upgrade\n"
+" message: \"Package is being upgraded.\"\n"
+"}\n"
+"{\n"
+" type: upgrade\n"
+" maximum_version: \"1.0\"\n"
+" message: \"Upgrading from before 1.0 need to do this.\"\n"
+"}\n"
+"{\n"
+" type: upgrade\n"
+" minimum_version: \"1.0\"\n"
+" message: \"Upgrading from after 1.0 should do that.\"\n"
+"}\n"
+"{\n"
+" type: upgrade\n"
+" maximum_version: \"3.0\"\n"
+" minimum_version: \"1.0\"\n"
+" message: \"Upgrading from > 1.0 and < 3.0 remove that file.\"\n"
+"}\n"
+"]\n"
+
+#. type: delimited block * 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:225
+msgid ""
+"When displaying a message on upgrade, it is important to limit when it is "
+"being shown to the user. Most of the time it is by using `maximum_version` "
+"to limit its usage to upgrades from before a certain version when something "
+"specific needs to be done."
+msgstr ""
+"При отображении сообщения во время обновления важно ограничить случаи, когда "
+"оно показывается пользователю. Чаще всего это делается с помощью "
+"`maximum_version`, чтобы ограничить его использование обновлениями до "
+"определенной версии, когда требуется выполнить конкретное действие."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:230
+#, no-wrap
+msgid "pkg-install, pkg-pre-install, and pkg-post-install"
+msgstr "pkg-install, pkg-pre-install и pkg-post-install"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:236
+msgid ""
+"If the port needs to execute commands when the binary package is installed "
+"with `pkg add` or `pkg install`, use [.filename]#pkg-install#. It is run "
+"twice by `pkg`, the first time as `${SH} pkg-install ${PKGNAME} PRE-INSTALL` "
+"before the package is installed, and the second time as `${SH} pkg-install $"
+"{PKGNAME} POST-INSTALL` after it has been installed. `$2` can be tested to "
+"determine which mode the script is being run in. The `PKG_PREFIX` "
+"environment variable is set to the package installation directory."
+msgstr ""
+"Если порту необходимо выполнять команды при установке бинарного пакета с "
+"помощью `pkg add` или `pkg install`, используйте [.filename]#pkg-install#. "
+"Он запускается дважды через `pkg`: первый раз как `${SH} pkg-install $"
+"{PKGNAME} PRE-INSTALL` перед установкой пакета и второй раз как `${SH} pkg-"
+"install ${PKGNAME} POST-INSTALL` после его установки. Переменная `$2` может "
+"быть проверена, чтобы определить, в каком режиме выполняется скрипт. "
+"Переменная окружения `PKG_PREFIX` устанавливается равной имени каталога "
+"установки пакета."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:240
+msgid ""
+"If using [.filename]#pkg-pre-install# or [.filename]#pkg-post-install# "
+"instead, the script is run only once (before or after installing the "
+"package), with the single argument `${PKGNAME}`. Using [.filename]#pkg-pre-"
+"install.lua# or [.filename]#pkg-post-install.lua# will run a lua script "
+"instead of a shell script. Lua scripts run by `pkg` provide some extensions "
+"and a few restrictions, both explained in man:pkg-lua-script[5]."
+msgstr ""
+"Если используется [.filename]#pkg-pre-install# или [.filename]#pkg-post-"
+"install#, скрипт выполняется только один раз (до или после установки "
+"пакета), с единственным аргументом `${PKGNAME}`. Использование "
+"[.filename]#pkg-pre-install.lua# или [.filename]#pkg-post-install.lua# "
+"запускает скрипт на Lua вместо shell-скрипта. Скрипты на Lua, выполняемые "
+"`pkg`, предоставляют некоторые расширения и несколько ограничений, которые "
+"описаны в man:pkg-lua-script[5]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:244
+msgid ""
+"Using [.filename]#pkg-pre-install# (or [.filename]#pkg-pre-install.lua#) and "
+"[.filename]#pkg-post-install# (or [.filename]#pkg-post-install.lua#) is "
+"preferred to using [.filename]#pkg-install#."
+msgstr ""
+"Использование [.filename]#pkg-pre-install# (или [.filename]#pkg-pre-"
+"install.lua#) и [.filename]#pkg-post-install# (или [.filename]#pkg-post-"
+"install.lua#) предпочтительнее, чем использование [.filename]#pkg-install#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:247
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:274
+msgid "These scripts are automatically added to the packing list."
+msgstr "Эти скрипты автоматически добавляются в список упаковки."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:252
+msgid ""
+"These scripts are here to simplify package configuration after "
+"installation. They _must not_ be abused to start services, stop services, "
+"or run any other commands that will modify the currently running system."
+msgstr ""
+"Эти скрипты предназначены для упрощения настройки пакетов после установки. "
+"Они _не должны_ использоваться для запуска служб, остановки служб или "
+"выполнения любых других команд, которые изменяют текущую работающую систему."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:255
+#, no-wrap
+msgid "pkg-deinstall, pkg-pre-deinstall, and pkg-post-deinstall"
+msgstr "pkg-deinstall, pkg-pre-deinstall и pkg-post-deinstall"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:258
+msgid "These scripts execute when a package is removed."
+msgstr "Эти скрипты выполняются при удалении пакета."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:263
+msgid ""
+"The [.filename]#pkg-deinstall# script is run twice by `pkg delete`. The "
+"first time as `${SH} pkg-deinstall ${PKGNAME} DEINSTALL` before the port is "
+"de-installed and the second time as `${SH} pkg-deinstall ${PKGNAME} POST-"
+"DEINSTALL` after the port has been de-installed. `$2` can be tested to "
+"determine which mode the script is being run in. The `PKG_PREFIX` "
+"environment variable is set to the package installation directory."
+msgstr ""
+"Скрипт [.filename]#pkg-deinstall# выполняется дважды командой `pkg delete`. "
+"Первый раз как `${SH} pkg-deinstall ${PKGNAME} DEINSTALL` до удаления порта "
+"и второй раз как `${SH} pkg-deinstall ${PKGNAME} POST-DEINSTALL` после "
+"удаления порта. Переменная `$2` может быть проверена для определения режима, "
+"в котором выполняется скрипт. Переменная окружения `PKG_PREFIX` "
+"устанавливается в каталог установки пакета."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:267
+msgid ""
+"If using [.filename]#pkg-pre-deinstall# or [.filename]#pkg-post-deinstall# "
+"instead, the script is run only once (before or after deinstalling the "
+"package), with the single argument `${PKGNAME}`. Using [.filename]#pkg-pre-"
+"deinstall.lua# or [.filename]#pkg-post-deinstall.lua# will run a lua script "
+"instead of a shell script. Lua scripts run by `pkg` provide some extensions "
+"and a few restrictions, both explained in man:pkg-lua-script[5]."
+msgstr ""
+"Если используется [.filename]#pkg-pre-deinstall# или [.filename]#pkg-post-"
+"deinstall#, скрипт выполняется только один раз (до или после удаления "
+"пакета) с единственным аргументом `${PKGNAME}`. Использование "
+"[.filename]#pkg-pre-deinstall.lua# или [.filename]#pkg-post-deinstall.lua# "
+"запустит скрипт на Lua вместо shell-скрипта. Скрипты на Lua, выполняемые "
+"`pkg`, предоставляют некоторые расширения и ограничения, которые описаны в "
+"man:pkg-lua-script[5]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:271
+msgid ""
+"Using [.filename]#pkg-pre-deinstall# (or [.filename]#pkg-pre-deinstall.lua#) "
+"and [.filename]#pkg-post-deinstall# (or [.filename]#pkg-post-deinstall.lua#) "
+"is preferred to using [.filename]#pkg-deinstall#."
+msgstr ""
+"Использование [.filename]#pkg-pre-deinstall# (или [.filename]#pkg-pre-"
+"deinstall.lua#) и [.filename]#pkg-post-deinstall# (или [.filename]#pkg-post-"
+"deinstall.lua#) предпочтительнее, чем использование [.filename]#pkg-"
+"deinstall#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:279
+msgid ""
+"These scripts are here to simplify cleanup after package deinstallation. "
+"They _must not_ be abused to start services, stop services, or run any other "
+"commands that will modify the currently running system."
+msgstr ""
+"Эти скрипты предназначены для упрощения очистки после удаления пакетов. Они "
+"_не должны_ использоваться для запуска служб, остановки служб или выполнения "
+"любых других команд, которые изменяют текущую работающую систему."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:282
+#, no-wrap
+msgid "Changing the Names of pkg-*"
+msgstr "Изменение имён файлов [.filename]#pkg-*#"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:287
+msgid ""
+"All the names of [.filename]#pkg-\\*# are defined using variables that can "
+"be changed in the [.filename]#Makefile# if needed. This is especially "
+"useful when sharing the same [.filename]#pkg-*# files among several ports or "
+"when it is necessary to write to one of these files. See crossref:porting-"
+"dads[porting-wrkdir,writing to places other than `WRKDIR`] for why it is a "
+"bad idea to write directly into the directory containing the [.filename]#pkg-"
+"*# files."
+msgstr ""
+"Все имена файлов [.filename]#pkg-\\*# определяются с помощью переменных, так "
+"что вы можете изменить их, если это нужно, в вашем файле "
+"[.filename]#Makefile#. Это особенно полезно, если вы используете одни и те "
+"же файлы [.filename]#pkg-*# совместно между несколькими портами или пишете в "
+"один из вышеперечисленных файлов (в главе о crossref:porting-dads[porting-"
+"wrkdir,\"записи в каталоги, отличные от ``WRKDIR``\"] объяснено, почему не "
+"рекомендуется осуществлять запись непосредственно в файлы [.filename]#pkg-"
+"*#)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:290
+msgid ""
+"Here is a list of variable names and their default values. (`PKGDIR` "
+"defaults to `${MASTERDIR}`.)"
+msgstr ""
+"Вот список имён переменных и их значений по умолчанию. (Значение `PKGDIR` по "
+"умолчанию равно `${MASTERDIR}`.)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:295
+#, no-wrap
+msgid "Variable"
+msgstr "Переменная"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:297
+#, no-wrap
+msgid "Default value"
+msgstr "Значение по умолчанию"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:298
+#, no-wrap
+msgid "`DESCR`"
+msgstr "`DESCR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:300
+#, no-wrap
+msgid "`${PKGDIR}/pkg-descr`"
+msgstr "`${PKGDIR}/pkg-descr`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:301
+#, no-wrap
+msgid "`PLIST`"
+msgstr "`PLIST`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:303
+#, no-wrap
+msgid "`${PKGDIR}/pkg-plist`"
+msgstr "`${PKGDIR}/pkg-plist`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:304
+#, no-wrap
+msgid "`PKGINSTALL`"
+msgstr "`PKGINSTALL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:306
+#, no-wrap
+msgid "`${PKGDIR}/pkg-install`"
+msgstr "`${PKGDIR}/pkg-install`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:307
+#, no-wrap
+msgid "`PKGPREINSTALL`"
+msgstr "`PKGPREINSTALL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:309
+#, no-wrap
+msgid "`${PKGDIR}/pkg-pre-install`"
+msgstr "`${PKGDIR}/pkg-pre-install`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:310
+#, no-wrap
+msgid "`PKGPOSTINSTALL`"
+msgstr "`PKGPOSTINSTALL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:312
+#, no-wrap
+msgid "`${PKGDIR}/pkg-post-install`"
+msgstr "`${PKGDIR}/pkg-post-install`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:313
+#, no-wrap
+msgid "`PKGDEINSTALL`"
+msgstr "`PKGDEINSTALL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:315
+#, no-wrap
+msgid "`${PKGDIR}/pkg-deinstall`"
+msgstr "`${PKGDIR}/pkg-deinstall`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:316
+#, no-wrap
+msgid "`PKGPREDEINSTALL`"
+msgstr "`PKGPREDEINSTALL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:318
+#, no-wrap
+msgid "`${PKGDIR}/pkg-pre-deinstall`"
+msgstr "`${PKGDIR}/pkg-pre-deinstall`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:319
+#, no-wrap
+msgid "`PKGPOSTDEINSTALL`"
+msgstr "`PKGPOSTDEINSTALL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:321
+#, no-wrap
+msgid "`${PKGDIR}/pkg-post-deinstall`"
+msgstr "`${PKGDIR}/pkg-post-deinstall`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:322
+#, no-wrap
+msgid "`PKGMESSAGE`"
+msgstr "`PKGMESSAGE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:323
+#, no-wrap
+msgid "`${PKGDIR}/pkg-message`"
+msgstr "`${PKGDIR}/pkg-message`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:326
+#, no-wrap
+msgid "Making Use of `SUB_FILES` and `SUB_LIST`"
+msgstr "Использование `SUB_FILES` и `SUB_LIST`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:329
+msgid ""
+"`SUB_FILES` and `SUB_LIST` are useful for dynamic values in port files, such "
+"as the installation `PREFIX` in [.filename]#pkg-message#."
+msgstr ""
+"Переменные `SUB_FILES` и `SUB_LIST` подходят для задания в файлах порта "
+"динамических значений, таких как `PREFIX` установки в [.filename]#pkg-"
+"message#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:335
+msgid ""
+"`SUB_FILES` specifies a list of files to be automatically modified. Each "
+"[.filename]#file# in the `SUB_FILES` list must have a corresponding "
+"[.filename]#file.in# present in `FILESDIR`. A modified version will be "
+"created as [.filename]#${WRKDIR}/file#. Files defined as a value of "
+"`USE_RC_SUBR` are automatically added to `SUB_FILES`. For the files "
+"[.filename]#pkg-message#, [.filename]#pkg-install#, and [.filename]#pkg-"
+"deinstall#, the corresponding Makefile variable is automatically set to "
+"point to the processed version."
+msgstr ""
+"В переменной `SUB_FILES` указывается перечень файлов для автоматического "
+"изменения. Каждый _file_ из перечня `SUB_FILES` обязан иметь соответствующий "
+"[.filename]#file.in#, присутствующий в `FILESDIR`. Измененная версия будет "
+"создана в `WRKDIR`. Файлы, определенные в качестве значения `USE_RC_SUBR` "
+"(или устаревшего `USE_RCORDER`), автоматически добавляются в `SUB_FILES`. "
+"Для файлов [.filename]#pkg-message#, [.filename]#pkg-install# и "
+"[.filename]#pkg-deinstall# устанавливается соответствующая переменная "
+"Makefile, указывающая на обработанную версию."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:340
+msgid ""
+"`SUB_LIST` is a list of `VAR=VALUE` pairs. For each pair, `%%VAR%%` will be "
+"replaced with `VALUE` in each file listed in `SUB_FILES`. Several common "
+"pairs are automatically defined: `PREFIX`, `LOCALBASE`, `DATADIR`, "
+"`DOCSDIR`, `EXAMPLESDIR`, `WWWDIR`, and `ETCDIR`. Any line beginning with "
+"`@comment` followed by a space, will be deleted from resulting files after a "
+"variable substitution."
+msgstr ""
+"Переменная `SUB_LIST` содержит перечень пар `VAR=VALUE`. В каждом файле из "
+"`SUB_FILES` для каждой пары будет произведена замена `%%VAR%%` на `VALUE`. "
+"Некоторые общие пары определяются автоматически: `PREFIX`, `LOCALBASE`, "
+"`DATADIR`, `DOCSDIR`, `EXAMPLESDIR`, `WWWDIR` и `ETCDIR`. Любая строка, "
+"начинающаяся с `@comment`, будет удалена из конечного файла после "
+"подстановки переменной."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:342
+msgid ""
+"This example replaces `%%ARCH%%` with the system architecture in a "
+"[.filename]#pkg-message#:"
+msgstr ""
+"В следующем примере в [.filename]#pkg-message# будет сделана замена `%%ARCH%"
+"%` на системную архитектуру:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:347
+#, no-wrap
+msgid ""
+"SUB_FILES=\tpkg-message\n"
+"SUB_LIST=\tARCH=${ARCH}\n"
+msgstr ""
+"SUB_FILES=\tpkg-message\n"
+"SUB_LIST=\tARCH=${ARCH}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:350
+msgid ""
+"Note that for this example, [.filename]#pkg-message.in# must exist in "
+"`FILESDIR`."
+msgstr ""
+"Обратите внимание, что в этом примере в `FILESDIR` обязательно существование "
+"файла [.filename]#pkg-message.in#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:352
+msgid "Example of a good [.filename]#pkg-message.in#:"
+msgstr "Пример хорошего [.filename]#pkg-message.in#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:358
+#, no-wrap
+msgid ""
+"Now it is time to configure this package.\n"
+"Copy %%PREFIX%%/shared/examples/putsy/%%ARCH%%.conf into your home directory\n"
+"as .putsy.conf and edit it.\n"
+msgstr ""
+"Now it is time to configure this package.\n"
+"Copy %%PREFIX%%/shared/examples/putsy/%%ARCH%%.conf into your home directory\n"
+"as .putsy.conf and edit it.\n"
diff --git a/documentation/content/ru/books/porters-handbook/plist/_index.adoc b/documentation/content/ru/books/porters-handbook/plist/_index.adoc
index 3bd999822b..d9b93ae0fb 100644
--- a/documentation/content/ru/books/porters-handbook/plist/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/plist/_index.adoc
@@ -1,11 +1,13 @@
---
-title: Глава 7. Продвинутые практики pkg-plist
-prev: books/porters-handbook/special
+description: 'Продвинутые практики pkg-plist'
next: books/porters-handbook/pkg-files
-showBookMenu: true
-weight: 7
params:
- path: "/books/porters-handbook/plist/"
+ path: /books/porters-handbook/plist/
+prev: books/porters-handbook/flavors
+showBookMenu: true
+tags: ["pkg-plist", "practices", "configuration"]
+title: 'Глава 8. Продвинутые практики pkg-plist'
+weight: 8
---
[[plist]]
@@ -16,7 +18,7 @@ params:
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 7
+:sectnumoffset: 8
:partnums:
:source-highlighter: rouge
:experimental:
@@ -49,32 +51,31 @@ endif::[]
[[plist-sub]]
== Изменение содержимого [.filename]#pkg-plist# в зависимости от make-переменных
-Некоторые порты, в частности, порты `p5-`, должны менять содержимое своих файлов [.filename]#pkg-plist# в зависимости от того, с какими параметрами они были отконфигурированы (или в зависимости от версии языка `perl` в случае портов `p5-`). Чтобы облегчить этот процесс, любые вхождения ключевых слов `%%OSREL%%`, `%%PERL_VER%%` и `%%PERL_VERSION%%` в файле [.filename]#pkg-plist# будут заменяться соответствующими значениями. Значением `%%OSREL%%` является номер версии операционной системы (например, `4.9`). `%%PERL_VERSION%%` и `%%PERL_VER%%` обозначают полный номер версии `perl` (например, `5.8.9`). Некоторые другие `%%VARS%%`, имеющие отношение к файлам документации порта, описаны в <<install-documentation,соответствующем разделе>>.
+Некоторые порты, в частности, порты `p5-`, должны менять содержимое своих файлов [.filename]#pkg-plist# в зависимости от того, с какими параметрами они были отконфигурированы (или в зависимости от версии языка `perl` в случае портов `p5-`). Чтобы облегчить этот процесс, любые вхождения ключевых слов `%%OSREL%%`, `%%PERL_VER%%` и `%%PERL_VERSION%%` в файле [.filename]#pkg-plist# будут заменяться соответствующими значениями. Значением `%%OSREL%%` является номер версии операционной системы (например, `4.9`). `%%PERL_VERSION%%` и `%%PERL_VER%%` обозначают полный номер версии `perl` (например, `5.8.9`). Некоторые другие `%%VARS%%`, имеющие отношение к файлам документации порта, описаны в crossref:makefiles[install-documentation,соответствующем разделе].
Если вам нужно сделать другие подстановки, вы можете указать в переменной `PLIST_SUB` список пар `VAR=VALUE`, и все вхождения `%%VAR%%` в файле [.filename]#pkg-plist# будут заменяться на значение _VALUE_.
-Например, если у вас имеется порт, который устанавливает много файлов в каталог, зависящий от версии, вы можете задать нечто типа
+Например, если порт устанавливает множество файлов в подкаталоге, зависящем от версии, используйте заполнитель для версии, чтобы файл [.filename]#pkg-plist# не требовал перегенерации при каждом обновлении порта. Например, укажите:
[.programlisting]
....
-OCTAVE_VERSION= 2.0.13
+OCTAVE_VERSION= ${PORTREVISION}
PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION}
....
в файле [.filename]#Makefile# и использовать `%%OCTAVE_VERSION%%` везде, где нужно указать номер версии в файле [.filename]#pkg-plist#. Таким образом, при обновлении порта вам не нужно будет менять десятки (а в некоторых случаях и сотни) строк в файле [.filename]#pkg-plist#.
-Если ваш порт устанавливает файлы в соответствии с установленными в порту опциями, то обычным способом управления является добавление префиксов `%%TAG%%` для строк [.filename]#pkg-plist# с добавлением этого `TAG` в переменную `PLIST_SUB` внутри [.filename]#Makefile# со специальным значением `@comment`, которое указывает пакетным инструментам игнорировать эти строки:
+Если файлы устанавливаются по условию в зависимости от опций, установленных в порте, обычный способ обработки — это добавление префикса `%%OPT%%` для строк в [.filename]#pkg-plist#, которые нужны при включении опции, или `%%NO_OPT%%`, когда опция отключена, а также добавление `OPTIONS_SUB=yes` в [.filename]#Makefile#. Подробнее см. crossref:makefiles[options_sub,`OPTIONS_SUB`].
+
+Например, если есть файлы, которые устанавливаются только при включении опции `X11`, и в [.filename]#Makefile# указано:
[.programlisting]
....
-.if defined(WITH_X11)
-PLIST_SUB+= X11=""
-.else
-PLIST_SUB+= X11="@comment "
-.endif
+OPTIONS_DEFINE= X11
+OPTIONS_SUB= yes
....
-и в самом [.filename]#pkg-plist#:
+В [.filename]#pkg-plist# укажите `%%X11%%` перед строками, которые устанавливаются только при включении опции, например:
[.programlisting]
....
@@ -83,7 +84,20 @@ PLIST_SUB+= X11="@comment "
Эта подстановка будет сделана между выполнением целей `pre-install` и `do-install`, посредством чтения файла [.filename]#PLIST# и записью в файл [.filename]#TMPPLIST# (по умолчанию это файл [.filename]#WRKDIR/.PLIST.mktmp#). Так что если ваш порт строит [.filename]#PLIST# на лету, делайте это во время или до выполнения цели `pre-install`. Кроме того, если вашему порту требуется отредактировать получающийся файл, делайте это в цели `post-install` изменением файла [.filename]#TMPPLIST#.
-Другой способ изменения списка сборки порта основан на определении значений переменных `PLIST_FILES`, `PLIST_DIRS` и `PLIST_DIRSTRY`. Каждое из них рассматривается как перечень путей для записи в [.filename]#TMPPLIST# содержимого [.filename]#PLIST#. Имена, перечисленные в `PLIST_FILES`, `PLIST_DIRS` и `PLIST_DIRSTRY` подвергаются подстановке `%%VAR%%`, как описано выше. За исключением этого, имена из `PLIST_FILES` будут появляться в окончательном варианте перечня сборки без изменений, тогда как `@dirrm` и `@dirrmtry` будут соответственно предшествовать именам из `PLIST_DIRS` и `PLIST_DIRSTRY`. Для того чтобы изменения вступили в силу, `PLIST_FILES`, `PLIST_DIRS` и `PLIST_DIRSTRY` должны задаваться до того, как будет записываться [.filename]#TMPPLIST#, то есть в цели `pre-install` или ещё раньше.
+Ещё один способ изменения списка упаковки порта основан на установке переменных `PLIST_FILES` и `PLIST_DIRS`. Значение каждой переменной рассматривается как список путей для записи в [.filename]#TMPPLIST# вместе с содержимым [.filename]#PLIST#. Хотя имена, перечисленные в `PLIST_FILES` и `PLIST_DIRS`, подлежат замене `%%_VAR_%%`, как описано выше, лучше использовать `${_VAR_}` напрямую. За исключением этого, имена из `PLIST_FILES` появятся в итоговом списке упаковки без изменений, тогда как к именам из `PLIST_DIRS` будет добавлен префикс `@dir`. Чтобы вступить в силу, `PLIST_FILES` и `PLIST_DIRS` должны быть установлены до записи [.filename]#TMPPLIST#, то есть в `pre-install` или ранее.
+
+Время от времени использования `OPTIONS_SUB` недостаточно. В таких случаях добавление специфичного `_TAG_` в `PLIST_SUB` внутри [.filename]#Makefile# со специальным значением `@comment` заставляет инструменты пакетирования игнорировать строку. Например, если некоторые файлы устанавливаются только при включённой опции `X11` и архитектуре `i386`:
+
+[.programlisting]
+....
+.include <bsd.port.pre.mk>
+
+.if ${PORT_OPTIONS:MX11} && ${ARCH} == "i386"
+PLIST_SUB+= X11I386=""
+.else
+PLIST_SUB+= X11I386="@comment "
+.endif
+....
[[plist-cleaning]]
== Пустые каталоги
@@ -91,84 +105,504 @@ PLIST_SUB+= X11="@comment "
[[plist-dir-cleaning]]
=== Очистка пустых каталогов
-Заставьте ваш порты удалять пустые каталоги при удалении. Обычно это достигается добавлением строк `@dirrm` для всех каталогов, которые создаются этим портом. Вам нужно удалить подкаталоги до того, как вы сможете удалить родительские каталоги.
+При удалении порт должен удалить пустые каталоги, которые он создал. Большинство этих каталогов автоматически удаляются с помощью man:pkg[8], но для каталогов, созданных вне [.filename]#${PREFIX}#, или пустых каталогов требуется дополнительная работа. Обычно это делается добавлением строк `@dir` для таких каталогов. Подкаталоги должны быть удалены до удаления родительских каталогов.
[.programlisting]
....
- :
-lib/X11/oneko/pixmaps/cat.xpm
-lib/X11/oneko/sounds/cat.au
- :
-@dirrm lib/X11/oneko/pixmaps
-@dirrm lib/X11/oneko/sounds
-@dirrm lib/X11/oneko
+[...]
+@dir /var/games/oneko/saved-games
+@dir /var/games/oneko
....
-Однако, иногда `@dirrm` будет выдавать ошибки, потому что другие порты используют тот же самый подкаталог. Вы можете использовать `@dirrmtry` для удаления только пустых каталогов без выдачи предупреждений.
+[[plist-dir-empty]]
+=== Создание пустых каталогов
+
+Пустые каталоги, созданные во время установки порта, требуют особого внимания. Они должны присутствовать при создании пакета. Если они не созданы кодом порта, создайте их в [.filename]#Makefile#:
[.programlisting]
....
-@dirrmtry share/doc/gimp
+post-install:
+ ${MKDIR} ${STAGEDIR}${PREFIX}/some/directory
....
-Эта команда не выведет никаких сообщений об ошибках и не вызовет аварийного завершения работы `pkg delete` (см. man:pkg-delete[8]), даже если каталог [.filename]#${PREFIX}/shared/doc/gimp# не пуст из-за того, что другие порты установили сюда какие-то файлы.
-
-[[plist-dir-empty]]
-=== Создание пустых каталогов
-
-Пустым каталогам, создаваемым во время установки порта, нужно особое внимание. Они не будут созданы при установке пакета, потому что пакеты содержат только файлы, а `pkg add` и `pkg install` создают для них каталоги по мере надобности. Чтобы убедиться, что пустой каталог создается при установке пакета, добавьте эту строку в [.filename]#pkg-plist# перед соответствующей строкой `@dirrm`:
+Добавьте директорию в [.filename]#pkg-plist# так же, как и любую другую. Например:
[.programlisting]
....
-@exec mkdir -p %D/shared/foo/templates
+@dir some/directory
....
[[plist-config]]
-== Конфигурационные файлы
-
-Если ваш порт устанавливает конфигурационные файлы в каталог [.filename]#PREFIX/etc# (или куда-то еще), _не_ делайте их простого перечисления в файле [.filename]#pkg-plist#. Это приведёт к тому, что по команде `pkg delete` или при новой установке файлы, тщательно отредактированные и настроенные пользователем, будут уничтожены.
+== Файлы конфигурации
-Вместо этого установите файл(ы) с примерами с расширением [.filename]#filename.sample#. Затем скопируйте файл с примером на место настоящего файла конфигурации, если таковой ещё не существует. При деинсталляции удаляйте файл конфигурации только в том случае, если он идентичен файлу с расширением [.filename]#.sample#. Вам нужно управлять этим в [.filename]#Makefile# и в [.filename]#pkg-plist# (для установки из пакета).
+Если порт устанавливает файлы конфигурации в [.filename]#PREFIX/etc# (или в другое место), _не_ указывайте их в [.filename]#pkg-plist#. Это приведёт к тому, что `pkg delete` удалит файлы, которые были тщательно отредактированы пользователем, а повторная установка перезапишет их.
-Пример части [.filename]#Makefile#:
+Вместо этого устанавливайте образцы файлов с расширением [.filename]#filename.sample#. Макрос `@sample` автоматизирует этот процесс; подробности его работы см. в разделе crossref:plist[plist-keywords-sample, Расширение списка пакетов с помощью ключевых слов]. Для каждого образца файла добавьте строку в [.filename]#pkg-plist#:
[.programlisting]
....
-post-install:
- @if [ ! -f ${PREFIX}/etc/orbit.conf ]; then \
- ${CP} -p ${PREFIX}/etc/orbit.conf.sample ${STAGEDIR}${PREFIX}/etc/orbit.conf ; \
- fi
+@sample etc/orbit.conf.sample
....
-Добавьте по три строки в [.filename]#pkg-plist# для каждого конфигурационного файла, как показано ниже:
+Если существует очень веская причина не устанавливать рабочий файл конфигурации по умолчанию, укажите только имя примера файла в [.filename]#pkg-plist#, без части `@sample` с последующим пробелом, и добавьте crossref:pkg-files[porting-message,сообщение], указывающее, что пользователь должен скопировать и отредактировать файл перед тем, как программа заработает.
+
+[TIP]
+====
+Когда порт устанавливает свою конфигурацию в подкаталоге [.filename]#${PREFIX}/etc#, используйте `ETCDIR`, который по умолчанию равен `${PREFIX}/etc/${PORTNAME}`. Это значение может быть переопределено в [.filename]#Makefile# порта, если для порта принято использовать другой каталог. Макрос `%%ETCDIR%%` будет использоваться вместо этого в [.filename]#pkg-plist#.
+====
+
+[NOTE]
+====
+Примеры конфигурационных файлов всегда должны иметь суффикс [.filename]#.sample#. Если по каким-то историческим причинам использование стандартного суффикса невозможно, или если примеры файлов взяты из другого каталога, используйте эту конструкцию:
[.programlisting]
....
-@unexec if cmp -s %D/etc/orbit.conf.sample %D/etc/orbit.conf; then rm -f %D/etc/orbit.conf; fi
-etc/orbit.conf.sample
-@exec if [ ! -f %D/etc/orbit.conf ] ; then cp -p %D/%F %B/orbit.conf; fi
+@sample etc/orbit.conf-dist etc/orbit.conf
....
-Данные строки являются упорядоченными. На этапе удаления файл с примером сравнивается с рабочим конфигурационным файлом. Полное совпадение означает отсутствие каких-либо изменений в рабочем файле со стороны пользователя, и следовательно этот файл может быть безопасно удалён. Так как файл с примером всё ещё должен существовать для сравнения, строка `@unexec` следует перед именем файла с примером конфигурации. На этапе установки, если рабочий файл конфигурации отсутствует, он копируется из файла с примером. Файл с примером обязательно должен быть установлен до операции копирования, поэтому строка `@exec` следует после имени файла с примером конфигурации.
+или
-Для получения дополнительного отладочного вывода на экран можно временно удалить параметр `-s` из команды man:cmp[1].
-
-Для получения дополнительной инфорации по использованию `%D` и прочих маркеров подстановки обратитесь к странице Справочника man:pkg-create[8].
+[.programlisting]
+....
+@sample %%EXAMPLESDIR%%/orbit.conf etc/orbit.conf
+....
-Если существует действительно стоящая причина не устанавливать рабочий файл конфигурации по умолчанию, уберите строку `@exec` из [.filename]#pkg-plist# и добавьте <<porting-message,сообщение>>, указывающее на то, что пользователь обязан скопировать и отредактировать этот файл перед тем, как программное обеспечение начнёт работать.
+Формат: `@sample _файл-образец фактический-конфигурационный-файл_`.
+====
[[plist-dynamic]]
== Динамический или статический список упаковки
-_Статический список упаковки_ - это список упаковки, который доступен в Коллекции Портов или как файл [.filename]#pkg-plist# (с подстановкой переменных или без неё), или как встроенный в [.filename]#Makefile# посредством `PLIST_FILES`, `PLIST_DIRS` и `PLIST_DIRSTRY`. Даже если содержимое является автоматически порождаемым при помощи инструмента или в результате выполнения цели в Makefile _до_ включения в Коллекцию Портов коммиттером, то список всё ещё будет считаться статическим, поскольку его можно узнать без необходимости скачивания или компиляции дистрибутива.
+_Статический список упаковки_ — это список упаковки, который доступен в Коллекции Портов или как файл [.filename]#pkg-plist# (с подстановкой переменных или без неё), или как встроенный в [.filename]#Makefile# через `PLIST_FILES` и `PLIST_DIRS`. Даже если содержимое было автоматически сгенерировано инструментом или целью в Makefile _до_ включения в Коллекцию портов коммиттером (например, с использованием `make makeplist`), такой список всё равно считается статическим, поскольку его можно посмотреть без необходимости загрузки или компиляции distfile.
-_Динамический список упаковки_ это список упаковки, который получается во время компиляции порта и строится на основе устанавливаемых файлов и каталогов. Узнать такой список невозможно до того, как исходный код портируемого приложения будет скачен и скомпилирован, или после запуска `make clean`.
+_Динамический список упаковки_ — это список упаковки, который генерируется во время компиляции порта на основе установленных файлов и каталогов. Невозможно изучить его до загрузки и компиляции исходного кода портированного приложения или после выполнения команды `make clean`.
-Хотя использование динамических список упаковки не запрещено, сопровождающие должны использовать статические списки упаковки везде, где это возможно, поскольку это позволяет пользователям выполнять man:grep[1] по доступным портам для обнаружения, например, который порт устанавливает определенный файл. Динамические списки должны быть использованы в основном для сложных портов, для которых изменения в списке упаковки кардинальным образом основаны на необязательных возможностях порта (и, таким образом, делая сопровождение статических списков упаковки невозможным), или портов, которые изменяют список упаковки на основе версии используемого им программного обеспечения (например, порты, которые порождают документы при помощи Javadoc).
+Хотя использование динамических списков упаковки не запрещено, сопровождающие должны использовать статические списки упаковки везде, где это возможно, поскольку это позволяет пользователям выполнять man:grep[1] по доступным портам для обнаружения, например, какой порт устанавливает определенный файл. Динамические списки должны быть использованы в основном для сложных портов, для которых изменения в списке упаковки кардинальным образом основаны на возможностях порта, настраиваемых параметрами, (и, таким образом, делая сопровождение статических списков упаковки невозможным), или портов, которые изменяют список упаковки на основе версии используемого им программного обеспечения (например, порты, которые порождают документы при помощи Javadoc).
[[plist-autoplist]]
== Автоматическое создание списка упаковки
-Первым делом убедитесь, что ваш порт практически полностью завершён и осталось создать только [.filename]#pkg-plist#. После этого вы можете запустить `make makeplist` для автоматического создания [.filename]#pkg-plist#. Содержимое этого файла должно быть дважды перепроверено.
+Сначала убедитесь, что порт почти готов, и отсутствует только файл [.filename]#pkg-plist#. Запуск команды `make makeplist` покажет пример для файла [.filename]#pkg-plist#. Вывод `makeplist` необходимо дважды перепроверять на корректность, так как он пытается автоматически угадать некоторые вещи и может ошибаться.
+
+Файлы конфигурации пользователя должны устанавливаться как [.filename]#filename.sample#, как описано в разделе crossref:plist[plist-config,Файлы конфигурации]. [.filename]#info/dir# не должен быть указан, а соответствующие строки [.filename]#install-info# должны быть добавлены, как указано в разделе crossref:makefiles[makefile-info,info-файлы]. Любые библиотеки, устанавливаемые портом, должны быть перечислены, как указано в разделе crossref:special[porting-shlibs,общие библиотеки].
+
+[[plist-autoplist-regex]]
+=== Расширение `PLIST_SUB` с помощью регулярных выражений
+
+Строки, которые нужно заменить, иногда должны быть очень конкретными, чтобы избежать нежелательных замен. Это распространённая проблема с короткими значениями.
+
+Для решения этой проблемы для каждого `_PLACEHOLDER_=_значение_` можно задать `PLACEHOLDER_regex=регулярное_выражение`, где часть `_regex_` более точно соответствует _значению_.
+
+[[plist-autoplist-regex-ex1]]
+.Использование PLIST_SUB с регулярными выражениями
+[example]
+====
+
+Порты Perl могут устанавливать архитектурно-зависимые файлы в специальное дерево. В FreeBSD для упрощения портирования это дерево называется `mach`. Например, порт, который устанавливает файл, чей путь содержит `mach`, может иметь эту часть строки пути заменённой неправильными значениями. Рассмотрим этот [.filename]#Makefile#:
+
+[.programlisting]
+....
+PORTNAME= Machine-Build
+DISTVERSION= 1
+CATEGORIES= devel perl5
+MASTER_SITES= CPAN
+PKGNAMEPREFIX= p5-
+
+MAINTAINER= perl@FreeBSD.org
+COMMENT= Building machine
+WWW= https://search.cpan.org/dist/Machine-Build
+
+USES= perl5
+USE_PERL5= configure
+
+PLIST_SUB= PERL_ARCH=mach
+....
+
+Файлы, установленные портом:
+
+[.programlisting]
+....
+/usr/local/bin/machine-build
+/usr/local/lib/perl5/site_perl/man/man1/machine-build.1.gz
+/usr/local/lib/perl5/site_perl/man/man3/Machine::Build.3.gz
+/usr/local/lib/perl5/site_perl/Machine/Build.pm
+/usr/local/lib/perl5/site_perl/mach/5.20/Machine/Build/Build.so
+....
+
+Запуск `make makeplist` ошибочно создает:
+
+[.programlisting]
+....
+bin/%%PERL_ARCH%%ine-build
+%%PERL5_MAN1%%/%%PERL_ARCH%%ine-build.1.gz
+%%PERL5_MAN3%%/Machine::Build.3.gz
+%%SITE_PERL%%/Machine/Build.pm
+%%SITE_PERL%%/%%PERL_ARCH%%/%%PERL_VER%%/Machine/Build/Build.so
+....
+
+Измените строку `PLIST_SUB` в [.filename]#Makefile# на:
+
+[.programlisting]
+....
+PLIST_SUB= PERL_ARCH=mach \
+ PERL_ARCH_regex=\bmach\b
+....
+
+Теперь `make makeplist` правильно генерирует:
+
+[.programlisting]
+....
+bin/machine-build
+%%PERL5_MAN1%%/machine-build.1.gz
+%%PERL5_MAN3%%/Machine::Build.3.gz
+%%SITE_PERL%%/Machine/Build.pm
+%%SITE_PERL%%/%%PERL_ARCH%%/%%PERL_VER%%/Machine/Build/Build.so
+....
+
+====
+
+[[plist-keywords]]
+== Расширение списка пакетов используя ключевые слова
+
+Все ключевые слова также могут принимать необязательные аргументы в скобках. Аргументами являются владелец, группа и режим доступа. Этот аргумент применяется к файлу или каталогу, на который ссылаются. Чтобы изменить владельца, группу и режим доступа конфигурационного файла, используйте:
+
+[.programlisting]
+....
+@sample(games,games,640) etc/config.sample
+....
+
+Аргументы являются необязательными. Если необходимо изменить только группу и режим, используйте:
+
+[.programlisting]
+....
+@sample(,games,660) etc/config.sample
+....
+
+[WARNING]
+====
+
+Если ключевое слово используется в crossref:makefiles[makefile-options,необязательной записи], оно должно быть добавлено после помощника:
+
+[.programlisting]
+....
+%%FOO%%@sample etc/orbit.conf.sample
+....
+
+Это происходит потому, что вспомогательные функции plist для опций используются для закомментирования строки, поэтому они должны быть указаны первыми. Дополнительную информацию см. в crossref:makefiles[options_sub,`OPTIONS_SUB`].
+====
+
+[[plist-keywords-desktop-file-utils]]
+=== `@desktop-file-utils`
+
+Будет выполнять `update-desktop-database -q` после установки и удаления. _Никогда_ не используйте напрямую, добавьте crossref:uses[uses-desktop-file-utils,`USES=desktop-file-utils`] в [.filename]#Makefile#.
+
+[[plist-keywords-fc]]
+=== `@fc` _каталог_
+
+Добавить запись `@dir` для каталога, переданного в качестве аргумента, и выполнить `fc-cache -fs` для этого каталога после установки и удаления.
+
+[[plist-keywords-fontsdir]]
+=== `@fontsdir` _каталог_
+
+Добавить запись `@dir` для каталога, переданного в качестве аргумента, и запустить `mkfontscale` и `mkfontdir` в этом каталоге после установки и удаления. Кроме того, при удалении удаляются кэш-файлы [.filename]#fonts.scale# и [.filename]#fonts.dir#, если они пусты.
+
+[[plist-keywords-info]]
+=== `@info` _файл_
+
+Добавляет файл, переданный в качестве аргумента, в plist и обновляет индекс документа info при установке и удалении. Кроме того, удаляет индекс, если он пуст, при удалении. Это никогда не следует использовать вручную, а только через `INFO`. Подробнее см. в crossref:makefiles[makefile-info,Файлы Info].
+
+[[plist-keywords-kld]]
+=== `@kld` _каталог_
+
+Выполняет `kldxref` для каталога при установке и удалении. Дополнительно при удалении каталог будет удалён, если он пуст.
+
+[[plist-keywords-rmtry]]
+=== `@rmtry` _файл_
+
+Удаляет файл при удалении и не выдает ошибку, если файл отсутствует.
+
+[[plist-keywords-sample]]
+=== `@sample` _файл_ [_файл_]
+
+Это используется для обработки установки файлов конфигурации, используя примеры файлов, поставляемых с пакетом. "Реальный" файл (не пример) — это либо второе имя файла, если оно присутствует, либо первое имя файла без расширения [.filename]#.sample#.
+
+Это делает три вещи. Во-первых, добавляет первый переданный файл в качестве аргумента, образец файла, в plist. Затем, при установке, если фактический файл не найден, копирует образец файла в фактический файл. И наконец, при удалении, удаляет фактический файл, если он не был изменён. Дополнительную информацию см. в crossref:plist[plist-config, Файлы конфигурации].
+
+[[plist-keywords-shared-mime-info]]
+=== `@shared-mime-info` _каталог_
+
+Выполняет `update-mime-database` для указанного каталога при установке и удалении.
+
+[[plist-keywords-shell]]
+=== `@shell` _файл_
+
+Добавить файл, переданный в качестве аргумента, в plist.
+
+При установке добавить полный путь к _file_ в [.filename]#/etc/shells#, убедившись, что он не добавлен повторно. При удалении удалите его из [.filename]#/etc/shells#.
+
+[[plist-keywords-terminfo]]
+=== `@terminfo`
+
+Не использовать самостоятельно. Если порт устанавливает файлы [.filename]#*.terminfo#, добавьте crossref:uses[uses-terminfo,`USES=terminfo`] в его [.filename]#Makefile#.
+
+При установке и удалении, если присутствует `tic`, обновить [.filename]#${PREFIX}/shared/misc/terminfo.db# из файлов [.filename]#*.terminfo# в [.filename]#${PREFIX}/shared/misc#.
+
+[[plist-keywords-base]]
+=== Основные ключевые слова
+
+Есть несколько ключевых слов, которые жестко закодированы и документированы в man:pkg-create[8]. Для полноты изложения они также документированы здесь.
+
+[[plist-keywords-base-empty]]
+==== `@` [_файл_]
+
+Ключевое слово `empty` является заполнителем, используемым, когда необходимо изменить владельца, группу или права доступа к файлу. Например, чтобы установить группу файла в `games` и добавить бит setgid, добавьте:
+
+[.programlisting]
+....
+@(,games,2755) sbin/daemon
+....
+
+[[plist-keywords-base-exec]]
+==== `@preexec` _команда_, `@postexec` _команда_, `@preunexec` _команда_, `@postunexec` _команда_
+
+Выполнить _комманду_ как часть процесса установки или удаления пакета.
+
+`@preexec` _команда_::
+Выполнить _команду_ как часть скриптов [.filename]#pre-install#.
+
+`@postexec` _команда_::
+Выполнить _команду_ как часть скриптов [.filename]#post-install#.
+
+`@preunexec` _команда_::
+Выполнить _команду_ как часть скриптов [.filename]#pre-deinstall#.
+
+`@postunexec` _команда_::
+Выполнить _команду_ как часть скриптов [.filename]#post-deinstall#.
+
+Если в _команде_ содержится любая из этих последовательностей, они раскрываются непосредственно. Для следующих примеров предположим, что `@cwd` установлен в [.filename]#/usr/local#, а последним извлечённым файлом был [.filename]#bin/emacs#.
+
+`%F`::
+Раскрывается до последнего извлеченного имени файла (как указано). В примере [.filename]#bin/emacs#.
+
+`%D`::
+Раскрыть до текущего префикса директории, установленного с помощью `@cwd`. В этом примере [.filename]#/usr/local#.
+
+`%B`::
+Раскрыть до базового имени полного имени файла, то есть префикс текущего каталога плюс последняя спецификация файла, за вычетом имени файла в конце спецификации. В данном примере это будет [.filename]#/usr/local/bin#.
+
+`%f`::
+Раскрывается до части имени файла в полном квалифицированном имени, или противоположный случай для `%B`. В примере, [.filename]#emacs#.
+
+[IMPORTANT]
+====
+Эти ключевые слова предназначены для помощи в настройке пакета, чтобы он был максимально готов к использованию. Они _не должны_ использоваться для запуска служб, остановки служб или выполнения любых других команд, которые изменяют текущую работающую систему.
+====
+
+[[plist-keywords-base-mode]]
+==== `@mode` _режим_
+
+Установить разрешения по умолчанию для всех последующих извлекаемых файлов в _режим_. Формат такой же, как используется в man:chmod[1]. Использование без аргумента вернёт разрешения по умолчанию (режим файла при упаковке).
+
+[IMPORTANT]
+====
+Это должен быть числовой режим, например `644`, `4755` или `600`. Нельзя использовать относительный режим, например `u+s`.
+====
+
+[[plist-keywords-base-owner]]
+==== `@owner` _пользователь_
+
+Установить владельца по умолчанию для всех последующих файлов в _пользователь_. Использование без аргумента вернёт владельца по умолчанию (`root`).
+
+[[plist-keywords-base-group]]
+==== `@group` _группа_
+
+Установить группу-владельца по умолчанию для всех последующих файлов в _группу_. Использование без аргумента вернёт группу-владельца по умолчанию (`wheel`).
+
+[[plist-keywords-base-comment]]
+==== `@comment` _строка_
+
+Эта строка игнорируется при упаковке.
+
+[[plist-keywords-base-dir]]
+==== `@dir` _каталог_
+
+Объявить имя каталога. По умолчанию каталоги, созданные в `PREFIX` при установке пакета, автоматически удаляются. Используйте эту опцию, если необходимо создать пустой каталог в `PREFIX` или если каталогу требуется нестандартный владелец, группа или права. Каталоги за пределами `PREFIX` необходимо регистрировать. Например, [.filename]#/var/db/${PORTNAME}# требует записи `@dir`, тогда как [.filename]#${PREFIX}/shared/${PORTNAME}# — нет, если он содержит файлы или использует стандартные владельца, группу и права.
+
+[[plist-keywords-base-exec-deprecated]]
+==== `@exec` _команда_, `@unexec` _команда_ (Устарело)
+
+Выполнить _команду_ как часть процесса установки или удаления. Рекомендуется использовать crossref:plist[plist-keywords-base-exec, `@preexec` _команда_, `@postexec` _команда_, `@preunexec` _команда_, `@postunexec` _команда_] вместо этого.
+
+[[plist-keywords-base-dirrm]]
+==== `@dirrm` _каталог_ (Устарело)
+
+Объявить имя каталога для удаления при деинсталляции. По умолчанию каталоги, созданные в `PREFIX` при установке пакета, удаляются при его деинсталляции.
+
+[[plist-keywords-base-dirrmtry]]
+==== `@dirrmtry` _каталог_ (Устарело)
+
+Объявить имя каталога для удаления, аналогично `@dirrm`, но не выводить предупреждение, если каталог не может быть удален.
+
+[[plist-keywords-creating-new]]
+=== Создание новых ключевых слов
+
+Файлы списка пакетов могут быть расширены ключевыми словами, которые определены в каталоге [.filename]#${PORTSDIR}/Keywords#. Настройки каждого ключевого слова хранятся в файле UCL с именем [.filename]#keyword.ucl#. Файл должен содержать как минимум один из следующих разделов:
+
+* `attributes`
+* `action`
+* `pre-install`
+* `post-install`
+* `pre-deinstall`
+* `post-deinstall`
+* `pre-upgrade`
+* `post-upgrade`
+
+[[plist-keywords-attributes]]
+==== `attributes`
+
+Изменяет владельца, группу или режим доступа, используемые ключевым словом. Содержит ассоциативный массив, в котором возможными ключами являются `owner`, `group` и `mode`. Значениями являются, соответственно, имя пользователя, имя группы и режим доступа к файлу. Например:
+
+[.programlisting]
+....
+attributes: { owner: "games", group: "games", mode: 0555 }
+....
+
+[[plist-keywords-action]]
+==== `action`
+
+Определяет, что происходит с параметром ключевого слова. Содержит массив, где возможные значения:
+
+`setprefix`::
+Установите префикс для следующих записей в plist.
+
+`dir`::
+Зарегистрировать каталог для создания при установке и удаления при деинсталляции.
+
+`dirrm`::
+Зарегистрировать каталог для удаления при деинсталляции. Устарело.
+
+`dirrmtry`::
+Зарегистрировать каталог для попытки удаления при деинсталляции. Устарело.
+
+`file`::
+Зарегистрировать файл.
+
+`setmode`::
+Установить режим для следующих записей plist.
+
+`setowner`::
+Установить владельца для следующих записей plist.
+
+`setgroup`::
+Установить группу для следующих записей в plist.
+
+`comment`::
+Не выполняет никаких действий, эквивалентно отсутствию раздела `action`.
+
+`ignore_next`::
+Игнорировать следующую запись в plist.
+
+[[plist-keywords-arguments]]
+==== `arguments`
+
+Если установлено значение `true`, добавляется обработка аргументов, разделяя всю строку, `%@`, на нумерованные аргументы, `%1`, `%2`, и так далее. Например, для такой строки:
+
+[.programlisting]
+....
+@foo some.content other.content
+....
+
+`%1` и `%2` будут содержать:
+
+[.programlisting]
+....
+some.content
+other.content
+....
+
+Это также влияет на работу записи crossref:plist[plist-keywords-action,`action`]. Если аргументов больше одного, необходимо указать номер аргумента. Например:
+
+[.programlisting]
+....
+actions: [file(1)]
+....
+
+[[plist-keywords-pre-post]]
+==== `pre-install`, `post-install`, `pre-deinstall`, `post-deinstall`, `pre-upgrade`, `post-upgrade`
+
+Эти ключевые слова содержат man:sh[1] скрипт, который выполняется до или после установки, удаления или обновления пакета. В дополнение к обычным заполнителям `@exec %_foo_`, описанным в crossref:plist[plist-keywords-base-exec, `@preexec` _команда_, `@postexec` _команда_, `@preunexec` _команда_, `@postunexec` _команда_], существует новый заполнитель `%@`, который представляет аргумент ключевого слова.
+
+[[plist-keywords-examples]]
+==== Примеры пользовательских ключевых слов
+
+[[plist-keywords-fc-example]]
+.Пример ключевого слова `@dirrmtryecho`
+[example]
+====
+
+Это ключевое слово выполняет две функции: добавляет строку `@dirrmtry _directory_` в список упаковки и сообщает о том, что директория удаляется при деинсталляции пакета.
+
+[.programlisting]
+....
+actions: [dirrmtry]
+post-deinstall: <<EOD
+ echo "Directory %D/%@ removed."
+EOD
+....
+
+====
+
+[[plist-keywords-sample-example]]
+.Реальный пример, как реализован `@sample`
+[example]
+====
+
+Этот ключевое слово выполняет три действия. Оно добавляет первый _filename_, переданный в качестве аргумента `@sample`, в список упаковки, добавляет в скрипт `post-install` инструкции для копирования образца в фактический файл конфигурации, если он ещё не существует, и добавляет в инструкции `post-deinstall` удаление файла конфигурации, если он не был изменён.
+
+[.programlisting]
+....
+actions: [file(1)]
+arguments: true
+post-install: <<EOD
+ case "%1" in
+ /*) sample_file="%1" ;;
+ *) sample_file="%D/%1" ;;
+ esac
+ target_file="${sample_file%.sample}"
+ set -- %@
+ if [ $# -eq 2 ]; then
+ target_file=${2}
+ fi
+ case "${target_file}" in
+ /*) target_file="${target_file}" ;;
+ *) target_file="%D/${target_file}" ;;
+ esac
+ if ! [ -f "${target_file}" ]; then
+ /bin/cp -p "${sample_file}" "${target_file}" && \
+ /bin/chmod u+w "${target_file}"
+ fi
+EOD
+pre-deinstall: <<EOD
+ case "%1" in
+ /*) sample_file="%1" ;;
+ *) sample_file="%D/%1" ;;
+ esac
+ target_file="${sample_file%.sample}"
+ set -- %@
+ if [ $# -eq 2 ]; then
+ set -- %@
+ target_file=${2}
+ fi
+ case "${target_file}" in
+ /*) target_file="${target_file}" ;;
+ *) target_file="%D/${target_file}" ;;
+ esac
+ if cmp -s "${target_file}" "${sample_file}"; then
+ rm -f "${target_file}"
+ else
+ echo "You may need to manually remove ${target_file} if it is no longer needed."
+ fi
+EOD
+....
-Пользовательские конфигурационные файлы должны быть удалены или быть установлены как [.filename]#filename.sample#. Файл [.filename]#info/dir# включать в список не нужно, но должны быть добавлены соответствующие строчки [.filename]#install-info#, так, как это описано в разделе о <<makefile-info,файлах в формате info>>. Все библиотеки, устанавливаемые портом, должны быть перечислены так, как это описано в разделе о <<porting-shlibs,динамических библиотеках>>.
+====
diff --git a/documentation/content/ru/books/porters-handbook/plist/_index.po b/documentation/content/ru/books/porters-handbook/plist/_index.po
new file mode 100644
index 0000000000..ae6c7cc6b7
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/plist/_index.po
@@ -0,0 +1,1731 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-24 21:10+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookplist_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:1
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:14
+#, no-wrap
+msgid "Advanced pkg-plist Practices"
+msgstr "Продвинутые практики pkg-plist"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:1
+#, no-wrap
+msgid "Chapter 8. Advanced pkg-plist Practices"
+msgstr "Глава 8. Продвинутые практики pkg-plist"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:52
+#, no-wrap
+msgid "Changing pkg-plist Based on Make Variables"
+msgstr "Изменение содержимого [.filename]#pkg-plist# в зависимости от make-переменных"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:59
+msgid ""
+"Some ports, particularly the `p5-` ports, need to change their "
+"[.filename]#pkg-plist# depending on what options they are configured with "
+"(or version of `perl`, in the case of `p5-` ports). To make this easy, any "
+"instances in [.filename]#pkg-plist# of `%%OSREL%%`, `%%PERL_VER%%`, and `%"
+"%PERL_VERSION%%` will be substituted appropriately. The value of `%%OSREL%"
+"%` is the numeric revision of the operating system (for example, `4.9`). `%"
+"%PERL_VERSION%%` and `%%PERL_VER%%` is the full version number of `perl` "
+"(for example, `5.8.9`). Several other `%%_VARS_%%` related to port's "
+"documentation files are described in crossref:makefiles[install-"
+"documentation,the relevant section]."
+msgstr ""
+"Некоторые порты, в частности, порты `p5-`, должны менять содержимое своих "
+"файлов [.filename]#pkg-plist# в зависимости от того, с какими параметрами "
+"они были отконфигурированы (или в зависимости от версии языка `perl` в "
+"случае портов `p5-`). Чтобы облегчить этот процесс, любые вхождения ключевых "
+"слов `%%OSREL%%`, `%%PERL_VER%%` и `%%PERL_VERSION%%` в файле "
+"[.filename]#pkg-plist# будут заменяться соответствующими значениями. "
+"Значением `%%OSREL%%` является номер версии операционной системы (например, "
+"`4.9`). `%%PERL_VERSION%%` и `%%PERL_VER%%` обозначают полный номер версии "
+"`perl` (например, `5.8.9`). Некоторые другие `%%VARS%%`, имеющие отношение к "
+"файлам документации порта, описаны в crossref:makefiles[install-"
+"documentation,соответствующем разделе]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:61
+msgid ""
+"To make other substitutions, set `PLIST_SUB` with a list of `_VAR=VALUE_` "
+"pairs and instances of `%%_VAR_%%` will be substituted with _VALUE_ in "
+"[.filename]#pkg-plist#."
+msgstr ""
+"Если вам нужно сделать другие подстановки, вы можете указать в переменной "
+"`PLIST_SUB` список пар `VAR=VALUE`, и все вхождения `%%VAR%%` в файле "
+"[.filename]#pkg-plist# будут заменяться на значение _VALUE_."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:64
+msgid ""
+"For instance, if a port installs many files in a version-specific "
+"subdirectory, use a placeholder for the version so that [.filename]#pkg-"
+"plist# does not have to be regenerated every time the port is updated. For "
+"example, set:"
+msgstr ""
+"Например, если порт устанавливает множество файлов в подкаталоге, зависящем "
+"от версии, используйте заполнитель для версии, чтобы файл [.filename]#pkg-"
+"plist# не требовал перегенерации при каждом обновлении порта. Например, "
+"укажите:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:69
+#, no-wrap
+msgid ""
+"OCTAVE_VERSION=\t${PORTREVISION}\n"
+"PLIST_SUB=\tOCTAVE_VERSION=${OCTAVE_VERSION}\n"
+msgstr ""
+"OCTAVE_VERSION=\t${PORTREVISION}\n"
+"PLIST_SUB=\tOCTAVE_VERSION=${OCTAVE_VERSION}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:73
+msgid ""
+"in the [.filename]#Makefile# and use `%%OCTAVE_VERSION%%` wherever the "
+"version shows up in [.filename]#pkg-plist#. When the port is upgraded, it "
+"will not be necessary to edit dozens (or in some cases, hundreds) of lines "
+"in [.filename]#pkg-plist#."
+msgstr ""
+"в файле [.filename]#Makefile# и использовать `%%OCTAVE_VERSION%%` везде, где "
+"нужно указать номер версии в файле [.filename]#pkg-plist#. Таким образом, "
+"при обновлении порта вам не нужно будет менять десятки (а в некоторых "
+"случаях и сотни) строк в файле [.filename]#pkg-plist#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:76
+msgid ""
+"If files are installed conditionally on the options set in the port, the "
+"usual way of handling it is prefixing [.filename]#pkg-plist# lines with a `%"
+"%OPT%%` for lines needed when the option is enabled, or `%%NO_OPT%%` when "
+"the option is disabled, and adding `OPTIONS_SUB=yes` to the "
+"[.filename]#Makefile#. See crossref:makefiles[options_sub,`OPTIONS_SUB`] "
+"for more information."
+msgstr ""
+"Если файлы устанавливаются по условию в зависимости от опций, установленных "
+"в порте, обычный способ обработки — это добавление префикса `%%OPT%%` для "
+"строк в [.filename]#pkg-plist#, которые нужны при включении опции, или `%"
+"%NO_OPT%%`, когда опция отключена, а также добавление `OPTIONS_SUB=yes` в "
+"[.filename]#Makefile#. Подробнее см. "
+"crossref:makefiles[options_sub,`OPTIONS_SUB`]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:78
+msgid ""
+"For instance, if there are files that are only installed when the `X11` "
+"option is enabled, and [.filename]#Makefile# has:"
+msgstr ""
+"Например, если есть файлы, которые устанавливаются только при включении "
+"опции `X11`, и в [.filename]#Makefile# указано:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:83
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tX11\n"
+"OPTIONS_SUB=\tyes\n"
+msgstr ""
+"OPTIONS_DEFINE=\tX11\n"
+"OPTIONS_SUB=\tyes\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:86
+msgid ""
+"In [.filename]#pkg-plist#, put `%%X11%%` in front of the lines only being "
+"installed when the option is enabled, like this :"
+msgstr ""
+"В [.filename]#pkg-plist# укажите `%%X11%%` перед строками, которые "
+"устанавливаются только при включении опции, например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:90
+#, no-wrap
+msgid "%%X11%%bin/foo-gui\n"
+msgstr "%%X11%%bin/foo-gui\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:95
+msgid ""
+"This substitution will be done between the `pre-install` and `do-install` "
+"targets, by reading from [.filename]#PLIST# and writing to "
+"[.filename]#TMPPLIST# (default: [.filename]#WRKDIR/.PLIST.mktmp#). So if "
+"the port builds [.filename]#PLIST# on the fly, do so in or before `pre-"
+"install`. Also, if the port needs to edit the resulting file, do so in "
+"`post-install` to a file named [.filename]#TMPPLIST#."
+msgstr ""
+"Эта подстановка будет сделана между выполнением целей `pre-install` и `do-"
+"install`, посредством чтения файла [.filename]#PLIST# и записью в файл "
+"[.filename]#TMPPLIST# (по умолчанию это файл "
+"[.filename]#WRKDIR/.PLIST.mktmp#). Так что если ваш порт строит "
+"[.filename]#PLIST# на лету, делайте это во время или до выполнения цели `pre-"
+"install`. Кроме того, если вашему порту требуется отредактировать "
+"получающийся файл, делайте это в цели `post-install` изменением файла "
+"[.filename]#TMPPLIST#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:101
+msgid ""
+"Another way of modifying a port's packing list is based on setting the "
+"variables `PLIST_FILES` and `PLIST_DIRS`. The value of each variable is "
+"regarded as a list of pathnames to write to [.filename]#TMPPLIST# along with "
+"[.filename]#PLIST# contents. While names listed in `PLIST_FILES` and "
+"`PLIST_DIRS` are subject to `%%_VAR_%%` substitution as described above, it "
+"is better to use the `${_VAR_}` directly. Except for that, names from "
+"`PLIST_FILES` will appear in the final packing list unchanged, while `@dir` "
+"will be prepended to names from `PLIST_DIRS`. To take effect, `PLIST_FILES` "
+"and `PLIST_DIRS` must be set before [.filename]#TMPPLIST# is written, that "
+"is, in `pre-install` or earlier."
+msgstr ""
+"Ещё один способ изменения списка упаковки порта основан на установке "
+"переменных `PLIST_FILES` и `PLIST_DIRS`. Значение каждой переменной "
+"рассматривается как список путей для записи в [.filename]#TMPPLIST# вместе с "
+"содержимым [.filename]#PLIST#. Хотя имена, перечисленные в `PLIST_FILES` и "
+"`PLIST_DIRS`, подлежат замене `%%_VAR_%%`, как описано выше, лучше "
+"использовать `${_VAR_}` напрямую. За исключением этого, имена из "
+"`PLIST_FILES` появятся в итоговом списке упаковки без изменений, тогда как к "
+"именам из `PLIST_DIRS` будет добавлен префикс `@dir`. Чтобы вступить в силу, "
+"`PLIST_FILES` и `PLIST_DIRS` должны быть установлены до записи "
+"[.filename]#TMPPLIST#, то есть в `pre-install` или ранее."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:105
+msgid ""
+"From time to time, using `OPTIONS_SUB` is not enough. In those cases, "
+"adding a specific `_TAG_` to `PLIST_SUB` inside the [.filename]#Makefile# "
+"with a special value of `@comment`, makes package tools to ignore the line. "
+"For instance, if some files are only installed when the `X11` option is on "
+"and the architecture is `i386`:"
+msgstr ""
+"Время от времени использования `OPTIONS_SUB` недостаточно. В таких случаях "
+"добавление специфичного `_TAG_` в `PLIST_SUB` внутри [.filename]#Makefile# "
+"со специальным значением `@comment` заставляет инструменты пакетирования "
+"игнорировать строку. Например, если некоторые файлы устанавливаются только "
+"при включённой опции `X11` и архитектуре `i386`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:109
+#, no-wrap
+msgid ".include <bsd.port.pre.mk>\n"
+msgstr ".include <bsd.port.pre.mk>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:115
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MX11} && ${ARCH} == \"i386\"\n"
+"PLIST_SUB+=\tX11I386=\"\"\n"
+".else\n"
+"PLIST_SUB+=\tX11I386=\"@comment \"\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MX11} && ${ARCH} == \"i386\"\n"
+"PLIST_SUB+=\tX11I386=\"\"\n"
+".else\n"
+"PLIST_SUB+=\tX11I386=\"@comment \"\n"
+".endif\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:118
+#, no-wrap
+msgid "Empty Directories"
+msgstr "Пустые каталоги"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:121
+#, no-wrap
+msgid "Cleaning Up Empty Directories"
+msgstr "Очистка пустых каталогов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:127
+msgid ""
+"When being de-installed, a port has to remove empty directories it created. "
+"Most of these directories are removed automatically by man:pkg[8], but for "
+"directories created outside of [.filename]#${PREFIX}#, or empty directories, "
+"some more work needs to be done. This is usually accomplished by adding "
+"`@dir` lines for those directories. Subdirectories must be deleted before "
+"deleting parent directories."
+msgstr ""
+"При удалении порт должен удалить пустые каталоги, которые он создал. "
+"Большинство этих каталогов автоматически удаляются с помощью man:pkg[8], но "
+"для каталогов, созданных вне [.filename]#${PREFIX}#, или пустых каталогов "
+"требуется дополнительная работа. Обычно это делается добавлением строк "
+"`@dir` для таких каталогов. Подкаталоги должны быть удалены до удаления "
+"родительских каталогов."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:133
+#, no-wrap
+msgid ""
+"[...]\n"
+"@dir /var/games/oneko/saved-games\n"
+"@dir /var/games/oneko\n"
+msgstr ""
+"[...]\n"
+"@dir /var/games/oneko/saved-games\n"
+"@dir /var/games/oneko\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:136
+#, no-wrap
+msgid "Creating Empty Directories"
+msgstr "Создание пустых каталогов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:141
+msgid ""
+"Empty directories created during port installation need special attention. "
+"They must be present when the package is created. If they are not created "
+"by the port code, create them in the [.filename]#Makefile#:"
+msgstr ""
+"Пустые каталоги, созданные во время установки порта, требуют особого "
+"внимания. Они должны присутствовать при создании пакета. Если они не созданы "
+"кодом порта, создайте их в [.filename]#Makefile#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:146
+#, no-wrap
+msgid ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${PREFIX}/some/directory\n"
+msgstr ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${PREFIX}/some/directory\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:150
+msgid ""
+"Add the directory to [.filename]#pkg-plist# like any other. For example:"
+msgstr ""
+"Добавьте директорию в [.filename]#pkg-plist# так же, как и любую другую. "
+"Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:154
+#, no-wrap
+msgid "@dir some/directory\n"
+msgstr "@dir some/directory\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:157
+#, no-wrap
+msgid "Configuration Files"
+msgstr "Файлы конфигурации"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:161
+msgid ""
+"If the port installs configuration files to [.filename]#PREFIX/etc# (or "
+"elsewhere) do _not_ list them in [.filename]#pkg-plist#. That will cause "
+"`pkg delete` to remove files that have been carefully edited by the user, "
+"and a re-installation will wipe them out."
+msgstr ""
+"Если порт устанавливает файлы конфигурации в [.filename]#PREFIX/etc# (или в "
+"другое место), _не_ указывайте их в [.filename]#pkg-plist#. Это приведёт к "
+"тому, что `pkg delete` удалит файлы, которые были тщательно отредактированы "
+"пользователем, а повторная установка перезапишет их."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:165
+msgid ""
+"Instead, install sample files with a [.filename]#filename.sample# "
+"extension. The `@sample` macro automates this, see crossref:plist[plist-"
+"keywords-sample, Expanding Package List with Keywords] for what it does "
+"exactly. For each sample file, add a line to [.filename]#pkg-plist#:"
+msgstr ""
+"Вместо этого устанавливайте образцы файлов с расширением "
+"[.filename]#filename.sample#. Макрос `@sample` автоматизирует этот процесс; "
+"подробности его работы см. в разделе crossref:plist[plist-keywords-sample, "
+"Расширение списка пакетов с помощью ключевых слов]. Для каждого образца "
+"файла добавьте строку в [.filename]#pkg-plist#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:169
+#, no-wrap
+msgid "@sample etc/orbit.conf.sample\n"
+msgstr "@sample etc/orbit.conf.sample\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:173
+msgid ""
+"If there is a very good reason not to install a working configuration file "
+"by default, only list the sample filename in [.filename]#pkg-plist#, without "
+"the `@sample` followed by a space part, and add a crossref:pkg-files[porting-"
+"message,message] pointing out that the user must copy and edit the file "
+"before the software will work."
+msgstr ""
+"Если существует очень веская причина не устанавливать рабочий файл "
+"конфигурации по умолчанию, укажите только имя примера файла в "
+"[.filename]#pkg-plist#, без части `@sample` с последующим пробелом, и "
+"добавьте crossref:pkg-files[porting-message,сообщение], указывающее, что "
+"пользователь должен скопировать и отредактировать файл перед тем, как "
+"программа заработает."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:178
+msgid ""
+"When a port installs its configuration in a subdirectory of [.filename]#$"
+"{PREFIX}/etc#, use `ETCDIR`, which defaults to `${PREFIX}/etc/${PORTNAME}`, "
+"it can be overridden in the ports [.filename]#Makefile# if there is a "
+"convention for the port to use some other directory. The `%%ETCDIR%%` macro "
+"will be used in its stead in [.filename]#pkg-plist#."
+msgstr ""
+"Когда порт устанавливает свою конфигурацию в подкаталоге [.filename]#$"
+"{PREFIX}/etc#, используйте `ETCDIR`, который по умолчанию равен `${PREFIX}/"
+"etc/${PORTNAME}`. Это значение может быть переопределено в "
+"[.filename]#Makefile# порта, если для порта принято использовать другой "
+"каталог. Макрос `%%ETCDIR%%` будет использоваться вместо этого в "
+"[.filename]#pkg-plist#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:184
+msgid ""
+"The sample configuration files should always have the [.filename]#.sample# "
+"suffix. If for some historical reason using the standard suffix is not "
+"possible, or if the sample files come from some other directory, use this "
+"construct:"
+msgstr ""
+"Примеры конфигурационных файлов всегда должны иметь суффикс "
+"[.filename]#.sample#. Если по каким-то историческим причинам использование "
+"стандартного суффикса невозможно, или если примеры файлов взяты из другого "
+"каталога, используйте эту конструкцию:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:188
+#, no-wrap
+msgid "@sample etc/orbit.conf-dist etc/orbit.conf\n"
+msgstr "@sample etc/orbit.conf-dist etc/orbit.conf\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:191
+msgid "or"
+msgstr "или"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:195
+#, no-wrap
+msgid "@sample %%EXAMPLESDIR%%/orbit.conf etc/orbit.conf\n"
+msgstr "@sample %%EXAMPLESDIR%%/orbit.conf etc/orbit.conf\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:198
+msgid "The format is `@sample _sample-file actual-config-file_`."
+msgstr "Формат: `@sample _файл-образец фактический-конфигурационный-файл_`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:201
+#, no-wrap
+msgid "Dynamic Versus Static Package List"
+msgstr "Динамический или статический список упаковки"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:205
+msgid ""
+"A _static package list_ is a package list which is available in the Ports "
+"Collection either as [.filename]#pkg-plist# (with or without variable "
+"substitution), or embedded into the [.filename]#Makefile# via `PLIST_FILES` "
+"and `PLIST_DIRS`. Even if the contents are auto-generated by a tool or a "
+"target in the Makefile _before_ the inclusion into the Ports Collection by a "
+"committer (for example, using `make makeplist`), this is still considered a "
+"static list, since it is possible to examine it without having to download "
+"or compile the distfile."
+msgstr ""
+"_Статический список упаковки_ — это список упаковки, который доступен в "
+"Коллекции Портов или как файл [.filename]#pkg-plist# (с подстановкой "
+"переменных или без неё), или как встроенный в [.filename]#Makefile# через "
+"`PLIST_FILES` и `PLIST_DIRS`. Даже если содержимое было автоматически "
+"сгенерировано инструментом или целью в Makefile _до_ включения в Коллекцию "
+"портов коммиттером (например, с использованием `make makeplist`), такой "
+"список всё равно считается статическим, поскольку его можно посмотреть без "
+"необходимости загрузки или компиляции distfile."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:208
+msgid ""
+"A _dynamic package list_ is a package list which is generated at the time "
+"the port is compiled based upon the files and directories which are "
+"installed. It is not possible to examine it before the source code of the "
+"ported application is downloaded and compiled, or after running a `make "
+"clean`."
+msgstr ""
+"_Динамический список упаковки_ — это список упаковки, который генерируется "
+"во время компиляции порта на основе установленных файлов и каталогов. "
+"Невозможно изучить его до загрузки и компиляции исходного кода "
+"портированного приложения или после выполнения команды `make clean`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:212
+msgid ""
+"While the use of dynamic package lists is not forbidden, maintainers should "
+"use static package lists wherever possible, as it enables users to "
+"man:grep[1] through available ports to discover, for example, which port "
+"installs a certain file. Dynamic lists should be primarily used for complex "
+"ports where the package list changes drastically based upon optional "
+"features of the port (and thus maintaining a static package list is "
+"infeasible), or ports which change the package list based upon the version "
+"of dependent software used. For example, ports which generate docs with "
+"Javadoc."
+msgstr ""
+"Хотя использование динамических списков упаковки не запрещено, "
+"сопровождающие должны использовать статические списки упаковки везде, где "
+"это возможно, поскольку это позволяет пользователям выполнять man:grep[1] по "
+"доступным портам для обнаружения, например, какой порт устанавливает "
+"определенный файл. Динамические списки должны быть использованы в основном "
+"для сложных портов, для которых изменения в списке упаковки кардинальным "
+"образом основаны на возможностях порта, настраиваемых параметрами, (и, таким "
+"образом, делая сопровождение статических списков упаковки невозможным), или "
+"портов, которые изменяют список упаковки на основе версии используемого им "
+"программного обеспечения (например, порты, которые порождают документы при "
+"помощи Javadoc)."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:214
+#, no-wrap
+msgid "Automated Package List Creation"
+msgstr "Автоматическое создание списка упаковки"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:219
+msgid ""
+"First, make sure the port is almost complete, with only [.filename]#pkg-"
+"plist# missing. Running `make makeplist` will show an example for "
+"[.filename]#pkg-plist#. The output of `makeplist` must be double checked "
+"for correctness as it tries to automatically guess a few things, and can get "
+"it wrong."
+msgstr ""
+"Сначала убедитесь, что порт почти готов, и отсутствует только файл "
+"[.filename]#pkg-plist#. Запуск команды `make makeplist` покажет пример для "
+"файла [.filename]#pkg-plist#. Вывод `makeplist` необходимо дважды "
+"перепроверять на корректность, так как он пытается автоматически угадать "
+"некоторые вещи и может ошибаться."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:224
+msgid ""
+"User configuration files should be installed as "
+"[.filename]#filename.sample#, as it is described in crossref:plist[plist-"
+"config, Configuration Files]. [.filename]#info/dir# must not be listed and "
+"appropriate [.filename]#install-info# lines must be added as noted in the "
+"crossref:makefiles[makefile-info,info files] section. Any libraries "
+"installed by the port must be listed as specified in the "
+"crossref:special[porting-shlibs,shared libraries] section."
+msgstr ""
+"Файлы конфигурации пользователя должны устанавливаться как "
+"[.filename]#filename.sample#, как описано в разделе crossref:plist[plist-"
+"config,Файлы конфигурации]. [.filename]#info/dir# не должен быть указан, а "
+"соответствующие строки [.filename]#install-info# должны быть добавлены, как "
+"указано в разделе crossref:makefiles[makefile-info,info-файлы]. Любые "
+"библиотеки, устанавливаемые портом, должны быть перечислены, как указано в "
+"разделе crossref:special[porting-shlibs,общие библиотеки]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:226
+#, no-wrap
+msgid "Expanding `PLIST_SUB` with Regular Expressions"
+msgstr "Расширение `PLIST_SUB` с помощью регулярных выражений"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:230
+msgid ""
+"Strings to be replaced sometimes need to be very specific to avoid undesired "
+"replacements. This is a common problem with shorter values."
+msgstr ""
+"Строки, которые нужно заменить, иногда должны быть очень конкретными, чтобы "
+"избежать нежелательных замен. Это распространённая проблема с короткими "
+"значениями."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:232
+msgid ""
+"To address this problem, for each `_PLACEHOLDER_=_value_`, a "
+"`PLACEHOLDER_regex=regex` can be set, with the `_regex_` part matching "
+"_value_ more precisely."
+msgstr ""
+"Для решения этой проблемы для каждого `_PLACEHOLDER_=_значение_` можно "
+"задать `PLACEHOLDER_regex=регулярное_выражение`, где часть `_regex_` более "
+"точно соответствует _значению_."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:234
+#, no-wrap
+msgid "Using PLIST_SUB with Regular Expressions"
+msgstr "Использование PLIST_SUB с регулярными выражениями"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:242
+msgid ""
+"Perl ports can install architecture dependent files in a specific tree. On "
+"FreeBSD to ease porting, this tree is called `mach`. For example, a port "
+"that installs a file whose path contains `mach` could have that part of the "
+"path string replaced with the wrong values. Consider this "
+"[.filename]#Makefile#:"
+msgstr ""
+"Порты Perl могут устанавливать архитектурно-зависимые файлы в специальное "
+"дерево. В FreeBSD для упрощения портирования это дерево называется `mach`. "
+"Например, порт, который устанавливает файл, чей путь содержит `mach`, может "
+"иметь эту часть строки пути заменённой неправильными значениями. Рассмотрим "
+"этот [.filename]#Makefile#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:250
+#, no-wrap
+msgid ""
+"PORTNAME=\tMachine-Build\n"
+"DISTVERSION=\t1\n"
+"CATEGORIES=\tdevel perl5\n"
+"MASTER_SITES=\tCPAN\n"
+"PKGNAMEPREFIX=\tp5-\n"
+msgstr ""
+"PORTNAME=\tMachine-Build\n"
+"DISTVERSION=\t1\n"
+"CATEGORIES=\tdevel perl5\n"
+"MASTER_SITES=\tCPAN\n"
+"PKGNAMEPREFIX=\tp5-\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:254
+#, no-wrap
+msgid ""
+"MAINTAINER=\tperl@FreeBSD.org\n"
+"COMMENT=\tBuilding machine\n"
+"WWW=\t\thttps://search.cpan.org/dist/Machine-Build\n"
+msgstr ""
+"MAINTAINER=\tperl@FreeBSD.org\n"
+"COMMENT=\tBuilding machine\n"
+"WWW=\t\thttps://search.cpan.org/dist/Machine-Build\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:257
+#, no-wrap
+msgid ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tconfigure\n"
+msgstr ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tconfigure\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:259
+#, no-wrap
+msgid "PLIST_SUB=\tPERL_ARCH=mach\n"
+msgstr "PLIST_SUB=\tPERL_ARCH=mach\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:262
+msgid "The files installed by the port are:"
+msgstr "Файлы, установленные портом:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:270
+#, no-wrap
+msgid ""
+"/usr/local/bin/machine-build\n"
+"/usr/local/lib/perl5/site_perl/man/man1/machine-build.1.gz\n"
+"/usr/local/lib/perl5/site_perl/man/man3/Machine::Build.3.gz\n"
+"/usr/local/lib/perl5/site_perl/Machine/Build.pm\n"
+"/usr/local/lib/perl5/site_perl/mach/5.20/Machine/Build/Build.so\n"
+msgstr ""
+"/usr/local/bin/machine-build\n"
+"/usr/local/lib/perl5/site_perl/man/man1/machine-build.1.gz\n"
+"/usr/local/lib/perl5/site_perl/man/man3/Machine::Build.3.gz\n"
+"/usr/local/lib/perl5/site_perl/Machine/Build.pm\n"
+"/usr/local/lib/perl5/site_perl/mach/5.20/Machine/Build/Build.so\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:273
+msgid "Running `make makeplist` wrongly generates:"
+msgstr "Запуск `make makeplist` ошибочно создает:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:281
+#, no-wrap
+msgid ""
+"bin/%%PERL_ARCH%%ine-build\n"
+"%%PERL5_MAN1%%/%%PERL_ARCH%%ine-build.1.gz\n"
+"%%PERL5_MAN3%%/Machine::Build.3.gz\n"
+"%%SITE_PERL%%/Machine/Build.pm\n"
+"%%SITE_PERL%%/%%PERL_ARCH%%/%%PERL_VER%%/Machine/Build/Build.so\n"
+msgstr ""
+"bin/%%PERL_ARCH%%ine-build\n"
+"%%PERL5_MAN1%%/%%PERL_ARCH%%ine-build.1.gz\n"
+"%%PERL5_MAN3%%/Machine::Build.3.gz\n"
+"%%SITE_PERL%%/Machine/Build.pm\n"
+"%%SITE_PERL%%/%%PERL_ARCH%%/%%PERL_VER%%/Machine/Build/Build.so\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:284
+msgid "Change the `PLIST_SUB` line from the [.filename]#Makefile# to:"
+msgstr "Измените строку `PLIST_SUB` в [.filename]#Makefile# на:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:289
+#, no-wrap
+msgid ""
+"PLIST_SUB=\tPERL_ARCH=mach \\\n"
+"\t\tPERL_ARCH_regex=\\bmach\\b\n"
+msgstr ""
+"PLIST_SUB=\tPERL_ARCH=mach \\\n"
+"\t\tPERL_ARCH_regex=\\bmach\\b\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:292
+msgid "Now `make makeplist` correctly generates:"
+msgstr "Теперь `make makeplist` правильно генерирует:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:300
+#, no-wrap
+msgid ""
+"bin/machine-build\n"
+"%%PERL5_MAN1%%/machine-build.1.gz\n"
+"%%PERL5_MAN3%%/Machine::Build.3.gz\n"
+"%%SITE_PERL%%/Machine/Build.pm\n"
+"%%SITE_PERL%%/%%PERL_ARCH%%/%%PERL_VER%%/Machine/Build/Build.so\n"
+msgstr ""
+"bin/machine-build\n"
+"%%PERL5_MAN1%%/machine-build.1.gz\n"
+"%%PERL5_MAN3%%/Machine::Build.3.gz\n"
+"%%SITE_PERL%%/Machine/Build.pm\n"
+"%%SITE_PERL%%/%%PERL_ARCH%%/%%PERL_VER%%/Machine/Build/Build.so\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:305
+#, no-wrap
+msgid "Expanding Package List with Keywords"
+msgstr "Расширение списка пакетов используя ключевые слова"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:311
+msgid ""
+"All keywords can also take optional arguments in parentheses. The arguments "
+"are owner, group, and mode. This argument is used on the file or directory "
+"referenced. To change the owner, group, and mode of a configuration file, "
+"use:"
+msgstr ""
+"Все ключевые слова также могут принимать необязательные аргументы в скобках. "
+"Аргументами являются владелец, группа и режим доступа. Этот аргумент "
+"применяется к файлу или каталогу, на который ссылаются. Чтобы изменить "
+"владельца, группу и режим доступа конфигурационного файла, используйте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:315
+#, no-wrap
+msgid "@sample(games,games,640) etc/config.sample\n"
+msgstr "@sample(games,games,640) etc/config.sample\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:319
+msgid ""
+"The arguments are optional. If only the group and mode need to be changed, "
+"use:"
+msgstr ""
+"Аргументы являются необязательными. Если необходимо изменить только группу и "
+"режим, используйте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:323
+#, no-wrap
+msgid "@sample(,games,660) etc/config.sample\n"
+msgstr "@sample(,games,660) etc/config.sample\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:329
+msgid ""
+"If a keyword is used on an crossref:makefiles[makefile-options,optional] "
+"entry, it must to be added after the helper:"
+msgstr ""
+"Если ключевое слово используется в crossref:makefiles[makefile-"
+"options,необязательной записи], оно должно быть добавлено после помощника:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:333
+#, no-wrap
+msgid "%%FOO%%@sample etc/orbit.conf.sample\n"
+msgstr "%%FOO%%@sample etc/orbit.conf.sample\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:337
+msgid ""
+"This is because the options plist helpers are used to comment out the line, "
+"so they need to be put first. See "
+"crossref:makefiles[options_sub,`OPTIONS_SUB`] for more information."
+msgstr ""
+"Это происходит потому, что вспомогательные функции plist для опций "
+"используются для закомментирования строки, поэтому они должны быть указаны "
+"первыми. Дополнительную информацию см. в "
+"crossref:makefiles[options_sub,`OPTIONS_SUB`]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:340
+#, no-wrap
+msgid "`@desktop-file-utils`"
+msgstr "`@desktop-file-utils`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:344
+msgid ""
+"Will run `update-desktop-database -q` after installation and "
+"deinstallation. _Never_ use directly, add crossref:uses[uses-desktop-file-"
+"utils,`USES=desktop-file-utils`] to the [.filename]#Makefile#."
+msgstr ""
+"Будет выполнять `update-desktop-database -q` после установки и удаления. "
+"_Никогда_ не используйте напрямую, добавьте crossref:uses[uses-desktop-file-"
+"utils,`USES=desktop-file-utils`] в [.filename]#Makefile#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:346
+#, no-wrap
+msgid "`@fc` _directory_"
+msgstr "`@fc` _каталог_"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:349
+msgid ""
+"Add a `@dir` entry for the directory passed as an argument, and run `fc-"
+"cache -fs` on that directory after installation and deinstallation."
+msgstr ""
+"Добавить запись `@dir` для каталога, переданного в качестве аргумента, и "
+"выполнить `fc-cache -fs` для этого каталога после установки и удаления."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:351
+#, no-wrap
+msgid "`@fontsdir` _directory_"
+msgstr "`@fontsdir` _каталог_"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:355
+msgid ""
+"Add a `@dir` entry for the directory passed as an argument, and run "
+"`mkfontscale` and `mkfontdir` on that directory after installation and "
+"deinstallation. Additionally, on deinstallation, it removes the "
+"[.filename]#fonts.scale# and [.filename]#fonts.dir# cache files if they are "
+"empty."
+msgstr ""
+"Добавить запись `@dir` для каталога, переданного в качестве аргумента, и "
+"запустить `mkfontscale` и `mkfontdir` в этом каталоге после установки и "
+"удаления. Кроме того, при удалении удаляются кэш-файлы "
+"[.filename]#fonts.scale# и [.filename]#fonts.dir#, если они пусты."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:357
+#, no-wrap
+msgid "`@info` _file_"
+msgstr "`@info` _файл_"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:363
+msgid ""
+"Add the file passed as argument to the plist, and updates the info document "
+"index on installation and deinstallation. Additionally, it removes the "
+"index if empty on deinstallation. This should never be used manually, but "
+"always through `INFO`. See crossref:makefiles[makefile-info,Info Files] for "
+"more information."
+msgstr ""
+"Добавляет файл, переданный в качестве аргумента, в plist и обновляет индекс "
+"документа info при установке и удалении. Кроме того, удаляет индекс, если он "
+"пуст, при удалении. Это никогда не следует использовать вручную, а только "
+"через `INFO`. Подробнее см. в crossref:makefiles[makefile-info,Файлы Info]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:365
+#, no-wrap
+msgid "`@kld` _directory_"
+msgstr "`@kld` _каталог_"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:369
+msgid ""
+"Runs `kldxref` on the directory on installation and deinstallation. "
+"Additionally, on deinstallation, it will remove the directory if empty."
+msgstr ""
+"Выполняет `kldxref` для каталога при установке и удалении. Дополнительно при "
+"удалении каталог будет удалён, если он пуст."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:371
+#, no-wrap
+msgid "`@rmtry` _file_"
+msgstr "`@rmtry` _файл_"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:374
+msgid ""
+"Will remove the file on deinstallation, and not give an error if the file is "
+"not there."
+msgstr "Удаляет файл при удалении и не выдает ошибку, если файл отсутствует."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:376
+#, no-wrap
+msgid "`@sample` _file_ [_file_]"
+msgstr "`@sample` _файл_ [_файл_]"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:380
+msgid ""
+"This is used to handle installation of configuration files, through example "
+"files bundled with the package. The \"actual\", non-sample, file is either "
+"the second filename, if present, or the first filename without the "
+"[.filename]#.sample# extension."
+msgstr ""
+"Это используется для обработки установки файлов конфигурации, используя "
+"примеры файлов, поставляемых с пакетом. \"Реальный\" файл (не пример) — это "
+"либо второе имя файла, если оно присутствует, либо первое имя файла без "
+"расширения [.filename]#.sample#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:385
+msgid ""
+"This does three things. First, add the first file passed as argument, the "
+"sample file, to the plist. Then, on installation, if the actual file is not "
+"found, copy the sample file to the actual file. And finally, on "
+"deinstallation, remove the actual file if it has not been modified. See "
+"crossref:plist[plist-config, Configuration Files] for more information."
+msgstr ""
+"Это делает три вещи. Во-первых, добавляет первый переданный файл в качестве "
+"аргумента, образец файла, в plist. Затем, при установке, если фактический "
+"файл не найден, копирует образец файла в фактический файл. И наконец, при "
+"удалении, удаляет фактический файл, если он не был изменён. Дополнительную "
+"информацию см. в crossref:plist[plist-config, Файлы конфигурации]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:387
+#, no-wrap
+msgid "`@shared-mime-info` _directory_"
+msgstr "`@shared-mime-info` _каталог_"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:390
+msgid ""
+"Runs `update-mime-database` on the directory on installation and "
+"deinstallation."
+msgstr ""
+"Выполняет `update-mime-database` для указанного каталога при установке и "
+"удалении."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:392
+#, no-wrap
+msgid "`@shell` _file_"
+msgstr "`@shell` _файл_"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:395
+msgid "Add the file passed as argument to the plist."
+msgstr "Добавить файл, переданный в качестве аргумента, в plist."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:398
+msgid ""
+"On installation, add the full path to _file_ to [.filename]#/etc/shells#, "
+"while making sure it is not added twice. On deinstallation, remove it from "
+"[.filename]#/etc/shells#."
+msgstr ""
+"При установке добавить полный путь к _file_ в [.filename]#/etc/shells#, "
+"убедившись, что он не добавлен повторно. При удалении удалите его из "
+"[.filename]#/etc/shells#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:400
+#, no-wrap
+msgid "`@terminfo`"
+msgstr "`@terminfo`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:404
+msgid ""
+"Do not use by itself. If the port installs [.filename]#*.terminfo# files, "
+"add crossref:uses[uses-terminfo,`USES=terminfo`] to its "
+"[.filename]#Makefile#."
+msgstr ""
+"Не использовать самостоятельно. Если порт устанавливает файлы "
+"[.filename]#*.terminfo#, добавьте crossref:uses[uses-"
+"terminfo,`USES=terminfo`] в его [.filename]#Makefile#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:406
+msgid ""
+"On installation and deinstallation, if `tic` is present, refresh "
+"[.filename]#${PREFIX}/shared/misc/terminfo.db# from the "
+"[.filename]#*.terminfo# files in [.filename]#${PREFIX}/shared/misc#."
+msgstr ""
+"При установке и удалении, если присутствует `tic`, обновить [.filename]#$"
+"{PREFIX}/shared/misc/terminfo.db# из файлов [.filename]#*.terminfo# в "
+"[.filename]#${PREFIX}/shared/misc#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:408
+#, no-wrap
+msgid "Base Keywords"
+msgstr "Основные ключевые слова"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:411
+msgid ""
+"There are a few keywords that are hardcoded, and documented in man:pkg-"
+"create[8]. For the sake of completeness, they are also documented here."
+msgstr ""
+"Есть несколько ключевых слов, которые жестко закодированы и документированы "
+"в man:pkg-create[8]. Для полноты изложения они также документированы здесь."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:413
+#, no-wrap
+msgid "`@` [_file_]"
+msgstr "`@` [_файл_]"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:417
+msgid ""
+"The empty keyword is a placeholder to use when the file's owner, group, or "
+"mode need to be changed. For example, to set the group of the file to "
+"`games` and add the setgid bit, add:"
+msgstr ""
+"Ключевое слово `empty` является заполнителем, используемым, когда необходимо "
+"изменить владельца, группу или права доступа к файлу. Например, чтобы "
+"установить группу файла в `games` и добавить бит setgid, добавьте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:421
+#, no-wrap
+msgid "@(,games,2755) sbin/daemon\n"
+msgstr "@(,games,2755) sbin/daemon\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:424
+#, no-wrap
+msgid "`@preexec` _command_, `@postexec` _command_, `@preunexec` _command_, `@postunexec` _command_"
+msgstr "`@preexec` _команда_, `@postexec` _команда_, `@preunexec` _команда_, `@postunexec` _команда_"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:427
+msgid ""
+"Execute _command_ as part of the package installation or deinstallation "
+"process."
+msgstr "Выполнить _комманду_ как часть процесса установки или удаления пакета."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:428
+#, no-wrap
+msgid "`@preexec` _command_"
+msgstr "`@preexec` _команда_"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:430
+msgid "Execute _command_ as part of the [.filename]#pre-install# scripts."
+msgstr "Выполнить _команду_ как часть скриптов [.filename]#pre-install#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:431
+#, no-wrap
+msgid "`@postexec` _command_"
+msgstr "`@postexec` _команда_"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:433
+msgid "Execute _command_ as part of the [.filename]#post-install# scripts."
+msgstr "Выполнить _команду_ как часть скриптов [.filename]#post-install#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:434
+#, no-wrap
+msgid "`@preunexec` _command_"
+msgstr "`@preunexec` _команда_"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:436
+msgid "Execute _command_ as part of the [.filename]#pre-deinstall# scripts."
+msgstr "Выполнить _команду_ как часть скриптов [.filename]#pre-deinstall#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:437
+#, no-wrap
+msgid "`@postunexec` _command_"
+msgstr "`@postunexec` _команда_"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:439
+msgid "Execute _command_ as part of the [.filename]#post-deinstall# scripts."
+msgstr "Выполнить _команду_ как часть скриптов [.filename]#post-deinstall#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:442
+msgid ""
+"If _command_ contains any of these sequences somewhere in it, they are "
+"expanded inline. For these examples, assume that `@cwd` is set to "
+"[.filename]#/usr/local# and the last extracted file was [.filename]#bin/"
+"emacs#."
+msgstr ""
+"Если в _команде_ содержится любая из этих последовательностей, они "
+"раскрываются непосредственно. Для следующих примеров предположим, что `@cwd` "
+"установлен в [.filename]#/usr/local#, а последним извлечённым файлом был "
+"[.filename]#bin/emacs#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:443
+#, no-wrap
+msgid "`%F`"
+msgstr "`%F`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:446
+msgid ""
+"Expand to the last filename extracted (as specified). In the example case "
+"[.filename]#bin/emacs#."
+msgstr ""
+"Раскрывается до последнего извлеченного имени файла (как указано). В примере "
+"[.filename]#bin/emacs#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:447
+#, no-wrap
+msgid "`%D`"
+msgstr "`%D`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:450
+msgid ""
+"Expand to the current directory prefix, as set with `@cwd`. In the example "
+"case [.filename]#/usr/local#."
+msgstr ""
+"Раскрыть до текущего префикса директории, установленного с помощью `@cwd`. В "
+"этом примере [.filename]#/usr/local#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:451
+#, no-wrap
+msgid "`%B`"
+msgstr "`%B`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:454
+msgid ""
+"Expand to the basename of the fully qualified filename, that is, the current "
+"directory prefix plus the last filespec, minus the trailing filename. In "
+"the example case, that would be [.filename]#/usr/local/bin#."
+msgstr ""
+"Раскрыть до базового имени полного имени файла, то есть префикс текущего "
+"каталога плюс последняя спецификация файла, за вычетом имени файла в конце "
+"спецификации. В данном примере это будет [.filename]#/usr/local/bin#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:455
+#, no-wrap
+msgid "`%f`"
+msgstr "`%f`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:458
+msgid ""
+"Expand to the filename part of the fully qualified name, or the converse of "
+"`%B`. In the example case, [.filename]#emacs#."
+msgstr ""
+"Раскрывается до части имени файла в полном квалифицированном имени, или "
+"противоположный случай для `%B`. В примере, [.filename]#emacs#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:463
+msgid ""
+"These keywords are here to help you set up the package so that it is as "
+"ready to use as possible. They _must not_ be abused to start services, stop "
+"services, or run any other commands that will modify the currently running "
+"system."
+msgstr ""
+"Эти ключевые слова предназначены для помощи в настройке пакета, чтобы он был "
+"максимально готов к использованию. Они _не должны_ использоваться для "
+"запуска служб, остановки служб или выполнения любых других команд, которые "
+"изменяют текущую работающую систему."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:466
+#, no-wrap
+msgid "`@mode` _mode_"
+msgstr "`@mode` _режим_"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:471
+msgid ""
+"Set default permission for all subsequently extracted files to _mode_. "
+"Format is the same as that used by man:chmod[1]. Use without an arg to set "
+"back to default permissions (mode of the file while being packed)."
+msgstr ""
+"Установить разрешения по умолчанию для всех последующих извлекаемых файлов в "
+"_режим_. Формат такой же, как используется в man:chmod[1]. Использование без "
+"аргумента вернёт разрешения по умолчанию (режим файла при упаковке)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:476
+msgid ""
+"This must be a numeric mode, like `644`, `4755`, or `600`. It cannot be a "
+"relative mode like `u+s`."
+msgstr ""
+"Это должен быть числовой режим, например `644`, `4755` или `600`. Нельзя "
+"использовать относительный режим, например `u+s`."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:479
+#, no-wrap
+msgid "`@owner` _user_"
+msgstr "`@owner` _пользователь_"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:483
+msgid ""
+"Set default ownership for all subsequent files to _user_. Use without an "
+"argument to set back to default ownership (`root`)."
+msgstr ""
+"Установить владельца по умолчанию для всех последующих файлов в "
+"_пользователь_. Использование без аргумента вернёт владельца по умолчанию "
+"(`root`)."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:485
+#, no-wrap
+msgid "`@group` _group_"
+msgstr "`@group` _группа_"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:489
+msgid ""
+"Set default group ownership for all subsequent files to _group_. Use "
+"without an arg to set back to default group ownership (`wheel`)."
+msgstr ""
+"Установить группу-владельца по умолчанию для всех последующих файлов в "
+"_группу_. Использование без аргумента вернёт группу-владельца по умолчанию "
+"(`wheel`)."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:491
+#, no-wrap
+msgid "`@comment` _string_"
+msgstr "`@comment` _строка_"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:494
+msgid "This line is ignored when packing."
+msgstr "Эта строка игнорируется при упаковке."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:496
+#, no-wrap
+msgid "`@dir` _directory_"
+msgstr "`@dir` _каталог_"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:502
+msgid ""
+"Declare directory name. By default, directories created under `PREFIX` by a "
+"package installation are automatically removed. Use this when an empty "
+"directory under `PREFIX` needs to be created, or when the directory needs to "
+"have non default owner, group, or mode. Directories outside of `PREFIX` "
+"need to be registered. For example, [.filename]#/var/db/${PORTNAME}# needs "
+"to have a `@dir` entry whereas [.filename]#${PREFIX}/shared/${PORTNAME}# "
+"does not if it contains files or uses the default owner, group, and mode."
+msgstr ""
+"Объявить имя каталога. По умолчанию каталоги, созданные в `PREFIX` при "
+"установке пакета, автоматически удаляются. Используйте эту опцию, если "
+"необходимо создать пустой каталог в `PREFIX` или если каталогу требуется "
+"нестандартный владелец, группа или права. Каталоги за пределами `PREFIX` "
+"необходимо регистрировать. Например, [.filename]#/var/db/${PORTNAME}# "
+"требует записи `@dir`, тогда как [.filename]#${PREFIX}/shared/${PORTNAME}# — "
+"нет, если он содержит файлы или использует стандартные владельца, группу и "
+"права."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:504
+#, no-wrap
+msgid "`@exec` _command_, `@unexec` _command_ (Deprecated)"
+msgstr "`@exec` _команда_, `@unexec` _команда_ (Устарело)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:508
+msgid ""
+"Execute _command_ as part of the installation or deinstallation process. "
+"Please use crossref:plist[plist-keywords-base-exec, `@preexec` _command_, "
+"`@postexec` _command_, `@preunexec` _command_, `@postunexec` _command_] "
+"instead."
+msgstr ""
+"Выполнить _команду_ как часть процесса установки или удаления. Рекомендуется "
+"использовать crossref:plist[plist-keywords-base-exec, `@preexec` _команда_, "
+"`@postexec` _команда_, `@preunexec` _команда_, `@postunexec` _команда_] "
+"вместо этого."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:510
+#, no-wrap
+msgid "`@dirrm` _directory_ (Deprecated)"
+msgstr "`@dirrm` _каталог_ (Устарело)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:514
+msgid ""
+"Declare directory name to be deleted at deinstall time. By default, "
+"directories created under `PREFIX` by a package installation are deleted "
+"when the package is deinstalled."
+msgstr ""
+"Объявить имя каталога для удаления при деинсталляции. По умолчанию каталоги, "
+"созданные в `PREFIX` при установке пакета, удаляются при его деинсталляции."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:516
+#, no-wrap
+msgid "`@dirrmtry` _directory_ (Deprecated)"
+msgstr "`@dirrmtry` _каталог_ (Устарело)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:519
+msgid ""
+"Declare directory name to be removed, as for `@dirrm`, but does not issue a "
+"warning if the directory cannot be removed."
+msgstr ""
+"Объявить имя каталога для удаления, аналогично `@dirrm`, но не выводить "
+"предупреждение, если каталог не может быть удален."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:521
+#, no-wrap
+msgid "Creating New Keywords"
+msgstr "Создание новых ключевых слов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:526
+msgid ""
+"Package list files can be extended by keywords that are defined in the "
+"[.filename]#${PORTSDIR}/Keywords# directory. The settings for each keyword "
+"are stored in a UCL file named [.filename]#keyword.ucl#. The file must "
+"contain at least one of these sections:"
+msgstr ""
+"Файлы списка пакетов могут быть расширены ключевыми словами, которые "
+"определены в каталоге [.filename]#${PORTSDIR}/Keywords#. Настройки каждого "
+"ключевого слова хранятся в файле UCL с именем [.filename]#keyword.ucl#. Файл "
+"должен содержать как минимум один из следующих разделов:"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:528
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:537
+#, no-wrap
+msgid "`attributes`"
+msgstr "`attributes`"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:529
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:550
+#, no-wrap
+msgid "`action`"
+msgstr "`action`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:530
+msgid "`pre-install`"
+msgstr "`pre-install`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:531
+msgid "`post-install`"
+msgstr "`post-install`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:532
+msgid "`pre-deinstall`"
+msgstr "`pre-deinstall`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:533
+msgid "`post-deinstall`"
+msgstr "`post-deinstall`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:534
+msgid "`pre-upgrade`"
+msgstr "`pre-upgrade`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:535
+msgid "`post-upgrade`"
+msgstr "`post-upgrade`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:543
+msgid ""
+"Changes the owner, group, or mode used by the keyword. Contains an "
+"associative array where the possible keys are `owner`, `group`, and `mode`. "
+"The values are, respectively, a user name, a group name, and a file mode. "
+"For example:"
+msgstr ""
+"Изменяет владельца, группу или режим доступа, используемые ключевым словом. "
+"Содержит ассоциативный массив, в котором возможными ключами являются "
+"`owner`, `group` и `mode`. Значениями являются, соответственно, имя "
+"пользователя, имя группы и режим доступа к файлу. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:547
+#, no-wrap
+msgid "attributes: { owner: \"games\", group: \"games\", mode: 0555 }\n"
+msgstr "attributes: { owner: \"games\", group: \"games\", mode: 0555 }\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:553
+msgid ""
+"Defines what happens to the keyword's parameter. Contains an array where the "
+"possible values are:"
+msgstr ""
+"Определяет, что происходит с параметром ключевого слова. Содержит массив, "
+"где возможные значения:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:554
+#, no-wrap
+msgid "`setprefix`"
+msgstr "`setprefix`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:556
+msgid "Set the prefix for the next plist entries."
+msgstr "Установите префикс для следующих записей в plist."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:557
+#, no-wrap
+msgid "`dir`"
+msgstr "`dir`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:559
+msgid "Register a directory to be created on install and removed on deinstall."
+msgstr ""
+"Зарегистрировать каталог для создания при установке и удаления при "
+"деинсталляции."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:560
+#, no-wrap
+msgid "`dirrm`"
+msgstr "`dirrm`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:563
+msgid "Register a directory to be deleted on deinstall. Deprecated."
+msgstr "Зарегистрировать каталог для удаления при деинсталляции. Устарело."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:564
+#, no-wrap
+msgid "`dirrmtry`"
+msgstr "`dirrmtry`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:567
+msgid "Register a directory to try and deleted on deinstall. Deprecated."
+msgstr ""
+"Зарегистрировать каталог для попытки удаления при деинсталляции. Устарело."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:568
+#, no-wrap
+msgid "`file`"
+msgstr "`file`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:570
+msgid "Register a file."
+msgstr "Зарегистрировать файл."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:571
+#, no-wrap
+msgid "`setmode`"
+msgstr "`setmode`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:573
+msgid "Set the mode for the next plist entries."
+msgstr "Установить режим для следующих записей plist."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:574
+#, no-wrap
+msgid "`setowner`"
+msgstr "`setowner`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:576
+msgid "Set the owner for the next plist entries."
+msgstr "Установить владельца для следующих записей plist."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:577
+#, no-wrap
+msgid "`setgroup`"
+msgstr "`setgroup`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:579
+msgid "Set the group for the next plist entries."
+msgstr "Установить группу для следующих записей в plist."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:580
+#, no-wrap
+msgid "`comment`"
+msgstr "`comment`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:582
+msgid "Does not do anything, equivalent to not entering an `action` section."
+msgstr ""
+"Не выполняет никаких действий, эквивалентно отсутствию раздела `action`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:583
+#, no-wrap
+msgid "`ignore_next`"
+msgstr "`ignore_next`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:585
+msgid "Ignore the next entry in the plist."
+msgstr "Игнорировать следующую запись в plist."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:587
+#, no-wrap
+msgid "`arguments`"
+msgstr "`arguments`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:591
+msgid ""
+"If set to `true`, adds argument handling, splitting the whole line, `%@`, "
+"into numbered arguments, `%1`, `%2`, and so on. For example, for this line:"
+msgstr ""
+"Если установлено значение `true`, добавляется обработка аргументов, разделяя "
+"всю строку, `%@`, на нумерованные аргументы, `%1`, `%2`, и так далее. "
+"Например, для такой строки:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:595
+#, no-wrap
+msgid "@foo some.content other.content\n"
+msgstr "@foo some.content other.content\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:598
+msgid "`%1` and `%2` will contain:"
+msgstr "`%1` и `%2` будут содержать:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:603
+#, no-wrap
+msgid ""
+"some.content\n"
+"other.content\n"
+msgstr ""
+"some.content\n"
+"other.content\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:608
+msgid ""
+"It also affects how the crossref:plist[plist-keywords-action,`action`] entry "
+"works. When there is more than one argument, the argument number must be "
+"specified. For example:"
+msgstr ""
+"Это также влияет на работу записи crossref:plist[plist-keywords-"
+"action,`action`]. Если аргументов больше одного, необходимо указать номер "
+"аргумента. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:612
+#, no-wrap
+msgid "actions: [file(1)]\n"
+msgstr "actions: [file(1)]\n"
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:615
+#, no-wrap
+msgid "`pre-install`, `post-install`, `pre-deinstall`, `post-deinstall`, `pre-upgrade`, `post-upgrade`"
+msgstr "`pre-install`, `post-install`, `pre-deinstall`, `post-deinstall`, `pre-upgrade`, `post-upgrade`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:620
+msgid ""
+"These keywords contains a man:sh[1] script to be executed before or after "
+"installation, deinstallation, or upgrade of the package. In addition to the "
+"usual `@exec %_foo_` placeholders described in crossref:plist[plist-keywords-"
+"base-exec, `@preexec` _command_, `@postexec` _command_, `@preunexec` "
+"_command_, `@postunexec` _command_], there is a new one, `%@`, which "
+"represents the argument of the keyword."
+msgstr ""
+"Эти ключевые слова содержат man:sh[1] скрипт, который выполняется до или "
+"после установки, удаления или обновления пакета. В дополнение к обычным "
+"заполнителям `@exec %_foo_`, описанным в crossref:plist[plist-keywords-base-"
+"exec, `@preexec` _команда_, `@postexec` _команда_, `@preunexec` _команда_, "
+"`@postunexec` _команда_], существует новый заполнитель `%@`, который "
+"представляет аргумент ключевого слова."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:622
+#, no-wrap
+msgid "Custom Keyword Examples"
+msgstr "Примеры пользовательских ключевых слов"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:625
+#, no-wrap
+msgid "Example of a `@dirrmtryecho` Keyword"
+msgstr "Пример ключевого слова `@dirrmtryecho`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:630
+msgid ""
+"This keyword does two things, it adds a `@dirrmtry _directory_` line to the "
+"packing list, and echoes the fact that the directory is removed when "
+"deinstalling the package."
+msgstr ""
+"Это ключевое слово выполняет две функции: добавляет строку `@dirrmtry "
+"_directory_` в список упаковки и сообщает о том, что директория удаляется "
+"при деинсталляции пакета."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:637
+#, no-wrap
+msgid ""
+"actions: [dirrmtry]\n"
+"post-deinstall: <<EOD\n"
+" echo \"Directory %D/%@ removed.\"\n"
+"EOD\n"
+msgstr ""
+"actions: [dirrmtry]\n"
+"post-deinstall: <<EOD\n"
+" echo \"Directory %D/%@ removed.\"\n"
+"EOD\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:642
+#, no-wrap
+msgid "Real Life Example, How `@sample` is Implemented"
+msgstr "Реальный пример, как реализован `@sample`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:648
+msgid ""
+"This keyword does three things. It adds the first _filename_ passed as an "
+"argument to `@sample` to the packing list, it adds to the `post-install` "
+"script instructions to copy the sample to the actual configuration file if "
+"it does not already exist, and it adds to the `post-deinstall` instructions "
+"to remove the configuration file if it has not been modified."
+msgstr ""
+"Этот ключевое слово выполняет три действия. Оно добавляет первый _filename_, "
+"переданный в качестве аргумента `@sample`, в список упаковки, добавляет в "
+"скрипт `post-install` инструкции для копирования образца в фактический файл "
+"конфигурации, если он ещё не существует, и добавляет в инструкции `post-"
+"deinstall` удаление файла конфигурации, если он не был изменён."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:693
+#, no-wrap
+msgid ""
+"actions: [file(1)]\n"
+"arguments: true\n"
+"post-install: <<EOD\n"
+" case \"%1\" in\n"
+" /*) sample_file=\"%1\" ;;\n"
+" *) sample_file=\"%D/%1\" ;;\n"
+" esac\n"
+" target_file=\"${sample_file%.sample}\"\n"
+" set -- %@\n"
+" if [ $# -eq 2 ]; then\n"
+" target_file=${2}\n"
+" fi\n"
+" case \"${target_file}\" in\n"
+" /*) target_file=\"${target_file}\" ;;\n"
+" *) target_file=\"%D/${target_file}\" ;;\n"
+" esac\n"
+" if ! [ -f \"${target_file}\" ]; then\n"
+" /bin/cp -p \"${sample_file}\" \"${target_file}\" && \\\n"
+" /bin/chmod u+w \"${target_file}\"\n"
+" fi\n"
+"EOD\n"
+"pre-deinstall: <<EOD\n"
+" case \"%1\" in\n"
+" /*) sample_file=\"%1\" ;;\n"
+" *) sample_file=\"%D/%1\" ;;\n"
+" esac\n"
+" target_file=\"${sample_file%.sample}\"\n"
+" set -- %@\n"
+" if [ $# -eq 2 ]; then\n"
+" set -- %@\n"
+" target_file=${2}\n"
+" fi\n"
+" case \"${target_file}\" in\n"
+" /*) target_file=\"${target_file}\" ;;\n"
+" *) target_file=\"%D/${target_file}\" ;;\n"
+" esac\n"
+" if cmp -s \"${target_file}\" \"${sample_file}\"; then\n"
+" rm -f \"${target_file}\"\n"
+" else\n"
+" echo \"You may need to manually remove ${target_file} if it is no longer needed.\"\n"
+" fi\n"
+"EOD\n"
+msgstr ""
+"actions: [file(1)]\n"
+"arguments: true\n"
+"post-install: <<EOD\n"
+" case \"%1\" in\n"
+" /*) sample_file=\"%1\" ;;\n"
+" *) sample_file=\"%D/%1\" ;;\n"
+" esac\n"
+" target_file=\"${sample_file%.sample}\"\n"
+" set -- %@\n"
+" if [ $# -eq 2 ]; then\n"
+" target_file=${2}\n"
+" fi\n"
+" case \"${target_file}\" in\n"
+" /*) target_file=\"${target_file}\" ;;\n"
+" *) target_file=\"%D/${target_file}\" ;;\n"
+" esac\n"
+" if ! [ -f \"${target_file}\" ]; then\n"
+" /bin/cp -p \"${sample_file}\" \"${target_file}\" && \\\n"
+" /bin/chmod u+w \"${target_file}\"\n"
+" fi\n"
+"EOD\n"
+"pre-deinstall: <<EOD\n"
+" case \"%1\" in\n"
+" /*) sample_file=\"%1\" ;;\n"
+" *) sample_file=\"%D/%1\" ;;\n"
+" esac\n"
+" target_file=\"${sample_file%.sample}\"\n"
+" set -- %@\n"
+" if [ $# -eq 2 ]; then\n"
+" set -- %@\n"
+" target_file=${2}\n"
+" fi\n"
+" case \"${target_file}\" in\n"
+" /*) target_file=\"${target_file}\" ;;\n"
+" *) target_file=\"%D/${target_file}\" ;;\n"
+" esac\n"
+" if cmp -s \"${target_file}\" \"${sample_file}\"; then\n"
+" rm -f \"${target_file}\"\n"
+" else\n"
+" echo \"You may need to manually remove ${target_file} if it is no longer needed.\"\n"
+" fi\n"
+"EOD\n"
diff --git a/documentation/content/ru/books/porters-handbook/porting-dads/_index.adoc b/documentation/content/ru/books/porters-handbook/porting-dads/_index.adoc
index bb5a06d72a..519a72f2e3 100644
--- a/documentation/content/ru/books/porters-handbook/porting-dads/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/porting-dads/_index.adoc
@@ -1,11 +1,13 @@
---
-title: Глава 12. Что делать нужно, и что делать нельзя
-prev: books/porters-handbook/security
+description: 'Список распространённых рекомендаций и ошибок, встречающихся в процессе портирования на FreeBSD'
next: books/porters-handbook/porting-samplem
-showBookMenu: true
-weight: 12
params:
- path: "/books/porters-handbook/porting-dads/"
+ path: /books/porters-handbook/porting-dads/
+prev: books/porters-handbook/security
+showBookMenu: true
+tags: "[\"dos\", \"don'ts\", \"porting\", \"ports\", \"guide\"]"
+title: 'Глава 13. Что делать нужно, и что делать нельзя'
+weight: 13
---
[[porting-dads]]
@@ -16,7 +18,7 @@ params:
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 12
+:sectnumoffset: 13
:partnums:
:source-highlighter: rouge
:experimental:
@@ -51,24 +53,22 @@ endif::[]
[[dads-intro]]
== Введение
-Вот список часто встречающихся действий, которые нужно и которые нельзя делать во время процесса портирования. Проверьте порт по этому списку, и также проверьте порты в http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query[базе сообщений PR], которые присланы другими людьми. Присылайте любые комментарии о портах, которые вы проверили, так, как это описано в статье о extref:{contributing}[Сообщениях об ошибках и общих замечаниях, CONTRIB-GENERAL]. Проверка портов в базе сообщений PR позволит нам быстрее коммиттить их и удостовериться, что вы знаете, что делаете.
+Вот список часто встречающихся действий, которые нужно и которые нельзя делать во время процесса портирования. Проверьте порт по этому списку, и также проверьте порты в https://bugs.FreeBSD.org/search/[базе сообщений PR], которые присланы другими людьми. Присылайте любые комментарии о портах, которые вы проверили, так, как это описано в статье о extref:{contributing}[Сообщениях об ошибках и общих замечаниях, CONTRIB-GENERAL]. Проверка портов в базе сообщений PR позволит нам быстрее коммиттить их и удостовериться, что вы знаете, что делаете.
[[porting-wrkdir]]
== `WRKDIR`
-Не пишите ничего в файлы вне каталога `WRKDIR`. Каталог `WRKDIR` является единственным местом, которое гарантированно будет доступно для записи во время построения порта (обратитесь к главе об extref:{handbook}ports[установке портов с CDROM, PORTS-CD] за примером построения портов из дерева, доступного только для чтения). Если вам нужно изменить какой-либо из файлов [.filename]##pkg-*##, сделайте это, <<porting-pkgfiles,переопределив переменную>>, но не перезаписывая их.
+Не пишите ничего в файлы вне каталога `WRKDIR`. Каталог `WRKDIR` является единственным местом, которое гарантированно будет доступно для записи во время построения порта (обратитесь к главе об extref:{handbook}[установке портов с CDROM, PORTS-CD] за примером построения портов из дерева, доступного только для чтения). Если вам нужно изменить какой-либо из файлов [.filename]##pkg-*##, сделайте это, crossref:pkg-files[pkg-names,переопределив переменную], но не перезаписывая их.
[[porting-wrkdirprefix]]
== `WRKDIRPREFIX`
-Добейтесь того, чтобы ваш порт принимал во внимание значение переменной `WRKDIRPREFIX`. Большинство портов об этом не заботятся. В частности, если вы обращаетесь к каталогу `WRKDIR` другого порта, заметьте, что его правильным местоположением является [.filename]#WRKDIRPREFIXPORTSDIR/subdir/name/work#, а не [.filename]#PORTSDIR/subdir/work# или [.filename]#.CURDIR/../../subdir/name/work# мли что-то подобное.
-
-Кроме того, если вы сами задаете `WRKDIR`, то должны поставить перед ним знак `${WRKDIRPREFIX}${.CURDIR}`.
+Добейтесь того, чтобы ваш порт принимал во внимание значение переменной `WRKDIRPREFIX`. Большинство портов об этом не заботятся. В частности, если вы обращаетесь к каталогу `WRKDIR` другого порта, заметьте, что его правильным местоположением является [.filename]#WRKDIRPREFIXPORTSDIR/subdir/name/work#, а не [.filename]#PORTSDIR/subdir/work# или [.filename]#.CURDIR/../../subdir/name/work# мли что-то подобное. Кроме того, если вы сами задаете `WRKDIR`, то должны поставить перед ним знак `${WRKDIRPREFIX}${.CURDIR}`.
[[porting-versions]]
== Различение операционных систем и версий ОС
-Вы можете встретиться с кодом, который требует модификаций или условной компиляции в зависимости от того, с какой версией FreeBSD Unix он работает. Предпочтительным способом отделения кода для версий FreeBSD является использование макросов {freebsd-version} и {freebsd}, определённых в http://svnweb.freebsd.org/base/head/sys/sys/param.h?view=markup[sys/param.h]. Если этот файл не подключен, добавьте код
+Вы можете встретиться с кодом, который требует модификаций или условной компиляции в зависимости от того, с какой версией FreeBSD Unix он работает. Предпочтительным способом отделения кода для версий FreeBSD является использование макросов {freebsd-version} и {freebsd}, определённых в https://cgit.freebsd.org/src/tree/sys/sys/param.h[sys/param.h]. Если этот файл не подключен, добавьте код
[.programlisting]
....
@@ -83,17 +83,19 @@ endif::[]
....
#if __FreeBSD__ >= 9
# if __FreeBSD_version >= 901000
- /* здесь особый код для версий 9.1+ */
+ /* 9.1+ release specific code here */
# endif
#endif
....
+Полный список значений `{freebsd-version}` доступен в crossref:versions[versions,Значения __FreeBSD_version].
+
[[dads-after-port-mk]]
-== Написание чего-либо после [.filename]#bsd.port.mk#
+== Написание чего-либо после bsd.port.mk
Не пишите ничего после строки `.include <bsd.port.mk>`. Этой строки можно избежать, включив в где-то в середину вашего файла [.filename]#Makefile# файл [.filename]#bsd.port.pre.mk#, и файл [.filename]#bsd.port.post.mk# в конец.
-[NOTE]
+[IMPORTANT]
====
Вам нужно включить либо пару файлов [.filename]#bsd.port.pre.mk#/[.filename]#bsd.port.post.mk#, либо только [.filename]#bsd.port.mk#; не используйте оба этих метода одновременно.
====
@@ -118,13 +120,13 @@ endif::[]
|Версия релиза операционной системы (например, `2.1.5` или `2.2.7`)
|`OSVERSION`
-|Версия операционной системы в виде числа, та же, что и <<freebsd-versions,`__FreeBSD_version`>>.
+|Версия операционной системы в виде числа, та же, что и crossref:versions[versions,`{freebsd-version}`].
|`LOCALBASE`
|Корень дерева "local" (например, `/usr/local`)
|`PREFIX`
-|Куда, собственно, устанавливается порт (обратитесь к <<porting-prefix,подробной информации о `PREFIX`>>).
+|Куда, собственно, устанавливается порт (обратитесь к crossref:testing[porting-prefix,подробной информации о `PREFIX`]).
|===
[NOTE]
@@ -142,7 +144,7 @@ BROKEN= perl is in system
.endif
....
-Вы не забываете об использовании табуляции вместо пробелов после `BROKEN=`:-).
+Вы не забываете об использовании табуляции вместо пробелов после `BROKEN=`.
[[dads-sh-exec]]
== Использование выражения `exec` в сценариях обёртках
@@ -165,11 +167,11 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"
Если вы обнаружите, что для выполнения чего-то приходится писать много нового кода, то, пожалуйста, просмотрите файл [.filename]#bsd.port.mk# на предмет того, не содержит ли он решение именно вашей проблемы. Хотя его трудно читать, имеется много проблем, выглядящих сложными, для которых файл [.filename]#bsd.port.mk# уже содержит быстрое решение.
[[dads-cc]]
-== Работа как с `CC`, так и `CXX`
+== Относитесь внимательно как к `CC`, так и `CXX`
Порт должен принимать во внимание как переменную `CC`, так и `CXX`. Под этим мы подразумеваем, что порт ни в коем случае не должен устанавливать значения этих переменных, переопределяя имеющиеся значения; вместо этого можно добавлять нужные значения к уже имеющимся. Это связано с тем, что параметры построения, относящиеся ко всем портам, могут быть заданы глобально.
-Если порты не учитывают значения этих переменных, добавьте строку `NO_PACKAGE=ignores either cc or cxx` в файл [.filename]#Makefile#.
+Если порт не учитывает значения этих переменных, добавьте строку `NO_PACKAGE=ignores either cc or cxx` в файл [.filename]#Makefile#.
Далее следует пример файла [.filename]#Makefile#, использующего как переменную `CC`, так и `CXX`. Обратите внимание на использование символов `?=`:
@@ -198,11 +200,11 @@ CXX= g++
В системах FreeBSD обе переменные `CC` и `CXX` могут быть определены в файле [.filename]#/etc/make.conf#. В первом примере задаётся значение, если оно ранее не было определено в [.filename]#/etc/make.conf#, что сохраняет любые определения, данные на уровне системы в целом. Второй пример переопределяет всё, что было задано ранее.
[[dads-cflags]]
-== Использование `CFLAGS`
+== Относитесь внимательно к `CFLAGS`
Порт должен учитывать переменную `CFLAGS`. Под этим мы подразумеваем, что порт ни в коем случае не должен устанавливать значения этой переменной, переопределяя имеющиеся значения; вместо этого можно добавлять нужные значения к уже имеющимся. Это связано с тем, что параметры построения, относящиеся ко всем портам, могут быть заданы глобально.
-Если порты не учитывают значения этой переменной, добавьте строку `NO_PACKAGE=ignores cflags` в файл [.filename]#Makefile#.
+Если порт не учитывает значения этой переменной, добавьте строку `NO_PACKAGE=ignores cflags` в файл [.filename]#Makefile#.
Далее следует пример файла [.filename]#Makefile#, использующего переменную `CFLAGS`. Обратите внимание на использование символов `+=`:
@@ -234,23 +236,38 @@ CFLAGS= -O3 -funroll-loops -DHAVE_SOUND
CFLAGS+= -DHAVE_SOUND
....
-[[dads-pthread]]
-== Библиотеки потоков
+[[dads-verbose-logs]]
+== Подробные логи сборки
-Во FreeBSD библиотека потоков обязана быть скомпонована с исполняемыми файлами с использованием специального флага `-pthread`. Если порт настаивает на прямой компоновке с `-lpthread`, создайте патч для использования `-pthread`.
+Заставьте систему сборки портов отображать все команды, выполняемые на этапе сборки. Полные логи сборки критически важны для отладки проблем с портами.
-[NOTE]
-====
-Если построение порта заканчивается ошибкой `unrecognized option '-pthread'`, то может быть желательно использование `cc` в качестве компоновщика через установку `CONFIGURE_ENV` в `LD=${CC}`. Параметр `-pthread` напрямую командой `ld` не поддерживается.
-====
+Пример неинформативного лога сборки (плохой):
+
+[.programlisting]
+....
+ CC source1.o
+ CC source2.o
+ CCLD someprogram
+....
+
+Пример подробного журнала сборки (хороший):
+
+[.programlisting]
+....
+cc -O2 -pipe -I/usr/local/include -c -o source1.o source1.c
+cc -O2 -pipe -I/usr/local/include -c -o source2.o source2.c
+cc -o someprogram source1.o source2.o -L/usr/local/lib -lsomelib
+....
+
+Некоторые системы сборки, такие как CMake, ninja и GNU configure, настроены на подробное ведение журнала в рамках инфраструктуры портов. В других случаях портам могут потребоваться индивидуальные изменения.
[[dads-feedback]]
-== Пожелания
+== Обратная связь
Посылайте подходящие изменения/патчи автору/сопровождающему для включения в следующий релиз. Это только сделает вашу работу гораздо легче при выходе следующего релиза.
[[dads-readme]]
-== [.filename]#README.html#
+== README.html
[.filename]#README.html# не является частью порта и генерируется при помощи `make readme`. Не включайте этот файл в патчи или коммиты.
@@ -262,79 +279,117 @@ CFLAGS+= -DHAVE_SOUND
[[dads-noinstall]]
== Пометка неустанавливаемого порта как `BROKEN`, `FORBIDDEN` или `IGNORE`
-В некоторых случаях пользователи не должны допускаться к установке порта. Для того, чтобы сообщить пользователю, что порт не следует устанавливать, имеется несколько `make`-переменных, которые могут быть использованы в файле [.filename]#Makefile# порта. Значения следующих `make`-переменных будут причиной, возвращаемой пользователям, по которой порт отказывает в установке. Пожалуйста, используйте корректные `make`-переменные, так как каждая переменная make передает абсолютно различный смысл как для пользователей, так и для автоматизированных систем, которые полагаются на файлы [.filename]#Makefile#, таких как <<build-cluster,кластер построения портов>>, <<freshports,FreshPorts>> и <<portsmon,portsmon>>.
+В некоторых случаях пользователи не должны допускаться к установке порта. Для того, чтобы сообщить пользователю, что порт не следует устанавливать, имеется несколько `make`-переменных, которые могут быть использованы в файле [.filename]#Makefile# порта. Значения следующих `make`-переменных будут причиной, возвращаемой пользователям, по которой порт отказывает в установке. Пожалуйста, используйте корректные `make`-переменные, так как каждая переменная make передает абсолютно различный смысл как для пользователей, так и для автоматизированных систем, которые полагаются на файлы [.filename]#Makefile#, таких как crossref:keeping-up[build-cluster,кластер построения портов], crossref:keeping-up[freshports,FreshPorts].
[[dads-noinstall-variables]]
=== Переменные
* `BROKEN` предназначена для портов, которые в настоящее время не компилируются, не устанавливаются или не удаляются правильно. Следует использовать, когда проблема считается временной.
-+
++
В особых случаях кластер построения будет продолжать попытки собрать их, чтобы показать, решена ли основная проблема. (Однако, как правило, кластер запускается без этой возможности.)
-+
++
В частности, используйте `BROKEN`, когда порт:
** не компилируется
-** не выполняет процесс своей конфигурации или установки
-** устанавливает файлы вовне [.filename]#${LOCALBASE}#
+** выполняет со сбоем конфигурирование или процесс установки
+** устанавливает файлы вовне [.filename]#${PREFIX}#
** не удаляет полностью все свои файлы при деинсталляции (тем не менее, это может быть допустимо, и подходит для портов, оставляющих после себя файлы, измененные пользователем)
+** имеет проблемы во время выполнения на системах, где он должен работать нормально.
* `FORBIDDEN` используется для портов, которые содержат уязвимости в информационной безопасности или являются потенциально вредными в плане обеспечения информационной безопасности системы FreeBSD при установке данного порта (например: заведомо небезопасная программа или программа, которая предоставляет легко взламываемые сервисы). Порты должны помечаться как `FORBIDDEN`, как только в конкретном программном обеспечении обнаружилась уязвимость, но обновление выпущено не было. В идеальном случае порты должны обновляться максимально быстро после обнаружения уязвимости, чтобы уменьшить число уязвимых хостов FreeBSD (нам нравится иметь репутацию безопасной системы), однако иногда случается значительный временной разрыв между обнаружением уязвимости и выходом обновлённого релиза уязвимого программного обеспечения. Не помечайте порт как `FORBIDDEN`, если причина не вызвана соображениями информационной безопасности.
* `IGNORE` предназначена для портов, которые не должны строиться по какой-либо другой причине. Следует использовать для портов, в случае когда проблема считается структурной. Кластер построения ни при каких условиях не будет строить порты, помеченные как `IGNORE`. В частности, используйте `IGNORE`, когда порт:
-** компилируется, но работает неправильно
** не работает на установленной версии FreeBSD
-** имеет дистрибутивный файл, который не может быть автоматически извлечен из-за лицензионных ограничений
-** не работает с каким-либо другим портом, установленным в настоящее время (например, порт зависит от package:www/apache20[], но установлен package:www/apache22[])
-
+** имеет distfile, который не может быть автоматически загружен из-за ограничений лицензирования
+** не работает с некоторыми другими установленными портами (например, порт зависит от package:www/drupal7[], но установлен package:www/drupal8[])
+
[NOTE]
====
-Если порт будет конфликтовать с уже установленным портом (например, если они устанавливают файл в то же место, но с иным функциональным назначением), то <<conflicts,используйте вместо этого `CONFLICTS`>>. `CONFLICTS` сам установит значение `IGNORE`.
+Если порт будет конфликтовать с уже установленным портом (например, если они устанавливают файл в то же место, но с иным функциональным назначением), то crossref:makefiles[conflicts,используйте вместо этого `CONFLICTS`]. `CONFLICTS` сам установит значение `IGNORE`.
====
-* Если порт нужно пометить как `IGNORE` только на некоторых архитектурах, для этого есть две другие удобные переменные, которые автоматически установят для вас значения: `ONLY_FOR_ARCHS` и `NOT_FOR_ARCHS`. Примеры:
-+
+[[dads-noinstall-notes]]
+=== Заметки о реализации
+
+Не заключайте значения переменных `BROKEN`, `IGNORE` и связанных с ними в кавычки. Из-за способа отображения информации пользователю, формулировка сообщений для каждой переменной отличается:
+
[.programlisting]
....
-ONLY_FOR_ARCHS= i386 amd64
+BROKEN= fails to link with base -lcrypto
....
-+
[.programlisting]
....
-NOT_FOR_ARCHS= ia64 sparc64
+IGNORE= unsupported on recent versions
....
-+
-Собственное сообщение `IGNORE` можно задать с использованием `ONLY_FOR_ARCHS_REASON` и `NOT_FOR_ARCHS_REASON`. Отдельно для каждой архитектуры это возможно с использованием `ONLY_FOR_ARCHS_REASON_ARCH` и `NOT_FOR_ARCHS_REASON_ARCH`.
-* Если порт загружает и устанавливает исполняемые файлы i386, то следует установить `IA32_BINARY_PORT`. Если эта переменная установлена, будет выполнена проверка доступности каталога [.filename]#/usr/lib32# для библиотек версии IA32 и поддержки IA32 в ядре. При невыполнении любого из этих условий будет автоматически установлена переменная `IGNORE`.
-
-[[dads-noinstall-notes]]
-=== Замечания по реализации
-
-Строки не следует брать в кавычки. Также построение строки должно несколько различаться из-за способа отображения информации пользователю. Примеры:
+и в результате `make describe` выведен информацию в таком виде :
[.programlisting]
....
-BROKEN= fails to link with base -lcrypto
+===> foobar-0.1 is marked as broken: fails to link with base -lcrypto.
....
[.programlisting]
....
-IGNORE= unsupported on recent versions
+===> foobar-0.1 is unsupported on recent versions.
....
-получаемые в результате следующего вывода `make describe`:
+[[dads-arch]]
+== Архитектурные соображения
+
+[[dads-arch-general]]
+=== Общие замечания об архитектурах
+
+FreeBSD работает на гораздо большем количестве архитектур процессоров, чем только хорошо известные x86-совместимые. Некоторые порты имеют ограничения, характерные для одной или нескольких из этих архитектур.
+
+Для списка поддерживаемых архитектур выполните:
[.programlisting]
....
-===> foobar-0.1 is marked as broken: fails to link with base -lcrypto.
+cd ${SRCDIR}; make targets
....
+Значения отображаются в форме `TARGET`/`TARGET_ARCH`. Переменная только для чтения `ARCH` в ports устанавливается на основе значения `TARGET_ARCH`. [.filename]##Makefile## в портах должны проверять значение этой переменной.
+
+[[dads-arch-neutral]]
+=== Пометка порта как архитектурно нейтрального
+
+Порты, которые не имеют зависимых от архитектуры файлов или требований, определяются установкой `NO_ARCH=yes`.
+
+Пакеты, собранные из таких портов, имеют строку архитектуры, оканчивающуюся на `:*` (архитектура с подстановочным символом), в отличие от, например, `freebsd:13:x86:64` (архитектура amd64).
+
+[NOTE]
+====
+`NO_ARCH` предназначен для указания того, что нет необходимости собирать пакет для каждой из поддерживаемых архитектур. Цель состоит в том, чтобы сократить количество ресурсов, затрачиваемых на сборку и распространение пакетов, таких как сетевой трафик и дисковое пространство на зеркалах и на носителях дистрибутива. Однако в настоящее время наша инфраструктура пакетов (например, менеджеры пакетов, зеркала и сборщики пакетов) не настроена для полного использования преимуществ `NO_ARCH`.
+====
+
+[[dads-arch-ignore]]
+=== Пометка порта как игнорируемого только на определенных архитектурах
+
+* Чтобы пометить порт как ``IGNORE`` только для определенных архитектур, существуют две другие удобные переменные, которые автоматически устанавливают `IGNORE`: `ONLY_FOR_ARCHS` и `NOT_FOR_ARCHS`. Примеры:
++
[.programlisting]
....
-===> foobar-0.1 is unsupported on recent versions.
+ONLY_FOR_ARCHS= i386 amd64
+....
++
+[.programlisting]
+....
+NOT_FOR_ARCHS= ia64 sparc64
....
++
+Пользовательское сообщение `IGNORE` можно задать с помощью `ONLY_FOR_ARCHS_REASON` и `NOT_FOR_ARCHS_REASON`. Для отдельных архитектур возможны записи с `ONLY_FOR_ARCHS_REASON_ARCH` и `NOT_FOR_ARCHS_REASON_ARCH`.
+
+[[dads-arch-i386]]
+* Если порт загружает и устанавливает бинарные файлы i386, установите `IA32_BINARY_PORT`. Если эта переменная задана, [.filename]#/usr/lib32# должен присутствовать для IA32-версий библиотек, а ядро должно поддерживать совместимость с IA32. Если одно из этих двух условий не выполняется, `IGNORE` будет установлен автоматически.
+
+[[dads-arch-cluster]]
+=== Специфические аспекты для кластеров
+
+* Некоторые порты пытаются оптимизировать себя под конкретную машину, на которой они собираются, указывая компилятору `-march=native`. Этого следует избегать: либо добавить этот параметр в опцию, отключенную по умолчанию, либо удалить его полностью.
++
+В противном случае стандартный пакет, созданный кластером сборки, может не запускаться на каждой машине с данной `ARCH`.
[[dads-deprecated]]
== Пометка порта на удаление с `DEPRECATED` или `EXPIRATION_DATE`
@@ -345,7 +400,12 @@ IGNORE= unsupported on recent versions
Переменную `DEPRECATED` можно установить без использования `EXPIRATION_DATE` (в частности, при рекомендации новой версии порта), но обратный порядок не имеет никакого смысла.
-Не существует устоявшейся политики, как долго следует продолжать уведомления. Текущая практика дает около месяца для решения проблем безопасности и два месяца для проблем построения. Это также дает немного времени на исправление проблем любым заинтересованным коммиттерам.
+[NOTE]
+====
+При пометке порта как `DEPRECATED`, если существуют альтернативные порты, которые можно использовать вместо устаревающего, удобно упомянуть их в сообщении коммита.
+====
+
+Не существует установленного правила о том, насколько заранее нужно уведомлять. Текущая практика предполагает один месяц для проблем, связанных с безопасностью, и два месяца для проблем сборки. Это также дает заинтересованным коммиттерам немного времени на исправление проблем.
[[dads-dot-error]]
== Избегайте использования конструкции `.error`
@@ -358,6 +418,7 @@ IGNORE= unsupported on recent versions
.Как избегать использования `.error`
[example]
====
+
Из следующих двух вариантов строки файла [.filename]#Makefile# первый приведёт к неудачному завершению работы `make index`, а второй - нет:
[.programlisting]
@@ -373,7 +434,7 @@ IGNORE=option is not supported
====
[[dads-sysctl]]
-== Использование [.filename]#sysctl#
+== Использование sysctl
Использование [.filename]#sysctl# не рекомендуется, кроме как при выполнении целей. Это вызвано тем, что вычисление любых `makevar`, таких как во время команды `make index`, с необходимостью запуска этой команды, еще больше замедляет весь процесс.
@@ -382,28 +443,35 @@ man:sysctl[8] следует всегда использовать через п
[[dads-rerolling-distfiles]]
== Меняющиеся дистрибутивные файлы
-Иногда авторы программного обеспечения меняют содержимое выпущенных дистрибутивных файлов без смены названия. Вы должны проверять, что изменения являются официальными и произведены автором. В прошлом бывало, что дистрибутивный файл молча изменялся на сайтах загрузки с намерением нанести вред или скомпрометировать безопасность конечного пользователя.
+Иногда авторы программного обеспечения изменяют содержимое выпущенных дистрибутивных файлов, не меняя их названия. Убедитесь, что изменения официальны и были выполнены автором. В прошлом случалось, что дистрибутивный файл тихо изменялся на серверах загрузки с целью нанесения вреда или компрометации безопасности конечного пользователя.
-Отложите старый файл с дистрибутивом в сторону, загрузите новый, распакуйте его и сравните содержимое при помощи man:diff[1]. Если вы не видите ничего подозрительного, то можете обновить файл [.filename]#distinfo#. Убедитесь, что вы подытожили различия в вашем PR или описании коммита, чтобы другие люди были в курсе, что вы позаботились о том, что ничего плохого не случилось.
+Отложите старый distfile в сторону, загрузите новый, распакуйте их и сравните содержимое с помощью man:diff[1]. Если ничего подозрительного нет, обновите [.filename]#distinfo#.
-Возможно вы также захотите связаться с автором этого программного обеспечения для подтверждения изменений.
+[IMPORTANT]
+====
+Убедитесь, что вы выделили основные различия в PR и журнале коммитов, чтобы другие люди знали, что ничего плохого не произошло.
+====
-[[dads-avoiding-linuxisms]]
-== Избегание линуксизмов
+Связжитесь с автором этого программного обеспечения для подтверждения изменений.
-Не используйте [.filename]#/proc#, если доступны любые другие источники получения информации, например, `setprogname(argv[0])` в `main()` и man:getprogname[3], в случае если вы хотите "знать своё имя".
+[[dads-use-posix-standards]]
+== Используйте стандарты POSIX
-Не полагайтесь на поведение, не регламентированное POSIX.
+В большинстве случаев порты FreeBSD ожидают соответствия стандарту POSIX. Некоторые программы и системы сборки делают предположения, основанные на конкретной операционной системе или окружении, что может вызывать проблемы при использовании в порте.
-Не выполняйте запись временных меток в критических путях выполнения приложения, если можно обойтись без этого. Получение временных меток может быть медленным, в зависимости от степени точности используемых часов в операционной системе. Если временные метки действительно нужны, определите степень требуемой точности и используйте тот API, в котором документируется получение достаточной точности.
+Не используйте [.filename]#/proc#, если есть другие способы получить информацию. Например, `setprogname(argv[0])` в `main()`, а затем man:getprogname[3] для получения имени исполняемого файла.
-Ряд простых системных вызовов (например, man:gettimeofday[2], man:getpid[2]) работают намного быстрее в Linux(R) по сравнению с любой другой операционной системой из-за кеширования и используемой оптимизации vsyscall. Не полагайтесь на их дешевизну в критичных к производительности приложениях. В целом, старайтесь избегать системных вызовов там, где это возможно.
+Не полагайтесь на поведение, не документированное в POSIX.
+
+Не записывайте метки времени в критическом пути приложения, если оно работает и без них. Получение меток времени может быть медленным в зависимости от точности меток времени в ОС. Если метки времени действительно необходимы, определите, насколько точными они должны быть, и используйте API, которое, согласно документации, предоставляет только необходимую точность.
+
+Ряд простых системных вызовов (например, man:gettimeofday[2], man:getpid[2]) работают намного быстрее в Linux(R) по сравнению с любой другой операционной системой из-за кэширования и используемой оптимизации vsyscall. Не полагайтесь на их дешевизну в критичных к производительности приложениях. В целом, старайтесь избегать системных вызовов там, где это возможно.
Не полагайтесь на специфичное для Linux(R) поведение сокета. В частности, отличаются размеры буфера сокета по умолчанию (выполните вызов man:setsockopt[2] с `SO_SNDBUF` и `SO_RCVBUF`, и в то время как в Linux(R) при заполнении буфера сокета man:send[2] блокируется, FreeBSD возвращает ошибку и устанавливает `ENOBUFS` в качестве значения errno.
Если требуется рассчитывать на нестандартное поведение, инкапсулируйте это должным образом в общий для всех API с проверкой поведения на этапе конфигурации, и если требуемое поведение не найдено, прекращайте выполнение.
-Используйте http://www.freebsd.org/cgi/man.cgi[страницы справочника] для проверки, относится ли функция к интерфейсу POSIX (ищите раздел "STANDARDS" на странице справочника).
+Используйте https://www.freebsd.org/cgi/man.cgi[страницы справочника] для проверки, относится ли функция к интерфейсу POSIX (ищите раздел "STANDARDS" на странице справочника).
Не рассчитывайте на то, что в качестве [.filename]#/bin/sh# используется bash. Убедитесь, что командная строка, переданная в man:system[3], будет работать в POSIX-совместимой оболочке.
@@ -411,13 +479,9 @@ man:sysctl[8] следует всегда использовать через п
Проверьте, что используемые заголовочные файлы включены в POSIX или список, рекомендуемый страницей справочника, т.к. например, забыть подключить [.filename]#sys/types.h# - не такая уж проблема в Linux(R), однако это не так во FreeBSD.
-Компилируйте многопоточные приложения с ключом "-pthread", а не "-lpthread" или как-либо ещё.
-
[[dads-misc]]
== Разное
Файлы [.filename]#pkg-descr# и [.filename]#pkg-plist# должны проверяться дважды. Если вы пересматриваете порт и думаете, что его можно описать иначе, сделайте это.
-Пожалуйста, не создавайте дополнительных копий лицензии GNU General Public License в нашей системе.
-
Будьте внимательны с юридическими вопросами! Не делайте из нас нелегальных распространителей ПО!
diff --git a/documentation/content/ru/books/porters-handbook/porting-dads/_index.po b/documentation/content/ru/books/porters-handbook/porting-dads/_index.po
new file mode 100644
index 0000000000..d277972fb0
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/porting-dads/_index.po
@@ -0,0 +1,1473 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-08-26 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookporting-dads_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:1
+#, no-wrap
+msgid "A list of common dos and don'ts that are encountered during the FreeBSD porting process"
+msgstr "Список распространённых рекомендаций и ошибок, встречающихся в процессе портирования на FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:1
+#, no-wrap
+msgid "Chapter 13. Dos and Don'ts"
+msgstr "Глава 13. Что делать нужно, и что делать нельзя"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:14
+#, no-wrap
+msgid "Dos and Don'ts"
+msgstr "Что делать нужно, и что делать нельзя"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:54
+#, no-wrap
+msgid "Introduction"
+msgstr "Введение"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:60
+msgid ""
+"Here is a list of common dos and don'ts that are encountered during the "
+"porting process. Check the port against this list, but also check ports in "
+"the https://bugs.FreeBSD.org/search/[PR database] that others have "
+"submitted. Submit any comments on ports as described in extref:"
+"{contributing}[Bug Reports and General Commentary, CONTRIB-GENERAL]. "
+"Checking ports in the PR database will both make it faster for us to commit "
+"them, and prove that you know what you are doing."
+msgstr ""
+"Вот список часто встречающихся действий, которые нужно и которые нельзя "
+"делать во время процесса портирования. Проверьте порт по этому списку, и "
+"также проверьте порты в https://bugs.FreeBSD.org/search/[базе сообщений PR], "
+"которые присланы другими людьми. Присылайте любые комментарии о портах, "
+"которые вы проверили, так, как это описано в статье о extref:{contributing}"
+"[Сообщениях об ошибках и общих замечаниях, CONTRIB-GENERAL]. Проверка портов "
+"в базе сообщений PR позволит нам быстрее коммиттить их и удостовериться, что "
+"вы знаете, что делаете."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:62
+#, no-wrap
+msgid "`WRKDIR`"
+msgstr "`WRKDIR`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:66
+msgid ""
+"Do not write anything to files outside `WRKDIR`. `WRKDIR` is the only place "
+"that is guaranteed to be writable during the port build (see extref:"
+"{handbook}[ installing ports from a CDROM, PORTS-CD] for an example of "
+"building ports from a read-only tree). The [.filename]##pkg-*## files can "
+"be modified by crossref:pkg-files[pkg-names,redefining a variable] rather "
+"than overwriting the file."
+msgstr ""
+"Не пишите ничего в файлы вне каталога `WRKDIR`. Каталог `WRKDIR` является "
+"единственным местом, которое гарантированно будет доступно для записи во "
+"время построения порта (обратитесь к главе об extref:{handbook}[установке "
+"портов с CDROM, PORTS-CD] за примером построения портов из дерева, "
+"доступного только для чтения). Если вам нужно изменить какой-либо из файлов "
+"[.filename]##pkg-*##, сделайте это, crossref:pkg-files[pkg-"
+"names,переопределив переменную], но не перезаписывая их."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:68
+#, no-wrap
+msgid "`WRKDIRPREFIX`"
+msgstr "`WRKDIRPREFIX`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:73
+msgid ""
+"Make sure the port honors `WRKDIRPREFIX`. Most ports do not have to worry "
+"about this. In particular, when referring to a `WRKDIR` of another port, "
+"note that the correct location is [.filename]#${WRKDIRPREFIX}${PORTSDIR}/"
+"subdir/name/work# not [.filename]#${PORTSDIR}/subdir/name/work# or "
+"[.filename]#${.CURDIR}/../../subdir/name/work# or some such."
+msgstr ""
+"Добейтесь того, чтобы ваш порт принимал во внимание значение переменной "
+"`WRKDIRPREFIX`. Большинство портов об этом не заботятся. В частности, если "
+"вы обращаетесь к каталогу `WRKDIR` другого порта, заметьте, что его "
+"правильным местоположением является [.filename]#WRKDIRPREFIXPORTSDIR/subdir/"
+"name/work#, а не [.filename]#PORTSDIR/subdir/work# или "
+"[.filename]#.CURDIR/../../subdir/name/work# мли что-то подобное. Кроме того, "
+"если вы сами задаете `WRKDIR`, то должны поставить перед ним знак `$"
+"{WRKDIRPREFIX}${.CURDIR}`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:75
+#, no-wrap
+msgid "Differentiating Operating Systems and OS Versions"
+msgstr "Различение операционных систем и версий ОС"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:79
+msgid ""
+"Some code needs modifications or conditional compilation based upon what "
+"version of FreeBSD Unix it is running under. The preferred way to tell "
+"FreeBSD versions apart are the `{freebsd-version}` and `{freebsd}` macros "
+"defined in https://cgit.freebsd.org/src/tree/sys/sys/param.h[sys/param.h]. "
+"If this file is not included add the code,"
+msgstr ""
+"Вы можете встретиться с кодом, который требует модификаций или условной "
+"компиляции в зависимости от того, с какой версией FreeBSD Unix он работает. "
+"Предпочтительным способом отделения кода для версий FreeBSD является "
+"использование макросов {freebsd-version} и {freebsd}, определённых в https://"
+"cgit.freebsd.org/src/tree/sys/sys/param.h[sys/param.h]. Если этот файл не "
+"подключен, добавьте код"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:83
+#, no-wrap
+msgid "#include <sys/param.h>\n"
+msgstr "#include <sys/param.h>\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:86
+msgid "to the proper place in the [.filename]#.c# file."
+msgstr "в нужном месте файла [.filename]#.c#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:89
+msgid ""
+"`{freebsd}` is defined in all versions of FreeBSD as their major version "
+"number. For example, in FreeBSD 9.x, `{freebsd}` is defined to be `9`."
+msgstr ""
+"{freebsd} определён во всех версиях FreeBSD в качестве старшего номера "
+"версии системы. Например, в FreeBSD 9.x {freebsd} определён со значением `9`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:97
+#, no-wrap
+msgid ""
+"#if __FreeBSD__ >= 9\n"
+"# if __FreeBSD_version >= 901000\n"
+"\t /* 9.1+ release specific code here */\n"
+"# endif\n"
+"#endif\n"
+msgstr ""
+"#if __FreeBSD__ >= 9\n"
+"# if __FreeBSD_version >= 901000\n"
+"\t /* 9.1+ release specific code here */\n"
+"# endif\n"
+"#endif\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:100
+msgid ""
+"A complete list of `{freebsd-version}` values is available in "
+"crossref:versions[versions,__FreeBSD_version Values]."
+msgstr ""
+"Полный список значений `{freebsd-version}` доступен в "
+"crossref:versions[versions,Значения __FreeBSD_version]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:102
+#, no-wrap
+msgid "Writing Something After bsd.port.mk"
+msgstr "Написание чего-либо после bsd.port.mk"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:106
+msgid ""
+"Do not write anything after the `.include <bsd.port.mk>` line. It usually "
+"can be avoided by including [.filename]#bsd.port.pre.mk# somewhere in the "
+"middle of the [.filename]#Makefile# and [.filename]#bsd.port.post.mk# at the "
+"end."
+msgstr ""
+"Не пишите ничего после строки `.include <bsd.port.mk>`. Этой строки можно "
+"избежать, включив в где-то в середину вашего файла [.filename]#Makefile# "
+"файл [.filename]#bsd.port.pre.mk#, и файл [.filename]#bsd.port.post.mk# в "
+"конец."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:110
+msgid ""
+"Include either the [.filename]#bsd.port.pre.mk#/"
+"[.filename]#bsd.port.post.mk# pair or [.filename]#bsd.port.mk# only; do not "
+"mix these two usages."
+msgstr ""
+"Вам нужно включить либо пару файлов [.filename]#bsd.port.pre.mk#/"
+"[.filename]#bsd.port.post.mk#, либо только [.filename]#bsd.port.mk#; не "
+"используйте оба этих метода одновременно."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:113
+msgid ""
+"[.filename]#bsd.port.pre.mk# only defines a few variables, which can be used "
+"in tests in the [.filename]#Makefile#, [.filename]#bsd.port.post.mk# defines "
+"the rest."
+msgstr ""
+"В файле [.filename]#bsd.port.pre.mk# определяются лишь несколько переменных, "
+"которые могут быть использованы в тестах из файла [.filename]#Makefile#, в "
+"файле [.filename]#bsd.port.post.mk# заданы остальные."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:115
+msgid ""
+"Here are some important variables defined in [.filename]#bsd.port.pre.mk# "
+"(this is not the complete list, please read [.filename]#bsd.port.mk# for the "
+"complete list)."
+msgstr ""
+"Вот некоторые важные переменные, определенные в файле "
+"[.filename]#bsd.port.pre.mk# (это не полный список, для выяснения полного "
+"списка прочтите, пожалуйста, сам файл [.filename]#bsd.port.mk#)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:120
+#, no-wrap
+msgid "Variable"
+msgstr "Переменная"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:122
+#, no-wrap
+msgid "Description"
+msgstr "Описание"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:123
+#, no-wrap
+msgid "`ARCH`"
+msgstr "`ARCH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:125
+#, no-wrap
+msgid "The architecture as returned by `uname -m` (for example, `i386`)"
+msgstr "Архитектура машины в виде, получаемом по команде `uname -m` (например, `i386`)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:126
+#, no-wrap
+msgid "`OPSYS`"
+msgstr "`OPSYS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:128
+#, no-wrap
+msgid "The operating system type, as returned by `uname -s` (for example, `FreeBSD`)"
+msgstr "Тип операционной системы, получаемый по команде `uname -s` (например, `FreeBSD`)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:129
+#, no-wrap
+msgid "`OSREL`"
+msgstr "`OSREL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:131
+#, no-wrap
+msgid "The release version of the operating system (for example, `2.1.5` or `2.2.7`)"
+msgstr "Версия релиза операционной системы (например, `2.1.5` или `2.2.7`)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:132
+#, no-wrap
+msgid "`OSVERSION`"
+msgstr "`OSVERSION`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:134
+#, no-wrap
+msgid "The numeric version of the operating system; the same as crossref:versions[versions,`{freebsd-version}`]."
+msgstr "Версия операционной системы в виде числа, та же, что и crossref:versions[versions,`{freebsd-version}`]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:135
+#, no-wrap
+msgid "`LOCALBASE`"
+msgstr "`LOCALBASE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:137
+#, no-wrap
+msgid "The base of the \"local\" tree (for example, `/usr/local`)"
+msgstr "Корень дерева \"local\" (например, `/usr/local`)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:138
+#, no-wrap
+msgid "`PREFIX`"
+msgstr "`PREFIX`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:139
+#, no-wrap
+msgid "Where the port installs itself (see crossref:testing[porting-prefix,more on `PREFIX`])."
+msgstr "Куда, собственно, устанавливается порт (обратитесь к crossref:testing[porting-prefix,подробной информации о `PREFIX`])."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:144
+msgid ""
+"When `MASTERDIR` is needed, always define it before including "
+"[.filename]#bsd.port.pre.mk#."
+msgstr ""
+"Если вы задаете переменную `MASTERDIR`, делайте это до подключения "
+"[.filename]#bsd.port.pre.mk#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:147
+msgid ""
+"Here are some examples of things that can be added after "
+"[.filename]#bsd.port.pre.mk#:"
+msgstr ""
+"Вот несколько примеров того, что вы можете написать после "
+"[.filename]#bsd.port.pre.mk#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:154
+#, no-wrap
+msgid ""
+"# no need to compile lang/perl5 if perl5 is already in system\n"
+".if ${OSVERSION} > 300003\n"
+"BROKEN=\tperl is in system\n"
+".endif\n"
+msgstr ""
+"# no need to compile lang/perl5 if perl5 is already in system\n"
+".if ${OSVERSION} > 300003\n"
+"BROKEN=\tperl is in system\n"
+".endif\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:157
+msgid "Always use tab instead of spaces after `BROKEN=`."
+msgstr ""
+"Вы не забываете об использовании табуляции вместо пробелов после `BROKEN=`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:159
+#, no-wrap
+msgid "Use the `exec` Statement in Wrapper Scripts"
+msgstr "Использование выражения `exec` в сценариях обёртках"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:164
+msgid ""
+"If the port installs a shell script whose purpose is to launch another "
+"program, and if launching that program is the last action performed by the "
+"script, make sure to launch the program using the `exec` statement, for "
+"instance:"
+msgstr ""
+"Если порт устанавливает сценарий на языке shell, который служит для запуска "
+"другой программы, и если запуск этой программы является последним действием "
+"сценария, убедитесь, что запуск программы производится с использованием "
+"выражения `exec`, например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:169
+#, no-wrap
+msgid ""
+"#!/bin/sh\n"
+"exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar \"$@\"\n"
+msgstr ""
+"#!/bin/sh\n"
+"exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar \"$@\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:174
+msgid ""
+"The `exec` statement replaces the shell process with the specified program. "
+"If `exec` is omitted, the shell process remains in memory while the program "
+"is executing, and needlessly consumes system resources."
+msgstr ""
+"Выражение `exec` заменяет процесс сценария на указанную программу. Если "
+"`exec` опущен, то процесс сценария во время работы программы остается в "
+"памяти, бесполезно потребляя системные ресурсы."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:176
+#, no-wrap
+msgid "Do Things Rationally"
+msgstr "Поступайте разумно"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:181
+msgid ""
+"The [.filename]#Makefile# should do things in a simple and reasonable "
+"manner. Making it a couple of lines shorter or more readable is always "
+"better. Examples include using a make `.if` construct instead of a shell "
+"`if` construct, not redefining `do-extract` if redefining `EXTRACT*` is "
+"enough, and using `GNU_CONFIGURE` instead of `CONFIGURE_ARGS += --prefix=$"
+"{PREFIX}`."
+msgstr ""
+"Файл [.filename]#Makefile# должен выполнять действия просто и небеспричинно. "
+"Если вы можете сделать что-то на несколько строк короче или более "
+"читабельно, сделайте это. В качестве примеров можно привести использование "
+"конструкций `.if` утилиты make вместо соответствующей конструкции `if` "
+"командного процессора, ненужность переопределения цели `do-extract` при "
+"возможности переопределения `EXTRACT*` и использование `GNU_CONFIGURE` "
+"вместо `CONFIGURE_ARGS += --prefix=${PREFIX}`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:184
+msgid ""
+"If a lot of new code is needed to do something, there may already be an "
+"implementation of it in [.filename]#bsd.port.mk#. While hard to read, there "
+"are a great many seemingly-hard problems for which [.filename]#bsd.port.mk# "
+"already provides a shorthand solution."
+msgstr ""
+"Если вы обнаружите, что для выполнения чего-то приходится писать много "
+"нового кода, то, пожалуйста, просмотрите файл [.filename]#bsd.port.mk# на "
+"предмет того, не содержит ли он решение именно вашей проблемы. Хотя его "
+"трудно читать, имеется много проблем, выглядящих сложными, для которых файл "
+"[.filename]#bsd.port.mk# уже содержит быстрое решение."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:186
+#, no-wrap
+msgid "Respect Both `CC` and `CXX`"
+msgstr "Относитесь внимательно как к `CC`, так и `CXX`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:192
+msgid ""
+"The port must respect both `CC` and `CXX`. What we mean by this is that the "
+"port must not set the values of these variables absolutely, overriding "
+"existing values; instead, it may append whatever values it needs to the "
+"existing values. This is so that build options that affect all ports can be "
+"set globally."
+msgstr ""
+"Порт должен принимать во внимание как переменную `CC`, так и `CXX`. Под этим "
+"мы подразумеваем, что порт ни в коем случае не должен устанавливать значения "
+"этих переменных, переопределяя имеющиеся значения; вместо этого можно "
+"добавлять нужные значения к уже имеющимся. Это связано с тем, что параметры "
+"построения, относящиеся ко всем портам, могут быть заданы глобально."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:194
+msgid ""
+"If the port does not respect these variables, please add `NO_PACKAGE=ignores "
+"either cc or cxx` to the [.filename]#Makefile#."
+msgstr ""
+"Если порт не учитывает значения этих переменных, добавьте строку "
+"`NO_PACKAGE=ignores either cc or cxx` в файл [.filename]#Makefile#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:197
+msgid ""
+"Here is an example of a [.filename]#Makefile# respecting both `CC` and "
+"`CXX`. Note the `?=`:"
+msgstr ""
+"Далее следует пример файла [.filename]#Makefile#, использующего как "
+"переменную `CC`, так и `CXX`. Обратите внимание на использование символов `?"
+"=`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:201
+#, no-wrap
+msgid "CC?= gcc\n"
+msgstr "CC?= gcc\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:206
+#, no-wrap
+msgid "CXX?= g++\n"
+msgstr "CXX?= g++\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:209
+msgid "Here is an example which respects neither `CC` nor `CXX`:"
+msgstr "Вот пример, в котором не принимаются во внимание ни `CC`, ни `CXX`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:213
+#, no-wrap
+msgid "CC= gcc\n"
+msgstr "CC= gcc\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:218
+#, no-wrap
+msgid "CXX= g++\n"
+msgstr "CXX= g++\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:223
+msgid ""
+"Both `CC` and `CXX` can be defined on FreeBSD systems in [.filename]#/etc/"
+"make.conf#. The first example defines a value if it was not previously set "
+"in [.filename]#/etc/make.conf#, preserving any system-wide definitions. The "
+"second example clobbers anything previously defined."
+msgstr ""
+"В системах FreeBSD обе переменные `CC` и `CXX` могут быть определены в файле "
+"[.filename]#/etc/make.conf#. В первом примере задаётся значение, если оно "
+"ранее не было определено в [.filename]#/etc/make.conf#, что сохраняет любые "
+"определения, данные на уровне системы в целом. Второй пример переопределяет "
+"всё, что было задано ранее."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:225
+#, no-wrap
+msgid "Respect `CFLAGS`"
+msgstr "Относитесь внимательно к `CFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:231
+msgid ""
+"The port must respect `CFLAGS`. What we mean by this is that the port must "
+"not set the value of this variable absolutely, overriding the existing "
+"value. Instead, it may append whatever values it needs to the existing "
+"value. This is so that build options that affect all ports can be set "
+"globally."
+msgstr ""
+"Порт должен учитывать переменную `CFLAGS`. Под этим мы подразумеваем, что "
+"порт ни в коем случае не должен устанавливать значения этой переменной, "
+"переопределяя имеющиеся значения; вместо этого можно добавлять нужные "
+"значения к уже имеющимся. Это связано с тем, что параметры построения, "
+"относящиеся ко всем портам, могут быть заданы глобально."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:233
+msgid ""
+"If it does not, please add `NO_PACKAGE=ignores cflags` to the "
+"[.filename]#Makefile#."
+msgstr ""
+"Если порт не учитывает значения этой переменной, добавьте строку "
+"`NO_PACKAGE=ignores cflags` в файл [.filename]#Makefile#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:235
+msgid ""
+"Here is an example of a [.filename]#Makefile# respecting `CFLAGS`. Note the "
+"`+=`:"
+msgstr ""
+"Далее следует пример файла [.filename]#Makefile#, использующего переменную "
+"`CFLAGS`. Обратите внимание на использование символов `+=`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:239
+#, no-wrap
+msgid "CFLAGS+= -Wall -Werror\n"
+msgstr "CFLAGS+= -Wall -Werror\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:242
+msgid "Here is an example which does not respect `CFLAGS`:"
+msgstr "А вот пример, в котором не учитывается значение переменной `CFLAGS`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:246
+#, no-wrap
+msgid "CFLAGS= -Wall -Werror\n"
+msgstr "CFLAGS= -Wall -Werror\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:251
+msgid ""
+"`CFLAGS` is defined on FreeBSD systems in [.filename]#/etc/make.conf#. The "
+"first example appends additional flags to `CFLAGS`, preserving any system-"
+"wide definitions. The second example clobbers anything previously defined."
+msgstr ""
+"В системе FreeBSD переменная `CFLAGS` определена в файле [.filename]#/etc/"
+"make.conf#. В первом примере к переменной `CFLAGS` добавляются "
+"дополнительные флаги, при этом сохраняются все определения, данные ранее на "
+"уровне системы. Во втором примере всё, что было задано ранее, игнорируется."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:255
+msgid ""
+"Remove optimization flags from the third party [.filename]##Makefile##s. "
+"The system `CFLAGS` contains system-wide optimization flags. An example "
+"from an unmodified [.filename]#Makefile#:"
+msgstr ""
+"Из сторонних файлов [.filename]#Makefile# следует удалить флаги оптимизации. "
+"Общесистемные флаги оптимизации находятся в системной переменной `CFLAGS`. "
+"Пример из немодифицированного [.filename]#Makefile#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:259
+#, no-wrap
+msgid "CFLAGS= -O3 -funroll-loops -DHAVE_SOUND\n"
+msgstr "CFLAGS= -O3 -funroll-loops -DHAVE_SOUND\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:262
+msgid ""
+"Using system optimization flags, the [.filename]#Makefile# would look "
+"similar to this example:"
+msgstr ""
+"При использовании системных флагов оптимизации [.filename]#Makefile# станет "
+"похожим на следующий пример:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:266
+#, no-wrap
+msgid "CFLAGS+= -DHAVE_SOUND\n"
+msgstr "CFLAGS+= -DHAVE_SOUND\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:269
+#, no-wrap
+msgid "Verbose Build Logs"
+msgstr "Подробные логи сборки"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:273
+msgid ""
+"Make the port build system display all commands executed during the build "
+"stage. Complete build logs are crucial to debugging port problems."
+msgstr ""
+"Заставьте систему сборки портов отображать все команды, выполняемые на этапе "
+"сборки. Полные логи сборки критически важны для отладки проблем с портами."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:275
+msgid "Non-informative build log example (bad):"
+msgstr "Пример неинформативного лога сборки (плохой):"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:281
+#, no-wrap
+msgid ""
+" CC source1.o\n"
+" CC source2.o\n"
+" CCLD someprogram\n"
+msgstr ""
+" CC source1.o\n"
+" CC source2.o\n"
+" CCLD someprogram\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:284
+msgid "Verbose build log example (good):"
+msgstr "Пример подробного журнала сборки (хороший):"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:290
+#, no-wrap
+msgid ""
+"cc -O2 -pipe -I/usr/local/include -c -o source1.o source1.c\n"
+"cc -O2 -pipe -I/usr/local/include -c -o source2.o source2.c\n"
+"cc -o someprogram source1.o source2.o -L/usr/local/lib -lsomelib\n"
+msgstr ""
+"cc -O2 -pipe -I/usr/local/include -c -o source1.o source1.c\n"
+"cc -O2 -pipe -I/usr/local/include -c -o source2.o source2.c\n"
+"cc -o someprogram source1.o source2.o -L/usr/local/lib -lsomelib\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:294
+msgid ""
+"Some build systems such as CMake, ninja, and GNU configure are set up for "
+"verbose logging by the ports framework. In other cases, ports might need "
+"individual tweaks."
+msgstr ""
+"Некоторые системы сборки, такие как CMake, ninja и GNU configure, настроены "
+"на подробное ведение журнала в рамках инфраструктуры портов. В других "
+"случаях портам могут потребоваться индивидуальные изменения."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:296
+#, no-wrap
+msgid "Feedback"
+msgstr "Обратная связь"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:300
+msgid ""
+"Do send applicable changes and patches to the upstream maintainer for "
+"inclusion in the next release of the code. This makes updating to the next "
+"release that much easier."
+msgstr ""
+"Посылайте подходящие изменения/патчи автору/сопровождающему для включения в "
+"следующий релиз. Это только сделает вашу работу гораздо легче при выходе "
+"следующего релиза."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:302
+#, no-wrap
+msgid "README.html"
+msgstr "README.html"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:306
+msgid ""
+"[.filename]#README.html# is not part of the port, but generated by `make "
+"readme`. Do not include this file in patches or commits."
+msgstr ""
+"[.filename]#README.html# не является частью порта и генерируется при помощи "
+"`make readme`. Не включайте этот файл в патчи или коммиты."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:310
+msgid ""
+"If `make readme` fails, make sure that the default value of `ECHO_MSG` has "
+"not been modified by the port."
+msgstr ""
+"Если не удается выполнить `make readme`, убедитесь, что значение по "
+"умолчанию `ECHO_MSG` не изменено внутри порта."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:313
+#, no-wrap
+msgid "Marking a Port Not Installable with `BROKEN`, `FORBIDDEN`, or `IGNORE`"
+msgstr "Пометка неустанавливаемого порта как `BROKEN`, `FORBIDDEN` или `IGNORE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:320
+msgid ""
+"In certain cases, users must be prevented from installing a port. There are "
+"several variables that can be used in a port's [.filename]#Makefile# to tell "
+"the user that the port cannot be installed. The value of these make "
+"variables will be the reason that is shown to users for why the port refuses "
+"to install itself. Please use the correct make variable. Each variable "
+"conveys radically different meanings, both to users and to automated systems "
+"that depend on [.filename]##Makefile##s, such as crossref:keeping-up[build-"
+"cluster,the ports build cluster], and crossref:keeping-"
+"up[freshports,FreshPorts]."
+msgstr ""
+"В некоторых случаях пользователи не должны допускаться к установке порта. "
+"Для того, чтобы сообщить пользователю, что порт не следует устанавливать, "
+"имеется несколько `make`-переменных, которые могут быть использованы в файле "
+"[.filename]#Makefile# порта. Значения следующих `make`-переменных будут "
+"причиной, возвращаемой пользователям, по которой порт отказывает в "
+"установке. Пожалуйста, используйте корректные `make`-переменные, так как "
+"каждая переменная make передает абсолютно различный смысл как для "
+"пользователей, так и для автоматизированных систем, которые полагаются на "
+"файлы [.filename]#Makefile#, таких как crossref:keeping-up[build-"
+"cluster,кластер построения портов], crossref:keeping-"
+"up[freshports,FreshPorts]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:322
+#, no-wrap
+msgid "Variables"
+msgstr "Переменные"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:325
+msgid ""
+"`BROKEN` is reserved for ports that currently do not compile, install, "
+"deinstall, or run correctly. Use it for ports where the problem is believed "
+"to be temporary."
+msgstr ""
+"`BROKEN` предназначена для портов, которые в настоящее время не "
+"компилируются, не устанавливаются или не удаляются правильно. Следует "
+"использовать, когда проблема считается временной."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:328
+msgid ""
+"If instructed, the build cluster will still attempt to try to build them to "
+"see if the underlying problem has been resolved. (However, in general, the "
+"cluster is run without this.)"
+msgstr ""
+"В особых случаях кластер построения будет продолжать попытки собрать их, "
+"чтобы показать, решена ли основная проблема. (Однако, как правило, кластер "
+"запускается без этой возможности.)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:330
+msgid "For instance, use `BROKEN` when a port:"
+msgstr "В частности, используйте `BROKEN`, когда порт:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:332
+msgid "does not compile"
+msgstr "не компилируется"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:333
+msgid "fails its configuration or installation process"
+msgstr "выполняет со сбоем конфигурирование или процесс установки"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:334
+msgid "installs files outside of [.filename]#${PREFIX}#"
+msgstr "устанавливает файлы вовне [.filename]#${PREFIX}#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:335
+msgid ""
+"does not remove all its files cleanly upon deinstall (however, it may be "
+"acceptable, and desirable, for the port to leave user-modified files behind)"
+msgstr ""
+"не удаляет полностью все свои файлы при деинсталляции (тем не менее, это "
+"может быть допустимо, и подходит для портов, оставляющих после себя файлы, "
+"измененные пользователем)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:336
+msgid "has runtime issues on systems where it is supposed to run fine."
+msgstr ""
+"имеет проблемы во время выполнения на системах, где он должен работать "
+"нормально."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:338
+msgid ""
+"`FORBIDDEN` is used for ports that contain a security vulnerability or "
+"induce grave concern regarding the security of a FreeBSD system with a given "
+"port installed (for example, a reputably insecure program or a program that "
+"provides easily exploitable services). Mark ports as `FORBIDDEN` as soon as "
+"a particular piece of software has a vulnerability and there is no released "
+"upgrade. Ideally upgrade ports as soon as possible when a security "
+"vulnerability is discovered so as to reduce the number of vulnerable FreeBSD "
+"hosts (we like being known for being secure), however sometimes there is a "
+"noticeable time gap between disclosure of a vulnerability and an updated "
+"release of the vulnerable software. Do not mark a port `FORBIDDEN` for any "
+"reason other than security."
+msgstr ""
+"`FORBIDDEN` используется для портов, которые содержат уязвимости в "
+"информационной безопасности или являются потенциально вредными в плане "
+"обеспечения информационной безопасности системы FreeBSD при установке "
+"данного порта (например: заведомо небезопасная программа или программа, "
+"которая предоставляет легко взламываемые сервисы). Порты должны помечаться "
+"как `FORBIDDEN`, как только в конкретном программном обеспечении "
+"обнаружилась уязвимость, но обновление выпущено не было. В идеальном случае "
+"порты должны обновляться максимально быстро после обнаружения уязвимости, "
+"чтобы уменьшить число уязвимых хостов FreeBSD (нам нравится иметь репутацию "
+"безопасной системы), однако иногда случается значительный временной разрыв "
+"между обнаружением уязвимости и выходом обновлённого релиза уязвимого "
+"программного обеспечения. Не помечайте порт как `FORBIDDEN`, если причина не "
+"вызвана соображениями информационной безопасности."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:339
+msgid ""
+"`IGNORE` is reserved for ports that must not be built for some other reason. "
+"Use it for ports where the problem is believed to be structural. The build "
+"cluster will not, under any circumstances, build ports marked as `IGNORE`. "
+"For instance, use `IGNORE` when a port:"
+msgstr ""
+"`IGNORE` предназначена для портов, которые не должны строиться по какой-либо "
+"другой причине. Следует использовать для портов, в случае когда проблема "
+"считается структурной. Кластер построения ни при каких условиях не будет "
+"строить порты, помеченные как `IGNORE`. В частности, используйте `IGNORE`, "
+"когда порт:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:341
+msgid "does not work on the installed version of FreeBSD"
+msgstr "не работает на установленной версии FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:342
+msgid ""
+"has a distfile which may not be automatically fetched due to licensing "
+"restrictions"
+msgstr ""
+"имеет distfile, который не может быть автоматически загружен из-за "
+"ограничений лицензирования"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:343
+msgid ""
+"does not work with some other currently installed port (for instance, the "
+"port depends on package:www/drupal7[] but package:www/drupal8[] is installed)"
+msgstr ""
+"не работает с некоторыми другими установленными портами (например, порт "
+"зависит от package:www/drupal7[], но установлен package:www/drupal8[])"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:348
+msgid ""
+"If a port would conflict with a currently installed port (for example, if "
+"they install a file in the same place that performs a different function), "
+"crossref:makefiles[conflicts,use `CONFLICTS` instead]. `CONFLICTS` will set "
+"`IGNORE` by itself."
+msgstr ""
+"Если порт будет конфликтовать с уже установленным портом (например, если они "
+"устанавливают файл в то же место, но с иным функциональным назначением), то "
+"crossref:makefiles[conflicts,используйте вместо этого `CONFLICTS`]. "
+"`CONFLICTS` сам установит значение `IGNORE`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:351
+#, no-wrap
+msgid "Implementation Notes"
+msgstr "Заметки о реализации"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:355
+msgid ""
+"Do not quote the values of `BROKEN`, `IGNORE`, and related variables. Due "
+"to the way the information is shown to the user, the wording of messages for "
+"each variable differ:"
+msgstr ""
+"Не заключайте значения переменных `BROKEN`, `IGNORE` и связанных с ними в "
+"кавычки. Из-за способа отображения информации пользователю, формулировка "
+"сообщений для каждой переменной отличается:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:359
+#, no-wrap
+msgid "BROKEN=\tfails to link with base -lcrypto\n"
+msgstr "BROKEN=\tfails to link with base -lcrypto\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:364
+#, no-wrap
+msgid "IGNORE=\tunsupported on recent versions\n"
+msgstr "IGNORE=\tunsupported on recent versions\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:367
+msgid "resulting in this output from `make describe`:"
+msgstr "и в результате `make describe` выведен информацию в таком виде :"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:371
+#, no-wrap
+msgid "===> foobar-0.1 is marked as broken: fails to link with base -lcrypto.\n"
+msgstr "===> foobar-0.1 is marked as broken: fails to link with base -lcrypto.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:376
+#, no-wrap
+msgid "===> foobar-0.1 is unsupported on recent versions.\n"
+msgstr "===> foobar-0.1 is unsupported on recent versions.\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:379
+#, no-wrap
+msgid "Architectural Considerations"
+msgstr "Архитектурные соображения"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:382
+#, no-wrap
+msgid "General Notes on Architectures"
+msgstr "Общие замечания об архитектурах"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:386
+msgid ""
+"FreeBSD runs on many more processor architectures than just the well-known "
+"x86-based ones. Some ports have constraints which are particular to one or "
+"more of these architectures."
+msgstr ""
+"FreeBSD работает на гораздо большем количестве архитектур процессоров, чем "
+"только хорошо известные x86-совместимые. Некоторые порты имеют ограничения, "
+"характерные для одной или нескольких из этих архитектур."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:388
+msgid "For the list of supported architectures, run:"
+msgstr "Для списка поддерживаемых архитектур выполните:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:392
+#, no-wrap
+msgid "cd ${SRCDIR}; make targets\n"
+msgstr "cd ${SRCDIR}; make targets\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:397
+msgid ""
+"The values are shown in the form `TARGET`/`TARGET_ARCH`. The ports read-"
+"only makevar `ARCH` is set based on the value of `TARGET_ARCH`. Port "
+"[.filename]##Makefile##s should test the value of this Makevar."
+msgstr ""
+"Значения отображаются в форме `TARGET`/`TARGET_ARCH`. Переменная только для "
+"чтения `ARCH` в ports устанавливается на основе значения `TARGET_ARCH`. "
+"[.filename]##Makefile## в портах должны проверять значение этой переменной."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:399
+#, no-wrap
+msgid "Marking a Port as Architecture Neutral"
+msgstr "Пометка порта как архитектурно нейтрального"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:402
+msgid ""
+"Ports that do not have any architecture-dependent files or requirements are "
+"identified by setting `NO_ARCH=yes`."
+msgstr ""
+"Порты, которые не имеют зависимых от архитектуры файлов или требований, "
+"определяются установкой `NO_ARCH=yes`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:404
+msgid ""
+"Packages built from such ports have their architecture string ending in `:*` "
+"(wildcard architecture) as opposed to, for example, `freebsd:13:x86:64` "
+"(amd64 architecture)."
+msgstr ""
+"Пакеты, собранные из таких портов, имеют строку архитектуры, оканчивающуюся "
+"на `:*` (архитектура с подстановочным символом), в отличие от, например, "
+"`freebsd:13:x86:64` (архитектура amd64)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:410
+msgid ""
+"`NO_ARCH` is meant to indicate that there is no need to build a package for "
+"each of the supported architectures. The goal is to reduce the amount of "
+"resources spent on building and distributing the packages such as network "
+"bandwidth and disk space on mirrors and on distribution media. Currently, "
+"however, our package infrastructure (e.g., package managers, mirrors, and "
+"package builders) is not set up to fully benefit from `NO_ARCH`."
+msgstr ""
+"`NO_ARCH` предназначен для указания того, что нет необходимости собирать "
+"пакет для каждой из поддерживаемых архитектур. Цель состоит в том, чтобы "
+"сократить количество ресурсов, затрачиваемых на сборку и распространение "
+"пакетов, таких как сетевой трафик и дисковое пространство на зеркалах и на "
+"носителях дистрибутива. Однако в настоящее время наша инфраструктура пакетов "
+"(например, менеджеры пакетов, зеркала и сборщики пакетов) не настроена для "
+"полного использования преимуществ `NO_ARCH`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:413
+#, no-wrap
+msgid "Marking a Port as Ignored Only On Certain Architectures"
+msgstr "Пометка порта как игнорируемого только на определенных архитектурах"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:416
+msgid ""
+"To mark a port as ``IGNORE``d only on certain architectures, there are two "
+"other convenience variables that will automatically set `IGNORE`: "
+"`ONLY_FOR_ARCHS` and `NOT_FOR_ARCHS`. Examples:"
+msgstr ""
+"Чтобы пометить порт как ``IGNORE`` только для определенных архитектур, "
+"существуют две другие удобные переменные, которые автоматически "
+"устанавливают `IGNORE`: `ONLY_FOR_ARCHS` и `NOT_FOR_ARCHS`. Примеры:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:420
+#, no-wrap
+msgid "ONLY_FOR_ARCHS=\ti386 amd64\n"
+msgstr "ONLY_FOR_ARCHS=\ti386 amd64\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:425
+#, no-wrap
+msgid "NOT_FOR_ARCHS=\tia64 sparc64\n"
+msgstr "NOT_FOR_ARCHS=\tia64 sparc64\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:429
+msgid ""
+"A custom `IGNORE` message can be set using `ONLY_FOR_ARCHS_REASON` and "
+"`NOT_FOR_ARCHS_REASON`. Per architecture entries are possible with "
+"`ONLY_FOR_ARCHS_REASON_ARCH` and `NOT_FOR_ARCHS_REASON_ARCH`."
+msgstr ""
+"Пользовательское сообщение `IGNORE` можно задать с помощью "
+"`ONLY_FOR_ARCHS_REASON` и `NOT_FOR_ARCHS_REASON`. Для отдельных архитектур "
+"возможны записи с `ONLY_FOR_ARCHS_REASON_ARCH` и `NOT_FOR_ARCHS_REASON_ARCH`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:432
+msgid ""
+"If a port fetches i386 binaries and installs them, set `IA32_BINARY_PORT`. "
+"If this variable is set, [.filename]#/usr/lib32# must be present for IA32 "
+"versions of libraries and the kernel must support IA32 compatibility. If one "
+"of these two dependencies is not satisfied, `IGNORE` will be set "
+"automatically."
+msgstr ""
+"Если порт загружает и устанавливает бинарные файлы i386, установите "
+"`IA32_BINARY_PORT`. Если эта переменная задана, [.filename]#/usr/lib32# "
+"должен присутствовать для IA32-версий библиотек, а ядро должно поддерживать "
+"совместимость с IA32. Если одно из этих двух условий не выполняется, "
+"`IGNORE` будет установлен автоматически."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:434
+#, no-wrap
+msgid "Cluster-Specific Considerations"
+msgstr "Специфические аспекты для кластеров"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:437
+msgid ""
+"Some ports attempt to tune themselves to the exact machine they are being "
+"built on by specifying `-march=native` to the compiler. This should be "
+"avoided: either list it under an off-by-default option, or delete it "
+"entirely."
+msgstr ""
+"Некоторые порты пытаются оптимизировать себя под конкретную машину, на "
+"которой они собираются, указывая компилятору `-march=native`. Этого следует "
+"избегать: либо добавить этот параметр в опцию, отключенную по умолчанию, "
+"либо удалить его полностью."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:439
+msgid ""
+"Otherwise, the default package produced by the build cluster might not run "
+"on every single machine of that `ARCH`."
+msgstr ""
+"В противном случае стандартный пакет, созданный кластером сборки, может не "
+"запускаться на каждой машине с данной `ARCH`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:441
+#, no-wrap
+msgid "Marking a Port for Removal with `DEPRECATED` or `EXPIRATION_DATE`"
+msgstr "Пометка порта на удаление с `DEPRECATED` или `EXPIRATION_DATE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:445
+msgid ""
+"Do remember that `BROKEN` and `FORBIDDEN` are to be used as a temporary "
+"resort if a port is not working. Permanently broken ports will be removed "
+"from the tree entirely."
+msgstr ""
+"Помните, что `BROKEN` и `FORBIDDEN` будут использованы как временное "
+"средство, если порт не является работающим. Постоянно неработоспособные "
+"порты должны полностью удаляться из дерева."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:449
+msgid ""
+"When it makes sense to do so, users can be warned about a pending port "
+"removal with `DEPRECATED` and `EXPIRATION_DATE`. The former is a string "
+"stating why the port is scheduled for removal; the latter is a string in ISO "
+"8601 format (YYYY-MM-DD). Both will be shown to the user."
+msgstr ""
+"В подходящих ситуациях пользователи могут быть оповещены о предстоящем "
+"удалении через переменные `DEPRECATED` и `EXPIRATION_DATE`. Первое - это "
+"просто строка, сообщающая причину запланированного удаления порта; вторая "
+"является строкой в формате ISO 8601 (YYYY-MM-DD). Обе будут показаны "
+"пользователю."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:451
+msgid ""
+"It is possible to set `DEPRECATED` without an `EXPIRATION_DATE` (for "
+"instance, recommending a newer version of the port), but the converse does "
+"not make any sense."
+msgstr ""
+"Переменную `DEPRECATED` можно установить без использования `EXPIRATION_DATE` "
+"(в частности, при рекомендации новой версии порта), но обратный порядок не "
+"имеет никакого смысла."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:457
+msgid ""
+"When marking a port as `DEPRECATED`, if there are any alternative ports that "
+"can be used as a replacement for the one being deprecated, it is convenient "
+"to mention them in the commit message."
+msgstr ""
+"При пометке порта как `DEPRECATED`, если существуют альтернативные порты, "
+"которые можно использовать вместо устаревающего, удобно упомянуть их в "
+"сообщении коммита."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:462
+msgid ""
+"There is no set policy on how much notice to give. Current practice seems "
+"to be one month for security-related issues and two months for build "
+"issues. This also gives any interested committers a little time to fix the "
+"problems."
+msgstr ""
+"Не существует установленного правила о том, насколько заранее нужно "
+"уведомлять. Текущая практика предполагает один месяц для проблем, связанных "
+"с безопасностью, и два месяца для проблем сборки. Это также дает "
+"заинтересованным коммиттерам немного времени на исправление проблем."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:464
+#, no-wrap
+msgid "Avoid Use of the `.error` Construct"
+msgstr "Избегайте использования конструкции `.error`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:468
+msgid ""
+"The correct way for a [.filename]#Makefile# to signal that the port cannot "
+"be installed due to some external factor (for instance, the user has "
+"specified an illegal combination of build options) is to set a non-blank "
+"value to `IGNORE`. This value will be formatted and shown to the user by "
+"`make install`."
+msgstr ""
+"Правильным способом подать сигнал для [.filename]#Makefile# о том, что порт "
+"не может быть установлен из-за какого-то внешнего фактора (например, "
+"пользователь указал недопустимую комбинацию опций построения), является "
+"установка непустого значения для `IGNORE`. Это значение будет сформатировано "
+"и показано пользователю во время `make install`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:474
+msgid ""
+"It is a common mistake to use `.error` for this purpose. The problem with "
+"this is that many automated tools that work with the ports tree will fail in "
+"this situation. The most common occurrence of this is seen when trying to "
+"build [.filename]#/usr/ports/INDEX# (see crossref:testing[make-"
+"describe,Running `make describe`]). However, even more trivial commands "
+"such as `make maintainer` also fail in this scenario. This is not "
+"acceptable."
+msgstr ""
+"Использование для этих целей `.error` является распространенной ошибкой. "
+"Проблема в том, что в этой ситуации будут повреждены многие инструменты "
+"автоматизации, работающие с деревом портов. Наибольшим образом это "
+"распространено при попытке построить [.filename]#/usr/ports/INDEX# (смотрите "
+"crossref:testing[make-describe, Запуск `make describe`]). Тем не менее, даже "
+"более простые команды, такие как `make maintainer`, в этом случае также "
+"вернут ошибку. Это не является приемлемым."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:476
+#, no-wrap
+msgid "How to Avoid Using `.error`"
+msgstr "Как избегать использования `.error`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:481
+msgid ""
+"The first of the next two [.filename]#Makefile# snippets will cause `make "
+"index` to fail, while the second one will not:"
+msgstr ""
+"Из следующих двух вариантов строки файла [.filename]#Makefile# первый "
+"приведёт к неудачному завершению работы `make index`, а второй - нет:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:485
+#, no-wrap
+msgid ".error \"option is not supported\"\n"
+msgstr ".error \"option is not supported\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:490
+#, no-wrap
+msgid "IGNORE=option is not supported\n"
+msgstr "IGNORE=option is not supported\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:495
+#, no-wrap
+msgid "Usage of sysctl"
+msgstr "Использование sysctl"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:500
+msgid ""
+"The usage of [.filename]#sysctl# is discouraged except in targets. This is "
+"because the evaluation of any ``makevar``s, such as used during `make "
+"index`, then has to run the command, further slowing down that process."
+msgstr ""
+"Использование [.filename]#sysctl# не рекомендуется, кроме как при выполнении "
+"целей. Это вызвано тем, что вычисление любых `makevar`, таких как во время "
+"команды `make index`, с необходимостью запуска этой команды, еще больше "
+"замедляет весь процесс."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:502
+msgid ""
+"Only use man:sysctl[8] through `SYSCTL`, as it contains the fully qualified "
+"path and can be overridden, if one has such a special need."
+msgstr ""
+"man:sysctl[8] следует всегда использовать через переменную `SYSCTL`, "
+"поскольку она содержит полностью заданный путь, и при необходимости может "
+"быть переопределена."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:504
+#, no-wrap
+msgid "Rerolling Distfiles"
+msgstr "Меняющиеся дистрибутивные файлы"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:509
+msgid ""
+"Sometimes the authors of software change the content of released distfiles "
+"without changing the file's name. Verify that the changes are official and "
+"have been performed by the author. It has happened in the past that the "
+"distfile was silently altered on the download servers with the intent to "
+"cause harm or compromise end user security."
+msgstr ""
+"Иногда авторы программного обеспечения изменяют содержимое выпущенных "
+"дистрибутивных файлов, не меняя их названия. Убедитесь, что изменения "
+"официальны и были выполнены автором. В прошлом случалось, что дистрибутивный "
+"файл тихо изменялся на серверах загрузки с целью нанесения вреда или "
+"компрометации безопасности конечного пользователя."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:512
+msgid ""
+"Put the old distfile aside, download the new one, unpack them and compare "
+"the content with man:diff[1]. If there is nothing suspicious, update "
+"[.filename]#distinfo#."
+msgstr ""
+"Отложите старый distfile в сторону, загрузите новый, распакуйте их и "
+"сравните содержимое с помощью man:diff[1]. Если ничего подозрительного нет, "
+"обновите [.filename]#distinfo#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:516
+msgid ""
+"Be sure to summarize the differences in the PR and commit log, so that other "
+"people know that nothing bad has happened."
+msgstr ""
+"Убедитесь, что вы выделили основные различия в PR и журнале коммитов, чтобы "
+"другие люди знали, что ничего плохого не произошло."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:519
+msgid "Contact the authors of the software and confirm the changes with them."
+msgstr ""
+"Связжитесь с автором этого программного обеспечения для подтверждения "
+"изменений."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:521
+#, no-wrap
+msgid "Use POSIX Standards"
+msgstr "Используйте стандарты POSIX"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:525
+msgid ""
+"FreeBSD ports generally expect POSIX compliance. Some software and build "
+"systems make assumptions based on a particular operating system or "
+"environment that can cause problems when used in a port."
+msgstr ""
+"В большинстве случаев порты FreeBSD ожидают соответствия стандарту POSIX. "
+"Некоторые программы и системы сборки делают предположения, основанные на "
+"конкретной операционной системе или окружении, что может вызывать проблемы "
+"при использовании в порте."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:528
+msgid ""
+"Do not use [.filename]#/proc# if there are any other ways of getting the "
+"information. For example, `setprogname(argv[0])` in `main()` and then "
+"man:getprogname[3] to know the executable name."
+msgstr ""
+"Не используйте [.filename]#/proc#, если есть другие способы получить "
+"информацию. Например, `setprogname(argv[0])` в `main()`, а затем "
+"man:getprogname[3] для получения имени исполняемого файла."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:530
+msgid "Do not rely on behavior that is undocumented by POSIX."
+msgstr "Не полагайтесь на поведение, не документированное в POSIX."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:534
+msgid ""
+"Do not record timestamps in the critical path of the application if it also "
+"works without. Getting timestamps may be slow, depending on the accuracy of "
+"timestamps in the OS. If timestamps are really needed, determine how "
+"precise they have to be and use an API which is documented to just deliver "
+"the needed precision."
+msgstr ""
+"Не записывайте метки времени в критическом пути приложения, если оно "
+"работает и без них. Получение меток времени может быть медленным в "
+"зависимости от точности меток времени в ОС. Если метки времени действительно "
+"необходимы, определите, насколько точными они должны быть, и используйте "
+"API, которое, согласно документации, предоставляет только необходимую "
+"точность."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:538
+msgid ""
+"A number of simple syscalls (for example man:gettimeofday[2], man:getpid[2]) "
+"are much faster on Linux(R) than on any other operating system due to "
+"caching and the vsyscall performance optimizations. Do not rely on them "
+"being cheap in performance-critical applications. In general, try hard to "
+"avoid syscalls if possible."
+msgstr ""
+"Ряд простых системных вызовов (например, man:gettimeofday[2], man:getpid[2]) "
+"работают намного быстрее в Linux(R) по сравнению с любой другой операционной "
+"системой из-за кэширования и используемой оптимизации vsyscall. Не "
+"полагайтесь на их дешевизну в критичных к производительности приложениях. В "
+"целом, старайтесь избегать системных вызовов там, где это возможно."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:541
+msgid ""
+"Do not rely on Linux(R)-specific socket behavior. In particular, default "
+"socket buffer sizes are different (call man:setsockopt[2] with `SO_SNDBUF` "
+"and `SO_RCVBUF`, and while Linux(R)'s man:send[2] blocks when the socket "
+"buffer is full, FreeBSD's will fail and set `ENOBUFS` in errno."
+msgstr ""
+"Не полагайтесь на специфичное для Linux(R) поведение сокета. В частности, "
+"отличаются размеры буфера сокета по умолчанию (выполните вызов "
+"man:setsockopt[2] с `SO_SNDBUF` и `SO_RCVBUF`, и в то время как в Linux(R) "
+"при заполнении буфера сокета man:send[2] блокируется, FreeBSD возвращает "
+"ошибку и устанавливает `ENOBUFS` в качестве значения errno."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:543
+msgid ""
+"If relying on non-standard behavior is required, encapsulate it properly "
+"into a generic API, do a check for the behavior in the configure stage, and "
+"stop if it is missing."
+msgstr ""
+"Если требуется рассчитывать на нестандартное поведение, инкапсулируйте это "
+"должным образом в общий для всех API с проверкой поведения на этапе "
+"конфигурации, и если требуемое поведение не найдено, прекращайте выполнение."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:545
+msgid ""
+"Check the https://man.freebsd.org/cgi/man.cgi[man pages] to see if the "
+"function used is a POSIX interface (in the \"STANDARDS\" section of the man "
+"page)."
+msgstr ""
+"Используйте https://www.freebsd.org/cgi/man.cgi[страницы справочника] для "
+"проверки, относится ли функция к интерфейсу POSIX (ищите раздел "
+"\"STANDARDS\" на странице справочника)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:548
+msgid ""
+"Do not assume that [.filename]#/bin/sh# is bash. Ensure that a command line "
+"passed to man:system[3] will work with a POSIX compliant shell."
+msgstr ""
+"Не рассчитывайте на то, что в качестве [.filename]#/bin/sh# используется "
+"bash. Убедитесь, что командная строка, переданная в man:system[3], будет "
+"работать в POSIX-совместимой оболочке."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:550
+msgid ""
+"A list of common bashisms is available https://wiki.ubuntu.com/"
+"DashAsBinSh[here]."
+msgstr ""
+"Список основных bash-измов расположен https://wiki.ubuntu.com/"
+"DashAsBinSh[здесь]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:553
+msgid ""
+"Check that headers are included in the POSIX or man page recommended way. "
+"For example, [.filename]#sys/types.h# is often forgotten, which is not as "
+"much of a problem for Linux(R) as it is for FreeBSD."
+msgstr ""
+"Проверьте, что используемые заголовочные файлы включены в POSIX или список, "
+"рекомендуемый страницей справочника, т.к. например, забыть подключить "
+"[.filename]#sys/types.h# - не такая уж проблема в Linux(R), однако это не "
+"так во FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:555
+#, no-wrap
+msgid "Miscellanea"
+msgstr "Разное"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:559
+msgid ""
+"Always double-check [.filename]#pkg-descr# and [.filename]#pkg-plist#. If "
+"reviewing a port and a better wording can be achieved, do so."
+msgstr ""
+"Файлы [.filename]#pkg-descr# и [.filename]#pkg-plist# должны проверяться "
+"дважды. Если вы пересматриваете порт и думаете, что его можно описать иначе, "
+"сделайте это."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:560
+msgid ""
+"Please be careful to note any legal issues! Do not let us illegally "
+"distribute software!"
+msgstr ""
+"Будьте внимательны с юридическими вопросами! Не делайте из нас нелегальных "
+"распространителей ПО!"
diff --git a/documentation/content/ru/books/porters-handbook/porting-samplem/_index.adoc b/documentation/content/ru/books/porters-handbook/porting-samplem/_index.adoc
index c5c89e657d..d4dd67a440 100644
--- a/documentation/content/ru/books/porters-handbook/porting-samplem/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/porting-samplem/_index.adoc
@@ -1,22 +1,24 @@
---
-title: Глава 13. Примерный Makefile
+description: 'Образец Makefile, который можно использовать для создания нового порта FreeBSD'
+next: books/porters-handbook/order
+params:
+ path: /books/porters-handbook/porting-samplem/
prev: books/porters-handbook/porting-dads
-next: books/porters-handbook/keeping-up
showBookMenu: true
-weight: 13
-params:
- path: "/books/porters-handbook/porting-samplem/"
+tags: ["sample", "makefile"]
+title: 'Глава 14. Примерный Makefile'
+weight: 14
---
[[porting-samplem]]
-= Примерный [.filename]#Makefile#
+= Примерный Makefile
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 13
+:sectnumoffset: 14
:partnums:
:source-highlighter: rouge
:experimental:
@@ -46,86 +48,55 @@ toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
-Вот примерный [.filename]#Makefile#, который можно использовать при создании нового порта. Обязательно удалите все дополнительные комментарии (те, которые в скобках)!
+Образец Makefile, который можно использовать для создания нового порта.
-Вам рекомендуется следовать этому формату (соблюдая порядок следования переменных, пустые строки между разделами, и так далее). Этот формат разработан для того, чтобы важная информация была легко найдена. Мы рекомендуем вам воспользоваться утилитой <<porting-portlint,portlint>> для проверки файла [.filename]#Makefile#.
+Вам рекомендуется следовать этому формату (соблюдая crossref:order[,порядок] следования переменных, пустые строки между разделами, и так далее). Этот формат разработан для того, чтобы важная информация была легко найдена. Обратитесь crossref:testing[, главе о тестировании], чтобы узнать больше о lint, утилитах для форматирования и проверки файла [.filename]#Makefile#.
[.programlisting]
....
-[заголовок...просто чтобы нам было легче идентифицировать порт.]
-# Created by: Satoshi Asami <asami@FreeBSD.org>
-[Необязательная строка Created by: содержит имя
-человека, создавшего первоначальную версию порта. Следует отметить,
-что за : следует пробел, но не символ табуляции. Если
-эта строка присутствует, будущие сопровождающие не должны её менять
-или удалять, кроме как по запросу первоначального автора.]
-
-# $FreeBSD$
-[ ^^^^^^^^^ Эта строка будет автоматически заменена на строчку RCS ID
-системой SVN при выполнении операции коммита в наше хранилище. При
-обновлении порта не приводите эту строку обратно к виду
-"$FreeBSD$". SVN сделает это автоматически.]
-
-[секция описания собственно порта и основного сервера - сначала всегда
- PORTNAME и PORTVERSION, за ним следует CATEGORIES, а затем
- MASTER_SITES, за которым может идти MASTER_SITE_SUBDIR.
- PKGNAMEPREFIX и PKGNAMESUFFIX, если они нужны, следуют за ними.
- Затем следует DISTNAME, EXTRACT_SUFX и/или DISTFILES, а потом, если это нужно,
- EXTRACT_ONLY.]
-PORTNAME= xdvi
-PORTVERSION= 18.2
+PORTNAME= xdvi <1>
+DISTVERSION= 18.2
CATEGORIES= print
-[не забывайте про завершающую косую черту ("/")!
- если вы не используете макросы MASTER_SITE_*]
-MASTER_SITES= ${MASTER_SITE_XCONTRIB}
-MASTER_SITE_SUBDIR= applications
+MASTER_SITES= ${MASTER_SITE_XCONTRIB} <2>
+MASTER_SITE_SUBDIR= applications
PKGNAMEPREFIX= ja-
DISTNAME= xdvi-pl18
-[задайте это, если исходный код поставляется не в виде
- стандартного файла ".tar.gz"]
-EXTRACT_SUFX= .tar.Z
+EXTRACT_SUFX= .tar.Z <3>
-[секция патчей -- может быть пустой]
-PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/
+PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/ <4>
PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz
+PATCH_DIST_STRIP= -p1 <5>
-[сопровождающий; *обязательное поле*! Это человек, который добровольно
- занимается обновлениями порта и неисправностями при построении, и которому
- пользователь может направлять вопросы и сообщения об ошибках. Для
- сохранения как можно более высокого качества Коллекции Портов мы больше
- не принимаем новые порты, назначенные на "ports@FreeBSD.org".]
-MAINTAINER= asami@FreeBSD.org
+MAINTAINER= asami@FreeBSD.org <6>
COMMENT= DVI Previewer for the X Window System
+WWW= http://xdvi.sourceforge.net/
+
+LICENSE= BSD2CLAUSE <7>
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+RUN_DEPENDS= gs:print/ghostscript <8>
+
+USES= gmake <9>
-[зависимости -- могут быть пустыми]
-RUN_DEPENDS= gs:${PORTSDIR}/print/ghostscript
-
-[этот раздел для остальных стандартных переменных из bsd.port.mk, кроме
- тех, что перечислены выше]
-[Если порт задает вопросы во время этапов настройки, построения,
- установки...]
-IS_INTERACTIVE= yes
-[Если распаковка происходит в каталог, отличных от ${DISTNAME}...]
-WRKSRC= ${WRKDIR}/xdvi-new
-[Если патчи делались не относительно ${WRKSRC}, вам, может быть, не
- придется изменять эту переменную]
-PATCH_DIST_STRIP= -p1
-[Если порт требует скрипта "configure", генерируемого GNU-версией программы
- autoconf]
-GNU_CONFIGURE= yes
-[Если для построения порту требуется GNU-версия утилиты make, а не
- /usr/bin/make...]
-USES= gmake
-[Если это приложение X и требует запуска "xmkmf -a"...]
-USES= imake
-[и так далее]
-
-[В правилах ниже используются нестандартные переменные]
+<10>
+IS_INTERACTIVE= yes <11>
+WRKSRC= ${WRKDIR}/xdvi-new <12>
+GNU_CONFIGURE= yes <13>
+
+<14>
+OPTIONS_DEFINE= DOCS EXAMPLES FOO
+OPTIONS_DEFAULT=FOO
+OPTIONS_SUB= yes <15>
+
+FOO_DESC= Enable foo support
+FOO_CONFIGURE_ENABLE= foo
+
+<16>
MY_FAVORITE_RESPONSE= "yeah, right"
-[теперь специальные правила, в порядке их вызова]
+<17>
pre-fetch:
- я что-то выкачиваю, точно
+ i go fetch something, yeah
post-patch:
мне кое-что сделать после применения патча, великолепно
@@ -133,7 +104,24 @@ post-patch:
pre-install:
и потом еще кое-что перед установкой, ого
-[и, наконец, эпилог]
-
-.include <bsd.port.mk>
+.include <bsd.port.mk> <18>
....
+
+<1> Секция для описания самого порта и его главного сайта: первыми идут переменные PORTNAME и PORTVERSION или DISTVERSION*, на ними CATEGORIES, затем MASTER_SITES, после которой идет MASTER_SITE_SUBDIR. Если нужно, то после нее идут PKGNAMEPREFIX и PKGNAMESUFFIX. Затем следуют DISTNAME, EXTRACT_SUFX и/или DISTFILES, и уже потом, если нужно, EXTRACT_ONLY.
+<2> Не забывайте про завершающую косую черту (`/`), если вы не используете макросы MASTER_SITE_*.
+<3> Задайте это, если исходный код поставляется не в виде стандартного файла ".tar.gz".
+<4> Секция патчей — может быть пустой.
+<5> Если распространяемые патчи не были созданы относительно ${WRKSRC},возможно, это потребуется исправить вручную.
+<6> Сопровождающий; *обязательное поле*! Это человек, который добровольно занимается обновлениями порта и неисправностями при построении, и которому пользователь может направлять вопросы и сообщения об ошибках. Для сохранения как можно более высокого качества Коллекции Портов мы больше не принимаем новые порты, назначенные на "ports@FreeBSD.org".
+<7> Лицензия — не следует оставлять пустым.
+<8> Зависимости — могут быть пустыми.
+<9> Если порт требует GNU make вместо стандартного FreeBSD `make` (man:make[1]) для сборки. Например, некоторым приложениям X требуется выполнение `xmkmf -a`, в этом случае порту понадобится `USES=imake`.
+<10> Этот раздел посвящён другим стандартным переменным [.filename]#bsd.port.mk#, которые не относятся ни к одной из вышеперечисленных категорий.
+<11> Если порты задают интерактивные вопросы во время настройки, сборки, установки.
+<12> Если извлечение происходит в каталог, отличный от `DISTNAME`.
+<13> Если требуется запустить скрипт `configure`, сгенерированный GNU autoconf.
+<14> Этот раздел предназначен для настройки параметров портов.
+<15> Установите `OPTIONS_SUB`, если параметры изменят список файлов в crossref:plist[plist-sub, plist].
+<16> В правилах ниже используются нестандартные переменные.
+<17> Специальные правила, в порядке их вызова фреймворком портов.
+<18> Наконец, эпилог.
diff --git a/documentation/content/ru/books/porters-handbook/porting-samplem/_index.po b/documentation/content/ru/books/porters-handbook/porting-samplem/_index.po
new file mode 100644
index 0000000000..9f10c99918
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/porting-samplem/_index.po
@@ -0,0 +1,412 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-08-20 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookporting-samplem_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:1
+#, no-wrap
+msgid "A sample Makefile that can be used to create a new FreeBSD Port"
+msgstr "Образец Makefile, который можно использовать для создания нового порта FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:1
+#, no-wrap
+msgid "Chapter 14. A Sample Makefile"
+msgstr "Глава 14. Примерный Makefile"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:14
+#, no-wrap
+msgid "A Sample Makefile"
+msgstr "Примерный Makefile"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:52
+msgid ""
+"Here is a sample [.filename]#Makefile# that can be used to create a new port."
+msgstr ""
+"Образец Makefile, который можно использовать для создания нового порта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:56
+msgid ""
+"The format shown is the recommended one for crossref:order[, ordering] "
+"variables, empty lines between sections, and so on. This format is designed "
+"so that the most important information is easy to locate. Refer to "
+"crossref:testing[, the chapter about testing] to learn more about tools for "
+"linting, formatting, and checking the [.filename]#Makefile#."
+msgstr ""
+"Вам рекомендуется следовать этому формату (соблюдая crossref:order[,порядок] "
+"следования переменных, пустые строки между разделами, и так далее). Этот "
+"формат разработан для того, чтобы важная информация была легко найдена. "
+"Обратитесь crossref:testing[, главе о тестировании], чтобы узнать больше о "
+"lint, утилитах для форматирования и проверки файла [.filename]#Makefile#."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:67
+#, no-wrap
+msgid ""
+"PORTNAME=\txdvi <1>\n"
+"DISTVERSION=\t18.2\n"
+"CATEGORIES=\tprint\n"
+"MASTER_SITES=\t${MASTER_SITE_XCONTRIB} <2>\n"
+"MASTER_SITE_SUBDIR=\tapplications\n"
+"PKGNAMEPREFIX=\tja-\n"
+"DISTNAME=\txdvi-pl18\n"
+"EXTRACT_SUFX=\t.tar.Z <3>\n"
+msgstr ""
+"PORTNAME=\txdvi <1>\n"
+"DISTVERSION=\t18.2\n"
+"CATEGORIES=\tprint\n"
+"MASTER_SITES=\t${MASTER_SITE_XCONTRIB} <2>\n"
+"MASTER_SITE_SUBDIR=\tapplications\n"
+"PKGNAMEPREFIX=\tja-\n"
+"DISTNAME=\txdvi-pl18\n"
+"EXTRACT_SUFX=\t.tar.Z <3>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:71
+#, no-wrap
+msgid ""
+"PATCH_SITES=\tftp://ftp.sra.co.jp/pub/X11/japanese/ <4>\n"
+"PATCHFILES=\txdvi-18.patch1.gz xdvi-18.patch2.gz\n"
+"PATCH_DIST_STRIP=\t-p1 <5>\n"
+msgstr ""
+"PATCH_SITES=\tftp://ftp.sra.co.jp/pub/X11/japanese/ <4>\n"
+"PATCHFILES=\txdvi-18.patch1.gz xdvi-18.patch2.gz\n"
+"PATCH_DIST_STRIP=\t-p1 <5>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:75
+#, no-wrap
+msgid ""
+"MAINTAINER=\tasami@FreeBSD.org <6>\n"
+"COMMENT=\tDVI Previewer for the X Window System\n"
+"WWW=\t\thttp://xdvi.sourceforge.net/\n"
+msgstr ""
+"MAINTAINER=\tasami@FreeBSD.org <6>\n"
+"COMMENT=\tDVI Previewer for the X Window System\n"
+"WWW=\t\thttp://xdvi.sourceforge.net/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:78
+#, no-wrap
+msgid ""
+"LICENSE=\tBSD2CLAUSE <7>\n"
+"LICENSE_FILE=\t${WRKSRC}/LICENSE\n"
+msgstr ""
+"LICENSE=\tBSD2CLAUSE <7>\n"
+"LICENSE_FILE=\t${WRKSRC}/LICENSE\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:80
+#, no-wrap
+msgid "RUN_DEPENDS=\tgs:print/ghostscript <8>\n"
+msgstr "RUN_DEPENDS=\tgs:print/ghostscript <8>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:82
+#, no-wrap
+msgid "USES=\t\tgmake <9>\n"
+msgstr "USES=\t\tgmake <9>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:87
+#, no-wrap
+msgid ""
+"<10>\n"
+"IS_INTERACTIVE=\tyes <11>\n"
+"WRKSRC=\t\t${WRKDIR}/xdvi-new <12>\n"
+"GNU_CONFIGURE=\tyes <13>\n"
+msgstr ""
+"<10>\n"
+"IS_INTERACTIVE=\tyes <11>\n"
+"WRKSRC=\t\t${WRKDIR}/xdvi-new <12>\n"
+"GNU_CONFIGURE=\tyes <13>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:92
+#, no-wrap
+msgid ""
+"<14>\n"
+"OPTIONS_DEFINE=\tDOCS EXAMPLES FOO\n"
+"OPTIONS_DEFAULT=FOO\n"
+"OPTIONS_SUB=\tyes <15>\n"
+msgstr ""
+"<14>\n"
+"OPTIONS_DEFINE=\tDOCS EXAMPLES FOO\n"
+"OPTIONS_DEFAULT=FOO\n"
+"OPTIONS_SUB=\tyes <15>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:95
+#, no-wrap
+msgid ""
+"FOO_DESC=\t\tEnable foo support\n"
+"FOO_CONFIGURE_ENABLE=\tfoo\n"
+msgstr ""
+"FOO_DESC=\t\tEnable foo support\n"
+"FOO_CONFIGURE_ENABLE=\tfoo\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:98
+#, no-wrap
+msgid ""
+"<16>\n"
+"MY_FAVORITE_RESPONSE=\t\"yeah, right\"\n"
+msgstr ""
+"<16>\n"
+"MY_FAVORITE_RESPONSE=\t\"yeah, right\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:102
+#, no-wrap
+msgid ""
+"<17>\n"
+"pre-fetch:\n"
+"\ti go fetch something, yeah\n"
+msgstr ""
+"<17>\n"
+"pre-fetch:\n"
+"\ti go fetch something, yeah\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:105
+#, no-wrap
+msgid ""
+"post-patch:\n"
+"\ti need to do something after patch, great\n"
+msgstr ""
+"post-patch:\n"
+"\tмне кое-что сделать после применения патча, великолепно\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:108
+#, no-wrap
+msgid ""
+"pre-install:\n"
+"\tand then some more stuff before installing, wow\n"
+msgstr ""
+"pre-install:\n"
+"\tи потом еще кое-что перед установкой, ого\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:110
+#, no-wrap
+msgid ".include <bsd.port.mk> <18>\n"
+msgstr ".include <bsd.port.mk> <18>\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:115
+msgid ""
+"Section to describe the port itself and the master site -- `PORTNAME` and "
+"`PORTVERSION` or the `DISTVERSION*` variables are always first, followed by "
+"`CATEGORIES`, and then `MASTER_SITES`, which can be followed by "
+"`MASTER_SITE_SUBDIR`. `PKGNAMEPREFIX` and `PKGNAMESUFFIX`, if needed, will "
+"be after that. Then comes `DISTNAME`, `EXTRACT_SUFX` and/or `DISTFILES`, "
+"and then `EXTRACT_ONLY`, as necessary."
+msgstr ""
+"Секция для описания самого порта и его главного сайта: первыми идут "
+"переменные PORTNAME и PORTVERSION или DISTVERSION*, на ними CATEGORIES, "
+"затем MASTER_SITES, после которой идет MASTER_SITE_SUBDIR. Если нужно, то "
+"после нее идут PKGNAMEPREFIX и PKGNAMESUFFIX. Затем следуют DISTNAME, "
+"EXTRACT_SUFX и/или DISTFILES, и уже потом, если нужно, EXTRACT_ONLY."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:116
+msgid ""
+"Do not forget the trailing slash (`/`) if not using `MASTER_SITE_*` macros."
+msgstr ""
+"Не забывайте про завершающую косую черту (`/`), если вы не используете "
+"макросы MASTER_SITE_*."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:117
+msgid "Set this if the source is not in the standard \".tar.gz\" form."
+msgstr ""
+"Задайте это, если исходный код поставляется не в виде стандартного файла "
+"\".tar.gz\"."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:118
+msgid "Section for distributed patches -- can be empty."
+msgstr "Секция патчей — может быть пустой."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:119
+msgid ""
+"If the distributed patches were not made relative to `WRKSRC`, this may need "
+"to be tweaked."
+msgstr ""
+"Если распространяемые патчи не были созданы относительно ${WRKSRC},возможно, "
+"это потребуется исправить вручную."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:122
+msgid ""
+"Maintainer; *mandatory*! This is the person who is volunteering to handle "
+"port updates, build breakages, and to whom a users can direct questions and "
+"bug reports. To keep the quality of the Ports Collection as high as "
+"possible, we do not accept new ports that are assigned to "
+"\"ports@FreeBSD.org\"."
+msgstr ""
+"Сопровождающий; *обязательное поле*! Это человек, который добровольно "
+"занимается обновлениями порта и неисправностями при построении, и которому "
+"пользователь может направлять вопросы и сообщения об ошибках. Для сохранения "
+"как можно более высокого качества Коллекции Портов мы больше не принимаем "
+"новые порты, назначенные на \"ports@FreeBSD.org\"."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:123
+msgid "License -- should not be empty."
+msgstr "Лицензия — не следует оставлять пустым."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:124
+msgid "Dependencies -- can be empty."
+msgstr "Зависимости — могут быть пустыми."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:126
+msgid ""
+"If the port requires GNU make instead of the default FreeBSD `make` "
+"(man:make[1]) to build. For example, some X applications require `xmkmf -a` "
+"to run, in which case the port would need `USES=imake`."
+msgstr ""
+"Если порт требует GNU make вместо стандартного FreeBSD `make` (man:make[1]) "
+"для сборки. Например, некоторым приложениям X требуется выполнение `xmkmf "
+"-a`, в этом случае порту понадобится `USES=imake`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:127
+msgid ""
+"This section is for other standard [.filename]#bsd.port.mk# variables that "
+"do not belong to any of the above."
+msgstr ""
+"Этот раздел посвящён другим стандартным переменным [.filename]#bsd.port.mk#, "
+"которые не относятся ни к одной из вышеперечисленных категорий."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:128
+msgid ""
+"If the ports asks interactive questions during configure, build, install."
+msgstr ""
+"Если порты задают интерактивные вопросы во время настройки, сборки, "
+"установки."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:129
+msgid "If it extracts to a directory other than `DISTNAME`."
+msgstr "Если извлечение происходит в каталог, отличный от `DISTNAME`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:130
+msgid ""
+"If it requires a `configure` script generated by GNU autoconf to be run."
+msgstr ""
+"Если требуется запустить скрипт `configure`, сгенерированный GNU autoconf."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:131
+msgid "This section is for handling ports options."
+msgstr "Этот раздел предназначен для настройки параметров портов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:132
+msgid ""
+"Set `OPTIONS_SUB` if options will change the list of files in the "
+"crossref:plist[plist-sub, plist]."
+msgstr ""
+"Установите `OPTIONS_SUB`, если параметры изменят список файлов в "
+"crossref:plist[plist-sub, plist]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:133
+msgid "Non-standard variables to be used in the rules below."
+msgstr "В правилах ниже используются нестандартные переменные."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:134
+msgid "Special rules, in the order they are called by the ports framework."
+msgstr "Специальные правила, в порядке их вызова фреймворком портов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:134
+msgid "Finally, the epilogue."
+msgstr "Наконец, эпилог."
+
+#~ msgid ""
+#~ "Here is a sample [.filename]#Makefile# that can be used to create a new "
+#~ "port. Make sure to remove all the extra comments (ones between brackets)."
+#~ msgstr ""
+#~ "Вот примерный [.filename]#Makefile#, который можно использовать при "
+#~ "создании нового порта. Обязательно удалите все дополнительные комментарии "
+#~ "(те, которые в скобках)."
+
+#, no-wrap
+#~ msgid ""
+#~ "[If it requires GNU make, not /usr/bin/make, to build...]\n"
+#~ "USES= gmake\n"
+#~ "[If it is an X application and requires \"xmkmf -a\" to be run...]\n"
+#~ "USES= imake\n"
+#~ msgstr ""
+#~ "[Если для сборки требуется GNU make, а не /usr/bin/make...]\n"
+#~ "USES= gmake\n"
+#~ "[Если это приложение для X и требует выполнения команды \"xmkmf -a\"...]\n"
+#~ "USES= imake\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "[this section is for other standard bsd.port.mk variables that do not]\n"
+#~ " belong to any of the above]\n"
+#~ "[If it asks questions during configure, build, install...]\n"
+#~ "IS_INTERACTIVE=\tyes\n"
+#~ "[If it extracts to a directory other than ${DISTNAME}...]\n"
+#~ "WRKSRC=\t\t${WRKDIR}/xdvi-new\n"
+#~ "[If it requires a \"configure\" script generated by GNU autoconf to be run]\n"
+#~ "GNU_CONFIGURE=\tyes\n"
+#~ "[et cetera.]\n"
+#~ msgstr ""
+#~ "[Этот раздел предназначен для прочих стандартных переменных bsd.port.mk,\n"
+#~ " не относящихся к указанным выше категориям]\n"
+#~ "[Если программа задаёт вопросы во время настройки (configure), сборки (build) или установки (install)...]\n"
+#~ "IS_INTERACTIVE=\tyes\n"
+#~ "[Если распаковка происходит в каталог, отличных от ${DISTNAME}...]\n"
+#~ "WRKSRC=\t\t${WRKDIR}/xdvi-new\n"
+#~ "[Если требуется выполнение сценария \"configure\", сгенерированного GNU autoconf.]\n"
+#~ "GNU_CONFIGURE=\tyes\n"
+#~ "[и так далее.]\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "[If it requires options, this section is for options]\n"
+#~ "OPTIONS_DEFINE=\tDOCS EXAMPLES FOO\n"
+#~ "OPTIONS_DEFAULT=\tFOO\n"
+#~ "[If options will change the files in plist]\n"
+#~ "OPTIONS_SUB=yes\n"
+#~ msgstr ""
+#~ "[Если для сборки требуются параметры, этот раздел предназначен для их настройки]\n"
+#~ "OPTIONS_DEFINE=\tDOCS EXAMPLES FOO\n"
+#~ "OPTIONS_DEFAULT=\tFOO\n"
+#~ "[Если параметры влияют на список файлов в plist]\n"
+#~ "OPTIONS_SUB=yes\n"
+
+#, no-wrap
+#~ msgid "FOO_CONFIGURE_ENABLE=\tfoo\n"
+#~ msgstr "FOO_CONFIGURE_ENABLE=\tfoo\n"
diff --git a/documentation/content/ru/books/porters-handbook/porting-why/_index.adoc b/documentation/content/ru/books/porters-handbook/porting-why/_index.adoc
index 9b04d921da..83be752dab 100644
--- a/documentation/content/ru/books/porters-handbook/porting-why/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/porting-why/_index.adoc
@@ -1,11 +1,13 @@
---
-title: Глава 1. Введение
-prev: books/porters-handbook/
+description: 'Почему добавляют программы в коллекцию портов FreeBSD'
next: books/porters-handbook/new-port
+params:
+ path: /books/porters-handbook/porting-why/
+prev: books/porters-handbook
showBookMenu: true
+tags: ["ports", "why porting"]
+title: 'Глава 1. Введение'
weight: 1
-params:
- path: "/books/porters-handbook/porting-why/"
---
[[why-port]]
diff --git a/documentation/content/ru/books/porters-handbook/porting-why/_index.po b/documentation/content/ru/books/porters-handbook/porting-why/_index.po
new file mode 100644
index 0000000000..7cdf3c5595
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/porting-why/_index.po
@@ -0,0 +1,61 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-12 12:10+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookporting-why_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/porting-why/_index.adoc:1
+#, no-wrap
+msgid "Why port a program to the FreeBSD Ports Collection"
+msgstr "Почему добавляют программы в коллекцию портов FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/porting-why/_index.adoc:1
+#, no-wrap
+msgid "Chapter 1. Introduction"
+msgstr "Глава 1. Введение"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/porting-why/_index.adoc:14
+#, no-wrap
+msgid "Introduction"
+msgstr "Введение"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-why/_index.adoc:54
+msgid ""
+"The FreeBSD Ports Collection is the way almost everyone installs "
+"applications (\"ports\") on FreeBSD. Like everything else about FreeBSD, it "
+"is primarily a volunteer effort. It is important to keep this in mind when "
+"reading this document."
+msgstr ""
+"Коллекция портов FreeBSD является способом, используемым практически каждым "
+"для установки приложений (\"портов\") на FreeBSD. Как и почти всё остальное "
+"во FreeBSD, эта система в основном является добровольно поддерживаемым "
+"начинанием. Важно иметь это в виду при чтении данного документа."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-why/_index.adoc:56
+msgid ""
+"In FreeBSD, anyone may submit a new port, or volunteer to maintain an "
+"existing unmaintained port. No special commit privilege is needed."
+msgstr ""
+"Во FreeBSD каждый может прислать новый порт либо изъявить желание "
+"поддерживать существующий порт, если его никто ещё никто не поддерживает-вам "
+"не нужно иметь никаких особых привилегий на внесение изменений, чтобы это "
+"делать."
diff --git a/documentation/content/ru/books/porters-handbook/quick-porting/_index.adoc b/documentation/content/ru/books/porters-handbook/quick-porting/_index.adoc
index ea91baf3f8..27cbe1b0ec 100644
--- a/documentation/content/ru/books/porters-handbook/quick-porting/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/quick-porting/_index.adoc
@@ -1,11 +1,13 @@
---
-title: Глава 3. Быстрое портирование
-prev: books/porters-handbook/new-port
+description: 'Как быстро создать новый порт FreeBSD'
next: books/porters-handbook/slow-porting
+params:
+ path: /books/porters-handbook/quick-porting/
+prev: books/porters-handbook/new-port
showBookMenu: true
+tags: ["quick porting", "guide", "port", "ports collection", "how-to"]
+title: 'Глава 3. Быстрое портирование'
weight: 3
-params:
- path: "/books/porters-handbook/quick-porting/"
---
[[quick-porting]]
@@ -46,20 +48,20 @@ toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
-В этом разделе описано, как создать новый порт на скорую руку. Во многих случаях этого бывает не достаточно, так что вам нужно будет прочитать документ дальше.
+В этом разделе описано, как быстро создать новый порт. Для случаев, когда этот быстрый метод не подходит, полный процесс "Медленного портирования" описан в разделе crossref:slow-porting[slow-porting,Медленное портирование].
Во-первых, скачайте оригинальный tar-файл и поместите его в каталог `DISTDIR`, который по умолчанию есть не что иное, как [.filename]#/usr/ports/distfiles#.
[NOTE]
====
-Здесь предполагается, что программное обеспечение компилируется без проблем как есть, то есть для работы приложения на вашей системе FreeBSD не потребовалось абсолютно никаких изменений. Если требовалось что-то изменить, то вам придется обратиться также и к следующему разделу.
+Здесь предполагается, что программное обеспечение компилируется без проблем как есть, то есть для работы приложения на вашей системе FreeBSD не потребовалось абсолютно никаких изменений. Если требовалось что-то изменить, то вам придется обратиться также и к следующему разделу — crossref:slow-porting[slow-porting,Медленное портирование].
====
[NOTE]
====
Перед началом портирования рекомендуется установить переменную man:make[1] `DEVELOPER` в [.filename]#/etc/make.conf#.
-[source,shell]
+[source, shell]
....
# echo DEVELOPER=yes >> /etc/make.conf
....
@@ -74,64 +76,48 @@ endif::[]
[.programlisting]
....
-# $FreeBSD$
-
PORTNAME= oneko
-PORTVERSION= 1.1b
+DISTVERSION= 1.1b
CATEGORIES= games
-MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/
+MASTER_SITES= ftp://ftp.rediris.es/sites/ftp.freebsd.org/pub/FreeBSD/
MAINTAINER= youremail@example.com
COMMENT= Cat chasing a mouse all over the screen
+WWW= http://www.daidouji.com/oneko/
.include <bsd.port.mk>
....
-[NOTE]
-====
-В некоторых случаях в заголовке [.filename]#Makefile# существующего порта могут содержаться дополнительные строки, такие как название порта и дата его создания. Эта дополнительная информация была объявлена устаревшей и находится в процессе удаления.
-====
-
-Посмотрим, сможете ли вы его понять. Не обращайте внимание на содержимое строчки `$FreeBSD$`, она будет заполнена автоматически системой Subversion, когда порт будет импортирован в наше дерево портов. Вы можете найти более подробный пример в разделе <<porting-samplem,пример Makefile>>.
+Посмотрим, сможете ли вы его понять. Более подробный пример приведен в секции crossref:porting-samplem[porting-samplem,пример Makefile].
[[porting-desc]]
== Создание информационных файлов
Имеется два информационных файла, которые требуются для любого порта, вне зависимости от того, является ли он пакетом или нет. Это [.filename]#pkg-descr# и [.filename]#pkg-plist#. Префикс [.filename]#pkg-# отличает их от других файлов.
+[[porting-pkg-descr]]
=== [.filename]#pkg-descr#
Это более подробное краткое описание порта. От одного до нескольких абзацев, кратко описывающих, что представляет собой порт, будет достаточно.
[NOTE]
====
-Это _не_ руководство и не подробнейшее описание того, как использовать или компилировать порт! _Пожалуйста, будьте внимательны при копировании текста из [.filename]#README# или страниц справочника_; слишком часто они не являются кратким описанием порта или имеют неудобный формат (например, страницы справочника выровнены пробелами, что особенно плохо смотрится с моноширинными шрифтами).
+Это _не_ руководство и не подробное описание того, как использовать или компилировать порт! _Пожалуйста, будьте осторожны при копировании из [.filename]#README# или manpage_. Очень часто они не содержат краткого описания порта или имеют неудобный формат. Например, manpages используют выравнивание по ширине, что особенно плохо выглядит с моноширинными шрифтами.
+
+С другой стороны, содержимое файла [.filename]#pkg-descr# должно быть длиннее, чем crossref:makefiles[makefile-comment,строка `COMMENT` из Makefile]. Оно должно более подробно объяснять, что собой представляет данный порт.
====
Хорошо составленный [.filename]#pkg-descr# описывает порт достаточно полно, чтобы пользователю не приходилось сверяться с документацией или посещать вебсайт для понимания того, что делает данное программное обеспечение, чем оно может быть полезно или какие хорошие функции у него имеются. Упоминание про определённые требования, такие как используемый графический инструментарий, тяжёлые зависимости, окружение для запуска или используемый язык программирования помогут пользователям определиться, будет ли этот порт для них работать.
-Включите сюда URL официальной домашней страницы Интернет. Перед _одним_ из сайтов (выберите основной) добавьте `WWW:` (с последующим единичным пробелом) для того, чтобы вспомогательные утилиты работали правильно. Если URI является корнем сайта или каталогом, то значение должно быть дополнено косой чертой.
-
[NOTE]
====
-Если указанная для порта веб-страница не доступна, попытайтесь сперва поискать, был ли официальный сайт перемещён, переименован или размещён в другом месте.
+URL, который ранее включался в последнюю строку файла [.filename]#pkg-descr#, был перемещен в [.filename]#Makefile#.
====
-Следующий пример показывает, как должен выглядеть ваш [.filename]#pkg-descr#:
-
-[.programlisting]
-....
-This is a port of oneko, in which a cat chases a poor mouse all over
-the screen.
- :
-(etc.)
-
-WWW: http://www.oneko.org/
-....
-
+[[porting-pkg-plist]]
=== [.filename]#pkg-plist#
-Здесь перечисляются все файлы, устанавливаемые портом. Его также называют "списком для упаковки", потому что пакет генерируется упаковкой файлов, которые здесь указаны. Имена путей указываются относительно установочного префикса (обычно [.filename]#/usr/local#). Если порт во время установки создает каталоги, убедитесь, что добавлены строки `@dirrm` для удаления каталогов при удалении пакета.
+Здесь перечисляются все файлы, устанавливаемые портом. Его также называют "списком для упаковки", потому что пакет генерируется упаковкой файлов, которые здесь указаны. Имена путей указываются относительно установочного префикса (обычно [.filename]#/usr/local#).
Вот маленький пример:
@@ -143,19 +129,18 @@ lib/X11/app-defaults/Oneko
lib/X11/oneko/cat1.xpm
lib/X11/oneko/cat2.xpm
lib/X11/oneko/mouse.xpm
-@dirrm lib/X11/oneko
....
Обратитесь к странице справочной системы по команде man:pkg-create[8] с подробным описанием формата списка упаковки.
[NOTE]
====
-Рекомендуется, чтобы имена файлов в этом списке были отсортированы в алфавитном порядке. Это позволит значительно облегчить сверку изменений при обновлении порта.
+Рекомендуется, чтобы имена файлов в этом списке были отсортированы в алфавитном порядке. Это позволит значительно облегчить сверку изменений при обновлении порта. Фреймворк делает это корректно, когда список пакета crossref:plist[plist-autoplist,сгенерирован автоматически].
====
-[NOTE]
+[TIP]
====
-Создание списка упаковки вручную может оказаться весьма трудоёмкой задачей. Если порт устанавливает большое количество файлов, раздел об <<plist-autoplist,автоматическом построении списка упаковки>> может помочь сэкономить время.
+Создание списка упаковки вручную может оказаться весьма трудоёмкой задачей. Если порт устанавливает большое количество файлов, раздел об crossref:plist[plist-autoplist,автоматическом построении списка упаковки] может помочь сэкономить время.
====
Существует только одно исключение, когда у порта может отсутствовать [.filename]#pkg-plist#. Если порт устанавливает лишь несколько файлов, а возможно, и каталогов, то они могут быть перечислены в переменных `PLIST_FILES` и `PLIST_DIRS`, соответственно, внутри файла [.filename]#Makefile# порта. К примеру, мы можем обойтись без файла [.filename]#pkg-plist# у приведённого выше порта [.filename]#oneko#, добавив следующие строки в [.filename]#Makefile#:
@@ -168,80 +153,127 @@ PLIST_FILES= bin/oneko \
lib/X11/oneko/cat1.xpm \
lib/X11/oneko/cat2.xpm \
lib/X11/oneko/mouse.xpm
-PLIST_DIRS= lib/X11/oneko
....
-Конечно, переменная `PLIST_DIRS` не должна задаваться, если порт не устанавливает никаких каталогов.
-
[NOTE]
====
-Несколько портов могут совместно использовать общий каталог. В этом случае `PLIST_DIRS` следует заменить на `PLIST_DIRSTRY`, так чтобы каталог удалялся только если он пуст, а иначе игнорировался. Использование `PLIST_DIRS` и `PLIST_DIRSTRY` аналогично `@dirrm` и `@dirrmtry` в [.filename]#pkg-plist#, описание которых входит в crossref:plist[plist-dir-cleaning,Очистка пустых каталогов].
+Использование `PLIST_FILES` не должно быть чрезмерным. При поиске происхождения файла обычно просматривают файлы [.filename]#pkg-plist# в дереве портов с помощью grep. Указание файлов в `PLIST_FILES` в [.filename]#Makefile# усложняет этот поиск.
====
-Обратной стороной такого способа перечисления файлов и каталогов порта является невозможность использования последовательностей команд, описанных в man:pkg-create[8]. Поэтому он подходит для простых портов, что делает их ещё более простыми. Одновременно с этим положительным моментом является уменьшение количества файлов в коллекции портов. Пожалуйста, подумайте над использованием этой техники, прежде чем создавать [.filename]#pkg-plist#.
+[TIP]
+====
+Если порту требуется создать пустой каталог или он создает каталоги вне [.filename]#${PREFIX}# во время установки, обратитесь к разделу crossref:plist[plist-dir-cleaning,Очистка пустых каталогов] для получения дополнительной информации.
+====
-Далее мы увидим, как можно использовать файлы [.filename]#pkg-plist# и `PLIST_FILES` выполнения crossref:plist[plist,более сложных задач].
+[TIP]
+====
+Поскольку `PLIST_FILES` является переменной man:make[1], любая запись с пробелами должна быть заключена в кавычки. Например, при использовании ключевых слов, описанных в man:pkg-create[8] и crossref:plist[plist-keywords,Расширение списка пакетов с помощью ключевых слов], запись должна быть заключена в кавычки.
+
+[.programlisting]
+....
+PLIST_FILES= "@sample ${ETCDIR}/oneko.conf.sample"
+....
+====
+
+Позже мы увидим, как [.filename]#pkg-plist# и `PLIST_FILES` могут использоваться для выполнения crossref:plist[plist,более сложных задач].
[[porting-checksum]]
== Создание файла с контрольной суммой
-Просто введите команду `make makesum`. Правила утилиты make автоматически сгенерируют файл [.filename]#distinfo#.
-
-Если у извлекаемого файла регулярно меняется контрольная сумма и вы не сомневаетесь в надежности источника (т.е. он получен из CD производителя, либо ежедневно обновляется документация), то вы должны указать эти файлы в переменной `IGNOREFILES`. Тогда контрольная сумма при выполнении `make makesum` для этого файла создаваться не будет, а вместо этого для него будет установлено значение `IGNORE`.
+Просто введите команду `make makesum`. Правила утилиты make автоматически сгенерируют файл [.filename]#distinfo#. Не пытайтесь создавать этот файл вручную.
[[porting-testing]]
== Тестирование порта
-Вы должны удостовериться, что правила построения порта выполняют именно то, что вы хотите, включая создание пакета для порта. Вот те важные вещи, которые вы должны проверить.
+Вы должны удостовериться, что правила построения порта выполняют именно то, что вы хотите, включая создание пакета для порта. Вот те важные вещи, которые вы должны проверить:
-* [.filename]#pkg-plist# не содержит ничего сверх того, что устанавливается портом
-* [.filename]#pkg-plist# содержит абсолютно все, что устанавливается портом
+* [.filename]#pkg-plist# не содержит ничего сверх того, что устанавливается портом.
+* [.filename]#pkg-plist# содержит абсолютно все, что устанавливается портом.
* Порт может быть установлен с помощью указания цели `install`. Это позволяет убедиться в правильной работе сценария установки.
* Порт может быть правильным образом удалён с помощью указания цели `deinstall`. Это позволяет убедиться в правильной работе сценария удаления.
-* Следует убедиться, что `make package` можно запустить из-под обычного пользователя (то есть, не из-под `root`). Если это не так, в [.filename]#Makefile# порта должно быть добавлено `NEED_ROOT=yes`.
+* Порт имеет доступ к сетевым ресурсам только во время фазы цели `fetch`. Это важно для сборщиков пакетов, таких как package:ports-mgmt/poudriere[].
+* Убедитесь, что команду `make package` можно выполнить от имени обычного пользователя (то есть не от `root`). Если это не работает, возможно, потребуется исправить программное обеспечение. См. также crossref:uses[uses-fakeroot,`fakeroot`] и crossref:uses[uses-uidfix,`uidfix`].
[.procedure]
-====
-*Procedure: Рекомендуемый порядок проверки*
-
+.*Procedure: Рекомендуемый порядок проверки*
. `make stage`
. `make check-orphans`
. `make package`
. `make install`
. `make deinstall`
-. `pkg add package-filename`
-. `make package` (из-под пользователя)
-====
+. `make package` (как пользователь)
Убедитесь, что на любом из этапов не выдается никаких предупреждений.
-Основательное автоматизированное тестирование может быть выполнено при помощи package:ports-mgmt/tinderbox[] или package:ports-mgmt/poudriere[] из Коллекции Портов. Эти приложения используют `jails`, в которых проверяются все перечисленные выше этапы без изменения состояния основной системы.
+Тщательное автоматизированное тестирование можно выполнить с помощью package:ports-mgmt/poudriere[] из коллекции портов, дополнительную информацию см. в crossref:testing[testing-poudriere,poudriere]. Он поддерживает `клетки`, в которых можно протестировать все указанные выше шаги без воздействия на состояние основной системы.
[[porting-portlint]]
== Проверка вашего порта утилитой `portlint`
-Будьте добры, пользуйтесь утилитой `portlint` для проверки того, что ваш порт соответствует нашим рекомендациям. Программа package:ports-mgmt/portlint[] является частью Коллекции Портов. В частности, вы можете захотеть проверить, правильно ли сформирован файл <<porting-samplem,Makefile>> и соответствующим ли образом именован <<porting-pkgname,пакет>>.
+Будьте добры, пользуйтесь утилитой `portlint` для проверки того, что ваш порт соответствует нашим рекомендациям. Программа package:ports-mgmt/portlint[] является частью Коллекции Портов. В частности, вы можете захотеть проверить, правильно ли сформирован файл crossref:porting-samplem[porting-samplem,Makefile] и соответствующим ли образом именован crossref:porting-pkgname[porting-pkgname,пакет].
+
+[IMPORTANT]
+====
+Не следуйте слепо выводу `portlint`. Это статический инструмент для проверки, и иногда он ошибается.
+====
[[porting-submitting]]
== Посылка нового порта
Перед посылкой нового порта прочитайте раздел о том, что crossref:porting-dads[porting-dads,можно и нельзя] делать.
-Когда вы наконец довольны своим первым портом, единственное, что осталось сделать, это включить его в основное дерево портов FreeBSD и осчастливить этим всех остальных. Нам не нужен ни каталог [.filename]#work#, ни пакет [.filename]#pkgname.tgz#, так что удалите их прямо сейчас.
+Когда вы наконец довольны своим первым портом, единственное, что осталось сделать, это включить его в основное дерево портов FreeBSD и осчастливить этим всех остальных.
+
+[IMPORTANT]
+====
+Нам не нужны каталог [.filename]#work# или пакет [.filename]#pkgname.txz#, поэтому их можно удалить.
+====
+
+Далее создайте файл man:patch[1]. Предположим, что порт называется `oneko` и находится в категории `games`.
+
+[[porting-submitting-diff]]
+.Создание [.filename]#.diff# для нового порта
+[example]
+====
+Добавьте все файлы с помощью `git add .`, затем просмотрите изменения с помощью `git diff`. Например:
+
+[source, shell]
+....
+% git add .
+% git diff --staged
+....
-Затем получите файл man:shar[1]. Предполагая, что порт называется oneko, перейдите в каталог выше, где находится каталог `oneko`, и наберите: `shar find oneko > oneko.shar`
+Убедитесь, что все необходимые файлы включены, затем зафиксируйте изменение в вашей локальной ветке и создайте патч с помощью `git format-patch`
+
+[source, shell]
+....
+% git commit
+% git format-patch origin/main
+....
-Включите [.filename]#oneko.shar# в сообщение об ошибке и пошлите его с помощью man:send-pr[1]. Обратитесь к разделу extref:{contributing}[Сообщения об ошибках и общие замечания, CONTRIB-GENERAL] для получения подробной информации о man:send-pr[1]).
+Патч, созданный с помощью `git format-patch`, будет содержать идентификатор автора и адреса электронной почты, что упрощает применение разработчиками (с помощью `git am`) и правильное указание авторства.
-Укажите в сообщении категорию `ports` и класс `change-request`. _Не_ указывайте, что сообщение имеет статус `confidential`! Добавьте краткое описание программы в поле "Description" отправляемого PR (например, содержимое `COMMENT` в сокращённом варианте) и сам файл в виде архива [.filename]#.shar# в поле "Fix".
+[IMPORTANT]
+****
+Чтобы упростить применение патча для коммиттеров в их рабочей копии дерева портов, пожалуйста, создайте файл [.filename]#.diff# из корня вашего дерева портов.
+****
+
+====
+
+Отправьте файл [.filename]#oneko.diff# через https://bugs.freebsd.org/submit/[форму отправки отчётов об ошибках]. Укажите продукт "Ports & Packages", компонент "Individual Port(s)" и следуйте приведённым там инструкциям. Добавьте краткое описание программы в поле Description PR (например, сокращённую версию `COMMENT`) и не забудьте прикрепить файл [.filename]#oneko.diff#.
[NOTE]
====
-Хорошее описание в заголовке сообщения о проблеме значительно облегчает работу коммиттеров портов. Для новых портов мы предпочитаем нечто вроде "New port: <категория>/<название порта> <краткое описание порта>". Следование этой схеме упрощает и ускоряет начало работы по добавлению нового порта.
+Хорошее описание в заголовке сообщения о проблеме значительно облегчает работу коммиттеров портов. Для новых портов мы предпочитаем нечто вроде "[NEW PORT] _категория/название_порта краткое описание порта_". Следование этой схеме упрощает и ускоряет начало работы по добавлению нового порта.
====
-Повторим ещё раз, что __не нужно включать ни оригинальный файл с дистрибутивом, ни каталог [.filename]#work#, ни пакет, построенный вами командой ``make package``__; для новых портов используйте man:shar[1], но не man:diff[1].
+После отправки порта, пожалуйста, потерпите. Время, необходимое для включения нового порта во FreeBSD, может занимать от нескольких дней до нескольких месяцев. https://bugs.freebsd.org/bugzilla/query.cgi[ Здесь] можно увидеть список ожидающих PR для портов.
-После отправки порта, пожалуйста, потерпите. Время, необходимое для включения нового порта во FreeBSD, может занимать от нескольких дней до нескольких месяцев. http://www.FreeBSD.org/cgi/query-pr-summary.cgi?category=ports[ Здесь] можно увидеть список ожидающих PR для портов.
+Чтобы получить список _открытых_ PR для портов, выберите _Open_ и _Ports & Packages_ в форме поиска, затем нажмите btn:[Search].
-После рассмотрения нового порта мы при необходимости вам ответим, а затем включим порт в наше дерево. Ваше имя также будет добавлено в список extref:{contributors}[Дополнительных контрибуторов проекта FreeBSD, contrib-additional] и другие файлы.
+После ознакомления с новым портом мы ответим, если это необходимо, и добавим его в дерево. Имя отправителя также будет добавлено в список extref:{contributors}[Дополнительных участников FreeBSD, contrib-additional] и другие файлы.
+
+[IMPORTANT]
+====
+Ранее можно было отправлять исправления для новых портов, используя файл man:shar[1]; однако с развитием man:git[1] это больше не актуально. Коммиттеры больше не принимают файлы man:shar[1], так как их использование чревато ошибками и не добавляет соответствующую запись в [.filename]#Makefile# категории.
+====
diff --git a/documentation/content/ru/books/porters-handbook/quick-porting/_index.po b/documentation/content/ru/books/porters-handbook/quick-porting/_index.po
new file mode 100644
index 0000000000..9900889410
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/quick-porting/_index.po
@@ -0,0 +1,767 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-09-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookquick-porting_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:1
+#, no-wrap
+msgid "How to quickly create a new FreeBSD Port"
+msgstr "Как быстро создать новый порт FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:1
+#, no-wrap
+msgid "Chapter 3. Quick Porting"
+msgstr "Глава 3. Быстрое портирование"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:14
+#, no-wrap
+msgid "Quick Porting"
+msgstr "Быстрое портирование"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:53
+msgid ""
+"This section describes how to quickly create a new port. For applications "
+"where this quick method is not adequate, the full \"Slow Porting\" process "
+"is described in crossref:slow-porting[slow-porting,Slow Porting]."
+msgstr ""
+"В этом разделе описано, как быстро создать новый порт. Для случаев, когда "
+"этот быстрый метод не подходит, полный процесс \"Медленного портирования\" "
+"описан в разделе crossref:slow-porting[slow-porting,Медленное портирование]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:55
+msgid ""
+"First, get the original tarball and put it into `DISTDIR`, which defaults to "
+"[.filename]#/usr/ports/distfiles#."
+msgstr ""
+"Во-первых, скачайте оригинальный tar-файл и поместите его в каталог "
+"`DISTDIR`, который по умолчанию есть не что иное, как [.filename]#/usr/ports/"
+"distfiles#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:61
+msgid ""
+"These steps assume that the software compiled out-of-the-box. In other "
+"words, absolutely no changes were required for the application to work on a "
+"FreeBSD system. If anything had to be changed, refer to crossref:slow-"
+"porting[slow-porting,Slow Porting]."
+msgstr ""
+"Здесь предполагается, что программное обеспечение компилируется без проблем "
+"как есть, то есть для работы приложения на вашей системе FreeBSD не "
+"потребовалось абсолютно никаких изменений. Если требовалось что-то изменить, "
+"то вам придется обратиться также и к следующему разделу — crossref:slow-"
+"porting[slow-porting,Медленное портирование]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:66
+msgid ""
+"It is recommended to set the `DEVELOPER` man:make[1] variable in "
+"[.filename]#/etc/make.conf# before getting into porting."
+msgstr ""
+"Перед началом портирования рекомендуется установить переменную man:make[1] "
+"`DEVELOPER` в [.filename]#/etc/make.conf#."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:70
+#, no-wrap
+msgid "# echo DEVELOPER=yes >> /etc/make.conf\n"
+msgstr "# echo DEVELOPER=yes >> /etc/make.conf\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:73
+msgid ""
+"This setting enables the \"developer mode\" that displays deprecation "
+"warnings and activates some further quality checks on calling `make`."
+msgstr ""
+"Эта настройка включает \"режим разработчика\", в котором отображаются "
+"предупреждения при использовании устаревших конструкций и задействуются "
+"некоторые дополнительные проверки при вызове команды `make`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:76
+#, no-wrap
+msgid "Writing the Makefile"
+msgstr "Создание файла [.filename]#Makefile#"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:79
+msgid "The minimal [.filename]#Makefile# would look something like this:"
+msgstr "Минимальный [.filename]#Makefile# будет выглядеть примерно так:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:86
+#, no-wrap
+msgid ""
+"PORTNAME=\toneko\n"
+"DISTVERSION=\t1.1b\n"
+"CATEGORIES=\tgames\n"
+"MASTER_SITES=\tftp://ftp.rediris.es/sites/ftp.freebsd.org/pub/FreeBSD/\n"
+msgstr ""
+"PORTNAME=\toneko\n"
+"DISTVERSION=\t1.1b\n"
+"CATEGORIES=\tgames\n"
+"MASTER_SITES=\tftp://ftp.rediris.es/sites/ftp.freebsd.org/pub/FreeBSD/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:90
+#, no-wrap
+msgid ""
+"MAINTAINER=\tyouremail@example.com\n"
+"COMMENT=\tCat chasing a mouse all over the screen\n"
+"WWW=\t\thttp://www.daidouji.com/oneko/\n"
+msgstr ""
+"MAINTAINER=\tyouremail@example.com\n"
+"COMMENT=\tCat chasing a mouse all over the screen\n"
+"WWW=\t\thttp://www.daidouji.com/oneko/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:92
+#, no-wrap
+msgid ".include <bsd.port.mk>\n"
+msgstr ".include <bsd.port.mk>\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:96
+msgid ""
+"Try to figure it out. A more detailed example is shown in the "
+"crossref:porting-samplem[porting-samplem,sample Makefile] section."
+msgstr ""
+"Посмотрим, сможете ли вы его понять. Более подробный пример приведен в "
+"секции crossref:porting-samplem[porting-samplem,пример Makefile]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:98
+#, no-wrap
+msgid "Writing the Description Files"
+msgstr "Создание информационных файлов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:103
+msgid ""
+"There are two description files that are required for any port, whether they "
+"actually package or not. They are [.filename]#pkg-descr# and "
+"[.filename]#pkg-plist#. Their [.filename]#pkg-# prefix distinguishes them "
+"from other files."
+msgstr ""
+"Имеется два информационных файла, которые требуются для любого порта, вне "
+"зависимости от того, является ли он пакетом или нет. Это [.filename]#pkg-"
+"descr# и [.filename]#pkg-plist#. Префикс [.filename]#pkg-# отличает их от "
+"других файлов."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:105
+#, no-wrap
+msgid "[.filename]#pkg-descr#"
+msgstr "[.filename]#pkg-descr#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:109
+msgid ""
+"This is a longer description of the port. One to a few paragraphs concisely "
+"explaining what the port does is sufficient."
+msgstr ""
+"Это более подробное краткое описание порта. От одного до нескольких абзацев, "
+"кратко описывающих, что представляет собой порт, будет достаточно."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:116
+msgid ""
+"This is _not_ a manual or an in-depth description on how to use or compile "
+"the port! _Please be careful when copying from the [.filename]#README# or "
+"manpage_. Too often they are not a concise description of the port or are "
+"in an awkward format. For example, manpages have justified spacing, which "
+"looks particularly bad with monospaced fonts."
+msgstr ""
+"Это _не_ руководство и не подробное описание того, как использовать или "
+"компилировать порт! _Пожалуйста, будьте осторожны при копировании из "
+"[.filename]#README# или manpage_. Очень часто они не содержат краткого "
+"описания порта или имеют неудобный формат. Например, manpages используют "
+"выравнивание по ширине, что особенно плохо выглядит с моноширинными шрифтами."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:118
+msgid ""
+"On the other hand, the content of [.filename]#pkg-descr# must be longer than "
+"the crossref:makefiles[makefile-comment,`COMMENT` line from the Makefile]. "
+"It must explain in more depth what the port is all about."
+msgstr ""
+"С другой стороны, содержимое файла [.filename]#pkg-descr# должно быть "
+"длиннее, чем crossref:makefiles[makefile-comment,строка `COMMENT` из "
+"Makefile]. Оно должно более подробно объяснять, что собой представляет "
+"данный порт."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:122
+msgid ""
+"A well-written [.filename]#pkg-descr# describes the port completely enough "
+"that users would not have to consult the documentation or visit the website "
+"to understand what the software does, how it can be useful, or what "
+"particularly nice features it has. Mentioning certain requirements like a "
+"graphical toolkit, heavy dependencies, runtime environment, or "
+"implementation languages help users decide whether this port will work for "
+"them."
+msgstr ""
+"Хорошо составленный [.filename]#pkg-descr# описывает порт достаточно полно, "
+"чтобы пользователю не приходилось сверяться с документацией или посещать "
+"вебсайт для понимания того, что делает данное программное обеспечение, чем "
+"оно может быть полезно или какие хорошие функции у него имеются. Упоминание "
+"про определённые требования, такие как используемый графический "
+"инструментарий, тяжёлые зависимости, окружение для запуска или используемый "
+"язык программирования помогут пользователям определиться, будет ли этот порт "
+"для них работать."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:126
+msgid ""
+"The URL that used to be included as the last line of the [.filename]#pkg-"
+"descr# file has been moved to the [.filename]#Makefile#."
+msgstr ""
+"URL, который ранее включался в последнюю строку файла [.filename]#pkg-"
+"descr#, был перемещен в [.filename]#Makefile#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:129
+#, no-wrap
+msgid "[.filename]#pkg-plist#"
+msgstr "[.filename]#pkg-plist#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:134
+msgid ""
+"This file lists all the files installed by the port. It is also called the "
+"\"packing list\" because the package is generated by packing the files "
+"listed here. The pathnames are relative to the installation prefix (usually "
+"[.filename]#/usr/local#)."
+msgstr ""
+"Здесь перечисляются все файлы, устанавливаемые портом. Его также называют "
+"\"списком для упаковки\", потому что пакет генерируется упаковкой файлов, "
+"которые здесь указаны. Имена путей указываются относительно установочного "
+"префикса (обычно [.filename]#/usr/local#)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:136
+msgid "Here is a small example:"
+msgstr "Вот маленький пример:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:145
+#, no-wrap
+msgid ""
+"bin/oneko\n"
+"man/man1/oneko.1.gz\n"
+"lib/X11/app-defaults/Oneko\n"
+"lib/X11/oneko/cat1.xpm\n"
+"lib/X11/oneko/cat2.xpm\n"
+"lib/X11/oneko/mouse.xpm\n"
+msgstr ""
+"bin/oneko\n"
+"man/man1/oneko.1.gz\n"
+"lib/X11/app-defaults/Oneko\n"
+"lib/X11/oneko/cat1.xpm\n"
+"lib/X11/oneko/cat2.xpm\n"
+"lib/X11/oneko/mouse.xpm\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:148
+msgid ""
+"Refer to the man:pkg-create[8] manual page for details on the packing list."
+msgstr ""
+"Обратитесь к странице справочной системы по команде man:pkg-create[8] с "
+"подробным описанием формата списка упаковки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:155
+msgid ""
+"It is recommended to keep all the filenames in this file sorted "
+"alphabetically. It will make verifying changes when upgrading the port much "
+"easier. The sorting should be applied after variable expansion takes "
+"place. The framework does this correctly when the package list is "
+"crossref:plist[plist-autoplist,generated automatically]."
+msgstr ""
+"Рекомендуется, чтобы имена файлов в этом списке были отсортированы в "
+"алфавитном порядке. Это позволит значительно облегчить сверку изменений при "
+"обновлении порта. Фреймворк делает это корректно, когда список пакета "
+"crossref:plist[plist-autoplist,сгенерирован автоматически]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:161
+msgid ""
+"Creating a packing list manually can be a very tedious task. If the port "
+"installs a large numbers of files, crossref:plist[plist-autoplist,creating "
+"the packing list automatically] might save time."
+msgstr ""
+"Создание списка упаковки вручную может оказаться весьма трудоёмкой задачей. "
+"Если порт устанавливает большое количество файлов, раздел об "
+"crossref:plist[plist-autoplist,автоматическом построении списка упаковки] "
+"может помочь сэкономить время."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:166
+msgid ""
+"There is only one case when [.filename]#pkg-plist# can be omitted from a "
+"port. If the port installs just a handful of files, list them in "
+"`PLIST_FILES`, within the port's [.filename]#Makefile#. For instance, we "
+"could get along without [.filename]#pkg-plist# in the above "
+"[.filename]#oneko# port by adding these lines to the [.filename]#Makefile#:"
+msgstr ""
+"Существует только одно исключение, когда у порта может отсутствовать "
+"[.filename]#pkg-plist#. Если порт устанавливает лишь несколько файлов, а "
+"возможно, и каталогов, то они могут быть перечислены в переменных "
+"`PLIST_FILES` и `PLIST_DIRS`, соответственно, внутри файла "
+"[.filename]#Makefile# порта. К примеру, мы можем обойтись без файла "
+"[.filename]#pkg-plist# у приведённого выше порта [.filename]#oneko#, добавив "
+"следующие строки в [.filename]#Makefile#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:175
+#, no-wrap
+msgid ""
+"PLIST_FILES=\tbin/oneko \\\n"
+"\t\tman/man1/oneko.1.gz \\\n"
+"\t\tlib/X11/app-defaults/Oneko \\\n"
+"\t\tlib/X11/oneko/cat1.xpm \\\n"
+"\t\tlib/X11/oneko/cat2.xpm \\\n"
+"\t\tlib/X11/oneko/mouse.xpm\n"
+msgstr ""
+"PLIST_FILES=\tbin/oneko \\\n"
+"\t\tman/man1/oneko.1.gz \\\n"
+"\t\tlib/X11/app-defaults/Oneko \\\n"
+"\t\tlib/X11/oneko/cat1.xpm \\\n"
+"\t\tlib/X11/oneko/cat2.xpm \\\n"
+"\t\tlib/X11/oneko/mouse.xpm\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:182
+msgid ""
+"Usage of `PLIST_FILES` should not be abused. When looking for the origin of "
+"a file, people usually try to grep through the [.filename]#pkg-plist# files "
+"in the ports tree. Listing files in `PLIST_FILES` in the "
+"[.filename]#Makefile# makes that search more difficult."
+msgstr ""
+"Использование `PLIST_FILES` не должно быть чрезмерным. При поиске "
+"происхождения файла обычно просматривают файлы [.filename]#pkg-plist# в "
+"дереве портов с помощью grep. Указание файлов в `PLIST_FILES` в "
+"[.filename]#Makefile# усложняет этот поиск."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:187
+msgid ""
+"If a port needs to create an empty directory, or creates directories outside "
+"of [.filename]#${PREFIX}# during installation, refer to crossref:plist[plist-"
+"dir-cleaning,Cleaning Up Empty Directories] for more information."
+msgstr ""
+"Если порту требуется создать пустой каталог или он создает каталоги вне "
+"[.filename]#${PREFIX}# во время установки, обратитесь к разделу "
+"crossref:plist[plist-dir-cleaning,Очистка пустых каталогов] для получения "
+"дополнительной информации."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:193
+msgid ""
+"As `PLIST_FILES` is a man:make[1] variable, any entry with spaces must be "
+"quoted. For example, if using keywords described in man:pkg-create[8] and "
+"crossref:plist[plist-keywords,Expanding Package List with Keywords], the "
+"entry must be quoted."
+msgstr ""
+"Поскольку `PLIST_FILES` является переменной man:make[1], любая запись с "
+"пробелами должна быть заключена в кавычки. Например, при использовании "
+"ключевых слов, описанных в man:pkg-create[8] и crossref:plist[plist-"
+"keywords,Расширение списка пакетов с помощью ключевых слов], запись должна "
+"быть заключена в кавычки."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:197
+#, no-wrap
+msgid "PLIST_FILES=\t\"@sample ${ETCDIR}/oneko.conf.sample\"\n"
+msgstr "PLIST_FILES=\t\"@sample ${ETCDIR}/oneko.conf.sample\"\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:201
+msgid ""
+"Later we will see how [.filename]#pkg-plist# and `PLIST_FILES` can be used "
+"to fulfill crossref:plist[plist,more sophisticated tasks]."
+msgstr ""
+"Позже мы увидим, как [.filename]#pkg-plist# и `PLIST_FILES` могут "
+"использоваться для выполнения crossref:plist[plist,более сложных задач]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:203
+#, no-wrap
+msgid "Creating the Checksum File"
+msgstr "Создание файла с контрольной суммой"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:208
+msgid ""
+"Just type `make makesum`. The ports framework will automatically generate "
+"[.filename]#distinfo#. Do not try to generate the file manually."
+msgstr ""
+"Просто введите команду `make makesum`. Правила утилиты make автоматически "
+"сгенерируют файл [.filename]#distinfo#. Не пытайтесь создавать этот файл "
+"вручную."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:210
+#, no-wrap
+msgid "Testing the Port"
+msgstr "Тестирование порта"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:214
+msgid ""
+"Make sure that the port rules do exactly what is desired, including "
+"packaging up the port. These are the important points to verify:"
+msgstr ""
+"Вы должны удостовериться, что правила построения порта выполняют именно то, "
+"что вы хотите, включая создание пакета для порта. Вот те важные вещи, "
+"которые вы должны проверить:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:216
+msgid ""
+"[.filename]#pkg-plist# does not contain anything not installed by the port."
+msgstr ""
+"[.filename]#pkg-plist# не содержит ничего сверх того, что устанавливается "
+"портом."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:217
+msgid ""
+"[.filename]#pkg-plist# contains everything that is installed by the port."
+msgstr ""
+"[.filename]#pkg-plist# содержит абсолютно все, что устанавливается портом."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:218
+msgid ""
+"The port can be installed using the `install` target. This verifies that the "
+"install script works correctly."
+msgstr ""
+"Порт может быть установлен с помощью указания цели `install`. Это позволяет "
+"убедиться в правильной работе сценария установки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:219
+msgid ""
+"The port can be deinstalled properly using the `deinstall` target. This "
+"verifies that the deinstall script works correctly."
+msgstr ""
+"Порт может быть правильным образом удалён с помощью указания цели "
+"`deinstall`. Это позволяет убедиться в правильной работе сценария удаления."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:220
+msgid ""
+"The port only has access to network resources during the `fetch` target "
+"phase. This is important for package builders, such as package:ports-mgmt/"
+"poudriere[]."
+msgstr ""
+"Порт имеет доступ к сетевым ресурсам только во время фазы цели `fetch`. Это "
+"важно для сборщиков пакетов, таких как package:ports-mgmt/poudriere[]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:221
+msgid ""
+"Make sure that `make package` can be run as a normal user (that is, not as "
+"`root`). If that fails, the software may need to be patched. See also "
+"crossref:uses[uses-fakeroot,`fakeroot`] and crossref:uses[uses-"
+"uidfix,`uidfix`]."
+msgstr ""
+"Убедитесь, что команду `make package` можно выполнить от имени обычного "
+"пользователя (то есть не от `root`). Если это не работает, возможно, "
+"потребуется исправить программное обеспечение. См. также crossref:uses[uses-"
+"fakeroot,`fakeroot`] и crossref:uses[uses-uidfix,`uidfix`]."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:223
+#, no-wrap
+msgid "Procedure: Recommended Test Ordering"
+msgstr "*Procedure: Рекомендуемый порядок проверки*"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:225
+msgid "`make stage`"
+msgstr "`make stage`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:226
+msgid "`make stage-qa`"
+msgstr "`make check-orphans`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:227
+msgid "`make package`"
+msgstr "`make package`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:228
+msgid "`make install`"
+msgstr "`make install`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:229
+msgid "`make deinstall`"
+msgstr "`make deinstall`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:230
+msgid "`make package` (as user)"
+msgstr "`make package` (как пользователь)"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:232
+msgid "Make certain no warnings are shown in any of the stages."
+msgstr "Убедитесь, что на любом из этапов не выдается никаких предупреждений."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:235
+msgid ""
+"Thorough automated testing can be done with package:ports-mgmt/poudriere[] "
+"from the Ports Collection, see crossref:testing[testing-poudriere,poudriere] "
+"for more information. It maintains `jails` where all of the steps shown "
+"above can be tested without affecting the state of the host system."
+msgstr ""
+"Тщательное автоматизированное тестирование можно выполнить с помощью "
+"package:ports-mgmt/poudriere[] из коллекции портов, дополнительную "
+"информацию см. в crossref:testing[testing-poudriere,poudriere]. Он "
+"поддерживает `клетки`, в которых можно протестировать все указанные выше "
+"шаги без воздействия на состояние основной системы."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:237
+#, no-wrap
+msgid "Checking the Port with `portlint`"
+msgstr "Проверка вашего порта утилитой `portlint`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:242
+msgid ""
+"Please use `portlint` to see if the port conforms to our guidelines. The "
+"package:ports-mgmt/portlint[] program is part of the ports collection. In "
+"particular, check that the crossref:porting-samplem[porting-"
+"samplem,Makefile] is in the right shape and the crossref:porting-"
+"pkgname[porting-pkgname,package] is named appropriately."
+msgstr ""
+"Будьте добры, пользуйтесь утилитой `portlint` для проверки того, что ваш "
+"порт соответствует нашим рекомендациям. Программа package:ports-mgmt/"
+"portlint[] является частью Коллекции Портов. В частности, вы можете захотеть "
+"проверить, правильно ли сформирован файл crossref:porting-samplem[porting-"
+"samplem,Makefile] и соответствующим ли образом именован crossref:porting-"
+"pkgname[porting-pkgname,пакет]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:246
+msgid ""
+"Do not blindly follow the output of `portlint`. It is a static lint tool and "
+"sometimes gets things wrong."
+msgstr ""
+"Не следуйте слепо выводу `portlint`. Это статический инструмент для "
+"проверки, и иногда он ошибается."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:249
+#, no-wrap
+msgid "Submitting the New Port"
+msgstr "Посылка нового порта"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:252
+msgid ""
+"Before submitting the new port, read the crossref:porting-dads[porting-"
+"dads,DOs and DON'Ts] section."
+msgstr ""
+"Перед посылкой нового порта прочитайте раздел о том, что crossref:porting-"
+"dads[porting-dads,можно и нельзя] делать."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:254
+msgid ""
+"Once happy with the port, the only thing remaining is to put it in the main "
+"FreeBSD ports tree and make everybody else happy about it too."
+msgstr ""
+"Когда вы наконец довольны своим первым портом, единственное, что осталось "
+"сделать, это включить его в основное дерево портов FreeBSD и осчастливить "
+"этим всех остальных."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:258
+msgid ""
+"We do not need the [.filename]#work# directory or the "
+"[.filename]#pkgname.txz# package, so delete them now."
+msgstr ""
+"Нам не нужны каталог [.filename]#work# или пакет [.filename]#pkgname.txz#, "
+"поэтому их можно удалить."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:262
+msgid ""
+"Next, create a man:patch[1], file. Assuming the port is called `oneko` and "
+"is in the `games` category."
+msgstr ""
+"Далее создайте файл man:patch[1]. Предположим, что порт называется `oneko` и "
+"находится в категории `games`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:264
+#, no-wrap
+msgid "Creating a [.filename]#.diff# for a New Port"
+msgstr "Создание [.filename]#.diff# для нового порта"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:268
+msgid ""
+"Add all the files with `git add .`, then review the diff with `git diff`. "
+"For example:"
+msgstr ""
+"Добавьте все файлы с помощью `git add .`, затем просмотрите изменения с "
+"помощью `git diff`. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:273
+#, no-wrap
+msgid ""
+"% git add .\n"
+"% git diff --staged\n"
+msgstr ""
+"% git add .\n"
+"% git diff --staged\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:277
+msgid ""
+"Make sure that all required files are included, then commit the change to "
+"your local branch and generate a patch with `git format-patch`"
+msgstr ""
+"Убедитесь, что все необходимые файлы включены, затем зафиксируйте изменение "
+"в вашей локальной ветке и создайте патч с помощью `git format-patch`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:282
+#, no-wrap
+msgid ""
+"% git commit\n"
+"% git format-patch origin/main\n"
+msgstr ""
+"% git commit\n"
+"% git format-patch origin/main\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:286
+msgid ""
+"Patch generated with `git format-patch` will include author identity and "
+"email addresses, making it easier for developers to apply (with `git am`) "
+"and give proper credit."
+msgstr ""
+"Патч, созданный с помощью `git format-patch`, будет содержать идентификатор "
+"автора и адреса электронной почты, что упрощает применение разработчиками (с "
+"помощью `git am`) и правильное указание авторства."
+
+#. type: delimited block * 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:290
+msgid ""
+"To make it easier for committers to apply the patch on their working copy of "
+"the ports tree, please generate the [.filename]#.diff# from the base of your "
+"ports tree."
+msgstr ""
+"Чтобы упростить применение патча для коммиттеров в их рабочей копии дерева "
+"портов, пожалуйста, создайте файл [.filename]#.diff# из корня вашего дерева "
+"портов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:297
+msgid ""
+"Submit [.filename]#oneko.diff# with the https://bugs.freebsd.org/submit/[bug "
+"submission form]. Use product \"Ports & Packages\", component \"Individual "
+"Port(s)\", and follow the guidelines shown there. Add a short description "
+"of the program to the Description field of the PR (perhaps a short version "
+"of `COMMENT`), and remember to add [.filename]#oneko.diff# as an attachment."
+msgstr ""
+"Отправьте файл [.filename]#oneko.diff# через https://bugs.freebsd.org/submit/"
+"[форму отправки отчётов об ошибках]. Укажите продукт \"Ports & Packages\", "
+"компонент \"Individual Port(s)\" и следуйте приведённым там инструкциям. "
+"Добавьте краткое описание программы в поле Description PR (например, "
+"сокращённую версию `COMMENT`) и не забудьте прикрепить файл "
+"[.filename]#oneko.diff#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:303
+msgid ""
+"Giving a good description in the summary of the problem report makes the "
+"work of port committers and triagers a lot easier. The expected format for "
+"new ports is \"[NEW PORT] _category/portname short description of the "
+"port_\". Using this scheme makes it easier and faster to begin the work of "
+"committing the new port."
+msgstr ""
+"Хорошее описание в заголовке сообщения о проблеме значительно облегчает "
+"работу коммиттеров портов. Для новых портов мы предпочитаем нечто вроде "
+"\"[NEW PORT] _категория/название_порта краткое описание порта_\". Следование "
+"этой схеме упрощает и ускоряет начало работы по добавлению нового порта."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:308
+msgid ""
+"After submitting the port, please be patient. The time needed to include a "
+"new port in FreeBSD can vary from a few days to a few months. A simple "
+"search form of the Problem Report database can be searched at https://"
+"bugs.freebsd.org/bugzilla/query.cgi[]."
+msgstr ""
+"После отправки порта, пожалуйста, потерпите. Время, необходимое для "
+"включения нового порта во FreeBSD, может занимать от нескольких дней до "
+"нескольких месяцев. https://bugs.freebsd.org/bugzilla/query.cgi[ Здесь] "
+"можно увидеть список ожидающих PR для портов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:310
+msgid ""
+"To get a listing of _open_ port PRs, select _Open_ and _Ports & Packages_ in "
+"the search form, then click btn:[Search]."
+msgstr ""
+"Чтобы получить список _открытых_ PR для портов, выберите _Open_ и _Ports & "
+"Packages_ в форме поиска, затем нажмите btn:[Search]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:313
+msgid ""
+"After looking at the new port, we will reply if necessary, and commit it to "
+"the tree. The submitter's name will also be added to the list of extref:"
+"{contributors}[Additional FreeBSD Contributors, contrib-additional] and "
+"other files."
+msgstr ""
+"После ознакомления с новым портом мы ответим, если это необходимо, и добавим "
+"его в дерево. Имя отправителя также будет добавлено в список extref:"
+"{contributors}[Дополнительных участников FreeBSD, contrib-additional] и "
+"другие файлы."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:318
+msgid ""
+"Previously it was possible to submit patches for new ports using a "
+"man:shar[1] file; this is no longer the case with the evolution of "
+"man:git[1]. Committers no longer accept man:shar[1] files as their use is "
+"prone to mistake and does not add the relevant entry in the category's "
+"[.filename]#Makefile#."
+msgstr ""
+"Ранее можно было отправлять исправления для новых портов, используя файл "
+"man:shar[1]; однако с развитием man:git[1] это больше не актуально. "
+"Коммиттеры больше не принимают файлы man:shar[1], так как их использование "
+"чревато ошибками и не добавляет соответствующую запись в "
+"[.filename]#Makefile# категории."
diff --git a/documentation/content/ru/books/porters-handbook/security/_index.adoc b/documentation/content/ru/books/porters-handbook/security/_index.adoc
index 6f75400cd0..77845b3b1c 100644
--- a/documentation/content/ru/books/porters-handbook/security/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/security/_index.adoc
@@ -1,22 +1,24 @@
---
-title: Глава 11. Безопасность портов
-prev: books/porters-handbook/upgrading
+description: 'Инструкции по безопасности при создании порта FreeBSD'
next: books/porters-handbook/porting-dads
-showBookMenu: true
-weight: 11
params:
- path: "/books/porters-handbook/security/"
+ path: /books/porters-handbook/security/
+prev: books/porters-handbook/upgrading
+showBookMenu: true
+tags: ["security", "porting", "ports", "VuXML"]
+title: 'Глава 12. Безопасность портов'
+weight: 12
---
[[security]]
-= Безопасность портов
+= Безопасность
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 11
+:sectnumoffset: 12
:partnums:
:source-highlighter: rouge
:experimental:
@@ -58,14 +60,14 @@ endif::[]
[[security-fix]]
== Исправление уязвимостей безопасности
-Что касается портов и пакетов, уязвимость безопасности изначально может появиться в исходном дистрибутиве или файлах порта. В первом случае, разработчик исходного программного обеспечения скорее всего сразу же выпустит патч или новую версию, и вам лишь понадобится сразу обновить порт в соответствии с исправлением автора. Если исправление по какой-то причине задерживается, вам следует либо <<dads-noinstall,пометить порт как `FORBIDDEN`>>, либо добавить в порт ваш собственный патч. В случае уязвимости порта просто исправьте этот порт как можно скорее. В любом случае нужно следовать <<port-upgrading,стандартной процедуре отправки вашего изменения>>, если вы не обладаете правами на коммит изменения непосредственно в дерево портов.
+Что касается портов и пакетов, уязвимость безопасности изначально может появиться в исходном дистрибутиве или файлах порта. В первом случае, разработчик исходного программного обеспечения скорее всего сразу же выпустит патч или новую версию, и вам лишь понадобится сразу обновить порт в соответствии с исправлением автора. Если исправление по какой-то причине задерживается, вам следует либо crossref:porting-dads[dads-noinstall,пометить порт как `FORBIDDEN`], либо добавить в порт ваш собственный патч. В случае уязвимости порта просто исправьте этот порт как можно скорее. В любом случае нужно следовать crossref:port-upgrading[port-upgrading,стандартной процедуре отправки вашего изменения], если вы не обладаете правами на коммит изменения непосредственно в дерево портов.
[IMPORTANT]
====
Быть коммиттером портов недостаточно для коммита произвольного порта. Помните, что обычно у портов есть сопровождающие, мнение которых вы должны учитывать.
====
-Пожалуйста, убедитесь, что ревизия порта после закрытия уязвимости увеличена. Вот как пользователи, обновляющие установленные пакеты на постоянной основе, увидят, что им нужно запустить обновление. Кроме того, новый пакет будет собран и распространен через FTP и WWW зеркала, замещая уязвимый. Если в процессе исправления уязвимости не было изменено значение `PORTVERSION`, то должно быть увеличено значение `PORTREVISION`. Вам следует увеличить значение `PORTREVISION` после добавления в порт файла с патчем, но не когда вы обновили порт до последней версии программного обеспечения, попутно затронув при этом `PORTVERSION`. За дальнейшей информацией обращайтесь к <<makefile-naming-revepoch,соответствующему разделу>>.
+Пожалуйста, убедитесь, что ревизия порта после закрытия уязвимости увеличена. Вот как пользователи, обновляющие установленные пакеты на постоянной основе, увидят, что им нужно запустить обновление. Кроме того, новый пакет будет собран и распространен через FTP и WWW зеркала, замещая уязвимый. Если в процессе исправления уязвимости не было изменено значение `PORTVERSION`, то должно быть увеличено значение `PORTREVISION`. Вам следует увеличить значение `PORTREVISION` после добавления в порт файла с патчем, но не когда вы обновили порт до последней версии программного обеспечения, попутно затронув при этом `PORTVERSION`. За дальнейшей информацией обращайтесь к crossref:makefiles[makefile-naming-revepoch,соответствующему разделу].
[[security-notify]]
== Обеспечение сообщества информацией
@@ -77,7 +79,7 @@ endif::[]
Учитывая огромное число портов в дереве, невозможно по каждому случаю выпускать бюллетень безопасности без создания флуда и потери внимания сообщества к моменту появления действительно серьезных причин. Поэтому уязвимости безопасности, обнаруженные в портах, записываются в http://vuxml.freebsd.org/[базу данных FreeBSD VuXML]. Члены Команды Офицеров Безопасности также отслеживают её на предмет появления вопросов, требующих их вмешательства.
-Если вы обладаете правами коммиттера, вы можете сам обновить базу данных VuXML. Так вы поможете Команде Офицеров Безопасности и своевременно пошлете ценную информацию сообществу. Тем не менее, если вы не являетесь коммиттером или верите, что нашли исключительно серьезную уязвимость, то не задумываясь свяжитесь с Командой Офицеров Безопасности напрямую как это описано на странице http://www.freebsd.org/security/#how[информационной безопасности FreeBSD].
+Если вы обладаете правами коммиттера, вы можете сам обновить базу данных VuXML. Так вы поможете Команде Офицеров Безопасности и своевременно пошлете ценную информацию сообществу. Тем не менее, если вы не являетесь коммиттером или верите, что нашли исключительно серьезную уязвимость, то не задумываясь свяжитесь с Командой Офицеров Безопасности напрямую как это описано на странице https://www.freebsd.org/security/#how[информационной безопасности FreeBSD].
База данных VuXML является документом XML. Его исходный файл [.filename]#vuln.xml# содержится прямо внутри порта package:security/vuxml[]. Следовательно, полное имя пути к файлу будет [.filename]#PORTSDIR/security/vuxml/vuln.xml#. Каждый раз, при обнаружении вами в порте уязвимости безопасности добавьте об этом запись в этот файл. Пока вы не знакомы с VuXML, лучшее, что вы можете сделать, это найти существующую запись, подпадающую под ваш случай, затем скопировать ее и использовать в качестве шаблона.
@@ -122,12 +124,8 @@ endif::[]
<references> <.>
<freebsdsa>SA-10:75.foo</freebsdsa> <.>
<freebsdpr>ports/987654</freebsdpr> <.>
- <cvename>CAN-2010-0201</cvename> <.>
- <cvename>CAN-2010-0466</cvename>
- <bid>96298</bid> <.>
- <certsa>CA-2010-99</certsa> <.>
+ <cvename>CVE-2023-48795</cvename> <.>
<certvu>740169</certvu> <.>
- <uscertsa>SA10-99A</uscertsa> <.>
<uscertta>SA10-99A</uscertta> <.>
<mlist msgid="201075606@hacker.com">http://marc.theaimsgroup.com/?l=bugtraq&amp;m=203886607825605</mlist> <.>
<url>http://j.r.hacker.com/advisories/1</url> <.>
@@ -148,7 +146,9 @@ endif::[]
<.> Здесь перечислены имена затронутых пакетов. Может быть дано несколько имен, поскольку некоторые пакеты могут быть основаны на одном главном порте или программном продукте. Сюда можно включить стабильную ветвь и ветвь разработки, локализованные версии и подчиненные порты, зависящие от различного выбора важных вариантов конфигурации, указанных на этапе построения.
-<.> Здесь указаны затронутые версии пакета(-ов) как один или более диапазонов с использованием комбинации элементов `<lt>`, `<le>`, `<eq>`, `<ge>`, и `<gt>`. Диапазоны внесённых версий не должны пересекаться.В спецификации диапазонов `\*` (звёздочка) означает наименьший номер версии. В частности, `2.*` меньше, чем `2.a`. Поэтому звездочка может быть использована в диапазоне для совпадения со всеми возможными `alpha`, `beta` и `RC` версиями. Как вариант, `<ge>2.*</ge><lt>3.*</lt>` выборочно совпадет с версией `2.x`, а `<ge>2.0</ge><lt>3.0</lt>` - нет, поскольку последнее не включает `2.r3` и совпадает с `3.b`.Пример выше указывает, что к затронутым относятся версии с `1.6` до `1.9` включительно, версии `2.x` до `2.4_1` и версия `3.0b1`.
+<.> Затронутые версии пакета(ов) указаны там как один или несколько диапазонов с использованием комбинации элементов `<lt>`, `<le>`, `<eq>`, `<ge>` и `<gt>`. Убедитесь, что указанные диапазоны версий не перекрываются. +
+В спецификации диапазона `\*` (звёздочка) обозначает наименьший номер версии. В частности, `2.*` меньше, чем `2.a`. Таким образом, звёздочка может использоваться в диапазоне для соответствия всем возможным версиям `alpha`, `beta` и `RC`. Например, `<ge>2.*</ge><lt>3.*</lt>` выборочно соответствует каждой версии `2.x`, тогда как `<ge>2.0</ge><lt>3.0</lt>` — нет, поскольку последний пропускает `2.r3` и включает `3.b`. +
+Приведённый пример указывает, что затронуты версии `1.6` и выше, но не включая `1.9`, версии `2.x` до `2.4_1` и версия `3.0b1`.
<.> Некоторые связанные группы пакетов (в конечном счете, порты) могут быть указаны в разделе `<affected>`. Это можно использовать, если некоторые программные продукты (скажем, FooBar, FreeBar and OpenBar) являются производными от общей кодовой базы и всё еще совместно используют её ошибки и уязвимости. Имейте в виду отличие от перечисления множественных имён в одном разделе <package>.
@@ -158,112 +158,124 @@ endif::[]
<.> Этот раздел содержит ссылки на имеющие отношение документы. Приветствуется как можно большее количество ссылок.
-<.> Это http://www.freebsd.org/security/#adv[бюллетень безопасности FreeBSD].
+<.> Это https://www.freebsd.org/security/#adv[бюллетень безопасности FreeBSD].
-<.> Это http://www.freebsd.org/support/#gnats[сообщение об ошибке FreeBSD].
+<.> Это https://www.freebsd.org/support/[сообщение об ошибке FreeBSD].
-<.> Идентификатор http://www.cve.mitre.org/[MITRE CVE].
+<.> Идентификатор https://cve.mitre.org/[MITRE CVE].
-<.> Это http://www.securityfocus.com/bid[SecurityFocus Bug ID].
+<.> Это https://www.kb.cert.org/vuls/[SecurityFocus Bug ID].
-<.> Бюллетень безопасности http://www.cert.org/[US-CERT].
+<.> Бюллетень безопасности https://www.cisa.gov/news-events/cybersecurity-advisories[US-CERT].
-<.> Примечание к уязвимости http://www.cert.org/[US-CERT].
-
-<.> Уведомление системы Cyber Security Alert http://www.cert.org/[US-CERT].
+<.> URL к архивному сообщению в списке рассылки. Атрибут `msgid` является необязательным и может указывать на message ID сообщения.
-<.> Уведомление системы Technical Cyber Security Alert http://www.cert.org/[US-CERT].
+<.> Это общий URL. Используйте его только если ни одна из других категорий ссылок не подходит.
-<.> URL к архивному сообщению в списке рассылки. Атрибут `msgid` является необязательным и может указывать на message ID сообщения.
+<.> Это дата, когда проблема была раскрыта (_ГГГГ-ММ-ДД_).
-<.> Основной URL. Должен быть использован в случае, если не подходит ни одна из категорий источника.
+<.> Это дата добавления записи (_ГГГГ-ММ-ДД_).
-<.> Дата последнего изменения любой информации данной записи (_YYYY-MM-DD_). Новые записи не должны включать это поле. Поле должно быть добавлено после редактирования существующей записи.
+<.> Это дата, когда любая информация в записи была последний раз изменена (_ГГГГ-ММ-ДД_). Новые записи не должны включать это поле. Добавьте его при редактировании существующей записи.
[[security-notify-vuxml-testing]]
=== Тестирование ваших изменений в базе данных VuXML
-Предположим, что вы только что написали или заполнили запись об уязвимости в пакете `clamav`, которая была исправлена в версии `0.65_7`.
+Этот пример описывает новую запись об уязвимости в пакете `dropbear`, которая была исправлена в версии `dropbear-2013.59`.
-Прежде всего, вам нужно _установить_ последние версии портов package:ports-mgmt/portaudit[], package:ports-mgmt/portaudit-db[] и package:security/vuxml[].
+В качестве предварительного условия установите свежую версию порта package:security/vuxml[].
-[NOTE]
-====
-Для запуска `packaudit` вы должны обладать правами на запись в [.filename]#DATABASEDIR#; как правило, это [.filename]#/var/db/portaudit#.
+Сначала проверьте, есть ли уже запись об этой уязвимости. Если бы такая запись существовала, она соответствовала бы предыдущей версии пакета `2013.58`:
-Для использования другого каталога присвойте переменной окружения [.filename]#DATABASEDIR# другой путь.
-
-Если вы работаете в каталоге, отличном от [.filename]#${PORTSDIR}/security/vuxml#, присвойте переменной окружения [.filename]#VUXMLDIR# путь к каталогу, в котором находится [.filename]#vuln.xml#.
-====
+[source, shell]
+....
+% pkg audit dropbear-2013.58
+....
-Во-первых, проверьте, нет ли уже записи об этой уязвимости. Если такая запись есть, она совпадёт с предыдущей версией пакета `0.65_6`:
+Если запись не найдена, добавьте новую запись для этой уязвимости.
-[source,shell]
+[source, shell]
....
-% packaudit
-% portaudit clamav-0.65_6
+% cd ${PORTSDIR}/security/vuxml
+% make newentry
....
-Если ничего не найдено, значит вы получили зеленый свет для добавления новой записи для этой уязвимости.
+Если уязвимость имеет идентификатор https://cve.mitre.org/[MITRE CVE], можно использовать следующую команду:
-[source,shell]
+[source, shell]
....
% cd ${PORTSDIR}/security/vuxml
-% make newentry
+% make newentry CVE_ID=CVE-YYYY-XXXXX
....
-Когда вы закончите, проверьте синтаксис и форматирование.
+где `CVE-YYYYY-XXXX` является действительным идентификатором CVE.
-[source,shell]
+Если уязвимость относится к FreeBSD Security Advisory, вместо этого можно использовать следующую команду:
+
+[source, shell]
....
-% make validate
+% cd ${PORTSDIR}/security/vuxml
+% make newentry SA_ID=FreeBSD-SA-YY-XXXXXX.asc
....
-[NOTE]
-====
-Вам понадобится установить по крайней мере один из следующих пакетов: package:textproc/libxml2[], package:textproc/jade[].
-====
+где `FreeBSD-SA-YY-XXXXXX.asc` является опубликованным https://www.freebsd.org/security/advisories/[FreeBSD Security Advisory].
-Теперь выполните перепостроение базы данных `portaudit` из файла VuXML:
+Проверьте его синтаксис и форматирование:
-[source,shell]
+[source, shell]
....
-% packaudit
+% make validate
....
-Чтобы убедиться, что раздел `<affected>` в вашей записи совпадает с правильными пакетами, выполните следующую команду:
+Предыдущая команда создает файл [.filename]#vuln-flat.xml#. Его также можно создать с помощью:
-[source,shell]
+[source, shell]
....
-% portaudit -f /usr/ports/INDEX -r uuid
+% make vuln-flat.xml
....
[NOTE]
====
-Для лучшего понимания синтаксиса этой команды обращайтесь к man:portaudit[1].
+Должен быть установлен хотя бы один из следующих пакетов: package:textproc/libxml2[], package:textproc/jade[].
====
-Убедитесь, что ваша запись не производит ложных совпадений в выводе.
+Проверьте, что раздел `<affected>` записи соответствует правильным пакетам:
-Теперь проверьте, совпадает ли ваша запись с нужными версиями пакета:
-
-[source,shell]
+[source, shell]
+....
+% pkg audit -f ${PORTSDIR}/security/vuxml/vuln-flat.xml dropbear-2013.58
....
-% portaudit clamav-0.65_6 clamav-0.65_7
-Affected package: clamav-0.65_6 (matched by clamav<0.65_7)
-Type of problem: clamav remote denial-of-service.
-Reference: <http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-0020ed76ef5a.html>
-1 problem(s) found.
+Убедитесь, что запись не создает ложных совпадений в выводе.
+
+Теперь проверьте, соответствуют ли записи правильные версии пакетов:
+
+[source, shell]
+....
+% pkg audit -f ${PORTSDIR}/security/vuxml/vuln-flat.xml dropbear-2013.58 dropbear-2013.59
+dropbear-2012.58 is vulnerable:
+dropbear -- exposure of sensitive information, DoS
+CVE: CVE-2013-4434
+CVE: CVE-2013-4421
+WWW: https://portaudit.FreeBSD.org/8c9b48d1-3715-11e3-a624-00262d8b701d.html
+
+1 problem(s) in the installed packages found.
....
-Первая версия должна совпасть, а последняя нет.
+Предыдущая версия совпадает, а последняя — нет.
-В заключение проверьте, что веб-страница, сформированная из базы данных VuXML, выглядит как положено:
+[[security-xcheck-vuxml]]
+=== Контрольный список для новой записи в VuXML
-[source,shell]
+* Проверьте название порта. Иногда имя проекта в вышестоящем репозитории не полностью совпадает с именем порта.
+* Добавить все флейворы. Если у порта есть варианты, все имена пакетов должны быть добавлены в запись как `<package>`. Используйте следующий скрипт для генерации всех имен пакетов с вариантами:
++
+[source, shell]
....
-% mkdir -p ~/public_html/portaudit
-% packaudit
-% lynx ~/public_html/portaudit/74a9541d-5d6c-11d8-80e3-0020ed76ef5a.html
+% for flavor in $(make -V FLAVORS); do FLAVOR="${flavor}" make -VPKGNAME;done
....
++
+* Проверить, имеет ли порт `PORTEPOCH`. Приведённый выше фрагмент скрипта помогает в этом. Если порт использует `PORTEPOCH`, обязательно добавить его в тег `<range>`.
+* Перепроверьте диапазоны. В случае диапазонов, ограниченных с обеих сторон, убедитесь, что элементы `<ge>` и `<lt>` находятся внутри одного тега `<range>`. В противном случае запись может определить перекрывающийся диапазон.
+* Проверка производных версий. Если в вышестоящем проекте обнаружена уязвимость, проверьте, затронуты ли также производные или форки проекта, включённые в дерево портов. Например, если уязвимость обнаружена в package:www/firefox[], оцените, есть ли такая же уязвимость в производных, таких как package:www/librewolf[], package:www/waterfox[] или других подобных проектах. Включите все затронутые производные в запись VuXML, чтобы пользователи этих портов были проинформированы. Также проверьте наличие Linux-версий этого порта в дереве. Например, уязвимости в package:databases/sqlite3[] скорее всего затрагивают и пакеты вроде package:databases/linux-c7-sqlite3[].
+* Не делайте коммит записи, не запустив сначала `make validate`.
diff --git a/documentation/content/ru/books/porters-handbook/security/_index.po b/documentation/content/ru/books/porters-handbook/security/_index.po
new file mode 100644
index 0000000000..7d28e22d9c
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/security/_index.po
@@ -0,0 +1,858 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-08-20 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbooksecurity_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:1
+#, no-wrap
+msgid "Security instructions when making a FreeBSD Port"
+msgstr "Инструкции по безопасности при создании порта FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:1
+#, no-wrap
+msgid "Chapter 12. Security"
+msgstr "Глава 12. Безопасность портов"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:14
+#, no-wrap
+msgid "Security"
+msgstr "Безопасность"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:52
+#, no-wrap
+msgid "Why Security is So Important"
+msgstr "Почему безопасность так важна"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:58
+msgid ""
+"Bugs are occasionally introduced to the software. Arguably, the most "
+"dangerous of them are those opening security vulnerabilities. From the "
+"technical viewpoint, such vulnerabilities are to be closed by exterminating "
+"the bugs that caused them. However, the policies for handling mere bugs and "
+"security vulnerabilities are very different."
+msgstr ""
+"Ошибки в программном обеспечении появляются случайно. Возможно, самые "
+"опасные из них те, что создают уязвимости безопасности. С технической точки "
+"зрения подобные уязвимости должны быть закрыты путем исправления вызывающих "
+"их ошибок. Тем не менее, политики обработки несущественных ошибок и "
+"уязвимостей очень различаются."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:64
+msgid ""
+"A typical small bug affects only those users who have enabled some "
+"combination of options triggering the bug. The developer will eventually "
+"release a patch followed by a new version of the software, free of the bug, "
+"but the majority of users will not take the trouble of upgrading immediately "
+"because the bug has never vexed them. A critical bug that may cause data "
+"loss represents a graver issue. Nevertheless, prudent users know that a lot "
+"of possible accidents, besides software bugs, are likely to lead to data "
+"loss, and so they make backups of important data; in addition, a critical "
+"bug will be discovered really soon."
+msgstr ""
+"Обычная небольшая ошибка затрагивает только тех пользователей, которые "
+"задействуют некоторые комбинации настроек, активирующие эту ошибку. "
+"Разработчик в конечном счете выпустит патч, а зачтем новую версию "
+"программного обеспечения, свободного от ошибки, но большинство пользователей "
+"не посчитают нужным сразу же произвести обновление, поскольку эта ошибка "
+"никогда у них не проявлялась. Критическая ошибка, которая может приводить к "
+"потере данных, представляет серьезную проблему. Тем не менее, "
+"предусмотрительные пользователи знают, что большинство возможных "
+"происшествий, и среди них программные ошибки, скорее всего приводят к потере "
+"данных, поэтому они выполняют резервное копирование важных данных; "
+"дополнительно, критическая ошибка будет обнаружена очень скоро."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:72
+msgid ""
+"A security vulnerability is all different. First, it may remain unnoticed "
+"for years because often it does not cause software malfunction. Second, a "
+"malicious party can use it to gain unauthorized access to a vulnerable "
+"system, to destroy or alter sensitive data; and in the worst case the user "
+"will not even notice the harm caused. Third, exposing a vulnerable system "
+"often assists attackers to break into other systems that could not be "
+"compromised otherwise. Therefore closing a vulnerability alone is not "
+"enough: notify the audience of it in the most clear and comprehensive "
+"manner, which will allow them to evaluate the danger and take appropriate "
+"action."
+msgstr ""
+"С уязвимостью безопасности всё иначе. Во-первых, она может сохраняться "
+"необнаруженной целые годы, потому что чаще всего не вызывает ошибок в "
+"работе. Во-вторых, компания злоумышленников может использовать ее для "
+"получения неавторизованного доступа к уязвимой системе, уничтожить или "
+"подменить важные данные; в худшем случае пользователь даже не заметит "
+"нанесенный урон. В-третьих, взлом уязвимой системы часто упрощает задачу "
+"проникновения атакующих в другие системы, которые не могут быть "
+"скомпрометированы иначе. Таким образом, устранение уязвимости как таковой "
+"недостаточно: следует разослать всем заинтересованным уведомления в наиболее "
+"понятной и исчерпывающей форме, что позволит оценить риск и предпринять "
+"подходящие меры."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:74
+#, no-wrap
+msgid "Fixing Security Vulnerabilities"
+msgstr "Исправление уязвимостей безопасности"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:82
+msgid ""
+"While on the subject of ports and packages, a security vulnerability may "
+"initially appear in the original distribution or in the port files. In the "
+"former case, the original software developer is likely to release a patch or "
+"a new version instantly. Update the port promptly with respect to the "
+"author's fix. If the fix is delayed for some reason, either "
+"crossref:porting-dads[dads-noinstall,mark the port as `FORBIDDEN`] or "
+"introduce a patch file to the port. In the case of a vulnerable port, just "
+"fix the port as soon as possible. In either case, follow crossref:port-"
+"upgrading[port-upgrading,the standard procedure for submitting changes] "
+"unless having rights to commit it directly to the ports tree."
+msgstr ""
+"Что касается портов и пакетов, уязвимость безопасности изначально может "
+"появиться в исходном дистрибутиве или файлах порта. В первом случае, "
+"разработчик исходного программного обеспечения скорее всего сразу же "
+"выпустит патч или новую версию, и вам лишь понадобится сразу обновить порт в "
+"соответствии с исправлением автора. Если исправление по какой-то причине "
+"задерживается, вам следует либо crossref:porting-dads[dads-"
+"noinstall,пометить порт как `FORBIDDEN`], либо добавить в порт ваш "
+"собственный патч. В случае уязвимости порта просто исправьте этот порт как "
+"можно скорее. В любом случае нужно следовать crossref:port-upgrading[port-"
+"upgrading,стандартной процедуре отправки вашего изменения], если вы не "
+"обладаете правами на коммит изменения непосредственно в дерево портов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:87
+msgid ""
+"Being a ports committer is not enough to commit to an arbitrary port. "
+"Remember that ports usually have maintainers, must be respected."
+msgstr ""
+"Быть коммиттером портов недостаточно для коммита произвольного порта. "
+"Помните, что обычно у портов есть сопровождающие, мнение которых вы должны "
+"учитывать."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:95
+msgid ""
+"Please make sure that the port's revision is bumped as soon as the "
+"vulnerability has been closed. That is how the users who upgrade installed "
+"packages on a regular basis will see they need to run an update. Besides, a "
+"new package will be built and distributed over FTP and WWW mirrors, "
+"replacing the vulnerable one. Bump `PORTREVISION` unless `DISTVERSION` has "
+"changed in the course of correcting the vulnerability. That is, bump "
+"`PORTREVISION` if adding a patch file to the port, but do not bump it if "
+"updating the port to the latest software version and thus already touched "
+"`DISTVERSION`. Please refer to the crossref:makefiles[makefile-naming-"
+"revepoch,corresponding section] for more information."
+msgstr ""
+"Пожалуйста, убедитесь, что ревизия порта после закрытия уязвимости "
+"увеличена. Вот как пользователи, обновляющие установленные пакеты на "
+"постоянной основе, увидят, что им нужно запустить обновление. Кроме того, "
+"новый пакет будет собран и распространен через FTP и WWW зеркала, замещая "
+"уязвимый. Если в процессе исправления уязвимости не было изменено значение "
+"`PORTVERSION`, то должно быть увеличено значение `PORTREVISION`. Вам следует "
+"увеличить значение `PORTREVISION` после добавления в порт файла с патчем, но "
+"не когда вы обновили порт до последней версии программного обеспечения, "
+"попутно затронув при этом `PORTVERSION`. За дальнейшей информацией "
+"обращайтесь к crossref:makefiles[makefile-naming-revepoch,соответствующему "
+"разделу]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:97
+#, no-wrap
+msgid "Keeping the Community Informed"
+msgstr "Обеспечение сообщества информацией"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:100
+#, no-wrap
+msgid "The VuXML Database"
+msgstr "База данных VuXML"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:108
+msgid ""
+"A very important and urgent step to take as early after a security "
+"vulnerability is discovered as possible is to notify the community of port "
+"users about the jeopardy. Such notification serves two purposes. First, if "
+"the danger is really severe it will be wise to apply an instant workaround. "
+"For example, stop the affected network service or even deinstall the port "
+"completely until the vulnerability is closed. Second, a lot of users tend "
+"to upgrade installed packages only occasionally. They will know from the "
+"notification that they _must_ update the package without delay as soon as a "
+"corrected version is available."
+msgstr ""
+"Очень важным и первостепенным шагом при действии как можно раньше после "
+"раскрытия уязвимости является уведомление сообщества пользователей порта об "
+"опасности. Такие уведомления служат двум целям. Во-первых, в случае "
+"действительно серьезной угрозы, будет посоветовано применить мгновенное "
+"воздействие. Например, остановить затрагиваемый сетевой сервис или даже "
+"удалить порт целиком, пока уязвимость не будет устранена. Во-вторых, масса "
+"пользователей имеет тенденцию обновлять установленные пакеты только от "
+"случая к случаю. Из уведомления они узнают, что _должны_ обновить пакет без "
+"промедления сразу же после появления исправленной версии."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:112
+msgid ""
+"Given the huge number of ports in the tree, a security advisory cannot be "
+"issued on each incident without creating a flood and losing the attention of "
+"the audience when it comes to really serious matters. Therefore security "
+"vulnerabilities found in ports are recorded in https://vuxml.freebsd.org/"
+"[the FreeBSD VuXML database]. The Security Officer Team members also "
+"monitor it for issues requiring their intervention."
+msgstr ""
+"Учитывая огромное число портов в дереве, невозможно по каждому случаю "
+"выпускать бюллетень безопасности без создания флуда и потери внимания "
+"сообщества к моменту появления действительно серьезных причин. Поэтому "
+"уязвимости безопасности, обнаруженные в портах, записываются в http://"
+"vuxml.freebsd.org/[базу данных FreeBSD VuXML]. Члены Команды Офицеров "
+"Безопасности также отслеживают её на предмет появления вопросов, требующих "
+"их вмешательства."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:115
+msgid ""
+"Committers can update the VuXML database themselves, assisting the Security "
+"Officer Team and delivering crucial information to the community more "
+"quickly. Those who are not committers or have discovered an exceptionally "
+"severe vulnerability should not hesitate to contact the Security Officer "
+"Team directly, as described on the https://www.freebsd.org/security/"
+"#how[FreeBSD Security Information] page."
+msgstr ""
+"Если вы обладаете правами коммиттера, вы можете сам обновить базу данных "
+"VuXML. Так вы поможете Команде Офицеров Безопасности и своевременно пошлете "
+"ценную информацию сообществу. Тем не менее, если вы не являетесь коммиттером "
+"или верите, что нашли исключительно серьезную уязвимость, то не задумываясь "
+"свяжитесь с Командой Офицеров Безопасности напрямую как это описано на "
+"странице https://www.freebsd.org/security/#how[информационной безопасности "
+"FreeBSD]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:121
+msgid ""
+"The VuXML database is an XML document. Its source file "
+"[.filename]#vuln.xml# is kept right inside the port package:security/"
+"vuxml[]. Therefore the file's full pathname will be [.filename]#PORTSDIR/"
+"security/vuxml/vuln.xml#. Each time a security vulnerability is discovered "
+"in a port, please add an entry for it to that file. Until familiar with "
+"VuXML, the best thing to do is to find an existing entry fitting the case at "
+"hand, then copy it and use it as a template."
+msgstr ""
+"База данных VuXML является документом XML. Его исходный файл "
+"[.filename]#vuln.xml# содержится прямо внутри порта package:security/"
+"vuxml[]. Следовательно, полное имя пути к файлу будет [.filename]#PORTSDIR/"
+"security/vuxml/vuln.xml#. Каждый раз, при обнаружении вами в порте "
+"уязвимости безопасности добавьте об этом запись в этот файл. Пока вы не "
+"знакомы с VuXML, лучшее, что вы можете сделать, это найти существующую "
+"запись, подпадающую под ваш случай, затем скопировать ее и использовать в "
+"качестве шаблона."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:123
+#, no-wrap
+msgid "A Short Introduction to VuXML"
+msgstr "Короткое вступление в VuXML"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:135
+msgid ""
+"The full-blown XML format is complex, and far beyond the scope of this "
+"book. However, to gain basic insight on the structure of a VuXML entry only "
+"the notion of tags is needed. XML tag names are enclosed in angle "
+"brackets. Each opening <tag> must have a matching closing </tag>. Tags may "
+"be nested. If nesting, the inner tags must be closed before the outer ones. "
+"There is a hierarchy of tags, that is, more complex rules of nesting them. "
+"This is similar to HTML. The major difference is that XML is "
+"e__X__tensible, that is, based on defining custom tags. Due to its "
+"intrinsic structure XML puts otherwise amorphous data into shape. VuXML is "
+"particularly tailored to mark up descriptions of security vulnerabilities."
+msgstr ""
+"В совокупности XML является очень сложным форматом, и его описание выходит "
+"далеко за рамки этой книги. Тем не менее, для достижения основного понимания "
+"структуры записи VuXML вам понадобится всего лишь понять теги. Имена тегов "
+"XML обрамляются в угловые скобки. Каждый открывающий <tag> должен иметь "
+"совпадающий закрывающий </tag>. Теги могут быть вложенными. При вложенности "
+"внутренние теги должны быть закрыты до закрытия внешних. Существует иерархия "
+"тегов, т.е. более сложные правила вкладывания тегов. Это похоже на HTML. "
+"Основное отличие в расширяемости XML, т.е. в определении собственных тегов. "
+"Из-за своей характерной структуры XML придает форму разрозненным данным. В "
+"частности, XML подходит для разметки описаний уязвимостей безопасности."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:137
+msgid "Now consider a realistic VuXML entry:"
+msgstr "Теперь рассмотрим настоящую запись VuXML:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:184
+#, no-wrap
+msgid ""
+"<vuln vid=\"f4bc80f4-da62-11d8-90ea-0004ac98a7b9\"> <.>\n"
+" <topic>Several vulnerabilities found in Foo</topic> <.>\n"
+" <affects>\n"
+" <package>\n"
+" <name>foo</name> <.>\n"
+" <name>foo-devel</name>\n"
+" <name>ja-foo</name>\n"
+" <range><ge>1.6</ge><lt>1.9</lt></range> <.>\n"
+" <range><ge>2.*</ge><lt>2.4_1</lt></range>\n"
+" <range><eq>3.0b1</eq></range>\n"
+" </package>\n"
+" <package>\n"
+" <name>openfoo</name> <.>\n"
+" <range><lt>1.10_7</lt></range> <.>\n"
+" <range><ge>1.2,1</ge><lt>1.3_1,1</lt></range>\n"
+" </package>\n"
+" </affects>\n"
+" <description>\n"
+" <body xmlns=\"http://www.w3.org/1999/xhtml\">\n"
+" <p>J. Random Hacker reports:</p> <.>\n"
+" <blockquote\n"
+" cite=\"http://j.r.hacker.com/advisories/1\">\n"
+" <p>Several issues in the Foo software may be exploited\n"
+" via carefully crafted QUUX requests. These requests will\n"
+" permit the injection of Bar code, mumble theft, and the\n"
+" readability of the Foo administrator account.</p>\n"
+" </blockquote>\n"
+" </body>\n"
+" </description>\n"
+" <references> <.>\n"
+" <freebsdsa>SA-10:75.foo</freebsdsa> <.>\n"
+" <freebsdpr>ports/987654</freebsdpr> <.>\n"
+" <cvename>CVE-2023-48795</cvename> <.>\n"
+" <certvu>740169</certvu> <.>\n"
+" <uscertta>SA10-99A</uscertta> <.>\n"
+" <mlist msgid=\"201075606@hacker.com\">http://marc.theaimsgroup.com/?l=bugtraq&amp;m=203886607825605</mlist> <.>\n"
+" <url>http://j.r.hacker.com/advisories/1</url> <.>\n"
+" </references>\n"
+" <dates>\n"
+" <discovery>2010-05-25</discovery> <.>\n"
+" <entry>2010-07-13</entry> <.>\n"
+" <modified>2010-09-17</modified> <.>\n"
+" </dates>\n"
+"</vuln>\n"
+msgstr ""
+"<vuln vid=\"f4bc80f4-da62-11d8-90ea-0004ac98a7b9\"> <.>\n"
+" <topic>Several vulnerabilities found in Foo</topic> <.>\n"
+" <affects>\n"
+" <package>\n"
+" <name>foo</name> <.>\n"
+" <name>foo-devel</name>\n"
+" <name>ja-foo</name>\n"
+" <range><ge>1.6</ge><lt>1.9</lt></range> <.>\n"
+" <range><ge>2.*</ge><lt>2.4_1</lt></range>\n"
+" <range><eq>3.0b1</eq></range>\n"
+" </package>\n"
+" <package>\n"
+" <name>openfoo</name> <.>\n"
+" <range><lt>1.10_7</lt></range> <.>\n"
+" <range><ge>1.2,1</ge><lt>1.3_1,1</lt></range>\n"
+" </package>\n"
+" </affects>\n"
+" <description>\n"
+" <body xmlns=\"http://www.w3.org/1999/xhtml\">\n"
+" <p>J. Random Hacker reports:</p> <.>\n"
+" <blockquote\n"
+" cite=\"http://j.r.hacker.com/advisories/1\">\n"
+" <p>Several issues in the Foo software may be exploited\n"
+" via carefully crafted QUUX requests. These requests will\n"
+" permit the injection of Bar code, mumble theft, and the\n"
+" readability of the Foo administrator account.</p>\n"
+" </blockquote>\n"
+" </body>\n"
+" </description>\n"
+" <references> <.>\n"
+" <freebsdsa>SA-10:75.foo</freebsdsa> <.>\n"
+" <freebsdpr>ports/987654</freebsdpr> <.>\n"
+" <cvename>CVE-2023-48795</cvename> <.>\n"
+" <certvu>740169</certvu> <.>\n"
+" <uscertta>SA10-99A</uscertta> <.>\n"
+" <mlist msgid=\"201075606@hacker.com\">http://marc.theaimsgroup.com/?l=bugtraq&amp;m=203886607825605</mlist> <.>\n"
+" <url>http://j.r.hacker.com/advisories/1</url> <.>\n"
+" </references>\n"
+" <dates>\n"
+" <discovery>2010-05-25</discovery> <.>\n"
+" <entry>2010-07-13</entry> <.>\n"
+" <modified>2010-09-17</modified> <.>\n"
+" </dates>\n"
+"</vuln>\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:187
+msgid ""
+"The tag names are supposed to be self-explanatory so we shall take a closer "
+"look only at fields which needs to be filled in:"
+msgstr ""
+"Имена тегов должны быть самодокументируемыми, чтобы мы сфокусировались "
+"только на полях, нужных нам для заполнения:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:190
+msgid ""
+"This is the top-level tag of a VuXML entry. It has a mandatory attribute, "
+"`vid`, specifying a universally unique identifier (UUID) for this entry (in "
+"quotes). Generate a UUID for each new VuXML entry (and do not forget to "
+"substitute it for the template UUID unless writing the entry from scratch). "
+"Use man:uuidgen[1] to generate a VuXML UUID."
+msgstr ""
+"Это тег верхнего уровня записи VuXML. У него есть обязательный атрибут "
+"`vid`, указывающий на универсальный уникальный идентификатор (UUID) для этой "
+"записи (в кавычках). Вы должны формировать UUID для каждой новой записи "
+"VuXML (и не забудьте заменить ее для шаблона UUID, если вы не пишете запись "
+"с нуля). Для получения VuXML UUID вы можете использовать man:uuidgen[1]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:192
+msgid "This is a one-line description of the issue found."
+msgstr "Однострочное описание найденной проблемы."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:194
+msgid ""
+"The names of packages affected are listed there. Multiple names can be given "
+"since several packages may be based on a single master port or software "
+"product. This may include stable and development branches, localized "
+"versions, and slave ports featuring different choices of important build-"
+"time configuration options."
+msgstr ""
+"Здесь перечислены имена затронутых пакетов. Может быть дано несколько имен, "
+"поскольку некоторые пакеты могут быть основаны на одном главном порте или "
+"программном продукте. Сюда можно включить стабильную ветвь и ветвь "
+"разработки, локализованные версии и подчиненные порты, зависящие от "
+"различного выбора важных вариантов конфигурации, указанных на этапе "
+"построения."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:198
+#, no-wrap
+msgid ""
+"Affected versions of the package(s) are specified there as one or more ranges using a combination of `<lt>`, `<le>`, `<eq>`, `<ge>`, and `<gt>` elements. Check that the version ranges given do not overlap.\n"
+"In a range specification, `\\*` (asterisk) denotes the smallest version number. In particular, `2.*` is less than `2.a`. Therefore an asterisk may be used for a range to match all possible `alpha`, `beta`, and `RC` versions. For instance, `<ge>2.*</ge><lt>3.*</lt>` will selectively match every `2.x` version while `<ge>2.0</ge><lt>3.0</lt>` will not since the latter misses `2.r3` and matches `3.b`.\n"
+"The above example specifies that affected are versions `1.6` and up to but not including `1.9`, versions `2.x` before `2.4_1`, and version `3.0b1`."
+msgstr ""
+"Затронутые версии пакета(ов) указаны там как один или несколько диапазонов с использованием комбинации элементов `<lt>`, `<le>`, `<eq>`, `<ge>` и `<gt>`. Убедитесь, что указанные диапазоны версий не перекрываются.\n"
+"В спецификации диапазона `\\*` (звёздочка) обозначает наименьший номер версии. В частности, `2.*` меньше, чем `2.a`. Таким образом, звёздочка может использоваться в диапазоне для соответствия всем возможным версиям `alpha`, `beta` и `RC`. Например, `<ge>2.*</ge><lt>3.*</lt>` выборочно соответствует каждой версии `2.x`, тогда как `<ge>2.0</ge><lt>3.0</lt>` — нет, поскольку последний пропускает `2.r3` и включает `3.b`.\n"
+"Приведённый пример указывает, что затронуты версии `1.6` и выше, но не включая `1.9`, версии `2.x` до `2.4_1` и версия `3.0b1`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:200
+msgid ""
+"Several related package groups (essentially, ports) can be listed in the "
+"`<affected>` section. This can be used if several software products (say "
+"FooBar, FreeBar and OpenBar) grow from the same code base and still share "
+"its bugs and vulnerabilities. Note the difference from listing multiple "
+"names within a single <package> section."
+msgstr ""
+"Некоторые связанные группы пакетов (в конечном счете, порты) могут быть "
+"указаны в разделе `<affected>`. Это можно использовать, если некоторые "
+"программные продукты (скажем, FooBar, FreeBar and OpenBar) являются "
+"производными от общей кодовой базы и всё еще совместно используют её ошибки "
+"и уязвимости. Имейте в виду отличие от перечисления множественных имён в "
+"одном разделе <package>."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:202
+msgid ""
+"The version ranges have to allow for `PORTEPOCH` and `PORTREVISION` if "
+"applicable. Please remember that according to the collation rules, a version "
+"with a non-zero `PORTEPOCH` is greater than any version without `PORTEPOCH`, "
+"for example, `3.0,1` is greater than `3.1` or even than `8.9`."
+msgstr ""
+"Диапазоны версий должны учитывать `PORTEPOCH` и `PORTREVISION`, если это "
+"применимо. Пожалуйста, помните, что в соответствии с правилами сравнения "
+"строк версия с ненулевым значением `PORTEPOCH` выше, чем любая версия без "
+"`PORTEPOCH`, например, `3.0,1` выше, чем `3.1` или даже `8.9`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:204
+msgid ""
+"This is a summary of the issue. XHTML is used in this field. At least "
+"enclosing `<p>` and `</p>` has to appear. More complex mark-up may be used, "
+"but only for the sake of accuracy and clarity: No eye candy please."
+msgstr ""
+"Сводная информация о проблеме. В этом поле используется XHTML. По крайней "
+"мере, должны быть обрамляющие `<p>` и `</p>`. Может быть использована более "
+"сложная разметка, но только в целях аккуратности и ясности: без эстетства, "
+"пожалуйста."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:206
+msgid ""
+"This section contains references to relevant documents. As many references "
+"as apply are encouraged."
+msgstr ""
+"Этот раздел содержит ссылки на имеющие отношение документы. Приветствуется "
+"как можно большее количество ссылок."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:208
+msgid ""
+"This is a https://www.freebsd.org/security/#adv[FreeBSD security advisory]."
+msgstr ""
+"Это https://www.freebsd.org/security/#adv[бюллетень безопасности FreeBSD]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:210
+msgid "This is a https://www.freebsd.org/support/[FreeBSD problem report]."
+msgstr "Это https://www.freebsd.org/support/[сообщение об ошибке FreeBSD]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:212
+msgid "This is a https://cve.mitre.org/[MITRE CVE] identifier."
+msgstr "Идентификатор https://cve.mitre.org/[MITRE CVE]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:214
+msgid "This is a https://www.kb.cert.org/vuls/[US-CERT] vulnerability note."
+msgstr "Это https://www.kb.cert.org/vuls/[SecurityFocus Bug ID]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:216
+msgid ""
+"This is a https://www.cisa.gov/news-events/cybersecurity-advisories[US-CERT] "
+"Technical Cyber Security Alert."
+msgstr ""
+"Бюллетень безопасности https://www.cisa.gov/news-events/cybersecurity-"
+"advisories[US-CERT]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:218
+msgid ""
+"This is a URL to an archived posting in a mailing list. The attribute "
+"`msgid` is optional and may specify the message ID of the posting."
+msgstr ""
+"URL к архивному сообщению в списке рассылки. Атрибут `msgid` является "
+"необязательным и может указывать на message ID сообщения."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:220
+msgid ""
+"This is a generic URL. Only it if none of the other reference categories "
+"apply."
+msgstr ""
+"Это общий URL. Используйте его только если ни одна из других категорий "
+"ссылок не подходит."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:222
+msgid "This is the date when the issue was disclosed (_YYYY-MM-DD_)."
+msgstr "Это дата, когда проблема была раскрыта (_ГГГГ-ММ-ДД_)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:224
+msgid "This is the date when the entry was added (_YYYY-MM-DD_)."
+msgstr "Это дата добавления записи (_ГГГГ-ММ-ДД_)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:226
+msgid ""
+"This is the date when any information in the entry was last modified (_YYYY-"
+"MM-DD_). New entries must not include this field. Add it when editing an "
+"existing entry."
+msgstr ""
+"Это дата, когда любая информация в записи была последний раз изменена (_ГГГГ-"
+"ММ-ДД_). Новые записи не должны включать это поле. Добавьте его при "
+"редактировании существующей записи."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:228
+#, no-wrap
+msgid "Testing Changes to the VuXML Database"
+msgstr "Тестирование ваших изменений в базе данных VuXML"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:231
+msgid ""
+"This example describes a new entry for a vulnerability in the package "
+"`dropbear` that has been fixed in version `dropbear-2013.59`."
+msgstr ""
+"Этот пример описывает новую запись об уязвимости в пакете `dropbear`, "
+"которая была исправлена в версии `dropbear-2013.59`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:233
+msgid ""
+"As a prerequisite, install a fresh version of package:security/vuxml[] port."
+msgstr ""
+"В качестве предварительного условия установите свежую версию порта "
+"package:security/vuxml[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:236
+msgid ""
+"First, check whether there already is an entry for this vulnerability. If "
+"there were such an entry, it would match the previous version of the "
+"package, `2013.58`:"
+msgstr ""
+"Сначала проверьте, есть ли уже запись об этой уязвимости. Если бы такая "
+"запись существовала, она соответствовала бы предыдущей версии пакета "
+"`2013.58`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:240
+#, no-wrap
+msgid "% pkg audit dropbear-2013.58\n"
+msgstr "% pkg audit dropbear-2013.58\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:243
+msgid "If there is none found, add a new entry for this vulnerability."
+msgstr "Если запись не найдена, добавьте новую запись для этой уязвимости."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:248
+#, no-wrap
+msgid ""
+"% cd ${PORTSDIR}/security/vuxml\n"
+"% make newentry\n"
+msgstr ""
+"% cd ${PORTSDIR}/security/vuxml\n"
+"% make newentry\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:252
+msgid ""
+"If the vulnerability has a https://cve.mitre.org/[MITRE CVE] identifier, the "
+"following command can be used instead:"
+msgstr ""
+"Если уязвимость имеет идентификатор https://cve.mitre.org/[MITRE CVE], можно "
+"использовать следующую команду:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:257
+#, no-wrap
+msgid ""
+"% cd ${PORTSDIR}/security/vuxml\n"
+"% make newentry CVE_ID=CVE-YYYY-XXXXX\n"
+msgstr ""
+"% cd ${PORTSDIR}/security/vuxml\n"
+"% make newentry CVE_ID=CVE-YYYY-XXXXX\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:260
+msgid "where `CVE-YYYYY-XXXX` is a valid CVE identifier."
+msgstr "где `CVE-YYYYY-XXXX` является действительным идентификатором CVE."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:263
+msgid ""
+"If the vulnerability is a FreeBSD Security Advisory, the following command "
+"can be used instead:"
+msgstr ""
+"Если уязвимость относится к FreeBSD Security Advisory, вместо этого можно "
+"использовать следующую команду:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:268
+#, no-wrap
+msgid ""
+"% cd ${PORTSDIR}/security/vuxml\n"
+"% make newentry SA_ID=FreeBSD-SA-YY-XXXXXX.asc\n"
+msgstr ""
+"% cd ${PORTSDIR}/security/vuxml\n"
+"% make newentry SA_ID=FreeBSD-SA-YY-XXXXXX.asc\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:271
+msgid ""
+"where `FreeBSD-SA-YY-XXXXXX.asc` is a published https://www.freebsd.org/"
+"security/advisories/[FreeBSD Security Advisory]."
+msgstr ""
+"где `FreeBSD-SA-YY-XXXXXX.asc` является опубликованным https://"
+"www.freebsd.org/security/advisories/[FreeBSD Security Advisory]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:273
+msgid "Verify its syntax and formatting:"
+msgstr "Проверьте его синтаксис и форматирование:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:277
+#, no-wrap
+msgid "% make validate\n"
+msgstr "% make validate\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:282
+msgid ""
+"The previous command generates the [.filename]#vuln-flat.xml# file. It can "
+"also be generated with:"
+msgstr ""
+"Предыдущая команда создает файл [.filename]#vuln-flat.xml#. Его также можно "
+"создать с помощью:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:286
+#, no-wrap
+msgid "% make vuln-flat.xml\n"
+msgstr "% make vuln-flat.xml\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:291
+msgid ""
+"At least one of these packages needs to be installed: package:textproc/"
+"libxml2[], package:textproc/jade[]."
+msgstr ""
+"Должен быть установлен хотя бы один из следующих пакетов: package:textproc/"
+"libxml2[], package:textproc/jade[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:294
+msgid ""
+"Verify that the `<affected>` section of the entry will match the correct "
+"packages:"
+msgstr ""
+"Проверьте, что раздел `<affected>` записи соответствует правильным пакетам:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:298
+#, no-wrap
+msgid "% pkg audit -f ${PORTSDIR}/security/vuxml/vuln-flat.xml dropbear-2013.58\n"
+msgstr "% pkg audit -f ${PORTSDIR}/security/vuxml/vuln-flat.xml dropbear-2013.58\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:301
+msgid "Make sure that the entry produces no spurious matches in the output."
+msgstr "Убедитесь, что запись не создает ложных совпадений в выводе."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:303
+msgid "Now check whether the right package versions are matched by the entry:"
+msgstr "Теперь проверьте, соответствуют ли записи правильные версии пакетов:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:312
+#, no-wrap
+msgid ""
+"% pkg audit -f ${PORTSDIR}/security/vuxml/vuln-flat.xml dropbear-2013.58 dropbear-2013.59\n"
+"dropbear-2012.58 is vulnerable:\n"
+"dropbear -- exposure of sensitive information, DoS\n"
+"CVE: CVE-2013-4434\n"
+"CVE: CVE-2013-4421\n"
+"WWW: https://portaudit.FreeBSD.org/8c9b48d1-3715-11e3-a624-00262d8b701d.html\n"
+msgstr ""
+"% pkg audit -f ${PORTSDIR}/security/vuxml/vuln-flat.xml dropbear-2013.58 dropbear-2013.59\n"
+"dropbear-2012.58 is vulnerable:\n"
+"dropbear -- exposure of sensitive information, DoS\n"
+"CVE: CVE-2013-4434\n"
+"CVE: CVE-2013-4421\n"
+"WWW: https://portaudit.FreeBSD.org/8c9b48d1-3715-11e3-a624-00262d8b701d.html\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:314
+#, no-wrap
+msgid "1 problem(s) in the installed packages found.\n"
+msgstr "1 problem(s) in the installed packages found.\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:317
+msgid "The former version matches while the latter one does not."
+msgstr "Предыдущая версия совпадает, а последняя — нет."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:319
+#, no-wrap
+msgid "VuXML new entry checklist"
+msgstr "Контрольный список для новой записи в VuXML"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:323
+msgid ""
+"Check the name of the port. Sometimes the upstream project name is not "
+"exactly the same as the port name."
+msgstr ""
+"Проверьте название порта. Иногда имя проекта в вышестоящем репозитории не "
+"полностью совпадает с именем порта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:327
+msgid ""
+"Add all flavors. When a port has flavors all the package names need to be "
+"added as a `<package>` in the entry. Use the following script to generate "
+"all flavored package names:"
+msgstr ""
+"Добавить все флейворы. Если у порта есть варианты, все имена пакетов должны "
+"быть добавлены в запись как `<package>`. Используйте следующий скрипт для "
+"генерации всех имен пакетов с вариантами:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:331
+#, no-wrap
+msgid "% for flavor in $(make -V FLAVORS); do FLAVOR=\"${flavor}\" make -VPKGNAME;done\n"
+msgstr "% for flavor in $(make -V FLAVORS); do FLAVOR=\"${flavor}\" make -VPKGNAME;done\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:336
+msgid ""
+"Check if the port has `PORTEPOCH`. The above script snippet helps with "
+"that. If the port uses `PORTEPOCH` it is mandatory to add it to the "
+"`<range>` tag."
+msgstr ""
+"Проверить, имеет ли порт `PORTEPOCH`. Приведённый выше фрагмент скрипта "
+"помогает в этом. Если порт использует `PORTEPOCH`, обязательно добавить его "
+"в тег `<range>`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:340
+msgid ""
+"Double check ranges. In the case of ranges limited on both sides, make sure "
+"that the `<ge>` and `<lt>` elements are inside the same `<range>` tag. "
+"Otherwise the entry might end up defining an overlapping range."
+msgstr ""
+"Перепроверьте диапазоны. В случае диапазонов, ограниченных с обеих сторон, "
+"убедитесь, что элементы `<ge>` и `<lt>` находятся внутри одного тега "
+"`<range>`. В противном случае запись может определить перекрывающийся "
+"диапазон."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:349
+msgid ""
+"Cross-check derivatives. Check whether derivatives or forks of the project "
+"included in the ports tree are also affected. For example, if a "
+"vulnerability is discovered in package:www/firefox[], assess whether "
+"derivatives like package:www/librewolf[], package:www/waterfox[] or other "
+"similar projects share the same vulnerability. Include all affected "
+"derivatives in the VuXML entry, ensuring that users of these ports are "
+"informed. Also check if there are Linux versions of the same port in the "
+"tree. For instance, package:databases/sqlite3[] vulnerabilities most likely "
+"affect packages like package:databases/linux-c7-sqlite3[] too."
+msgstr ""
+"Проверка производных версий. Если в вышестоящем проекте обнаружена "
+"уязвимость, проверьте, затронуты ли также производные или форки проекта, "
+"включённые в дерево портов. Например, если уязвимость обнаружена в "
+"package:www/firefox[], оцените, есть ли такая же уязвимость в производных, "
+"таких как package:www/librewolf[], package:www/waterfox[] или других "
+"подобных проектах. Включите все затронутые производные в запись VuXML, чтобы "
+"пользователи этих портов были проинформированы. Также проверьте наличие "
+"Linux-версий этого порта в дереве. Например, уязвимости в package:databases/"
+"sqlite3[] скорее всего затрагивают и пакеты вроде package:databases/linux-c7-"
+"sqlite3[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:349
+msgid "Do not commit an entry without running `make validate` first."
+msgstr "Не делайте коммит записи, не запустив сначала `make validate`."
+
+#, no-wrap
+#~ msgid "Cross-checking Derivatives"
+#~ msgstr "Перекрестная проверка производных"
diff --git a/documentation/content/ru/books/porters-handbook/slow-porting/_index.adoc b/documentation/content/ru/books/porters-handbook/slow-porting/_index.adoc
index 59e22915d2..a71f5e642d 100644
--- a/documentation/content/ru/books/porters-handbook/slow-porting/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/slow-porting/_index.adoc
@@ -1,11 +1,13 @@
---
-title: Глава 4. Медленное портирование
-prev: books/porters-handbook/quick-porting
+description: 'Описание создания порта FreeBSD, когда программа требует некоторых изменений'
next: books/porters-handbook/makefiles
+params:
+ path: /books/porters-handbook/slow-porting/
+prev: books/porters-handbook/quick-porting
showBookMenu: true
+tags: ["porting", "ports", "slow porting", "guide"]
+title: 'Глава 4. Медленное портирование'
weight: 4
-params:
- path: "/books/porters-handbook/slow-porting/"
---
[[slow-porting]]
@@ -51,23 +53,22 @@ endif::[]
[[slow-work]]
== Как всё это работает
-Во-первых, когда пользователь дает в своем каталоге с портом команду `make`, происходит целая череда событий. Во время чтения этого текста может оказаться полезным иметь файл [.filename]#bsd.port.mk# открытым в другом окне, что сильно поможет в их понимании.
+Во-первых, когда пользователь дает в своем каталоге с портом команду `make`, происходит целая череда событий. Во время чтения этого текста может оказаться полезным иметь файл [.filename]#bsd.port.mk# открытым в другом окне, что сильно поможет его понять.
-Но не волнуйтесь сильно, если вы не до конца понимаете, что делается в [.filename]#bsd.port.mk#, не так уж много людей его понимает... _:->_
+Но не волнуйтесь сильно, если вы не до конца понимаете, что делается в [.filename]#bsd.port.mk#, не так уж много людей его понимает... _:-)_
[.procedure]
-====
. Запускается цель `fetch`. Цель `fetch` отвечает за то, что архив исходных текстов имеется в наличии локально в каталоге `DISTDIR`. Если цель `fetch` не может найти требуемые файлы в каталоге `DISTDIR`, то они будут искаться по указателю URL `MASTER_SITES`, который устанавливается в Makefile, а также на наших FTP зеркалах, куда мы по возможности помещаем дистрибутивные файлы для архива. Затем она попытается сгрузить указанный файл с помощью `FETCH`, полагая, что запрашивающая машина имеет прямое подключение к Интернет. Если файл скачается удачно, то он будет помещен в каталог `DISTDIR` для последующего использования и обработки.
. Выполняется цель `extract`. Она ищет дистрибутивный файл порта (как правило, tar-архив `gzip`) в каталоге `DISTDIR` и распаковывает его во временный каталог, задаваемый переменной `WRKDIR` (по умолчанию [.filename]#work#).
. Выполняется цель `patch`. Во-первых, применяются все патчи, заданные переменной `PATCHFILES`. Во-вторых, если какие-либо файлы с патчами, носящие имена [.filename]#patch-*#, имеются в подкаталоге `PATCHDIR` (по умолчанию это каталог [.filename]#files#), то они применяются в этот момент в алфавитном порядке.
. Запускается цель `configure`. Здесь может выполняться любая из многих различных вещей.
-.. Если существует скрипт [.filename]#scripts/configure#, то он запускается.
-.. Если задана переменная `HAS_CONFIGURE` или `GNU_CONFIGURE`, то запускается скрипт [.filename]#WRKSRC/configure#.
+.. Если он существует, запускается [.filename]#scripts/configure#.
+.. Если установлены `HAS_CONFIGURE` или `GNU_CONFIGURE`, запускается [.filename]#WRKSRC/configure#.
. Выполняется цель `build`. Она отвечает за переход в собственный рабочий каталог порта (`WRKSRC`) и его построение.
. Выполняется цель `stage`. Конечный набор построенных файлов помещается во временный каталог (`STAGEDIR`, смотрите crossref:special[staging,Staging]). Иерархия этого каталога отражает иерархию каталогов системы, в которую данный пакет будет устанавливаться.
-. Выполняется цель `install`. В систему копируются файлы, перечисленные в pkg-plist порта.
-====
+. Выполняется цель `package`. При этом создается пакет с использованием файлов из временного каталога, созданного во время выполнения цели `stage`, и файла [.filename]#pkg-plist# порта.
+. Выполняется цель `install`. Это устанавливает пакет, созданный во время цели `package`, в хост-систему.
Выше перечислены стандартные действия. Кроме того, вы сами можете определить цели `pre-_что-то_` или `post-_что-то_`, или создать скрипты с такими именами в подкаталоге [.filename]#scripts#, и они будут запущены до или после выполнения действий по умолчанию.
@@ -87,15 +88,15 @@ endif::[]
Получите оригинальные исходные тексты (обычно) в виде упакованного tar-архива ([.filename]#foo.tar.gz# или [.filename]#foo.tar.bz2#) и скопируйте его в каталог `DISTDIR`. Всегда используйте исходные тексты _основной ветки разработки_ везде, где это возможно.
-Вам потребуется задать значение переменной `MASTER_SITES` так, чтобы оно указывало на местоположение оригинального tar-архива. В файле [.filename]#bsd.sites.mk# вы найдёте краткие обозначения для большинства популярных сайтов. Пожалуйста, используйте эти сайты-и соответствующие определения-везде, где это возможно, чтобы избежать проблем повторения одной и той же информации в базе источников. Так как эти сайты со временем меняются, для всех причастных поддержка становится настоящим кошмаром.
+Вам потребуется задать значение переменной `MASTER_SITES` так, чтобы оно указывало на местоположение оригинального tar-архива. В файле [.filename]#bsd.sites.mk# вы найдёте краткие обозначения для большинства популярных сайтов. Пожалуйста, используйте эти сайты-и соответствующие определения-везде, где это возможно, чтобы избежать проблем повторения одной и той же информации в базе источников. Так как эти сайты со временем меняются, для всех причастных поддержка становится настоящим кошмаром. Для подробностей смотрите crossref:makefiles[makefile-master_sites,`MASTER_SITES`].
Если вы не можете найти FTP/HTTP сайт с хорошим подключением к сети, или находите только сайты, которые имеют раздражающе нестандартные форматы, то можете захотеть поместить копию на надежный сервер FTP или HTTP, который вам доступен (например, ваша домашняя страница).
-Если вы не можете найти доступного и надёжного места для помещения дистрибутивного файла, то мы сами сможем разместить его на сервере `ftp.FreeBSD.org`; однако это наименее рекомендуемое решение. Дистрибутивный файл должен быть помещён в каталог [.filename]#~/public_distfiles/# одного из пользователей машины `freefall`. Попросите того, кто коммиттил ваш порт, сделать это. Этот человек также задаст переменной `MASTER_SITES` значение `MASTER_SITE_LOCAL`, а в переменной `MASTER_SITE_SUBDIR` укажет своё имя пользователя с машины `freefall`.
+Если вы не можете найти доступного и надёжного места для помещения дистрибутивного файла, то мы сами сможем разместить его на сервере `ftp.FreeBSD.org`; однако это наименее рекомендуемое решение. Дистрибутивный файл должен быть помещён в каталог [.filename]#~/public_distfiles/# одного из пользователей машины `freefall`. Попросите того, кто коммиттил ваш порт, сделать это. Этот человек также задаст переменной `MASTER_SITES` значение `MASTER_SITE_LOCAL`, а в переменной `MASTER_SITE_SUBDIR` укажет логин кластера FreeBSD.
Если дистрибутивные файлы вашего порта постоянно меняются по неизвестным причинам без изменения версий со стороны автора, остаётся только поместить дистрибутив на вашу домашнюю Web-страницу и указать её первой в списке `MASTER_SITES`. Если можете, попытайтесь договориться с автором порта об этом; это действительно помогает в достижении некоторого управления исходным кодом. Размещение собственной версии поможет избежать появления ошибок у пользователей типа `checksum mismatch`, а также уменьшит нагрузку на людей, сопровождающих наш FTP-сервер. Также, если у порта имеется только один основной сервер, то рекомендуется поместить архивную копию на свой сайт и указать его в списке `MASTER_SITES` вторым.
-Если вашему порту требуются дополнительные `патчи`, доступные в Интернет, скачайте также и их, поместив в каталог `DISTDIR`. Не волнуйтесь, если они находятся не на том же сайте, откуда взят дистрибутивный архив, мы умеем обрабатывать такие ситуации (смотрите описание <<porting-patchfiles,PATCHFILES>> ниже).
+Если вашему порту требуются дополнительные `патчи`, доступные в Интернет, скачайте также и их, поместив в каталог `DISTDIR`. Не волнуйтесь, если они находятся не на том же сайте, откуда взят дистрибутивный архив, мы умеем обрабатывать такие ситуации (смотрите описание crossref:makefiles[porting-patchfiles,PATCHFILES] ниже).
[[slow-modifying]]
== Модификация порта
@@ -110,61 +111,86 @@ endif::[]
====
[[slow-patch]]
-== Создание патчей
+== Работа с патчами
Файлы, которые добавлялись или изменялись в процессе создания порта, могут быть выявлены программой man:diff[1], а результат работы этой программы может быть в дальнейшем передан программе man:patch[1]. Такое действие с обычным файлом подразумевает сохранение копии файла с первоначальным содержимым перед внесением каких-либо изменений.
-[source,shell]
+[source, shell]
....
% cp file file.orig
....
Патчи сохраняются в виде файлов с именем [.filename]#patch-*#, где _*_ обозначает путь к файлу, к которому применяется патч, такой как [.filename]#patch-Imakefile# или [.filename]#patch-src-config.h#.
-После того как файл был изменён, используется man:diff[1] для получения разницы между первоначальной и изменённой версиями. Параметр `-u` указывает man:diff[1] выводить разницу в "унифицированном" формате, который также является предпочтительным.
+[TIP]
+====
+Используйте `BINARY_ALIAS` для замены жёстко заданных команд во время сборки и избежания исправлений в файлах сборки. Подробнее см. в crossref:makefiles[binary-alias,Использование `BINARY_ALIAS` для переименования команд вместо исправления сборки].
+====
+
+[[slow-patch-rules]]
+=== Общие правила для установки патчей
-[source,shell]
+Файлы патчей хранятся в `PATCHDIR`, обычно это [.filename]#files/#, откуда они будут автоматически применены. Все исправления должны быть относительны к `WRKSRC`. Обычно `WRKSRC` является подкаталогом `WRKDIR`, каталога, в котором распаковывается distfile. Используйте `make -V WRKSRC` для просмотра фактического пути. Имена файлов патчей должны соответствовать следующим правилам:
+
+* Избегайте ситуации, когда несколько патчей изменяют один и тот же файл. Например, если и [.filename]#patch-foobar.c#, и [.filename]#patch-foobar.c2# вносят изменения в [.filename]#${WRKSRC}/foobar.c#, это делает их хрупкими и затрудняет отладку.
+* При создании имен для файлов исправлений заменяйте каждое подчеркивание (`\_`) на два подчеркивания (`\__`) и каждый слэш (`/`) на одно подчеркивание (`_`). Например, чтобы исправить файл с именем [.filename]#src/freeglut_joystick.c#, назовите соответствующий исправление [.filename]#patch-src_freeglut__joystick.c#. Не называйте исправления как [.filename]#patch-aa# или [.filename]#patch-ab#. Всегда используйте путь и имя файла в названиях исправлений. Использование `make makepatch` автоматически генерирует правильные имена.
+* Патч может изменять несколько файлов, если изменения связаны между собой и патч назван соответствующим образом. Например, [.filename]#patch-add-missing-stdlib.h#.
+* Используйте только символы `[-+.\_a-zA-Z0-9]` для именования патчей. В частности, __не используйте `::` как разделитель путей,__ вместо этого используйте `_`.
+
+Минимизируйте количество нефункциональных изменений пробелов в патчах. В мире открытого исходного кода распространена практика, когда проекты используют обширные части кодовой базы, но следуют разным правилам стиля и отступов. При переносе работоспособного функционала из одного проекта для исправления аналогичных участков в другом будьте внимательны: итоговый патч может быть переполнен нефункциональными изменениями. Это не только увеличивает размер репозитория портов, но и затрудняет понимание того, что именно вызвало проблему и какие изменения были внесены.
+
+Если файл необходимо удалить, сделайте это в цели `post-extract`, а не как часть исправления.
+
+[[slow-patch-manual]]
+=== Ручное создание патчей
+
+[NOTE]
+====
+Ручное создание патчей обычно не требуется. Предпочтительным методом является автоматическая генерация патчей, как описано ранее в этом разделе. Однако иногда может потребоваться ручное исправление.
+====
+
+Патчи сохраняются в файлы с именами [.filename]#patch-*#, где * указывает на путь к файлу, который патчится, например [.filename]#patch-Imakefile# или [.filename]#patch-src-config.h#. Патчи с именами файлов, не начинающимися с [.filename]#patch-#, не будут применены автоматически.
+
+После изменения файла используется man:diff[1] для записи различий между оригинальной и изменённой версиями. `-u` заставляет man:diff[1] выводить различия файлов в "унифицированном" формате (unified diffs), которые являются предпочтительным форматом.
+
+[source, shell]
....
% diff -u file.orig file > patch-pathname-file
....
Для порождении патчей для новых добавляемых файлов используется параметр `-N`, который заставляет man:diff[1] трактовать несуществующие прежде файлы как если бы они существовали, но имели пустое содержимое:
-[source,shell]
+[source, shell]
....
% diff -u -N newfile.orig newfile > patch-pathname-newfile
....
-Файлы с патчами помещаются в каталоге `PATCHDIR` (как правило, это [.filename]#files/#), откуда они будут взяты автоматически. Все патчи обязаны быть сделаны относительно каталога `WRKSRC` (как правило, это каталог, в который распаковывается исходный архив и где будет выполняться построение). Для упрощения внесения изменений и обновлений избегайте наличия более чем одного патча для одного и того же файла (например, патчей [.filename]#patch-file# и [.filename]#patch-file2#, оба меняющих файл [.filename]#WRKSRC/foobar.c#). Обратите внимание, что если путь к изменяемому файлу содержит символ подчеркивания (`_`), то патч должен содержать в своем имени два подчеркивания вместо одного. Например, для применения патча на файл с именем [.filename]#src/freeglut_joystick.c# соответствующий патч следует назвать [.filename]#patch-src-freeglut__joystick.c#.
-
-Пожалуйста, используйте для именования патчей только символы `[-+._a-zA-Z0-9]`. Не используйте любые другие символы, кроме этих. Не называйте патчи как [.filename]#patch-aa# или [.filename]#patch-ab#, всегда ссылайтесь на путь и название файла в названиях самих патчей.
-
-Существует альтернативный упрощённый способ создания патчей для существующих файлов. Первые шаги те же самые: создание копии неизменённого файла с расширением [.filename]#.orig# и внесение изменений. После этого используйте `make makepatch`, чтобы обновить файлы с патчами в каталоге [.filename]#files# данного порта.
-
-Не помещайте строки RCS в патчи. Subversion будет изменять их при помещении файлов в дерево портов, и когда мы будем их оттуда извлекать, они будут уже другие, поэтому применение патчей окончится неудачей. Строчки RCS предваряются знаком доллара (`$`), и обычно начинаются с `$Id` или `$RCS`.
-
-Использование параметра рекурсии (`-r`) с командой man:diff[1] для генерации патчей - это хорошо, но всё же, пожалуйста, смотрите на получающиеся патчи, чтобы убедиться в отсутствии ненужного мусора. В частности, diff-разниц между двумя резервными копиями файлов, файлы [.filename]#Makefile#, когда как порт использует `Imake` или GNU-версию программы `configure`, и так далее, не нужны, и должны быть удалены. Если было необходимо отредактировать файл [.filename]#configure.in# и запустить `autoconf` для перегенерации `configure`, не нужно включать файлы diff для `configure` (они частенько вырастают до нескольких тысяч строк!). Вместо этого задайте `USE_AUTOTOOLS=autoconf:261` и включите diff-файл для [.filename]#configure.in#.
-
-Старайтесь минимизировать в патчах объём нефункциональных изменений с пустыми символами. В мире Открытого Исходного Кода является распространенным совместное использование проектами больших объемов кодовой базы, но с различными стилями и правилами отступов. При копировании работающей функциональной части из одного проекта для исправления похожей области в другом, будьте аккуратны, пожалуйста: получаемый однострочный патч может указаться полон нефункциональных изменений. Это не только увеличивает размер репозитория Subversion, но также усложняет поиск того, что конкретно вызвало проблему и что вообще поменялось.
+Использование опции рекурсии (`-r`) в man:diff[1] для создания патчей допустимо, но пожалуйста, проверяйте полученные патчи, чтобы убедиться в отсутствии ненужных данных. В частности, различия между резервными файлами, [.filename]##Makefile##, когда порт использует `Imake` или GNU `configure`, и т.д., являются избыточными и должны быть удалены. Если потребовалось отредактировать [.filename]#configure.in# и запустить `autoconf` для перегенерации `configure`, не включайте различия в `configure` (его объем часто достигает нескольких тысяч строк!). Вместо этого определите `USES=autoreconf` и возьмите различия для [.filename]#configure.in#.
-Если нужно удалить файл, сделайте это при выполнении цели `post-extract`, вместо того чтобы оформлять это как часть патча.
+[[slow-patch-automatic-replacements]]
+=== Простая автоматическая замена
-Простые перемещения могут быть выполнены непосредственно из [.filename]#Makefile# порта с использованием man:sed[1] в режиме in-place. Это удобно, когда при изменении используется значение переменной:
+Простые замены могут быть выполнены напрямую из [.filename]#Makefile# порта, используя режим редактирования на месте утилиты man:sed[1]. Это полезно, когда изменения используют значение переменной:
[.programlisting]
....
post-patch:
- @${REINPLACE_CMD} -e 's|for Linux|for FreeBSD|g' ${WRKSRC}/README
+ @${REINPLACE_CMD} -e 's|/usr/local|${PREFIX}|g' ${WRKSRC}/Makefile
....
-Довольно часто в исходных файлах портируемого программного обеспечения используется конвенция CR/LF. Это может стать причиной проблем с дальнейшей упаковкой, предупреждениями компилятора или выполнением скриптов (таких как `/bin/sh^M not found`). Для быстрого преобразования всех файлов из CR/LF просто в LF добавьте в [.filename]#Makefile# порта эту запись:
+[IMPORTANT]
+====
+Используйте man:sed[1] только для замены изменяемого содержимого. Для замены статического содержимого необходимо использовать файлы исправлений вместо man:sed[1].
+====
+
+Довольно часто портируемое программное обеспечение использует соглашение CR/LF в исходных файлах. Это может вызвать проблемы с дальнейшим наложением патчей, предупреждениями компилятора или выполнением скриптов (например, `/bin/sh^M не найден`). Для быстрого преобразования всех файлов из CR/LF в просто LF добавьте следующую запись в [.filename]#Makefile# порта:
[.programlisting]
....
USES= dos2unix
....
-Может быть задан точный список преобразуемых файлов:
+Список конкретных файлов для преобразования может быть указан:
[.programlisting]
....
@@ -172,7 +198,7 @@ USES= dos2unix
DOS2UNIX_FILES= util.c util.h
....
-Используйте `DOS2UNIX_REGEX`, чтобы преобразовать группу файлов в разных подкаталогах. Его параметром является регулярное выражение, совместимое с man:find[1]. Подробнее о формате в man:re_format[7]. Такой вариант удобен для преобразования всех файлов заданного расширения. Для примера, преобразуем все исходные файлы, не затрагивая двоичные файлы:
+Используйте `DOS2UNIX_REGEX` для преобразования группы файлов во вложенных каталогах. Его аргумент — это совместимое с man:find[1] регулярное выражение. Подробнее о формате можно узнать в man:re_format[7]. Эта опция полезна для преобразования всех файлов с заданным расширением. Например, преобразовать все исходные файлы кода, оставив двоичные файлы без изменений:
[.programlisting]
....
@@ -180,7 +206,7 @@ USES= dos2unix
DOS2UNIX_REGEX= .*\.([ch]|cpp)
....
-Другим вариантом является использование `DOS2UNIX_GLOB`, который вызывает `find` для каждого из перечисленных в нём элементов.
+Аналогичной опцией является `DOS2UNIX_GLOB`, которая запускает `find` для каждого указанного в ней элемента.
[.programlisting]
....
@@ -188,6 +214,79 @@ USES= dos2unix
DOS2UNIX_GLOB= *.c *.cpp *.h
....
+Базовый каталог для преобразования может быть установлен. Это полезно, когда имеется несколько distfiles и в нескольких из них содержатся файлы, требующие преобразования окончаний строк.
+
+[.programlisting]
+....
+USES= dos2unix
+DOS2UNIX_WRKSRC= ${WRKDIR}
+....
+
+[[slow-patch-extra]]
+=== Внесение исправлений при условии
+
+Некоторые порты требуют патчей, которые применяются только для определённых версий FreeBSD или при включении или отключении конкретной опции. Условные патчи указываются путём размещения полных путей к файлам патчей в `EXTRA_PATCHES`. Имена файлов условных патчей обычно начинаются с [.filename]#extra-#, хотя это и не обязательно. Однако их имена _не должны_ начинаться с [.filename]#patch-#. Если это произойдёт, они будут применены безусловно фреймворком, что нежелательно для условных патчей.
+
+[[slow-patch-extra-ex1]]
+.Применение патча для конкретной версии FreeBSD
+[example]
+====
+[.programlisting]
+....
+.include <bsd.port.options.mk>
+
+# Patch in the iconv const qualifier before this
+.if ${OPSYS} == FreeBSD && ${OSVERSION} < 1100069
+EXTRA_PATCHES= ${PATCHDIR}/extra-patch-fbsd10
+.endif
+
+.include <bsd.port.mk>
+....
+
+====
+
+[[slow-patch-extra-ex2]]
+.Опциональное применение патча
+[example]
+====
+Когда для crossref:makefiles[makefile-options,опции] требуется патч, используйте ``opt_EXTRA_PATCHES`` и ``opt_EXTRA_PATCHES_OFF``, чтобы сделать исправление зависимым от опции `opt`. Дополнительные сведения см. в crossref:makefiles[options-variables,Generic Variables Replacement, `OPT_VARIABLE` и `OPT_VARIABLE_OFF`].
+
+[.programlisting]
+....
+OPTIONS_DEFINE= FOO BAR
+FOO_EXTRA_PATCHES= ${PATCHDIR}/extra-patch-foo
+BAR_EXTRA_PATCHES_OFF= ${PATCHDIR}/extra-patch-bar.c \
+ ${PATCHDIR}/extra-patch-bar.h
+....
+
+====
+
+[[slow-patch-extra-ex-dirs]]
+.Использование `EXTRA_PATCHES` с директорией
+[example]
+====
+Иногда для функции требуется множество патчей, в таком случае можно указать `EXTRA_PATCHES` на директорию, и все файлы с именем [.filename]#patch-*# в ней будут применены автоматически.
+
+Создайте подкаталог в [.filename]#${PATCHDIR}# и переместите в него патчи. Например:
+
+[source, shell]
+....
+% ls -l files/foo-patches
+-rw-r--r-- 1 root wheel 350 Jan 16 01:27 patch-Makefile.in
+-rw-r--r-- 1 root wheel 3084 Jan 18 15:37 patch-configure.ac
+....
+
+Затем добавьте это в [.filename]#Makefile#:
+
+[.programlisting]
+....
+OPTIONS_DEFINE= FOO
+FOO_EXTRA_PATCHES= ${PATCHDIR}/foo-patches
+....
+
+Затем фреймворк использует все файлы с именем [.filename]#patch-*# в этом каталоге.
+====
+
[[slow-configure]]
== Конфигурирование
diff --git a/documentation/content/ru/books/porters-handbook/slow-porting/_index.po b/documentation/content/ru/books/porters-handbook/slow-porting/_index.po
new file mode 100644
index 0000000000..388441324e
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/slow-porting/_index.po
@@ -0,0 +1,1017 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-24 21:10+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookslow-porting_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:1
+#, no-wrap
+msgid "Description about creating a FreeBSD Port when the program need some modifications"
+msgstr "Описание создания порта FreeBSD, когда программа требует некоторых изменений"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:1
+#, no-wrap
+msgid "Chapter 4. Slow Porting"
+msgstr "Глава 4. Медленное портирование"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:14
+#, no-wrap
+msgid "Slow Porting"
+msgstr "Медленное портирование"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:53
+msgid ""
+"Okay, so it was not that simple, and the port required some modifications to "
+"get it to work. In this section, we will explain, step by step, how to "
+"modify it to get it to work with the ports paradigm."
+msgstr ""
+"Итак, все оказалось не так уж и просто, и порт потребовал некоторых "
+"модификаций для того, чтобы заставить его работать. В этом разделе мы "
+"расскажем, шаг за шагом, как его модифицировать, чтобы он работал с нашей "
+"системой портов."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:55
+#, no-wrap
+msgid "How Things Work"
+msgstr "Как всё это работает"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:59
+msgid ""
+"First, this is the sequence of events which occurs when the user first types "
+"`make` in the port's directory. Having [.filename]#bsd.port.mk# in another "
+"window while reading this really helps to understand it."
+msgstr ""
+"Во-первых, когда пользователь дает в своем каталоге с портом команду `make`, "
+"происходит целая череда событий. Во время чтения этого текста может "
+"оказаться полезным иметь файл [.filename]#bsd.port.mk# открытым в другом "
+"окне, что сильно поможет его понять."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:61
+msgid ""
+"But do not worry, not many people understand exactly how "
+"[.filename]#bsd.port.mk# is working... _:-)_"
+msgstr ""
+"Но не волнуйтесь сильно, если вы не до конца понимаете, что делается в "
+"[.filename]#bsd.port.mk#, не так уж много людей его понимает... _:-)_"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:64
+msgid ""
+"The `fetch` target is run. The `fetch` target is responsible for making sure "
+"that the tarball exists locally in `DISTDIR`. If `fetch` cannot find the "
+"required files in `DISTDIR` it will look up the URL `MASTER_SITES`, which is "
+"set in the Makefile, as well as our FTP mirrors where we put distfiles as "
+"backup. It will then attempt to fetch the named distribution file with "
+"`FETCH`, assuming that the requesting site has direct access to the "
+"Internet. If that succeeds, it will save the file in `DISTDIR` for future "
+"use and proceed."
+msgstr ""
+"Запускается цель `fetch`. Цель `fetch` отвечает за то, что архив исходных "
+"текстов имеется в наличии локально в каталоге `DISTDIR`. Если цель `fetch` "
+"не может найти требуемые файлы в каталоге `DISTDIR`, то они будут искаться "
+"по указателю URL `MASTER_SITES`, который устанавливается в Makefile, а также "
+"на наших FTP зеркалах, куда мы по возможности помещаем дистрибутивные файлы "
+"для архива. Затем она попытается сгрузить указанный файл с помощью `FETCH`, "
+"полагая, что запрашивающая машина имеет прямое подключение к Интернет. Если "
+"файл скачается удачно, то он будет помещен в каталог `DISTDIR` для "
+"последующего использования и обработки."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:65
+msgid ""
+"The `extract` target is run. It looks for the port's distribution file "
+"(typically a compressed tarball) in `DISTDIR` and unpacks it into a "
+"temporary subdirectory specified by `WRKDIR` (defaults to [.filename]#work#)."
+msgstr ""
+"Выполняется цель `extract`. Она ищет дистрибутивный файл порта (как правило, "
+"tar-архив `gzip`) в каталоге `DISTDIR` и распаковывает его во временный "
+"каталог, задаваемый переменной `WRKDIR` (по умолчанию [.filename]#work#)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:66
+msgid ""
+"The `patch` target is run. First, any patches defined in `PATCHFILES` are "
+"applied. Second, if any patch files named [.filename]#patch-*# are found in "
+"`PATCHDIR` (defaults to the [.filename]#files# subdirectory), they are "
+"applied at this time in alphabetical order."
+msgstr ""
+"Выполняется цель `patch`. Во-первых, применяются все патчи, заданные "
+"переменной `PATCHFILES`. Во-вторых, если какие-либо файлы с патчами, носящие "
+"имена [.filename]#patch-*#, имеются в подкаталоге `PATCHDIR` (по умолчанию "
+"это каталог [.filename]#files#), то они применяются в этот момент в "
+"алфавитном порядке."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:67
+msgid ""
+"The `configure` target is run. This can do any one of many different things."
+msgstr ""
+"Запускается цель `configure`. Здесь может выполняться любая из многих "
+"различных вещей."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:68
+msgid "If it exists, [.filename]#scripts/configure# is run."
+msgstr "Если он существует, запускается [.filename]#scripts/configure#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:69
+msgid ""
+"If `HAS_CONFIGURE` or `GNU_CONFIGURE` is set, [.filename]#WRKSRC/configure# "
+"is run."
+msgstr ""
+"Если установлены `HAS_CONFIGURE` или `GNU_CONFIGURE`, запускается "
+"[.filename]#WRKSRC/configure#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:71
+msgid ""
+"The `build` target is run. This is responsible for descending into the "
+"port's private working directory (`WRKSRC`) and building it."
+msgstr ""
+"Выполняется цель `build`. Она отвечает за переход в собственный рабочий "
+"каталог порта (`WRKSRC`) и его построение."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:72
+msgid ""
+"The `stage` target is run. This puts the final set of built files into a "
+"temporary directory (`STAGEDIR`, see crossref:special[staging,Staging]). The "
+"hierarchy of this directory mirrors that of the system on which the package "
+"will be installed."
+msgstr ""
+"Выполняется цель `stage`. Конечный набор построенных файлов помещается во "
+"временный каталог (`STAGEDIR`, смотрите crossref:special[staging,Staging]). "
+"Иерархия этого каталога отражает иерархию каталогов системы, в которую "
+"данный пакет будет устанавливаться."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:73
+msgid ""
+"The `package` target is run. This creates a package using the files from the "
+"temporary directory created during the `stage` target and the port's "
+"[.filename]#pkg-plist#."
+msgstr ""
+"Выполняется цель `package`. При этом создается пакет с использованием файлов "
+"из временного каталога, созданного во время выполнения цели `stage`, и файла "
+"[.filename]#pkg-plist# порта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:74
+msgid ""
+"The `install` target is run. This installs the package created during the "
+"`package` target into the host system."
+msgstr ""
+"Выполняется цель `install`. Это устанавливает пакет, созданный во время цели "
+"`package`, в хост-систему."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:76
+msgid ""
+"The above are the default actions. In addition, define targets `pre-"
+"_something_` or `post-_something_`, or put scripts with those names, in the "
+"[.filename]#scripts# subdirectory, and they will be run before or after the "
+"default actions are done."
+msgstr ""
+"Выше перечислены стандартные действия. Кроме того, вы сами можете определить "
+"цели `pre-_что-то_` или `post-_что-то_`, или создать скрипты с такими "
+"именами в подкаталоге [.filename]#scripts#, и они будут запущены до или "
+"после выполнения действий по умолчанию."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:82
+msgid ""
+"For example, if there is a `post-extract` target defined in the "
+"[.filename]#Makefile#, and a file [.filename]#pre-build# in the "
+"[.filename]#scripts# subdirectory, the `post-extract` target will be called "
+"after the regular extraction actions, and [.filename]#pre-build# will be "
+"executed before the default build rules are done. It is recommended to use "
+"[.filename]#Makefile# targets if the actions are simple enough, because it "
+"will be easier for someone to figure out what kind of non-default action the "
+"port requires."
+msgstr ""
+"Например, если у вас есть цель `post-extract`, определённая в вашем файле "
+"[.filename]#Makefile# и файл [.filename]#pre-build# в подкаталоге "
+"[.filename]#scripts#, то после выполнения обычных действий по распаковке, "
+"будет вызвана цель `post-extract` а скрипт [.filename]#pre-build# будет "
+"выполнен перед запуском стандартных правил построения. Рекомендуется "
+"использовать цели из [.filename]#Makefile#, если действия достаточно просты, "
+"потому что в дальнейшем будет проще определить, какие нестандартные действия "
+"требует порт."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:86
+msgid ""
+"The default actions are done by the `do-_something_` targets from "
+"[.filename]#bsd.port.mk#. For example, the commands to extract a port are "
+"in the target `do-extract`. If the default target does not do the job "
+"right, redefine the `do-_something_` target in the [.filename]#Makefile#."
+msgstr ""
+"Действия по умолчанию выполняются целями `do-_что-то_` из "
+"[.filename]#bsd.port.mk#. Например, команды для распаковки порта находятся в "
+"цели `do-extract`. Если вам не хватает цели по умолчанию, вы можете ее "
+"исправить, переопределив цель `do-_something_` в вашем файле "
+"[.filename]#Makefile#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:92
+msgid ""
+"The \"main\" targets (for example, `extract`, `configure`, etc.) do nothing "
+"more than make sure all the stages up to that one are completed and call the "
+"real targets or scripts, and they are not intended to be changed. To fix "
+"the extraction, fix `do-extract`, but never ever change the way `extract` "
+"operates! Additionally, the target `post-deinstall` is invalid and is not "
+"run by the ports infrastructure."
+msgstr ""
+"\"Основные\" цели (к примеру, `extract`, `configure` и так далее) не делают "
+"ничего больше, чем проверяют успешность завершения всех предыдущих шагов и "
+"вызывают настоящие цели или скрипты, и их не нужно менять. Если вам нужно "
+"изменить распаковку, исправляйте `do-extract`, но никогда не меняйте способ "
+"работы `extract`! Кроме того, цель `post-deinstall` является "
+"недействительной и не выполняется инфраструктурой портов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:95
+msgid ""
+"Now that what goes on when the user types `make install` is better "
+"understood, let us go through the recommended steps to create the perfect "
+"port."
+msgstr ""
+"Теперь, когда вы представляете, что происходит, когда пользователь набирает "
+"команду `make install`, давайте пройдемся через шаги, рекомендуемые для "
+"создания настоящего порта."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:97
+#, no-wrap
+msgid "Getting the Original Sources"
+msgstr "Получение исходного кода"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:101
+msgid ""
+"Get the original sources (normally) as a compressed tarball "
+"([.filename]#foo.tar.gz# or [.filename]#foo.tar.bz2#) and copy it into "
+"`DISTDIR`. Always use _mainstream_ sources when and where possible."
+msgstr ""
+"Получите оригинальные исходные тексты (обычно) в виде упакованного tar-"
+"архива ([.filename]#foo.tar.gz# или [.filename]#foo.tar.bz2#) и скопируйте "
+"его в каталог `DISTDIR`. Всегда используйте исходные тексты _основной ветки "
+"разработки_ везде, где это возможно."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:108
+msgid ""
+"Set the variable `MASTER_SITES` to reflect where the original tarball "
+"resides. Shorthand definitions exist for most mainstream sites in "
+"[.filename]#bsd.sites.mk#. Please use these sites-and the associated "
+"definitions-if at all possible, to help avoid the problem of having the same "
+"information repeated over again many times in the source base. As these "
+"sites tend to change over time, this becomes a maintenance nightmare for "
+"everyone involved. See crossref:makefiles[makefile-"
+"master_sites,`MASTER_SITES`] for details."
+msgstr ""
+"Вам потребуется задать значение переменной `MASTER_SITES` так, чтобы оно "
+"указывало на местоположение оригинального tar-архива. В файле "
+"[.filename]#bsd.sites.mk# вы найдёте краткие обозначения для большинства "
+"популярных сайтов. Пожалуйста, используйте эти сайты-и соответствующие "
+"определения-везде, где это возможно, чтобы избежать проблем повторения одной "
+"и той же информации в базе источников. Так как эти сайты со временем "
+"меняются, для всех причастных поддержка становится настоящим кошмаром. Для "
+"подробностей смотрите crossref:makefiles[makefile-"
+"master_sites,`MASTER_SITES`]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:110
+msgid ""
+"If there is no FTP/HTTP site that is well-connected to the net, or can only "
+"find sites that have irritatingly non-standard formats, put a copy on a "
+"reliable FTP or HTTP server (for example, a home page)."
+msgstr ""
+"Если вы не можете найти FTP/HTTP сайт с хорошим подключением к сети, или "
+"находите только сайты, которые имеют раздражающе нестандартные форматы, то "
+"можете захотеть поместить копию на надежный сервер FTP или HTTP, который вам "
+"доступен (например, ваша домашняя страница)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:114
+msgid ""
+"If a convenient and reliable place to put the distfile cannot be found, we "
+"can \"house\" it ourselves on `ftp.FreeBSD.org`; however, this is the least-"
+"preferred solution. The distfile must be placed into [.filename]#~/"
+"public_distfiles/# of someone's `freefall` account. Ask the person who "
+"commits the port to do this. This person will also set `MASTER_SITES` to "
+"`LOCAL/_username_` where `_username_` is their FreeBSD cluster login."
+msgstr ""
+"Если вы не можете найти доступного и надёжного места для помещения "
+"дистрибутивного файла, то мы сами сможем разместить его на сервере "
+"`ftp.FreeBSD.org`; однако это наименее рекомендуемое решение. Дистрибутивный "
+"файл должен быть помещён в каталог [.filename]#~/public_distfiles/# одного "
+"из пользователей машины `freefall`. Попросите того, кто коммиттил ваш порт, "
+"сделать это. Этот человек также задаст переменной `MASTER_SITES` значение "
+"`MASTER_SITE_LOCAL`, а в переменной `MASTER_SITE_SUBDIR` укажет логин "
+"кластера FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:119
+msgid ""
+"If the port's distfile changes all the time without any kind of version "
+"update by the author, consider putting the distfile on a home page and "
+"listing it as the first `MASTER_SITES`. Try to talk the port author out of "
+"doing this; it really does help to establish some kind of source code "
+"control. Hosting a specific version will prevent users from getting "
+"`checksum mismatch` errors, and also reduce the workload of maintainers of "
+"our FTP site. Also, if there is only one master site for the port, it is "
+"recommended to house a backup on a home page and list it as the second "
+"`MASTER_SITES`."
+msgstr ""
+"Если дистрибутивные файлы вашего порта постоянно меняются по неизвестным "
+"причинам без изменения версий со стороны автора, остаётся только поместить "
+"дистрибутив на вашу домашнюю Web-страницу и указать её первой в списке "
+"`MASTER_SITES`. Если можете, попытайтесь договориться с автором порта об "
+"этом; это действительно помогает в достижении некоторого управления исходным "
+"кодом. Размещение собственной версии поможет избежать появления ошибок у "
+"пользователей типа `checksum mismatch`, а также уменьшит нагрузку на людей, "
+"сопровождающих наш FTP-сервер. Также, если у порта имеется только один "
+"основной сервер, то рекомендуется поместить архивную копию на свой сайт и "
+"указать его в списке `MASTER_SITES` вторым."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:123
+msgid ""
+"If the port requires additional patches that are available on the Internet, "
+"fetch them too and put them in `DISTDIR`. Do not worry if they come from a "
+"site other than where the main source tarball comes, we have a way to handle "
+"these situations (see the description of crossref:makefiles[porting-"
+"patchfiles,PATCHFILES] below)."
+msgstr ""
+"Если вашему порту требуются дополнительные `патчи`, доступные в Интернет, "
+"скачайте также и их, поместив в каталог `DISTDIR`. Не волнуйтесь, если они "
+"находятся не на том же сайте, откуда взят дистрибутивный архив, мы умеем "
+"обрабатывать такие ситуации (смотрите описание crossref:makefiles[porting-"
+"patchfiles,PATCHFILES] ниже)."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:125
+#, no-wrap
+msgid "Modifying the Port"
+msgstr "Модификация порта"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:130
+msgid ""
+"Unpack a copy of the tarball in a private directory and make whatever "
+"changes are necessary to get the port to compile properly under the current "
+"version of FreeBSD. Keep _careful track_ of steps, as they will be needed "
+"to automate the process shortly. Everything, including the deletion, "
+"addition, or modification of files has to be doable using an automated "
+"script or patch file when the port is finished."
+msgstr ""
+"Распакуйте копию дистрибутивного файла в отдельный каталог и внесите "
+"изменения, которые необходимы для того, чтобы порт компилировался нормально "
+"в текущей версии FreeBSD. _Тщательно отслеживайте_ все, что вы делаете, этот "
+"процесс вам предстоит автоматизировать. Все, включая удаление, добавление "
+"или модификацию в файлах должны будут выполняться автоматически с помощью "
+"скриптов или файлов патчей, когда вы завершите работу над портом."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:133
+msgid ""
+"If the port requires significant user interaction/customization to compile "
+"or install, take a look at one of Larry Wall's classic Configure scripts and "
+"perhaps do something similar. The goal of the new ports collection is to "
+"make each port as \"plug-and-play\" as possible for the end-user while using "
+"a minimum of disk space."
+msgstr ""
+"Если вашему порту во время компиляции, установки и настройки требуется "
+"довольно много взаимодействовать с пользователем, то посмотрите на один из "
+"классических скриптов Configure Лэрри Уолла (Larry Wall) и сделайте сами что-"
+"либо подобное. Предназначение новой коллекции портов - это сделать каждое "
+"приложение в стиле \"plug-and-play\" настолько, насколько это вообще "
+"возможно для конечного пользователя при минимальном использовании дискового "
+"пространства."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:137
+msgid ""
+"Unless explicitly stated, patch files, scripts, and other files created and "
+"contributed to the FreeBSD ports collection are assumed to be covered by the "
+"standard BSD copyright conditions."
+msgstr ""
+"Если явно не указано обратное, то патчи, скрипты и другие файлы, которые вы "
+"создали и предоставили для Коллекции Портов FreeBSD, неявно подпадают под "
+"стандартные условия лицензии BSD."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:140
+#, no-wrap
+msgid "Patching"
+msgstr "Работа с патчами"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:144
+msgid ""
+"In the preparation of the port, files that have been added or changed can be "
+"recorded with man:diff[1] for later feeding to man:patch[1]. Doing this "
+"with a typical file involves saving a copy of the original file before "
+"making any changes using a [.filename]#.orig# suffix."
+msgstr ""
+"Файлы, которые добавлялись или изменялись в процессе создания порта, могут "
+"быть выявлены программой man:diff[1], а результат работы этой программы "
+"может быть в дальнейшем передан программе man:patch[1]. Такое действие с "
+"обычным файлом подразумевает сохранение копии файла с первоначальным "
+"содержимым перед внесением каких-либо изменений."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:148
+#, no-wrap
+msgid "% cp file file.orig\n"
+msgstr "% cp file file.orig\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:152
+msgid ""
+"After all changes have been made, `cd` back to the port directory. Use "
+"`make makepatch` to generate updated patch files in the [.filename]#files# "
+"directory."
+msgstr ""
+"Патчи сохраняются в виде файлов с именем [.filename]#patch-*#, где _*_ "
+"обозначает путь к файлу, к которому применяется патч, такой как "
+"[.filename]#patch-Imakefile# или [.filename]#patch-src-config.h#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:157
+msgid ""
+"Use `BINARY_ALIAS` to substitute hardcoded commands during the build and "
+"avoid patching build files. See crossref:makefiles[binary-alias,Use "
+"`BINARY_ALIAS` to Rename Commands Instead of Patching the Build] for more "
+"information."
+msgstr ""
+"Используйте `BINARY_ALIAS` для замены жёстко заданных команд во время сборки "
+"и избежания исправлений в файлах сборки. Подробнее см. в "
+"crossref:makefiles[binary-alias,Использование `BINARY_ALIAS` для "
+"переименования команд вместо исправления сборки]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:160
+#, no-wrap
+msgid "General Rules for Patching"
+msgstr "Общие правила для установки патчей"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:167
+msgid ""
+"Patch files are stored in `PATCHDIR`, usually [.filename]#files/#, from "
+"where they will be automatically applied. All patches must be relative to "
+"`WRKSRC`. Typically `WRKSRC` is a subdirectory of `WRKDIR`, the directory "
+"where the distfile is extracted. Use `make -V WRKSRC` to see the actual "
+"path. The patch names are to follow these rules:"
+msgstr ""
+"Файлы патчей хранятся в `PATCHDIR`, обычно это [.filename]#files/#, откуда "
+"они будут автоматически применены. Все исправления должны быть относительны "
+"к `WRKSRC`. Обычно `WRKSRC` является подкаталогом `WRKDIR`, каталога, в "
+"котором распаковывается distfile. Используйте `make -V WRKSRC` для просмотра "
+"фактического пути. Имена файлов патчей должны соответствовать следующим "
+"правилам:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:169
+msgid ""
+"Avoid having more than one patch modify the same file. For example, having "
+"both [.filename]#patch-foobar.c# and [.filename]#patch-foobar.c2# making "
+"changes to [.filename]#${WRKSRC}/foobar.c# makes them fragile and difficult "
+"to debug."
+msgstr ""
+"Избегайте ситуации, когда несколько патчей изменяют один и тот же файл. "
+"Например, если и [.filename]#patch-foobar.c#, и [.filename]#patch-foobar.c2# "
+"вносят изменения в [.filename]#${WRKSRC}/foobar.c#, это делает их хрупкими и "
+"затрудняет отладку."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:170
+msgid ""
+"When creating names for patch files, replace each underscore (`\\_`) with "
+"two underscores (`\\__`) and each slash (`/`) with one underscore (`_`). For "
+"example, to patch a file named [.filename]#src/freeglut_joystick.c#, name "
+"the corresponding patch [.filename]#patch-src_freeglut__joystick.c#. Do not "
+"name patches like [.filename]#patch-aa# or [.filename]#patch-ab#. Always use "
+"the path and file name in patch names. Using `make makepatch` automatically "
+"generates the correct names."
+msgstr ""
+"При создании имен для файлов исправлений заменяйте каждое подчеркивание "
+"(`\\_`) на два подчеркивания (`\\__`) и каждый слэш (`/`) на одно "
+"подчеркивание (`_`). Например, чтобы исправить файл с именем [.filename]#src/"
+"freeglut_joystick.c#, назовите соответствующий исправление [.filename]#patch-"
+"src_freeglut__joystick.c#. Не называйте исправления как [.filename]#patch-"
+"aa# или [.filename]#patch-ab#. Всегда используйте путь и имя файла в "
+"названиях исправлений. Использование `make makepatch` автоматически "
+"генерирует правильные имена."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:171
+msgid ""
+"A patch may modify multiple files if the changes are related and the patch "
+"is named appropriately. For example, [.filename]#patch-add-missing-stdlib.h#."
+msgstr ""
+"Патч может изменять несколько файлов, если изменения связаны между собой и "
+"патч назван соответствующим образом. Например, [.filename]#patch-add-missing-"
+"stdlib.h#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:172
+msgid ""
+"Only use characters `[-+.\\_a-zA-Z0-9]` for naming patches. In particular, "
+"__do not use `::` as a path separator,__ use `_` instead."
+msgstr ""
+"Используйте только символы `[-+.\\_a-zA-Z0-9]` для именования патчей. В "
+"частности, __не используйте `::` как разделитель путей,__ вместо этого "
+"используйте `_`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:177
+msgid ""
+"Minimize the amount of non-functional whitespace changes in patches. It is "
+"common in the Open Source world for projects to share large amounts of a "
+"code base, but obey different style and indenting rules. When taking a "
+"working piece of functionality from one project to fix similar areas in "
+"another, please be careful: the resulting patch may be full of non-"
+"functional changes. It not only increases the size of the ports repository "
+"but makes it hard to find out what exactly caused the problem and what was "
+"changed at all."
+msgstr ""
+"Минимизируйте количество нефункциональных изменений пробелов в патчах. В "
+"мире открытого исходного кода распространена практика, когда проекты "
+"используют обширные части кодовой базы, но следуют разным правилам стиля и "
+"отступов. При переносе работоспособного функционала из одного проекта для "
+"исправления аналогичных участков в другом будьте внимательны: итоговый патч "
+"может быть переполнен нефункциональными изменениями. Это не только "
+"увеличивает размер репозитория портов, но и затрудняет понимание того, что "
+"именно вызвало проблему и какие изменения были внесены."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:179
+msgid ""
+"If a file must be deleted, do it in the `post-extract` target rather than as "
+"part of the patch."
+msgstr ""
+"Если файл необходимо удалить, сделайте это в цели `post-extract`, а не как "
+"часть исправления."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:181
+#, no-wrap
+msgid "Manual Patch Generation"
+msgstr "Ручное создание патчей"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:188
+msgid ""
+"Manual patch creation is usually not necessary. Automatic patch generation "
+"as described earlier in this section is the preferred method. However, "
+"manual patching may be required occasionally."
+msgstr ""
+"Ручное создание патчей обычно не требуется. Предпочтительным методом "
+"является автоматическая генерация патчей, как описано ранее в этом разделе. "
+"Однако иногда может потребоваться ручное исправление."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:193
+msgid ""
+"Patches are saved into files named [.filename]#patch-*# where * indicates "
+"the pathname of the file that is patched, such as [.filename]#patch-"
+"Imakefile# or [.filename]#patch-src-config.h#. Patches with file names "
+"which do not start with [.filename]#patch-# will not be applied "
+"automatically."
+msgstr ""
+"Патчи сохраняются в файлы с именами [.filename]#patch-*#, где * указывает на "
+"путь к файлу, который патчится, например [.filename]#patch-Imakefile# или "
+"[.filename]#patch-src-config.h#. Патчи с именами файлов, не начинающимися с "
+"[.filename]#patch-#, не будут применены автоматически."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:196
+msgid ""
+"After the file has been modified, man:diff[1] is used to record the "
+"differences between the original and the modified version. `-u` causes "
+"man:diff[1] to produce \"unified\" diffs, the preferred form."
+msgstr ""
+"После изменения файла используется man:diff[1] для записи различий между "
+"оригинальной и изменённой версиями. `-u` заставляет man:diff[1] выводить "
+"различия файлов в \"унифицированном\" формате (unified diffs), которые "
+"являются предпочтительным форматом."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:200
+#, no-wrap
+msgid "% diff -u file.orig file > patch-pathname-file\n"
+msgstr "% diff -u file.orig file > patch-pathname-file\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:203
+msgid ""
+"When generating patches for new, added files, `-N` is used to tell "
+"man:diff[1] to treat the non-existent original file as if it existed but was "
+"empty:"
+msgstr ""
+"Для порождении патчей для новых добавляемых файлов используется параметр `-"
+"N`, который заставляет man:diff[1] трактовать несуществующие прежде файлы "
+"как если бы они существовали, но имели пустое содержимое:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:207
+#, no-wrap
+msgid "% diff -u -N newfile.orig newfile > patch-pathname-newfile\n"
+msgstr "% diff -u -N newfile.orig newfile > patch-pathname-newfile\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:213
+msgid ""
+"Using the recurse (`-r`) option to man:diff[1] to generate patches is fine, "
+"but please look at the resulting patches to make sure there is no "
+"unnecessary junk in there. In particular, diffs between two backup files, "
+"[.filename]##Makefile##s when the port uses `Imake` or GNU `configure`, "
+"etc., are unnecessary and have to be deleted. If it was necessary to edit "
+"[.filename]#configure.in# and run `autoconf` to regenerate `configure`, do "
+"not take the diffs of `configure` (it often grows to a few thousand "
+"lines!). Instead, define `USES=autoreconf` and take the diffs of "
+"[.filename]#configure.in#."
+msgstr ""
+"Использование опции рекурсии (`-r`) в man:diff[1] для создания патчей "
+"допустимо, но пожалуйста, проверяйте полученные патчи, чтобы убедиться в "
+"отсутствии ненужных данных. В частности, различия между резервными файлами, "
+"[.filename]##Makefile##, когда порт использует `Imake` или GNU `configure`, "
+"и т.д., являются избыточными и должны быть удалены. Если потребовалось "
+"отредактировать [.filename]#configure.in# и запустить `autoconf` для "
+"перегенерации `configure`, не включайте различия в `configure` (его объем "
+"часто достигает нескольких тысяч строк!). Вместо этого определите "
+"`USES=autoreconf` и возьмите различия для [.filename]#configure.in#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:215
+#, no-wrap
+msgid "Simple Automatic Replacements"
+msgstr "Простая автоматическая замена"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:219
+msgid ""
+"Simple replacements can be performed directly from the port "
+"[.filename]#Makefile# using the in-place mode of man:sed[1]. This is useful "
+"when changes use the value of a variable:"
+msgstr ""
+"Простые замены могут быть выполнены напрямую из [.filename]#Makefile# порта, "
+"используя режим редактирования на месте утилиты man:sed[1]. Это полезно, "
+"когда изменения используют значение переменной:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:224
+#, no-wrap
+msgid ""
+"post-patch:\n"
+"\t@${REINPLACE_CMD} -e 's|/usr/local|${PREFIX}|g' ${WRKSRC}/Makefile\n"
+msgstr ""
+"post-patch:\n"
+"\t@${REINPLACE_CMD} -e 's|/usr/local|${PREFIX}|g' ${WRKSRC}/Makefile\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:230
+msgid ""
+"Only use man:sed[1] to replace variable content. You must use patch files "
+"instead of man:sed[1] to replace static content."
+msgstr ""
+"Используйте man:sed[1] только для замены изменяемого содержимого. Для замены "
+"статического содержимого необходимо использовать файлы исправлений вместо "
+"man:sed[1]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:235
+msgid ""
+"Quite often, software being ported uses the CR/LF convention in source "
+"files. This may cause problems with further patching, compiler warnings, or "
+"script execution (like `/bin/sh^M not found`.) To quickly convert all files "
+"from CR/LF to just LF, add this entry to the port [.filename]#Makefile#:"
+msgstr ""
+"Довольно часто портируемое программное обеспечение использует соглашение CR/"
+"LF в исходных файлах. Это может вызвать проблемы с дальнейшим наложением "
+"патчей, предупреждениями компилятора или выполнением скриптов (например, `/"
+"bin/sh^M не найден`). Для быстрого преобразования всех файлов из CR/LF в "
+"просто LF добавьте следующую запись в [.filename]#Makefile# порта:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:239
+#, no-wrap
+msgid "USES=\tdos2unix\n"
+msgstr "USES=\tdos2unix\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:242
+msgid "A list of specific files to convert can be given:"
+msgstr "Список конкретных файлов для преобразования может быть указан:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:247
+#, no-wrap
+msgid ""
+"USES=\tdos2unix\n"
+"DOS2UNIX_FILES=\tutil.c util.h\n"
+msgstr ""
+"USES=\tdos2unix\n"
+"DOS2UNIX_FILES=\tutil.c util.h\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:254
+msgid ""
+"Use `DOS2UNIX_REGEX` to convert a group of files across subdirectories. Its "
+"argument is a man:find[1]-compatible regular expression. More on the format "
+"is in man:re_format[7]. This option is useful for converting all files of a "
+"given extension. For example, convert all source code files, leaving binary "
+"files intact:"
+msgstr ""
+"Используйте `DOS2UNIX_REGEX` для преобразования группы файлов во вложенных "
+"каталогах. Его аргумент — это совместимое с man:find[1] регулярное "
+"выражение. Подробнее о формате можно узнать в man:re_format[7]. Эта опция "
+"полезна для преобразования всех файлов с заданным расширением. Например, "
+"преобразовать все исходные файлы кода, оставив двоичные файлы без изменений:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:259
+#, no-wrap
+msgid ""
+"USES=\tdos2unix\n"
+"DOS2UNIX_REGEX=\t.*\\.([ch]|cpp)\n"
+msgstr ""
+"USES=\tdos2unix\n"
+"DOS2UNIX_REGEX=\t.*\\.([ch]|cpp)\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:262
+msgid ""
+"A similar option is `DOS2UNIX_GLOB`, which runs `find` for each element "
+"listed in it."
+msgstr ""
+"Аналогичной опцией является `DOS2UNIX_GLOB`, которая запускает `find` для "
+"каждого указанного в ней элемента."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:267
+#, no-wrap
+msgid ""
+"USES=\tdos2unix\n"
+"DOS2UNIX_GLOB=\t*.c *.cpp *.h\n"
+msgstr ""
+"USES=\tdos2unix\n"
+"DOS2UNIX_GLOB=\t*.c *.cpp *.h\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:271
+msgid ""
+"The base directory for the conversion can be set. This is useful when there "
+"are multiple distfiles and several contain files which require line-ending "
+"conversion."
+msgstr ""
+"Базовый каталог для преобразования может быть установлен. Это полезно, когда "
+"имеется несколько distfiles и в нескольких из них содержатся файлы, "
+"требующие преобразования окончаний строк."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:276
+#, no-wrap
+msgid ""
+"USES=\tdos2unix\n"
+"DOS2UNIX_WRKSRC=\t${WRKDIR}\n"
+msgstr ""
+"USES=\tdos2unix\n"
+"DOS2UNIX_WRKSRC=\t${WRKDIR}\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:279
+#, no-wrap
+msgid "Patching Conditionally"
+msgstr "Внесение исправлений при условии"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:286
+msgid ""
+"Some ports need patches that are only applied for specific FreeBSD versions "
+"or when a particular option is enabled or disabled. Conditional patches are "
+"specified by placing the full paths to the patch files in `EXTRA_PATCHES`. "
+"Conditional patch file names usually start with [.filename]#extra-# although "
+"this is not necessary. However, their file names _must not_ start with "
+"[.filename]#patch-#. If they do, they are applied unconditionally by the "
+"framework which is undesired for conditional patches."
+msgstr ""
+"Некоторые порты требуют патчей, которые применяются только для определённых "
+"версий FreeBSD или при включении или отключении конкретной опции. Условные "
+"патчи указываются путём размещения полных путей к файлам патчей в "
+"`EXTRA_PATCHES`. Имена файлов условных патчей обычно начинаются с "
+"[.filename]#extra-#, хотя это и не обязательно. Однако их имена _не должны_ "
+"начинаться с [.filename]#patch-#. Если это произойдёт, они будут применены "
+"безусловно фреймворком, что нежелательно для условных патчей."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:288
+#, no-wrap
+msgid "Applying a Patch for a Specific FreeBSD Version"
+msgstr "Применение патча для конкретной версии FreeBSD"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:294
+#, no-wrap
+msgid ".include <bsd.port.options.mk>\n"
+msgstr ".include <bsd.port.options.mk>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:299
+#, no-wrap
+msgid ""
+"# Patch in the iconv const qualifier before this\n"
+".if ${OPSYS} == FreeBSD && ${OSVERSION} < 1100069\n"
+"EXTRA_PATCHES=\t${PATCHDIR}/extra-patch-fbsd10\n"
+".endif\n"
+msgstr ""
+"# Patch in the iconv const qualifier before this\n"
+".if ${OPSYS} == FreeBSD && ${OSVERSION} < 1100069\n"
+"EXTRA_PATCHES=\t${PATCHDIR}/extra-patch-fbsd10\n"
+".endif\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:301
+#, no-wrap
+msgid ".include <bsd.port.mk>\n"
+msgstr ".include <bsd.port.mk>\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:306
+#, no-wrap
+msgid "Optionally Applying a Patch"
+msgstr "Опциональное применение патча"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:311
+msgid ""
+"When an crossref:makefiles[makefile-options,option] requires a patch, use "
+"``opt_EXTRA_PATCHES`` and ``opt_EXTRA_PATCHES_OFF`` to make the patch "
+"conditional on the `opt` option. See crossref:makefiles[options-"
+"variables,Generic Variables Replacement, `OPT_VARIABLE` and "
+"`OPT_VARIABLE_OFF`] for more information."
+msgstr ""
+"Когда для crossref:makefiles[makefile-options,опции] требуется патч, "
+"используйте ``opt_EXTRA_PATCHES`` и ``opt_EXTRA_PATCHES_OFF``, чтобы сделать "
+"исправление зависимым от опции `opt`. Дополнительные сведения см. в "
+"crossref:makefiles[options-variables,Generic Variables Replacement, "
+"`OPT_VARIABLE` и `OPT_VARIABLE_OFF`]."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:318
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\t FOO BAR\n"
+"FOO_EXTRA_PATCHES= ${PATCHDIR}/extra-patch-foo\n"
+"BAR_EXTRA_PATCHES_OFF=\t${PATCHDIR}/extra-patch-bar.c \\\n"
+"\t\t${PATCHDIR}/extra-patch-bar.h\n"
+msgstr ""
+"OPTIONS_DEFINE=\t FOO BAR\n"
+"FOO_EXTRA_PATCHES= ${PATCHDIR}/extra-patch-foo\n"
+"BAR_EXTRA_PATCHES_OFF=\t${PATCHDIR}/extra-patch-bar.c \\\n"
+"\t\t${PATCHDIR}/extra-patch-bar.h\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:323
+#, no-wrap
+msgid "Using `EXTRA_PATCHES` With a Directory"
+msgstr "Использование `EXTRA_PATCHES` с директорией"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:328
+msgid ""
+"Sometimes, there are many patches that are needed for a feature, in this "
+"case, it is possible to point `EXTRA_PATCHES` to a directory, and it will "
+"automatically apply all files named [.filename]#patch-*# in it."
+msgstr ""
+"Иногда для функции требуется множество патчей, в таком случае можно указать "
+"`EXTRA_PATCHES` на директорию, и все файлы с именем [.filename]#patch-*# в "
+"ней будут применены автоматически."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:331
+msgid ""
+"Create a subdirectory in [.filename]#${PATCHDIR}#, and move the patches in "
+"it. For example:"
+msgstr ""
+"Создайте подкаталог в [.filename]#${PATCHDIR}# и переместите в него патчи. "
+"Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:337
+#, no-wrap
+msgid ""
+"% ls -l files/foo-patches\n"
+"-rw-r--r-- 1 root wheel 350 Jan 16 01:27 patch-Makefile.in\n"
+"-rw-r--r-- 1 root wheel 3084 Jan 18 15:37 patch-configure.ac\n"
+msgstr ""
+"% ls -l files/foo-patches\n"
+"-rw-r--r-- 1 root wheel 350 Jan 16 01:27 patch-Makefile.in\n"
+"-rw-r--r-- 1 root wheel 3084 Jan 18 15:37 patch-configure.ac\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:340
+msgid "Then add this to the [.filename]#Makefile#:"
+msgstr "Затем добавьте это в [.filename]#Makefile#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:345
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tFOO\n"
+"FOO_EXTRA_PATCHES=\t${PATCHDIR}/foo-patches\n"
+msgstr ""
+"OPTIONS_DEFINE=\tFOO\n"
+"FOO_EXTRA_PATCHES=\t${PATCHDIR}/foo-patches\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:348
+msgid ""
+"The framework will then use all the files named [.filename]#patch-*# in that "
+"directory."
+msgstr ""
+"Затем фреймворк использует все файлы с именем [.filename]#patch-*# в этом "
+"каталоге."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:351
+#, no-wrap
+msgid "Configuring"
+msgstr "Конфигурирование"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:355
+msgid ""
+"Include any additional customization commands in the [.filename]#configure# "
+"script and save it in the [.filename]#scripts# subdirectory. As mentioned "
+"above, it is also possible do this with [.filename]#Makefile# targets and/or "
+"scripts with the name [.filename]#pre-configure# or [.filename]#post-"
+"configure#."
+msgstr ""
+"Поместите все дополнительные команды, требуемые для настройки, в ваш скрипт "
+"[.filename]#configure# и сохраните его в подкаталоге [.filename]#scripts#. "
+"Как отмечено выше, вы можете сделать это целями в файле "
+"[.filename]#Makefile# и/или скриптами с именами [.filename]#pre-configure# "
+"или [.filename]#post-configure#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:357
+#, no-wrap
+msgid "Handling User Input"
+msgstr "Обработка пользовательского ввода"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:364
+msgid ""
+"If the port requires user input to build, configure, or install, set "
+"`IS_INTERACTIVE` in the [.filename]#Makefile#. This will allow \"overnight "
+"builds\" to skip it. If the user sets the variable `BATCH` in their "
+"environment (and if the user sets the variable `INTERACTIVE`, then _only_ "
+"those ports requiring interaction are built). This will save a lot of "
+"wasted time on the set of machines that continually build ports (see below)."
+msgstr ""
+"Если для построения, конфигурации или установки вашего порта требуется "
+"некоторый ввод со стороны пользователя, то вы должны задать переменную "
+"`IS_INTERACTIVE` в вашем файле [.filename]#Makefile#. В случае \"ночного "
+"построения\" это позволит пропустить ваш порт, если пользователь в своем "
+"окружении задал переменную `BATCH` (и если пользователь установил переменную "
+"`INTERACTIVE`, то будут строиться _только_ порты, которые требуют "
+"взаимодействия с пользователем. Это сэкономит значительное количество "
+"времени на части машин, которые постоянно строят порты (смотрите ниже)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:366
+msgid ""
+"It is also recommended that if there are reasonable default answers to the "
+"questions, `PACKAGE_BUILDING` be used to turn off the interactive script "
+"when it is set. This will allow us to build the packages for CDROMs and FTP."
+msgstr ""
+"При наличии разумных ответов на задаваемые вопросы, подходящих по умолчанию, "
+"также рекомендуется проверять переменную `PACKAGE_BUILDING` и выключать "
+"интерактивный скрипт, если он есть. Это позволит нам строить пакеты для "
+"помещения на компакт-диски и FTP-серверы."
diff --git a/documentation/content/ru/books/porters-handbook/special/_index.adoc b/documentation/content/ru/books/porters-handbook/special/_index.adoc
index 9bfdfcc275..14f3d94db3 100644
--- a/documentation/content/ru/books/porters-handbook/special/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/special/_index.adoc
@@ -1,11 +1,13 @@
---
-title: Глава 6. Особые соглашения
+description: 'Особые соображения при создании нового порта FreeBSD'
+next: books/porters-handbook/flavors
+params:
+ path: /books/porters-handbook/special/
prev: books/porters-handbook/makefiles
-next: books/porters-handbook/plist
showBookMenu: true
+tags: ["special considerations", "Handling Symbolic Links", "Bundled Libraries"]
+title: 'Глава 6. Особые соглашения'
weight: 6
-params:
- path: "/books/porters-handbook/special/"
---
[[special]]
@@ -48,17 +50,31 @@ endif::[]
Имеется ещё несколько вещей, которые вы должны иметь в виду при создании порта. Этот раздел описывает наиболее часто встречающиеся из них.
+[[splitting-long-files]]
+== Разделение длинных файлов
+
+Иногда [.filename]#Makefiles# могут быть очень длинными. Например, порты rust могут содержать очень длинный список `CARGO_CRATES`. В других случаях [.filename]#Makefile# может содержать код, который варьируется в зависимости от архитектуры. В таких ситуациях может быть удобно разделить исходный [.filename]#Makefile# на несколько файлов. [.filename]#bsd.port.mk# автоматически включает некоторые типы [.filename]#Makefiles# в основной [.filename]#Makefile# порта.
+
+Вот файлы, которые система обрабатывает автоматически, если они обнаружены:
+
+* [.filename]#Makefile.crates#. Пример можно найти в пакете package:audio/ebur128[].
+* [.filename]#Makefile.inc#. Пример можно найти в пакете package:net/ntp[].
+* [.filename]#Makefile.${ARCH}-${OPSYS}#
+* [.filename]#Makefile.${OPSYS}#. Пример можно найти в пакете package:net/cvsup-static[].
+* [.filename]#Makefile.${ARCH}#
+* [.filename]#Makefile.local#
+
+Также распространённой практикой является разделение списка пакетов порта на несколько файлов, если список сильно различается в зависимости от архитектуры или выбранного флейвора. В этом случае файл [.filename]#pkg-plist# для каждой архитектуры именуется по шаблону [.filename]#pkg-plist.${ARCH}# или [.filename]#pkg-plist.${FLAVOR}#. Фреймворк не создаёт список пакетов автоматически, если существует несколько файлов [.filename]#pkg-plist#. Ответственность за выбор подходящего файла [.filename]#pkg-plist# и его присвоение переменной `PLIST` лежит на того, кто делает порт. Примеры работы с этим можно найти в портах package:audio/logitechmediaserver[] и package:deskutils/libportal[].
+
[[staging]]
== Staging
-[.filename]#bsd.port.mk# ожидает от портов работу с "каталогом сборки". Это означает, что порт должен устанавливать файлы не напрямую в назначенные каталоги (то есть, например, под `PREFIX`), а в отдельный каталог, из которого затем собирается пакет. Во многих случаях привилегии root для этого не требуются, что делает возможным сборку пакетов из-под непривилегированного пользователя. В режиме staging порт собирается и устанавливается в каталог сборки `STAGEDIR`. Пакет создается из каталога сборки и затем устанавливается в систему. В инструментарии automake такая концепция именуется `DESTDIR`; в прочем, в FreeBSD `DESTDIR` имеет собственное значение (смотрите crossref:testing[porting-prefix, `PREFIX` и `DESTDIR`]).
-
-Если для порта всё ещё требуются системные привилегии при выполнении цели `package`, то в [.filename]#Makefile# должна быть добавлена следующая строка:
+[.filename]#bsd.port.mk# ожидает, что порты будут работать с "директорией стадии". Это означает, что порт не должен устанавливать файлы напрямую в обычные целевые директории (например, под `PREFIX`), а вместо этого в отдельную директорию, из которой затем собирается пакет. Во многих случаях это не требует прав root, что позволяет собирать пакеты от имени непривилегированного пользователя. При использовании стадии порт собирается и устанавливается в директорию стадии `STAGEDIR`. Пакет создаётся из директории стадии и затем устанавливается в систему. Инструменты Automake называют эту концепцию `DESTDIR`, но в FreeBSD `DESTDIR` имеет другое значение (см. crossref:testing[porting-prefix,`PREFIX` и `DESTDIR`]).
-[.programlisting]
-....
-NEED_ROOT= yes
-....
+[NOTE]
+====
+Ни один порт _на самом деле_ не должен работать от root. Этого в большинстве случаев можно избежать, используя crossref:uses[uses-uidfix,`USES=uidfix`]. Если порт всё ещё выполняет команды, такие как man:chown[8], man:chgrp[1], или принудительно устанавливает владельца или группу с помощью man:install[1], то используйте crossref:uses[uses-fakeroot,`USES=fakeroot`], чтобы подделать эти вызовы. Потребуется некоторая правка [.filename]#Makefiles# порта.
+====
Метапорты, то есть порты, которые не устанавливают файлы непосредственно, а только зависят от других портов, должны по возможности избегать распаковки man:mtree[8] в каталог сборки. Это основная иерархия каталогов пакета, и эти пустые каталоги будут выглядеть лишними. Для предотвращения распаковки man:mtree[8] добавьте эту строку:
@@ -67,18 +83,97 @@ NEED_ROOT= yes
NO_MTREE= yes
....
-Staging задействуется посредством добавления переменной `STAGEDIR` слева от путей, которые используются в целях `pre-install`, `do-install` и `post-install` (смотрите примеры в книге). Обычно сюда относятся `PREFIX`, `ETCDIR`, `DATADIR`, `EXAMPLESDIR`, `MANPREFIX`, `DOCSDIR` и так далее. Каталоги должны создаваться при выполнении цели `post-install`. Избегайте использования абсолютных путей, когда это возможно.
+[TIP]
+====
+Метапорты должны использовать crossref:special[uses-metaport,`USES=metaport`]. Это устанавливает значения по умолчанию для портов, которые не загружают, не собирают и не устанавливают ничего.
+====
+
+Этап подготовки включается путем добавления `STAGEDIR` к путям, используемым в целях `pre-install`, `do-install` и `post-install` (см. примеры в книге). Обычно это включает `PREFIX`, `ETCDIR`, `DATADIR`, `EXAMPLESDIR`, `DOCSDIR` и т. д. Каталоги должны создаваться как часть цели `post-install`. По возможности избегайте использования абсолютных путей.
+
+[TIP]
+====
+Порты, которые устанавливают модули ядра, должны добавлять `STAGEDIR` к пути назначения, по умолчанию это [.filename]#/boot/modules#.
+====
-При создании символический ссылки `STAGEDIR` должен ставиться только для пути назначения. Например:
+[[staging-symlink]]
+=== Обработка символических ссылок
+
+При создании символической ссылки настоятельно рекомендуется использовать относительные пути. Используйте `${RLN}` для создания относительных символических ссылок. Эта команда использует man:install[1] для автоматического определения относительной ссылки, которую нужно создать.
+
+[[staging-ex1]]
+.Автоматическое создание относительных символических ссылок
+[example]
+====
+`${RLN}` использует относительную символическую ссылку из man:install[1], что освобождает сборщика порта от вычисления относительного пути.
[.programlisting]
....
-${LN} -sf libfoo.so.42 ${STAGEDIR}${PREFIX}/lib/libfoo.so
+${RLN} ${STAGEDIR}${PREFIX}/lib/libfoo.so.42 ${STAGEDIR}${PREFIX}/lib/libfoo.so
+${RLN} ${STAGEDIR}${PREFIX}/libexec/foo/bar ${STAGEDIR}${PREFIX}/bin/bar
+${RLN} ${STAGEDIR}/var/cache/foo ${STAGEDIR}${PREFIX}/share/foo
+....
+
+Будет создано:
+
+[source, shell]
+....
+% ls -lF ${STAGEDIR}${PREFIX}/lib
+lrwxr-xr-x 1 nobody nobody 181 Aug 3 11:27 libfoo.so@ -> libfoo.so.42
+-rwxr-xr-x 1 nobody nobody 15 Aug 3 11:24 libfoo.so.42*
+% ls -lF ${STAGEDIR}${PREFIX}/bin
+lrwxr-xr-x 1 nobody nobody 181 Aug 3 11:27 bar@ -> ../libexec/foo/bar
+% ls -lF ${STAGEDIRDIR}${PREFIX}/share
+lrwxr-xr-x 1 nobody nobody 181 Aug 3 11:27 foo@ -> ../../../var/cache/foo
....
-Первоначальный путь [.filename]#${PREFIX}/lib/libfoo.so.42# выглядит нормально, но по факту может быть неправильным. Абсолютные пути могут указывать на неподходящее место, например, когда удалённая файловая система смонтирована по NFS как непривилегированная точка монтирования. Относительные пути реже подвержены проблемам и часто намного короче.
+====
+
+[[bundled-libs]]
+== Встроенные библиотеки
+
+Этот раздел объясняет, почему встроенные зависимости считаются плохими и что с этим делать.
+
+[[bundled-libs-why-bad]]
+=== Почему встроенные библиотеки — это плохо
+
+Некоторое программное обеспечение требует от упаковщика найти сторонние библиотеки и добавить необходимые зависимости в порт. Другое ПО включает все необходимые библиотеки в дистрибутивный файл. Второй подход кажется проще на первый взгляд, но имеет серьёзные недостатки:
+
+Этот список частично основан на вики https://fedoraproject.org/wiki/Packaging:No_Bundled_Libraries[Fedora] и https://wiki.gentoo.org/wiki/Why_not_bundle_dependencies[Gentoo], оба распространяются по лицензии https://creativecommons.org/licenses/by-sa/3.0/[CC-BY-SA 3.0].
+
+Безопасность::
+Если уязвимости обнаружены в вышестоящей библиотеке и исправлены там, они могут остаться неисправленными в библиотеке, поставляемой с портом. Одной из причин может быть то, что автор не знает о проблеме. Это означает, что портировщик должен исправить их или обновить до не уязвимой версии и отправить исправление автору. Всё это требует времени, что приводит к тому, что программное обеспечение остаётся уязвимым дольше, чем необходимо. Это, в свою очередь, затрудняет координацию исправления без неоправданного раскрытия информации об уязвимости.
+
+Ошибки::
+Эта проблема аналогична проблеме с безопасностью в последнем абзаце, но в целом менее серьезная.
+
+Ветвление::
+Автору проще создать форк upstream-библиотеки после её включения в дистрибутив. Хотя на первый взгляд это кажется удобным, такой подход приводит к расхождению кода с исходным репозиторием, что усложняет исправление уязвимостей и других проблем в ПО. Одна из причин — затруднённое применение патчей.
++
+Еще одна проблема форкинга заключается в том, что из-за расхождения кода с основной веткой, ошибки исправляются снова и снова, вместо того чтобы быть исправленными один раз в центральном месте. Это противоречит самой идее открытого программного обеспечения.
+
+Конфликты символов::
+Когда библиотека установлена в системе, может возникнуть конфликт с встроенной в порт версией. Это может привести к немедленным ошибкам во время компиляции или компоновки. Также могут возникать ошибки при запуске программы, которые сложнее отследить. Последняя проблема может быть вызвана несовместимостью версий двух библиотек.
-Порты, устанавливающие модули ядра, должны предварять путь установки (по умолчанию [.filename]#/boot/modules#) переменной `STAGEDIR`.
+Лицензирование::
+При объединении проектов из различных источников могут возникать проблемы с лицензиями, особенно если лицензии несовместимы.
+
+Растрата ресурсов::
+Библиотеки, поставляемые в комплекте, растрачивают ресурсы на нескольких уровнях. Сборка самого приложения занимает больше времени, особенно если эти библиотеки уже присутствуют в системе. Во время выполнения они могут занимать дополнительную память, когда общесистемная библиотека уже загружена одной программой, а входящая в комплект библиотека загружена другой программой.
+
+Пустая трата усилий::
+Когда библиотеке требуются патчи для FreeBSD, эти патчи приходится дублировать в составе библиотеки. Это приводит к потере времени разработчиков, поскольку патчи могут применяться некорректно. Кроме того, бывает сложно сразу заметить, что эти патчи вообще необходимы.
+
+[[bundled-libs-practices]]
+=== Что делать со встроенными библиотеками
+
+По возможности используйте независимую версию библиотеки, добавив `LIB_DEPENDS` в порт. Если такого порта ещё не существует, рассмотрите возможность его создания.
+
+Используйте встроенные библиотеки только в том случае, если разработчик имеет хорошую репутацию в вопросах безопасности, а использование внешних версий приводит к излишне сложным исправлениям.
+
+[NOTE]
+====
+В некоторых особых случаях, например, для эмуляторов, таких как Wine, порт должен включать библиотеки, потому что они предназначены для другой архитектуры или были изменены для использования в данном программном обеспечении. В таком случае эти библиотеки не должны быть доступны для связывания с другими портами. Добавьте `BUNDLE_LIBS=yes` в [.filename]#Makefile# порта. Это укажет man:pkg[8] не учитывать предоставляемые библиотеки. Всегда спрашивайте {portmgr}, прежде чем добавлять это в порт.
+====
[[porting-shlibs]]
== Динамические библиотеки
@@ -101,7 +196,7 @@ USE_LDCONFIG= ${PREFIX}/lib/foo ${PREFIX}/lib/bar
При установке 32-разрядных библиотек на 64-разрядной системе используйте вместо этого `USE_LDCONFIG32`.
-Постарайтесь сохранять номера версий динамических библиотек в формате [.filename]#libfoo.so.0#. Наш компоновщик позаботится только о старшем (первом) номере.
+Если программное обеспечение использует crossref:special[using-autotools,autotools], в частности `libtool`, добавьте crossref:uses[uses-libtool,`USES=libtool`].
Если при обновлении порта увеличивается старший номер версии библиотеки, то для всех портов, компонуемых с затронутой библиотекой, следует увеличить значение `PORTREVISION` для форсирования перекомпиляции с новой версией библиотеки.
@@ -117,6 +212,7 @@ USE_LDCONFIG= ${PREFIX}/lib/foo ${PREFIX}/lib/bar
В подобных ситуациях можно использовать переменные, описываемые в последующих разделах.
+[[porting-restrictions-no_package]]
=== `NO_PACKAGE`
Эта переменная указывает, что мы не можем создавать для приложения двоичный пакет. К примеру, лицензия не позволяет бинарное распространение или она может запрещать распространение пакетов, созданных из изменённых исходников.
@@ -127,6 +223,7 @@ USE_LDCONFIG= ${PREFIX}/lib/foo ${PREFIX}/lib/bar
Значением переменной `NO_PACKAGE` должна быть строка, описывающая причину, по которой пакет не должен создаваться.
+[[porting-restrictions-no_cdrom]]
=== `NO_CDROM`
Эта переменная указывает на то, что, хотя мы имеем право создавать бинарные пакеты, мы не можем помещать эти пакеты или файлы `DISTFILES` порта на CD-ROM (или на похожие носители) для перепродажи. Однако бинарные пакеты и файлы `DISTFILES` порта будут оставаться доступными посредством FTP/HTTP.
@@ -135,12 +232,14 @@ USE_LDCONFIG= ${PREFIX}/lib/foo ${PREFIX}/lib/bar
В качестве значения `NO_CDROM` должна указываться строка, описывающая причины, по которым порт не может распространяться на CD-ROM. К примеру, это применяется, если лицензионное соглашение приложения предполагает только его "некоммерческое" использование.
+[[porting-restrictions-nofetchfiles]]
=== `NOFETCHFILES`
Файлы, определенные в переменной `NOFETCHFILES`, не будут извлекаться ни из одного из `MASTER_SITES`. Примером такого файла является файл, поставляемый на CD-ROM.
Инструменты, проверяющие доступность этих файлов на `MASTER_SITES`, должны игнорировать эти файлы и не сообщать о них.
+[[porting-restrictions-restricted]]
=== `RESTRICTED`
Задайте эту переменную, если лицензия на приложение не позволяет ни зеркалировать файлы `DISTFILES`, ни распространять бинарный пакет через FTP/HTTP или на CD-ROM.
@@ -149,19 +248,23 @@ USE_LDCONFIG= ${PREFIX}/lib/foo ${PREFIX}/lib/bar
В качестве значения `RESTRICTED` должна указываться строка, описывающая причины, по которым порт нельзя распространять. Обычно это означает, что порт использует закрытое программное обеспечение, а пользователь должен вручную сгрузить файлы `DISTFILES`, возможно, после заполнения регистрационной формы или подтверждения соглашения с условиями EULA.
+[[porting-restrictions-restricted_files]]
=== `RESTRICTED_FILES`
Если заданы `RESTRICTED` или `NO_CDROM`, то значение этой переменной по умолчанию соответствует `${DISTFILES} ${PATCHFILES}`, в противном случае она пуста. Если ограничены в распространении лишь некоторые из дистрибутивных файлов, то в этой переменной задаётся их список.
+[[porting-restrictions-legal_text]]
=== `LEGAL_TEXT`
Если порт имеет правовое обременение, которое не покрывается перечисленными выше переменными, то переменной `LEGAL_TEXT` следует присвоить строку с описанием данного обременения. Например, если было получено особое разрешение для FreeBSD на распространение двоичного файла, то эта переменная должна содержать соответствующее указание.
+[[porting-restrictions-legal]]
=== [.filename]#/usr/ports/LEGAL# и `LEGAL`
Порт, содержащий любую из перечисленных выше переменных, также должен быть добавлен в [.filename]#/usr/ports/LEGAL#. Первый столбец содержит шаблон совпадения с дистрибутивными файлами, имеющими ограничения на распространение. Второй столбец содержит корень порта. Третий столбец содержит вывод `make -VLEGAL`.
-=== Примеры использования
+[[porting-restrictions-examples]]
+=== Примеры
Предпочтительным способом реализации утверждения "архивы исходных текстов для этого порта должны загружаться самостоятельно" является следующее:
@@ -186,23 +289,19 @@ IGNORE= may not be redistributed because of licensing reasons. Please visit some
Это достигается путём передачи флага `-jX` команде man:make[1]. Такое построение портов является поведением по умолчанию. К сожалению, не все порты поддерживают параллельную сборку достаточно хорошо, и поэтому может потребоваться выключить этот механизм явным образом путём добавления переменной `MAKE_JOBS_UNSAFE=yes`. Эта переменная используется в случае, когда известно, что порт ломается с `-jX`.
+[IMPORTANT]
+====
+При установке `MAKE_JOBS_UNSAFE` очень важно объяснить либо комментарием в [.filename]#Makefile#, либо хотя бы в сообщении коммита, _почему_ порт не собирается при включении. В противном случае практически невозможно ни исправить проблему, ни проверить, была ли она исправлена при коммите обновления в дальнейшем.
+====
+
[[using-make]]
=== `make`, `gmake` и `imake`
-Если ваш порт использует GNU make, то установите `USES= gmake`.
-
-.Переменные для портов, использующих gmake
-[cols="1,1", frame="none", options="header"]
-|===
-| Переменная
-| Значение
+Существует несколько различных реализаций `make`. Переносимому программному обеспечению часто требуется конкретная реализация, например GNU `make`, известная в FreeBSD как `gmake`.
-|`USES= gmake`
-|Для сборки порта требуется `gmake`.
+Если порт использует GNU make, добавьте `gmake` в `USES`.
-|`GMAKE`
-|Полный путь к команде `gmake`, если отсутствует в `PATH`.
-|===
+`MAKE_CMD` может использоваться для ссылки на конкретную команду, настроенную параметром `USES` в [.filename]#Makefile# порта. Используйте `MAKE_CMD` только внутри [.filename]##Makefile## приложения в `WRKSRC` для вызова реализации `make`, ожидаемой портируемым программным обеспечением.
Если ваш порт является приложением X, которое создает файлы [.filename]#Makefile# из [.filename]#Imakefile#, используя imake, то установите `USES= imake`. Это заставит стадию конфигурирования автоматически выполнить `xmkmf -a`. Если флаг `-a` представляет для вашего порта проблему, то установите `XMKMF=xmkmf`. Если порт использует imake, но не понимает цель `install.man`, то следует установить `NO_INSTALL_MANPAGES=yes`.
@@ -213,6 +312,7 @@ IGNORE= may not be redistributed because of licensing reasons. Please visit some
Если ваш порт использует сценарий `configure` для получения файлов [.filename]#Makefile# из файлов [.filename]#Makefile.in#, то установите `GNU_CONFIGURE=yes`. Если вы хотите дать дополнительные параметры сценарию `configure` (аргументом по умолчанию является `--prefix=${PREFIX} --infodir=${PREFIX}/${INFO_PATH} --mandir=${MANPREFIX}/man --build=${CONFIGURE_TARGET}`), установите эти параметры в `CONFIGURE_ARGS`. Дополнительные переменные окружения можно передать, используя переменную `CONFIGURE_ENV`.
+[[using-configure-variables]]
.Переменные для портов, использующих `configure`
[cols="1,1", frame="none", options="header"]
|===
@@ -238,8 +338,9 @@ IGNORE= may not be redistributed because of licensing reasons. Please visit some
[[using-cmake]]
=== Использование `cmake`
-Если порт использует CMake, определите `USES= cmake` или `USES= cmake:outsource` для построения во внешнем каталоге (см. ниже).
+Если порт использует CMake, определите `USES= cmake`.
+[[using-cmake-variables]]
.Переменные для портов, использующих `cmake`
[cols="1,1", frame="none", options="header"]
|===
@@ -247,27 +348,33 @@ IGNORE= may not be redistributed because of licensing reasons. Please visit some
| Значение
|`CMAKE_ARGS`
-|Специфичные для порта флаги CMake, передаваемые `cmake`.
+|Специфичные для порта флаги CMake, передаваемые в бинарный файл `cmake`.
-|`CMAKE_BUILD_TYPE`
-|Тип построения (предопределённые профили построения CMake). По умолчанию `Release`, `Debug` при использовании `WITH_DEBUG`.
+|`CMAKE_ON`
+|Для каждой записи в `CMAKE_ON` добавляется булево значение "включено" в
+`CMAKE_ARGS`. См. crossref:special[using-cmake-example2,`CMAKE_ON` и `CMAKE_OFF`].
-|`CMAKE_ENV`
-|Переменные окружения для передачи `cmake`. По умолчанию `${CONFIGURE_ENV}`.
+|`CMAKE_OFF`
+|Для каждой записи в `CMAKE_OFF` в `CMAKE_ARGS` добавляется отключенное булево
+значение. См. crossref:special[using-cmake-example2,`CMAKE_ON` и `CMAKE_OFF`].
+
+|`CMAKE_BUILD_TYPE`
+|Тип сборки (предопределённые профили сборки CMake). По умолчанию `Release`, или `Debug`, если установлен `WITH_DEBUG`.
|`CMAKE_SOURCE_PATH`
-|Путь к каталогу с исходным кодом. По умолчанию `${WRKSRC}`.
+|Путь к исходному каталогу. По умолчанию `${WRKSRC}`.
+
+|`CONFIGURE_ENV`
+|Дополнительные переменные окружения, которые должны быть установлены для бинарного файла `cmake`.
|===
-.Переменные построения `cmake`, устанавливаемые пользователем
+[[using-cmake-user-variables]]
+.Переменные, которые пользователи могут определить для сборок `cmake`
[cols="1,1", frame="none", options="header"]
|===
| Переменная
| Значение
-|`CMAKE_VERBOSE`
-|Разрешает подробный вывод сообщений при построении. Значение по умолчанию не задано, если не заданы `BATCH` или `PACKAGE_BUILDING`.
-
|`CMAKE_NOCOLOR`
|Запрещает цветной вывод сообщений при построении. Значение по умолчанию не задано, если не заданы `BATCH` или `PACKAGE_BUILDING`.
|===
@@ -284,179 +391,765 @@ CMake поддерживает следующие профили построе
[.programlisting]
....
-USES= cmake:outsource
+USES= cmake
CMAKE_SOURCE_PATH= ${WRKSRC}/subproject
....
====
+[[using-cmake-example2]]
+.`CMAKE_ON` и `CMAKE_OFF`
+[example]
+====
+При добавлении логических значений в `CMAKE_ARGS` проще использовать переменные `CMAKE_ON` и `CMAKE_OFF` вместо этого. Это:
+
+[.programlisting]
+....
+CMAKE_ON= VAR1 VAR2
+CMAKE_OFF= VAR3
+....
+
+Эквивалентно:
+
+[.programlisting]
+....
+CMAKE_ARGS= -DVAR1:BOOL=TRUE -DVAR2:BOOL=TRUE -DVAR3:BOOL=FALSE
+....
+
+[IMPORTANT]
+======
+Это относится только к значениям по умолчанию в `CMAKE_ARGS`. Вспомогательные функции, описанные в crossref:makefiles[options-cmake_bool,`OPT_CMAKE_BOOL` и `OPT_CMAKE_BOOL_OFF`], используют ту же семантику, но для опциональных значений.
+======
+
+====
+
[[using-scons]]
=== Использование `scons`
-Если ваш порт использует SCons, определите `USE_SCONS=yes`.
+Если порт использует SCons, определите `USES=scons`.
-.Переменные для портов, использующих `scons`
-[cols="1,1", frame="none", options="header"]
+Чтобы сторонний [.filename]#SConstruct# учитывал все, что передается в SCons через окружение (то есть, что наиболее важно, `CC/CXX/CFLAGS/CXXFLAGS`), исправьте [.filename]#SConstruct#, чтобы сборка `Environment` создавалась следующим образом:
+
+[.programlisting]
+....
+env = Environment(**ARGUMENTS)
+....
+
+Он может быть изменён с помощью `env.Append` и `env.Replace`.
+
+[[using-cargo]]
+=== Сборка приложений на Rust с помощью `cargo`
+
+Для портов, использующих Cargo, определите `USES=cargo`.
+
+[[using-cargo-user-variables]]
+.Переменные, которые пользователи могут определить для сборок `cargo`
+[cols="1,1,1", frame="none", options="header"]
|===
| Переменная
-| Значение
+| По умолчанию
+| Описание
+
+|`CARGO_CRATES`
+|
+|Список ящиков (crates), от которых зависит порт. Каждая запись должна быть в формате `имя_ящика-семвер`, например, `libc-0.2.40`. Поддерживающие порт могут сгенерировать этот список из файла [.filename]#Cargo.lock# с помощью команды `make cargo-crates`. Вручную обновлять версии ящиков возможно, но следует учитывать транзитивные зависимости.
+Если список, сгенерированный `make cargo-crates`, слишком велик, его можно разместить в файле `Makefile.crates` в корневом каталоге порта.
+Если такой файл присутствует, фреймворк портов автоматически загружает его.
+Это помогает сохранять основной Makefile порта в удобном для работы размере.
+
+|`CARGO_FEATURES`
+|
+|Список функций приложения для сборки (список через пробел). Чтобы отключить все функции по умолчанию, добавьте специальный токен `--no-default-features` в `CARGO_FEATURES`. Вручную передавать его в `CARGO_BUILD_ARGS`, `CARGO_INSTALL_ARGS` и `CARGO_TEST_ARGS` не требуется.
+
+|`CARGO_CARGOTOML`
+|`${WRKSRC}/Cargo.toml`
+|Путь к файлу [.filename]#Cargo.toml#, который следует использовать.
+
+|`CARGO_CARGOLOCK`
+|`${WRKSRC}/Cargo.lock`
+|Путь к файлу [.filename]#Cargo.lock#, используемому для `make cargo-crates`. Можно указать более одного файла блокировки, если это необходимо.
+
+|`CARGO_ENV`
+|
+|Список переменных окружения, передаваемых в Cargo, аналогично `MAKE_ENV`.
-|`SCONS_ARGS`
-|Специфичные для порта флаги SCons, передаваемые окружению SCons.
+|`RUSTFLAGS`
+|
+|Флаги для передачи компилятору Rust.
-|`SCONS_BUILDENV`
-|Переменные для установки в системном окружении.
+|`CARGO_CONFIGURE`
+|`yes`
+|Используйте стандартный `do-configure`.
-|`SCONS_ENV`
-|Переменные для установки в окружении SCons.
+|`CARGO_UPDATE_ARGS`
+|
+|Дополнительные аргументы для передачи Cargo во время фазы настройки. Допустимые аргументы можно посмотреть с помощью `cargo update --help`.
-|`SCONS_TARGET`
-|Последний параметр для передачи SCons, похожий на `MAKE_TARGET`.
+|`CARGO_BUILDDEP`
+|`yes`
+|Добавить зависимость сборки на package:lang/rust[].
+
+|`CARGO_CARGO_BIN`
+|`${LOCALBASE}/bin/cargo`
+|Расположение бинарного файла `cargo`.
+
+|`CARGO_BUILD`
+|`yes`
+|Используйте значение по умолчанию `do-build`.
+
+|`CARGO_BUILD_ARGS`
+|
+|Дополнительные аргументы для передачи Cargo во время фазы сборки. Допустимые аргументы можно посмотреть с помощью `cargo build --help`.
+
+|`CARGO_INSTALL`
+|`yes`
+|Используйте настройку `do-install` по умолчанию.
+
+|`CARGO_INSTALL_ARGS`
+|
+|Дополнительные аргументы для передачи Cargo во время фазы установки. Допустимые аргументы можно посмотреть с помощью `cargo install --help`.
+
+|`CARGO_INSTALL_PATH`
+|`.`
+|Путь к пакету для установки. Этот аргумент передается в `cargo install` через параметр `--path`. Если указано несколько путей, `cargo install` запускается несколько раз.
+
+|`CARGO_TEST`
+|`yes`
+|Используйте значение по умолчанию `do-test`.
+
+|`CARGO_TEST_ARGS`
+|
+|Дополнительные аргументы для передачи Cargo во время тестовой фазы. Допустимые аргументы можно посмотреть с помощью `cargo test --help`.
+
+|`CARGO_TARGET_DIR`
+|`${WRKDIR}/target`
+|Расположение выходного каталога cargo.
+
+|`CARGO_DIST_SUBDIR`
+|[.filename]#rust/crates#
+|Каталог относительно `DISTDIR`, в котором будут храниться файлы дистрибутивов пакетов (crates).
+
+|`CARGO_VENDOR_DIR`
+|`${WRKSRC}/cargo-crates`
+|Расположение каталога сторонних поставщиков ПО, в который будут извлечены все крейты. Старайтесь держать его в пределах `PATCH_WRKSRC`, чтобы упростить применение патчей.
+
+|`CARGO_USE_GITHUB`
+|`no`
+|Включить загрузку крейтов, привязанных к определённым коммитам Git на GitHub, с помощью `GH_TUPLE`. Это попытается исправить все файлы [.filename]#Cargo.toml# в `WRKDIR`, чтобы они ссылались на автономные источники вместо загрузки из репозитория Git во время сборки.
+
+|`CARGO_USE_GITLAB`
+|`no`
+|То же, что и `CARGO_USE_GITHUB`, но для экземпляров GitLab и `GL_TUPLE`.
|===
-Для того, чтобы сторонний [.filename]#SConstruct# соответствовал всему, что передается SCons в переменной `SCONS_ENV` (самое главное, это `CC/CXX/CFLAGS/CXXFLAGS`), примените патч к [.filename]#SConstruct#, так чтобы переменная построения `Environment` выглядела следующим образом:
+[[cargo-ex1]]
+.Создание порта для простого приложения на Rust
+[example]
+====
+Создание порта на основе Cargo — это процесс из трёх этапов. Сначала необходимо предоставить шаблон портов, который загружает дистрибутивный файл приложения:
[.programlisting]
....
-env = Environment(**ARGUMENTS)
+PORTNAME= tokei
+DISTVERSIONPREFIX= v
+DISTVERSION= 7.0.2
+CATEGORIES= devel
+
+MAINTAINER= tobik@FreeBSD.org
+COMMENT= Display statistics about your code
+WWW= https://github.com/XAMPPRocky/tokei/
+
+USES= cargo
+USE_GITHUB= yes
+GH_ACCOUNT= Aaronepower
+
+.include <bsd.port.mk>
....
-В дальнейшем ее можно изменить при помощи `env.Append` и `env.Replace`.
+Сгенерировать первоначальный [.filename]#distinfo#:
-[[using-autotools]]
-== Использование GNU Autotools
+[source, shell]
+....
+% make makesum
+=> Aaronepower-tokei-v7.0.2_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
+=> Attempting to fetch https://codeload.github.com/Aaronepower/tokei/tar.gz/v7.0.2?dummy=/Aaronepower-tokei-v7.0.2_GH0.tar.gz
+fetch: https://codeload.github.com/Aaronepower/tokei/tar.gz/v7.0.2?dummy=/Aaronepower-tokei-v7.0.2_GH0.tar.gz: size of remote file is not known
+Aaronepower-tokei-v7.0.2_GH0.tar.gz 45 kB 239 kBps 00m00s
+....
-[[using-autotools-introduction]]
-=== Введение
+Теперь файл дистрибутива готов к использованию, и мы можем продолжить, извлекая зависимости пакета из встроенного файла [.filename]#Cargo.lock#:
-Различные инструменты GNU autotools предоставляют механизм абстракции для построения частей программного обеспечения на широком наборе операционных систем и аппаратных архитектур. Внутри Коллекции Портов отдельный порт может использовать эти инструменты при помощи простых конструкций:
+[source, shell]
+....
+% make cargo-crates
+CARGO_CRATES= aho-corasick-0.6.4 \
+ ansi_term-0.11.0 \
+ arrayvec-0.4.7 \
+ atty-0.2.9 \
+ bitflags-1.0.1 \
+ byteorder-1.2.2 \
+ [...]
+....
+
+Вывод этой команды необходимо вставить напрямую в Makefile:
[.programlisting]
....
-USE_AUTOTOOLS= tool:version[:operation] ...
+PORTNAME= tokei
+DISTVERSIONPREFIX= v
+DISTVERSION= 7.0.2
+CATEGORIES= devel
+
+MAINTAINER= tobik@FreeBSD.org
+COMMENT= Display statistics about your code
+WWW= https://github.com/XAMPPRocky/tokei/
+
+USES= cargo
+USE_GITHUB= yes
+GH_ACCOUNT= Aaronepower
+
+CARGO_CRATES= aho-corasick-0.6.4 \
+ ansi_term-0.11.0 \
+ arrayvec-0.4.7 \
+ atty-0.2.9 \
+ bitflags-1.0.1 \
+ byteorder-1.2.2 \
+ [...]
+
+.include <bsd.port.mk>
+....
+
+[.filename]#distinfo# необходимо перегенерировать, чтобы включить все дистрибутивные файлы крейтов:
+
+[source, shell]
+....
+% make makesum
+=> rust/crates/aho-corasick-0.6.4.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
+=> Attempting to fetch https://crates.io/api/v1/crates/aho-corasick/0.6.4/download?dummy=/rust/crates/aho-corasick-0.6.4.tar.gz
+rust/crates/aho-corasick-0.6.4.tar.gz 100% of 24 kB 6139 kBps 00m00s
+=> rust/crates/ansi_term-0.11.0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
+=> Attempting to fetch https://crates.io/api/v1/crates/ansi_term/0.11.0/download?dummy=/rust/crates/ansi_term-0.11.0.tar.gz
+rust/crates/ansi_term-0.11.0.tar.gz 100% of 16 kB 21 MBps 00m00s
+=> rust/crates/arrayvec-0.4.7.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
+=> Attempting to fetch https://crates.io/api/v1/crates/arrayvec/0.4.7/download?dummy=/rust/crates/arrayvec-0.4.7.tar.gz
+rust/crates/arrayvec-0.4.7.tar.gz 100% of 22 kB 3237 kBps 00m00s
+=> rust/crates/atty-0.2.9.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
+=> Attempting to fetch https://crates.io/api/v1/crates/atty/0.2.9/download?dummy=/rust/crates/atty-0.2.9.tar.gz
+rust/crates/atty-0.2.9.tar.gz 100% of 5898 B 81 MBps 00m00s
+=> rust/crates/bitflags-1.0.1.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
+[...]
....
-К моменту написания _tool_ может быть одним из `libtool`, `libltdl`, `autoconf`, `autoheader`, `automake` или `aclocal`.
+Порт теперь готов к тестовой сборке и дальнейшим настройкам, таким как создание plist, написание описания, добавление информации о лицензии, опций и т.д., как обычно.
+
+Если вы не тестируете свой порт в чистой среде, например, с использованием poudriere, не забудьте выполнить `make clean` перед любым тестированием.
+====
+
+[[cargo-ex2]]
+.Включение дополнительных возможностей приложений
+[example]
+====
+Некоторые приложения определяют дополнительные возможности в своем [.filename]#Cargo.toml#. Их можно включить при компиляции, установив `CARGO_FEATURES` в порте.
-_version_ указывает конкретную версию используемого инструмента (смотрите `devel/{automake,autoconf,libtool}[0-9]+` для получения действительных версий).
+Здесь мы включаем функции `json` и `yaml` в Tokei:
-_operation_ является необязательным расширением и указывает на способ использования инструмента.
+[.programlisting]
+....
+CARGO_FEATURES= json yaml
+....
-Одновременно может быть указано несколько инструментов, добавляя их все на одной строке или используя конструкцию Makefile `+=`.
+====
-В заключение, существует специальный инструмент по называнию `autotools`, который является удобной функцией при установке всех доступных версий autotools для возможности проведения кросс-разработки. Это также может быть достигнуто путем установки порта `devel/autotools`.
+[[cargo-ex4]]
+.Кодирование характеристик приложений как параметров порта
+[example]
+====
+Пример раздела `[features]` в [.filename]#Cargo.toml# может выглядеть так:
-[[using-libtool]]
-=== `libtool`
+[.programlisting]
+....
+[features]
+pulseaudio_backend = ["librespot-playback/pulseaudio-backend"]
+portaudio_backend = ["librespot-playback/portaudio-backend"]
+default = ["pulseaudio_backend"]
+....
-Динамические библиотеки, использующие инфраструктуру построения GNU, обычно используют libtool для настройки компиляции и установки динамических библиотек в соответствии с особенностями данной операционной системы. В типичной практике используется копирование встроенного в приложение `libtool`. Если вам нужно использовать внешнюю команду `libtool`, то вы можете использовать версию, поставляемую Коллекцией Портов:
+`pulseaudio_backend` — это функция по умолчанию. Она всегда включена, если мы явно не отключим функции по умолчанию, добавив `--no-default-features` в `CARGO_FEATURES`. Здесь мы превращаем функции `portaudio_backend` и `pulseaudio_backend` в опции порта:
[.programlisting]
....
-USE_AUTOTOOLS= libtool:version[:env]
+CARGO_FEATURES= --no-default-features
+
+OPTIONS_DEFINE= PORTAUDIO PULSEAUDIO
+
+PORTAUDIO_VARS= CARGO_FEATURES+=portaudio_backend
+PULSEAUDIO_VARS= CARGO_FEATURES+=pulseaudio_backend
....
-При отсутствии дополнительных операций, `libtool:version` сообщает инфраструктуре построения о применении патча к сценарию configure с установленной в системе копией `libtool`. Означает использование `GNU_CONFIGURE`. Более того, некоторые переменные make и оболочки shell будут назначены для дальнейшего использования этим портом. Подробности смотрите в [.filename]#bsd.autotools.mk#.
+====
-При использовании операции `:env` будет настроено только окружение.
+[[cargo-ex3]]
+.Перечисление лицензий крейтов
+[example]
+====
+Крейты имеют собственные лицензии. Важно знать, какие они, при добавлении блока `LICENSE` в порт (см. crossref:makefiles[licenses,Лицензии]). Вспомогательная цель `cargo-crates-licenses` попытается перечислить все лицензии всех ящиков, определённых в `CARGO_CRATES`.
-Наконец, `LIBTOOLFLAGS` и `LIBTOOLFILES` можно установить по желанию, чтобы переопределить наиболее вероятные аргументы для `libtool` и файлы, предназначенные для изменения. Большинству портов это скорее всего не понадобится. Для дальнейших подробностей смотрите [.filename]#bsd.autotools.mk#.
+[source, shell]
+....
+% make cargo-crates-licenses
+aho-corasick-0.6.4 Unlicense/MIT
+ansi_term-0.11.0 MIT
+arrayvec-0.4.7 MIT/Apache-2.0
+atty-0.2.9 MIT
+bitflags-1.0.1 MIT/Apache-2.0
+byteorder-1.2.2 Unlicense/MIT
+[...]
+....
-[[using-libltdl]]
-=== `libltdl`
+[NOTE]
+======
+Названия лицензий, которые выводит `make cargo-crates-licenses`, являются SPDX 2.1-совместимыми лицензионными выражениями, которые не совпадают с названиями лицензий, определёнными в фреймворке портов. Их необходимо перевести в названия из crossref:makefiles[licenses-license-list,Списка предопределённых лицензий].
+======
-Некоторые порты задействуют пакет с библиотекой `libltdl`, которая является частью комплекта `libtool`. Использование этой библиотеки не вызывает автоматическое использование самой `libtool`, и, таким образом, обеспечивается отдельная конструкция.
+====
+
+[[using-meson]]
+=== Использование `meson`
+
+Для портов, использующих Meson, определите `USES=meson`.
+
+[[using-meson-variables]]
+.Переменные для портов, использующих `meson`
+[cols="1,1", frame="none", options="header"]
+|===
+| Переменная
+| Описание
+
+|`MESON_ARGS`
+|Порт-специфичные флаги Meson, передаваемые в бинарный файл `meson`.
+
+|`MESON_BUILD_DIR`
+|Путь к директории сборки относительно `WRKSRC`. По умолчанию — `_build`.
+|===
+
+[[using-meson-example]]
+.Пример `USES=meson`
+[example]
+====
+Этот фрагмент демонстрирует использование Meson для порта.
+
+[.programlisting]
+....
+USES= meson
+MESON_ARGS= -Dfoo=enabled
+....
+
+====
+
+[[using-go]]
+=== Создание приложений на Go
+
+Для портов, использующих Go, определите `USES=go`. Обратитесь к crossref:uses[uses-go,`go`] для получения списка переменных, которые можно задать для управления процессом сборки.
+
+[[go-ex1]]
+.Создание порта для приложения на основе модулей Go
+[example]
+====
+В большинстве случаев достаточно установить переменную `GO_MODULE` в значение, указанное директивой `module` в `go.mod`:
+
+[.programlisting]
+....
+PORTNAME= hey
+DISTVERSIONPREFIX= v
+DISTVERSION= 0.1.4
+CATEGORIES= benchmarks
+
+MAINTAINER= dmgk@FreeBSD.org
+COMMENT= Tiny program that sends some load to a web application
+WWW= https://github.com/rakyll/hey/
+
+LICENSE= APACHE20
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+USES= go:modules
+GO_MODULE= github.com/rakyll/hey
+
+PLIST_FILES= bin/hey
+
+.include <bsd.port.mk>
+....
+
+Если «простой» способ не подходит или требуется больший контроль над зависимостями, полный процесс переноса описан ниже.
+
+Создание порта на основе Go — это процесс из пяти этапов. Сначала необходимо предоставить шаблон портов, который загружает дистрибутивный файл приложения:
+
+[.programlisting]
+....
+PORTNAME= ghq
+DISTVERSIONPREFIX= v
+DISTVERSION= 0.12.5
+CATEGORIES= devel
+
+MAINTAINER= tobik@FreeBSD.org
+COMMENT= Remote repository management made easy
+WWW= https://github.com/x-motemen/ghq/
+
+USES= go:modules
+USE_GITHUB= yes
+GH_ACCOUNT= motemen
+
+.include <bsd.port.mk>
+....
+
+Сгенерировать первоначальный [.filename]#distinfo#:
+
+[source, shell]
+....
+% make makesum
+===> License MIT accepted by the user
+=> motemen-ghq-v0.12.5_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
+=> Attempting to fetch https://codeload.github.com/motemen/ghq/tar.gz/v0.12.5?dummy=/motemen-ghq-v0.12.5_GH0.tar.gz
+fetch: https://codeload.github.com/motemen/ghq/tar.gz/v0.12.5?dummy=/motemen-ghq-v0.12.5_GH0.tar.gz: size of remote file is not known
+motemen-ghq-v0.12.5_GH0.tar.gz 32 kB 177 kBps 00s
+....
+
+Теперь файл дистрибутива готов к использованию, и мы можем извлечь необходимые зависимости модуля Go. Этот шаг требует наличия установленного пакета package:ports-mgmt/modules2tuple[]:
+
+[source, shell]
+....
+% make gomod-vendor
+[...]
+GH_TUPLE= \
+ Songmu:gitconfig:v0.0.2:songmu_gitconfig/vendor/github.com/Songmu/gitconfig \
+ daviddengcn:go-colortext:186a3d44e920:daviddengcn_go_colortext/vendor/github.com/daviddengcn/go-colortext \
+ go-yaml:yaml:v2.2.2:go_yaml_yaml/vendor/gopkg.in/yaml.v2 \
+ golang:net:3ec191127204:golang_net/vendor/golang.org/x/net \
+ golang:sync:112230192c58:golang_sync/vendor/golang.org/x/sync \
+ golang:xerrors:3ee3066db522:golang_xerrors/vendor/golang.org/x/xerrors \
+ motemen:go-colorine:45d19169413a:motemen_go_colorine/vendor/github.com/motemen/go-colorine \
+ urfave:cli:v1.20.0:urfave_cli/vendor/github.com/urfave/cli
+....
+
+Вывод этой команды необходимо вставить напрямую в Makefile:
+
+[.programlisting]
+....
+PORTNAME= ghq
+DISTVERSIONPREFIX= v
+DISTVERSION= 0.12.5
+CATEGORIES= devel
+
+MAINTAINER= tobik@FreeBSD.org
+COMMENT= Remote repository management made easy
+WWW= https://github.com/x-motemen/ghq/
+
+USES= go:modules
+USE_GITHUB= yes
+GH_ACCOUNT= motemen
+GH_TUPLE= Songmu:gitconfig:v0.0.2:songmu_gitconfig/vendor/github.com/Songmu/gitconfig \
+ daviddengcn:go-colortext:186a3d44e920:daviddengcn_go_colortext/vendor/github.com/daviddengcn/go-colortext \
+ go-yaml:yaml:v2.2.2:go_yaml_yaml/vendor/gopkg.in/yaml.v2 \
+ golang:net:3ec191127204:golang_net/vendor/golang.org/x/net \
+ golang:sync:112230192c58:golang_sync/vendor/golang.org/x/sync \
+ golang:xerrors:3ee3066db522:golang_xerrors/vendor/golang.org/x/xerrors \
+ motemen:go-colorine:45d19169413a:motemen_go_colorine/vendor/github.com/motemen/go-colorine \
+ urfave:cli:v1.20.0:urfave_cli/vendor/github.com/urfave/cli
+
+.include <bsd.port.mk>
+....
+
+[.filename]#distinfo# необходимо обновить, чтобы включить все дистрибутивные файлы:
+
+[source, shell]
+....
+% make makesum
+=> Songmu-gitconfig-v0.0.2_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
+=> Attempting to fetch https://codeload.github.com/Songmu/gitconfig/tar.gz/v0.0.2?dummy=/Songmu-gitconfig-v0.0.2_GH0.tar.gz
+fetch: https://codeload.github.com/Songmu/gitconfig/tar.gz/v0.0.2?dummy=/Songmu-gitconfig-v0.0.2_GH0.tar.gz: size of remote file is not known
+Songmu-gitconfig-v0.0.2_GH0.tar.gz 5662 B 936 kBps 00s
+=> daviddengcn-go-colortext-186a3d44e920_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
+=> Attempting to fetch https://codeload.github.com/daviddengcn/go-colortext/tar.gz/186a3d44e920?dummy=/daviddengcn-go-colortext-186a3d44e920_GH0.tar.gz
+fetch: https://codeload.github.com/daviddengcn/go-colortext/tar.gz/186a3d44e920?dummy=/daviddengcn-go-colortext-186a3d44e920_GH0.tar.gz: size of remote file is not known
+daviddengcn-go-colortext-186a3d44e920_GH0.tar. 4534 B 1098 kBps 00s
+[...]
+....
+
+Порт теперь готов к тестовой сборке и дальнейшим настройкам, таким как создание plist, написание описания, добавление информации о лицензии, опций и т.д., как обычно.
+
+Если вы не тестируете свой порт в чистой среде, например, с использованием poudriere, не забудьте выполнить `make clean` перед любым тестированием.
+====
+
+[[go-ex2]]
+.Установка имени выходного бинарного файла или пути установки
+[example]
+====
+Некоторые порты требуют установки результирующего бинарного файла под другим именем или в путь, отличный от стандартного `${PREFIX}/bin`. Это можно сделать с помощью синтаксиса кортежа `GO_TARGET`, например:
+
+[.programlisting]
+....
+GO_TARGET= ./cmd/ipfs:ipfs-go
+....
+
+установит бинарный файл `ipfs` как `${PREFIX}/bin/ipfs-go` и
+
+[.programlisting]
+....
+GO_TARGET= ./dnscrypt-proxy:${PREFIX}/sbin/dnscrypt-proxy
+....
+
+установит `dnscrypt-proxy` в `${PREFIX}/sbin`.
+====
+
+[[using-cabal]]
+=== Построение приложений на Haskell с помощью `cabal`
+
+Для портов, использующих Cabal, система сборки определяет `USES=cabal`. Обратитесь к crossref:uses[uses-cabal,`cabal`] для получения списка переменных, которые можно задать для управления процессом сборки.
+
+[[cabal-ex1]]
+.Создание порта для приложения Haskell с Hackage
+[example]
+====
+При подготовке порта Haskell Cabal требуются программы package:devel/hs-cabal-install[] и package:ports-mgmt/hs-cabal2tuple[], поэтому убедитесь, что они установлены заранее. Сначала необходимо определить общие переменные портов, которые позволяют cabal-install загрузить файл дистрибутива пакета:
[.programlisting]
....
-USE_AUTOTOOLS= libltdl:version
+PORTNAME= ShellCheck
+DISTVERSION= 0.6.0
+CATEGORIES= devel
+
+MAINTAINER= haskell@FreeBSD.org
+COMMENT= Shell script analysis tool
+WWW= https://www.shellcheck.net/
+
+USES= cabal
+
+.include <bsd.port.mk>
+....
+
+Этот минимальный Makefile загружает файл дистрибутива с помощью вспомогательной цели `cabal-extract`:
+
+[source, shell]
+....
+% make cabal-extract
+[...]
+Downloading the latest package list from hackage.haskell.org
+cabal get ShellCheck-0.6.0
+Downloading ShellCheck-0.6.0
+Downloaded ShellCheck-0.6.0
+Unpacking to ShellCheck-0.6.0/
....
-Всё, что в настоящее время она делает, это добавление `LIB_DEPENDS` для подходящего порта `libltdl`, потому она предоставляется как удобная функция для помощи в устранении всяких зависимостей от портов autotools вне инфраструктуры `USE_AUTOTOOLS`. Для этого инструмента не существует необязательных операций.
+Теперь, когда у нас есть файл описания пакета ShellCheck.cabal в `${WRKSRC}`, мы можем использовать `cabal-configure` для создания плана сборки:
-[[using-autoconf]]
-=== `autoconf` и `autoheader`
+[source, shell]
+....
+% make cabal-configure
+[...]
+Resolving dependencies...
+Build profile: -w ghc-8.10.7 -O1
+In order, the following would be built (use -v for more details):
+ - Diff-0.4.1 (lib) (requires download & build)
+ - OneTuple-0.3.1 (lib) (requires download & build)
+[...]
+....
-Вместо сценария configure некоторые порты содержат шаблон autoconf в файле [.filename]#configure.ac#. Вы можете использовать следующие присвоения, чтобы позволить `autoconf` создать сценарий configure, а `autoheader` создать заголовки шаблона для использования в сценарии configure.
+После завершения можно сгенерировать список необходимых зависимостей:
+
+[source, shell]
+....
+% make make-use-cabal
+USE_CABAL= QuickCheck-2.12.6.1 \
+ hashable-1.3.0.0 \
+ integer-logarithms-1.0.3 \
+[...]
+....
+
+Пакеты Haskell могут содержать ревизии, как и порты FreeBSD. Ревизии могут затрагивать только файлы [.filename]#.cabal#. Обратите внимание на дополнительные номера версий после символа `_`. Замените старый список `USE_CABAL` на вновь сгенерированный.
+
+Наконец, файл [.filename]#distinfo# необходимо перегенерировать, чтобы он содержал все файлы дистрибутива:
+
+[source, shell]
+....
+% make makesum
+=> ShellCheck-0.6.0.tar.gz doesn't seem to exist in /usr/local/poudriere/ports/git/distfiles/cabal.
+=> Attempting to fetch https://hackage.haskell.org/package/ShellCheck-0.6.0/ShellCheck-0.6.0.tar.gz
+ShellCheck-0.6.0.tar.gz 136 kB 642 kBps 00s
+=> QuickCheck-2.12.6.1/QuickCheck-2.12.6.1.tar.gz doesn't seem to exist in /usr/local/poudriere/ports/git/distfiles/cabal.
+=> Attempting to fetch https://hackage.haskell.org/package/QuickCheck-2.12.6.1/QuickCheck-2.12.6.1.tar.gz
+QuickCheck-2.12.6.1/QuickCheck-2.12.6.1.tar.gz 65 kB 361 kBps 00s
+[...]
+....
+
+Порт теперь готов к тестовой сборке и дальнейшим настройкам, таким как создание plist, написание описания, добавление информации о лицензии, опций и т.д., как обычно.
+
+Если вы не тестируете свой порт в чистой среде, например, с использованием poudriere, не забудьте выполнить `make clean` перед любым тестированием.
+====
+
+Некоторые порты Haskell устанавливают различные файлы данных в `share/${PORTNAME}`. В таких случаях требуется особая обработка на стороне порта. Порт должен определить параметр `CABAL_WRAPPER_SCRIPTS`, перечислив каждый исполняемый файл, который будет использовать файлы данных. Более того, в редких случаях портируемая программа использует файлы данных других пакетов Haskell, и тогда на помощь приходит `FOO_DATADIR_VARS`.
+
+[[cabal-ex2]]
+.Обработка файлов данных в порте Haskell
+[example]
+====
+`devel/hs-profiteur` — это приложение на Haskell, которое генерирует одностраничный HTML с некоторым содержимым.
[.programlisting]
....
-USE_AUTOTOOLS= autoconf:version[:env]
+PORTNAME= profiteur
+
+[...]
+
+USES= cabal
+
+USE_CABAL= OneTuple-0.3.1_2 \
+ QuickCheck-2.14.2 \
+ [...]
+
+.include <bsd.port.mk>
....
+Он устанавливает HTML-шаблоны в `share/profiteur`, поэтому необходимо добавить параметр `CABAL_WRAPPER_SCRIPTS`:
[.programlisting]
....
-USE_AUTOTOOLS= autoheader:version
+[...]
+
+USE_CABAL= OneTuple-0.3.1_2 \
+ QuickCheck-2.14.2 \
+ [...]
+
+
+CABAL_WRAPPER_SCRIPTS= ${CABAL_EXECUTABLES}
+
+.include <bsd.port.mk>
+....
+
+Программа также пытается получить доступ к файлу `jquery.js`, который является частью пакета Haskell `js-jquery-3.3.1`. Чтобы этот файл был найден, необходимо, чтобы скрипт-обёртка искал файлы данных `js-jquery` также в `share/profiteur`. Для этого используется `profiteur_DATADIR_VARS`:
+
+[.programlisting]
....
+[...]
-которые также подразумевают использование `autoconf:version`.
+CABAL_WRAPPER_SCRIPTS= ${CABAL_EXECUTABLES}
+profiteur_DATADIR_VARS= js-jquery
-Аналогично команде `libtool` включение необязательной операции `:env` всего лишь настраивает окружение для дальнейшего использования. Без этого выполняется наложение патчей и переконфигурирование порта.
+.include <bsd.port.mk>
+....
-Дополнительные необязательные переменные `AUTOCONF_ARGS` и `AUTOHEADER_ARGS` можно переопределить в [.filename]#Makefile# порта, если указано явным образом. Как и с эквивалентами `libtool`, большинству портов это вряд ли понадобится.
+Теперь порт установит непосредственно бинарный файл в `libexec/cabal/profiteur`, а скрипт — в `bin/profiteur`.
-[[using-automake]]
-=== `automake` и `aclocal`
+====
+
+Не существует простого способа определить подходящее значение для параметра `FOO_DATADIR_VARS`, кроме как запустить программу и проверить, что всё работает. К счастью, необходимость использовать `FOO_DATADIR_VARS` возникает очень редко.
+
+Еще один крайний случай при переносе сложных программ на Haskell — наличие зависимостей от систем контроля версий (VCS) в файле `cabal.project`.
+
+[[cabal-ex3]]
+.Портирование приложений Haskell с зависимостями от VCS
+[example]
+====
+
+`net-p2p/cardano-node` — это чрезвычайно сложное программное обеспечение. В его `cabal.project` содержится множество блоков, подобных этому:
+
+[.programlisting]
+....
+[...]
+source-repository-package
+ type: git
+ location: https://github.com/input-output-hk/cardano-crypto
+ tag: f73079303f663e028288f9f4a9e08bcca39a923e
+[...]
+....
-Некоторые пакеты содержат только файлы [.filename]#Makefile.am#. Они должны быть преобразованы в файлы [.filename]#Makefile.in# с использованием automake и дальнейшей обработкой `configure` для получения настоящего [.filename]#Makefile#.
+Зависимости типа `source-repository-package` автоматически подтягиваются `cabal` в процессе сборки. К сожалению, это приводит к использованию сети после этапа `fetch`, что запрещено в рамках системы портов. Эти исходники необходимо указать в Makefile порта. Вспомогательная цель `make-use-cabal` может упростить работу с пакетами, размещёнными на GitHub. Запуск этой цели после стандартных `cabal-extract` и `cabal-configure` позволит получить не только параметр `USE_CABAL`, но и `GH_TUPLE`:
-Аналогично, иногда пакеты не поставляются с вложенными файлами [.filename]#aclocal.m4#, снова требуемых для построения программного обеспечения. Их можно получить командой `aclocal`, которая просматривает [.filename]#configure.ac# или [.filename]#configure.in#.
+[source, shell]
+....
+% make make-use-cabal
+USE_CABAL= Diff-0.4.1 \
+ Glob-0.10.2_3 \
+ HUnit-1.6.2.0 \
+ [...]
+
+GH_TUPLE= input-output-hk:cardano-base:0f3a867493059e650cda69e20a5cbf1ace289a57:cardano_base/dist-newstyle/src/cardano-b_-c8db9876882556ed \
+ input-output-hk:cardano-crypto:f73079303f663e028288f9f4a9e08bcca39a923e:cardano_crypto/dist-newstyle/src/cardano-c_-253fd88117badd8f \
+ [...]
+....
-`aclocal` имеет похожую связь с `automake`, как у `autoheader` с `autoconf`, что описано в предыдущей главе. `aclocal` подразумевает использование `automake`, таким образом, мы имеем:
+Может быть полезно отделить элементы `GH_TUPLE`, поступающие из `make-use-cabal`, от остальных, чтобы упростить обновление порта:
[.programlisting]
....
-USE_AUTOTOOLS= automake:version[:env]
+GH_TUPLE= input-output-hk:cardano-base:0f3a867493059e650cda69e20a5cbf1ace289a57:cardano_base/dist-newstyle/src/cardano-b_-c8db9876882556ed \
+ input-output-hk:cardano-crypto:f73079303f663e028288f9f4a9e08bcca39a923e:cardano_crypto/dist-newstyle/src/cardano-c_-253fd88117badd8f \
+ [...]
+
+GH_TUPLE+= bitcoin-core:secp256k1:ac83be33d0956faf6b7f61a60ab524ef7d6a473a:secp
....
+Версия Haskell-портов с зависимостями от систем контроля версий временно требует следующего обходного решения:
[.programlisting]
....
-USE_AUTOTOOLS= aclocal:version
+BINARY_ALIAS= git=true
....
-которые также подразумевают использование `automake:version`.
+====
-Также как и для `libtool` и `autoconf`, подключение необязательной операции `:env` всего лишь устанавливает окружение для дальнейшего пользования. Без этого выполняется реконфигурирование этого порта.
+[[using-autotools]]
+== Использование GNU Autotools
-Как и в случае с `autoconf` и `autoheader`, обе команды `automake` и `aclocal` соответственно имеют необязательные переменные `AUTOMAKE_ARGS` и `ACLOCAL_ARGS`, которые при необходимости можно переопределить в [.filename]#Makefile# порта.
+Если порту требуется какое-либо программное обеспечение GNU Autotools, добавьте `USES=autoreconf`. Подробнее см. в crossref:uses[uses-autoreconf,`autoreconf`].
[[using-gettext]]
== Использование GNU `gettext`
-=== Простой вариант использования
+[[using-gettext-basic]]
+=== Простые варианты использования
-Если для вашего порта требуется `gettext`, добавьте `USES= gettext`, и ваш порт унаследует зависимость от package:devel/gettext[]. crossref:makefiles[uses-makefiles, `USES`] содержит перечень других значений для использования `gettext`.
+Если порт требует `gettext`, установите `USES=gettext`, и порт унаследует зависимость от [.filename]#libintl.so# из пакета package:devel/gettext[]. Другие значения для использования `gettext` перечислены в crossref:uses[uses-gettext,`USES=gettext`].
-Довольно распространенным случаем является использование в порте `gettext` и `configure`. Как правило, GNU `configure` способен находить `gettext` автоматически. Если он все же не сможет это сделать, то подсказки для размещения `gettext` можно передать через переменные окружения `CPPFLAGS` и `LDFLAGS`:
+Довольно распространённый случай — порт, использующий `gettext` и `configure`. Обычно GNU `configure` должен автоматически находить `gettext`.
[.programlisting]
....
USES= gettext
-CPPFLAGS+= -I${LOCALBASE}/include
-LDFLAGS+= -L${LOCALBASE}/lib
-
GNU_CONFIGURE= yes
....
-Конечно же, этот код можно записать в более компактном виде, если передавать флаги в `configure` не требуется:
+Если он не сработает, можно указать расположение `gettext` через `CPPFLAGS` и `LDFLAGS`, используя `localbase` следующим образом:
[.programlisting]
....
-USES= gettext
+USES= gettext localbase:ldflags
GNU_CONFIGURE= yes
....
+[[using-gettext-optional]]
=== Оптимальное использование
Некоторые программные продукты позволяют отключать NLS, к примеру, передавая параметр `--disable-nls` сценарию `configure`. В этом случае ваш порт должен использовать `gettext`, в зависимости от значения `NLS`. Для портов небольшой или средней сложности вы можете полагаться на следующую идиому:
[.programlisting]
....
-GNU_CONFIGURE= yes
+GNU_CONFIGURE= yes
+
+OPTIONS_DEFINE= NLS
+OPTIONS_SUB= yes
+
+NLS_USES= gettext
+NLS_CONFIGURE_ENABLE= nls
+
+.include <bsd.port.mk>
+....
+
+Или используя старый способ с опциями:
+
+[.programlisting]
+....
+GNU_CONFIGURE= yes
+
+OPTIONS_DEFINE= NLS
.include <bsd.port.options.mk>
@@ -471,7 +1164,7 @@ PLIST_SUB+= NLS="@comment "
.include <bsd.port.mk>
....
-Следующий пункт в вашем списке дел разобраться, чтобы файлы каталога сообщения включались в список упаковки по условию. Часть, входящая в [.filename]#Makefile#, уже обеспечена этой идиомой. Остальное объясняется в главе <<plist-sub,продвинутые практики [.filename]#pkg-plist#>>. Вкратце, каждое вхождение `%%NLS%%` в [.filename]#pkg-plist# будет заменено на "`@comment`", если NLS выключен, или пустой строкой, если включен. В результате строки, предваряемые `%%NLS%%`, станут комментариями в итоговом листе упаковки, если NLS выключен; иначе, префикс будет просто удален. Всё, что вам нужно, это вставить `%%NLS%%` перед каждым путем к файлу каталога сообщений в [.filename]#pkg-plist#. Например:
+Следующий пункт в списке задач — организовать условное включение файлов каталогов сообщений в упаковочный список. Часть, связанная с [.filename]#Makefile#, уже предусмотрена идиомой. Это объясняется в разделе crossref:plist[plist-sub,расширенные практики работы с [.filename]#pkg-plist#]. Вкратце, каждое вхождение `%%NLS%%` в [.filename]#pkg-plist# будет заменено на "`@comment `", если NLS отключен, или на пустую строку, если NLS включен. Следовательно, строки с префиксом `%%NLS%%` станут обычными комментариями в итоговом упаковочном списке, если NLS выключен; в противном случае префикс будет просто удален. Затем вставьте `%%NLS%%` перед каждым путем к файлу каталога сообщений в [.filename]#pkg-plist#. Например:
[.programlisting]
....
@@ -479,8 +1172,9 @@ PLIST_SUB+= NLS="@comment "
%%NLS%%share/locale/no/LC_MESSAGES/foobar.mo
....
-В особо сложных случаях вам понадобиться использовать более продвинутые техники, чем данный рецепт, такие как <<plist-dynamic,динамические списки упаковки>>.
+В особо сложных случаях вам понадобиться использовать более продвинутые техники, чем данный рецепт, такие как crossref:plist[plist-dynamic,динамические списки упаковки].
+[[using-gettext-catalog-directories]]
=== Управление каталогами сообщений
Существует момент, который следует учитывать при установке файлов каталогов сообщений. Целевые каталоги для размещения, расположенные под [.filename]#LOCALBASE/shared/locale#, редко когда должны создаваться и удаляться портом. Для наиболее популярных языков имеются собственные каталоги, перечисленные в [.filename]#PORTSDIR/Templates/BSD.local.dist#. Каталоги для множества других языков управляются с помощью порта package:devel/gettext[]. Обратите внимание на его [.filename]#pkg-plist# и посмотрите, куда данный порт собирается установить файлы каталогов сообщений для единственного в своем роде языка.
@@ -488,45 +1182,46 @@ PLIST_SUB+= NLS="@comment "
[[using-perl]]
== Использование Perl
-Если `MASTER_SITES` установлена в значение `MASTER_SITE_PERL_CPAN`, то предпочтительным значением `MASTER_SITE_SUBDIR` является имя иерархии верхнего уровня. Например, рекомендуемым значением для `p5-Module-Name` является `Module`. Иерархию верхнего уровня можно посмотреть на сайте http://cpan.org/modules/by-module/[cpan.org]. Это поддерживает порт в рабочем состоянии при изменении модуля автором.
+Если `MASTER_SITES` установлена в значение `CPAN`, то правильная поддиректория выбирается автоматически. Если подкаталог по умолчанию указан неверно, можно использовать `CPAN/Module` для его изменения. Также можно установить `MASTER_SITES` в старое значение `MASTER_SITE_PERL_CPAN`, тогда предпочтительным значением `MASTER_SITE_SUBDIR` будет имя иерархии выше уровнем. Например, рекомендуемое значение для `p5-Module-Name` - `Module`. Иерархию верхнего уровня можно посмотреть на https://cpan.org/modules/by-module/[cpan.org]. Это гарантирует работоспособность порта при смене автора модуля.
-Исключением этого правила является отсутствие соответствующего каталога или файла с дистрибутивом в этом каталоге. В качестве `MASTER_SITE_SUBDIR` в этом случае разрешается использовать id автора.
+Исключением этого правила является отсутствие соответствующего каталога или файла с дистрибутивом в этом каталоге. В качестве `MASTER_SITE_SUBDIR` в этом случае разрешается использовать id автора. Можно использовать макрос `CPAN:AUTHOR`, который будет преобразован в хешированный каталог автора. Например, `CPAN:AUTHOR` преобразуется в `authors/id/A/AU/AUTHOR`.
-В качестве значения все из настраиваемых knobs ниже принимают `YES` или строку с версией вида `5.8.0+`. `YES` означает, что данный порт можно использовать с любой из поддерживаемых версий Perl. Если порт работает только с некоторыми версиями Perl, то это можно обозначить при помощи строки с версией, указывающей на минимальную версию (пример: `5.7.3+`), максимальную версию (пример: `5.8.0-`) или точную версию (пример: `5.8.3`).
+Когда порту требуется поддержка Perl, он должен установить `USES=perl5` с опциональным `USE_PERL5`, как описано в crossref:uses[uses-perl5,описание USES для perl5].
-.Переменные для портов, использующих Perl
+[[using-perl-variables]]
+.Переменные (только для чтения) для портов, использующих Perl
[cols="1,1", frame="none", options="header"]
|===
-| Переменная
+| Переменные (только для чтения)
| Значение
-|`USE_PERL5`
-|Perl 5 используется для построения и работы.
+|`PERL`
+|Полный путь к интерпретатору Perl 5, будь то системный или установленный из порта, но без номера версии. Используйте это, когда программному обеспечению требуется путь к интерпретатору Perl. Для замены строк "``#!``" в скриптах используйте crossref:uses[uses-shebangfix,`shebangfix`].
-|`USE_PERL5_BUILD`
-|Perl 5 используется для построения.
+|`PERL_VERSION`
+|Полная версия Perl установлена (например, `5.8.9`).
-|`USE_PERL5_RUN`
-|Perl 5 используется во время работы.
+|`PERL_LEVEL`
+|Установленная версия Perl в виде целого числа формата `MNNNPP` (например, `500809`).
-|`PERL`
-|Полный путь к интерпретатору Perl 5, либо в системе, либо установленному из портов, но без номера версии. Используйте это, если вам нужно заменить строки "`#!`" в скриптах.
+|`PERL_ARCH`
+|Где Perl хранит архитектурно-зависимые библиотеки. По умолчанию: `${ARCH}-freebsd`.
-|`PERL_CONFIGURE`
-|Конфигурация при помощи MakeMaker языка Perl. Влечёт `USE_PERL5`.
+|`PERL_PORT`
+|Имя порта Perl, который установлен (например, `perl5`).
-|`PERL_MODBUILD`
-|Конфигурация, построение и установка с использованием Module::Build. Влечёт `PERL_CONFIGURE`.
+|`SITE_PERL`
+|Имя каталога, в котором размещаются специфичные для сайта пакеты Perl. Это значение добавляется в `PLIST_SUB`.
|===
[NOTE]
====
-Порты для модулей Perl, которые не имеют официального вебсайта, должны указывать `cpan.org` в строке WWW в файле [.filename]#pkg-descr#. Предпочтительная форма URL `http://search.cpan.org/dist/Module-Name/` (включая завершающий слэш).
+Порты Perl-модулей, у которых нет официального сайта, должны ссылаться на `cpan.org` в строке WWW файла [.filename]#Makefile#. Предпочтительный формат URL: `https://search.cpan.org/dist/Module-Name/` (включая завершающий слеш).
====
[NOTE]
====
-Не используйте `${SITE_PERL}` в объявлении зависимостей. Использование этой конструкции подразумевает наличие подключенного [.filename]#bsd.perl.mk#, что не всегда так. Порты, зависимые от этого порта, получат неправильные зависимости, если файлы этого порта будут перемещены при последующем обновлении. Правильный способ объявления зависимостей для модулей Perl показан в примере ниже.
+Не используйте `${SITE_PERL}` в объявлениях зависимостей. Это предполагает, что был включён файл [.filename]#perl5.mk#, что не всегда верно. Порты, зависящие от этого порта, будут иметь некорректные зависимости, если файлы этого порта будут перемещены во время обновления. Правильный способ объявления зависимостей модулей Perl показан в примере ниже.
====
[[use-perl-dependency-example]]
@@ -535,125 +1230,199 @@ PLIST_SUB+= NLS="@comment "
====
[.programlisting]
....
-p5-IO-Tee>=0.64:${PORTSDIR}/devel/p5-IO-Tee
+p5-IO-Tee>=0.64:devel/p5-IO-Tee
....
====
-Для портов Perl, которые устанавливают страницы справочника, в [.filename]#pkg-plist# можно использовать макрос `PERL5_MANx` (где _x_ принимает значение от `1` до `9`). Например,
+Для портов Perl, которые устанавливают страницы руководства, макросы `PERL5_MAN3` и `PERL5_MAN1` могут использоваться внутри [.filename]#pkg-plist#. Например,
[.programlisting]
....
+lib/perl5/5.14/man/man1/event.1.gz
lib/perl5/5.14/man/man3/AnyEvent::I3.3.gz
....
-можно заменить на
+может быть заменено на
[.programlisting]
....
+%%PERL5_MAN1%%/event.1.gz
%%PERL5_MAN3%%/AnyEvent::I3.3.gz
....
+[NOTE]
+====
+Для других разделов (_x_ в `2` и `4`–`9`) макросы `PERL5_MAN_x_` отсутствуют, так как они устанавливаются в обычные каталоги.
+====
+
+[[use-perl-ex-build]]
+.Порт, требующий Perl только для сборки
+[example]
+====
+Поскольку значение USE_PERL5 по умолчанию включает build и run, установите его в:
+
+[.programlisting]
+....
+USES= perl5
+USE_PERL5= build
+....
+
+====
+
+[[use-perl-ex-patch]]
+.Порт, который также требует Perl для исправления
+[example]
+====
+Время от времени использования man:sed[1] для исправлений недостаточно. Когда использование man:perl[1] проще, примените:
+
+[.programlisting]
+....
+USES= perl5
+USE_PERL5= patch build run
+....
+
+====
+
+[[use-perl-ex-configure]]
+.Модуль Perl, для сборки которого требуется `ExtUtils::MakeMaker`
+[example]
+====
+Большинство модулей Perl поставляются с конфигурационным скриптом [.filename]#Makefile.PL#. В этом случае установите:
+
+[.programlisting]
+....
+USES= perl5
+USE_PERL5= configure
+....
+
+====
+
+[[use-perl-ex-modbuild]]
+.Модуль Perl, для сборки которого требуется `Module::Build`
+[example]
+====
+Когда модуль Perl поставляется с конфигурационным скриптом [.filename]#Build.PL#, он может требовать Module::Build, и в этом случае установите
+
+[.programlisting]
+....
+USES= perl5
+USE_PERL5= modbuild
+....
+
+Если вместо этого требуется Module::Build::Tiny, установите
+
+[.programlisting]
+....
+USES= perl5
+USE_PERL5= modbuildtiny
+....
+
+====
+
[[using-x11]]
== Использование X11
[[x11-variables]]
=== Компоненты X.Org
-X.Org является реализацией X11, доступной в Коллекции Портов. Если ваше приложение зависит от компонентов X, установите в переменную `USE_XORG` в перечень требуемых компонентов. К настоящему времени доступными компонентами являются:
-
-`bigreqsproto compositeproto damageproto dmx dmxproto dri2proto evieproto fixesproto fontcacheproto fontenc fontsproto fontutil glproto ice inputproto kbproto libfs oldx pciaccess pixman printproto randrproto recordproto renderproto resourceproto scrnsaverproto sm trapproto videoproto x11 xau xaw xaw6 xaw7 xbitmaps xcmiscproto xcomposite xcursor xdamage xdmcp xevie xext xextproto xf86bigfontproto xf86dgaproto xf86driproto xf86miscproto xf86rushproto xf86vidmodeproto xfixes xfont xfontcache xft xi xinerama xineramaproto xkbfile xkbui xmu xmuu xorg-server xp xpm xprintapputil xprintutil xproto xproxymngproto xrandr xrender xres xscrnsaver xt xtrans xtrap xtst xv xvmc xxf86dga xxf86misc xxf86vm`.
-
-Всегда актуальный перечень можно найти в [.filename]#/usr/ports/Mk/bsd.xorg.mk#.
+Реализация X11, доступная в Коллекции портов, — это X.Org. Если приложение зависит от компонентов X, добавьте `USES= xorg` и укажите необходимые компоненты в `USE_XORG`. Полный список можно найти в crossref:uses[uses-xorg,`xorg`].
-Проект Mesa является попыткой обеспечить свободную реализацию OpenGL. Вы можете указать зависимость от различных компонентов этого проекта при помощи переменной `USE_GL`. Действительные опции: `glut, glu, glw, glew, gl` и `linux`. Для обратной совместимости значение `yes` соответствует `glu`.
+Проект Mesa — это инициатива по предоставлению свободной реализации OpenGL. Чтобы указать зависимость от различных компонентов этого проекта, используйте `USES=gl` и `USE_GL`. См. crossref:uses[uses-gl,`gl`] для полного списка доступных компонентов. Для обратной совместимости значение `yes` соответствует `glu`.
[[use-xorg-example]]
-.Пример для USE_XORG
+.Пример `USE_XORG`
[example]
====
[.programlisting]
....
-USE_XORG= xrender xft xkbfile xt xaw
+USES= gl xorg
USE_GL= glu
+USE_XORG= xrender xft xkbfile xt xaw
....
====
+[[using-xorg-variables]]
.Переменные для портов, использующих X
[cols="1,1", frame="none"]
|===
|`USES= imake`
-|Используется `imake`.
+|Порт использует `imake`.
|`XMKMF`
-|Задаёт маршрут до `xmkmf`, если он отсутствует в `PATH`. По умолчанию это `xmkmf -a`.
+|Установить путь к `xmkmf`, если он отсутствует в `PATH`. По умолчанию: `xmkmf -a`.
|===
[[using-x11-vars]]
-.Использование переменных X11 в порте
+.Использование переменных, связанных с X11
[example]
====
[.programlisting]
....
-# Использовать некоторые библиотеки X11
+# Use some X11 libraries
+USES= xorg
USE_XORG= x11 xpm
....
====
-[[porting-motif]]
-=== Порты, которым требуется Motif
+[[x11-motif]]
+=== Порты, требующие Motif
-Если вашему порту требуется Motif, задайте переменную `USES= motif` в файле [.filename]#Makefile#. Реализация Motif, используемая по умолчанию, находится в package:x11-toolkits/open-motif[]. Пользователи вместо этого могут выбрать package:x11-toolkits/lesstif[] через установку переменной `WANT_LESSTIF`.
+Если порт требует библиотеку Motif, определите `USES= motif` в [.filename]#Makefile#. Реализация Motif по умолчанию — это package:x11-toolkits/open-motif[]. Пользователи могут выбрать package:x11-toolkits/lesstif[] вместо этого, установив `WANT_LESSTIF` в своём [.filename]#make.conf#. Аналогично package:x11-toolkits/open-motif-devel[] можно выбрать, установив `WANT_OPEN_MOTIF_DEVEL` в [.filename]#make.conf#.
-Переменная `MOTIFLIB` будет установлена в [.filename]#bsd.port.mk#, чтобы ссылаться на соответствующую библиотеку Motif. Пожалуйста, измените исходные тексты вашего порта на использование `${MOTIFLIB}` везде, где упоминается библиотека Motif, в первоначальном [.filename]#Makefile# или [.filename]#Imakefile#.
+`MOTIFLIB` будет установлен в файле [.filename]#motif.mk# для ссылки на соответствующую библиотеку Motif. Пожалуйста, исправьте исходный код порта, чтобы использовать `${MOTIFLIB}` везде, где библиотека Motif упоминается в оригинальном [.filename]#Makefile# или [.filename]#Imakefile#.
-Существует два общих случая:
+Есть два распространённых случая:
-* Если порт обращается к библиотеке Motif как `-lXm` в своих файлах [.filename]#Makefile# или [.filename]#Imakefile#, просто подставьте вместо этих обращений `${MOTIFLIB}`.
-* Если порт использует `XmClientLibs` в своем файле [.filename]#Imakefile#, измените это обращение на `${MOTIFLIB} ${XTOOLLIB} ${XLIB}`.
+* Если порт ссылается на библиотеку Motif как `-lXm` в своем [.filename]#Makefile# или [.filename]#Imakefile#, замените это на `${MOTIFLIB}`.
+* Если порт использует `XmClientLibs` в своем [.filename]#Imakefile#, замените это на `${MOTIFLIB} ${XTOOLLIB} ${XLIB}`.
-Заметьте, что переменная `MOTIFLIB` (как правило) раскрывается в `-L/usr/local/lib -lXm` или `/usr/local/lib/libXm.a`, так что нет нужды впереди добавлять `-L` или `-l`.
+Обратите внимание, что `MOTIFLIB` (обычно) раскрывается в `-L/usr/local/lib -lXm -lXp` или `/usr/local/lib/libXm.a`, поэтому нет необходимости добавлять `-L` или `-l` перед этим.
-=== Шрифты для X11
+[[x11-fonts]]
+=== Шрифты X11
-Если ваш порт устанавливает шрифты для X Window System, поместите их в каталог [.filename]#LOCALBASE/lib/X11/fonts/local#.
+Если порт устанавливает шрифты для X Window System, поместите их в [.filename]#LOCALBASE/lib/X11/fonts/local#.
-=== Получение поддельного `DISPLAY`, используя Xvfb
+[[x11-fake-display]]
+=== Получение поддельного `DISPLAY` с помощью Xvfb
-Некоторые приложения для успешной компиляции требуют наличие работающего дисплея X11. Это создает проблему для машин, которые работают в режиме headless. При использовании следующего канонического хака инфраструктура построения запустит сервер X в виртуальном фреймбуфере. Затем переменная работающего `DISPLAY` передается при построении.
+Некоторые приложения требуют рабочего дисплея X11 для успешной компиляции. Это создаёт проблему для машин, работающих без монитора. При использовании этой переменной инфраструктура сборки запустит виртуальный X-сервер с буфером кадров. Рабочий `DISPLAY` затем передаётся в процесс сборки. См. crossref:uses[uses-display,`USES=display`] для возможных аргументов.
[.programlisting]
....
USES= display
....
+
[[desktop-entries]]
-=== Элементы рабочего стола
+=== Desktop Entries (пункты рабочего стола)
-Элементы рабочего стола (http://standards.freedesktop.org/desktop-entry-spec/latest/[стандарта Freedesktop]) предоставляют способ автоматической настройки функций рабочего стола при установке новой программы, не требуя вмешательства пользователя. Например, новые программы автоматически отображаются в меню приложений совместимых окружений рабочего стола. Элементы рабочего стола изначально появились в окружении рабочего стола GNOME, но в настоящее время являются стандартом и также работают с KDE и Xfce. Такая небольшая автоматизация предоставляет реальное удобство для пользователя, и посему элементы рабочего стола приветствуются в приложениях, которые можно использовать в окружении рабочего стола.
+Desktop entries (https://standards.freedesktop.org/desktop-entry-spec/latest/[стандарт Freedesktop]) предоставляют способ автоматической настройки функций рабочего стола при установке новой программы без вмешательства пользователя. Например, вновь установленные программы автоматически появляются в меню приложений совместимых сред рабочего стола. Desktop entries появились в среде GNOME, но теперь стали стандартом и также работают с KDE и Xfce. Эта автоматизация приносит реальную пользу пользователю, поэтому Desktop entries рекомендуются для приложений, которые могут использоваться в среде рабочего стола.
+[[desktop-entries-predefined]]
==== Использование предопределенных файлов [.filename]#.desktop#
-Порты, включающие предопределенные файлы [.filename]#*.desktop#, должны включать эти файлы в [.filename]#pkg-plist# и устанавливать их в каталог [.filename]#$LOCALBASE/shared/applications#. Для установки этих файлов используется <<install-macros,макрос `INSTALL_DATA`>>.
+Порты, включающие предопределённые файлы [.filename]#*.desktop#, должны добавлять эти файлы в [.filename]#pkg-plist# и устанавливать их в директорию [.filename]#$LOCALBASE/share/applications#. Для установки таких файлов полезен макрос crossref:makefiles[install-macros,`INSTALL_DATA`].
[[updating-desktop-database]]
==== Обновление базы данных рабочего стола
-Если в файле порта [.filename]#portname.desktop# имеется запись MimeType, то база данных рабочего стола олжна быть обновлена после установки и удаления. Для этого укажите `USES`= desktop-file-utils.
+Если порт имеет запись MimeType в файле [.filename]#portname.desktop#, базу данных рабочего стола необходимо обновить после установки и удаления. Для этого определите `USES`= desktop-file-utils.
[[desktop-entries-macro]]
-==== Создание элементов рабочего стола с использованием `DESKTOP_ENTRIES`
+==== Создание Desktop Entries с помощью `DESKTOP_ENTRIES`
-Элементы рабочего стола можно легко создавать для приложений, используя переменную `DESKTOP_ENTRIES`. Будет автоматически создан, установлен и добавлен в [.filename]#pkg-plist# файл с названием [.filename]#name.desktop#. Синтаксис:
+Desktop Entries могут быть легко созданы для приложений с использованием `DESKTOP_ENTRIES`. Файл с именем [.filename]#name.desktop# будет создан, установлен и автоматически добавлен в [.filename]#pkg-plist#. Синтаксис следующий:
[.programlisting]
....
DESKTOP_ENTRIES= "NAME" "COMMENT" "ICON" "COMMAND" "CATEGORY" StartupNotify
....
-Перечень возможных категорий доступен на http://standards.freedesktop.org/menu-spec/latest/apa.html[вебсайте Freedesktop]. `StartupNotify` отобразит, поддерживает ли приложение _уведомления о запуске_. Как правило, это графический индикатор часы вместо указателя мыши, меню или панель, которые уведомляют пользователя о загрузке программы. Программа, поддерживающая уведомления о запуске, очистит этот индикатор после запуска. Программы, несовместимые с уведомлениями о запуске, не будут очищать индикатор (возможно, вызывая путаницу и приводя пользователей в бешенство), и поэтому должны иметь `StartupNotify` в выключенном состоянии `false`; тогда индикатор не будет отображаться совсем.
+Список возможных категорий доступен на https://standards.freedesktop.org/menu-spec/latest/apa.html[сайте Freedesktop]. `StartupNotify` указывает, совместимо ли приложение с _уведомлениями о запуске_. Обычно это графический индикатор, например, часы, который появляется у указателя мыши, в меню или на панели, чтобы дать пользователю понять, что программа запускается. Программа, совместимая с уведомлениями о запуске, очищает индикатор после своего старта. Программы, не совместимые с уведомлениями о запуске, никогда не очищают индикатор (что может сбивать с толку и раздражать пользователя), и у них должен быть установлен параметр `StartupNotify` в значение `false`, чтобы индикатор вообще не отображался.
Пример:
@@ -665,163 +1434,803 @@ DESKTOP_ENTRIES= "ToME" "Roguelike game based on JRR Tolkien's work" \
false
....
+`DESKTOP_ENTRIES` устанавливаются в директорию, указанную переменной `DESKTOPDIR`. По умолчанию `DESKTOPDIR` имеет значение [.filename]#${PREFIX}/share/applications#
+
+
[[using-gnome]]
== Использование GNOME
-Для задания того, какие компоненты GNOME использует конкретный порт, проект FreeBSD/GNOME использует собственный набор переменных. На странице проекта FreeBSD/GNOME размещён http://www.FreeBSD.org/gnome/docs/porting/[ исчерпывающий список этих переменных].
+[[using-gnome-introduction]]
+=== Введение
-[[using-qt]]
-== Использование Qt
+Эта глава объясняет фреймворк GNOME, используемый в портах. Фреймворк можно условно разделить на базовые компоненты, компоненты рабочего стола GNOME и несколько специальных макросов, упрощающих работу сопровождающих портов.
-[[qt-common]]
-=== Порты, для которых требуется Qt
+[[use-gnome]]
+=== Использование `USE_GNOME`
-.Переменные для портов, использующих Qt
-[cols="1,1", frame="none"]
+Добавление этой переменной в порт позволяет использовать макросы и компоненты, определённые в [.filename]#bsd.gnome.mk#. Код в [.filename]#bsd.gnome.mk# добавляет необходимые зависимости для сборки, выполнения или библиотеки, а также обработку специальных файлов. Приложения GNOME в FreeBSD используют инфраструктуру `USE_GNOME`. Включите все необходимые компоненты в виде списка, разделённого пробелами. Компоненты `USE_GNOME` разделены на следующие виртуальные списки: основные компоненты, компоненты GNOME 3 и устаревшие компоненты. Если порту требуются только библиотеки GTK3, это кратчайший способ определить это:
+
+[.programlisting]
+....
+USE_GNOME= gtk30
+....
+
+`USE_GNOME` компоненты автоматически добавляют необходимые им зависимости. Подробный список всех компонентов `USE_GNOME`, а также информацию о том, какие другие компоненты они подразумевают и их зависимости, можно найти в crossref:special[gnome-components, Компоненты GNOME].
+
+Вот пример [.filename]#Makefile# для порта GNOME, в котором используются многие методы, описанные в этом документе. Пожалуйста, используйте его в качестве руководства при создании новых портов.
+
+[.programlisting]
+....
+PORTNAME= regexxer
+DISTVERSION= 0.10
+CATEGORIES= devel textproc gnome
+MASTER_SITES= GNOME
+
+MAINTAINER= kwm@FreeBSD.org
+COMMENT= Interactive tool for performing search and replace operations
+WWW= http://regexxer.sourceforge.net/
+
+USES= gettext gmake localbase:ldflags pathfix pkgconfig tar:xz
+GNU_CONFIGURE= yes
+USE_GNOME= gnomeprefix intlhack gtksourceviewmm3
+
+GLIB_SCHEMAS= org.regexxer.gschema.xml
+
+.include <bsd.port.mk>
+....
+
+[NOTE]
+====
+Макрос `USE_GNOME` без аргументов не добавляет никаких зависимостей к порту. `USE_GNOME` не может быть установлен после [.filename]#bsd.port.pre.mk#.
+====
+
+[[using-gnome-variables]]
+=== Переменные
+
+Этот раздел объясняет, какие макросы доступны и как они используются. Как, например, в приведённом выше примере. В crossref:special[gnome-components, Компоненты GNOME] содержится более подробное объяснение. Для использования этих макросов необходимо установить `USE_GNOME`.
+
+`GLIB_SCHEMAS`::
+Список всех файлов схем glib, которые устанавливает порт. Макрос добавит файлы в plist порта и обработает регистрацию этих файлов при установке и удалении.
++
+Файлы схем glib написаны в XML и имеют расширение [.filename]#gschema.xml#. Они устанавливаются в директорию [.filename]#share/glib-2.0/schemas/#. Эти файлы схем содержат все настройки конфигурации приложений со значениями по умолчанию. Фактическая база данных, используемая приложениями, создаётся с помощью glib-compile-schema, которая запускается макросом `GLIB_SCHEMAS`.
++
+[.programlisting]
+....
+GLIB_SCHEMAS=foo.gschema.xml
+....
++
+[NOTE]
+====
+Не добавляйте схемы glib в файл [.filename]#pkg-plist#. Если они указаны в [.filename]#pkg-plist#, они не будут зарегистрированы, и приложения могут работать некорректно.
+====
+
+`GCONF_SCHEMAS`::
+Перечислите все файлы схем gconf. Макрос добавит файлы схем в plist порта и обеспечит их регистрацию при установке и удалении.
++
+GConf — это база данных на основе XML, которую используют практически все приложения GNOME для хранения своих настроек. Эти файлы устанавливаются в директорию [.filename]#etc/gconf/schemas#. Эта база данных определяется установленными файлами схем, которые используются для генерации ключевых файлов [.filename]#%gconf.xml#. Для каждого файла схемы, устанавливаемого портом, должна быть запись в [.filename]#Makefile#:
++
+[.programlisting]
+....
+GCONF_SCHEMAS=my_app.schemas my_app2.schemas my_app3.schemas
+....
++
+[NOTE]
+====
+Схемы Gconf перечислены в макросе `GCONF_SCHEMAS`, а не в файле [.filename]#pkg-plist#. Если они указаны в [.filename]#pkg-plist#, они не будут зарегистрированы, и приложения могут работать некорректно.
+====
+
+`INSTALLS_OMF`::
+Файлы Open Source Metadata Framework (OMF) часто используются приложениями GNOME 2. Эти файлы содержат информацию о файлах справки приложений и требуют специальной обработки с помощью ScrollKeeper/rarian. Для правильной регистрации файлов OMF при установке приложений GNOME из пакетов убедитесь, что файлы `omf` указаны в `pkg-plist` и что в [.filename]#Makefile# порта определено `INSTALLS_OMF`:
++
+[.programlisting]
+....
+INSTALLS_OMF=yes
+....
++
+При установке [.filename]#bsd.gnome.mk# автоматически сканирует [.filename]#pkg-plist# и добавляет соответствующие директивы `@exec` и `@unexec` для каждого файла [.filename]#.omf#, который необходимо отслеживать в базе данных регистрации OMF.
+
+[[gnome-components]]
+== Компоненты GNOME
+
+Для получения дополнительной помощи с портом GNOME, ознакомьтесь с некоторыми из link:https://ports.FreeBSD.org[существующих портов] в качестве примеров. На странице link:https://www.FreeBSD.org/gnome/[FreeBSD GNOME] указана контактная информация, если требуется дополнительная помощь. Компоненты разделены на используемые в настоящее время компоненты GNOME и устаревшие компоненты. Если компонент поддерживает аргументы, они перечислены в скобках в описании. Первый аргумент является значением по умолчанию. "Both" указывается, если компонент по умолчанию добавляется как в зависимости для сборки, так и для выполнения.
+
+[[gnome-components-list]]
+.Компоненты GNOME
+[cols="1,1,1", options="header"]
|===
-|`USE_QT4`
-|Указывает инструменты и библиотеки в качестве зависимостей для портов, которые используют Qt 4. Для получения подробностей смотрите <<qt4-components,выбор компонентов Qt 4>>.
+| Компонент
+| Связанная программа
+| Описание
-|`QT_PREFIX`
-|Устанавливается в значение, содержащее путь к установленному Qt (переменная только для чтения).
+|`atk`
+|accessibility/atk
+|Инструментарий доступности (ATK)
-|`MOC`
-|Устанавливается в значение, содержащее путь к `moc` (переменная только для чтения). По умолчанию устанавливается в соответствии со значением `USE_QT_VER`.
+|`atkmm`
+|accessibility/atkmm
+|C++ интерфейс для atk
+
+|`cairo`
+|graphics/cairo
+|Векторная графическая библиотека с поддержкой вывода на различные устройства
-|`QTCPPFLAGS`
-|Дополнительные флаги компилятора для инструментального пакета Qt, передаваемые через переменную `CONFIGURE_ENV`. По умолчанию устанавливается в соответствии со значением `USE_QT_VER`.
+|`cairomm`
+|graphics/cairomm
+|C++ интерфейс для cairo
-|`QTCFGLIBS`
-|Дополнительные флаги компоновки для инструментального пакета Qt, передаваемые через переменную `CONFIGURE_ENV`. По умолчанию устанавливается в соответствии со значением `USE_QT_VER`.
+|`dconf`
+|devel/dconf
+|Система базы данных конфигурации (both, build, run)
-|`QTNONSTANDARD`
-|Подавляет изменение `CONFIGURE_ENV`, `CONFIGURE_ARGS`, `CPPFLAGS` и `MAKE_ENV`.
+|`evolutiondataserver3`
+|databases/evolution-data-server
+|Бэкенды данных для интегрированного почтового клиента/PIM Evolution
+
+|`gdkpixbuf2`
+|graphics/gdk-pixbuf2
+|Графическая библиотека для GTK+
+
+|`glib20`
+|devel/glib20
+|Основная библиотека GNOME `glib20`
+
+|`glibmm`
+|devel/glibmm
+|C++ интерфейс для glib20
+
+|`gnomecontrolcenter3`
+|sysutils/gnome-control-center
+|Центр управления GNOME 3
+
+|`gnomedesktop3`
+|x11/gnome-desktop
+|Библиотека пользовательского интерфейса рабочего стола GNOME 3
+
+|`gsound`
+|audio/gsound
+|Библиотека GObject для воспроизведения системных звуков (both, build, run)
+
+|`gtk-update-icon-cache`
+|graphics/gtk-update-icon-cache
+|Утилита `gtk-update-icon-cache` из набора инструментов `Gtk+`
+
+|`gtk20`
+|x11-toolkits/gtk20
+|Набор инструментов Gtk+ 2
+
+|`gtk30`
+|x11-toolkits/gtk30
+|Набор инструментов Gtk+ 3
+
+|`gtkmm20`
+|x11-toolkits/gtkmm20
+|C++ интерфейс 2.0 для инструментария gtk20
+
+|`gtkmm24`
+|x11-toolkits/gtkmm24
+|C++ интерфейс 2.4 для инструментария gtk20
+
+|`gtkmm30`
+|x11-toolkits/gtkmm30
+|C++ интерфейс 3.0 для набора инструментов gtk30
+
+|`gtksourceview2`
+|x11-toolkits/gtksourceview2
+|Виджет, добавляющий подсветку синтаксиса в GtkTextView
+
+|`gtksourceview3`
+|x11-toolkits/gtksourceview3
+|Текстовая виджет, добавляющая подсветку синтаксиса к виджету GtkTextView
+
+|`gtksourceviewmm3`
+|x11-toolkits/gtksourceviewmm3
+|C++ интерфейс для библиотеки gtksourceview3
+
+|`gvfs`
+|devel/gvfs
+|Виртуальная файловая система GNOME
+
+|`intltool`
+|textproc/intltool
+|Инструмент для интернационализации (см. также intlhack)
+
+|`introspection`
+|devel/gobject-introspection
+|Базовые привязки (биндинги) интроспекции и инструменты для генерации привязок интроспекции. В большинстве случаев достаточно `:build`, `:both`/`:run` нужны только для приложений, использующих привязки интроспекции. (both, build, run)
+
+|`libgda5`
+|databases/libgda5
+|Обеспечивает единообразный доступ к различным типам источников данных
+
+|`libgda5-ui`
+|databases/libgda5-ui
+|Библиотека пользовательского интерфейса из библиотеки libgda5
+
+|`libgdamm5`
+|databases/libgdamm5
+|привязки C++ для библиотеки libgda5
+
+|`libgsf`
+|devel/libgsf
+|Расширяемая абстракция ввода-вывода для работы со структурированными форматами файлов
+
+|`librsvg2`
+|graphics/librsvg2
+|Библиотека для разбора и отображения SVG-файлов векторной графики
+
+|`libsigc++20`
+|devel/libsigc++20
+|Фреймворк обратных вызовов для C++
+
+|`libxml++26`
+|textproc/libxml++26
+|C++ привязки для библиотеки libxml2
+
+|`libxml2`
+|textproc/libxml2
+|Библиотека парсера XML (both, build, run)
+
+|`libxslt`
+|textproc/libxslt
+|Библиотека XSLT (сборка, выполнение)
+
+|`metacity`
+|x11-wm/metacity
+|Менеджер окон из GNOME
+
+|`nautilus3`
+|x11-fm/nautilus
+|GNOME файловый менеджер
+
+|`pango`
+|x11-toolkits/pango
+|Открытый фреймворк для разметки и отображения интернационализированного текста
+
+|`pangomm`
+|x11-toolkits/pangomm
+|C++ интерфейс для библиотеки pango
+
+|`py3gobject3`
+|devel/py3-gobject3
+|Python 3, интерфейс GObject 3.0
+
+|`pygobject3`
+|devel/py-gobject3
+|Python 2, интерфейс GObject 3.0
+
+|`vte3`
+|x11-toolkits/vte3
+|Виджет терминала с улучшенной поддержкой доступности и интернационализации (I18N)
|===
-.Дополнительные переменные для портов, использующих Qt 4.x
-[cols="1,1", frame="none"]
+[[gnome-components-macro]]
+.Компоненты макросов GNOME
+[cols="1,1", options="header"]
|===
-|`UIC`
-|Устанавливает путь к `uic` (переменная только для чтения).
+| Компонент
+| Описание
-|`QMAKE`
-|Устанавливает путь к `qmake` (переменная только для чтения).
+|`gnomeprefix`
+|Предоставляет `configure` некоторые стандартные расположения.
-|`QMAKESPEC`
-|Устанавливает путь к конфигурационному файлу для `qmake` (переменная только для чтения).
+|`intlhack`
+|То же, что и `intltool`, но с патчами для гарантии использования [.filename]#share/locale/#. Используйте только в случае, когда одного `intltool` недостаточно.
-|`QMAKEFLAGS`
-|Дополнительные флаги для `qmake`.
+|`referencehack`
+|Этот макрос предназначен для помощи в разделении API или справочной документации на собственный порт.
+|===
-|`QT_INCDIR`
-|Устанавливает каталоги для заголовков Qt 4 (переменная только для чтения).
+[[gnome-components-legacy]]
+.Компоненты GNOME Legacy
+[cols="1,1,1", options="header"]
+|===
+| Компонент
+| Связанная программа
+| Описание
-|`QT_LIBDIR`
-|Устанавливает путь к библиотекам Qt 4 (переменная только для чтения).
+|`atspi`
+|accessibility/at-spi
+|Интерфейс поставщика услуг вспомогательных технологий (AT-SPI)
+
+|`esound`
+|audio/esound
+|Пакет звука Enlightenment
+
+|`gal2`
+|x11-toolkits/gal2
+|Коллекция виджетов, взятых из GNOME 2 gnumeric
+
+|`gconf2`
+|devel/gconf2
+|Система базы данных конфигурации для GNOME 2
+
+|`gconfmm26`
+|devel/gconfmm26
+|C++ привязки C++ для gconf2
+
+|`gdkpixbuf`
+|graphics/gdk-pixbuf
+|Графическая библиотека для GTK+
+
+|`glib12`
+|devel/glib12
+|Библиотека ядра glib 1.2
+
+|`gnomedocutils`
+|textproc/gnome-doc-utils
+|Утилиты документации GNOME
+
+|`gnomemimedata`
+|misc/gnome-mime-data
+|База данных MIME и приложений для GNOME 2
+
+|`gnomesharp20`
+|x11-toolkits/gnome-sharp20
+|Интерфейсы GNOME 2 для среды выполнения .NET
+
+|`gnomespeech`
+|accessibility/gnome-speech
+|GNOME 2 API преобразования текста в речь
+
+|`gnomevfs2`
+|devel/gnome-vfs
+|Виртуальная файловая система GNOME 2
+
+|`gtk12`
+|x11-toolkits/gtk12
+|Набор инструментов Gtk+ 1.2
+
+|`gtkhtml3`
+|www/gtkhtml3
+|Облегченный движок для отображения/печати/редактирования HTML
+
+|`gtkhtml4`
+|www/gtkhtml4
+|Облегченный движок для отображения/печати/редактирования HTML
+
+|`gtksharp20`
+|x11-toolkits/gtk-sharp20
+|Интерфейсы GTK+ и GNOME 2 для среды выполнения .NET
+
+|`gtksourceview`
+|x11-toolkits/gtksourceview
+|Виджет, добавляющий подсветку синтаксиса в GtkTextView
+
+|`libartgpl2`
+|graphics/libart_lgpl
+|Библиотека для высокопроизводительной 2D графики
+
+|`libbonobo`
+|devel/libbonobo
+|Система компонентов и составных документов для GNOME 2
+
+|`libbonoboui`
+|x11-toolkits/libbonoboui
+|Интерфейс для libbonobo в GNOME 2
+
+|`libgda4`
+|databases/libgda4
+|Обеспечивает единообразный доступ к различным типам источников данных
+
+|`libglade2`
+|devel/libglade2
+|Библиотека glade для GNOME 2
+
+|`libgnome`
+|x11/libgnome
+|Библиотеки для GNOME 2, GNU окружения рабочего стола
+
+|`libgnomecanvas`
+|graphics/libgnomecanvas
+|Графическая библиотека для GNOME 2
+
+|`libgnomekbd`
+|x11/libgnomekbd
+|Динамическая библиотека клавиатуры GNOME 2
+
+|`libgnomeprint`
+|print/libgnomeprint
+|Библиотека поддержки печати Gnome 2
+
+|`libgnomeprintui`
+|x11-toolkits/libgnomeprintui
+|Библиотека поддержки печати Gnome 2
+
+|`libgnomeui`
+|x11-toolkits/libgnomeui
+|Библиотеки для графического интерфейса GNOME 2, среды рабочего стола GNU
+
+|`libgtkhtml`
+|www/libgtkhtml
+|Облегченный движок для отображения/печати/редактирования HTML
+
+|`libgtksourceviewmm`
+|x11-toolkits/libgtksourceviewmm
+|C++ интерфейс GtkSourceView
+
+|`libidl`
+|devel/libIDL
+|Библиотека для создания деревьев файлов CORBA IDL
+
+|`libsigc++12`
+|devel/libsigc++12
+|Фреймворк обратных вызовов для C++
+
+|`libwnck`
+|x11-toolkits/libwnck
+|Библиотека, используемая для написания пейджеров и списков задач
-|`QT_PLUGINDIRC`
-|Устанавливает путь к плагинам Qt 4 (переменная только для чтения).
+|`libwnck3`
+|x11-toolkits/libwnck3
+|Библиотека, используемая для написания пейджеров и списков задач
+
+|`orbit2`
+|devel/ORBit2
+|Высокопроизводительный CORBA ORB с поддержкой языка C
+
+|`pygnome2`
+|x11-toolkits/py-gnome2
+|Интерфейс Python для GNOME 2
+
+|`pygobject`
+|devel/py-gobject
+|Python 2, интерфейс GObject 2.0
+
+|`pygtk2`
+|x11-toolkits/py-gtk2
+|Набор интерфейсов Python для GTK+
+
+|`pygtksourceview`
+|x11-toolkits/py-gtksourceview
+|Интерфейс Python для GtkSourceView 2
+
+|`vte`
+|x11-toolkits/vte
+|Виджет терминала с улучшенной поддержкой доступности и интернационализации (I18N)
|===
-При заданной переменной `USE_QT4` применяются следующие настройки:
+[[gnome-components-deprecated]]
+.Устаревшие компоненты: не использовать
+[cols="1,1", options="header"]
+|===
+| Компонент
+| Описание
-[.programlisting]
-....
-CONFIGURE_ARGS+= --with-qt-includes=${QT_INCDIR} \
- --with-qt-libraries=${QT_LIBDIR} \
- --with-extra-libs=${LOCALBASE}/lib \
- --with-extra-includes=${LOCALBASE}/include
-CONFIGURE_ENV+= MOC="${MOC}" UIC="${UIC}" LIBS="${QTCFGLIBS}" \
- QMAKE="${QMAKE}" QMAKESPEC="${QMAKESPEC}" QTDIR="${QT_PREFIX}"
-MAKE_ENV+= QMAKESPEC="${QMAKESPEC}"
+|`pangox-compat`
+|pangox-compat устарел и был отделён от пакета pango.
+|===
-PLIST_SUB+= QT_INCDIR_REL=${QT_INCDIR_REL} \
- QT_LIBDIR_REL=${QT_LIBDIR_REL} \
- QT_PLUGINDIR_REL=${QT_PLUGINDIR_REL}
-....
+[[using-qt]]
+== Использование Qt
+
+[NOTE]
+====
+Для портов, которые являются частью самого Qt, см. crossref:uses[uses-qt-dist,`qt-dist`].
+====
+
+[[qt-common]]
+=== Порты, требующие Qt
+
+Коллекция портов поддерживает Qt 5 и Qt 6 с помощью `USES+=qt:5` и `USES+=qt:6` соответственно. Установите `USE_QT` в список необходимых компонентов Qt (libraries, tools, plugins - библиотеки, инструменты, плагины).
+
+Фреймворк Qt экспортирует ряд переменных, которые могут использоваться портами, некоторые из них перечислены ниже:
+
+[[using-qt-variables]]
+.Переменные, предоставляемые портам, использующим Qt
+[cols="1,1", frame="none"]
+|===
+|`QMAKE`
+|Полный путь к исполняемому файлу `qmake`.
+
+|`LRELEASE`
+|Полный путь к утилите `lrelease`.
+
+|`MOC`
+|Полный путь к `moc`.
+
+|`RCC`
+|Полный путь к `rcc`.
+
+|`UIC`
+|Полный путь к `uic`.
+
+|`QT_INCDIR`
+|Каталог включаемых файлов Qt.
+
+|`QT_LIBDIR`
+|Путь к библиотекам Qt.
+
+|`QT_PLUGINDIR`
+|Путь к плагинам Qt.
+|===
-[[qt4-components]]
+[[qt-components]]
=== Выбор компонентов
-В переменной `USE_QT4` должны указываться зависимости от отдельных инструментов и библиотек Qt 4. К каждому компоненту можно добавить суффикс, `_build` или `_run`, отражающий, когда должна быть применена зависимость, во время сборки или выполнения, соответственно. Если суффикс отсутствует, зависимость от компонента будет и для времени сборки, и для времени выполнения. Обычно, компоненты библиотек должны указываться без суффиксов, компоненты инструментов - с суффиксом `_build`, а компоненты плагинов - с суффиксом `_run`. Наиболее общие используемые компоненты перечислены ниже (все доступные компоненты перечислены в `_USE_QT4_ALL` в файле [.filename]#/usr/ports/Mk/bsd.qt.mk#):
+Отдельные зависимости инструментов и библиотек Qt должны быть указаны в `USE_QT`. Каждый компонент может иметь суффикс `_build` или `_run`, указывающий, требуется ли компонент во время сборки или выполнения. Если суффикс отсутствует, компонент будет требоваться как во время сборки, так и во время выполнения. Обычно компоненты библиотек указываются без суффикса, компоненты инструментов чаще всего указываются с суффиксом `_build`, а компоненты плагинов — с суффиксом `_run`. Наиболее часто используемые компоненты перечислены ниже (все доступные компоненты перечислены в `_USE_QT_ALL`, которая формируется из `_USE_QT_COMMON` и `_USE_QT[56]_ONLY` в [.filename]#/usr/ports/Mk/Uses/qt.mk#):
-.Доступные библиотечные компоненты Qt 4
+[[using-qt-library-list]]
+.Доступные компоненты библиотеки Qt
[cols="1,1", frame="none", options="header"]
|===
-| Название
+| Имя
| Описание
-|`corelib`
-|основная библиотека (можно опустить, если порт не использует ничего, кроме `corelib`)
+|`3d`
+|Модуль Qt3D
+
+|`5compat`
+|Модуль совместимости Qt 5 для Qt 6
+
+|`assistant`
+|Браузер документации Qt 5
+
+|`base`
+|Модуль Qt 6 base
+
+|`canvas3d`
+|Модуль Qt canvas3d
+
+|`charts`
+|Модуль Qt 5 charts
+
+|`concurrent`
+|Модуль многопоточности Qt
+
+|`connectivity`
+|Модуль Qt для подключения (Bluetooth/NFC)
+
+|`core`
+|Ядро Qt, неграфический модуль
+
+|`datavis3d`
+|Модуль визуализации 3D данных Qt 5
+
+|`dbus`
+|Модуль межпроцессного взаимодействия Qt D-Bus
+
+|`declarative`
+|Декларативный фреймворк Qt для динамических пользовательских интерфейсов
+
+|`designer`
+|Интерфейсный конструктор Qt 5 для графического пользовательского интерфейса
+
+|`diag`
+|Инструмент для сбора диагностической информации о Qt и его окружении
+
+|`doc`
+|Документация Qt 5
+
+|`examples`
+|Исходный код примеров Qt 5
+
+|`gamepad`
+|Модуль Qt 5 Gamepad
+
+|`graphicaleffects`
+|Графические эффекты Qt Quick
|`gui`
-|библиотека графического пользовательского интерфейса
+|Модуль графического интерфейса Qt
+
+|`help`
+|Модуль интеграции справки Qt в режиме онлайн
+
+|`l10n`
+|Локализованные сообщения Qt
+
+|`languageserver`
+|Реализация протокола Language Server Protocol в Qt 6
+
+|`linguist`
+|Инструмент перевода Qt 5
+
+|`location`
+|Модуль Qt Location
+
+|`lottie`
+|Qt 6 QML API для отрисовки графики и анимаций
+
+|`multimedia`
+|Модуль поддержки аудио, видео, радио и камеры Qt
|`network`
-|сетевая библиотека
+|Сетевой модуль Qt
+
+|`networkauth`
+|Модуль сетевой аутентификации Qt
|`opengl`
-|библиотека OpenGL
+|Модуль поддержки OpenGL, совместимый с Qt 5
+
+|`paths`
+|Клиент командной строки для QStandardPaths
+
+|`phonon4`
+|Мультимедийный фреймворк KDE
+
+|`pixeltool`
+|Увеличитель экрана Qt 5
+
+|`plugininfo`
+|Дампер метаданных плагинов Qt 5
+
+|`positioning`
+|Qt 6 API позиционирования из источников, таких как спутники, Wi-Fi или текстовые файлы.
+
+|`printsupport`
+|Модуль поддержки печати Qt
+
+|`qdbus`
+|Интерфейс командной строки Qt для D-Bus
+
+|`qdbusviewer`
+|Графический интерфейс Qt 5 для D-Bus
+
+|`qdoc`
+|Генератор документации Qt
-|`qt3support`
-|библиотека совместимости с Qt 3
+|`qdoc-data`
+|Файлы конфигурации QDoc
-|`qtestlib`
-|библиотека модульного тестирования
+|`qev`
+|Инструмент для интроспекции событий Qt QWidget
+
+|`qmake`
+|Генератор Makefile Qt
+
+|`quickcontrols`
+|Набор элементов управления для создания полных интерфейсов в Qt Quick
+
+|`quickcontrols2`
+|Набор элементов управления для создания полных интерфейсов в Qt Quick
+
+|`remoteobjects`
+|Модуль Qt 5 SXCML
|`script`
-|библиотека сценариев
+|Совместимый с Qt 4 модуль для написания сценариев
+
+|`scripttools`
+|Дополнительные компоненты Qt Script
+
+|`scxml`
+|Модуль Qt 5 SXCML
+
+|`sensors`
+|Модуль Qt sensors
+
+|`serialbus`
+|Функции Qt для доступа к промышленным шинным системам
+
+|`serialport`
+|Функции Qt для доступа к последовательным портам
+
+|`shadertools`
+|Инструменты Qt 6 для кроссплатформенного конвейера шейдеров Qt
+
+|`speech`
+|Доступность в Qt5
|`sql`
-|библиотека SQL
+|Модуль интеграции с базой данных Qt SQL
+
+|`sql-ibase`
+|Плагин Qt баз данных InterBase/Firebird
+
+|`sql-mysql`
+|Плагин Qt базы данных MySQL
+
+|`sql-odbc`
+|Плагин Qt ODBC
+
+|`sql-pgsql`
+|Плагин Qt базы данных PostgreSQL
+
+|`sql-sqlite2`
+|Плагин Qt базы данных SQLite 2
+
+|`sql-sqlite3`
+|Плагин Qt базы данных SQLite 3
+
+|`sql-tds`
+|Плагин Qt для подключение к базам данных по протоколу TDS
+
+|`svg`
+|Модуль поддержки SVG в Qt
+
+|`testlib`
+|Модуль тестирования Qt
+
+|`tools`
+|Различные инструменты Qt 6
+
+|`translations`
+|Модуль перевода Qt 6
+
+|`uiplugin`
+|Интерфейс плагина пользовательского виджета Qt для Qt Designer
+
+|`uitools`
+|Модуль поддержки форм пользовательского интерфейса Qt Designer
+
+|`virtualkeyboard`
+|Модуль виртуальной клавиатуры Qt 5
+
+|`wayland`
+|Оболочка Qt 5 для Wayland
+
+|`webchannel`
+|Библиотека Qt 5 для интеграции C++/QML с клиентами на HTML/js
+
+|`webengine`
+|Библиотека Qt 5 для отображения веб-содержимого
+
+|`webkit`
+|QtWebKit с более современной кодовой базой WebKit
+
+|`websockets`
+|Реализация протокола WebSocket на Qt
+
+|`websockets-qml`
+|Реализация протокола WebSocket на Qt (привязки QML)
+
+|`webview`
+|Компонент Qt для отображения веб-содержимого
+
+|`widgets`
+|Модуль виджетов Qt C++
+
+|`x11extras`
+|Платформо-специфичные возможности Qt для систем на основе X11
|`xml`
-|библиотека XML
+|Реализации SAX и DOM в Qt
+
+|`xmlpatterns`
+|Поддержка Qt для XPath, XQuery, XSLT и XML Schema
|===
-Вы можете определить, от каких библиотек зависит приложение, запустив `ldd` на основной исполняемый файл после успешной компиляции.
+Чтобы определить библиотеки, от которых зависит приложение, выполните `ldd` для основного исполняемого файла после успешной компиляции.
-.Доступные компоненты инструментов Qt 4
+[[using-qt-tools-list]]
+.Доступные компоненты инструментов Qt
[cols="1,1", frame="none", options="header"]
|===
-| Название
+| Имя
| Описание
-|`moc`
-|мета-объектный компилятор (нужен при построении почти для каждого приложения Qt)
-
-|`qmake`
-|генератор Makefile / утилита построения
+|`buildtools`
+|инструменты сборки (`moc`, `rcc`), необходимые практически для любого приложения Qt.
-|`rcc`
-|компилятор ресурсов (нужен, если приложение идет вместе с файлами [.filename]#*.rc# или [.filename]#*.qrc#)
+|`linguisttools`
+|инструменты локализации: `lrelease`, `lupdate`
-|`uic`
-|компилятор пользовательского интерфейса (нужен, если приложение идет вместе с файлами [.filename]#*.ui#, созданными при помощи Qt Designer, - на практике каждое приложение Qt с GUI)
+|`qmake`
+|Генератор Makefile/утилита сборки
|===
-.Доступные компоненты плагинов Qt 4
+[[using-qt-plugins-list]]
+.Доступные компоненты плагинов Qt
[cols="1,1", frame="none", options="header"]
|===
-| Название
+| Имя
| Описание
-|`iconengines`
-|плагин для движка иконок SVG (если приложение поставляется с иконками SVG)
-
|`imageformats`
-|плагины для графических форматов GIF, JPEG, MNG и SVG (если приложение поставляется с графическими файлами)
+|плагины для графических форматов TGA, TIFF и MNG
|===
-[[qt4-components-example]]
-.Выбор компонентов Qt 4
+[[qt5-components-example]]
+.Выбор компонентов Qt 5
[example]
====
-В этом примере портированное приложение использует библиотеку графического пользовательского интерфейса Qt 4, основную библиотеку Qt 4, все инструменты генерации кода Qt 4 и генератор Makefile Qt 4. Поскольку библиотека `gui` подразумевает зависимость от основной библиотеки, указывать `corelib` нет необходимости. Инструменты генерации кода Qt 4 `moc`, `uic` и `rcc`, а также генератор Makefile `qmake` нужны только для времени построения, поэтому они указаны с суффиксом `_build`:
+В этом примере портированное приложение использует библиотеку графического интерфейса Qt 5, основную библиотеку Qt 5, все инструменты генерации кода Qt 5 и генератор Makefile Qt 5. Поскольку библиотека `gui` подразумевает зависимость от основной библиотеки, `core` не нужно указывать. Инструменты генерации кода Qt 5 `moc`, `uic` и `rcc`, а также генератор Makefile `qmake` требуются только во время сборки, поэтому они указаны с суффиксом `_build`:
[.programlisting]
....
-USE_QT4= gui moc_build qmake_build rcc_build uic_build
+USES= qt:5
+USE_QT= gui buildtools_build qmake_build
....
====
@@ -829,81 +2238,444 @@ USE_QT4= gui moc_build qmake_build rcc_build uic_build
[[using-qmake]]
=== Использование `qmake`
+Если приложение предоставляет файл проекта qmake ([.filename]#*.pro#), определите `USES= qmake` вместе с `USE_QT`. `USES= qmake` уже подразумевает зависимость сборки от qmake, поэтому компонент qmake может быть опущен в `USE_QT`. Подобно crossref:special[using-cmake,CMake], qmake поддерживает сборку вне исходного дерева, которую можно включить, указав аргумент `outsource` (см. crossref:special[using-qmake-example,пример `USES= qmake`]). Также см. crossref:special[using-qmake-arguments,Возможные аргументы для `USES qmake`].
+
+[[using-qmake-arguments]]
+.Возможные аргументы для `USES= qmake`
+[cols="1,1", frame="none", options="header"]
+|===
+| Переменная
+| Описание
+
+|`no_configure`
+|Не добавлять цель configure. Это подразумевается при `HAS_CONFIGURE=yes` и `GNU_CONFIGURE=yes`. Это требуется, когда сборке нужна только настройка окружения из `USES= qmake`, но в остальном она запускает `qmake` самостоятельно.
+
+|`no_env`
+|Подавить модификацию окружения configure и make. Это требуется только когда `qmake` используется для настройки программного обеспечения и сборка не понимает окружение, установленное `USES= qmake`.
+
+|`norecursive`
+|Не передавать аргумент `-recursive` в `qmake`.
+
+|`outsource`
+|Выполнить сборку вне исходного кода.
+|===
+
+[[using-qmake-variables]]
.Переменные для портов, использующих `qmake`
[cols="1,1", frame="none", options="header"]
|===
-| Название
+| Переменная
| Описание
|`QMAKE_ARGS`
-|Спефицичные для порта флаги QMake для передачи программе `qmake`.
+|Специфичные для порта флаги qmake, передаваемые в бинарный файл `qmake`.
|`QMAKE_ENV`
-|Переменные окружения, устанавливаемые для программы `qmake`. По умолчанию соответствует значению `${CONFIGURE_ENV}`.
+|Переменные окружения, которые должны быть установлены для бинарного файла `qmake`. По умолчанию используется `${CONFIGURE_ENV}`.
-|`QMAKE_PRO`
-|Название файла проекта [.filename]#.pro#. По умолчанию имеет пустое значение (с использованием автоопределения).
+|`QMAKE_SOURCE_PATH`
+|Путь к файлам проекта qmake ([.filename]#.pro#). По умолчанию используется `${WRKSRC}`, если запрошена сборка вне исходного кода, в противном случае оставляется пустым.
|===
-Если вместе с приложением вместо [.filename]#configure# поставляется файл [.filename]#.pro#, вы можете использовать следующее:
+При использовании `USES= qmake` применяются следующие настройки:
[.programlisting]
....
-USES= qmake
-USE_QT4= qmake_build
+CONFIGURE_ARGS+= --with-qt-includes=${QT_INCDIR} \
+ --with-qt-libraries=${QT_LIBDIR} \
+ --with-extra-libs=${LOCALBASE}/lib \
+ --with-extra-includes=${LOCALBASE}/include
+
+CONFIGURE_ENV+= QTDIR="${QT_PREFIX}" QMAKE="${QMAKE}" \
+ MOC="${MOC}" RCC="${RCC}" UIC="${UIC}" \
+ QMAKESPEC="${QMAKESPEC}"
+
+PLIST_SUB+= QT_INCDIR=${QT_INCDIR_REL} \
+ QT_LIBDIR=${QT_LIBDIR_REL} \
+ QT_PLUGINDIR=${QT_PLUGINDIR_REL}
+....
+
+Некоторые скрипты configure не поддерживают указанные выше аргументы. Чтобы отключить изменение `CONFIGURE_ENV` и `CONFIGURE_ARGS`, установите `USES= qmake:no_env`.
+
+[[using-qmake-example]]
+.Пример `USES= qmake`
+[example]
+====
+Этот фрагмент демонстрирует использование qmake для порта Qt 5:
+
+[.programlisting]
+....
+USES= qmake:outsource qt:5
+USE_QT= buildtools_build
....
-`USES=qmake` указывает порту на использование `qmake` в процессе конфигурации. Обратите внимание, что `USES=qmake` не подразумевает зависимость от Qt 4 `qmake`. Для этого в значении `USE_QT4` должен присутствовать компонент `qmake_build`.
+====
-Приложения Qt часто пишутся в кроссплатформенной манере, и X11/Unix часто не является для них платформой разработки, что в свою очередь часто приводит к соответствующим упущенным моментам:
+Приложения Qt часто разрабатываются как кроссплатформенные, и зачастую X11/Unix — не та платформа, на которой они создаются. Это, в свою очередь, приводит к определённым недоработкам, таким как:
-* _Отсутствующие дополнительные пути для заголовочных файлов._ Многие приложения идут с поддержкой иконки в системном трее, но пренебрегают смотреть на наличие заголовочных файлов и/или библиотеками в каталогах X11. Вы можете сообщить `qmake`, чтобы она добавила каталоги в пути поиска заголовочных файлов и библиотек через командную строку. К примеру:
+* _Отсутствуют дополнительные пути для заголовочных файлов._ Многие приложения поддерживают значки в системном трее, но не учитывают пути для заголовочных файлов и/или библиотек в каталогах X11. Чтобы добавить каталоги в пути поиска заголовочных файлов и библиотек для `qmake` через командную строку, используйте:
+
[.programlisting]
....
-QMAKE_ARGS+= INCLUDEPATH+=${LOCALBASE}/include \
- LIBS+=-L${LOCALBASE}/lib
+QMAKE_ARGS+= INCLUDEPATH+=${LOCALBASE}/include \
+ LIBS+=-L${LOCALBASE}/lib
....
-* _Фиктивные пути установки._ Иногда данные, такие как иконки и файлы .desktop, устанавливаются по умолчанию в каталоги, которые не просматриваются XDG-совместимыми приложениями. Примером является package:editors/texmaker[] - взгляните на [.filename]#patch-texmaker.pro# из каталога [.filename]#files# этого порта, который можно взять в качестве шаблона исправления этого непосредственно в файле проекта `qmake`.
+* _Некорректные пути установки._ Иногда данные, такие как иконки или файлы .desktop, по умолчанию устанавливаются в каталоги, которые не сканируются приложениями, совместимыми с XDG. Например, package:editors/texmaker[] — посмотрите на файл [.filename]#patch-texmaker.pro# в директории [.filename]#files# этого порта, чтобы увидеть шаблон исправления этой проблемы напрямую в проектом файле `qmake`.
[[using-kde]]
== Использование KDE
-[[kde4-variables]]
-=== Задание переменных KDE 4
+[[kde5-variables]]
+=== Определения переменных KDE
-Если ваше приложение зависит от KDE 4.x, присвойте `USE_KDE4` список требуемых компонентов. Для переопределения типа зависимости компонента могут быть использованы суффиксы `_build` и `_run` (например, `baseapps_run`). Если суффикс не задан, будет использован тип зависимости по умолчанию. Если вы хотите использовать оба типа, добавьте компонент дважды с обоими суффиксами (например, `automoc4_build automoc4_run`). Основные наиболее используемые компоненты перечислены ниже (актуальные компоненты задокументированы в начале файла [.filename]#/usr/ports/Mk/bsd.kde4.mk#):
+Если приложение зависит от KDE, установите `USES+=kde:5` и `USE_KDE` в список необходимых компонентов. Суффиксы `_build` и `_run` можно использовать для принудительного указания типа зависимости компонентов (например, `baseapps_run`). Если суффикс не задан, будет использован тип зависимости по умолчанию. Чтобы принудительно задать оба типа, добавьте компонент дважды с обоими суффиксами (например, `ecm_build ecm_run`). Доступные компоненты перечислены ниже (актуальный список компонентов также приведён в [.filename]#/usr/ports/Mk/Uses/kde.mk#):
-.Доступные компоненты KDE 4
+[[using-kde-components]]
+.Доступные компоненты KDE
[cols="1,1", frame="none", options="header"]
|===
-| Название
+| Имя
| Описание
-|`kdehier`
-|Иерархия основных каталогов KDE
+|`activities`
+|Среда выполнения и библиотека KF5 для организации работы в отдельных автивностях
-|`kdelibs`
-|KDE Developer Platform
+|`activities-stats`
+|KF5 статистика для активностей
-|`kdeprefix`
-|Если установлено, то порт будет установлен в `${KDE4_PREFIX}` вместо `${LOCALBASE}`
+|`activitymanagerd`
+|Системный сервис для управления активностью пользователей, отслеживания шаблонов использования
-|`sharedmime`
-|База данных MIME типов для портов KDE
+|`akonadi`
+|Хранилище данных для KDE-Pim
-|`automoc4`
-|automoc для пакетов Qt 4
+|`akonadicalendar`
+|Интеграция Akonadi с Календарем
-|`akonadi`
-|Сервер хранения KDE-Pim
+|`akonadiconsole`
+|Консоль управления и отладки Akonadi
+
+|`akonadicontacts`
+|Библиотеки и демоны для реализации управления контактами в Akonadi
+
+|`akonadiimportwizard`
+|Импорт данных из других почтовых клиентов в KMail
+
+|`akonadimime`
+|Библиотеки и демоны для реализации базовой обработки электронной почты
+
+|`akonadinotes`
+|Библиотека KDE для доступа к хранилищам почты в формате MBox
+
+|`akonadisearch`
+|Библиотеки и демоны для реализации поиска в Akonadi
+
+|`akregator`
+|Читатель лент от KDE
+
+|`alarmcalendar`
+|KDE API для будильников KAlarm
+
+|`apidox`
+|Документация API KF5
+
+|`archive`
+|Библиотека KF5, предоставляющая классы для работы с форматами архивов
+
+|`attica`
+|Библиотека API Open Collaboration Services, версия для KDE5
+
+|`attica5`
+|Библиотека API Open Collaboration Services, версия для KDE5
+
+|`auth`
+|Абстракция KF5 для системной политики и функций аутентификации
+
+|`baloo`
+|KF5 Фреймворк для поиска и управления пользовательскими метаданными
+
+|`baloo-widgets`
+|Библиотека BalooWidgets
+
+|`baloo5`
+|KF5 Фреймворк для поиска и управления пользовательскими метаданными
+
+|`blog`
+|KDE API для доступа к веб-логам
+
+|`bookmarks`
+|Библиотека KF5 для закладок и формата XBEL
+
+|`breeze`
+|Plasma5 artwork, стили и ресурсы для визуального стиля Breeze
+
+|`breeze-gtk`
+|Plasma5 Breeze визуальный стиль для Gtk
+
+|`breeze-icons`
+|Тема значков Breeze для KDE
+
+|`calendarcore`
+|Библиотека доступа к календарю KDE
+
+|`calendarsupport`
+|Библиотеки поддержки календарей для KDEPim
+
+|`calendarutils`
+|Утилита KDE и пользовательские функции интерфейса для доступа к календарю
+
+|`codecs`
+|Библиотека KF5 для работы со строками
+
+|`completion`
+|KF5 вспомогательные средства и виджеты автодополнения текста
+
+|`config`
+|Виджеты KF5 для диалогов настройки
+
+|`configwidgets`
+|Виджеты KF5 для диалогов настройки
+
+|`contacts`
+|KDE API для управления контактной информацией
+
+|`coreaddons`
+|KF5 аддоны для QtCore
+
+|`crash`
+|Библиотека KF5 для обработки анализа сбоев и отчётов об ошибках в приложениях
+
+|`dbusaddons`
+|KF5 дополнения к QtDBus
+
+|`decoration`
+|Библиотека Plasma5 для создания оформления окон
+
+|`designerplugin`
+|Интеграция KF5 виджетов Frameworks в Qt Designer/Creator
+
+|`discover`
+|Инструменты управления пакетами Plasma5
+
+|`dnssd`
+|Абстракция KF5 для системных функций DNSSD
+
+|`doctools`
+|Генерация документации KF5 из docbook
+
+|`drkonqi`
+|Обработчик сбоев Plasma5
+
+|`ecm`
+|Дополнительные модули и скрипты для CMake
+
+|`emoticons`
+|Библиотека KF5 для преобразования эмотиконов
+
+|`eventviews`
+|Библиотеки просмотра событий для KDEPim
+
+|`filemetadata`
+|Библиотека KF5 для извлечения метаданных файлов
+
+|`frameworkintegration`
+|Плагины рабочего пространства KF5 и интеграции фреймворков
+
+|`gapi`
+|Библиотека на основе KDE для доступа к сервисам Google
+
+|`globalaccel`
+|Библиотека KF5 для добавления поддержки глобальных сочетаний клавиш рабочего пространства
+
+|`grantlee-editor`
+|Редактор тем Grantlee
+
+|`grantleetheme`
+|KDE PIM grantleetheme
-|`soprano`
-|Фреймворк Qt 4 RDF
+|`gravatar`
+|Библиотека для поддержки gravatar
-|`strigi`
-|Поисковые даемон рабочего стола
+|`guiaddons`
+|KF5 аддоны для QtGui
+
+|`holidays`
+|Библиотека KDE для календарных праздников
+
+|`hotkeys`
+|Библиотека Plasma5 для горячих клавиш
+
+|`i18n`
+|KF5 — расширенная инфраструктура интернационализации
+
+|`iconthemes`
+|Библиотека KF5 для работы с иконками в приложениях
+
+|`identitymanagement`
+|KDE pim идентификации
+
+|`idletime`
+|Библиотека KF5 для мониторинга активности пользователей
+
+|`imap`
+|KDE API для поддержки IMAP
+
+|`incidenceeditor`
+|Инцидентные редакторские библиотеки для KDEPim
+
+|`infocenter`
+|Утилита Plasma5, предоставляющая системную информацию
+
+|`init`
+|Запускатель процессов KF5 для ускорения запуска приложений KDE
+
+|`itemmodels`
+|Модели KF5 для системы Qt Model/View
+
+|`itemviews`
+|KF5 виджеты-дополнения для Qt Model/View
+
+|`jobwidgets`
+|Виджеты KF5 для отслеживания экземпляра KJob
+
+|`js`
+|Библиотека KF5, предоставляющая интерпретатор ECMAScript
+
+|`jsembed`
+|Библиотека KF5 для привязки объектов JavaScript к QObjects
+
+|`kaddressbook`
+|Менеджер контактов KDE
+
+|`kalarm`
+|Планировщик персональных сигналов тревоги
+
+|`kalarm`
+|Планировщик персональных сигналов тревоги
+
+|`kate`
+|Базовая структура редактора для системы KDE
+
+|`kcmutils`
+|KF5 утилиты для работы с KCModules
+
+|`kde-cli-tools`
+|Неинтерактивные системные инструменты Plasma5
+
+|`kde-gtk-config`
+|Plasma5 конфигуратор GTK2 и GTK3
+
+|`kdeclarative`
+|Библиотека KF5, обеспечивающая интеграцию QML и KDE Frameworks
+
+|`kded`
+|KF5 расширяемый демон для предоставления системных сервисов
+
+|`kdelibs4support`
+|Помощник в портировании KF5 из KDELibs4
+
+|`kdepim-addons`
+|Дополнения KDE PIM
+
+|`kdepim-apps-libs`
+|Библиотеки KDE PIM, связанные с почтой
+
+|`kdepim-runtime5`
+|Инструменты и службы KDE PIM
+
+|`kdeplasma-addons`
+|Дополнения Plasma5 для улучшения работы с Plasma
+
+|`kdesu`
+|Интеграция KF5 с su для повышенных привилегий
+
+|`kdewebkit`
+|Библиотека KF5, обеспечивающая интеграцию QtWebKit
+
+|`kgamma5`
+|Настройки гаммы монитора Plasma5
+
+|`khtml`
+|Механизм рендеринга KF5 KTHML
+
+|`kimageformats`
+|Библиотека KF5, обеспечивающая поддержку дополнительных форматов изображений
+
+|`kio`
+|Абстракция ресурсов и сетевого доступа KF5
+
+|`kirigami2`
+|Набор компонентов на основе QtQuick
+
+|`kitinerary`
+|Модель данных и система извлечения информации о бронировании путешествий
+
+|`kmail`
+|Клиент электронной почты KDE
+
+|`kmail`
+|Клиент электронной почты KDE
+
+|`kmail-account-wizard`
+|Мастер настройки почтового аккаунта KDE
+
+|`kmenuedit`
+|Редактор меню Plasma5
+
+|`knotes`
+|Всплывающие примечания
+
+|`kontact`
+|KDE Персональный Органайзер
+
+|`kontact`
+|KDE Персональный Органайзер
+
+|`kontactinterface`
+|KDE glue для встраивания KParts в Kontact
+
+|`korganizer`
+|Программа для календаря и планирования
+
+|`kpimdav`
+|Реализация протокола DAV с KJobs
+
+|`kpkpass`
+|Библиотека для работы с файлами паролей Apple Wallet
+
+|`kross`
+|KF5 мультиязыковые прикладные скрипты
+
+|`kscreen`
+|Библиотека управления экраном Plasma5
+
+|`kscreenlocker`
+|Архитектура безопасной блокировки экрана Plasma5
+
+|`ksmtp`
+|Библиотека на основе задач для отправки электронной почты через SMTP-сервер
+
+|`ksshaskpass`
+|Plasma5 интерфейс для ssh-add
+
+|`ksysguard`
+|Утилита Plasma5 для отслеживания и управления запущенными процессами
+
+|`kwallet-pam`
+|Интеграция Plasma5 KWallet с PAM
+
+|`kwayland-integration`
+|Интеграционные плагины для рабочего стола на основе Wayland
+
+|`kwin`
+|Менеджер окон Plasma5
+
+|`kwrited`
+|Демон Plasma5, ожидающий сообщения wall и write
+
+|`ldap`
+|API доступа к LDAP для KDE
|`libkcddb`
|Библиотека KDE CDDB
@@ -911,65 +2683,259 @@ QMAKE_ARGS+= INCLUDEPATH+=${LOCALBASE}/include \
|`libkcompactdisc`
|Библиотека KDE для взаимодействия с аудио-CD
-|`libkdeedu`
-|Библиотеки, используемые для образовательных приложений
-
|`libkdcraw`
-|Библиотека KDE LibRaw
+|Интерфейс LibRaw для KDE
+
+|`libkdegames`
+|Библиотеки, используемые играми KDE
+
+|`libkdepim`
+|Библиотеки KDE PIM
+
+|`libkeduvocdocument`
+|Библиотека для чтения и записи файлов словарей
|`libkexiv2`
-|Библиотека KDE Exiv2
+|Интерфейс библиотеки Exiv2 для KDE
|`libkipi`
-| KDE Image Plugin Interface
+|Интерфейс плагинов изображений KDE
-|`libkonq`
-|Основная библиотека Konqueror
+|`libkleo`
+|Менеджер сертификатов для KDE
|`libksane`
-|Библиотека KDE SANE ("Scanner Access Now Easy")
+|Интерфейс библиотеки SANE для KDE
-|`pimlibs`
-|Библиотеки KDE-Pim
+|`libkscreen`
+|Библиотека управления экраном Plasma5
-|`kate`
-|Тектовый редактор
+|`libksieve`
+|Библиотеки Sieve для KDEPim
+
+|`libksysguard`
+|Библиотека Plasma5 для отслеживания и управления запущенными процессами
+
+|`mailcommon`
+|Общие библиотеки для KDEPim
+
+|`mailimporter`
+|Импорт файлов mbox в KMail
+
+|`mailtransport`
+|Библиотека KDE для управления транспортом почты
|`marble`
-|Виртуальный глобус
+|Виртуальный глобус и мировой атлас для KDE
+
+|`mbox`
+|Библиотека KDE для доступа к хранилищам почты в формате MBox
+
+|`mbox-importer`
+|Импорт файлов mbox в KMail
+
+|`mediaplayer`
+|Интерфейс плагина KF5 для функций медиаплеера
+
+|`messagelib`
+|Библиотека для обработки сообщений
+
+|`milou`
+|Plasma5 Plasmoid для поиска
+
+|`mime`
+|Библиотека для обработки данных MIME
+
+|`newstuff`
+|Библиотека KF5 для загрузки ресурсов приложений из сети
+
+|`notifications`
+|Абстракция KF5 для системных уведомлений
+
+|`notifyconfig`
+|Система конфигурации KF5 для KNotify
|`okular`
-|Универсальный просмотрщик документов
+|Универсальная программа для просмотра документов KDE
+
+|`oxygen`
+|Стиль Plasma5 Oxygen
+
+|`oxygen-icons5`
+|Тема иконок Oxygen для KDE
+
+|`package`
+|Библиотека KF5 для загрузки и установки пакетов
+
+|`parts`
+|KF5 система плагинов для работы с документами
+
+|`people`
+|Библиотека KF5, предоставляющая доступ к контактам
+
+|`pim-data-exporter`
+|Импорт и экспорт настроек KDE PIM
+
+|`pimcommon`
+|Общие библиотеки для KDEPim
+
+|`pimtextedit`
+|Библиотека KDE для утилит редактирования текста, специфичных для PIM
+
+|`plasma-browser-integration`
+|Компоненты Plasma5 для интеграции браузеров в рабочий стол
+
+|`plasma-desktop`
+|Plasma5 рабочий стол Plasma
+
+|`plasma-framework`
+|KF5 - среда выполнения пользовательского интерфейса на основе плагинов, используемая для создания пользовательских интерфейсов
+
+|`plasma-integration`
+|Плагины интеграции Qt Platform Theme для рабочего окружения Plasma
+
+|`plasma-pa`
+|Plasma5 Микшер звука Plasma Pulse
+
+|`plasma-sdk`
+|Приложения Plasma5, полезные для разработки Plasma
+
+|`plasma-workspace`
+|Plasma5 Рабочее пространство Plasma
+
+|`plasma-workspace-wallpapers`
+|Обои Plasma5
+
+|`plotting`
+|KF5 облегченный фреймворк для построения графиков
+
+|`polkit-kde-agent-1`
+|Демон Plasma5, предоставляющий интерфейс аутентификации polkit
+
+|`powerdevil`
+|Инструмент Plasma5 для управления настройками энергопотребления
-|`korundum`
-|Привязка Ruby к KDE
+|`prison`
+|Интерфейс API для создания штрихкодов
-|`perlkde`
-|Привязка Perl к KDE
+|`pty`
+|Абстракция pty KF5
-|`pykde4`
-|Привязка Python к KDE
+|`purpose`
+|Предлагает доступные действия для конкретной цели
-|`pykdeuic4`
-|Компилятор пользовательского интерфейса PyKDE
+|`qqc2-desktop-style`
+|Стиль Qt QuickControl2 для KDE
-|`smokekde`
-|Библиотеки KDE SMOKE
+|`runner`
+|KF5 параллелизованная система запросов
+
+|`service`
+|KF5 расширенные плагины и интроспекция сервисов
+
+|`solid`
+|Интеграция и обнаружение оборудования KF5
+
+|`sonnet`
+|KF5 библиотека проверки орфографии на основе плагинов
+
+|`syndication`
+|Библиотека KDE для обработки RSS-лент
+
+|`syntaxhighlighting`
+|Движок подсветки синтаксиса KF5 для структурированного текста и кода
+
+|`systemsettings`
+|Настройки системы Plasma5
+
+|`texteditor`
+|KF5 продвинутый встраиваемый текстовый редактор
+
+|`textwidgets`
+|KF5 расширенные виджеты для редактирования текста
+
+|`threadweaver`
+|KF5 дополнения к QtDBus
+
+|`tnef`
+|KDE API для обработки данных TNEF
+
+|`unitconversion`
+|Библиотека KF5 для преобразования единиц измерения
+
+|`user-manager`
+|Пользовательский менеджер Plasma5
+
+|`wallet`
+|KF5 безопасный и унифицированный контейнер для паролей пользователей
+
+|`wayland`
+|Обёртка клиентской и серверной библиотек KF5 для библиотек Wayland
+
+|`widgetsaddons`
+|KF5 аддоны для QtWidgets
+
+|`windowsystem`
+|Библиотека KF5 для доступа к оконной системе
+
+|`xmlgui`
+|KF5 настраиваемые пользователем главные окна
+
+|`xmlrpcclient`
+|Взаимодействие KF5 с XMLRPC-сервисами
|===
-Порты KDE 4.x устанавливаются в `KDE4_PREFIX`, что в настоящее время соответствует [.filename]#/usr/local/kde4#. Это достигается путем указания компонента `kdeprefix`, который определяет значение по умолчанию для `PREFIX`. Тем не менее, порты учитывают любые `PREFIX`, установленные через переменную окружения `MAKEFLAGS` и/или параметры `make`.
+[[kde5-components-example]]
+.Пример `USE_KDE`
+[example]
+====
+Это простой пример порта для KDE. `USES= cmake` указывает порту использовать CMake, инструмент конфигурации, широко применяемый в проектах KDE (см. crossref:special[using-cmake, Использование `cmake`] для подробного описания). `USE_KDE` добавляет зависимость от библиотек KDE. Необходимые компоненты KDE и другие зависимости можно определить через лог конфигурации. `USE_KDE` не подразумевает `USE_QT`. Если порту требуются некоторые компоненты Qt, укажите их в `USE_QT`.
+
+[.programlisting]
+....
+USES= cmake kde:5 qt:5
+USE_KDE= ecm
+USE_QT= core buildtools_build qmake_build
+....
-[[kde4-components-example]]
-.Пример `USE_KDE4`
+====
+
+[[using-lxqt]]
+== Использование LXQt
+
+Приложения, зависящие от LXQt, должны устанавливать `USES+= lxqt` и задавать `USE_LXQT` списком необходимых компонентов из таблицы ниже
+
+[[using-lxqt-components]]
+.Доступные компоненты LXQt
+[cols="1,1", frame="none", options="header"]
+|===
+| Имя
+| Описание
+
+|`buildtools`
+|Помощники для дополнительных модулей CMake
+
+|`libfmqt`
+|Привязки Libfm к Qt
+
+|`lxqt`
+|Ядро библиотеки LXQt
+
+|`qtxdg`
+|Реализация Qt спецификаций freedesktop.org XDG
+|===
+
+[[lxqt-components-example]]
+.Пример `USE_LXQT`
[example]
====
-Это простой пример для порта KDE 4. `USES= cmake:outsource` указывает порту использовать CMake, конфигурационный инструмент, широко применяемый в проектах KDE 4 (подробное описание даёт <<using-cmake>>). `USE_KDE4` добавляет зависимость от библиотек KDE и заставляет порты использовать `automoc4` во время сборки. Требуемые компоненты KDE и другие зависимости можно определить в журнале configure. `USE_KDE4` не подразумевает `USE_QT4`. Если порт требует какой-либо из компонентов Qt 4, их следует указать в `USE_QT4`.
+Это простой пример, `USE_LXQT` добавляет зависимость от библиотек LXQt. Необходимые компоненты LXQt и другие зависимости можно определить из лога конфигурации.
[.programlisting]
....
-USES= cmake:outsource
-USE_KDE4= kdelibs kdeprefix automoc4
-USE_QT4= moc_build qmake_build rcc_build uic_build
+USES= cmake lxqt qt:5 tar:xz
+USE_QT= core dbus widgets buildtools_build qmake_build
+USE_LXQT= buildtools libfmqt
....
====
@@ -978,155 +2944,159 @@ USE_QT4= moc_build qmake_build rcc_build uic_build
== Использование Java
[[java-variables]]
-=== Задание переменных
+=== Определения переменных
-Если вашему порту необходимо наличие Java(TM) Development Kit (JDK(TM)) для построения, работы или даже распаковки дистрибутивного файла, то в нём должна быть задана переменная `USE_JAVA`.
+Если порту требуется Java(TM) Development Kit (JDK(TM)) для сборки, запуска или даже извлечения distfile, определите `USE_JAVA`.
-В Коллекции Портов присутствуют несколько JDK различных разработчиков и разных версий. Если ваш порт должен использовать одну из этих версий, то вы должны указать, какую именно. Самой последней версией и версией по умолчанию является package:java/openjdk6[].
+В коллекции портов доступно несколько JDK от различных поставщиков и в нескольких версиях. Если порт должен использовать определённую версию, укажите её с помощью переменной `JAVA_VERSION`. Самая актуальная версия — package:java/openjdk18[], также доступны package:java/openjdk17[], package:java/openjdk16[], package:java/openjdk15[], package:java/openjdk14[], package:java/openjdk13[], package:java/openjdk12[], package:java/openjdk11[], package:java/openjdk8[] и package:java/openjdk7[].
-.Переменные, которые которые могут задаваться портами, использующими Java
+[[using-java-variables]]
+.Переменные, которые могут быть установлены портами, использующими Java
[cols="1,1", frame="none", options="header"]
|===
| Переменная
| Значение
|`USE_JAVA`
-|Должна быть определена для того, что последующие переменные вступили в действие.
+|Определите для остальных переменных, чтобы они имели какой-либо эффект.
|`JAVA_VERSION`
-|Список версий Java, перечисленных через пробел, подходящих для порта. Опциональный знак `"+"` позволяет вам указать диапазон версий (возможные значения: `1.5[+] 1.6[+] 1.7[+]`).
+|Список подходящих версий Java для порта, разделённых пробелами.
+Необязательный символ `\+` позволяет указать диапазон версий (допустимые значения: `8[+] 11[\+] 17[+] 18[\+] 19[+] 20[\+] 21[+]`).
|`JAVA_OS`
-|Список операционных систем, перечисленных через пробел, порты JDK для которых подходят для порта (возможные значения: `native linux`).
+|Список разделенных пробелами подходящих операционных систем портов JDK для порта (допустимые значения: `native linux`).
|`JAVA_VENDOR`
-|Список разработчиков портов JDK, перечисленных через пробел, которые подходят для порта (возможные значения: `freebsd bsdjava sun openjdk`).
+|Список подходящих поставщиков портов JDK для порта через пробел (допустимые значения: `openjdk oracle`).
|`JAVA_BUILD`
-|Если задана, то означает, что выбранный порт JDK должен быть добавлен к зависимостям порта для его построения.
+|Когда установлено, добавляет выбранный порт JDK в зависимости сборки.
|`JAVA_RUN`
-|Если задана, то означает, что выбранный порт JDK должен быть добавлен в зависимостям порта для его работы.
+|Когда установлено, добавляет выбранный порт JDK в зависимости времени выполнения.
|`JAVA_EXTRACT`
-|Если задана, то означает, что выбранный порт JDK должен быть добавлен в зависимостям порта для распаковки его дистрибутивных файлов.
+|Когда установлено, добавляет выбранный порт JDK в зависимости для извлечения.
|===
-Ниже перечисляются все значения, которые принимают переменные после задания переменной `USE_JAVA`:
+Ниже приведен список всех настроек, которые порт получит после установки `USE_JAVA`:
-.Переменные, доступные в портах, использующих Java
+[[using-java-variables2]]
+.Переменные, предоставляемые портам, использующим Java
[cols="1,1", frame="none", options="header"]
|===
| Переменная
| Значение
|`JAVA_PORT`
-|Название порта JDK (к примеру, `'java/openjdk6'`).
+|Имя порта JDK (например, `java/openjdk6`).
|`JAVA_PORT_VERSION`
-|Полное наименовании версии порта JDK (к примеру, `'1.6.0'`). Если вам нужны только первые две цифры номера версии, используйте `${JAVA_PORT_VERSION:C/^([0-9])\.([0-9])(.*)$/\1.\2/}`.
+|Полная версия порта JDK (например, `1.6.0`). Требуются только первые две цифры номера версии, используйте `${JAVA_PORT_VERSION:C/^([0-9])\.([0-9])(.*)$/\1.\2/}`.
|`JAVA_PORT_OS`
-|Операционная система, используемая портом JDK (к примеру, `'native'`).
+|Операционная система, используемая портом JDK (например, `'native'`).
|`JAVA_PORT_VENDOR`
-|Разработчик порта JDK (к примеру, `'openjdk'`).
+|Поставщик порта JDK (например, `'openjdk'`).
|`JAVA_PORT_OS_DESCRIPTION`
-|Описание операционной системы, используемой портом JDK (к примеру, `'Native'`).
+|Описание операционной системы, используемой портом JDK (например, `'Native'`).
|`JAVA_PORT_VENDOR_DESCRIPTION`
-|Описание разработчика порта JDK (к примеру, `'OpenJDK BSD Porting Team'`).
+|Описание поставщика порта JDK (например, `'OpenJDK BSD Porting Team'`).
|`JAVA_HOME`
-|Маршрут к установочному каталогу JDK (к примеру, [.filename]#'/usr/local/openjdk6'#).
+|Путь к каталогу установки JDK (например, [.filename]#'/usr/local/openjdk6'#).
|`JAVAC`
-|Маршрут к используемому компилятору Java (к примеру, [.filename]#'/usr/local/openjdk6/bin/javac'#.
+|Путь к используемому компилятору Java (например, [.filename]#'/usr/local/openjdk6/bin/javac'#).
|`JAR`
-|Маршрут к используемой утилите `jar` (к примеру, [.filename]#'/usr/local/openjdk6/bin/jar'# или [.filename]#'/usr/local/bin/fastjar'#).
+|Путь к инструменту `jar`, который следует использовать (например, [.filename]#'/usr/local/openjdk6/bin/jar'# или [.filename]#'/usr/local/bin/fastjar'#).
|`APPLETVIEWER`
-|Маршрут к утилите `appletviewer` (к примеру, [.filename]#'/usr/local/openjdk6/bin/appletviewer'#).
+|Путь к утилите `appletviewer` (например, [.filename]#'/usr/local/openjdk6/bin/appletviewer'#).
|`JAVA`
-|Маршрут к выполняемому файлу `java`. Используйте его для запуска Java-программ (к примеру, [.filename]#'/usr/local/openjdk6/bin/java'#).
+|Путь к исполняемому файлу `java`. Используется для запуска программ на Java (например, [.filename]#'/usr/local/openjdk6/bin/java'#).
|`JAVADOC`
-|Маршрут к вспомогательной программе `javadoc`.
+|Путь к программе `javadoc`.
|`JAVAH`
-|Маршрут к программе `javah`.
+|Путь к программе `javah`.
|`JAVAP`
-|Маршрут к программе `javap`.
+|Путь к программе `javap`.
|`JAVA_KEYTOOL`
-|Маршрут к вспомогательной программе `keytool`.
+|Путь к утилите `keytool`.
|`JAVA_N2A`
-|Маршрут к утилите `native2ascii`.
+|Путь к инструменту `native2ascii`.
|`JAVA_POLICYTOOL`
-|Маршрут к программе `policytool`.
+|Путь к программе `policytool`.
|`JAVA_SERIALVER`
-|Маршрут к вспомогательной программе `serialver`.
+|Путь к утилите `serialver`.
|`RMIC`
-|Маршрут к генератору каркаса программ RMI, утилите `rmic`.
+|Путь к генератору RMI-заглушек/скелетов, `rmic`.
|`RMIREGISTRY`
-|Маршрут к программе регистрации RMI, `rmiregistry`.
+|Путь к программе реестра RMI, `rmiregistry`.
|`RMID`
-|Маршрут к программе-даемону RMI `rmid`.
+|Путь к программе демона RMI `rmid`.
|`JAVA_CLASSES`
-|Маршрут к архиву, который содержит файлы классов JDK, [.filename]#${JAVA_HOME}/jre/lib/rt.jar#.
+|Путь к архиву, содержащему файлы классов JDK, [.filename]#${JAVA_HOME}/jre/lib/rt.jar#.
|===
-Вы можете воспользоваться make-целью `java-debug` для получения информации, необходимой для отладки вашего порта. При её выполнении будут выданы значения многих упомянутых выше переменных.
+Используйте цель `java-debug` в make для получения информации для отладки порта. Она отобразит значения многих из перечисленных ранее переменных.
-Кроме того, для единообразия установки всех портов Java определены следующие константы:
+Кроме того, определены следующие константы, чтобы все порты Java могли быть установлены единообразно:
-.Константы, определённые для портов, использующих Java
+[[using-java-constants]]
+.Константы, определенные для портов, использующих Java
[cols="1,1", frame="none", options="header"]
|===
| Константа
| Значение
|`JAVASHAREDIR`
-|Корневой каталог для всего, что связано с Java. По умолчанию: [.filename]#${PREFIX}/shared/java#.
+|Базовый каталог для всего, связанного с Java. По умолчанию: [.filename]#${PREFIX}/share/java#.
|`JAVAJARDIR`
-|Каталог, в который должны устанавливаться JAR-файлы. По умолчанию: [.filename]#${JAVASHAREDIR}/classes#.
+|Каталог, в котором установлены JAR-файлы. По умолчанию: [.filename]#${JAVASHAREDIR}/classes#.
|`JAVALIBDIR`
-|Каталог, в который устанавливаются JAR-файлы из других портов. По умолчанию: [.filename]#${LOCALBASE}/shared/java/classes#.
+|Каталог, в котором расположены JAR-файлы, установленные другими портами. По умолчанию: [.filename]#${LOCALBASE}/share/java/classes#.
|===
-Соответствующие записи определяются в обоих переменных `PLIST_SUB` (описана в crossref:plist[plist-sub,Изменение содержимого pkg-plist в зависимости от make-переменных]) и `SUB_LIST`.
+Связанные записи определены как в `PLIST_SUB` (документировано в crossref:plist[plist-sub,Изменение pkg-plist на основе переменных Make]), так и в `SUB_LIST`.
[[java-building-with-ant]]
-=== Построение с Ant
+=== Сборка с Ant
-Если построение порта производится с использованием Apache Ant, то необходимо определить `USE_ANT`. Таким образом Ant становится подкомандой make. Если в порте не определена цель `do-build`, то будет установлена цель по умолчанию, которая просто запускает Ant в соответствии со значением `MAKE_ENV`, `MAKE_ARGS` и `ALL_TARGET`. Это похоже на механизм `USES= gmake`, который описан в <<building>>.
+Когда порт должен собираться с использованием Apache Ant, он должен определять `USE_ANT`. Таким образом, Ant считается командой sub-make. Если цель `do-build` не определена в порте, будет установлена цель по умолчанию, которая запускает Ant в соответствии с `MAKE_ENV`, `MAKE_ARGS` и `ALL_TARGET`. Это аналогично механизму `USES= gmake`, который документирован в crossref:special[building, Building Mechanisms].
[[java-best-practices]]
-=== Практические рекомендации
+=== Лучшие практики
-При портировании Java-библиотеки ваш порт должен устанавливать JAR-файл(ы) в каталог [.filename]#${JAVAJARDIR}#, а все остальные данные в каталог [.filename]#${JAVASHAREDIR}/${PORTNAME}# (за исключением документации, о которой пойдёт речь ниже). Для уменьшения размера упакованного файла вы можете сослаться на JAR-файл(ы) непосредственно в файле [.filename]#Makefile#. Просто воспользуйтесь следующей директивой (в которой [.filename]#myport.jar# является именем JAR-файла, устанавливаемого как часть порта):
+При переносе библиотеки Java порт должен устанавливать JAR-файл(ы) в [.filename]#${JAVAJARDIR}#, а все остальное — в [.filename]#${JAVASHAREDIR}/${PORTNAME}# (за исключением документации, см. ниже). Чтобы уменьшить размер упаковочного файла, ссылайтесь на JAR-файл(ы) напрямую в [.filename]#Makefile#. Используйте следующую инструкцию (где [.filename]#myport.jar# — имя JAR-файла, устанавливаемого как часть порта):
[.programlisting]
....
-PLIST_FILES+= %%JAVAJARDIR%%/myport.jar
+PLIST_FILES+= ${JAVAJARDIR}/myport.jar
....
-При портировании Java-приложения порт обычно устанавливает всё в один каталог (в том числе все свои JAR-зависимости). В этом отношении настоятельно рекомендуется использование [.filename]#${JAVASHAREDIR}/${PORTNAME}#. На усмотрение создателя порта остаётся решение вопроса о том, устанавливать ли дополнительные JAR-зависимости в этот каталог или напрямую использовать уже установленные (из каталога [.filename]#${JAVAJARDIR}#).
+При переносе Java-приложения порт обычно устанавливает все компоненты в единый каталог (включая зависимости в виде JAR-файлов). В этом отношении настоятельно рекомендуется использовать [.filename]#${JAVASHAREDIR}/${PORTNAME}#. Портеру предстоит решить, устанавливать ли дополнительные JAR-зависимости в этот каталог или использовать уже установленные (из [.filename]#${JAVAJARDIR}#).
-При портировании приложения Java(TM), для запуска сервиса которого требуется сервер приложений, такой как package:www/tomcat7[], для производителя в порядке вещей является распространение файла [.filename]#.war#. Файл [.filename]#.war# - это Веб-приложение АРхивированное и оно распаковывается при вызове данным приложением. Избегайте добавлять файлы [.filename]#.war# в [.filename]#pkg-plist#. Это не является наилучшим решением. Сервер приложений производит расширение архива [.filename]#war# без должной его очистки при удалении порта. Более подходящим способом работы с этим файлом будет распаковать архив, установить файлы и добавить их в [.filename]#pkg-plist#.
+При переносе Java(TM)-приложения, которое требует сервера приложений, такого как package:www/tomcat7[], для запуска службы, вендор часто распространяет файл [.filename]#.war#. [.filename]#.war# — это веб-архив приложения (Web application ARchive), который извлекается при вызове приложением. Избегайте добавления [.filename]#.war# в [.filename]#pkg-plist#. Это не считается лучшей практикой. Сервер приложений развернет архив war, но не очистит его должным образом при удалении порта. Более предпочтительный способ работы с этим файлом — извлечь архив, затем установить файлы и, наконец, добавить эти файлы в [.filename]#pkg-plist#.
[.programlisting]
....
@@ -1140,20 +3110,20 @@ post-extract:
do-install:
cd ${WRKDIR} && \
${INSTALL} -d -o ${WWWOWN} -g ${WWWGRP} ${TOMCATDIR}/webapps/${PORTDIRNAME}
- @cd ${WRKDIR}/${PORTDIRNAME} && ${COPYTREE_SHARE} \* ${WEBAPPDIR}/${PORTDIRNAME}
+ cd ${WRKDIR}/${PORTDIRNAME} && ${COPYTREE_SHARE} \* ${WEBAPPDIR}/${PORTDIRNAME}
....
-Вне зависимости от типа вашего порта (библиотека это или приложение), дополнительная документация должна устанавливаться <<install-documentation,в тоже самое место>>, что и для других портов. Известно, что в зависимости от используемой версии JDK утилита JavaDoc генерирует различные наборы файлов. Для портов, которые не привязаны к использованию определённой версии JDK, таким образом становится проблематичным определить список файлов для упаковки ([.filename]#pkg-plist#). Это одна из причин, по которой создателям портов настоятельно рекомендуется использовать макрос `PORTDOCS`. Более того, даже если вы сможете угадать набор файлов, который будет сгенерирован утилитой `javadoc`, размер получающегося файла [.filename]#pkg-plist# голосует за использование `PORTDOCS`.
+Независимо от типа порта (библиотека или приложение), дополнительная документация устанавливается crossref:makefiles[install-documentation,в том же месте], что и для любого другого порта. Известно, что инструмент Javadoc создает разный набор файлов в зависимости от версии используемого JDK. Для портов, которые не требуют использования конкретной версии JDK, указание списка упаковки ([.filename]#pkg-plist#) становится сложной задачей. Это одна из причин, по которой разработчикам портов настоятельно рекомендуется использовать `PORTDOCS`. Более того, даже если набор файлов, генерируемых `javadoc`, можно предсказать, размер результирующего [.filename]#pkg-plist# говорит в пользу использования `PORTDOCS`.
-Значением по умолчанию для переменной `DATADIR` является [.filename]#${PREFIX}/shared/${PORTNAME}#. Хорошей идеей является переопределение для Java-портов значения `DATADIR` как [.filename]#${JAVASHAREDIR}/${PORTNAME}#. На самом деле `DATADIR` автоматически добавляется к `PLIST_SUB` (это описано в crossref:plist[plist-sub,Изменение содержимого pkg-plist в зависимости от make-переменных]), так что вы сможете использовать `%%DATADIR%%` непосредственно в [.filename]#pkg-plist#.
+Значение по умолчанию для `DATADIR` — [.filename]#${PREFIX}/share/${PORTNAME}#. Рекомендуется переопределить `DATADIR` на [.filename]#${JAVASHAREDIR}/${PORTNAME}# для портов Java. Действительно, `DATADIR` автоматически добавляется в `PLIST_SUB` (документировано в crossref:plist[plist-sub,Изменение pkg-plist на основе переменных Make]), поэтому используйте `%%DATADIR%%` напрямую в [.filename]#pkg-plist#.
-Что касается выбора между построением портов Java из исходных текстов или их прямой установкой из бинарных дистрибутивов, то на момент создания этого текста определённой политики на этот счёт не существует. Однако участники http://www.freebsd.org/java/[Проекта FreeBSD Java] рекомендуют создателям портов строить их из исходных текстов, если эта задача является несложной.
+Что касается выбора между сборкой портов Java из исходного кода или их непосредственной установкой из бинарного дистрибутива, на момент написания документации определённой политики не существует. Однако участники https://www.freebsd.org/java/[FreeBSD Java Project] рекомендуют сопровождающим портов по возможности собирать их из исходного кода, если это не представляет сложностей.
-Все возможности, которые были описаны в этом разделе, реализованы в файле [.filename]#bsd.java.mk#. Если вы предположите, что вашему порту требуется менее тривиальная поддержка Java, пожалуйста, взгляните сначала на http://svnweb.FreeBSD.org/ports/head/Mk/bsd.java.mk?view=markup[журнал изменений bsd.java.mk в Subversion], так как для документирования последних изменений требуется какое-то время. Затем, если вы думаете, что не хватающая вам поддержка окажется полезной для многих других портов Java, обсудите ваш вопрос в freebsd-java.
+Все функции, представленные в этом разделе, реализованы в [.filename]#bsd.java.mk#. Если порту требуется более сложная поддержка Java, сначала ознакомьтесь с https://cgit.FreeBSD.org/ports/tree/Mk/bsd.java.mk[историей изменений bsd.java.mk], так как документирование новых функций обычно занимает некоторое время. Затем, если отсутствующая поддержка будет полезна для многих других Java-портов, не стесняйтесь обсудить это на списке рассылки freebsd-java.
-Хотя в базе сообщений об ошибках для соответствующих PR имеется категория `java`, она относится к работе над портированием JDK, которые проводит Проект FreeBSD Java. Таким образом, вы должны относить свой Java-порт, как и любой другой, к категории `ports`, если решаемый вами вопрос не относится ни к реализации JDK, ни к [.filename]#bsd.java.mk#.
+Хотя существует категория `java` для PR, она относится к усилиям по портированию JDK в рамках проекта FreeBSD Java. Поэтому отправляйте порт Java в категорию `ports`, как и любой другой порт, если только проблема не связана либо с реализацией JDK, либо с [.filename]#bsd.java.mk#.
-Похожим образом определена политика по отношению к `CATEGORIES` порта Java, которая подробно описана в crossref:makefiles[makefile-categories, Разделение по категориям].
+Аналогично существует определённая политика в отношении `CATEGORIES` для портов Java, которая подробно описана в crossref:makefiles[makefile-categories,Категоризация].
[[using-php]]
== Веб-приложения, Apache и PHP
@@ -1161,315 +3131,334 @@ do-install:
[[using-apache]]
=== Apache
+[[using-apache-variables]]
.Переменные для портов, использующих Apache
[cols="1,1", frame="none"]
|===
|`USE_APACHE`
-|Порт требует Apache. Возможные значения: `yes` (берёт любую версию), `22`, `24`, `22-24`, `22+` и так далее. Версия по умолчанию `22`. Более подробная информация содержится в файле [.filename]#ports/Mk/bsd.apache.mk# и на странице http://wiki.freebsd.org/Apache/[wiki.freebsd.org/Apache/].
+|Порт требует Apache. Возможные значения: `yes` (любая версия), `22`, `24`, `22-24`, `22+` и т.д. Версия APACHE по умолчанию — `22`. Подробнее см. в [.filename]#ports/Mk/bsd.apache.mk# и на https://wiki.freebsd.org/Apache/[wiki.freebsd.org/Apache/].
|`APXS`
-|Полный путь к исполняемому файлу `apxs`. Может быть переопределен в вашем порту.
+|Полный путь к бинарному файлу `apxs`. Может быть переопределён в порте.
|`HTTPD`
-|Полный путь к исполняемому файлу `httpd`. Может быть переопределен в вашем порту.
+|Полный путь к бинарному файлу `httpd`. Может быть переопределён в порте.
|`APACHE_VERSION`
-|Версия установленного Apache (переменная только для чтения). Эта переменная доступна только после подключения [.filename]#bsd.port.pre.mk#. Возможные значения: `22`, `24`.
+|Версия установленной Apache (переменная только для чтения). Эта переменная доступна только после включения [.filename]#bsd.port.pre.mk#. Возможные значения: `22`, `24`.
|`APACHEMODDIR`
-|Каталог для модулей Apache. Значение переменной автоматически подставляется в [.filename]#pkg-plist#.
+|Каталог для модулей Apache. Эта переменная автоматически раскрывается в [.filename]#pkg-plist#.
|`APACHEINCLUDEDIR`
-|Каталог для заголовков Apache. Значение переменной автоматически подставляется в [.filename]#pkg-plist#.
+|Каталог для заголовков Apache. Эта переменная автоматически раскрывается в [.filename]#pkg-plist#.
|`APACHEETCDIR`
-|Каталог для конфигурационных файлов Apache. Значение переменной автоматически подставляется в [.filename]#pkg-plist#.
+|Каталог для файлов конфигурации Apache. Эта переменная автоматически раскрывается в [.filename]#pkg-plist#.
|===
-.Используемые переменные при портировании модулей Apache
+[[using-apache-modules]]
+.Полезные переменные для переноса модулей Apache
[cols="1,1", frame="none"]
|===
|`MODULENAME`
-|Название модуля. Значением по умолчанию является `PORTNAME`. Пример: `mod_hello`
+|Имя модуля. Значение по умолчанию — `PORTNAME`. Пример: `mod_hello`
|`SHORTMODNAME`
-|Краткое название модуля. Наследуется автоматически от `MODULENAME`, но может быть переопределено. Пример: `hello`
+|Короткое имя модуля. Автоматически определяется из `MODULENAME`, но может быть переопределено. Пример: `hello`
|`AP_FAST_BUILD`
-|Использовать `apxs` для компиляции и установки модуля.
+|Используйте `apxs` для компиляции и установки модуля.
|`AP_GENPLIST`
-|Также автоматически создает [.filename]#pkg-plist#.
+|Также автоматически создаёт файл [.filename]#pkg-plist#.
|`AP_INC`
-|Добавляет каталог к пути поиска заголовков во время компиляции.
+|Добавляет каталог в путь поиска заголовков во время компиляции.
|`AP_LIB`
-|Добавляет каталог к пути поиска библиотек во время компиляции.
+|Добавляет каталог в путь поиска библиотек во время компиляции.
|`AP_EXTRAS`
-|Дополнительные флаги, передаваемые `apxs`.
+|Дополнительные флаги для передачи в `apxs`.
|===
[[web-apps]]
=== Веб-приложения
-Веб-приложения следует устанавливать в [.filename]#PREFIX/www/appname#. Для вашего удобства этот путь одинаково доступен в [.filename]#Makefile# и [.filename]#pkg-plist# как переменная `WWWDIR`, а путь относительно `PREFIX` доступен в [.filename]#Makefile# как `WWWDIR_REL`.
+Веб-приложения должны быть установлены в [.filename]#PREFIX/www/appname#. Этот путь доступен как в [.filename]#Makefile#, так и в [.filename]#pkg-plist# как `WWWDIR`, а путь относительно `PREFIX` доступен в [.filename]#Makefile# как `WWWDIR_REL`.
+
+Пользователь и группа процесса веб-сервера доступны как `WWWOWN` и `WWWGRP`, если необходимо изменить владельца некоторых файлов. Значения по умолчанию для обоих — `www`. Используйте `WWWOWN?= myuser` и `WWWGRP?= mygroup`, если порту требуются другие значения. Это позволяет пользователю легко их переопределить.
-Пользователь и группа процесса веб-сервера доступны как `WWWOWN` и `WWWGRP`, в случае если вам нужно изменить владельца для некоторых файлов. Значением по умолчанию и для владельца, и для группы является `www`. Если вы хотите использовать в вашем порте другие значения, воспользуйтесь для этого нотацией `WWWOWN?= myuser`, чтобы позволить пользователю легко переопределить их.
+[IMPORTANT]
+====
+Используйте `WWWOWN` и `WWWGRP` с осторожностью. Помните, что каждый файл, доступный для записи веб-серверу, представляет собой потенциальную угрозу безопасности.
+====
-Не добавляйте зависимость от Apache, если веб-приложение явным образом не нуждается в Apache. Учитывайте, что пользователи могут пожелать запустить ваше веб-приложение на другом веб-сервере помимо Apache.
+Не зависьте от Apache, если веб-приложение явно не требует Apache. Учитывайте, что пользователи могут захотеть запускать веб-приложение на другом веб-сервере, кроме Apache.
[[php-variables]]
=== PHP
-.Переменные для портов, использующих PHP
-[cols="1,1", frame="none"]
-|===
-|`USE_PHP`
-|Порт требует PHP. Значение `yes` добавляет зависимость от PHP. Вместо этого может быть указан перечень требуемых расширений PHP. Пример: `pcre xml gettext`
+Веб-приложения PHP объявляют свою зависимость от него с помощью `USES=php`. Подробнее см. в crossref:uses[uses-php,`php`].
-|`DEFAULT_PHP_VER`
-|Выбирает старший номер версии, с которым будет установлен PHP как зависимость в случае, когда PHP еще не установлен. По умолчанию `5`. Возможные значения: `4`, `5`
+[[php-pear]]
+=== Модули PEAR
-|`IGNORE_WITH_PHP`
-|Порт не работает с PHP данной версии. Возможные значения: `4`, `5`
+Портирование модулей PEAR — это очень простой процесс.
-|`USE_PHPIZE`
-|Порт будет построен как расширение PHP.
+Добавьте `USES=pear` в [.filename]#Makefile# порта. Фреймворк установит соответствующие файлы в нужные места и автоматически сгенерирует plist во время установки.
-|`USE_PHPEXT`
-|Порт будет считаться расширением PHP, включая установку и регистрацию в реестре расширений.
+[[pear-makefile]]
+.Пример Makefile для PEAR Class
+[example]
+====
+[.programlisting]
+....
+PORTNAME= Date
+DISTVERSION= 1.4.3
+CATEGORIES= devel www pear
-|`USE_PHP_BUILD`
-|Установить PHP как зависимость времени построения.
+MAINTAINER= someone@example.org
+COMMENT= PEAR Date and Time Zone Classes
+WWW= https://pear.php.net/package/Date/
-|`WANT_PHP_CLI`
-|Хочет CLI (командная строка) версию PHP.
+USES= pear
-|`WANT_PHP_CGI`
-|Хочет CGI версию PHP.
+.include <bsd.port.mk>
+....
-|`WANT_PHP_MOD`
-|Хочет PHP как модуль Apache.
+====
-|`WANT_PHP_SCR`
-|Хочет CLI или CGI версию PHP.
+[TIP]
+====
+Модули PEAR будут автоматически преобразованы в порт с флейвором с использованием crossref:flavors[flavors-auto-php,флейворов PHP].
+====
-|`WANT_PHP_WEB`
-|Хочет модуль Apache или CGI версию PHP.
-|===
+[NOTE]
+====
+Если используется нестандартный `PEAR_CHANNEL`, зависимости для сборки и выполнения будут добавлены автоматически.
+====
-=== Модули PEAR
+[IMPORTANT]
+====
+Модули PEAR не требуют определения `PKGNAMESUFFIX`, так как он автоматически заполняется с использованием `PEAR_PKGNAMEPREFIX`. Если порту необходимо добавить к `PKGNAMEPREFIX`, он также должен использовать `PEAR_PKGNAMEPREFIX`, чтобы отличать различные флейворы.
+====
-Портирование модулей PEAR является очень простым процессом.
+[[php-horde]]
+==== Модули Horde
-Используйте переменные `FILES`, `TESTS`, `DATA`, `SQLS`, `SCRIPTFILES`, `DOCS` and `EXAMPLES` для перечисления файлов, которые вы хотите установить. Все перечисленные файлы будут автоматически установлены в подходящие места и добавлены в [.filename]#pkg-plist#.
+Также и перенос модулей Horde является простым процессом.
-Подключите [.filename]#${PORTSDIR}/devel/pear/bsd.pear.mk# на последней строке [.filename]#Makefile#.
+Добавьте `USES=horde` в [.filename]#Makefile# порта. Фреймворк установит соответствующие файлы в нужные места и автоматически сгенерирует plist во время установки.
-[[pear-makefile]]
-.Пример Makefile для классов PEAR
+Переменные `USE_HORDE_BUILD` и `USE_HORDE_RUN` могут использоваться для добавления зависимостей времени сборки и выполнения от других модулей Horde. Полный список доступных модулей можно найти в [.filename]#Mk/Uses/horde.mk#.
+
+[[horde-Makefile]]
+.Пример Makefile для модуля Horde
[example]
====
[.programlisting]
....
-PORTNAME= Date
-PORTVERSION= 1.4.3
+PORTNAME= Horde_Core
+DISTVERSION= 2.14.0
CATEGORIES= devel www pear
-MAINTAINER= example@domain.com
-COMMENT= PEAR Date and Time Zone Classes
+MAINTAINER= horde@FreeBSD.org
+COMMENT= Horde Core Framework libraries
+WWW= https://pear.horde.org/
-BUILD_DEPENDS= ${PEARDIR}/PEAR.php:${PORTSDIR}/devel/pear-PEAR
-RUN_DEPENDS:= ${BUILD_DEPENDS}
+OPTIONS_DEFINE= KOLAB SOCKETS
+KOLAB_DESC= Enable Kolab server support
+SOCKETS_DESC= Depend on sockets PHP extension
-FILES= Date.php Date/Calc.php Date/Human.php Date/Span.php \
- Date/TimeZone.php
-TESTS= test_calc.php test_date_methods_span.php testunit.php \
- testunit_date.php testunit_date_span.php wknotest.txt \
- bug674.php bug727_1.php bug727_2.php bug727_3.php \
- bug727_4.php bug967.php weeksinmonth_4_monday.txt \
- weeksinmonth_4_sunday.txt weeksinmonth_rdm_monday.txt \
- weeksinmonth_rdm_sunday.txt
-DOCS= TODO
-_DOCSDIR= .
+USES= horde
+USE_PHP= session
-.include <bsd.port.pre.mk>
-.include "${PORTSDIR}/devel/pear/bsd.pear.mk"
-.include <bsd.port.post.mk>
+USE_HORDE_BUILD= Horde_Role
+USE_HORDE_RUN= Horde_Role Horde_History Horde_Pack \
+ Horde_Text_Filter Horde_View
+
+KOLAB_USE= HORDE_RUN=Horde_Kolab_Server,Horde_Kolab_Session
+SOCKETS_USE= PHP=sockets
+
+.include <bsd.port.mk>
....
====
+[TIP]
+====
+Поскольку модули Horde также являются модулями PEAR, они будут автоматически преобразованы с использованием crossref:flavors[flavors-auto-php,флейворов PHP].
+====
+
[[using-python]]
== Использование Python
-Коллекция Портов поддерживает параллельную установку множества версий Python. Следует убедиться, что в портах используется правильный интерпретатор `python` в соответствии с переменной `PYTHON_VERSION`, установленной пользователем. По большей части это означает замену пути к исполняемому файлу `python` в сценариях на значение переменной `PYTHON_CMD`.
+Коллекция портов поддерживает параллельную установку нескольких версий Python. Порты должны использовать правильный интерпретатор `python` в соответствии с настраиваемым пользователем параметром `PYTHON_VERSION`. Важнее всего заменить путь к исполняемому файлу `python` в скриптах на значение `PYTHON_CMD`.
-Порты, устанавливающие файлы под каталог `PYTHON_SITELIBDIR`, должны использовать префикс вида `pyXY-`, таким образом названия пакетов будут включать в себя версию Python, с которой они установлены.
+Порты, которые устанавливают файлы в `PYTHON_SITELIBDIR`, должны использовать префикс имени пакета `pyXY-`, чтобы их имя пакета включало версию Python, для которой они предназначены.
[.programlisting]
....
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
....
-.Переменные для портов, которые используют Python
+
+[[using-python-variables]]
+.Наиболее полезные переменные для портов, использующих Python
[cols="1,1", frame="none"]
|===
-|`USE_PYTHON`
-|Для этого порта нужен Python. Минимальная требуемая версия может быть указана с таким значением как `2.6+`. Также можно указан диапазон версий с разделением двух версий через -, например: `2.6-2.7`
+|`USES=python`
+|Порту требуется Python. Минимально необходимая версия может быть указана с такими значениями, как `3.10+`. Диапазоны версий также можно указать, разделив две версии дефисом: `USES=python:3.8-3.9`. Обратите внимание, что `USES=python` _не_ включает Python 2.7, его нужно запрашивать явно с помощью `USES=python:2.7+`.
+
+|`USE_PYTHON=distutils`
+|Используйте Python distutils для настройки, компиляции и установки. Это требуется, когда порт поставляется с [.filename]#setup.py#. Это переопределяет цели `do-build` и `do-install`, а также может переопределить `do-configure`, если `GNU_CONFIGURE` не определён. Кроме того, подразумевается `USE_PYTHON=flavors`.
-|`USE_PYDISTUTILS`
-|Использовать дистрибутивные утилиты (distutils) Python для конфигурации, компиляции и установки. Необходимо, если порт использует [.filename]#setup.py#. Переопределяет цели `do-build` и `do-install` и также может переопределять `do-configure`, если не определена `GNU_CONFIGURE`.
+|`USE_PYTHON=autoplist`
+|Создать список пакетов автоматически. Это также требует установки `USE_PYTHON=distutils`.
+
+|`USE_PYTHON=concurrent`
+|Порт будет использовать уникальный префикс, обычно `PYTHON_PKGNAMEPREFIX`, для определённых каталогов, таких как `EXAMPLESDIR` и `DOCSDIR`, а также добавлять суффикс — версию Python из `PYTHON_VER` — к устанавливаемым бинарным файлам и скриптам. Это позволяет устанавливать порты для разных версий Python одновременно, что в противном случае приводило бы к конфликту файлов.
+
+|`USE_PYTHON=flavors`
+|Порт не использует distutils, но по-прежнему поддерживает несколько версий Python. `FLAVORS` будет установлен в поддерживаемые версии Python. Дополнительную информацию см. в crossref:flavors[flavors-auto-python,`USES`=python и флейворы].
+
+|`USE_PYTHON=optsuffix`
+|Если текущая версия Python не является версией по умолчанию, порт получит `PKGNAMESUFFIX=${PYTHON_PKGNAMESUFFIX}`. Полезно только для флейворов.
|`PYTHON_PKGNAMEPREFIX`
-|Используется как `PKGNAMEPREFIX` для отличия пакетов, использующих разные версии Python. Пример: `py24-`
+|Используется как `PKGNAMEPREFIX` для различения пакетов разных версий Python. Пример: `py27-`
|`PYTHON_SITELIBDIR`
-|Местонахождение дерева site-packages, которое содержит путь установки Python (обычно, `LOCALBASE`). Переменная `PYTHON_SITELIBDIR` может быть очень полезной при установке модулей Python.
+|Расположение дерева site-packages, которое содержит путь установки Python (обычно `LOCALBASE`). `PYTHON_SITELIBDIR` может быть очень полезно при установке модулей Python.
|`PYTHONPREFIX_SITELIBDIR`
-|Вариант PYTHON_SITELIBDIR без PREFIX. По возможности всегда используйте `%%PYTHON_SITELIBDIR%%` в [.filename]#pkg-plist#. Значением по умолчанию для `%%PYTHON_SITELIBDIR%%` является `lib/python%%PYTHON_VERSION%%/site-packages`.
+|Вариант PREFIX-clean для PYTHON_SITELIBDIR. Всегда используйте `%%PYTHON_SITELIBDIR%%` в [.filename]#pkg-plist#, когда это возможно. Значение по умолчанию для `%%PYTHON_SITELIBDIR%%` — `lib/python%%PYTHON_VERSION%%/site-packages`
|`PYTHON_CMD`
-|Командная строка интерпретатора Python, включая номер версии.
+|Интерпретатор командной строки Python, включая номер версии.
+|===
+[[using-python-variables-helpers]]
+.Помощники зависимостей модуля Python
+[cols="1,1", frame="none"]
+|===
|`PYNUMERIC`
-|Строка зависимости для расширения numeric.
+|Строка зависимости для числового расширения.
|`PYNUMPY`
-|Строка зависимости для нового расширения numeric, numpy (PYNUMERIC объявлен устаревшим вышестоящим производителем).
+|Строка зависимости для нового числового расширения, numpy. (PYNUMERIC устарел у вендора).
|`PYXML`
-|Строка зависимости для расширения XML (не нужно для Python 2.0 и выше, т.к. включено в основной дистрибутив).
-|===
+|Строка зависимости для расширения XML (не требуется для Python 2.0 и выше, так как оно также входит в базовую поставку).
-Полный перечень доступных переменных можно найти в [.filename]#/usr/ports/Mk/bsd.python.mk#.
+|`PY_ENUM34`
+|Условная зависимость от пакета package:devel/py-enum34[] в зависимости от версии Python.
-Некоторые приложения на Python заявляют о поддержке `DESTDIR` (требуется для staging), которая не работает (в частности, у Mailman до версии 2.1.16). Ограничение можно обойти путём перекомпиляции сценариев. Например, это можно выполнить в цели `post-build`. С учётом того, что после установки предполагаемое место размещения сценариев Python будет находиться в `PYTHONPREFIX_SITELIBDIR`, можно применить следующее решение:
+|`PY_ENUM_COMPAT`
+|Условная зависимость от пакета package:devel/py-enum-compat[] в зависимости от версии Python.
-[.programlisting]
-....
-(cd ${STAGEDIR}${PREFIX} \
- && ${PYTHON_CMD} ${PYTHON_LIBDIR}/compileall.py \
- -d ${PREFIX} -f ${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;})
-....
+|`PY_PATHLIB`
+|Условная зависимость от пакета package:devel/py-pathlib[] в зависимости от версии Python.
-Эта команда перекомпилирует исходный текст с заменой путей на относительные к каталогу сборки, а также дописывает значение `PREFIX` перед именем файла, записанного в выходном файле с промежуточным представлением, с использованием `-d`. `-f` требуется для безусловной перекомпиляции, `:S;${PREFIX}/;;` удаляет префиксы из значения переменной `PYTHONPREFIX_SITELIBDIR`, чтобы сделать его относительным к `PREFIX`.
+|`PY_IPADDRESS`
+|Условная зависимость от пакета package:net/py-ipaddress[] в зависимости от версии Python.
-Для этого требуется Python 2.7 или выше. Это не работает с Python 2.6.
-
-[[using-tcl]]
-== Использование Tcl/Tk
-
-В Коллекции Портов поддерживается одновременная установка множественных версий Tcl/Tk. Порты должны пытаться поддерживать по крайней мере версию Tcl/Tk, используемую по умолчанию, и выше с помощью переменных `USE_TCL` и `USE_TK`. Желаемую версию `tcl` можно указать в переменной `WITH_TCL_VER`.
-
-.Наиболее востребованные переменные для портов, которые используют Tcl/Tk
-[cols="1,1", frame="none"]
+|`PY_FUTURES`
+|Условная зависимость от пакета package:devel/py-futures[] в зависимости от версии Python.
|===
-|`USE_TCL`
-|Порт зависит от библиотеки Tcl (не оболочки). Минимальную требуемую версию можно указать с использованием таких значений, как 84+. Отдельные неподдерживаемые версии указываются в переменной `INVALID_TCL_VER`.
-|`USE_TCL_BUILD`
-|Tcl нужен для порта только на время сборки.
+Полный список доступных переменных можно найти в [.filename]#/usr/ports/Mk/Uses/python.mk#.
-|`USE_TCL_WRAPPER`
-|Эту новую переменную следует использовать для портов, для которых требуется оболочка Tcl и не требуется конкретная версия `tclsh`. Обертка `tclsh` устанавливается в систему. Пользователь может указать желаемую оболочку `tcl` для использования.
+[IMPORTANT]
+====
+Все зависимости для портов Python, использующих crossref:flavors[flavors-auto-python,флейворы Python] (с `USE_PYTHON=distutils` или `USE_PYTHON=flavors`), должны иметь флейвор Python, добавленную к их origin с помощью `@${PY_FLAVOR}`. См. crossref:special[python-Makefile,Makefile для простого модуля Python].
+====
-|`WITH_TCL_VER`
-|Определяемые пользователем переменные, которые устанавливают желаемую версию Tcl.
+[[python-Makefile]]
+.Makefile для Простого Модуля Python
+[example]
+====
+[.programlisting]
+....
+PORTNAME= sample
+DISTVERSION= 1.2.3
+CATEGORIES= devel
-|`UNIQUENAME_WITH_TCL_VER`
-|Подобно `WITH_TCL_VER`, но для каждого порта.
+MAINTAINER= fred.bloggs@example.com
+COMMENT= Python sample module
+WWW= https://example.com/project/sample/
-|`USE_TCL_THREADS`
-|Требует многопоточную сборку Tcl/Tk.
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}six>0:devel/py-six@${PY_FLAVOR}
-|`USE_TK`
-|Порт зависит от библиотеки Tk (не от предпочитаемой оболочки). Подразумевает `USE_TCL` с тем же значением. Для большей информации смотрите описание переменной `USE_TCL`.
+USES= python
+USE_PYTHON= autoplist distutils
-|`USE_TK_BUILD`
-|Аналогично `USE_TCL_BUILD`.
+.include <bsd.port.mk>
+....
-|`USE_TK_WRAPPER`
-|Аналогично `USE_TCL_WRAPPER`.
+====
-|`WITH_TK_VER`
-|Аналогично `WITH_TCL_VER`, подразумевает `WITH_TCL_VER` той же версии.
-|===
+Некоторые приложения на Python заявляют о поддержке `DESTDIR` (что необходимо для промежуточной сборки), но она не работает (например, Mailman до версии 2.1.16). Это можно обойти, перекомпилировав скрипты. Это можно сделать, например, в цели `post-build`. Предполагая, что Python-скрипты должны находиться в `PYTHONPREFIX_SITELIBDIR` после установки, можно применить следующее решение:
-Полный перечень доступных переменных находится в [.filename]#/usr/ports/Mk/bsd.tcl.mk#.
+[.programlisting]
+....
+(cd ${STAGEDIR}${PREFIX} \
+ && ${PYTHON_CMD} ${PYTHON_LIBDIR}/compileall.py \
+ -d ${PREFIX} -f ${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;})
+....
-[[using-emacs]]
-== Использование Emacs
+Это перекомпилирует исходники с путём, относительным к stage-директории, и добавляет значение `PREFIX` к имени файла, записанному в байт-компилированном выходном файле с помощью `-d`. `-f` требуется для принудительной перекомпиляции, а `:S;${PREFIX}/;;` удаляет префиксы из значения `PYTHONPREFIX_SITELIBDIR`, чтобы сделать его относительным к `PREFIX`.
-Этот раздел ещё предстоит написать.
+[[using-tcl]]
+== Использование Tcl/Tk
-[[using-ruby]]
-== Использование Ruby
+Коллекция Ports поддерживает параллельную установку нескольких версий Tcl/Tk. Порты должны стараться поддерживать как минимум версию Tcl/Tk по умолчанию и выше с помощью `USES=tcl`. Можно указать желаемую версию `tcl`, добавив `:_xx_`, например, `USES=tcl:85`.
-.Полезные переменные для портов, использующих Ruby
-[cols="1,1", frame="none", options="header"]
+[[using-tcl-variables]]
+.Самые полезные переменные только для чтения для портов, использующих Tcl/Tk
+[cols="1,1", frame="none"]
|===
-| Переменная
-| Описание
-
-|`USE_RUBY`
-|Порт требует Ruby.
+|`TCL_VER`
+| выбранная версия Tcl major.minor
-|`USE_RUBY_EXTCONF`
-|Порт использует для конфигурации [.filename]#extconf.rb#.
+|`TCLSH`
+| полный путь к интерпретатору Tcl
-|`USE_RUBY_SETUP`
-|Порт использует для конфигурации [.filename]#setup.rb#.
+|`TCL_LIBDIR`
+| путь к библиотекам Tcl
-|`RUBY_SETUP`
-|Устанавливает альтернативное имя для [.filename]#setup.rb#. Распространенным значением является [.filename]#install.rb#.
-|===
+|`TCL_INCLUDEDIR`
+| путь к заголовочным файлам Tcl C
-Следующая таблица отражает некоторые переменные, доступные авторам портов через инфраструктуру портов. Эти переменные должны использоваться для установки файлов в правильное месторасположение. Используйте их в [.filename]#pkg-plist# как можно больше. Эти переменные не должны переопределяться в самом порте.
+|`TCL_PKG_LIB_PREFIX`
+| Префикс библиотеки, согласно TIP595
-.Отобранные переменные только для чтения для портов, использующих Ruby
-[cols="1,1,1", frame="none", options="header"]
-|===
-| Переменная
-| Описание
-| Примерное значение
+|`TCL_PKG_STUB_POSTFIX`
+|Заглушка библиотеки postfix
-|`RUBY_PKGNAMEPREFIX`
-|Используется как `PKGNAMEPREFIX` для различия пакетов от разных версий Ruby.
-|`ruby18-`
+|`TK_VER`
+| выбранная версия Tk major.minor
-|`RUBY_VERSION`
-|Полная версия Ruby в форме `x.y.z`.
-|`1.8.2`
+|`WISH`
+| полный путь к интерпретатору Tk
-|`RUBY_SITELIBDIR`
-|Путь для установки архитектуронезависимых библиотек.
-|`/usr/local/lib/ruby/site_ruby/1.8`
+|`TK_LIBDIR`
+| путь к библиотекам Tk
-|`RUBY_SITEARCHLIBDIR`
-|Путь для установки архитектурозависимых библиотек.
-|`/usr/local/lib/ruby/site_ruby/1.8/amd64-freebsd6`
-
-|`RUBY_MODDOCDIR`
-|Путь для установки документации модуля.
-|`/usr/local/shared/doc/ruby18/patsy`
-
-|`RUBY_MODEXAMPLESDIR`
-|Путь для установки примеров модуля.
-|`/usr/local/shared/examples/ruby18/patsy`
+|`TK_INCLUDEDIR`
+| путь к заголовочным файлам Tk C
|===
-Полный перечень доступных переменных находится в [.filename]#/usr/ports/Mk/bsd.ruby.mk#.
+См. crossref:uses[uses-tcl,`USES=tcl`] и crossref:uses[uses-tk,`USES=tk`] в crossref:uses[uses,Использование макросов `USES`] для полного описания этих переменных. Полный список этих переменных доступен в [.filename]#/usr/ports/Mk/Uses/tcl.mk#.
[[using-sdl]]
== Использование SDL
-Переменная `USE_SDL` используется для автоматической настройки зависимостей для портов, использующих библиотеки на основе SDL, такие как package:devel/sdl12[] или package:graphics/sdl_image[].
+`USE_SDL` используется для автоматической настройки зависимостей для портов, которые используют библиотеку на основе SDL, такие как package:devel/sdl12[] и package:graphics/sdl_image[].
-Для версии 1.2 на данный момент распознаются следующие SDL-библиотеки:
+Эти библиотеки SDL для версии 1.2 распознаются:
* sdl: package:devel/sdl12[]
* console: package:devel/sdl_console[]
@@ -1482,7 +3471,7 @@ PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
* sound: package:audio/sdl_sound[]
* ttf: package:graphics/sdl_ttf[]
-Для версии 2.0 на данный момент распознаются следующие SDL-библиотеки:
+Эти библиотеки SDL для версии 2.0 распознаются:
* sdl: package:devel/sdl20[]
* gfx: package:graphics/sdl2_gfx[]
@@ -1491,61 +3480,47 @@ PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
* net: package:net/sdl2_net[]
* ttf: package:graphics/sdl2_ttf[]
-Таким образом, если порт имеет зависимость от package:net/sdl_net[] и package:audio/sdl_mixer[], то строка будет следующей:
+Следовательно, если порт зависит от package:net/sdl_net[] и package:audio/sdl_mixer[], синтаксис будет следующим:
[.programlisting]
....
USE_SDL= net mixer
....
-Зависимость от порта package:devel/sdl12[], который требуется для package:net/sdl_net[] и package:audio/sdl_mixer[], будет также автоматически добавлен.
-
-Если вы используете `USE_SDL` с элементами SDL 1.2, то он автоматически:
-
-* Добавляет зависимость от sdl12-config к `BUILD_DEPENDS`
-* Добавляет переменную `SDL_CONFIG` к `CONFIGURE_ENV`
-* Добавляет зависимости от указанных библиотек к `LIB_DEPENDS`
-
-Если вы используете `USE_SDL` с элементами SDL 2.0, то он автоматически:
+Пакет зависимости package:devel/sdl12[], который требуется для package:net/sdl_net[] и package:audio/sdl_mixer[], также автоматически добавляется.
-* Добавляет зависимость от sdl2-config к `BUILD_DEPENDS`
-* Добавляет переменную `SDL2_CONFIG` к `CONFIGURE_ENV`
-* Добавляет зависимости от указанных библиотек к `LIB_DEPENDS`
+Использование `USE_SDL` с указанием SDL 1.2 автоматически:
-Для проверки наличия библиотеки SDL вы можете делать это при помощи переменной `WANT_SDL`:
+* Добавить зависимость от sdl12-config в `BUILD_DEPENDS`
+* Добавьте переменную `SDL_CONFIG` в `CONFIGURE_ENV`
+* Добавьте зависимости выбранных библиотек в `LIB_DEPENDS`
-[.programlisting]
-....
-WANT_SDL= yes
-
-.include <bsd.port.pre.mk>
+Используя `USE_SDL` с записями для SDL 2.0, это автоматически:
-.if ${HAVE_SDL:Mmixer}!=""
-USE_SDL+= mixer
-.endif
+* Добавить зависимость от sdl2-config в `BUILD_DEPENDS`
+* Добавьте переменную `SDL2_CONFIG` в `CONFIGURE_ENV`
+* Добавьте зависимости выбранных библиотек в `LIB_DEPENDS`
-.include <bsd.port.post.mk>
-....
[[using-wx]]
== Использование wxWidgets
-Эта глава описывает статус библиотек wxWidgets в дереве портов и их интеграцию с системой портов.
+Этот раздел описывает состояние библиотек wxWidgets в дереве портов и их интеграцию с системой портов.
[[wx-introduction]]
=== Введение
-Существует множество версий библиотек wxWidgets, конфликтующих между собой (устанавливают файлы под тем же именем). В дереве портов эта проблема решена путем установки каждой версии под собственным названием с использованием номера версии в качестве суффикса.
+Существует множество версий библиотек wxWidgets, которые конфликтуют между собой (устанавливают файлы с одинаковыми именами). В дереве портов эта проблема решена путем установки каждой версии под разными именами с использованием суффиксов номеров версий.
-Очевидным недостатком этого является необходимость изменения каждого приложения для нахождения искомой версии. К счастью, большинство приложений для определения нужного компилятора и флагов компоновки вызывают сценарий `wx-config`. Для каждой доступной версии этот сценарий имеет своё имя. Большинство приложений учитывают переменную окружения или принимают аргумент configure для указания, какой сценарий `wx-config` следует вызывать. На все остальные приходится накладывать патч.
+Очевидный недостаток этого подхода заключается в том, что каждое приложение необходимо модифицировать для поиска нужной версии. К счастью, большинство приложений вызывают скрипт `wx-config` для определения необходимых флагов компилятора и компоновщика. Имя этого скрипта отличается для каждой доступной версии. Большинство приложений учитывают переменную окружения или принимают аргумент configure, чтобы указать, какой скрипт `wx-config` вызывать. В противном случае их необходимо патчить.
[[wx-version]]
=== Выбор версии
-Для того, чтобы заставить ваш порт использовать конкретную версию wxWidgets, существует две доступные для определения переменные (если определена только одна, то вторая примет значение по умолчанию):
+Чтобы порт использовал определённую версию wxWidgets, доступны две переменные для определения (если задана только одна, другая будет установлена в значение по умолчанию):
[[wx-ver-sel-table]]
-.Переменные для выбора версии wxWidgets
+.Переменные для выбора версий wxWidgets
[cols="1,1,1", frame="none", options="header"]
|===
| Переменная
@@ -1553,65 +3528,59 @@ USE_SDL+= mixer
| Значение по умолчанию
|`USE_WX`
-|Перечень версий, которые порт может использовать
+|Список версий, которые порт может использовать
|Все доступные версии
|`USE_WX_NOT`
-|Перечень версий, которые порт не может использовать
-|Нет
+|Список версий, которые порт не может использовать
+|Ничего
|===
-Перечень доступных версий wxWidgets и соответствующих им портов в дереве:
+Доступные версии wxWidgets и соответствующие порты в дереве:
+[[wx-widgets-versions-table]]
.Доступные версии wxWidgets
[cols="1,1", frame="none", options="header"]
|===
| Версия
| Порт
-|`2.4`
-|package:x11-toolkits/wxgtk24[]
-
-|`2.6`
-|package:x11-toolkits/wxgtk26[]
-
|`2.8`
|package:x11-toolkits/wxgtk28[]
-|===
-[NOTE]
-====
-Версии начиная с `2.5` также поставляются с Unicode и устанавливается подчиненным портом с названием как как у обычного, но с суффиксом `-unicode`, но этим можно управлять при помощи переменных (смотрите <<wx-unicode>>).
-====
+|`3.0`
+|package:x11-toolkits/wxgtk30[]
+|===
-Переменные в <<wx-ver-sel-table>> можно установить в одну или более следующих комбинаций, разделенных пробелами:
+Переменные в crossref:special[wx-ver-sel-table,Переменные для выбора версий wxWidgets] могут быть установлены в одну или несколько комбинаций, разделенных пробелами:
-.Определение версии для wxWidgets
+[[wx-widgets-versions-specification]]
+.Спецификации версий wxWidgets
[cols="1,1", frame="none", options="header"]
|===
| Описание
| Пример
-|Единичная версия
-|`2.4`
+|Единственная версия
+|`2.8`
-|Восходящий диапазон
-|`2.4+`
+|Возрастающий диапазон
+|`2.8+`
|Нисходящий диапазон
-|`2.6-`
+|`3.0-`
-|Полный диапазон (обязан быть восходящим)
-|`2.4-2.6`
+|Полный диапазон (должен быть возрастающим)
+|`2.8-3.0`
|===
-Кроме того, существует несколько переменных для выбора предпочитаемых версий из перечня доступных. Они могут быть установлены в несколько версий, первая из которых будет иметь наибольший приоритет.
-
-.Переменные для выбора предпочитаемых версий wxWidgets
+Существуют также переменные для выбора предпочтительных версий из доступных. Их можно установить в виде списка версий, где первые будут иметь более высокий приоритет.
+[[wx-widgets-preferred-version]]
+.Переменные для выбора предпочтительных версий wxWidgets
[cols="1,1", frame="none", options="header"]
|===
-| Название
-| Предназначение
+| Имя
+| Предназначен для
|`WANT_WX_VER`
|порт
@@ -1623,58 +3592,52 @@ USE_SDL+= mixer
[[wx-components]]
=== Выбор компонентов
-Существуют другие приложения, которые, хотя и не являются библиотеками wxWidgets, но в тоже время относятся к ним. Эти приложения можно указать в переменной `WX_COMPS`. Доступны следующие компоненты:
+Существуют другие приложения, которые, не являясь библиотеками wxWidgets, связаны с ними. Эти приложения можно указать в `WX_COMPS`. Доступны следующие компоненты:
+[[wx-widgets-components-table]]
.Доступные компоненты wxWidgets
[cols="1,1,1", frame="none", options="header"]
|===
-| Название
+| Имя
| Описание
| Ограничение версии
|`wx`
|основная библиотека
-|нет
+|none
|`contrib`
|сторонние библиотеки
-|`нет`
+|`none`
|`python`
-|wxPython (привязки к Python)
-|`2.4-2.6`
-
-|`mozilla`
-|wxMozilla
-|`2.4`
-
-|`svg`
-|wxSVG
-|`2.6`
+|wxPython (интерфейс Python)
+|`2.8-3.0`
|===
-Тип добавляемой зависимости при выборе каждого компонента может быть указан вручную путем добавления суффикса, отделенного точкой с запятой. Если таковой отсутствует, но будет использовано значение по умолчанию (смотрите <<wx-def-dep-types>>). Доступные типы зависимости:
+Тип зависимости может быть выбран для каждого компонента путем добавления суффикса, разделенного точкой с запятой. Если он отсутствует, будет использоваться тип по умолчанию (см. crossref:special[wx-def-dep-types,Типы зависимостей wxWidgets по умолчанию]). Доступны следующие типы:
-.Доступные типы зависимости wxWidgets
+[[wx-widgets-dependency-table]]
+.Доступные типы зависимостей wxWidgets
[cols="1,1", frame="none", options="header"]
|===
-| Название
+| Имя
| Описание
|`build`
-|Компонент требуется для построения, эквивалентен `BUILD_DEPENDS`
+|Компонент необходим для сборки, эквивалентен `BUILD_DEPENDS`
|`run`
-|Компонент требуется для запуска, эквивалентен `RUN_DEPENDS`
+|Компонент необходим для запуска, эквивалентно `RUN_DEPENDS`
|`lib`
-|Компонент требуется для построения и запуска, эквивалентен `LIB_DEPENDS`
+|Компонент необходим для сборки и запуска, эквивалентен `LIB_DEPENDS`
|===
-Значения по умолчанию для компонентов подробно рассматриваются в следующей таблице:
+Значения по умолчанию для компонентов подробно описаны в этой таблице:
[[wx-def-dep-types]]
-.Типы зависимости wxWidgets, используемые по умолчанию
+.Типы зависимостей wxWidgets по умолчанию
[cols="1,1", frame="none", options="header"]
|===
| Компонент
@@ -1700,61 +3663,26 @@ USE_SDL+= mixer
.Выбор компонентов wxWidgets
[example]
====
-Следующий фрагмент относится к порту, в котором используется wxWidgets версии `2.4` с его сторонними библиотеками.
+Этот фрагмент соответствует порту, который использует wxWidgets версии `2.4` и дополнительные библиотеки.
[.programlisting]
....
-USE_WX= 2.4
+USE_WX= 2.8
WX_COMPS= wx contrib
....
====
-[[wx-unicode]]
-=== Unicode
-
-Библиотека wxWidgets поддерживает Unicode начиная с версии `2.5`. В дереве портов доступны обе версии и могут быть выбраны с использованием следующих переменных:
-[[wx-unicode-var-table]]
-.Переменные для выбора версии wxWidgets с Unicode
-[cols="1,1,1", frame="none", options="header"]
-|===
-| Переменная
-| Описание
-| Предназначение
-
-|`WX_UNICODE`
-|Порт работает _только_ с версией Unicode
-|порт
-
-|`WANT_UNICODE`
-|Порт работает с обеими версиями, но предпочитает версию с Unicode
-|порт
-
-|`WITH_UNICODE`
-|Порт будет использовать версию Unicode
-|пользователь
-
-|`WITHOUT_UNICODE`
-|Порт будет использовать обычную версию, если это поддерживается (когда `WX_UNICODE` не определена)
-|пользователь
-|===
-
-[WARNING]
-====
-
-Не используйте `WX_UNICODE` для портов, которые могут использовать обе версии. Если вы хотите, чтобы порт по умолчанию использовал Unicode, определите вместо этого `WANT_UNICODE`.
-====
-
[[wx-version-detection]]
=== Обнаружение установленных версий
-Для обнаружения установленной версии вам необходимо задать переменную `WANT_WX`. Если вы не присвоите ей определенную версию, то компоненты получат суффикс версии. Переменная `HAVE_WX` будет заполнена после обнаружения.
+Для определения установленной версии определите `WANT_WX`. Если значение не задано для конкретной версии, компоненты будут иметь суффикс версии. `HAVE_WX` будет заполнен после обнаружения.
[[wx-ver-det-example]]
.Обнаружение установленных версий и компонентов wxWidgets
[example]
====
-Следующий фрагмент может быть использован в порту, который использует wxWidgets, в случае если он установлен или выбран соответствующий параметр.
+Этот фрагмент может использоваться в порте, который использует wxWidgets, если они установлены или выбран соответствующий параметр.
[.programlisting]
....
@@ -1762,19 +3690,19 @@ WANT_WX= yes
.include <bsd.port.pre.mk>
-.if defined(WITH_WX) || !empty(PORT_OPTIONS:MWX) || !empty(HAVE_WX:Mwx-2.4)
-USE_WX= 2.4
+.if defined(WITH_WX) || !empty(PORT_OPTIONS:MWX) || !empty(HAVE_WX:Mwx-2.8)
+USE_WX= 2.8
CONFIGURE_ARGS+= --enable-wx
.endif
....
-Следующий фрагмент может быть использован в порту, который задействует поддержку wxPython, в случае если он установлен или выбран соответствующий параметр, в дополнение к wxWidgets, обе версии `2.6`.
+Этот фрагмент может использоваться в порте, который включает поддержку wxPython, если она установлена или выбрана соответствующая опция, в дополнение к wxWidgets, обе версии `2.8`.
[.programlisting]
....
-USE_WX= 2.6
+USE_WX= 2.8
WX_COMPS= wx
-WANT_WX= 2.6
+WANT_WX= 2.8
.include <bsd.port.pre.mk>
@@ -1787,48 +3715,46 @@ CONFIGURE_ARGS+= --enable-wxpython
====
[[wx-defined-variables]]
-=== Переменные для определения
+=== Переменные, определенные в фреймворке
-Следующие переменные доступны в порту (после определения одной из переменных из <<wx-ver-sel-table>>).
+Эти переменные доступны в порте (после определения одной из crossref:special[wx-ver-sel-table,переменных для выбора версий wxWidgets]).
+[[wx-widgets-variables]]
.Переменные, определенные для портов, использующих wxWidgets
[cols="1,1", frame="none", options="header"]
|===
-| Название
+| Имя
| Описание
|`WX_CONFIG`
-|Путь к сценарию wxWidgets `wx-config` (с другим именем)
+|Путь к скрипту `wx-config` wxWidgets (с другим именем)
|`WXRC_CMD`
-|Путь к программе wxWidgets `wxrc` (с другим именем)
+|Путь к программе `wxrc` wxWidgets (с другим именем)
|`WX_VERSION`
|Версия wxWidgets, которая будет использоваться (например, `2.6`)
-
-|`WX_UNICODE`
-|Если не определена, но Unicode будет использоваться, то она будет определена
|===
[[wx-premk]]
=== Обработка в [.filename]#bsd.port.pre.mk#
-Если вам нужно использовать переменные для запуска команд сразу после подключения [.filename]#bsd.port.pre.mk#, то вам нужно определить `WX_PREMK`.
+Определите `WX_PREMK`, чтобы иметь возможность использовать переменные сразу после включения [.filename]#bsd.port.pre.mk#.
[IMPORTANT]
====
-Если вы определите `WX_PREMK`, то версия, зависимости, компоненты и заданные переменные не изменяться, в случае вы изменили переменные порта wxWidgets после подключения [.filename]#bsd.port.pre.mk#.
+При определении `WX_PREMK` версия, зависимости, компоненты и определенные переменные не изменятся при модификации переменных порта wxWidgets _после_ включения [.filename]#bsd.port.pre.mk#.
====
[[wx-premk-example]]
.Использование переменных wxWidgets в командах
[example]
====
-Следующий фрагмент иллюстрирует использование переменной `WX_PREMK` посредством запуска сценария `wx-config` для получения строки с полной версией с присвоением ее переменной и передачей в программу.
+Этот фрагмент иллюстрирует использование `WX_PREMK` путем запуска скрипта `wx-config` для получения полной строки версии, присвоения её переменной и передачи в программу.
[.programlisting]
....
-USE_WX= 2.4
+USE_WX= 2.8
WX_PREMK= yes
.include <bsd.port.pre.mk>
@@ -1844,15 +3770,16 @@ PLIST_SUB+= VERSION="${VER_STR}"
[NOTE]
====
-Переменные wxWidgets можно безопасно использовать в командах внутри целей без необходимости в использовании `WX_PREMK`.
+Переменные wxWidgets можно безопасно использовать в командах внутри целей без необходимости в `WX_PREMK`.
====
[[wx-additional-config-args]]
=== Дополнительные параметры `configure`
-Некоторые сценарии GNU `configure` не могут найти wxWidgets только с установленной переменной окружения `WX_CONFIG`, требуя дополнительные параметры. Для их передачи можно использовать переменную `WX_CONF_ARGS`.
+Некоторые скрипты GNU `configure` не могут найти wxWidgets, если задана только переменная окружения `WX_CONFIG`, и требуют дополнительные параметры. `WX_CONF_ARGS` можно использовать для их указания.
-.Допустимые значения `WX_CONF_ARGS`
+[[wx-conf-args-values]]
+.Допустимые значения для `WX_CONF_ARGS`
[cols="1,1", frame="none", options="header"]
|===
| Возможное значение
@@ -1868,374 +3795,465 @@ PLIST_SUB+= VERSION="${VER_STR}"
[[using-lua]]
== Использование Lua
-Эта глава описывает статус библиотек Lua в дереве портов и их интеграцию в систему портов.
+Этот раздел описывает состояние библиотек Lua в дереве портов и их интеграцию с системой портов.
[[lua-introduction]]
=== Введение
-Существует множество версий библиотек Lua и соответствующих интерпретаторов, конфликтующих между собой (устанавливают файлы под тем же именем). В дереве портов эта проблема решена путем установки каждой версии в собственное место с использованием номера версии в качестве суффикса.
+Существует множество версий библиотек Lua и соответствующих интерпретаторов, которые конфликтуют между собой (устанавливают файлы с одинаковыми именами). В дереве портов эта проблема решена установкой каждой версии под разными именами с использованием суффиксов номеров версий.
+
+Очевидный недостаток этого заключается в том, что каждое приложение необходимо модифицировать для поиска ожидаемой версии. Однако это можно решить, добавив дополнительные флаги компилятору и компоновщику.
-Очевидным недостатком этого является необходимость изменения каждого приложения для нахождения искомой версии. Но это решается добавлением некоторых дополнительных флагов для компилятора и компоновщика.
+Приложения, использующие Lua, обычно должны собираться только для одной версии. Однако загружаемые модули для Lua собираются в отдельных флейворах для каждой поддерживаемой версии Lua, и зависимости от таких модулей должны указывать флейвор с использованием суффикса `@${LUA_FLAVOR}` в расположении (origin) порта.
[[lua-version]]
=== Выбор версии
-Для того, чтобы заставить ваш порт использовать конкретную версию Lua, существует две доступные для определения переменные (если определена только одна, то вторая примет значение по умолчанию):
+Порт, использующий Lua, должен содержать строку следующего вида:
-[[lua-ver-sel-table]]
-.Переменные для выбора версии Lua
-[cols="1,1,1", frame="none", options="header"]
-|===
-| Переменная
-| Описание
-| Значение по умолчанию
+[.programlisting]
+....
+USES= lua
+....
-|`USE_LUA`
-|Перечень версий, которые порт может использовать
-|Все доступные версии
+Если требуется определённая версия Lua или диапазон версий, его можно указать в виде параметра `XY` (который можно использовать несколько раз), `XY+`, `-XY` или `XY-ZA`. Версия Lua, установленная через `DEFAULT_VERSIONS`, будет использована, если она попадает в запрошенный диапазон, в противном случае будет использована ближайшая к умолчанию запрошенная версия. Например:
-|`USE_LUA_NOT`
-|Перечень версий, которые порт не может использовать
-|Пусто
-|===
+[.programlisting]
+....
+USES= lua:52-53
+....
-Перечень доступных версий Lua и соответствующих портов в дереве:
+Обратите внимание, что не предпринимается попытка изменить выбор версии на основе наличия любой уже установленной версии Lua.
-.Доступные версии Lua
-[cols="1,1", frame="none", options="header"]
-|===
-| Версия
-| Порт
+[NOTE]
+====
+Форма указания версии `XY+` не должна использоваться без тщательного обдумывания; Lua API в некоторой степени меняется с каждой версией, и инструменты конфигурации, такие как CMake или Autoconf, скорее всего не будут работать с будущими версиями Lua, пока не будут обновлены для этого.
+====
-|`4.0`
-|package:lang/lua4[]
+[[lua-version-config]]
+=== Конфигурация и флаги компилятора
-|`5.0`
-|package:lang/lua50[]
+Программное обеспечение, использующее Lua, может быть написано с автоматическим определением версии Lua в использовании. В общем случае порты должны переопределять это предположение и принудительно использовать конкретную выбранную версию Lua, как описано выше. В зависимости от портируемого программного обеспечения, это может потребовать любого или всех из следующих действий:
-|`5.1`
-|package:lang/lua[]
-|===
+* Использование `LUA_VER` в качестве части параметра для скрипта конфигурации программного обеспечения через `CONFIGURE_ARGS` или `CONFIGURE_ENV` (или эквивалентные для других систем сборки);
+* Добавление `-I${LUA_INCDIR}`, `-L${LUA_LIBDIR}` и `-llua-${LUA_VER}` в `CFLAGS`, `LDFLAGS` и `LIBS` соответственно, где это необходимо;
+* Исправьте конфигурационные или файлы сборки программного обеспечения, чтобы выбрать правильную версию.
+
+
+[[lua-version-flavors]]
+=== Флейворы версии
+
+Порт, который устанавливает модуль Lua (а не приложение, просто использующее Lua), должен собирать отдельный флейвор для каждой поддерживаемой версии Lua. Это делается путем добавления параметра `module`:
+
+[.programlisting]
+....
+USES= lua:module
+....
+
+Так же может быть указае номер версии или диапазон версий. Используйте запятую для разделения параметров.
+
+Поскольку каждый флейвор должен иметь уникальное имя пакета, предоставляется переменная `LUA_PKGNAMEPREFIX`, которая будет установлена в соответствующее значение; предполагаемое использование:
+
+[.programlisting]
+....
+PKGNAMEPREFIX= ${LUA_PKGNAMEPREFIX}
+....
+
+Модульные порты обычно должны устанавливать файлы только в `LUA_MODLIBDIR`, `LUA_MODSHAREDIR`, `LUA_DOCSDIR` и `LUA_EXAMPLESDIR`, все из которых настроены на ссылки в версионно-зависимые подкаталоги. Установка любых других файлов должна выполняться с осторожностью, чтобы избежать конфликтов между версиями.
+
+Порт (кроме модуля Lua), который хочет собрать отдельный пакет для каждой версии Lua, должен использовать параметр `flavors`:
+
+[.programlisting]
+....
+USES= lua:flavors
+....
+
+Это работает так же, как параметр `module`, описанный выше, но без предположения, что пакет должен быть задокументирован как модуль Lua (поэтому `LUA_DOCSDIR` и `LUA_EXAMPLESDIR` по умолчанию не определены). Однако порт может определить `LUA_DOCSUBDIR` как подходящее имя подкаталога (обычно `PORTNAME` порта, если это не конфликтует с `PORTNAME` любого модуля), и в этом случае фреймворк определит как `LUA_DOCSDIR`, так и `LUA_EXAMPLESDIR`.
-Переменные из <<lua-ver-sel-table>> могут иметь комбинации из одного или нескольких значений, разделенных пробелом:
+Как и в случае с модульными портами, порт с флейворами должен избегать установки файлов, которые могут конфликтовать между версиями. Обычно это достигается добавлением `LUA_VER_STR` в качестве суффикса к именам программ (например, с использованием crossref:uses[uses-uniquefiles,`uniquefiles`]), а также использованием `LUA_VER` или `LUA_VER_STR` в составе других файлов или поддиректорий, используемых вне `LUA_MODLIBDIR` и `LUA_MODSHAREDIR`.
-.Определение версии Lua
+[[lua-defined-variables]]
+=== Переменные, определенные в фреймворке
+
+В порте доступны эти переменные.
+
+[[using-lua-variables-ports]]
+.Переменные, определенные для портов, использующих Lua
[cols="1,1", frame="none", options="header"]
|===
+| Имя
| Описание
-| Пример
-|Единичная версия
-|`4.0`
+|`LUA_VER`
+|Версия Lua, которая будет использоваться (например, `5.4`)
-|Восходящий диапазон
-|`5.0+`
+|`LUA_VER_STR`
+|Версия Lua без точек (например, `54`)
-|Нисходящий диапазон
-|`5.0-`
+|`LUA_FLAVOR`
+|Имя флейвора, соответствующее выбранной версии Lua, используемое для указания зависимостей
+
+|`LUA_BASE`
+|Префикс, который должен использоваться для поиска Lua (и компонентов), уже установленных
+
+|`LUA_PREFIX`
+|Префикс, куда этим портом будут установлены Lua (и компоненты)
+
+|`LUA_INCDIR`
+|Каталог, в котором установлены заголовочные файлы Lua
+
+|`LUA_LIBDIR`
+|Каталог, в котором установлены библиотеки Lua
-|Полный диапазон (обязан быть восходящим)
-|`5.0-5.1`
+|`LUA_REFMODLIBDIR`
+|Каталог, в котором находятся уже установленные библиотеки модулей Lua ([.filename]#.so#)
+
+|`LUA_REFMODSHAREDIR`
+|Каталог, в котором находятся установленные модули Lua ([.filename]#.lua#)
+
+|`LUA_MODLIBDIR`
+|Каталог, в котором библиотеки модулей Lua ([.filename]#.so#) должны быть установлены данным портом
+
+|`LUA_MODSHAREDIR`
+|Каталог, в котором должны быть установлены модули Lua ([.filename]#.lua#) данным портом
+
+|`LUA_PKGNAMEPREFIX`
+|Префикс имени пакета, используемый модулями Lua
+
+|`LUA_CMD`
+|Название интерпретатора Lua (например, `lua54`)
+
+|`LUAC_CMD`
+|Название компилятора Lua (например, `luac54`)
|===
-Кроме того, существует несколько переменных для выбора предпочитаемых версий из перечня доступных. Они могут быть установлены в несколько версий, первая из которых будет иметь наибольший приоритет.
+Эти дополнительные переменные доступны для портов, которые указали параметр `module`:
-.Переменные для выбора предпочитаемых версий Lua
+[[using-lua-variables-modules]]
+.Переменные, определенные для модулей Lua в портах
[cols="1,1", frame="none", options="header"]
|===
-| Название
-| Предназначение
+| Имя
+| Описание
-|`WANT_LUA_VER`
-|порт
+|`LUA_DOCSDIR`
+|каталог, в который должна быть установлена документация модуля.
-|`WITH_LUA_VER`
-|пользователь
+|`LUA_EXAMPLESDIR`
+|каталог, в который должны быть установлены примеры файлов модуля.
|===
-[[lua-version-example]]
-.Выбор версии Lua
+[[lua-examples]]
+=== Примеры
+
+[[lua-app-Makefile]]
+.`Makefile` для приложения, использующего Lua
[example]
====
-Следующий фрагмент взят из порта, который использует Lua версий `5.0` или `5.1`, по умолчанию `5.0`. Значение может быть переопределено пользователем с использованием переменной `WITH_LUA_VER`.
+Этот пример показывает, как сослаться на модуль Lua, требуемый во время выполнения. Обратите внимание, что ссылка должна указывать флейвор.
[.programlisting]
....
-USE_LUA= 5.0-5.1
-WANT_LUA_VER= 5.0
+PORTNAME= sample
+DISTVERSION= 1.2.3
+CATEGORIES= whatever
+
+MAINTAINER= fred.bloggs@example.com
+COMMENT= Sample
+WWW= https://example.com/lua_sample/sample/
+
+RUN_DEPENDS= ${LUA_REFMODLIBDIR}/lpeg.so:devel/lua-lpeg@${LUA_FLAVOR}
+
+USES= lua
+
+.include <bsd.port.mk>
....
====
-[[lua-components]]
-=== Выбор компонентов
-
-Существуют другие приложения, которые хотя и не являются библиотеками Lua, но относятся к ним. Эти приложения можно указать в переменной `LUA_COMPS`. Доступны следующие компоненты:
+[[lua-mod-Makefile]]
+.`Makefile` для простого модуля Lua
+[example]
+====
+[.programlisting]
+....
+PORTNAME= sample
+DISTVERSION= 1.2.3
+CATEGORIES= whatever
+PKGNAMEPREFIX= ${LUA_PKGNAMEPREFIX}
-.Доступные компоненты Lua
-[cols="1,1,1", frame="none", options="header"]
-|===
-| Название
-| Описание
-| Ограничение версии
+MAINTAINER= fred.bloggs@example.com
+COMMENT= Sample
+WWW= https://example.com/lua_sample/sample/
-|`lua`
-|Основная библиотека
-|нет
+USES= lua:module
-|`tolua`
-|Библиотека доступа к коду C/C++
-|4.0-5.0
+DOCSDIR= ${LUA_DOCSDIR}
-|`ruby`
-|Привязка к Ruby
-|4.0-5.0
-|===
+.include <bsd.port.mk>
+....
-[NOTE]
-====
-Есть и другие компоненты, но они относятся к модулям для интерпретатора и не используются приложениями (только другими модулями).
====
-Тип зависимости можно выбрать для каждого компонента через добавление суффикса, отделенного точкой с запятой. В случае отсутствия будет использован тип по умолчанию (смотрите <<lua-def-dep-types>>). Доступные следующие типы:
+[[using-guile]]
+== Использование Guile
-.Доступные типы зависимости Lua
-[cols="1,1", frame="none", options="header"]
-|===
-| Название
-| Описание
+Этот раздел описывает состояние Guile в дереве портов и его интеграцию с системой портов.
-|`build`
-|Компонент требуется для построения, эквивалентен `BUILD_DEPENDS`
+[[guile-introduction]]
+=== Введение
-|`run`
-|Компонент требуется для запуска, эквивалентен `RUN_DEPENDS`
+Существует несколько версий библиотек Guile и соответствующих интерпретаторов, которые конфликтуют между собой (устанавливают файлы с одинаковыми именами). В дереве портов эта проблема решена путем установки каждой версии под разными именами с использованием суффиксов номеров версий. В большинстве случаев приложения должны определять правильную версию из предоставленных конфигурационных переменных и использовать `pkg-config` для определения имени и связанных путей. Однако некоторые приложения (особенно те, которые используют собственные правила конфигурации для `cmake` или `meson`) всегда будут пытаться использовать последнюю доступную версию. В этом случае либо исправьте порт, либо объявите конфликт сборки (см. опцию `conflicts` ниже), чтобы гарантировать создание правильной зависимости при сборке вне poudriere.
-|`lib`
-|Компонент требуется для построения и запуска, эквивалентен `LIB_DEPENDS`
-|===
+Приложения, использующие Guile, обычно должны собираться только для одной версии, предпочтительно указанной в `DEFAULT_VERSIONS`, или, если это невозможно, для последней поддерживаемой версии. Однако библиотеки Guile или Scheme, а также модули расширения для Guile собираются в отдельных флейворах для каждой поддерживаемой версии Guile. Зависимости от таких портов должны указывать флейвор с использованием суффикса `@${GUILE_FLAVOR}` в расположении (origin) порта.
-Значения по умолчанию для компонентов подробно рассматриваются в следующей таблице:
+[[guile-version]]
+=== Выбор версии
-[[lua-def-dep-types]]
-.Типы зависимости Lua, используемые по умолчанию
-[cols="1,1", frame="none", options="header"]
+Порт, использующий Guile, должен определять `USES=guile:__arg,arg...__` с соответствующими параметрами следующим образом:
+
+[[guile-defined-uses-args]]
+.Параметры, определенные для портов, использующих Guile
+[cols="1m,4", frame="none", options="header"]
|===
-| Компонент
-| Тип зависимости
+| Имя
+| Описание
+
+|_X.Y_
+|Объявить совместимость с версией Guile `X.Y`.
+Доступные версии: `1.8` (устарела), `2.2` и `3.0`.
+Можно указать несколько версий.
+
+|flavors
+|Создать флейвор для каждой указанной версии Guile.
+Версия, указанная в `DEFAULT_VERSIONS`, станет флейвором по умолчанию.
+Названия флейворов имеют вид `guileXY`.
-|`lua`
-|`lib` для `4.0-5.0` (динамическая) и `build` для `5.1` (статическая)
+|build
+|Добавить интерпретатор Guile только как зависимость для сборки, а не как зависимость библиотеки.
+`build` и `run` могут быть указаны оба.
-|`tolua`
-|`build` (статическая)
+|run
+|Добавить интерпретатор Guile только как зависимость во время выполнения, а не как зависимость от библиотеки.
+`build` и `run` могут быть указаны оба.
-|`ruby`
-|`lib` (динамическая)
+|alias
+|Добавить значения `BINARY_ALIAS` для интерпретатора и инструментов.
+
+|conflicts
+|Объявить `CONFLICTS_BUILD` для версий Guile новее выбранной.
+Используйте это, когда порт нельзя настроить на использование определённой версии Guile.
|===
-[[lua-components-example]]
-.Выбор компонентов Lua
-[example]
-====
-Следующий фрагмент соответствует порту, использующему Lua версии `4.0` и привязку к Ruby.
+Некоторые дополнительные аргументы доступны для обработки нестандартных случаев; подробности см. в `Mk/Uses/guile.mk`.
-[.programlisting]
-....
-USE_LUA= 4.0
-LUA_COMPS= lua ruby
-....
+Если не указано `build` или `run`, то `LIB_DEPENDS` получает зависимость от библиотеки `libguile`, а также любые дополнительные зависимости, требуемые версией guile, например, `libgc`. Обычно порту не требуются дополнительные зависимости, связанные с использованием Guile.
-====
+[[guile-version-config]]
+=== Флаги конфигурации
-[[lua-version-detection]]
-=== Обнаружение установленных версий
+Программное обеспечение, использующее Guile, должно использовать механизм `pkg-config` для получения флагов компилятора и компоновщика. Некоторые старые или экзотические порты могут использовать `guile-config` или получать значения напрямую из `guile`, что также должно работать (в некоторых из этих случаев может быть полезен аргумент `alias`).
-Для обнаружения установленной версии вам необходимо задать переменную `WANT_LUA`. Если вы не присвоите ей определенную версию, то компоненты получат суффикс версии. Переменная `HAVE_LUA` будет заполнена после обнаружения.
+Фреймворк пытается сообщить порту желаемую версию Guile, используя следующие методы:
-[[lua-ver-det-example]]
-.Обнаружение установленных версий и компонентов Lua
-[example]
-====
-Следующий фрагмент можно использовать для порта, использующего Lua, если она установлена, или был выбран соответствующий параметр.
+* `GUILE_EFFECTIVE_VERSION` добавлен в `CONFIGURE_ENV`;
+* Полный путь к исполняемому файлу Guile указан в переменной `GUILE` в `CONFIGURE_ENV` и `MAKE_ENV`;
+* Если используется опция `alias`, то желаемые версии бинарных файлов Guile являются теми, которые имеют алиасы;
+* Если параметр `alias` не используется, пути к инструментам нужной версии Guile (`guild`, `guile-config` и т.д.) добавляются в `CONFIGURE_ENV` и `MAKE_ENV` в виде переменных `GUILD`, `GUILE_CONFIG` и т.д.
-[.programlisting]
-....
-WANT_LUA= yes
+Для некоторых портов может потребоваться указать версию дополнительными способами, например, через `CONFIGURE_ARGS` или `MESON_ARGS`, в зависимости от порта.
-.include <bsd.port.pre.mk>
+Если ни один из этих методов не приводит к тому, что порт выбирает указанную версию Guile при наличии других версий, то предпочтительно исправить его, чтобы это происходило. Если это невозможно, укажите опцию `conflicts`, чтобы предотвратить сборку порта в условиях, когда он обнаруживает неправильную версию.
-.if defined(WITH_LUA5) || !empty(PORT_OPTIONS:MLUA5) || !empty(HAVE_LUA:Mlua-5.[01])
-USE_LUA= 5.0-5.1
-CONFIGURE_ARGS+= --enable-lua5
-.endif
-....
+[[guile-version-flavors]]
+=== Флейворы версии
+
+Порт, который устанавливает расширение или библиотеку Guile, или библиотеку Scheme, которая предварительно компилируется для Guile, должен собирать отдельный флейвор для каждой поддерживаемой версии Guile. Это делается путем добавления опции `flavors`.
-Следующий фрагмент можно использовать для порта, который включает поддержку tolua, если такой компонент установлен, или был выбран соответствующий параметр в дополнение к Lua, оба имеют версию `4.0`.
+Поскольку каждый флейвор должен иметь уникальное имя пакета, такие порты обычно устанавливают `PKGNAMESUFFIX`, например:
[.programlisting]
....
-USE_LUA= 4.0
-LUA_COMPS= lua
-WANT_LUA= 4.0
+PKGNAMESUFFIX= -${FLAVOR}
+....
-.include <bsd.port.pre.mk>
+Такие порты должны устанавливать файлы Scheme в `GUILE_SITE_DIR`, а не в `GUILE_GLOBAL_SITE_DIR`, даже если файлы не зависят от версии. Это часто требует исправления порта.
-.if defined(WITH_TOLUA) || !empty(PORT_OPTIONS:MTOLUA) || !empty(HAVE_LUA:Mtolua)
-LUA_COMPS+= tolua
-CONFIGURE_ARGS+= --enable-tolua
-.endif
-....
+Кроме того, если такой порт устанавливает файл `.pc`, он должен быть размещён в `GUILE_PKGCONFIG_PATH`, а не в глобальной директории `pkgconfig`. Это позволяет зависимым портам находить правильную конфигурацию для используемой версии Guile.
-====
+Если порт расширения Guile устанавливает файл `.so`, то обычно он должен быть размещён в специфичной для версии Guile директории `extensions`. Обычно не следует использовать `USE_LDCONFIG`.
-[[lua-defined-variables]]
-=== Переменные для определения
+Любые другие файлы, устанавливаемые портом с флейвором, также должны находиться в версионных каталогах или использовать версионные имена файлов. Для документации и примеров переменные `GUILE_DOCS_DIR` и `GUILE_EXAMPLES_DIR` указывают подходящие расположения, в которых порт должен создать подкаталог (см. ниже).
-Следующие переменные доступны в порту (после определения одной из переменных из <<lua-ver-sel-table>>).
+[[guile-defined-variables]]
+=== Переменные, определенные в фреймворке
-.Переменные, определенные для портов, использующих Lua
-[cols="1,1", frame="none", options="header"]
+В порте доступны эти переменные.
+
+[[using-guile-variables-ports]]
+.Переменные, определенные для портов, использующих Guile
+[cols="1,3m,6", frame="none", options="header"]
|===
-| Название
+| Имя
+| Пример значения
| Описание
-|`LUA_VER`
-|Версия Lua, которая будет использоваться (например, `5.1`)
+|`GUILE_VER`
+|3.0
+|Используемая версия Guile.
-|`LUA_VER_SH`
-|Старший номер версии динамической библиотеки Lua (например, `1`)
+|`GUILE_SFX`
+|3
+|Короткий суффикс, используемый в некоторых именах.
+Используйте с осторожностью; может быть неуникальным или измениться в будущем.
-|`LUA_VER_STR`
-|Версия Lua без точки (например, `51`)
+|`GUILE_FLAVOR`
+|guile30
+|Название флейвора, соответствующее выбранной версии.
-|`LUA_PREFIX`
-|Префикс, в который установлена Lua (и компоненты)
+|`GUILE_PORT`
+|lang/guile3
+|Расположение порта (origin) для указанной версии Guile.
-|`LUA_SUBDIR`
-|Каталог под [.filename]#${PREFIX}/bin#, [.filename]#${PREFIX}/share# и [.filename]#${PREFIX}/lib#, в который установлена Lua
+|`GUILE_PREFIX`
+|${PREFIX}
+|Префикс каталога для использования при установке.
-|`LUA_INCDIR`
-|Каталог, в который установлены заголовочные файлы Lua и tolua
+|`GUILE_CMD`
+|guile-3.0
+|Имя интерпретатора Guile с суффиксом версии.
-|`LUA_LIBDIR`
-|Каталог, в который установлены библиотеки Lua и tolua
+|`GUILE_CMDPATH`
+|${LOCALBASE}/bin/guile-3.0
+|Полный путь к интерпретатору Guile.
-|`LUA_MODLIBDIR`
-|Каталог, в который установлены модули библиотеки Lua ([.filename]#.so#)
+|`GUILD_CMD`
+|guild-3.0
+|Название инструмента Guild, с суффиксом версии.
-|`LUA_MODSHAREDIR`
-|Каталог, в который установлены модули Lua ([.filename]#.lua#)
+|`GUILD_CMDPATH`
+|`${LOCALBASE}/bin/guild-3.0`
+|Полный путь к инструменту Guild.
-|`LUA_PKGNAMEPREFIX`
-|Префикс с именем пакета, используемый модулями Lua
+|`++GUILE_*_CMD++` +
+`++GUILE_*_CMDPATH++`
+|
+|Как `GUILE_CMD` и `GUILE_CMDPATH`, но для других исполняемых файлов утилит.
-|`LUA_CMD`
-|Путь к интерпретатору Lua
+|`GUILE_PKGCONFIG_PATH`
+|${LOCALBASE}/libdata/pkgconfig/guile/3.0
+|Где пакеты, использующие `flavors`, должны устанавливать файлы `.pc`.
-|`LUAC_CMD`
-|Путь к компилятору Lua
+|`GUILE_INFO_PATH`
+|share/info/guile3
+|Подходящее значение для `INFO_PATH` для портов, использующих опцию `flavors`.
+|===
-|`TOLUA_CMD`
-|Путь к программе tolua
+Следующие элементы определены как переменные и как записи `PLIST_SUB`. Форма переменной имеет суффикс `_DIR` и представляет собой полный путь (с префиксом `GUILE_PREFIX`).
+
+[[using-guile-path-variables-ports]]
+.Подстановки путей, определенные для портов, использующих Guile
+[cols="1m,3m,6", frame="none", options="header"]
|===
+| Имя
+| Пример значения
+| Описание
-[[lua-variables-example]]
-.Указание для порта, где искать Lua
-[example]
-====
-Следующий фрагмент показывает, как сообщить порту, который использует сценарий configure, где расположены заголовочные файлы и библиотеки Lua.
+|GUILE_GLOBAL_SITE
+|share/guile/site
+|Каталог сайта, общий для всех версий guile; обычно не должен использоваться.
-[.programlisting]
-....
-USE_LUA= 4.0
-GNU_CONFIGURE= yes
-CONFIGURE_ENV= CPPFLAGS="-I${LUA_INCDIR}" LDFLAGS="-L${LUA_LIBDIR}"
-....
+|GUILE_SITE
+|share/guile/3.0/site
+|Каталог сайта для выбранной версии Guile.
-====
+|GUILE_SITE_CCACHE
+|lib/guile/3.0/site-ccache
+|Каталог для скомпилированных файлов байт-кода.
-[[lua-premk]]
-=== Обработка в [.filename]#bsd.port.pre.mk#
+|GUILE_DOCS
+|share/doc/guile30
+|Родительский каталог для документации, специфичной для версий.
-Если вам нужно использовать переменные для запуска команд сразу после подключения [.filename]#bsd.port.pre.mk#, для этого вам нужно определить переменную `LUA_PREMK`.
+|GUILE_EXAMPLES
+|share/examples/guile30
+|Родительский каталог для примеров, специфичных для версий.
+|===
-[IMPORTANT]
-====
-Если вы задаете `LUA_PREMK`, то версия, зависимости, компоненты и уже заданные переменные не будут изменены, в случае если вы изменили переменные порта Lua после подключения [.filename]#bsd.port.pre.mk#.
-====
+[[guile-examples]]
+=== Примеры
-[[lua-premk-example]]
-.Использование переменных Lua в командах
+[[guile-app-Makefile]]
+.`Makefile` для приложения, использующего Guile
[example]
====
-Следующий фрагмент иллюстрирует использование `LUA_PREMK` посредством запуска интерпретатора Lua для того, чтобы получить строку с полной версией, сохранить ее в переменную и передать программе.
+Этот пример демонстрирует, как сослаться на библиотеку Guile, необходимую во время сборки и выполнения. Обратите внимание, что ссылка должна указывать флейвор. В этом примере предполагается, что приложение использует `pkg-config` для поиска зависимостей.
[.programlisting]
....
-USE_LUA= 5.0
-LUA_PREMK= yes
+PORTNAME= sample
+DISTVERSION= 1.2.3
+CATEGORIES= whatever
-.include <bsd.port.pre.mk>
+MAINTAINER= fred.bloggs@example.com
+COMMENT= Sample
+WWW= https://example.com/guile_sample/sample/
-.if exists(${LUA_CMD})
-VER_STR!= ${LUA_CMD} -v
+BUILD_DEPENDS= guile-lib-${GUILE_FLAVOR}>=0.2.5:devel/guile-lib@${GUILE_FLAVOR}
+RUN_DEPENDS= guile-lib-${GUILE_FLAVOR}>=0.2.5:devel/guile-lib@${GUILE_FLAVOR}
-CFLAGS+= -DLUA_VERSION_STRING="${VER_STR}"
-.endif
-....
+USES= guile:2.2,3.0 pkgconfig
-====
+.include <bsd.port.mk>
+....
-[NOTE]
-====
-Переменные Lua можно безопасно использовать в командах внутри целей без необходимости в использовании `LUA_PREMK`.
====
[[using-iconv]]
== Использование `iconv`
-После 10-08-2013 (link:https://svnweb.freebsd.org/changeset/base/254273[r254273]) в составе FreeBSD 10-CURRENT и более новых версий имеется собственный `iconv`. В более ранних версиях дополнительной зависимостью выступал package:converters/libiconv[].
+В FreeBSD имеется встроенная реализация `iconv` в самой операционной системе.
-Для программного обеспечения, которому нужен `iconv`, определите `USES=iconv`. Версии FreeBSD до 10-CURRENT от 13-08-2013 (link:https://svnweb.freebsd.org/changeset/base/254273[r254273]) не имеют собственного `iconv`. На этих более ранных версиях будет автоматически добавлена зависимость от package:converters/libiconv[].
+Для программного обеспечения, требующего `iconv`, определите `USES=iconv`.
-Когда порт задаёт `USES=iconv`, становятся доступными следующие переменные:
+Когда порт определяет `USES=iconv`, становятся доступны следующие переменные:
[.informaltable]
[cols="1,1,1,1", frame="none", options="header"]
|===
| Имя переменной
| Назначение
-| Значение до FreeBSD 10-CURRENT 254273 (13-08-2013)
-| Значение после FreeBSD 10-CURRENT 254273 (13-08-2013)
+| Порт iconv (при использовании расширений WCHAR_T или //TRANSLIT)
+| Базовый iconv
+
|`ICONV_CMD`
-|Каталог размещения двоичного файла `iconv`
+|Каталог, в котором находится бинарный файл `iconv`
|`${LOCALBASE}/bin/iconv`
|[.filename]#/usr/bin/iconv#
|`ICONV_LIB`
-|Аргумент `ld` для компоновки с [.filename]#libiconv# (если нужно)
+|аргумент `ld` для линковки с [.filename]#libiconv# (если требуется)
|`-liconv`
|(пусто)
|`ICONV_PREFIX`
-|Каталог размещения реализации `iconv` (используется для сценариев конфигурации)
+|Каталог, в котором находится реализация `iconv` (полезно для скриптов configure)
|`${LOCALBASE}`
|[.filename]#/usr#
|`ICONV_CONFIGURE_ARG`
-|Параметр предварительно собранной конфигурации для сценариев конфигурации
+|Предварительно сконструированный аргумент configure для скриптов configure
|`--with-libiconv-prefix=${LOCALBASE}`
|(пусто)
|`ICONV_CONFIGURE_BASE`
-|Параметр предварительно собранной конфигурации для сценариев конфигурации
+|Предварительно сконструированный аргумент configure для скриптов configure
|`--with-libiconv=${LOCALBASE}`
|(пусто)
|===
-В следующих двух примерах демонстрируется автоматическое присвоение переменным правильных значений для систем, использующих package:converters/libiconv[] или собственный `iconv`.
+Эти два примера автоматически заполняют переменные правильным значением для систем, использующих package:converters/libiconv[] или `iconv`, входящий в состав операционной системы, соответственно:
[[iconv-simple-use]]
.Простое использование `iconv`
@@ -2261,12 +4279,12 @@ CONFIGURE_ARGS+=${ICONV_CONFIGURE_ARG}
====
-Как показано выше, `ICONV_LIB` имеет пустое значение с собственным `iconv`. Эту особенность можно использовать для обнаружения собственного `iconv` с соответствующими действиями.
+Как показано выше, `ICONV_LIB` пуста, когда присутствует встроенный `iconv`. Это можно использовать для обнаружения встроенного `iconv` и действовать соответственно.
-Иногда в программе параметр `ld` или путь поиска жёстко заданы в [.filename]#Makefile# или сценарии конфигурации. Для решения этой проблемы можно использовать следующий подход:
+Иногда в программе аргумент `ld` или путь поиска жестко заданы в [.filename]#Makefile# или скрипте configure. Для решения этой проблемы можно использовать следующий подход:
[[iconv-reinplace]]
-.Исправление жёстко заданного `-liconv`
+.Исправление жестко заданного `-liconv`
[example]
====
[.programlisting]
@@ -2279,10 +4297,10 @@ post-patch:
====
-В некоторых случаях необходимо установить альтернативные значения или выполнить операции в случае использования собственного `iconv`. Перед проверкой значения `ICONV_LIB` обязан быть подключён [.filename]#bsd.port.pre.mk#:
+В некоторых случаях необходимо установить альтернативные значения или выполнить операции в зависимости от наличия встроенного `iconv`. [.filename]#bsd.port.pre.mk# должен быть включен до проверки значения `ICONV_LIB`:
[[iconv-conditional]]
-.Проверка доступности собственного `iconv`
+.Проверка доступности встроенной поддержки `iconv`
[example]
====
[.programlisting]
@@ -2293,7 +4311,7 @@ USES= iconv
post-patch:
.if empty(ICONV_LIB)
- # обнаружен собственный iconv
+ # native iconv detected
@${REINPLACE_CMD} -e 's|iconv||' ${WRKSRC}/Config.sh
.endif
@@ -2305,126 +4323,239 @@ post-patch:
[[using-xfce]]
== Использование Xfce
-Переменная `USE_XFCE` используется для автоматической конфигурации зависимостей для портов, использующих библиотеки или приложения на основе Xfce, такие как package:x11-toolkits/libxfce4gui[] и package:x11-wm/xfce4-panel[].
+Порты, которым требуются библиотеки или приложения Xfce, устанавливают `USES=xfce`.
-В настоящее время распознаются следующие библиотеки и приложения Xfce:
+Конкретные зависимости библиотек и приложений Xfce задаются с помощью значений, присвоенных `USE_XFCE`. Они определены в [.filename]#/usr/ports/Mk/Uses/xfce.mk#. Возможные значения:
-* libexo: package:x11/libexo[]
-* libgui: package:x11-toolkits/libxfce4gui[]
-* libutil: package:x11/libxfce4util[]
-* libmcs: package:x11/libxfce4mcs[]
-* mcsmanager: package:sysutils/xfce4-mcs-manager[]
-* panel: package:x11-wm/xfce4-panel[]
-* thunar: package:x11-fm/thunar[]
-* wm: package:x11-wm/xfce4-wm[]
-* xfdev: package:dev/xfce4-dev-tools[]
+.Значения `USE_XFCE`
+garcon::
+package:sysutils/garcon[]
-Распознаются следующие дополнительные параметры:
+libexo::
+package:x11/libexo[]
+
+libgui::
+package:x11-toolkits/libxfce4gui[]
+
+libmenu::
+package:x11/libxfce4menu[]
+
+libutil::
+package:x11/libxfce4util[]
+
+panel::
+package:x11-wm/xfce4-panel[]
+
+thunar::
+package:x11-fm/thunar[]
+
+xfconf::
+package:x11/xfce4-conf[]
+
+[[use-xfce]]
+.Пример `USES=xfce`
+[example]
+====
+[.programlisting]
+....
+USES= xfce
+USE_XFCE= libmenu
+....
+
+====
+
+[[use-xfce-gtk2]]
+.Использование собственных виджетов GTK2 в Xfce
+[example]
+====
+В этом примере портированное приложение использует пакет виджетов, специфичных для GTK2: package:x11/libxfce4menu[] и package:x11/xfce4-conf[].
-* configenv: Используйте, если ваш порт требует специально измененного значения `CONFIGURE_ENV` для поиска требуемых для порта библиотек.
-+
[.programlisting]
....
--I${LOCALBASE}/include -L${LOCALBASE}/lib
+USES= xfce:gtk2
+USE_XFCE= libmenu xfconf
....
-+
-добавляется в CPPFLAGS к `CONFIGURE_ENV`.
+====
-Следовательно, если у порта имеется зависимость от package:sysutils/xfce4-mcs-manager[], и порт требует специальных CPPFLAGS в своем окружении configure, то синтаксис будет следующим:
+[TIP]
+====
+Компоненты Xfce, включённые таким образом, автоматически загрузят все необходимые зависимости. Указывать полный список больше не требуется. Если порту нужен только package:x11-wm/xfce4-panel[], используйте:
[.programlisting]
....
-USE_XFCE= mcsmanager configenv
+USES= xfce
+USE_XFCE= panel
....
-[[using-mozilla]]
-== Использование Mozilla
+Нет необходимости перечислять компоненты package:x11-wm/xfce4-panel[], которые ему самому требуются, вот так:
-.Переменные для портов, использующих Mozilla
-[cols="1,1", frame="none"]
-|===
-|`USE_GECKO`
-|Один из бэкэндов Gecko, с которым может работать порт. Возможные значения: `libxul` ([.filename]#libxul.so#), `seamonkey` ([.filename]#libgtkembedmoz.so#, устаревший, больше не должен использоваться).
+[.programlisting]
+....
+USES= xfce
+USE_XFCE= libexo libmenu libutil panel
+....
+
+Однако компоненты Xfce и зависимости порта, не относящиеся к Xfce, должны быть явно включены. Не рассчитывайте, что компонент Xfce предоставит дополнительную зависимость, кроме себя, для основного порта.
+====
+
+[[using-budgie]]
+== Использование Budgie
+
+Приложения или библиотеки, зависящие от рабочего стола Budgie, должны указывать `USES= budgie` и устанавливать `USE_BUDGIE` в список необходимых компонентов.
-|`USE_FIREFOX`
-|Для запуска порта требуется Firefox. Возможные значения: `yes` (версия по умолчанию), `40`, `36`, `35`. По умолчанию устанавливает зависимость от версии `40`.
+[cols="1,1", frame="none", options="header"]
+|===
+| Имя
+| Описание
-|`USE_FIREFOX_BUILD`
-|Для построения порта требуется Firefox. Возможные значения: смотрите USE_FIREFOX. Автоматически устанавливает USE_FIREFOX с присвоением того же значения.
+| `libbudgie`
+| Ядро рабочего стола (библиотека)
-|`USE_SEAMONKEY`
-|Для запуска порта требуется SeaMonkey. Возможные значения: `yes` (версия по умолчанию), `20`, `11` (устарело, больше не должно использоваться). По умолчанию устанавливает зависимость от версии `20`.
+| `libmagpie`
+| Оконный менеджер X11 и библиотека композитинга Budgie
-|`USE_SEAMONKEY_BUILD`
-|Для построения порта требуется SeaMonkey. Возможные значения: смотрите USE_SEAMONKEY. Автоматически устанавливает USE_SEAMONKEY с присвоением того же значения.
+| `raven`
+| Универсальный центр в панели для доступа к различным виджетам приложений
-|`USE_THUNDERBIRD`
-|Для запуска порта требуется Thunderbird. Возможные значения: `yes` (версия по умолчанию), `31`, `30` (устарело, больше не должно использоваться). По умолчанию устанавливает зависимость от версии `31`.
+| `screensaver`
+| Рабочий стол: специальная заставка
-|`USE_THUNDERBIRD_BUILD`
-|Для построения порта требуется Thunderbird. Возможные значения: смотрите USE_THUNDERBIRD. Автоматически устанавливает USE_THUNDERBIRD с присвоением того же значения.
|===
-Полный перечень доступных переменных можно получить в файле [.filename]#/usr/ports/Mk/bsd.gecko.mk#.
+[NOTE]
+====
+Все виджеты приложений взаимодействуют через службу *org.budgie_desktop.Raven*.
+
+Зависимость по умолчанию включает время сборки и выполнения, её можно изменить с помощью `:build` или `:run`, например:
+
+[.programlisting]
+....
+USES= budgie
+USE_BUDGIE= screensaver:build
+....
+====
+
+[[budgie-components-example]]
+.Пример `USE_BUDGIE`
+[example]
+====
+[.programlisting]
+....
+USES= budgie gettext gnome meson pkgconfig
+USE_BUDGIE= libbudgie
+....
+====
[[using-databases]]
== Использование баз данных
-.Переменные для портов, использующих базы данных
+Используйте один из макросов `USES` из crossref:special[using-databases-uses,Макросы `USES` для баз данных], чтобы добавить зависимость от базы данных.
+
+[[using-databases-uses]]
+.Макросы `USES` для баз данных
[cols="1,1", frame="none", options="header"]
|===
-| Переменная
-| Значение
+| База данных
+| Макрос USES
-|`USE_BDB`
-|Если переменная установлена в `yes`, добавляет зависимость от порта package:databases/db41[]. Также переменной можно присвоить значения: 2, 3, 40, 41, 42, 43, 44, 46, 47, 48 или 51. Вы можете объявить диапазон принимаемых значений, `USE_BDB`=42+ будет искать установленную версию с наибольшим номером, и, если ничего не установлено, вернется к 42.
+|Berkeley DB
+|crossref:uses[uses-bdb,`bdb`]
-|`USE_MYSQL`
-|Если переменная установлена в `yes`, добавляет зависимость от порта package:databases/mysql55-client[]. Как связанная переменная, `WANT_MYSQL_VER` может быть установлена в значение 323, 40, 41, 50, 51, 52, 55 или 60.
+|MariaDB, MySQL, Percona
+|crossref:uses[uses-mysql,`mysql`]
-|`USE_PGSQL`
-|Если установлена в `yes`, добавляет зависимость от порта package:databases/postgresql90-client[]. Как связанная переменная, `WANT_PGSQL_VER` может быть установлена в значение 83, 84, 90, 91 или 92. Вы можете указать максимальное и минимальное значения; `WANT_PGSQL_VER=90+` сделает порт зависимым от минимальной версии 9.0.
+|PostgreSQL
+|crossref:uses[uses-pgsql,`pgsql`]
-|`USE_SQLITE`
-|Если переменная имеет значение `yes`, добавляет зависимость от порта package:databases/sqlite3[]. Переменная может принимать значения: 3, 2.
+|SQLite
+|crossref:uses[uses-sqlite,`sqlite`]
|===
-Подробнее смотрите в http://svnweb.FreeBSD.org/ports/head/Mk/bsd.database.mk?view=markup[bsd.database.mk].
+[[using-databases-bdb-ex1]]
+.Использование Berkeley DB 6
+[example]
+====
+[.programlisting]
+....
+USES= bdb:6
+....
+
+См. crossref:uses[uses-bdb,`bdb`] для получения дополнительной информации.
+====
+
+[[using-databases-mysql-ex1]]
+.Использование MySQL
+[example]
+====
+Когда порту требуется клиентская библиотека MySQL, добавьте
+
+[.programlisting]
+....
+USES= mysql
+....
+
+См. crossref:uses[uses-mysql,`mysql`] для получения дополнительной информации.
+====
+
+[[using-databases-pgsql-ex1]]
+.Использование PostgreSQL
+[example]
+====
+Когда порту требуется сервер PostgreSQL версии 9.6 или новее, добавьте
+
+[.programlisting]
+....
+USES= pgsql:9.6+
+WANT_PGSQL= server
+....
+
+См. crossref:uses[uses-pgsql,`pgsql`] для получения дополнительной информации.
+====
+
+[[using-databases-sqlite-ex1]]
+.Использование SQLite 3
+[example]
+====
+[.programlisting]
+....
+USES= sqlite:3
+....
+
+См. crossref:uses[uses-sqlite,`sqlite`] для получения дополнительной информации.
+====
[[rc-scripts]]
-== Запуск и остановка служб (сценарии `rc`)
+== Запуск и остановка служб (скрипты `rc`)
-Сценарии [.filename]#rc.d# используются для запуска служб при запуске системы и дают администратору стандартный способ остановки, запуска и перезапуска службы. Порты интегрируются в системную инфраструктуру [.filename]#rc.d#. Подробности по её использованию можно найти в extref:{handbook}config-tuning/[главе rc.d Руководства, configtuning-rcd]. Подробное объяснение доступных команд находится в man:rc[8] и man:rc.subr[8]. Наконец, есть extref:{rc-scripting}[статья]о практических аспектах написания сценариев [.filename]#rc.d#.
+[.filename]#rc.d# скрипты используются для запуска служб при загрузке системы, а также предоставляют администраторам стандартный способ остановки, запуска и перезапуска служб. Порты интегрируются в систему [.filename]#rc.d#. Подробности использования можно найти в extref:{handbook}[соответствующей главе Handbook, configtuning-rcd]. Детальное объяснение доступных команд приведено в man:rc[8] и man:rc.subr[8]. Наконец, существует extref:{rc-scripting}[статья], посвящённая практическим аспектам написания [.filename]#rc.d# скриптов.
-Установить можно один или более сценариев [.filename]#rc.d#:
+С мифическим портом под названием _doorman_, которому необходимо запустить демон _doormand_. Добавьте следующее в [.filename]#Makefile#:
[.programlisting]
....
USE_RC_SUBR= doormand
....
-Сценарии обязаны размещаться в подкаталоге [.filename]#files# с обязательным добавлением суффикса `.in` к имени файла. Для этого файла будут использоваться стандартные расширения `SUB_LIST`. Также особенно приветствуется использование расширений `%%PREFIX%%` и `%%LOCALBASE%%`. Подробнее о `SUB_LIST` в <<using-sub-files,соответствующей главе>>.
+Можно указать несколько скриптов, которые будут установлены. Скрипты должны быть размещены в подкаталоге [.filename]#files#, и к их имени должен быть добавлен суффикс `.in`. Для этого файла будут выполнены стандартные подстановки `SUB_LIST`. Также настоятельно рекомендуется использовать подстановки `%%PREFIX%%` и `%%LOCALBASE%%`. Подробнее о `SUB_LIST` см. в crossref:pkg-files[using-sub-files,соответствующем разделе].
-Начиная с FreeBSD 6.1-RELEASE локальные сценарии [.filename]#rc.d# (включая установленные из портов) включены в общий man:rcorder[8] основной системы.
+Начиная с FreeBSD 6.1-RELEASE, локальные скрипты [.filename]#rc.d# (включая те, что установлены через порты) включены в общий man:rcorder[8] базовой системы.
-Пример простого сценария [.filename]#rc.d#:
+Пример простого скрипта [.filename]#rc.d# для запуска демона doormand:
[.programlisting]
....
#!/bin/sh
-# $FreeBSD$
-#
# PROVIDE: doormand
# REQUIRE: LOGIN
# KEYWORD: shutdown
#
-# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
+# Add these lines to /etc/rc.conf.local or /etc/rc.conf
# to enable this service:
#
# doormand_enable (bool): Set to NO by default.
-# Set it to YES to enable doorman.
+# Set it to YES to enable doormand.
# doormand_config (path): Set to %%PREFIX%%/etc/doormand/doormand.cf
# by default.
@@ -2446,73 +4577,76 @@ command_args="-p $pidfile -f $doormand_config"
run_rc_command "$1"
....
-Если нет стоящей причины запускать службы раньше всех портов, сценарии должны использовать
+Если нет очень веской причины запускать службу раньше или она работает от имени определенного пользователя (не root), все скрипты портов должны использовать:
[.programlisting]
....
REQUIRE: LOGIN
....
-Если служба работает под определенным пользователем (отличным от root), то это делается принудительно. В сценарий выше включена конструкция
+Если скрипт запуска демона требует его остановки, следующий код активирует остановку службы при выключении системы:
[.programlisting]
....
KEYWORD: shutdown
....
-потому что вымышленный порт, который мы используем в качестве примера, запускает службу, и она должна корректно завершиться при выключении системы. Если сценарий не запускает постоянную службу, то это не является необходимым.
+Если скрипт не запускает постоянную службу, это не требуется.
-Для необязательных элементов конфигурации присвоение переменной по умолчанию в стиле "=" является более предпочтительным по сравнению со стилем ":=", используемым здесь, поскольку первый устанавливает значение по умолчанию только если переменная не установлена, а последний устанавливает её, если переменная не установлена _или_ обнулена. Пользователь вполне может написать в своем файле [.filename]#rc.conf.local# что-нибудь типа
+Для необязательных элементов конфигурации предпочтительнее использовать стиль присваивания переменных по умолчанию "=" вместо стиля ":=", так как первый устанавливает значение по умолчанию только если переменная не задана, а второй — если переменная не задана _или_ равна null. Пользователь может включить что-то вроде:
[.programlisting]
....
doormand_flags=""
....
-и тогда произойдет неуместная подстановка переменной с использованием ":=", что переопределит намерения пользователя. Переменная `_enable` является обязательной; значением по умолчанию должно быть ":".
+в свой [.filename]#rc.conf.local#, а подстановка переменной с использованием ":=" некорректно переопределила бы намерение пользователя. Переменная `_enable` не является опциональной и должна использовать ":" для значения по умолчанию.
+
+[IMPORTANT]
+====
+Порты _не должны_ запускать и останавливать свои службы при установке и удалении. Не злоупотребляйте ключевыми словами [.filename]#plist#, описанными в crossref:plist[plist-keywords-base-exec, "разделе @preexec command,@postexec command,@preunexec command,@postunexec command"], выполняя команды, которые изменяют работающую систему, включая запуск или остановку служб.
+====
-=== Контрольный список перед внесением изменений
+[[rc-scripts-checklist]]
+=== Pre-Commit Checklist
-Перед тем, как отсылать порт со сценарием [.filename]#rc.d#, и тем более перед его коммитом, сверьтесь со следующим контрольным списком, чтобы убедиться, что порт для этого готов.
+Прежде чем внести порт с [.filename]#rc.d# скриптом, и что более важно, перед его коммитом, пожалуйста, ознакомьтесь с этим контрольным списком, чтобы убедиться, что он готов.
-Большинство из этих проверок умеет выполнять порт package:devel/rclint[], но это не является заменой надлежащему просмотру.
+Порт package:devel/rclint[] может проверить большинство из них, но он не заменяет тщательного просмотра и проверки.
[.procedure]
-====
-. Если это новый файл, заканчивается ли он на [.filename]#.sh#? Если это так, то имя файла должно быть изменено на [.filename]#file.in#, поскольку файлы [.filename]#rc.d# не могут оканчиваться на такое расширение.
-. Присутствует ли в файле тег `$FreeBSD$`?
-. Соответствуют ли друг другу имя файла (без [.filename]#.in#), строка `PROVIDE` и ``$``__name__? Имя файла, совпадающее с `PROVIDE`, упрощает отладку, особенно для проблем, связанных с man:rcorder[8]. Соответствие имени файла и ``$``__name__ также упрощает понимание, какие переменные имеют отношение к сценарию в [.filename]#rc.conf[.local]#. Последнее также является тем, что вы могли бы назвать "политикой" для всех новых сценариев, включая те, что входят в базовую систему.
-. Содержит ли строка `REQUIRE` значение LOGIN? Это условие обязательно для сценариев, работающих не из-под суперпользователя. Если сценарий запускается из-под суперпользователя, то стоит ли его запускать до `LOGIN`? Если нет, то его следует запускать после, так чтобы мы могли свободно сгруппировать локальные сценарии в той точке man:rcorder[8], когда почти все сценарии в базовой системе уже стартовали.
-. Запускает ли сценарий постоянную службу? Если да, то он должен иметь `KEYWORD: shutdown`.
-. Убедитесь в том, что в сценарии отсутствует `KEYWORD: FreeBSD`. Это перестало быть нужным и нежелательно уже много лет. Это также служит индикатором того, что новый сценарий был скопирован со старого, поэтому особое внимание должно быть уделено при проверке.
-. Если сценарий использует интерпретируемый язык, такой как `perl`, `python` или `ruby`, то убедитесь, что значение `command_interpreter` установлено должным образом. В противном случае
+. Если это новый файл, имеет ли он расширение [.filename]#.sh#? Если да, его необходимо изменить на просто [.filename]#file.in#, поскольку файлы [.filename]#rc.d# не могут оканчиваться таким расширением.
+. Совпадают ли имя файла (без [.filename]#.in#), строка `PROVIDE` и `$`_name_? Совпадение имени файла с `PROVIDE` упрощает отладку, особенно при проблемах с man:rcorder[8]. Совпадение имени файла и `$`_name_ облегчает понимание того, какие переменные актуальны в [.filename]#rc.conf[.local]#. Это также является политикой для всех новых скриптов, включая те, что в базовой системе.
+. Установлена ли строка `REQUIRE` в значение `LOGIN`? Это обязательно для скриптов, выполняемых от имени непривилегированного пользователя. Если скрипт выполняется от имени root, есть ли веская причина для его запуска до `LOGIN`? Если нет, он должен запускаться после, чтобы локальные скрипты можно было условно сгруппировать в man:rcorder[8] после запуска большинства компонентов базовой системы.
+. Запускает ли скрипт постоянную службу? Если да, он должен содержать `KEYWORD: shutdown`.
+. Убедитесь, что отсутствует `KEYWORD: FreeBSD`. Это перестало быть необходимым или желательным уже много лет. Это также указывает на то, что новый скрипт был скопирован/вставлен из старого скрипта, поэтому следует проявить дополнительную осторожность при проверке.
+. Если скрипт использует интерпретируемый язык, например `perl`, `python` или `ruby`, убедитесь, что `command_interpreter` установлен корректно. Например, для Perl добавьте `PERL=${PERL}` в `SUB_LIST` и используйте `%%PERL%%`. В противном случае,
+
-[source,shell]
+[source, shell]
....
# service name stop
....
-+
-возможно будет работать неправильно. Смотрите man:service[8] для дополнительной информации.
-. Все ли вхождения [.filename]#/usr/local# были заменены на `%%PREFIX%%`?
-. Идет ли присвоение переменным значений по умолчанию после `load_rc_config`?
++
+вероятно, не будет работать корректно. Дополнительную информацию смотрите в man:service[8].
+. Проверено, что все вхождения [.filename]#/usr/local# заменены на `%%PREFIX%%`?
+. Делаются ли присваивания переменным по умолчанию после `load_rc_config`?
. Используются ли пустые строки при присвоении значений по умолчанию? Такие присвоения должны быть удалены, но перепроверьте, что эти параметры задокументированы в комментариях в начале файла.
. Действительно ли в сценариях используются значения, присвоенные переменным?
-. Являются ли параметры по умолчанию, перечисленные в __name__``_flags``, обязательными? Если это так, то их следует поместить в `command_args`. Параметр `-d` здесь - это как красный флаг (прошу прощения за каламбур), поскольку обычно он применяется для "демонизации" процесса и поэтому на самом деле обязательный.
-. Никогда не включайте переменную __name__``_flags`` в `command_args` (и наоборот; в прочем, такая ошибка встречается реже).
-. Запускает ли сценарий какой-либо код безусловно? Это нехорошо. Обычно такие вещи могут/должны помещаться в `start_precmd`.
-. Все логические условия должны использовать функцию `checkyesno`. Не пишите самописных проверок для `[Yy][Ee][Ss]`, и так далее.
-. Если в сценарии выполняется цикл (например, ожидание чего-либо перед стартом), используется ли счетчик для завершения цикла? Мы не хотим бесконечного ожидания загрузки в случае возникновения ошибки.
-. Создает ли сценарий файлы или каталоги, которым нужны особые права доступа? Например, файл [.filename]#pid#, который должен принадлежать пользователю, из-под которого запускается процесс. Вместо традиционных команд man:touch[1]/man:chown[8]/man:chmod[1] подумайте об использовании man:install[1] с подходящими аргументами командной строки, для того чтобы выполнить всю процедуру за один шаг.
-====
+. Являются ли опции, перечисленные в стандартном _name_`_flags`, обязательными? Если да, они должны быть в `command_args`. Флаг `-d` здесь, как красный флаг (простите за каламбур), так как обычно это опция для "демонизации" процесса и, следовательно, фактически обязательна.
+. `_name__flags` никогда не должны включаться в `command_args` (и наоборот, хотя такая ошибка встречается реже).
+. Выполняет ли скрипт любой код безусловно? Это не приветствуется. Обычно такие вещи должны обрабатываться через `start_precmd`.
+. Все логические проверки должны использовать функцию `checkyesno`. Не допускаются самодельные проверки на `[Yy][Ee][Ss]` и т.п.
+. Если есть цикл (например, ожидание запуска чего-либо), есть ли в нём счётчик для завершения цикла? Мы не хотим, чтобы загрузка зависала навсегда в случае ошибки.
+. Создает ли скрипт файлы или каталоги, требующие определенных разрешений, например, [.filename]#pid#, который должен принадлежать пользователю, запускающему процесс? Вместо традиционной последовательности man:touch[1]/man:chown[8]/man:chmod[1] рассмотрите использование man:install[1] с соответствующими аргументами командной строки, чтобы выполнить всю процедуру за один шаг.
[[users-and-groups]]
== Добавление пользователей и групп
-Некоторые порты требуют в установленной системе наличие определенного пользователя. Выберите свободный UID в диапазоне от 50 до 999 и зарегистрируйте его в [.filename]#ports/UIDs# (для пользователей) и/или в [.filename]#ports/GIDs# (для групп). Удостоверьтесь, что не используете UID, уже используемый системой или другими портами.
+Некоторые порты требуют наличия определённой учётной записи пользователя, обычно для демонов, работающих от имени этого пользователя. Для таких портов выберите _уникальный_ UID в диапазоне от 50 до 999 и зарегистрируйте его в [.filename]#ports/UIDs# (для пользователей) и [.filename]#ports/GIDs# (для групп). Уникальный идентификатор должен быть одинаковым для пользователей и групп.
-Пожалуйста, включите в патч изменение для этих двух файлов, если вам требуется создать нового пользователя или группу для вашего порта.
+Пожалуйста, приложите патч для этих двух файлов, если требуется создать нового пользователя или группу для порта.
-Затем вы сможете использовать в вашем [.filename]#Makefile# переменные `USERS` и `GROUPS`, и пользователь автоматически создастся при установке порта.
+Затем используйте `USERS` и `GROUPS` в [.filename]#Makefile#, и пользователь будет автоматически создан при установке порта.
[.programlisting]
....
@@ -2520,16 +4654,58 @@ USERS= pulse
GROUPS= pulse pulse-access pulse-rt
....
-Текущий перечень зарезервированных UID и GID находится в [.filename]#ports/UIDs# и [.filename]#ports/GIDs#.
+Текущий список зарезервированных UID и GID можно найти в [.filename]#ports/UIDs# и [.filename]#ports/GIDs#.
[[requiring-kernel-sources]]
-== Порты, требующие наличия исходных текстов ядра
+== Порты, зависящие от исходных кодов ядра
-Некоторым портам (таким как загружаемые модули ядра) для компиляции нужны файлы с исходными текстами ядра. Ниже указан корректный способ определения, установлены ли они пользователем:
+Некоторые порты (например, загружаемые модули ядра) требуют исходные файлы ядра для компиляции порта. Вот правильный способ проверить, установлены ли они у пользователя:
[.programlisting]
....
USES= kmod
....
-Кроме этой проверки, `kmod` заботится о большинстве пунктов, которые должны учитываться в этих портах.
+Помимо этой проверки, функция `kmod` учитывает большинство аспектов, которые необходимо принимать во внимание данным портам.
+
+[[go-libs]]
+== Библиотеки Go
+
+Порты не должны упаковывать или устанавливать библиотеки или исходный код Go. Порты Go должны загружать необходимые зависимости в обычное время загрузки и должны устанавливать только программы и то, что нужно пользователям, а не то, что нужно разработчикам на Go.
+
+Порты должны (в порядке предпочтения):
+
+* Использовать зависимости, включенные в исходный код пакета.
+* Получить версии зависимостей, указанные вышестоящим проектом (в случае go.mod, vendor.json или аналогичных).
+* В крайнем случае (зависимости не включены и версии не указаны точно) получить версии зависимостей, доступные на момент разработки/выпуска вышестоящего проекта.
+
+[[haskell-libs]]
+== Библиотеки Haskell
+
+Как и в случае с языком Go, коллекция портов не должна включать или устанавливать библиотеки Haskell. Порты Haskell должны статически линковаться со своими зависимостями и загружать все распространяемые файлы на этапе fetch.
+
+[[shell-completion]]
+== Файлы завершения командной оболочки
+
+Многие современные оболочки (включая bash, fish, tcsh и zsh) поддерживают табуляцию для параметров и/или опций. Эта поддержка обычно обеспечивается файлами завершения, которые содержат определения того, как будет работать завершение по табуляции для определённой команды. Порты иногда поставляются со своими собственными файлами завершения, или разработчики портов могут создавать их самостоятельно.
+
+Если доступны файлы завершения, их всегда следует устанавливать. Нет необходимости создавать для этого опцию. Однако если опция используется, всегда включайте её в `OPTIONS_DEFAULT`.
+
+[[shell-completion-paths]]
+.Полные имена файлов завершения оболочки
+[cols="1,1,1", frame="none"]
+|===
+|`bash`
+|[.filename]#${PREFIX}/etc/bash_completion.d# or [.filename]#${PREFIX}/share/bash-completion/completions#
+|(любые уникальные имена файлов в одной из этих папок)
+
+|`fish`
+|[.filename]#${PREFIX}/share/fish/completions/${PORTNAME}.fish#
+|
+
+|`zsh`
+|[.filename]#${PREFIX}/share/zsh/site-functions/_${PORTNAME}#
+|
+|===
+
+Не регистрируйте зависимости от самих оболочек.
diff --git a/documentation/content/ru/books/porters-handbook/special/_index.po b/documentation/content/ru/books/porters-handbook/special/_index.po
new file mode 100644
index 0000000000..ca4f4e8072
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/special/_index.po
@@ -0,0 +1,14978 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-24 21:10+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookspecial_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1
+#, no-wrap
+msgid "Special considerations when creating a new FreeBSD Port"
+msgstr "Особые соображения при создании нового порта FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1
+#, no-wrap
+msgid "Chapter 6. Special Considerations"
+msgstr "Глава 6. Особые соглашения"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:14
+#, no-wrap
+msgid "Special Considerations"
+msgstr "Особые соглашения"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:52
+msgid ""
+"This section explains the most common things to consider when creating a "
+"port."
+msgstr ""
+"Имеется ещё несколько вещей, которые вы должны иметь в виду при создании "
+"порта. Этот раздел описывает наиболее часто встречающиеся из них."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:54
+#, no-wrap
+msgid "Splitting long files"
+msgstr "Разделение длинных файлов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:61
+msgid ""
+"Sometimes, port [.filename]#Makefiles# can be really long. For example, "
+"rust ports can have a very long `CARGO_CRATES` list. In other cases, the "
+"[.filename]#Makefile# might have code that varies depending on the "
+"architecture. In such cases, it can be convenient to split the original "
+"[.filename]#Makefile# into several files. [.filename]#bsd.port.mk# "
+"automatically includes some types of [.filename]#Makefiles# into the main "
+"port [.filename]#Makefile#."
+msgstr ""
+"Иногда [.filename]#Makefiles# могут быть очень длинными. Например, порты "
+"rust могут содержать очень длинный список `CARGO_CRATES`. В других случаях "
+"[.filename]#Makefile# может содержать код, который варьируется в зависимости "
+"от архитектуры. В таких ситуациях может быть удобно разделить исходный "
+"[.filename]#Makefile# на несколько файлов. [.filename]#bsd.port.mk# "
+"автоматически включает некоторые типы [.filename]#Makefiles# в основной "
+"[.filename]#Makefile# порта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:63
+msgid ""
+"These are the files that the framework handles automatically if they are "
+"found:"
+msgstr ""
+"Вот файлы, которые система обрабатывает автоматически, если они обнаружены:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:65
+msgid ""
+"[.filename]#Makefile.crates#. An example can be found in package:audio/"
+"ebur128[]."
+msgstr ""
+"[.filename]#Makefile.crates#. Пример можно найти в пакете package:audio/"
+"ebur128[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:66
+msgid ""
+"[.filename]#Makefile.inc#. An example can be found in package:net/ntp[]."
+msgstr ""
+"[.filename]#Makefile.inc#. Пример можно найти в пакете package:net/ntp[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:67
+msgid "[.filename]#Makefile.${ARCH}-${OPSYS}#"
+msgstr "[.filename]#Makefile.${ARCH}-${OPSYS}#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:68
+msgid ""
+"[.filename]#Makefile.${OPSYS}#. An example can be found in package:net/cvsup-"
+"static[]."
+msgstr ""
+"[.filename]#Makefile.${OPSYS}#. Пример можно найти в пакете package:net/"
+"cvsup-static[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:69
+msgid "[.filename]#Makefile.${ARCH}#"
+msgstr "[.filename]#Makefile.${ARCH}#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:70
+msgid "[.filename]#Makefile.local#"
+msgstr "[.filename]#Makefile.local#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:76
+msgid ""
+"It is also usual practice to split the packaging list of the port into "
+"several files if the list varies a lot from one architecture to another or "
+"depends on the selected flavor. In this case, the [.filename]#pkg-plist# "
+"file for each architecture is named following the pattern [.filename]#pkg-"
+"plist.${ARCH}# or [.filename]#pkg-plist.${FLAVOR}#. The framework does not "
+"create the packaging list automatically if multiple [.filename]#pkg-plist# "
+"files exist. It is the responsibility of the porter to select the proper "
+"[.filename]#pkg-plist# and assign it to the `PLIST` variable. Examples on "
+"how to deal with this can be found in package:audio/logitechmediaserver[] "
+"and package:deskutils/libportal[]."
+msgstr ""
+"Также распространённой практикой является разделение списка пакетов порта на "
+"несколько файлов, если список сильно различается в зависимости от "
+"архитектуры или выбранного флейвора. В этом случае файл [.filename]#pkg-"
+"plist# для каждой архитектуры именуется по шаблону [.filename]#pkg-plist.$"
+"{ARCH}# или [.filename]#pkg-plist.${FLAVOR}#. Фреймворк не создаёт список "
+"пакетов автоматически, если существует несколько файлов [.filename]#pkg-"
+"plist#. Ответственность за выбор подходящего файла [.filename]#pkg-plist# и "
+"его присвоение переменной `PLIST` лежит на того, кто делает порт. Примеры "
+"работы с этим можно найти в портах package:audio/logitechmediaserver[] и "
+"package:deskutils/libportal[]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:78
+#, no-wrap
+msgid "Staging"
+msgstr "Staging"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:85
+msgid ""
+"[.filename]#bsd.port.mk# expects ports to work with a \"stage directory\". "
+"This means that a port must not install files directly to the regular "
+"destination directories (that is, under `PREFIX`, for example) but instead "
+"into a separate directory from which the package is then built. In many "
+"cases, this does not require root privileges, making it possible to build "
+"packages as an unprivileged user. With staging, the port is built and "
+"installed into the stage directory, `STAGEDIR`. A package is created from "
+"the stage directory and then installed on the system. Automake tools refer "
+"to this concept as `DESTDIR`, but in FreeBSD, `DESTDIR` has a different "
+"meaning (see crossref:testing[porting-prefix,`PREFIX` and `DESTDIR`])."
+msgstr ""
+"[.filename]#bsd.port.mk# ожидает, что порты будут работать с \"директорией "
+"стадии\". Это означает, что порт не должен устанавливать файлы напрямую в "
+"обычные целевые директории (например, под `PREFIX`), а вместо этого в "
+"отдельную директорию, из которой затем собирается пакет. Во многих случаях "
+"это не требует прав root, что позволяет собирать пакеты от имени "
+"непривилегированного пользователя. При использовании стадии порт собирается "
+"и устанавливается в директорию стадии `STAGEDIR`. Пакет создаётся из "
+"директории стадии и затем устанавливается в систему. Инструменты Automake "
+"называют эту концепцию `DESTDIR`, но в FreeBSD `DESTDIR` имеет другое "
+"значение (см. crossref:testing[porting-prefix,`PREFIX` и `DESTDIR`])."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:92
+msgid ""
+"No port _really_ needs to be root. It can mostly be avoided by using "
+"crossref:uses[uses-uidfix,`USES=uidfix`]. If the port still runs commands "
+"like man:chown[8], man:chgrp[1], or forces owner or group with "
+"man:install[1] then use crossref:uses[uses-fakeroot,`USES=fakeroot`] to fake "
+"those calls. Some patching of the port's [.filename]#Makefiles# will be "
+"needed."
+msgstr ""
+"Ни один порт _на самом деле_ не должен работать от root. Этого в большинстве "
+"случаев можно избежать, используя crossref:uses[uses-uidfix,`USES=uidfix`]. "
+"Если порт всё ещё выполняет команды, такие как man:chown[8], man:chgrp[1], "
+"или принудительно устанавливает владельца или группу с помощью "
+"man:install[1], то используйте crossref:uses[uses-fakeroot,`USES=fakeroot`], "
+"чтобы подделать эти вызовы. Потребуется некоторая правка "
+"[.filename]#Makefiles# порта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:97
+msgid ""
+"Meta ports, or ports that do not install files themselves but only depend on "
+"other ports, must avoid needlessly extracting the man:mtree[8] to the stage "
+"directory. This is the basic directory layout of the package, and these "
+"empty directories will be seen as orphans. To prevent man:mtree[8] "
+"extraction, add this line:"
+msgstr ""
+"Метапорты, то есть порты, которые не устанавливают файлы непосредственно, а "
+"только зависят от других портов, должны по возможности избегать распаковки "
+"man:mtree[8] в каталог сборки. Это основная иерархия каталогов пакета, и эти "
+"пустые каталоги будут выглядеть лишними. Для предотвращения распаковки "
+"man:mtree[8] добавьте эту строку:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:101
+#, no-wrap
+msgid "NO_MTREE=\tyes\n"
+msgstr "NO_MTREE=\tyes\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:107
+msgid ""
+"Metaports should use crossref:special[uses-metaport,`USES=metaport`]. It "
+"sets up defaults for ports that do not fetch, build, or install anything."
+msgstr ""
+"Метапорты должны использовать crossref:special[uses-"
+"metaport,`USES=metaport`]. Это устанавливает значения по умолчанию для "
+"портов, которые не загружают, не собирают и не устанавливают ничего."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:113
+msgid ""
+"Staging is enabled by prepending `STAGEDIR` to paths used in the `pre-"
+"install`, `do-install`, and `post-install` targets (see the examples through "
+"the book). Typically, this includes `PREFIX`, `ETCDIR`, `DATADIR`, "
+"`EXAMPLESDIR`, `DOCSDIR`, and so on. Directories should be created as part "
+"of the `post-install` target. Avoid using absolute paths whenever possible."
+msgstr ""
+"Этап подготовки включается путем добавления `STAGEDIR` к путям, используемым "
+"в целях `pre-install`, `do-install` и `post-install` (см. примеры в книге). "
+"Обычно это включает `PREFIX`, `ETCDIR`, `DATADIR`, `EXAMPLESDIR`, `DOCSDIR` "
+"и т. д. Каталоги должны создаваться как часть цели `post-install`. По "
+"возможности избегайте использования абсолютных путей."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:117
+msgid ""
+"Ports that install kernel modules must prepend `STAGEDIR` to their "
+"destination, by default [.filename]#/boot/modules#."
+msgstr ""
+"Порты, которые устанавливают модули ядра, должны добавлять `STAGEDIR` к пути "
+"назначения, по умолчанию это [.filename]#/boot/modules#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:120
+#, no-wrap
+msgid "Handling Symbolic Links"
+msgstr "Обработка символических ссылок"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:125
+msgid ""
+"When creating a symbolic link, relative ones are strongly recommended. Use "
+"`${RLN}` to create relative symbolic links. It uses man:install[1] under "
+"the hood to automatically figure out the relative link to create."
+msgstr ""
+"При создании символической ссылки настоятельно рекомендуется использовать "
+"относительные пути. Используйте `${RLN}` для создания относительных "
+"символических ссылок. Эта команда использует man:install[1] для "
+"автоматического определения относительной ссылки, которую нужно создать."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:127
+#, no-wrap
+msgid "Create Relative Symbolic Links Automatically"
+msgstr "Автоматическое создание относительных символических ссылок"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:131
+msgid ""
+"`${RLN}` uses man:install[1]'s relative symbolic feature which frees the "
+"porter of computing the relative path."
+msgstr ""
+"`${RLN}` использует относительную символическую ссылку из man:install[1], "
+"что освобождает сборщика порта от вычисления относительного пути."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:137
+#, no-wrap
+msgid ""
+"${RLN} ${STAGEDIR}${PREFIX}/lib/libfoo.so.42 ${STAGEDIR}${PREFIX}/lib/libfoo.so\n"
+"${RLN} ${STAGEDIR}${PREFIX}/libexec/foo/bar ${STAGEDIR}${PREFIX}/bin/bar\n"
+"${RLN} ${STAGEDIR}/var/cache/foo ${STAGEDIR}${PREFIX}/share/foo\n"
+msgstr ""
+"${RLN} ${STAGEDIR}${PREFIX}/lib/libfoo.so.42 ${STAGEDIR}${PREFIX}/lib/libfoo.so\n"
+"${RLN} ${STAGEDIR}${PREFIX}/libexec/foo/bar ${STAGEDIR}${PREFIX}/bin/bar\n"
+"${RLN} ${STAGEDIR}/var/cache/foo ${STAGEDIR}${PREFIX}/share/foo\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:140
+msgid "Will generate:"
+msgstr "Будет создано:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:150
+#, no-wrap
+msgid ""
+"% ls -lF ${STAGEDIR}${PREFIX}/lib\n"
+"lrwxr-xr-x 1 nobody nobody 181 Aug 3 11:27 libfoo.so@ -> libfoo.so.42\n"
+"-rwxr-xr-x 1 nobody nobody 15 Aug 3 11:24 libfoo.so.42*\n"
+"% ls -lF ${STAGEDIR}${PREFIX}/bin\n"
+"lrwxr-xr-x 1 nobody nobody 181 Aug 3 11:27 bar@ -> ../libexec/foo/bar\n"
+"% ls -lF ${STAGEDIRDIR}${PREFIX}/share\n"
+"lrwxr-xr-x 1 nobody nobody 181 Aug 3 11:27 foo@ -> ../../../var/cache/foo\n"
+msgstr ""
+"% ls -lF ${STAGEDIR}${PREFIX}/lib\n"
+"lrwxr-xr-x 1 nobody nobody 181 Aug 3 11:27 libfoo.so@ -> libfoo.so.42\n"
+"-rwxr-xr-x 1 nobody nobody 15 Aug 3 11:24 libfoo.so.42*\n"
+"% ls -lF ${STAGEDIR}${PREFIX}/bin\n"
+"lrwxr-xr-x 1 nobody nobody 181 Aug 3 11:27 bar@ -> ../libexec/foo/bar\n"
+"% ls -lF ${STAGEDIRDIR}${PREFIX}/share\n"
+"lrwxr-xr-x 1 nobody nobody 181 Aug 3 11:27 foo@ -> ../../../var/cache/foo\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:155
+#, no-wrap
+msgid "Bundled Libraries"
+msgstr "Встроенные библиотеки"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:158
+msgid ""
+"This section explains why bundled dependencies are considered bad and what "
+"to do about them."
+msgstr ""
+"Этот раздел объясняет, почему встроенные зависимости считаются плохими и что "
+"с этим делать."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:160
+#, no-wrap
+msgid "Why Bundled Libraries Are Bad"
+msgstr "Почему встроенные библиотеки — это плохо"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:165
+msgid ""
+"Some software requires the porter to locate third-party libraries and add "
+"the required dependencies to the port. Other software bundles all necessary "
+"libraries into the distribution file. The second approach seems easier at "
+"first, but there are some serious drawbacks:"
+msgstr ""
+"Некоторое программное обеспечение требует от упаковщика найти сторонние "
+"библиотеки и добавить необходимые зависимости в порт. Другое ПО включает все "
+"необходимые библиотеки в дистрибутивный файл. Второй подход кажется проще на "
+"первый взгляд, но имеет серьёзные недостатки:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:167
+msgid ""
+"This list is loosely based on the https://fedoraproject.org/wiki/"
+"Packaging:No_Bundled_Libraries[Fedora] and https://wiki.gentoo.org/wiki/"
+"Why_not_bundle_dependencies[Gentoo] wikis, both licensed under the https://"
+"creativecommons.org/licenses/by-sa/3.0/[CC-BY-SA 3.0] license."
+msgstr ""
+"Этот список частично основан на вики https://fedoraproject.org/wiki/"
+"Packaging:No_Bundled_Libraries[Fedora] и https://wiki.gentoo.org/wiki/"
+"Why_not_bundle_dependencies[Gentoo], оба распространяются по лицензии "
+"https://creativecommons.org/licenses/by-sa/3.0/[CC-BY-SA 3.0]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:168
+#, no-wrap
+msgid "Security"
+msgstr "Безопасность"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:174
+msgid ""
+"If vulnerabilities are found in the upstream library and fixed there, they "
+"might not be fixed in the library bundled with the port. One reason could "
+"be that the author is not aware of the problem. This means that the porter "
+"must fix them, or upgrade to a non-vulnerable version, and send a patch to "
+"the author. This all takes time, which results in software being vulnerable "
+"longer than necessary. This in turn makes it harder to coordinate a fix "
+"without unnecessarily leaking information about the vulnerability."
+msgstr ""
+"Если уязвимости обнаружены в вышестоящей библиотеке и исправлены там, они "
+"могут остаться неисправленными в библиотеке, поставляемой с портом. Одной из "
+"причин может быть то, что автор не знает о проблеме. Это означает, что "
+"портировщик должен исправить их или обновить до не уязвимой версии и "
+"отправить исправление автору. Всё это требует времени, что приводит к тому, "
+"что программное обеспечение остаётся уязвимым дольше, чем необходимо. Это, в "
+"свою очередь, затрудняет координацию исправления без неоправданного "
+"раскрытия информации об уязвимости."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:175
+#, no-wrap
+msgid "Bugs"
+msgstr "Ошибки"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:177
+msgid ""
+"This problem is similar to the problem with security in the last paragraph, "
+"but generally less severe."
+msgstr ""
+"Эта проблема аналогична проблеме с безопасностью в последнем абзаце, но в "
+"целом менее серьезная."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:178
+#, no-wrap
+msgid "Forking"
+msgstr "Ветвление"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:182
+msgid ""
+"It is easier for the author to fork the upstream library once it is "
+"bundled. While convenient on first sight, it means that the code diverges "
+"from upstream making it harder to address security or other problems with "
+"the software. A reason for this is that patching becomes harder."
+msgstr ""
+"Автору проще создать форк upstream-библиотеки после её включения в "
+"дистрибутив. Хотя на первый взгляд это кажется удобным, такой подход "
+"приводит к расхождению кода с исходным репозиторием, что усложняет "
+"исправление уязвимостей и других проблем в ПО. Одна из причин — затруднённое "
+"применение патчей."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:185
+msgid ""
+"Another problem of forking is that because code diverges from upstream, bugs "
+"get solved over and over again instead of just once at a central location. "
+"This defeats the idea of open source software in the first place."
+msgstr ""
+"Еще одна проблема форкинга заключается в том, что из-за расхождения кода с "
+"основной веткой, ошибки исправляются снова и снова, вместо того чтобы быть "
+"исправленными один раз в центральном месте. Это противоречит самой идее "
+"открытого программного обеспечения."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:186
+#, no-wrap
+msgid "Symbol collision"
+msgstr "Конфликты символов"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:191
+msgid ""
+"When a library is installed on the system, it might collide with the bundled "
+"version. This can cause immediate errors at compile or link time. It can "
+"also cause errors when running the program which might be harder to track "
+"down. The latter problem could be caused because the versions of the two "
+"libraries are incompatible."
+msgstr ""
+"Когда библиотека установлена в системе, может возникнуть конфликт с "
+"встроенной в порт версией. Это может привести к немедленным ошибкам во время "
+"компиляции или компоновки. Также могут возникать ошибки при запуске "
+"программы, которые сложнее отследить. Последняя проблема может быть вызвана "
+"несовместимостью версий двух библиотек."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:192
+#, no-wrap
+msgid "Licensing"
+msgstr "Лицензирование"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:194
+msgid ""
+"When bundling projects from different sources, license issues can arise more "
+"easily, especially when licenses are incompatible."
+msgstr ""
+"При объединении проектов из различных источников могут возникать проблемы с "
+"лицензиями, особенно если лицензии несовместимы."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:195
+#, no-wrap
+msgid "Waste of resources"
+msgstr "Растрата ресурсов"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:199
+msgid ""
+"Bundled libraries waste resources on several levels. It takes longer to "
+"build the actual application, especially if these libraries are already "
+"present on the system. At run-time, they can take up unnecessary memory "
+"when the system-wide library is already loaded by one program and the "
+"bundled library is loaded by another program."
+msgstr ""
+"Библиотеки, поставляемые в комплекте, растрачивают ресурсы на нескольких "
+"уровнях. Сборка самого приложения занимает больше времени, особенно если эти "
+"библиотеки уже присутствуют в системе. Во время выполнения они могут "
+"занимать дополнительную память, когда общесистемная библиотека уже загружена "
+"одной программой, а входящая в комплект библиотека загружена другой "
+"программой."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:200
+#, no-wrap
+msgid "Waste of effort"
+msgstr "Пустая трата усилий"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:204
+msgid ""
+"When a library needs patches for FreeBSD, these patches have to be "
+"duplicated again in the bundled library. This wastes developer time because "
+"the patches might not apply cleanly. It can also be hard to notice that "
+"these patches are required in the first place."
+msgstr ""
+"Когда библиотеке требуются патчи для FreeBSD, эти патчи приходится "
+"дублировать в составе библиотеки. Это приводит к потере времени "
+"разработчиков, поскольку патчи могут применяться некорректно. Кроме того, "
+"бывает сложно сразу заметить, что эти патчи вообще необходимы."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:206
+#, no-wrap
+msgid "What to do About Bundled Libraries"
+msgstr "Что делать со встроенными библиотеками"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:210
+msgid ""
+"Whenever possible, use the unbundled version of the library by adding a "
+"`LIB_DEPENDS` to the port. If such a port does not exist yet, consider "
+"creating it."
+msgstr ""
+"По возможности используйте независимую версию библиотеки, добавив "
+"`LIB_DEPENDS` в порт. Если такого порта ещё не существует, рассмотрите "
+"возможность его создания."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:212
+msgid ""
+"Only use bundled libraries if the upstream has a good track record on "
+"security and using unbundled versions leads to overly complex patches."
+msgstr ""
+"Используйте встроенные библиотеки только в том случае, если разработчик "
+"имеет хорошую репутацию в вопросах безопасности, а использование внешних "
+"версий приводит к излишне сложным исправлениям."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:220
+msgid ""
+"In some very special cases, for example emulators, like Wine, a port has to "
+"bundle libraries, because they are in a different architecture, or they have "
+"been modified to fit the software's use. In that case, those libraries "
+"should not be exposed to other ports for linking. Add `BUNDLE_LIBS=yes` to "
+"the port's [.filename]#Makefile#. This will tell man:pkg[8] to not compute "
+"provided libraries. Always ask the {portmgr} before adding this to a port."
+msgstr ""
+"В некоторых особых случаях, например, для эмуляторов, таких как Wine, порт "
+"должен включать библиотеки, потому что они предназначены для другой "
+"архитектуры или были изменены для использования в данном программном "
+"обеспечении. В таком случае эти библиотеки не должны быть доступны для "
+"связывания с другими портами. Добавьте `BUNDLE_LIBS=yes` в "
+"[.filename]#Makefile# порта. Это укажет man:pkg[8] не учитывать "
+"предоставляемые библиотеки. Всегда спрашивайте {portmgr}, прежде чем "
+"добавлять это в порт."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:223
+#, no-wrap
+msgid "Shared Libraries"
+msgstr "Динамические библиотеки"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:227
+msgid ""
+"If the port installs one or more shared libraries, define a `USE_LDCONFIG` "
+"make variable, which will instruct a [.filename]#bsd.port.mk# to run `$"
+"{LDCONFIG} -m` on the directory where the new library is installed (usually "
+"[.filename]#PREFIX/lib#) during `post-install` target to register it into "
+"the shared library cache. This variable, when defined, will also facilitate "
+"addition of an appropriate `@exec /sbin/ldconfig -m` and `@unexec /sbin/"
+"ldconfig -R` pair into [.filename]#pkg-plist#, so that a user who installed "
+"the package can start using the shared library immediately and de-"
+"installation will not cause the system to still believe the library is there."
+msgstr ""
+"Если ваш порт устанавливает одну или несколько динамических библиотек, "
+"определите переменную `USE_LDCONFIG`, которая приведёт к запуску из "
+"[.filename]#bsd.port.mk# команды `${LDCONFIG} -m` относительно каталога, в "
+"который устанавливается новая библиотека (как правило, это "
+"[.filename]#PREFIX/lib#), во время выполнения цели `post-install` для её "
+"регистрации в кэше динамических библиотек. Эта переменная, если она "
+"определена, также приведёт к добавлению соответствующей пары команд `@exec /"
+"sbin/ldconfig -m` и `@unexec /sbin/ldconfig -R` в ваш файл [.filename]#pkg-"
+"plist#, так что пользователь, устанавливающий пакет, сможет сразу же "
+"использовать динамическую библиотеку, а удаление пакета не приведёт к тому, "
+"что система будет предполагать, что библиотека всё ещё имеется в наличии."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:231
+#, no-wrap
+msgid "USE_LDCONFIG=\tyes\n"
+msgstr "USE_LDCONFIG=\tyes\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:235
+msgid ""
+"The default directory can be overridden by setting `USE_LDCONFIG` to a list "
+"of directories into which shared libraries are to be installed. For "
+"example, if the port installs shared libraries into [.filename]#PREFIX/lib/"
+"foo# and [.filename]#PREFIX/lib/bar# use this in [.filename]#Makefile#:"
+msgstr ""
+"Если нужно, вы можете переопределить каталог по умолчанию, задав значение "
+"`USE_LDCONFIG`, в котором должны быть перечислены каталоги, в которые "
+"устанавливаются динамические библиотеки. Например, если ваш порт "
+"устанавливает динамические библиотеки в каталоги [.filename]#PREFIX/lib/foo# "
+"и [.filename]#PREFIX/lib/bar#, то вы можете в файле [.filename]#Makefile# "
+"указать следующее:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:239
+#, no-wrap
+msgid "USE_LDCONFIG=\t${PREFIX}/lib/foo ${PREFIX}/lib/bar\n"
+msgstr "USE_LDCONFIG=\t${PREFIX}/lib/foo ${PREFIX}/lib/bar\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:242
+msgid ""
+"Please double-check, often this is not necessary at all or can be avoided "
+"through `-rpath` or setting `LD_RUN_PATH` during linking (see package:lang/"
+"mosml[] for an example), or through a shell-wrapper which sets "
+"`LD_LIBRARY_PATH` before invoking the binary, like package:www/seamonkey[] "
+"does."
+msgstr ""
+"Будьте добры перепроверить, т.к. часто это вовсе не является необходимым и "
+"может быть решено иначе с помощью `-rpath` или установки `LD_RUN_PATH` во "
+"время компоновки (для примера смотрите package:lang/moscow_ml[]), или с "
+"помощью сценария-обёртки, который выставляет `LD_LIBRARY_PATH` перед "
+"запуском исполняемого файла как это делает package:www/seamonkey[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:244
+msgid ""
+"When installing 32-bit libraries on a 64-bit system, use `USE_LDCONFIG32` "
+"instead."
+msgstr ""
+"При установке 32-разрядных библиотек на 64-разрядной системе используйте "
+"вместо этого `USE_LDCONFIG32`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:246
+msgid ""
+"If the software uses crossref:special[using-autotools,autotools], and "
+"specifically `libtool`, add crossref:uses[uses-libtool,`USES=libtool`]."
+msgstr ""
+"Если программное обеспечение использует crossref:special[using-"
+"autotools,autotools], в частности `libtool`, добавьте crossref:uses[uses-"
+"libtool,`USES=libtool`]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:248
+msgid ""
+"When the major library version number increments in the update to the new "
+"port version, all other ports that link to the affected library must have "
+"their `PORTREVISION` incremented, to force recompilation with the new "
+"library version."
+msgstr ""
+"Если при обновлении порта увеличивается старший номер версии библиотеки, то "
+"для всех портов, компонуемых с затронутой библиотекой, следует увеличить "
+"значение `PORTREVISION` для форсирования перекомпиляции с новой версией "
+"библиотеки."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:250
+#, no-wrap
+msgid "Ports with Distribution Restrictions or Legal Concerns"
+msgstr "Порты с ограничениями на распространение или с правовым обременением"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:253
+msgid ""
+"Licenses vary, and some of them place restrictions on how the application "
+"can be packaged, whether it can be sold for profit, and so on."
+msgstr ""
+"Лицензии бывают разных видов, и некоторые накладывают ограничение на то, как "
+"приложение может быть оформлено в виде пакета, может ли оно продаваться для "
+"извлечения коммерческой выгоды, и так далее."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:258
+msgid ""
+"It is the responsibility of a porter to read the licensing terms of the "
+"software and make sure that the FreeBSD project will not be held accountable "
+"for violating them by redistributing the source or compiled binaries either "
+"via FTP/HTTP or CD-ROM. If in doubt, please contact the {freebsd-ports}."
+msgstr ""
+"На вас, как на человека, портирующего приложение, ложится обязанность "
+"прочесть лицензионные соглашения на программное обеспечение и "
+"удостовериться, что проект FreeBSD не будет являться их нарушителем, если "
+"будет заниматься распространением исходного кода или в бинарном виде по FTP/"
+"HTTP или на CD-ROM. Если у вас возникли сомнения, то, пожалуйста, обратитесь "
+"в {freebsd-ports}."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:261
+msgid ""
+"In situations like this, the variables described in the next sections can be "
+"set."
+msgstr ""
+"В подобных ситуациях можно использовать переменные, описываемые в "
+"последующих разделах."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:263
+#, no-wrap
+msgid "`NO_PACKAGE`"
+msgstr "`NO_PACKAGE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:267
+msgid ""
+"This variable indicates that we may not generate a binary package of the "
+"application. For instance, the license may disallow binary redistribution, "
+"or it may prohibit distribution of packages created from patched sources."
+msgstr ""
+"Эта переменная указывает, что мы не можем создавать для приложения двоичный "
+"пакет. К примеру, лицензия не позволяет бинарное распространение или она "
+"может запрещать распространение пакетов, созданных из изменённых исходников."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:270
+msgid ""
+"However, the port's `DISTFILES` may be freely mirrored on FTP/HTTP. They "
+"may also be distributed on a CD-ROM (or similar media) unless `NO_CDROM` is "
+"set as well."
+msgstr ""
+"Однако файлы `DISTFILES` могут свободно зеркалироваться по FTP/HTTP. Они "
+"также могут распространяться, используя CD-ROM (или на похожих носителях), "
+"если не установлена переменная `NO_CDROM`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:273
+msgid ""
+"If the binary package is not generally useful, and the application must "
+"always be compiled from the source code, use `NO_PACKAGE`. For example, if "
+"the application has configuration information that is site specific hard "
+"coded into it at compile time, set `NO_PACKAGE`."
+msgstr ""
+"`NO_PACKAGE` должна также использоваться, если двоичный пакет, как правило, "
+"бесполезен, а приложение должно всегда компилироваться из исходного кода. К "
+"примеру, если в приложение во время компиляции жёстко включается "
+"конфигурационная информация, привязанная к конкретной системе, то задайте "
+"переменную `NO_PACKAGE`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:275
+msgid ""
+"Set `NO_PACKAGE` to a string describing the reason why the package cannot be "
+"generated."
+msgstr ""
+"Значением переменной `NO_PACKAGE` должна быть строка, описывающая причину, "
+"по которой пакет не должен создаваться."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:277
+#, no-wrap
+msgid "`NO_CDROM`"
+msgstr "`NO_CDROM`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:281
+msgid ""
+"This variable alone indicates that, although we are allowed to generate "
+"binary packages, we may put neither those packages nor the port's "
+"`DISTFILES` onto a CD-ROM (or similar media) for resale. However, the "
+"binary packages and the port's `DISTFILES` will still be available via FTP/"
+"HTTP."
+msgstr ""
+"Эта переменная указывает на то, что, хотя мы имеем право создавать бинарные "
+"пакеты, мы не можем помещать эти пакеты или файлы `DISTFILES` порта на CD-"
+"ROM (или на похожие носители) для перепродажи. Однако бинарные пакеты и "
+"файлы `DISTFILES` порта будут оставаться доступными посредством FTP/HTTP."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:283
+msgid ""
+"If this variable is set along with `NO_PACKAGE`, then only the port's "
+"`DISTFILES` will be available, and only via FTP/HTTP."
+msgstr ""
+"Если эта переменная устанавливается вместе с `NO_PACKAGE`, то только файлы "
+"порта `DISTFILES` будут доступны, и только посредством FTP/HTTP."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:286
+msgid ""
+"Set `NO_CDROM` to a string describing the reason why the port cannot be "
+"redistributed on CD-ROM. For instance, use this if the port's license is "
+"for \"non-commercial\" use only."
+msgstr ""
+"В качестве значения `NO_CDROM` должна указываться строка, описывающая "
+"причины, по которым порт не может распространяться на CD-ROM. К примеру, это "
+"применяется, если лицензионное соглашение приложения предполагает только его "
+"\"некоммерческое\" использование."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:288
+#, no-wrap
+msgid "`NOFETCHFILES`"
+msgstr "`NOFETCHFILES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:292
+msgid ""
+"Files defined in `NOFETCHFILES` are not fetchable from any of "
+"`MASTER_SITES`. An example of such a file is when the file is supplied on "
+"CD-ROM by the vendor."
+msgstr ""
+"Файлы, определенные в переменной `NOFETCHFILES`, не будут извлекаться ни из "
+"одного из `MASTER_SITES`. Примером такого файла является файл, поставляемый "
+"на CD-ROM."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:294
+msgid ""
+"Tools which check for the availability of these files on `MASTER_SITES` have "
+"to ignore these files and not report about them."
+msgstr ""
+"Инструменты, проверяющие доступность этих файлов на `MASTER_SITES`, должны "
+"игнорировать эти файлы и не сообщать о них."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:296
+#, no-wrap
+msgid "`RESTRICTED`"
+msgstr "`RESTRICTED`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:299
+msgid ""
+"Set this variable alone if the application's license permits neither "
+"mirroring the application's `DISTFILES` nor distributing the binary package "
+"in any way."
+msgstr ""
+"Задайте эту переменную, если лицензия на приложение не позволяет ни "
+"зеркалировать файлы `DISTFILES`, ни распространять бинарный пакет через FTP/"
+"HTTP или на CD-ROM."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:301
+msgid ""
+"Do not set `NO_CDROM` or `NO_PACKAGE` along with `RESTRICTED`, since the "
+"latter variable implies the former ones."
+msgstr ""
+"Ни `NO_CDROM`, ни `NO_PACKAGE` не стоит устанавливать вместе с `RESTRICTED`, "
+"так как последняя переменная подразумевает первые две."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:305
+msgid ""
+"Set `RESTRICTED` to a string describing the reason why the port cannot be "
+"redistributed. Typically, this indicates that the port contains proprietary "
+"software and that the user will need to manually download the `DISTFILES`, "
+"possibly after registering for the software or agreeing to accept the terms "
+"of an EULA."
+msgstr ""
+"В качестве значения `RESTRICTED` должна указываться строка, описывающая "
+"причины, по которым порт нельзя распространять. Обычно это означает, что "
+"порт использует закрытое программное обеспечение, а пользователь должен "
+"вручную сгрузить файлы `DISTFILES`, возможно, после заполнения "
+"регистрационной формы или подтверждения соглашения с условиями EULA."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:307
+#, no-wrap
+msgid "`RESTRICTED_FILES`"
+msgstr "`RESTRICTED_FILES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:311
+msgid ""
+"When `RESTRICTED` or `NO_CDROM` is set, this variable defaults to `$"
+"{DISTFILES} ${PATCHFILES}`, otherwise it is empty. If only some of the "
+"distribution files are restricted, then set this variable to list them."
+msgstr ""
+"Если заданы `RESTRICTED` или `NO_CDROM`, то значение этой переменной по "
+"умолчанию соответствует `${DISTFILES} ${PATCHFILES}`, в противном случае она "
+"пуста. Если ограничены в распространении лишь некоторые из дистрибутивных "
+"файлов, то в этой переменной задаётся их список."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:313
+#, no-wrap
+msgid "`LEGAL_TEXT`"
+msgstr "`LEGAL_TEXT`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:317
+msgid ""
+"If the port has legal concerns not addressed by the above variables, set "
+"`LEGAL_TEXT` to a string explaining the concern. For example, if special "
+"permission was obtained for FreeBSD to redistribute the binary, this "
+"variable must indicate so."
+msgstr ""
+"Если порт имеет правовое обременение, которое не покрывается перечисленными "
+"выше переменными, то переменной `LEGAL_TEXT` следует присвоить строку с "
+"описанием данного обременения. Например, если было получено особое "
+"разрешение для FreeBSD на распространение двоичного файла, то эта переменная "
+"должна содержать соответствующее указание."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:319
+#, no-wrap
+msgid "[.filename]#/usr/ports/LEGAL# and `LEGAL`"
+msgstr "[.filename]#/usr/ports/LEGAL# и `LEGAL`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:325
+msgid ""
+"A port which sets any of the above variables must also be added to "
+"[.filename]#/usr/ports/LEGAL#. The first column is a glob which matches the "
+"restricted distfiles. The second column is the port's origin. The third "
+"column is the output of `make -VLEGAL`."
+msgstr ""
+"Порт, содержащий любую из перечисленных выше переменных, также должен быть "
+"добавлен в [.filename]#/usr/ports/LEGAL#. Первый столбец содержит шаблон "
+"совпадения с дистрибутивными файлами, имеющими ограничения на "
+"распространение. Второй столбец содержит корень порта. Третий столбец "
+"содержит вывод `make -VLEGAL`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:327
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4228
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4488
+#, no-wrap
+msgid "Examples"
+msgstr "Примеры"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:330
+msgid ""
+"The preferred way to state \"the distfiles for this port must be fetched "
+"manually\" is as follows:"
+msgstr ""
+"Предпочтительным способом реализации утверждения \"архивы исходных текстов "
+"для этого порта должны загружаться самостоятельно\" является следующее:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:336
+#, no-wrap
+msgid ""
+".if !exists(${DISTDIR}/${DISTNAME}${EXTRACT_SUFX})\n"
+"IGNORE=\tmay not be redistributed because of licensing reasons. Please visit some-website to accept their license and download ${DISTFILES} into ${DISTDIR}\n"
+".endif\n"
+msgstr ""
+".if !exists(${DISTDIR}/${DISTNAME}${EXTRACT_SUFX})\n"
+"IGNORE=\tmay not be redistributed because of licensing reasons. Please visit some-website to accept their license and download ${DISTFILES} into ${DISTDIR}\n"
+".endif\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:339
+msgid ""
+"This both informs the user, and sets the proper metadata on the user's "
+"machine for use by automated programs."
+msgstr ""
+"Это одновременно и информирует пользователя, и устанавливает нужные "
+"метаданные на пользовательской машине для использования автоматическими "
+"программами."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:341
+msgid ""
+"Note that this stanza must be preceded by an inclusion of "
+"[.filename]#bsd.port.pre.mk#."
+msgstr ""
+"Обратите внимание, что данная кляуза должна предшествовать подключению файла "
+"[.filename]#bsd.port.pre.mk#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:343
+#, no-wrap
+msgid "Building Mechanisms"
+msgstr "Механизмы построения"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:346
+#, no-wrap
+msgid "Building Ports in Parallel"
+msgstr "Параллельное построение портов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:350
+msgid ""
+"The FreeBSD ports framework supports parallel building using multiple `make` "
+"sub-processes, which allows SMP systems to utilize all of their available "
+"CPU power, allowing port builds to be faster and more effective."
+msgstr ""
+"Инфраструктура портов FreeBSD поддерживает параллельное построение с "
+"использованием множественных подпроцессов `make`, что позволяет системам SMP "
+"задействовать всю доступную мощность CPU, тем самым делая построение портов "
+"более быстрым и эффективным."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:355
+msgid ""
+"This is achieved by passing `-jX` flag to man:make[1] running on vendor "
+"code. This is the default build behavior of ports. Unfortunately, not all "
+"ports handle parallel building well and it may be required to explicitly "
+"disable this feature by adding the `MAKE_JOBS_UNSAFE=yes` variable. It is "
+"used when a port is known to be broken with `-jX` due to race conditions "
+"causing intermittent build failures."
+msgstr ""
+"Это достигается путём передачи флага `-jX` команде man:make[1]. Такое "
+"построение портов является поведением по умолчанию. К сожалению, не все "
+"порты поддерживают параллельную сборку достаточно хорошо, и поэтому может "
+"потребоваться выключить этот механизм явным образом путём добавления "
+"переменной `MAKE_JOBS_UNSAFE=yes`. Эта переменная используется в случае, "
+"когда известно, что порт ломается с `-jX`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:360
+msgid ""
+"When setting `MAKE_JOBS_UNSAFE`, it is very important to explain either with "
+"a comment in the [.filename]#Makefile#, or at least in the commit message, "
+"_why_ the port does not build when enabling. Otherwise, it is almost "
+"impossible to either fix the problem, or test if it has been fixed when "
+"committing an update at a later date."
+msgstr ""
+"При установке `MAKE_JOBS_UNSAFE` очень важно объяснить либо комментарием в "
+"[.filename]#Makefile#, либо хотя бы в сообщении коммита, _почему_ порт не "
+"собирается при включении. В противном случае практически невозможно ни "
+"исправить проблему, ни проверить, была ли она исправлена при коммите "
+"обновления в дальнейшем."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:363
+#, no-wrap
+msgid "`make`, `gmake`, and `imake`"
+msgstr "`make`, `gmake` и `imake`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:366
+msgid ""
+"Several differing `make` implementations exist. Ported software often "
+"requires a particular implementation, like GNU `make`, known in FreeBSD as "
+"`gmake`."
+msgstr ""
+"Существует несколько различных реализаций `make`. Переносимому программному "
+"обеспечению часто требуется конкретная реализация, например GNU `make`, "
+"известная в FreeBSD как `gmake`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:368
+msgid "If the port uses GNU make, add `gmake` to `USES`."
+msgstr "Если порт использует GNU make, добавьте `gmake` в `USES`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:371
+msgid ""
+"`MAKE_CMD` can be used to reference the specific command configured by the "
+"`USES` setting in the port's [.filename]#Makefile#. Only use `MAKE_CMD` "
+"within the application [.filename]##Makefile##s in `WRKSRC` to call the "
+"`make` implementation expected by the ported software."
+msgstr ""
+"`MAKE_CMD` может использоваться для ссылки на конкретную команду, "
+"настроенную параметром `USES` в [.filename]#Makefile# порта. Используйте "
+"`MAKE_CMD` только внутри [.filename]##Makefile## приложения в `WRKSRC` для "
+"вызова реализации `make`, ожидаемой портируемым программным обеспечением."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:374
+msgid ""
+"If the port is an X application that uses imake to create "
+"[.filename]##Makefile##s from [.filename]##Imakefile##s, set `USES= imake`. "
+"See the crossref:uses[uses-imake,`USES=imake`] section of "
+"crossref:uses[uses,Using `USES` Macros] for more details."
+msgstr ""
+"Если ваш порт является приложением X, которое создает файлы "
+"[.filename]#Makefile# из [.filename]#Imakefile#, используя imake, то "
+"установите `USES= imake`. Это заставит стадию конфигурирования автоматически "
+"выполнить `xmkmf -a`. Если флаг `-a` представляет для вашего порта проблему, "
+"то установите `XMKMF=xmkmf`. Если порт использует imake, но не понимает цель "
+"`install.man`, то следует установить `NO_INSTALL_MANPAGES=yes`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:377
+msgid ""
+"If the port's source [.filename]#Makefile# has something other than `all` as "
+"the main build target, set `ALL_TARGET` accordingly. The same goes for "
+"`install` and `INSTALL_TARGET`."
+msgstr ""
+"Если исходный [.filename]#Makefile# вашего порта имеет что-нибудь помимо "
+"`all` в качестве основной цели построения, то задайте соответствующее "
+"значение `ALL_TARGET`. То же касается `install` и `INSTALL_TARGET`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:379
+#, no-wrap
+msgid "`configure` Script"
+msgstr "Сценарий `configure`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:384
+msgid ""
+"If the port uses the `configure` script to generate [.filename]#Makefile# "
+"from [.filename]#Makefile.in#, set `GNU_CONFIGURE=yes`. To give extra "
+"arguments to the `configure` script (the default argument is `--prefix=$"
+"{PREFIX} --infodir=${PREFIX}/${INFO_PATH} --mandir=${PREFIX}/man --build=$"
+"{CONFIGURE_TARGET}`), set those extra arguments in `CONFIGURE_ARGS`. Extra "
+"environment variables can be passed using `CONFIGURE_ENV`."
+msgstr ""
+"Если ваш порт использует сценарий `configure` для получения файлов "
+"[.filename]#Makefile# из файлов [.filename]#Makefile.in#, то установите "
+"`GNU_CONFIGURE=yes`. Если вы хотите дать дополнительные параметры сценарию "
+"`configure` (аргументом по умолчанию является `--prefix=${PREFIX} --infodir=$"
+"{PREFIX}/${INFO_PATH} --mandir=${MANPREFIX}/man --build=${CONFIGURE_TARGET}"
+"`), установите эти параметры в `CONFIGURE_ARGS`. Дополнительные переменные "
+"окружения можно передать, используя переменную `CONFIGURE_ENV`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:386
+#, no-wrap
+msgid "Variables for Ports That Use `configure`"
+msgstr "Переменные для портов, использующих `configure`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:390
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:418
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:446
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:529
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:812
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2449
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2469
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3173
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3205
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3790
+#, no-wrap
+msgid "Variable"
+msgstr "Переменная"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:392
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:420
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:448
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1325
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3175
+#, no-wrap
+msgid "Means"
+msgstr "Значение"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:393
+#, no-wrap
+msgid "`GNU_CONFIGURE`"
+msgstr "`GNU_CONFIGURE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:395
+#, no-wrap
+msgid "The port uses `configure` script to prepare build."
+msgstr "Порт использует сценарий `configure` для подготовки построения."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:396
+#, no-wrap
+msgid "`HAS_CONFIGURE`"
+msgstr "`HAS_CONFIGURE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:398
+#, no-wrap
+msgid "Same as `GNU_CONFIGURE`, except default configure target is not added to `CONFIGURE_ARGS`."
+msgstr "То же, что и `GNU_CONFIGURE`, кроме того, что цель configure по умолчанию не добавляется в `CONFIGURE_ARGS`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:399
+#, no-wrap
+msgid "`CONFIGURE_ARGS`"
+msgstr "`CONFIGURE_ARGS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:401
+#, no-wrap
+msgid "Additional arguments passed to `configure` script."
+msgstr "Дополнительные параметры, передаваемые сценарию `configure`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:402
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:438
+#, no-wrap
+msgid "`CONFIGURE_ENV`"
+msgstr "`CONFIGURE_ENV`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:404
+#, no-wrap
+msgid "Additional environment variables to be set for `configure` script run."
+msgstr "Дополнительные переменные окружения, задаваемые для запуска сценария `configure`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:405
+#, no-wrap
+msgid "`CONFIGURE_TARGET`"
+msgstr "`CONFIGURE_TARGET`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:406
+#, no-wrap
+msgid "Override default configure target. Default value is `${MACHINE_ARCH}-portbld-freebsd${OSREL}`."
+msgstr "Переопределить цель configure по умолчанию. Значением по умолчанию является `${MACHINE_ARCH}-portbld-freebsd${OSREL}`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:409
+#, no-wrap
+msgid "Using `cmake`"
+msgstr "Использование `cmake`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:412
+msgid "For ports that use CMake, define `USES= cmake`."
+msgstr "Если порт использует CMake, определите `USES= cmake`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:414
+#, no-wrap
+msgid "Variables for Ports That Use `cmake`"
+msgstr "Переменные для портов, использующих `cmake`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:421
+#, no-wrap
+msgid "`CMAKE_ARGS`"
+msgstr "`CMAKE_ARGS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:423
+#, no-wrap
+msgid "Port specific CMake flags to be passed to the `cmake` binary."
+msgstr "Специфичные для порта флаги CMake, передаваемые в бинарный файл `cmake`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:424
+#, no-wrap
+msgid "`CMAKE_ON`"
+msgstr "`CMAKE_ON`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:427
+#, no-wrap
+msgid ""
+"For each entry in `CMAKE_ON`, an enabled boolean value is added to\n"
+"`CMAKE_ARGS`. See crossref:special[using-cmake-example2,`CMAKE_ON` and `CMAKE_OFF`]."
+msgstr ""
+"Для каждой записи в `CMAKE_ON` добавляется булево значение \"включено\" в\n"
+"`CMAKE_ARGS`. См. crossref:special[using-cmake-example2,`CMAKE_ON` и `CMAKE_OFF`]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:428
+#, no-wrap
+msgid "`CMAKE_OFF`"
+msgstr "`CMAKE_OFF`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:431
+#, no-wrap
+msgid ""
+"For each entry in `CMAKE_OFF`, a disabled boolean value is added to\n"
+"`CMAKE_ARGS`. See crossref:special[using-cmake-example2,`CMAKE_ON` and `CMAKE_OFF`]."
+msgstr ""
+"Для каждой записи в `CMAKE_OFF` в `CMAKE_ARGS` добавляется отключенное булево\n"
+"значение. См. crossref:special[using-cmake-example2,`CMAKE_ON` и `CMAKE_OFF`]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:432
+#, no-wrap
+msgid "`CMAKE_BUILD_TYPE`"
+msgstr "`CMAKE_BUILD_TYPE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:434
+#, no-wrap
+msgid "Type of build (CMake predefined build profiles). Default is `Release`, or `Debug` if `WITH_DEBUG` is set."
+msgstr "Тип сборки (предопределённые профили сборки CMake). По умолчанию `Release`, или `Debug`, если установлен `WITH_DEBUG`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:435
+#, no-wrap
+msgid "`CMAKE_SOURCE_PATH`"
+msgstr "`CMAKE_SOURCE_PATH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:437
+#, no-wrap
+msgid "Path to the source directory. Default is `${WRKSRC}`."
+msgstr "Путь к исходному каталогу. По умолчанию `${WRKSRC}`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:439
+#, no-wrap
+msgid "Additional environment variables to be set for the `cmake` binary."
+msgstr "Дополнительные переменные окружения, которые должны быть установлены для бинарного файла `cmake`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:442
+#, no-wrap
+msgid "Variables the Users Can Define for `cmake` Builds"
+msgstr "Переменные, которые пользователи могут определить для сборок `cmake`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:449
+#, no-wrap
+msgid "`CMAKE_NOCOLOR`"
+msgstr "`CMAKE_NOCOLOR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:450
+#, no-wrap
+msgid "Disables color build output. Default not set, unless `BATCH` or `PACKAGE_BUILDING` are set."
+msgstr "Запрещает цветной вывод сообщений при построении. Значение по умолчанию не задано, если не заданы `BATCH` или `PACKAGE_BUILDING`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:457
+msgid ""
+"CMake supports these build profiles: `Debug`, `Release`, `RelWithDebInfo` "
+"and `MinSizeRel`. `Debug` and `Release` profiles respect system `\\*FLAGS`, "
+"`RelWithDebInfo` and `MinSizeRel` will set `CFLAGS` to `-O2 -g` and `-Os "
+"-DNDEBUG` correspondingly. The lower-cased value of `CMAKE_BUILD_TYPE` is "
+"exported to `PLIST_SUB` and must be used if the port installs "
+"[.filename]#*.cmake# depending on the build type (see package:devel/kf5-"
+"kcrash[] for an example). Please note that some projects may define their "
+"own build profiles and/or force particular build type by setting "
+"`CMAKE_BUILD_TYPE` in [.filename]#CMakeLists.txt#. To make a port for such "
+"a project respect `CFLAGS` and `WITH_DEBUG`, the `CMAKE_BUILD_TYPE` "
+"definitions must be removed from those files."
+msgstr ""
+"CMake поддерживает следующие профили построения: `Debug`, `Release`, "
+"`RelWithDebInfo` и `MinSizeRel`. Профили `Debug` и `Release` учитывают "
+"системные флаги `\\*FLAGS`; `RelWithDebInfo` и `MinSizeRel` соответственно "
+"определяют `CFLAGS` со значением `-O2 -g` и `-Os -DNDEBUG`. Значение "
+"`CMAKE_BUILD_TYPE` экспортируется в нижнем регистре в `PLIST_SUB` и должно "
+"использоваться, если порт устанавливает файлы `*.cmake` в зависимости от "
+"типа построения (для примера посмотрите на package:deskutils/strigi[]). "
+"Следует учитывать, что некоторые проекты могут определять собственные "
+"профили построения и/или форсировать конкретный тип построения через "
+"установку `CMAKE_BUILD_TYPE` в файлах [.filename]#CMakeLists.txt#. Для того "
+"чтобы порт для такого проекта учитывал `CFLAGS` и `WITH_DEBUG`, из этих "
+"файлов должны быть удалены значения `CMAKE_BUILD_TYPE`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:462
+msgid ""
+"Most CMake-based projects support an out-of-source method of building. The "
+"out-of-source build for a port is the default setting. An in-source build "
+"can be requested by using the `:insource` suffix. With out-of-source "
+"builds, `CONFIGURE_WRKSRC`, `BUILD_WRKSRC` and `INSTALL_WRKSRC` will be set "
+"to `${WRKDIR}/.build` and this directory will be used to keep all files "
+"generated during configuration and build stages, leaving the source "
+"directory intact."
+msgstr ""
+"Большинство проектов, основанных на CMake, поддерживают метод внешнего (out-"
+"of-source) построения. Для порта внешнее построение можно запросить с "
+"использованием суффикса `:outsource`. В этом случае `CONFIGURE_WRKSRC`, "
+"`BUILD_WRKSRC` и `INSTALL_WRKSRC` будут иметь значение `${WRKDIR}/.build` "
+"для каталога, содержащего файлы, получаемые на этапах конфигурации и "
+"построения; при этом каталог с исходным кодом будет оставаться без изменений."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:464
+#, no-wrap
+msgid "`USES= cmake` Example"
+msgstr "Пример для `USES= cmake`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:469
+msgid ""
+"This snippet demonstrates the use of CMake for a port. `CMAKE_SOURCE_PATH` "
+"is not usually required, but can be set when the sources are not located in "
+"the top directory, or if only a subset of the project is intended to be "
+"built by the port."
+msgstr ""
+"Следующий отрывок демонстрирует использование CMake для порта. "
+"`CMAKE_SOURCE_PATH` обычно не требуется, но может быть установлен, когда "
+"исходный код не находится в верхнем каталоге или если порт используется для "
+"построения части проекта."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:474
+#, no-wrap
+msgid ""
+"USES=\t\t\tcmake\n"
+"CMAKE_SOURCE_PATH=\t${WRKSRC}/subproject\n"
+msgstr ""
+"USES=\t\t\tcmake\n"
+"CMAKE_SOURCE_PATH=\t${WRKSRC}/subproject\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:479
+#, no-wrap
+msgid "`CMAKE_ON` and `CMAKE_OFF`"
+msgstr "`CMAKE_ON` и `CMAKE_OFF`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:483
+msgid ""
+"When adding boolean values to `CMAKE_ARGS`, it is easier to use the "
+"`CMAKE_ON` and `CMAKE_OFF` variables instead. This:"
+msgstr ""
+"При добавлении логических значений в `CMAKE_ARGS` проще использовать "
+"переменные `CMAKE_ON` и `CMAKE_OFF` вместо этого. Это:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:488
+#, no-wrap
+msgid ""
+"CMAKE_ON=\tVAR1 VAR2\n"
+"CMAKE_OFF=\tVAR3\n"
+msgstr ""
+"CMAKE_ON=\tVAR1 VAR2\n"
+"CMAKE_OFF=\tVAR3\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:491
+msgid "Is equivalent to:"
+msgstr "Эквивалентно:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:495
+#, no-wrap
+msgid "CMAKE_ARGS=\t-DVAR1:BOOL=TRUE -DVAR2:BOOL=TRUE -DVAR3:BOOL=FALSE\n"
+msgstr "CMAKE_ARGS=\t-DVAR1:BOOL=TRUE -DVAR2:BOOL=TRUE -DVAR3:BOOL=FALSE\n"
+
+#. type: delimited block = 6
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:501
+msgid ""
+"This is only for the default values off `CMAKE_ARGS`. The helpers described "
+"in crossref:makefiles[options-cmake_bool,`OPT_CMAKE_BOOL` and "
+"`OPT_CMAKE_BOOL_OFF`] use the same semantics, but for optional values."
+msgstr ""
+"Это относится только к значениям по умолчанию в `CMAKE_ARGS`. "
+"Вспомогательные функции, описанные в crossref:makefiles[options-"
+"cmake_bool,`OPT_CMAKE_BOOL` и `OPT_CMAKE_BOOL_OFF`], используют ту же "
+"семантику, но для опциональных значений."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:506
+#, no-wrap
+msgid "Using `scons`"
+msgstr "Использование `scons`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:509
+msgid "If the port uses SCons, define `USES=scons`."
+msgstr "Если порт использует SCons, определите `USES=scons`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:511
+msgid ""
+"To make third party [.filename]#SConstruct# respect everything that is "
+"passed to SCons in the environment (that is, most importantly, `CC/CXX/"
+"CFLAGS/CXXFLAGS`), patch [.filename]#SConstruct# so build `Environment` is "
+"constructed like this:"
+msgstr ""
+"Чтобы сторонний [.filename]#SConstruct# учитывал все, что передается в SCons "
+"через окружение (то есть, что наиболее важно, `CC/CXX/CFLAGS/CXXFLAGS`), "
+"исправьте [.filename]#SConstruct#, чтобы сборка `Environment` создавалась "
+"следующим образом:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:515
+#, no-wrap
+msgid "env = Environment(**ARGUMENTS)\n"
+msgstr "env = Environment(**ARGUMENTS)\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:518
+msgid "It may be then modified with `env.Append` and `env.Replace`."
+msgstr "Он может быть изменён с помощью `env.Append` и `env.Replace`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:520
+#, no-wrap
+msgid "Building Rust Applications with `cargo`"
+msgstr "Сборка приложений на Rust с помощью `cargo`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:523
+msgid "For ports that use Cargo, define `USES=cargo`."
+msgstr "Для портов, использующих Cargo, определите `USES=cargo`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:525
+#, no-wrap
+msgid "Variables the Users Can Define for `cargo` Builds"
+msgstr "Переменные, которые пользователи могут определить для сборок `cargo`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:530
+#, no-wrap
+msgid "Default"
+msgstr "По умолчанию"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:532
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:814
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1733
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1901
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1919
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2087
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2153
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2397
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2414
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2451
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2471
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2547
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3127
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3791
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3825
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3868
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3894
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3998
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4168
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4220
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4312
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4404
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4466
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4726
+#, no-wrap
+msgid "Description"
+msgstr "Описание"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:533
+#, no-wrap
+msgid "`CARGO_CRATES`"
+msgstr "`CARGO_CRATES`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:539
+#, no-wrap
+msgid ""
+"List of crates the port depends on. Each entry needs to have a format like `cratename-semver` for example, `libc-0.2.40`. Port maintainers can generate this list from [.filename]#Cargo.lock# using `make cargo-crates`. Manually bumping crate versions is possible but be mindful of transitive dependencies.\n"
+"If the list generated by `make cargo-crates` is big, it might be convenient to place it inside a `Makefile.crates` file in the top-level port directory.\n"
+"If present, the ports framework sources that file automatically.\n"
+"This help keep the main port Makefile within a manageable size."
+msgstr ""
+"Список ящиков (crates), от которых зависит порт. Каждая запись должна быть в формате `имя_ящика-семвер`, например, `libc-0.2.40`. Поддерживающие порт могут сгенерировать этот список из файла [.filename]#Cargo.lock# с помощью команды `make cargo-crates`. Вручную обновлять версии ящиков возможно, но следует учитывать транзитивные зависимости.\n"
+"Если список, сгенерированный `make cargo-crates`, слишком велик, его можно разместить в файле `Makefile.crates` в корневом каталоге порта.\n"
+"Если такой файл присутствует, фреймворк портов автоматически загружает его.\n"
+"Это помогает сохранять основной Makefile порта в удобном для работы размере."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:540
+#, no-wrap
+msgid "`CARGO_FEATURES`"
+msgstr "`CARGO_FEATURES`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:543
+#, no-wrap
+msgid "List of application features to build (space separated list). To deactivate all default features add the special token `--no-default-features` to `CARGO_FEATURES`. Manually passing it to `CARGO_BUILD_ARGS`, `CARGO_INSTALL_ARGS`, and `CARGO_TEST_ARGS` is not needed."
+msgstr "Список функций приложения для сборки (список через пробел). Чтобы отключить все функции по умолчанию, добавьте специальный токен `--no-default-features` в `CARGO_FEATURES`. Вручную передавать его в `CARGO_BUILD_ARGS`, `CARGO_INSTALL_ARGS` и `CARGO_TEST_ARGS` не требуется."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:544
+#, no-wrap
+msgid "`CARGO_CARGOTOML`"
+msgstr "`CARGO_CARGOTOML`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:545
+#, no-wrap
+msgid "`${WRKSRC}/Cargo.toml`"
+msgstr "`${WRKSRC}/Cargo.toml`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:547
+#, no-wrap
+msgid "The path to the [.filename]#Cargo.toml# to use."
+msgstr "Путь к файлу [.filename]#Cargo.toml#, который следует использовать."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:548
+#, no-wrap
+msgid "`CARGO_CARGOLOCK`"
+msgstr "`CARGO_CARGOLOCK`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:549
+#, no-wrap
+msgid "`${WRKSRC}/Cargo.lock`"
+msgstr "`${WRKSRC}/Cargo.lock`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:551
+#, no-wrap
+msgid "The path to the [.filename]#Cargo.lock# to use for `make cargo-crates`. It is possible to specify more than one lock file when necessary."
+msgstr "Путь к файлу [.filename]#Cargo.lock#, используемому для `make cargo-crates`. Можно указать более одного файла блокировки, если это необходимо."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:552
+#, no-wrap
+msgid "`CARGO_ENV`"
+msgstr "`CARGO_ENV`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:555
+#, no-wrap
+msgid "A list of environment variables to pass to Cargo similar to `MAKE_ENV`."
+msgstr "Список переменных окружения, передаваемых в Cargo, аналогично `MAKE_ENV`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:556
+#, no-wrap
+msgid "`RUSTFLAGS`"
+msgstr "`RUSTFLAGS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:559
+#, no-wrap
+msgid "Flags to pass to the Rust compiler."
+msgstr "Флаги для передачи компилятору Rust."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:560
+#, no-wrap
+msgid "`CARGO_CONFIGURE`"
+msgstr "`CARGO_CONFIGURE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:561
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:569
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:577
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:585
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:597
+#, no-wrap
+msgid "`yes`"
+msgstr "`yes`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:563
+#, no-wrap
+msgid "Use the default `do-configure`."
+msgstr "Используйте стандартный `do-configure`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:564
+#, no-wrap
+msgid "`CARGO_UPDATE_ARGS`"
+msgstr "`CARGO_UPDATE_ARGS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:567
+#, no-wrap
+msgid "Extra arguments to pass to Cargo during the configure phase. Valid arguments can be looked up with `cargo update --help`."
+msgstr "Дополнительные аргументы для передачи Cargo во время фазы настройки. Допустимые аргументы можно посмотреть с помощью `cargo update --help`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:568
+#, no-wrap
+msgid "`CARGO_BUILDDEP`"
+msgstr "`CARGO_BUILDDEP`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:571
+#, no-wrap
+msgid "Add a build dependency on package:lang/rust[]."
+msgstr "Добавить зависимость сборки на package:lang/rust[]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:572
+#, no-wrap
+msgid "`CARGO_CARGO_BIN`"
+msgstr "`CARGO_CARGO_BIN`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:573
+#, no-wrap
+msgid "`${LOCALBASE}/bin/cargo`"
+msgstr "`${LOCALBASE}/bin/cargo`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:575
+#, no-wrap
+msgid "Location of the `cargo` binary."
+msgstr "Расположение бинарного файла `cargo`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:576
+#, no-wrap
+msgid "`CARGO_BUILD`"
+msgstr "`CARGO_BUILD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:579
+#, no-wrap
+msgid "Use the default `do-build`."
+msgstr "Используйте значение по умолчанию `do-build`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:580
+#, no-wrap
+msgid "`CARGO_BUILD_ARGS`"
+msgstr "`CARGO_BUILD_ARGS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:583
+#, no-wrap
+msgid "Extra arguments to pass to Cargo during the build phase. Valid arguments can be looked up with `cargo build --help`."
+msgstr "Дополнительные аргументы для передачи Cargo во время фазы сборки. Допустимые аргументы можно посмотреть с помощью `cargo build --help`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:584
+#, no-wrap
+msgid "`CARGO_INSTALL`"
+msgstr "`CARGO_INSTALL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:587
+#, no-wrap
+msgid "Use the default `do-install`."
+msgstr "Используйте настройку `do-install` по умолчанию."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:588
+#, no-wrap
+msgid "`CARGO_INSTALL_ARGS`"
+msgstr "`CARGO_INSTALL_ARGS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:591
+#, no-wrap
+msgid "Extra arguments to pass to Cargo during the install phase. Valid arguments can be looked up with `cargo install --help`."
+msgstr "Дополнительные аргументы для передачи Cargo во время фазы установки. Допустимые аргументы можно посмотреть с помощью `cargo install --help`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:592
+#, no-wrap
+msgid "`CARGO_INSTALL_PATH`"
+msgstr "`CARGO_INSTALL_PATH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:593
+#, no-wrap
+msgid "`.`"
+msgstr "`.`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:595
+#, no-wrap
+msgid "Path to the crate to install. This is passed to `cargo install` via its `--path` argument. When multiple paths are specified `cargo install` is run multiple times."
+msgstr "Путь к пакету для установки. Этот аргумент передается в `cargo install` через параметр `--path`. Если указано несколько путей, `cargo install` запускается несколько раз."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:596
+#, no-wrap
+msgid "`CARGO_TEST`"
+msgstr "`CARGO_TEST`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:599
+#, no-wrap
+msgid "Use the default `do-test`."
+msgstr "Используйте значение по умолчанию `do-test`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:600
+#, no-wrap
+msgid "`CARGO_TEST_ARGS`"
+msgstr "`CARGO_TEST_ARGS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:603
+#, no-wrap
+msgid "Extra arguments to pass to Cargo during the test phase. Valid arguments can be looked up with `cargo test --help`."
+msgstr "Дополнительные аргументы для передачи Cargo во время тестовой фазы. Допустимые аргументы можно посмотреть с помощью `cargo test --help`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:604
+#, no-wrap
+msgid "`CARGO_TARGET_DIR`"
+msgstr "`CARGO_TARGET_DIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:605
+#, no-wrap
+msgid "`${WRKDIR}/target`"
+msgstr "`${WRKDIR}/target`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:607
+#, no-wrap
+msgid "Location of the cargo output directory."
+msgstr "Расположение выходного каталога cargo."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:608
+#, no-wrap
+msgid "`CARGO_DIST_SUBDIR`"
+msgstr "`CARGO_DIST_SUBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:609
+#, no-wrap
+msgid "[.filename]#rust/crates#"
+msgstr "[.filename]#rust/crates#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:611
+#, no-wrap
+msgid "Directory relative to `DISTDIR` where the crate distribution files will be stored."
+msgstr "Каталог относительно `DISTDIR`, в котором будут храниться файлы дистрибутивов пакетов (crates)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:612
+#, no-wrap
+msgid "`CARGO_VENDOR_DIR`"
+msgstr "`CARGO_VENDOR_DIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:613
+#, no-wrap
+msgid "`${WRKSRC}/cargo-crates`"
+msgstr "`${WRKSRC}/cargo-crates`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:615
+#, no-wrap
+msgid "Location of the vendor directory where all crates will be extracted to. Try to keep this under `PATCH_WRKSRC`, so that patches can be applied easily."
+msgstr "Расположение каталога сторонних поставщиков ПО, в который будут извлечены все крейты. Старайтесь держать его в пределах `PATCH_WRKSRC`, чтобы упростить применение патчей."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:616
+#, no-wrap
+msgid "`CARGO_USE_GITHUB`"
+msgstr "`CARGO_USE_GITHUB`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:617
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:621
+#, no-wrap
+msgid "`no`"
+msgstr "`no`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:619
+#, no-wrap
+msgid "Enable fetching of crates locked to specific Git commits on GitHub via `GH_TUPLE`. This will try to patch all [.filename]#Cargo.toml# under `WRKDIR` to point to the offline sources instead of fetching them from a Git repository during the build."
+msgstr "Включить загрузку крейтов, привязанных к определённым коммитам Git на GitHub, с помощью `GH_TUPLE`. Это попытается исправить все файлы [.filename]#Cargo.toml# в `WRKDIR`, чтобы они ссылались на автономные источники вместо загрузки из репозитория Git во время сборки."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:620
+#, no-wrap
+msgid "`CARGO_USE_GITLAB`"
+msgstr "`CARGO_USE_GITLAB`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:622
+#, no-wrap
+msgid "Same as `CARGO_USE_GITHUB` but for GitLab instances and `GL_TUPLE`."
+msgstr "То же, что и `CARGO_USE_GITHUB`, но для экземпляров GitLab и `GL_TUPLE`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:625
+#, no-wrap
+msgid "Creating a Port for a Simple Rust Application"
+msgstr "Создание порта для простого приложения на Rust"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:630
+msgid ""
+"Creating a Cargo based port is a three stage process. First we need to "
+"provide a ports template that fetches the application distribution file:"
+msgstr ""
+"Создание порта на основе Cargo — это процесс из трёх этапов. Сначала "
+"необходимо предоставить шаблон портов, который загружает дистрибутивный файл "
+"приложения:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:637
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:682
+#, no-wrap
+msgid ""
+"PORTNAME=\ttokei\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION=\t7.0.2\n"
+"CATEGORIES=\tdevel\n"
+msgstr ""
+"PORTNAME=\ttokei\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION=\t7.0.2\n"
+"CATEGORIES=\tdevel\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:641
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:686
+#, no-wrap
+msgid ""
+"MAINTAINER=\ttobik@FreeBSD.org\n"
+"COMMENT=\tDisplay statistics about your code\n"
+"WWW=\t\thttps://github.com/XAMPPRocky/tokei/\n"
+msgstr ""
+"MAINTAINER=\ttobik@FreeBSD.org\n"
+"COMMENT=\tDisplay statistics about your code\n"
+"WWW=\t\thttps://github.com/XAMPPRocky/tokei/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:645
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:690
+#, no-wrap
+msgid ""
+"USES=\t\tcargo\n"
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tAaronepower\n"
+msgstr ""
+"USES=\t\tcargo\n"
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tAaronepower\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:647
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:700
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:867
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:890
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:948
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1019
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1106
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1122
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1136
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1253
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1274
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1647
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3475
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3535
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3651
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4252
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4276
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4514
+#, no-wrap
+msgid ".include <bsd.port.mk>\n"
+msgstr ".include <bsd.port.mk>\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:650
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:893
+msgid "Generate an initial [.filename]#distinfo#:"
+msgstr "Сгенерировать первоначальный [.filename]#distinfo#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:658
+#, no-wrap
+msgid ""
+"% make makesum\n"
+"=> Aaronepower-tokei-v7.0.2_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://codeload.github.com/Aaronepower/tokei/tar.gz/v7.0.2?dummy=/Aaronepower-tokei-v7.0.2_GH0.tar.gz\n"
+"fetch: https://codeload.github.com/Aaronepower/tokei/tar.gz/v7.0.2?dummy=/Aaronepower-tokei-v7.0.2_GH0.tar.gz: size of remote file is not known\n"
+"Aaronepower-tokei-v7.0.2_GH0.tar.gz 45 kB 239 kBps 00m00s\n"
+msgstr ""
+"% make makesum\n"
+"=> Aaronepower-tokei-v7.0.2_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://codeload.github.com/Aaronepower/tokei/tar.gz/v7.0.2?dummy=/Aaronepower-tokei-v7.0.2_GH0.tar.gz\n"
+"fetch: https://codeload.github.com/Aaronepower/tokei/tar.gz/v7.0.2?dummy=/Aaronepower-tokei-v7.0.2_GH0.tar.gz: size of remote file is not known\n"
+"Aaronepower-tokei-v7.0.2_GH0.tar.gz 45 kB 239 kBps 00m00s\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:661
+msgid ""
+"Now the distribution file is ready to use and we can go ahead and extract "
+"crate dependencies from the bundled [.filename]#Cargo.lock#:"
+msgstr ""
+"Теперь файл дистрибутива готов к использованию, и мы можем продолжить, "
+"извлекая зависимости пакета из встроенного файла [.filename]#Cargo.lock#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:672
+#, no-wrap
+msgid ""
+"% make cargo-crates\n"
+"CARGO_CRATES= aho-corasick-0.6.4 \\\n"
+" ansi_term-0.11.0 \\\n"
+" arrayvec-0.4.7 \\\n"
+" atty-0.2.9 \\\n"
+" bitflags-1.0.1 \\\n"
+" byteorder-1.2.2 \\\n"
+" [...]\n"
+msgstr ""
+"% make cargo-crates\n"
+"CARGO_CRATES= aho-corasick-0.6.4 \\\n"
+" ansi_term-0.11.0 \\\n"
+" arrayvec-0.4.7 \\\n"
+" atty-0.2.9 \\\n"
+" bitflags-1.0.1 \\\n"
+" byteorder-1.2.2 \\\n"
+" [...]\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:675
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:923
+msgid ""
+"The output of this command needs to be pasted directly into the Makefile:"
+msgstr "Вывод этой команды необходимо вставить напрямую в Makefile:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:698
+#, no-wrap
+msgid ""
+"CARGO_CRATES= aho-corasick-0.6.4 \\\n"
+" ansi_term-0.11.0 \\\n"
+" arrayvec-0.4.7 \\\n"
+" atty-0.2.9 \\\n"
+" bitflags-1.0.1 \\\n"
+" byteorder-1.2.2 \\\n"
+" [...]\n"
+msgstr ""
+"CARGO_CRATES= aho-corasick-0.6.4 \\\n"
+" ansi_term-0.11.0 \\\n"
+" arrayvec-0.4.7 \\\n"
+" atty-0.2.9 \\\n"
+" bitflags-1.0.1 \\\n"
+" byteorder-1.2.2 \\\n"
+" [...]\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:703
+msgid ""
+"[.filename]#distinfo# needs to be regenerated to contain all the crate "
+"distribution files:"
+msgstr ""
+"[.filename]#distinfo# необходимо перегенерировать, чтобы включить все "
+"дистрибутивные файлы крейтов:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:721
+#, no-wrap
+msgid ""
+"% make makesum\n"
+"=> rust/crates/aho-corasick-0.6.4.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://crates.io/api/v1/crates/aho-corasick/0.6.4/download?dummy=/rust/crates/aho-corasick-0.6.4.tar.gz\n"
+"rust/crates/aho-corasick-0.6.4.tar.gz 100% of 24 kB 6139 kBps 00m00s\n"
+"=> rust/crates/ansi_term-0.11.0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://crates.io/api/v1/crates/ansi_term/0.11.0/download?dummy=/rust/crates/ansi_term-0.11.0.tar.gz\n"
+"rust/crates/ansi_term-0.11.0.tar.gz 100% of 16 kB 21 MBps 00m00s\n"
+"=> rust/crates/arrayvec-0.4.7.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://crates.io/api/v1/crates/arrayvec/0.4.7/download?dummy=/rust/crates/arrayvec-0.4.7.tar.gz\n"
+"rust/crates/arrayvec-0.4.7.tar.gz 100% of 22 kB 3237 kBps 00m00s\n"
+"=> rust/crates/atty-0.2.9.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://crates.io/api/v1/crates/atty/0.2.9/download?dummy=/rust/crates/atty-0.2.9.tar.gz\n"
+"rust/crates/atty-0.2.9.tar.gz 100% of 5898 B 81 MBps 00m00s\n"
+"=> rust/crates/bitflags-1.0.1.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"[...]\n"
+msgstr ""
+"% make makesum\n"
+"=> rust/crates/aho-corasick-0.6.4.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://crates.io/api/v1/crates/aho-corasick/0.6.4/download?dummy=/rust/crates/aho-corasick-0.6.4.tar.gz\n"
+"rust/crates/aho-corasick-0.6.4.tar.gz 100% of 24 kB 6139 kBps 00m00s\n"
+"=> rust/crates/ansi_term-0.11.0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://crates.io/api/v1/crates/ansi_term/0.11.0/download?dummy=/rust/crates/ansi_term-0.11.0.tar.gz\n"
+"rust/crates/ansi_term-0.11.0.tar.gz 100% of 16 kB 21 MBps 00m00s\n"
+"=> rust/crates/arrayvec-0.4.7.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://crates.io/api/v1/crates/arrayvec/0.4.7/download?dummy=/rust/crates/arrayvec-0.4.7.tar.gz\n"
+"rust/crates/arrayvec-0.4.7.tar.gz 100% of 22 kB 3237 kBps 00m00s\n"
+"=> rust/crates/atty-0.2.9.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://crates.io/api/v1/crates/atty/0.2.9/download?dummy=/rust/crates/atty-0.2.9.tar.gz\n"
+"rust/crates/atty-0.2.9.tar.gz 100% of 5898 B 81 MBps 00m00s\n"
+"=> rust/crates/bitflags-1.0.1.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"[...]\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:724
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:967
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1079
+msgid ""
+"The port is now ready for a test build and further adjustments like creating "
+"a plist, writing a description, adding license information, options, etc. as "
+"normal."
+msgstr ""
+"Порт теперь готов к тестовой сборке и дальнейшим настройкам, таким как "
+"создание plist, написание описания, добавление информации о лицензии, опций "
+"и т.д., как обычно."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:726
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:969
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1081
+msgid ""
+"If you are not testing your port in a clean environment like with poudriere, "
+"remember to run `make clean` before any testing."
+msgstr ""
+"Если вы не тестируете свой порт в чистой среде, например, с использованием "
+"poudriere, не забудьте выполнить `make clean` перед любым тестированием."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:729
+#, no-wrap
+msgid "Enabling Additional Application Features"
+msgstr "Включение дополнительных возможностей приложений"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:734
+msgid ""
+"Some applications define additional features in their "
+"[.filename]#Cargo.toml#. They can be compiled in by setting "
+"`CARGO_FEATURES` in the port."
+msgstr ""
+"Некоторые приложения определяют дополнительные возможности в своем "
+"[.filename]#Cargo.toml#. Их можно включить при компиляции, установив "
+"`CARGO_FEATURES` в порте."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:736
+msgid "Here we enable Tokei's `json` and `yaml` features:"
+msgstr "Здесь мы включаем функции `json` и `yaml` в Tokei:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:740
+#, no-wrap
+msgid "CARGO_FEATURES=\tjson yaml\n"
+msgstr "CARGO_FEATURES=\tjson yaml\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:745
+#, no-wrap
+msgid "Encoding Application Features As Port Options"
+msgstr "Кодирование характеристик приложений как параметров порта"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:749
+msgid ""
+"An example `[features]` section in [.filename]#Cargo.toml# could look like "
+"this:"
+msgstr ""
+"Пример раздела `[features]` в [.filename]#Cargo.toml# может выглядеть так:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:756
+#, no-wrap
+msgid ""
+"[features]\n"
+"pulseaudio_backend = [\"librespot-playback/pulseaudio-backend\"]\n"
+"portaudio_backend = [\"librespot-playback/portaudio-backend\"]\n"
+"default = [\"pulseaudio_backend\"]\n"
+msgstr ""
+"[features]\n"
+"pulseaudio_backend = [\"librespot-playback/pulseaudio-backend\"]\n"
+"portaudio_backend = [\"librespot-playback/portaudio-backend\"]\n"
+"default = [\"pulseaudio_backend\"]\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:761
+msgid ""
+"`pulseaudio_backend` is a default feature. It is always enabled unless we "
+"explicitly turn off default features by adding `--no-default-features` to "
+"`CARGO_FEATURES`. Here we turn the `portaudio_backend` and "
+"`pulseaudio_backend` features into port options:"
+msgstr ""
+"`pulseaudio_backend` — это функция по умолчанию. Она всегда включена, если "
+"мы явно не отключим функции по умолчанию, добавив `--no-default-features` в "
+"`CARGO_FEATURES`. Здесь мы превращаем функции `portaudio_backend` и "
+"`pulseaudio_backend` в опции порта:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:765
+#, no-wrap
+msgid "CARGO_FEATURES=\t--no-default-features\n"
+msgstr "CARGO_FEATURES=\t--no-default-features\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:767
+#, no-wrap
+msgid "OPTIONS_DEFINE=\tPORTAUDIO PULSEAUDIO\n"
+msgstr "OPTIONS_DEFINE=\tPORTAUDIO PULSEAUDIO\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:770
+#, no-wrap
+msgid ""
+"PORTAUDIO_VARS=\t\tCARGO_FEATURES+=portaudio_backend\n"
+"PULSEAUDIO_VARS=\tCARGO_FEATURES+=pulseaudio_backend\n"
+msgstr ""
+"PORTAUDIO_VARS=\t\tCARGO_FEATURES+=portaudio_backend\n"
+"PULSEAUDIO_VARS=\tCARGO_FEATURES+=pulseaudio_backend\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:775
+#, no-wrap
+msgid "Listing Crate Licenses"
+msgstr "Перечисление лицензий крейтов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:781
+msgid ""
+"Crates have their own licenses. It is important to know what they are when "
+"adding a `LICENSE` block to the port (see "
+"crossref:makefiles[licenses,Licenses]). The helper target `cargo-crates-"
+"licenses` will try to list all the licenses of all crates defined in "
+"`CARGO_CRATES`."
+msgstr ""
+"Крейты имеют собственные лицензии. Важно знать, какие они, при добавлении "
+"блока `LICENSE` в порт (см. crossref:makefiles[licenses,Лицензии]). "
+"Вспомогательная цель `cargo-crates-licenses` попытается перечислить все "
+"лицензии всех ящиков, определённых в `CARGO_CRATES`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:792
+#, no-wrap
+msgid ""
+"% make cargo-crates-licenses\n"
+"aho-corasick-0.6.4 Unlicense/MIT\n"
+"ansi_term-0.11.0 MIT\n"
+"arrayvec-0.4.7 MIT/Apache-2.0\n"
+"atty-0.2.9 MIT\n"
+"bitflags-1.0.1 MIT/Apache-2.0\n"
+"byteorder-1.2.2 Unlicense/MIT\n"
+"[...]\n"
+msgstr ""
+"% make cargo-crates-licenses\n"
+"aho-corasick-0.6.4 Unlicense/MIT\n"
+"ansi_term-0.11.0 MIT\n"
+"arrayvec-0.4.7 MIT/Apache-2.0\n"
+"atty-0.2.9 MIT\n"
+"bitflags-1.0.1 MIT/Apache-2.0\n"
+"byteorder-1.2.2 Unlicense/MIT\n"
+"[...]\n"
+
+#. type: delimited block = 6
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:798
+msgid ""
+"The license names `make cargo-crates-licenses` outputs are SPDX 2.1 licenses "
+"expression which do not match the license names defined in the ports "
+"framework. They need to be translated to the names from "
+"crossref:makefiles[licenses-license-list,Predefined License List]."
+msgstr ""
+"Названия лицензий, которые выводит `make cargo-crates-licenses`, являются "
+"SPDX 2.1-совместимыми лицензионными выражениями, которые не совпадают с "
+"названиями лицензий, определёнными в фреймворке портов. Их необходимо "
+"перевести в названия из crossref:makefiles[licenses-license-list,Списка "
+"предопределённых лицензий]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:803
+#, no-wrap
+msgid "Using `meson`"
+msgstr "Использование `meson`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:806
+msgid "For ports that use Meson, define `USES=meson`."
+msgstr "Для портов, использующих Meson, определите `USES=meson`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:808
+#, no-wrap
+msgid "Variables for Ports That Use `meson`"
+msgstr "Переменные для портов, использующих `meson`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:815
+#, no-wrap
+msgid "`MESON_ARGS`"
+msgstr "`MESON_ARGS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:817
+#, no-wrap
+msgid "Port specific Meson flags to be passed to the `meson` binary."
+msgstr "Порт-специфичные флаги Meson, передаваемые в бинарный файл `meson`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:818
+#, no-wrap
+msgid "`MESON_BUILD_DIR`"
+msgstr "`MESON_BUILD_DIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:819
+#, no-wrap
+msgid "Path to the build directory relative to `WRKSRC`. Default is `_build`."
+msgstr "Путь к директории сборки относительно `WRKSRC`. По умолчанию — `_build`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:822
+#, no-wrap
+msgid "`USES=meson` Example"
+msgstr "Пример `USES=meson`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:826
+msgid "This snippet demonstrates the use of Meson for a port."
+msgstr "Этот фрагмент демонстрирует использование Meson для порта."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:831
+#, no-wrap
+msgid ""
+"USES=\t\tmeson\n"
+"MESON_ARGS=\t-Dfoo=enabled\n"
+msgstr ""
+"USES=\t\tmeson\n"
+"MESON_ARGS=\t-Dfoo=enabled\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:836
+#, no-wrap
+msgid "Building Go Applications"
+msgstr "Создание приложений на Go"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:840
+msgid ""
+"For ports that use Go, define `USES=go`. Refer to crossref:uses[uses-"
+"go,`go`] for a list of variables that can be set to control the build "
+"process."
+msgstr ""
+"Для портов, использующих Go, определите `USES=go`. Обратитесь к "
+"crossref:uses[uses-go,`go`] для получения списка переменных, которые можно "
+"задать для управления процессом сборки."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:842
+#, no-wrap
+msgid "Creating a Port for a Go Modules Based Application"
+msgstr "Создание порта для приложения на основе модулей Go"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:846
+msgid ""
+"In most cases, it is sufficient to set the `GO_MODULE` variable to the value "
+"specified by the `module` directive in `go.mod`:"
+msgstr ""
+"В большинстве случаев достаточно установить переменную `GO_MODULE` в "
+"значение, указанное директивой `module` в `go.mod`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:853
+#, no-wrap
+msgid ""
+"PORTNAME= hey\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION= 0.1.4\n"
+"CATEGORIES= benchmarks\n"
+msgstr ""
+"PORTNAME= hey\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION= 0.1.4\n"
+"CATEGORIES= benchmarks\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:857
+#, no-wrap
+msgid ""
+"MAINTAINER= dmgk@FreeBSD.org\n"
+"COMMENT= Tiny program that sends some load to a web application\n"
+"WWW= https://github.com/rakyll/hey/\n"
+msgstr ""
+"MAINTAINER= dmgk@FreeBSD.org\n"
+"COMMENT= Tiny program that sends some load to a web application\n"
+"WWW= https://github.com/rakyll/hey/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:860
+#, no-wrap
+msgid ""
+"LICENSE= APACHE20\n"
+"LICENSE_FILE= ${WRKSRC}/LICENSE\n"
+msgstr ""
+"LICENSE= APACHE20\n"
+"LICENSE_FILE= ${WRKSRC}/LICENSE\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:863
+#, no-wrap
+msgid ""
+"USES= go:modules\n"
+"GO_MODULE= github.com/rakyll/hey\n"
+msgstr ""
+"USES= go:modules\n"
+"GO_MODULE= github.com/rakyll/hey\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:865
+#, no-wrap
+msgid "PLIST_FILES= bin/hey\n"
+msgstr "PLIST_FILES= bin/hey\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:870
+msgid ""
+"If the \"easy\" way is not adequate or more control over dependencies is "
+"needed, the full porting process is described below."
+msgstr ""
+"Если «простой» способ не подходит или требуется больший контроль над "
+"зависимостями, полный процесс переноса описан ниже."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:873
+msgid ""
+"Creating a Go-based port is a five-stage process. First we need to provide "
+"a ports template that fetches the application distribution file:"
+msgstr ""
+"Создание порта на основе Go — это процесс из пяти этапов. Сначала необходимо "
+"предоставить шаблон портов, который загружает дистрибутивный файл приложения:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:880
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:930
+#, no-wrap
+msgid ""
+"PORTNAME=\tghq\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION=\t0.12.5\n"
+"CATEGORIES=\tdevel\n"
+msgstr ""
+"PORTNAME=\tghq\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION=\t0.12.5\n"
+"CATEGORIES=\tdevel\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:884
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:934
+#, no-wrap
+msgid ""
+"MAINTAINER=\ttobik@FreeBSD.org\n"
+"COMMENT=\tRemote repository management made easy\n"
+"WWW=\t\thttps://github.com/x-motemen/ghq/\n"
+msgstr ""
+"MAINTAINER=\ttobik@FreeBSD.org\n"
+"COMMENT=\tRemote repository management made easy\n"
+"WWW=\t\thttps://github.com/x-motemen/ghq/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:888
+#, no-wrap
+msgid ""
+"USES=\t\tgo:modules\n"
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tmotemen\n"
+msgstr ""
+"USES=\t\tgo:modules\n"
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tmotemen\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:902
+#, no-wrap
+msgid ""
+"% make makesum\n"
+"===> License MIT accepted by the user\n"
+"=> motemen-ghq-v0.12.5_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://codeload.github.com/motemen/ghq/tar.gz/v0.12.5?dummy=/motemen-ghq-v0.12.5_GH0.tar.gz\n"
+"fetch: https://codeload.github.com/motemen/ghq/tar.gz/v0.12.5?dummy=/motemen-ghq-v0.12.5_GH0.tar.gz: size of remote file is not known\n"
+"motemen-ghq-v0.12.5_GH0.tar.gz 32 kB 177 kBps 00s\n"
+msgstr ""
+"% make makesum\n"
+"===> License MIT accepted by the user\n"
+"=> motemen-ghq-v0.12.5_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://codeload.github.com/motemen/ghq/tar.gz/v0.12.5?dummy=/motemen-ghq-v0.12.5_GH0.tar.gz\n"
+"fetch: https://codeload.github.com/motemen/ghq/tar.gz/v0.12.5?dummy=/motemen-ghq-v0.12.5_GH0.tar.gz: size of remote file is not known\n"
+"motemen-ghq-v0.12.5_GH0.tar.gz 32 kB 177 kBps 00s\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:906
+msgid ""
+"Now the distribution file is ready to use and we can extract the required Go "
+"module dependencies. This step requires having package:ports-mgmt/"
+"modules2tuple[] installed:"
+msgstr ""
+"Теперь файл дистрибутива готов к использованию, и мы можем извлечь "
+"необходимые зависимости модуля Go. Этот шаг требует наличия установленного "
+"пакета package:ports-mgmt/modules2tuple[]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:920
+#, no-wrap
+msgid ""
+"% make gomod-vendor\n"
+"[...]\n"
+"GH_TUPLE=\t\\\n"
+"\t\tSongmu:gitconfig:v0.0.2:songmu_gitconfig/vendor/github.com/Songmu/gitconfig \\\n"
+"\t\tdaviddengcn:go-colortext:186a3d44e920:daviddengcn_go_colortext/vendor/github.com/daviddengcn/go-colortext \\\n"
+"\t\tgo-yaml:yaml:v2.2.2:go_yaml_yaml/vendor/gopkg.in/yaml.v2 \\\n"
+"\t\tgolang:net:3ec191127204:golang_net/vendor/golang.org/x/net \\\n"
+"\t\tgolang:sync:112230192c58:golang_sync/vendor/golang.org/x/sync \\\n"
+"\t\tgolang:xerrors:3ee3066db522:golang_xerrors/vendor/golang.org/x/xerrors \\\n"
+"\t\tmotemen:go-colorine:45d19169413a:motemen_go_colorine/vendor/github.com/motemen/go-colorine \\\n"
+"\t\turfave:cli:v1.20.0:urfave_cli/vendor/github.com/urfave/cli\n"
+msgstr ""
+"% make gomod-vendor\n"
+"[...]\n"
+"GH_TUPLE=\t\\\n"
+"\t\tSongmu:gitconfig:v0.0.2:songmu_gitconfig/vendor/github.com/Songmu/gitconfig \\\n"
+"\t\tdaviddengcn:go-colortext:186a3d44e920:daviddengcn_go_colortext/vendor/github.com/daviddengcn/go-colortext \\\n"
+"\t\tgo-yaml:yaml:v2.2.2:go_yaml_yaml/vendor/gopkg.in/yaml.v2 \\\n"
+"\t\tgolang:net:3ec191127204:golang_net/vendor/golang.org/x/net \\\n"
+"\t\tgolang:sync:112230192c58:golang_sync/vendor/golang.org/x/sync \\\n"
+"\t\tgolang:xerrors:3ee3066db522:golang_xerrors/vendor/golang.org/x/xerrors \\\n"
+"\t\tmotemen:go-colorine:45d19169413a:motemen_go_colorine/vendor/github.com/motemen/go-colorine \\\n"
+"\t\turfave:cli:v1.20.0:urfave_cli/vendor/github.com/urfave/cli\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:946
+#, no-wrap
+msgid ""
+"USES=\t\tgo:modules\n"
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tmotemen\n"
+"GH_TUPLE=\tSongmu:gitconfig:v0.0.2:songmu_gitconfig/vendor/github.com/Songmu/gitconfig \\\n"
+"\t\tdaviddengcn:go-colortext:186a3d44e920:daviddengcn_go_colortext/vendor/github.com/daviddengcn/go-colortext \\\n"
+"\t\tgo-yaml:yaml:v2.2.2:go_yaml_yaml/vendor/gopkg.in/yaml.v2 \\\n"
+"\t\tgolang:net:3ec191127204:golang_net/vendor/golang.org/x/net \\\n"
+"\t\tgolang:sync:112230192c58:golang_sync/vendor/golang.org/x/sync \\\n"
+"\t\tgolang:xerrors:3ee3066db522:golang_xerrors/vendor/golang.org/x/xerrors \\\n"
+"\t\tmotemen:go-colorine:45d19169413a:motemen_go_colorine/vendor/github.com/motemen/go-colorine \\\n"
+"\t\turfave:cli:v1.20.0:urfave_cli/vendor/github.com/urfave/cli\n"
+msgstr ""
+"USES=\t\tgo:modules\n"
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tmotemen\n"
+"GH_TUPLE=\tSongmu:gitconfig:v0.0.2:songmu_gitconfig/vendor/github.com/Songmu/gitconfig \\\n"
+"\t\tdaviddengcn:go-colortext:186a3d44e920:daviddengcn_go_colortext/vendor/github.com/daviddengcn/go-colortext \\\n"
+"\t\tgo-yaml:yaml:v2.2.2:go_yaml_yaml/vendor/gopkg.in/yaml.v2 \\\n"
+"\t\tgolang:net:3ec191127204:golang_net/vendor/golang.org/x/net \\\n"
+"\t\tgolang:sync:112230192c58:golang_sync/vendor/golang.org/x/sync \\\n"
+"\t\tgolang:xerrors:3ee3066db522:golang_xerrors/vendor/golang.org/x/xerrors \\\n"
+"\t\tmotemen:go-colorine:45d19169413a:motemen_go_colorine/vendor/github.com/motemen/go-colorine \\\n"
+"\t\turfave:cli:v1.20.0:urfave_cli/vendor/github.com/urfave/cli\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:951
+msgid ""
+"[.filename]#distinfo# needs to be regenerated to contain all the "
+"distribution files:"
+msgstr ""
+"[.filename]#distinfo# необходимо обновить, чтобы включить все дистрибутивные "
+"файлы:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:964
+#, no-wrap
+msgid ""
+"% make makesum\n"
+"=> Songmu-gitconfig-v0.0.2_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://codeload.github.com/Songmu/gitconfig/tar.gz/v0.0.2?dummy=/Songmu-gitconfig-v0.0.2_GH0.tar.gz\n"
+"fetch: https://codeload.github.com/Songmu/gitconfig/tar.gz/v0.0.2?dummy=/Songmu-gitconfig-v0.0.2_GH0.tar.gz: size of remote file is not known\n"
+"Songmu-gitconfig-v0.0.2_GH0.tar.gz 5662 B 936 kBps 00s\n"
+"=> daviddengcn-go-colortext-186a3d44e920_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://codeload.github.com/daviddengcn/go-colortext/tar.gz/186a3d44e920?dummy=/daviddengcn-go-colortext-186a3d44e920_GH0.tar.gz\n"
+"fetch: https://codeload.github.com/daviddengcn/go-colortext/tar.gz/186a3d44e920?dummy=/daviddengcn-go-colortext-186a3d44e920_GH0.tar.gz: size of remote file is not known\n"
+"daviddengcn-go-colortext-186a3d44e920_GH0.tar. 4534 B 1098 kBps 00s\n"
+"[...]\n"
+msgstr ""
+"% make makesum\n"
+"=> Songmu-gitconfig-v0.0.2_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://codeload.github.com/Songmu/gitconfig/tar.gz/v0.0.2?dummy=/Songmu-gitconfig-v0.0.2_GH0.tar.gz\n"
+"fetch: https://codeload.github.com/Songmu/gitconfig/tar.gz/v0.0.2?dummy=/Songmu-gitconfig-v0.0.2_GH0.tar.gz: size of remote file is not known\n"
+"Songmu-gitconfig-v0.0.2_GH0.tar.gz 5662 B 936 kBps 00s\n"
+"=> daviddengcn-go-colortext-186a3d44e920_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://codeload.github.com/daviddengcn/go-colortext/tar.gz/186a3d44e920?dummy=/daviddengcn-go-colortext-186a3d44e920_GH0.tar.gz\n"
+"fetch: https://codeload.github.com/daviddengcn/go-colortext/tar.gz/186a3d44e920?dummy=/daviddengcn-go-colortext-186a3d44e920_GH0.tar.gz: size of remote file is not known\n"
+"daviddengcn-go-colortext-186a3d44e920_GH0.tar. 4534 B 1098 kBps 00s\n"
+"[...]\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:972
+#, no-wrap
+msgid "Setting Output Binary Name or Installation Path"
+msgstr "Установка имени выходного бинарного файла или пути установки"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:977
+msgid ""
+"Some ports need to install the resulting binary under a different name or to "
+"a path other than the default `${PREFIX}/bin`. This can be done by using "
+"`GO_TARGET` tuple syntax, for example:"
+msgstr ""
+"Некоторые порты требуют установки результирующего бинарного файла под другим "
+"именем или в путь, отличный от стандартного `${PREFIX}/bin`. Это можно "
+"сделать с помощью синтаксиса кортежа `GO_TARGET`, например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:981
+#, no-wrap
+msgid "GO_TARGET= ./cmd/ipfs:ipfs-go\n"
+msgstr "GO_TARGET= ./cmd/ipfs:ipfs-go\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:984
+msgid "will install `ipfs` binary as `${PREFIX}/bin/ipfs-go` and"
+msgstr "установит бинарный файл `ipfs` как `${PREFIX}/bin/ipfs-go` и"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:988
+#, no-wrap
+msgid "GO_TARGET= ./dnscrypt-proxy:${PREFIX}/sbin/dnscrypt-proxy\n"
+msgstr "GO_TARGET= ./dnscrypt-proxy:${PREFIX}/sbin/dnscrypt-proxy\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:991
+msgid "will install `dnscrypt-proxy` to `${PREFIX}/sbin`."
+msgstr "установит `dnscrypt-proxy` в `${PREFIX}/sbin`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:994
+#, no-wrap
+msgid "Building Haskell Applications with `cabal`"
+msgstr "Построение приложений на Haskell с помощью `cabal`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:998
+msgid ""
+"For ports that use Cabal, build system defines `USES=cabal`. Refer to "
+"crossref:uses[uses-cabal,`cabal`] for a list of variables that can be set to "
+"control the build process."
+msgstr ""
+"Для портов, использующих Cabal, система сборки определяет `USES=cabal`. "
+"Обратитесь к crossref:uses[uses-cabal,`cabal`] для получения списка "
+"переменных, которые можно задать для управления процессом сборки."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1000
+#, no-wrap
+msgid "Creating a Port for a Hackage-hosted Haskell Application"
+msgstr "Создание порта для приложения Haskell с Hackage"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1005
+msgid ""
+"When preparing a Haskell Cabal port, package:devel/hs-cabal-install[] and "
+"package:ports-mgmt/hs-cabal2tuple[] programs are required, so make sure they "
+"are installed beforehand. First we need to define common ports variables "
+"that allow cabal-install to fetch the package distribution file:"
+msgstr ""
+"При подготовке порта Haskell Cabal требуются программы package:devel/hs-"
+"cabal-install[] и package:ports-mgmt/hs-cabal2tuple[], поэтому убедитесь, "
+"что они установлены заранее. Сначала необходимо определить общие переменные "
+"портов, которые позволяют cabal-install загрузить файл дистрибутива пакета:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1011
+#, no-wrap
+msgid ""
+"PORTNAME=\tShellCheck\n"
+"DISTVERSION=\t0.6.0\n"
+"CATEGORIES=\tdevel\n"
+msgstr ""
+"PORTNAME=\tShellCheck\n"
+"DISTVERSION=\t0.6.0\n"
+"CATEGORIES=\tdevel\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1015
+#, no-wrap
+msgid ""
+"MAINTAINER=\thaskell@FreeBSD.org\n"
+"COMMENT=\tShell script analysis tool\n"
+"WWW=\t\thttps://www.shellcheck.net/\n"
+msgstr ""
+"MAINTAINER=\thaskell@FreeBSD.org\n"
+"COMMENT=\tShell script analysis tool\n"
+"WWW=\t\thttps://www.shellcheck.net/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1017
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1100
+#, no-wrap
+msgid "USES=\t\tcabal\n"
+msgstr "USES=\t\tcabal\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1022
+msgid ""
+"This minimal Makefile fetches the distribution file with the `cabal-extract` "
+"helper target:"
+msgstr ""
+"Этот минимальный Makefile загружает файл дистрибутива с помощью "
+"вспомогательной цели `cabal-extract`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1032
+#, no-wrap
+msgid ""
+"% make cabal-extract\n"
+"[...]\n"
+"Downloading the latest package list from hackage.haskell.org\n"
+"cabal get ShellCheck-0.6.0\n"
+"Downloading ShellCheck-0.6.0\n"
+"Downloaded ShellCheck-0.6.0\n"
+"Unpacking to ShellCheck-0.6.0/\n"
+msgstr ""
+"% make cabal-extract\n"
+"[...]\n"
+"Downloading the latest package list from hackage.haskell.org\n"
+"cabal get ShellCheck-0.6.0\n"
+"Downloading ShellCheck-0.6.0\n"
+"Downloaded ShellCheck-0.6.0\n"
+"Unpacking to ShellCheck-0.6.0/\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1035
+msgid ""
+"Now that we have ShellCheck.cabal package description file under `${WRKSRC}"
+"`, we can use `cabal-configure` to generate the build plan:"
+msgstr ""
+"Теперь, когда у нас есть файл описания пакета ShellCheck.cabal в `${WRKSRC}"
+"`, мы можем использовать `cabal-configure` для создания плана сборки:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1046
+#, no-wrap
+msgid ""
+"% make cabal-configure\n"
+"[...]\n"
+"Resolving dependencies...\n"
+"Build profile: -w ghc-8.10.7 -O1\n"
+"In order, the following would be built (use -v for more details):\n"
+" - Diff-0.4.1 (lib) (requires download & build)\n"
+" - OneTuple-0.3.1 (lib) (requires download & build)\n"
+"[...]\n"
+msgstr ""
+"% make cabal-configure\n"
+"[...]\n"
+"Resolving dependencies...\n"
+"Build profile: -w ghc-8.10.7 -O1\n"
+"In order, the following would be built (use -v for more details):\n"
+" - Diff-0.4.1 (lib) (requires download & build)\n"
+" - OneTuple-0.3.1 (lib) (requires download & build)\n"
+"[...]\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1049
+msgid "Once done, a list of required dependencies can generated:"
+msgstr "После завершения можно сгенерировать список необходимых зависимостей:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1057
+#, no-wrap
+msgid ""
+"% make make-use-cabal\n"
+"USE_CABAL=\tQuickCheck-2.12.6.1 \\\n"
+"\t\thashable-1.3.0.0 \\\n"
+"\t\tinteger-logarithms-1.0.3 \\\n"
+"[...]\n"
+msgstr ""
+"% make make-use-cabal\n"
+"USE_CABAL=\tQuickCheck-2.12.6.1 \\\n"
+"\t\thashable-1.3.0.0 \\\n"
+"\t\tinteger-logarithms-1.0.3 \\\n"
+"[...]\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1063
+msgid ""
+"Haskell packages may contain revisions, just like FreeBSD ports. Revisions "
+"can affect [.filename]#.cabal# files only. Note additional version numbers "
+"after the `_` symbol. Put newly generated `USE_CABAL` list instead of an "
+"old one."
+msgstr ""
+"Пакеты Haskell могут содержать ревизии, как и порты FreeBSD. Ревизии могут "
+"затрагивать только файлы [.filename]#.cabal#. Обратите внимание на "
+"дополнительные номера версий после символа `_`. Замените старый список "
+"`USE_CABAL` на вновь сгенерированный."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1065
+msgid ""
+"Finally, [.filename]#distinfo# needs to be regenerated to contain all the "
+"distribution files:"
+msgstr ""
+"Наконец, файл [.filename]#distinfo# необходимо перегенерировать, чтобы он "
+"содержал все файлы дистрибутива:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1076
+#, no-wrap
+msgid ""
+"% make makesum\n"
+"=> ShellCheck-0.6.0.tar.gz doesn't seem to exist in /usr/local/poudriere/ports/git/distfiles/cabal.\n"
+"=> Attempting to fetch https://hackage.haskell.org/package/ShellCheck-0.6.0/ShellCheck-0.6.0.tar.gz\n"
+"ShellCheck-0.6.0.tar.gz 136 kB 642 kBps 00s\n"
+"=> QuickCheck-2.12.6.1/QuickCheck-2.12.6.1.tar.gz doesn't seem to exist in /usr/local/poudriere/ports/git/distfiles/cabal.\n"
+"=> Attempting to fetch https://hackage.haskell.org/package/QuickCheck-2.12.6.1/QuickCheck-2.12.6.1.tar.gz\n"
+"QuickCheck-2.12.6.1/QuickCheck-2.12.6.1.tar.gz 65 kB 361 kBps 00s\n"
+"[...]\n"
+msgstr ""
+"% make makesum\n"
+"=> ShellCheck-0.6.0.tar.gz doesn't seem to exist in /usr/local/poudriere/ports/git/distfiles/cabal.\n"
+"=> Attempting to fetch https://hackage.haskell.org/package/ShellCheck-0.6.0/ShellCheck-0.6.0.tar.gz\n"
+"ShellCheck-0.6.0.tar.gz 136 kB 642 kBps 00s\n"
+"=> QuickCheck-2.12.6.1/QuickCheck-2.12.6.1.tar.gz doesn't seem to exist in /usr/local/poudriere/ports/git/distfiles/cabal.\n"
+"=> Attempting to fetch https://hackage.haskell.org/package/QuickCheck-2.12.6.1/QuickCheck-2.12.6.1.tar.gz\n"
+"QuickCheck-2.12.6.1/QuickCheck-2.12.6.1.tar.gz 65 kB 361 kBps 00s\n"
+"[...]\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1086
+msgid ""
+"Some Haskell ports install various data files under `share/${PORTNAME}`. For "
+"such cases special handling is required on the port side. The port should "
+"define the `CABAL_WRAPPER_SCRIPTS` knob listing each executable that is "
+"going to use data files. Moreover, in rare cases the program being ported "
+"uses data files of other Haskell packages, in which case the "
+"`FOO_DATADIR_VARS` comes to the rescue."
+msgstr ""
+"Некоторые порты Haskell устанавливают различные файлы данных в `share/$"
+"{PORTNAME}`. В таких случаях требуется особая обработка на стороне порта. "
+"Порт должен определить параметр `CABAL_WRAPPER_SCRIPTS`, перечислив каждый "
+"исполняемый файл, который будет использовать файлы данных. Более того, в "
+"редких случаях портируемая программа использует файлы данных других пакетов "
+"Haskell, и тогда на помощь приходит `FOO_DATADIR_VARS`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1088
+#, no-wrap
+msgid "Handling Data Files in a Haskell Port"
+msgstr "Обработка файлов данных в порте Haskell"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1092
+msgid ""
+"`devel/hs-profiteur` is a Haskell application that generates a single-page "
+"HTML with some content."
+msgstr ""
+"`devel/hs-profiteur` — это приложение на Haskell, которое генерирует "
+"одностраничный HTML с некоторым содержимым."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1096
+#, no-wrap
+msgid "PORTNAME=\tprofiteur\n"
+msgstr "PORTNAME=\tprofiteur\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1098
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1113
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1131
+#, no-wrap
+msgid "[...]\n"
+msgstr "[...]\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1104
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1117
+#, no-wrap
+msgid ""
+"USE_CABAL=\tOneTuple-0.3.1_2 \\\n"
+"\t\tQuickCheck-2.14.2 \\\n"
+"\t\t[...]\n"
+msgstr ""
+"USE_CABAL=\tOneTuple-0.3.1_2 \\\n"
+"\t\tQuickCheck-2.14.2 \\\n"
+"\t\t[...]\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1109
+msgid ""
+"It installs HTML templates under `share/profiteur`, so we need to add "
+"`CABAL_WRAPPER_SCRIPTS` knob:"
+msgstr ""
+"Он устанавливает HTML-шаблоны в `share/profiteur`, поэтому необходимо "
+"добавить параметр `CABAL_WRAPPER_SCRIPTS`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1120
+#, no-wrap
+msgid "CABAL_WRAPPER_SCRIPTS=\t\t${CABAL_EXECUTABLES}\n"
+msgstr "CABAL_WRAPPER_SCRIPTS=\t\t${CABAL_EXECUTABLES}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1127
+msgid ""
+"The program also tries to access the `jquery.js` file, which is a part of "
+"`js-jquery-3.3.1` Haskell package. For that file to be found, we need to "
+"make the wrapper script to look for `js-jquery` data files in `share/"
+"profiteur` too. We use `profiteur_DATADIR_VARS` for this:"
+msgstr ""
+"Программа также пытается получить доступ к файлу `jquery.js`, который "
+"является частью пакета Haskell `js-jquery-3.3.1`. Чтобы этот файл был "
+"найден, необходимо, чтобы скрипт-обёртка искал файлы данных `js-jquery` "
+"также в `share/profiteur`. Для этого используется `profiteur_DATADIR_VARS`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1134
+#, no-wrap
+msgid ""
+"CABAL_WRAPPER_SCRIPTS=\t\t${CABAL_EXECUTABLES}\n"
+"profiteur_DATADIR_VARS=\t\tjs-jquery\n"
+msgstr ""
+"CABAL_WRAPPER_SCRIPTS=\t\t${CABAL_EXECUTABLES}\n"
+"profiteur_DATADIR_VARS=\t\tjs-jquery\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1139
+msgid ""
+"Now the port will install the actual binary into `libexec/cabal/profiteur` "
+"and the script into `bin/profiteur`."
+msgstr ""
+"Теперь порт установит непосредственно бинарный файл в `libexec/cabal/"
+"profiteur`, а скрипт — в `bin/profiteur`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1144
+msgid ""
+"There is no easy way to find out a proper value for the `FOO_DATADIR_VARS` "
+"knob apart from running the program and checking that everything works. "
+"Luckily, the need to use `FOO_DATADIR_VARS` is very rare."
+msgstr ""
+"Не существует простого способа определить подходящее значение для параметра "
+"`FOO_DATADIR_VARS`, кроме как запустить программу и проверить, что всё "
+"работает. К счастью, необходимость использовать `FOO_DATADIR_VARS` возникает "
+"очень редко."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1146
+msgid ""
+"Another corner case when porting complex Haskell programs is the presence of "
+"VCS dependencies in the `cabal.project` file."
+msgstr ""
+"Еще один крайний случай при переносе сложных программ на Haskell — наличие "
+"зависимостей от систем контроля версий (VCS) в файле `cabal.project`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1148
+#, no-wrap
+msgid "Porting Haskell Applications with VCS Dependencies"
+msgstr "Портирование приложений Haskell с зависимостями от VCS"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1153
+msgid ""
+"`net-p2p/cardano-node` is an extremely complex piece of software. In its "
+"`cabal.project` there are a lot of blocks like this:"
+msgstr ""
+"`net-p2p/cardano-node` — это чрезвычайно сложное программное обеспечение. В "
+"его `cabal.project` содержится множество блоков, подобных этому:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1162
+#, no-wrap
+msgid ""
+"[...]\n"
+"source-repository-package\n"
+" type: git\n"
+" location: https://github.com/input-output-hk/cardano-crypto\n"
+" tag: f73079303f663e028288f9f4a9e08bcca39a923e\n"
+"[...]\n"
+msgstr ""
+"[...]\n"
+"source-repository-package\n"
+" type: git\n"
+" location: https://github.com/input-output-hk/cardano-crypto\n"
+" tag: f73079303f663e028288f9f4a9e08bcca39a923e\n"
+"[...]\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1168
+msgid ""
+"Dependencies of type `source-repository-package` are automatically pulled in "
+"by `cabal` during the build process. Unfortunately, this makes use of the "
+"network after the `fetch` stage. This is disallowed by the ports framework. "
+"These sources need to be listed in the port's Makefile. The `make-use-cabal` "
+"helper target can make it easy for packages hosted on GitHub. Running this "
+"target after the usual `cabal-extract` and `cabal-configure` will produce "
+"not only the `USE_CABAL` knob, but also `GH_TUPLE`:"
+msgstr ""
+"Зависимости типа `source-repository-package` автоматически подтягиваются "
+"`cabal` в процессе сборки. К сожалению, это приводит к использованию сети "
+"после этапа `fetch`, что запрещено в рамках системы портов. Эти исходники "
+"необходимо указать в Makefile порта. Вспомогательная цель `make-use-cabal` "
+"может упростить работу с пакетами, размещёнными на GitHub. Запуск этой цели "
+"после стандартных `cabal-extract` и `cabal-configure` позволит получить не "
+"только параметр `USE_CABAL`, но и `GH_TUPLE`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1176
+#, no-wrap
+msgid ""
+"% make make-use-cabal\n"
+"USE_CABAL=\tDiff-0.4.1 \\\n"
+"\t\tGlob-0.10.2_3 \\\n"
+"\t\tHUnit-1.6.2.0 \\\n"
+"\t\t[...]\n"
+msgstr ""
+"% make make-use-cabal\n"
+"USE_CABAL=\tDiff-0.4.1 \\\n"
+"\t\tGlob-0.10.2_3 \\\n"
+"\t\tHUnit-1.6.2.0 \\\n"
+"\t\t[...]\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1180
+#, no-wrap
+msgid ""
+"GH_TUPLE=\t\tinput-output-hk:cardano-base:0f3a867493059e650cda69e20a5cbf1ace289a57:cardano_base/dist-newstyle/src/cardano-b_-c8db9876882556ed \\\n"
+"\t\tinput-output-hk:cardano-crypto:f73079303f663e028288f9f4a9e08bcca39a923e:cardano_crypto/dist-newstyle/src/cardano-c_-253fd88117badd8f \\\n"
+"\t\t[...]\n"
+msgstr ""
+"GH_TUPLE=\t\tinput-output-hk:cardano-base:0f3a867493059e650cda69e20a5cbf1ace289a57:cardano_base/dist-newstyle/src/cardano-b_-c8db9876882556ed \\\n"
+"\t\tinput-output-hk:cardano-crypto:f73079303f663e028288f9f4a9e08bcca39a923e:cardano_crypto/dist-newstyle/src/cardano-c_-253fd88117badd8f \\\n"
+"\t\t[...]\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1183
+msgid ""
+"It might be useful to separate the `GH_TUPLE` items coming from `make-use-"
+"cabal` from the other ones to make it easy to update the port:"
+msgstr ""
+"Может быть полезно отделить элементы `GH_TUPLE`, поступающие из `make-use-"
+"cabal`, от остальных, чтобы упростить обновление порта:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1189
+#, no-wrap
+msgid ""
+"GH_TUPLE=\tinput-output-hk:cardano-base:0f3a867493059e650cda69e20a5cbf1ace289a57:cardano_base/dist-newstyle/src/cardano-b_-c8db9876882556ed \\\n"
+"\t\tinput-output-hk:cardano-crypto:f73079303f663e028288f9f4a9e08bcca39a923e:cardano_crypto/dist-newstyle/src/cardano-c_-253fd88117badd8f \\\n"
+"\t\t[...]\n"
+msgstr ""
+"GH_TUPLE=\tinput-output-hk:cardano-base:0f3a867493059e650cda69e20a5cbf1ace289a57:cardano_base/dist-newstyle/src/cardano-b_-c8db9876882556ed \\\n"
+"\t\tinput-output-hk:cardano-crypto:f73079303f663e028288f9f4a9e08bcca39a923e:cardano_crypto/dist-newstyle/src/cardano-c_-253fd88117badd8f \\\n"
+"\t\t[...]\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1191
+#, no-wrap
+msgid "GH_TUPLE+=\tbitcoin-core:secp256k1:ac83be33d0956faf6b7f61a60ab524ef7d6a473a:secp\n"
+msgstr "GH_TUPLE+=\tbitcoin-core:secp256k1:ac83be33d0956faf6b7f61a60ab524ef7d6a473a:secp\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1194
+msgid ""
+"Haskell ports with VCS dependencies also require the following hack for the "
+"time being:"
+msgstr ""
+"Версия Haskell-портов с зависимостями от систем контроля версий временно "
+"требует следующего обходного решения:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1198
+#, no-wrap
+msgid "BINARY_ALIAS=\tgit=true\n"
+msgstr "BINARY_ALIAS=\tgit=true\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1203
+#, no-wrap
+msgid "Using GNU Autotools"
+msgstr "Использование GNU Autotools"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1207
+msgid ""
+"If a port needs any of the GNU Autotools software, add `USES=autoreconf`. "
+"See crossref:uses[uses-autoreconf,`autoreconf`] for more information."
+msgstr ""
+"Если порту требуется какое-либо программное обеспечение GNU Autotools, "
+"добавьте `USES=autoreconf`. Подробнее см. в crossref:uses[uses-"
+"autoreconf,`autoreconf`]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1209
+#, no-wrap
+msgid "Using GNU `gettext`"
+msgstr "Использование GNU `gettext`"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1212
+#, no-wrap
+msgid "Basic Usage"
+msgstr "Простые варианты использования"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1216
+msgid ""
+"If the port requires `gettext`, set `USES= gettext`, and the port will "
+"inherit a dependency on [.filename]#libintl.so# from package:devel/"
+"gettext[]. Other values for `gettext` usage are listed in "
+"crossref:uses[uses-gettext,`USES=gettext`]."
+msgstr ""
+"Если порт требует `gettext`, установите `USES=gettext`, и порт унаследует "
+"зависимость от [.filename]#libintl.so# из пакета package:devel/gettext[]. "
+"Другие значения для использования `gettext` перечислены в crossref:uses[uses-"
+"gettext,`USES=gettext`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1219
+msgid ""
+"A rather common case is a port using `gettext` and `configure`. Generally, "
+"GNU `configure` should be able to locate `gettext` automatically."
+msgstr ""
+"Довольно распространённый случай — порт, использующий `gettext` и "
+"`configure`. Обычно GNU `configure` должен автоматически находить `gettext`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1224
+#, no-wrap
+msgid ""
+"USES=\tgettext\n"
+"GNU_CONFIGURE=\tyes\n"
+msgstr ""
+"USES=\tgettext\n"
+"GNU_CONFIGURE=\tyes\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1227
+msgid ""
+"If it ever fails to, hints at the location of `gettext` can be passed in "
+"`CPPFLAGS` and `LDFLAGS` using `localbase` as follows:"
+msgstr ""
+"Если он не сработает, можно указать расположение `gettext` через `CPPFLAGS` "
+"и `LDFLAGS`, используя `localbase` следующим образом:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1232
+#, no-wrap
+msgid ""
+"USES=\tgettext localbase:ldflags\n"
+"GNU_CONFIGURE=\tyes\n"
+msgstr ""
+"USES=\tgettext localbase:ldflags\n"
+"GNU_CONFIGURE=\tyes\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1235
+#, no-wrap
+msgid "Optional Usage"
+msgstr "Оптимальное использование"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1241
+msgid ""
+"Some software products allow for disabling NLS. For example, through "
+"passing `--disable-nls` to `configure`. In that case, the port must use "
+"`gettext` conditionally, depending on the status of the `NLS` option. For "
+"ports of low to medium complexity, use this idiom:"
+msgstr ""
+"Некоторые программные продукты позволяют отключать NLS, к примеру, передавая "
+"параметр `--disable-nls` сценарию `configure`. В этом случае ваш порт должен "
+"использовать `gettext`, в зависимости от значения `NLS`. Для портов "
+"небольшой или средней сложности вы можете полагаться на следующую идиому:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1245
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1260
+#, no-wrap
+msgid "GNU_CONFIGURE=\t\tyes\n"
+msgstr "GNU_CONFIGURE=\t\tyes\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1248
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\t\tNLS\n"
+"OPTIONS_SUB=\t\tyes\n"
+msgstr ""
+"OPTIONS_DEFINE=\t\tNLS\n"
+"OPTIONS_SUB=\t\tyes\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1251
+#, no-wrap
+msgid ""
+"NLS_USES=\t\tgettext\n"
+"NLS_CONFIGURE_ENABLE=\tnls\n"
+msgstr ""
+"NLS_USES=\t\tgettext\n"
+"NLS_CONFIGURE_ENABLE=\tnls\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1256
+msgid "Or using the older way of using options:"
+msgstr "Или используя старый способ с опциями:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1262
+#, no-wrap
+msgid "OPTIONS_DEFINE=\t\tNLS\n"
+msgstr "OPTIONS_DEFINE=\t\tNLS\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1264
+#, no-wrap
+msgid ".include <bsd.port.options.mk>\n"
+msgstr ".include <bsd.port.options.mk>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1272
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MNLS}\n"
+"USES+=\t\t\tgettext\n"
+"PLIST_SUB+=\t\tNLS=\"\"\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--disable-nls\n"
+"PLIST_SUB+=\t\tNLS=\"@comment \"\n"
+".endif\n"
+msgstr ""
+".if ${PORT_OPTIONS:MNLS}\n"
+"USES+=\t\t\tgettext\n"
+"PLIST_SUB+=\t\tNLS=\"\"\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--disable-nls\n"
+"PLIST_SUB+=\t\tNLS=\"@comment \"\n"
+".endif\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1283
+msgid ""
+"The next item on the to-do list is to arrange so that the message catalog "
+"files are included in the packing list conditionally. The "
+"[.filename]#Makefile# part of this task is already provided by the idiom. "
+"It is explained in the section on crossref:plist[plist-sub,advanced "
+"[.filename]#pkg-plist# practices]. In a nutshell, each occurrence of `%%NLS%"
+"%` in [.filename]#pkg-plist# will be replaced by \"`@comment `\" if NLS is "
+"disabled, or by a null string if NLS is enabled. Consequently, the lines "
+"prefixed by `%%NLS%%` will become mere comments in the final packing list if "
+"NLS is off; otherwise the prefix will be just left out. Then insert `%%NLS%"
+"%` before each path to a message catalog file in [.filename]#pkg-plist#. "
+"For example:"
+msgstr ""
+"Следующий пункт в списке задач — организовать условное включение файлов "
+"каталогов сообщений в упаковочный список. Часть, связанная с "
+"[.filename]#Makefile#, уже предусмотрена идиомой. Это объясняется в разделе "
+"crossref:plist[plist-sub,расширенные практики работы с [.filename]#pkg-"
+"plist#]. Вкратце, каждое вхождение `%%NLS%%` в [.filename]#pkg-plist# будет "
+"заменено на \"`@comment `\", если NLS отключен, или на пустую строку, если "
+"NLS включен. Следовательно, строки с префиксом `%%NLS%%` станут обычными "
+"комментариями в итоговом упаковочном списке, если NLS выключен; в противном "
+"случае префикс будет просто удален. Затем вставьте `%%NLS%%` перед каждым "
+"путем к файлу каталога сообщений в [.filename]#pkg-plist#. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1288
+#, no-wrap
+msgid ""
+"%%NLS%%share/locale/fr/LC_MESSAGES/foobar.mo\n"
+"%%NLS%%share/locale/no/LC_MESSAGES/foobar.mo\n"
+msgstr ""
+"%%NLS%%share/locale/fr/LC_MESSAGES/foobar.mo\n"
+"%%NLS%%share/locale/no/LC_MESSAGES/foobar.mo\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1291
+msgid ""
+"In high complexity cases, more advanced techniques may be needed, such as "
+"crossref:plist[plist-dynamic,dynamic packing list generation]."
+msgstr ""
+"В особо сложных случаях вам понадобиться использовать более продвинутые "
+"техники, чем данный рецепт, такие как crossref:plist[plist-"
+"dynamic,динамические списки упаковки]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1293
+#, no-wrap
+msgid "Handling Message Catalog Directories"
+msgstr "Управление каталогами сообщений"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1300
+msgid ""
+"There is a point to note about installing message catalog files. The target "
+"directories for them, which reside under [.filename]#LOCALBASE/share/"
+"locale#, must not be created and removed by a port. The most popular "
+"languages have their respective directories listed in [.filename]#PORTSDIR/"
+"Templates/BSD.local.dist#. The directories for many other languages are "
+"governed by the package:devel/gettext[] port. Consult its [.filename]#pkg-"
+"plist# and see whether the port is going to install a message catalog file "
+"for a unique language."
+msgstr ""
+"Существует момент, который следует учитывать при установке файлов каталогов "
+"сообщений. Целевые каталоги для размещения, расположенные под "
+"[.filename]#LOCALBASE/shared/locale#, редко когда должны создаваться и "
+"удаляться портом. Для наиболее популярных языков имеются собственные "
+"каталоги, перечисленные в [.filename]#PORTSDIR/Templates/BSD.local.dist#. "
+"Каталоги для множества других языков управляются с помощью порта "
+"package:devel/gettext[]. Обратите внимание на его [.filename]#pkg-plist# и "
+"посмотрите, куда данный порт собирается установить файлы каталогов сообщений "
+"для единственного в своем роде языка."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1302
+#, no-wrap
+msgid "Using Perl"
+msgstr "Использование Perl"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1310
+msgid ""
+"If `MASTER_SITES` is set to `CPAN`, the correct subdirectory is usually "
+"selected automatically. If the default subdirectory is wrong, `CPAN/Module` "
+"can be used to change it. `MASTER_SITES` can also be set to the old "
+"`MASTER_SITE_PERL_CPAN`, then the preferred value of `MASTER_SITE_SUBDIR` is "
+"the top-level hierarchy name. For example, the recommended value for `p5-"
+"Module-Name` is `Module`. The top-level hierarchy can be examined at "
+"https://cpan.org/modules/by-module/[cpan.org]. This keeps the port working "
+"when the author of the module changes."
+msgstr ""
+"Если `MASTER_SITES` установлена в значение `CPAN`, то правильная "
+"поддиректория выбирается автоматически. Если подкаталог по умолчанию указан "
+"неверно, можно использовать `CPAN/Module` для его изменения. Также можно "
+"установить `MASTER_SITES` в старое значение `MASTER_SITE_PERL_CPAN`, тогда "
+"предпочтительным значением `MASTER_SITE_SUBDIR` будет имя иерархии выше "
+"уровнем. Например, рекомендуемое значение для `p5-Module-Name` - `Module`. "
+"Иерархию верхнего уровня можно посмотреть на https://cpan.org/modules/by-"
+"module/[cpan.org]. Это гарантирует работоспособность порта при смене автора "
+"модуля."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1315
+msgid ""
+"The exception to this rule is when the relevant directory does not exist or "
+"the distfile does not exist in that directory. In such case, using author's "
+"id as `MASTER_SITE_SUBDIR` is allowed. The `CPAN:AUTHOR` macro can be used, "
+"which will be translated to the hashed author directory. For example, "
+"`CPAN:AUTHOR` will be converted to `authors/id/A/AU/AUTHOR`."
+msgstr ""
+"Исключением этого правила является отсутствие соответствующего каталога или "
+"файла с дистрибутивом в этом каталоге. В качестве `MASTER_SITE_SUBDIR` в "
+"этом случае разрешается использовать id автора. Можно использовать макрос "
+"`CPAN:AUTHOR`, который будет преобразован в хешированный каталог автора. "
+"Например, `CPAN:AUTHOR` преобразуется в `authors/id/A/AU/AUTHOR`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1317
+msgid ""
+"When a port needs Perl support, it must set `USES=perl5` with the optional "
+"`USE_PERL5` described in crossref:uses[uses-perl5,the perl5 USES "
+"description]."
+msgstr ""
+"Когда порту требуется поддержка Perl, он должен установить `USES=perl5` с "
+"опциональным `USE_PERL5`, как описано в crossref:uses[uses-perl5,описание "
+"USES для perl5]."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1319
+#, no-wrap
+msgid "Read-Only Variables for Ports That Use Perl"
+msgstr "Переменные (только для чтения) для портов, использующих Perl"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1323
+#, no-wrap
+msgid "Read only variables"
+msgstr "Переменные (только для чтения)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1326
+#, no-wrap
+msgid "`PERL`"
+msgstr "`PERL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1328
+#, no-wrap
+msgid "The full path of the Perl 5 interpreter, either in the system or installed from a port, but without the version number. Use this when the software needs the path to the Perl interpreter. To replace \"``#!``\"lines in scripts, use crossref:uses[uses-shebangfix,`shebangfix`]."
+msgstr "Полный путь к интерпретатору Perl 5, будь то системный или установленный из порта, но без номера версии. Используйте это, когда программному обеспечению требуется путь к интерпретатору Perl. Для замены строк \"``#!``\" в скриптах используйте crossref:uses[uses-shebangfix,`shebangfix`]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1329
+#, no-wrap
+msgid "`PERL_VERSION`"
+msgstr "`PERL_VERSION`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1331
+#, no-wrap
+msgid "The full version of Perl installed (for example, `5.8.9`)."
+msgstr "Полная версия Perl установлена (например, `5.8.9`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1332
+#, no-wrap
+msgid "`PERL_LEVEL`"
+msgstr "`PERL_LEVEL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1334
+#, no-wrap
+msgid "The installed Perl version as an integer of the form `MNNNPP` (for example, `500809`)."
+msgstr "Установленная версия Perl в виде целого числа формата `MNNNPP` (например, `500809`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1335
+#, no-wrap
+msgid "`PERL_ARCH`"
+msgstr "`PERL_ARCH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1337
+#, no-wrap
+msgid "Where Perl stores architecture dependent libraries. Defaults to `${ARCH}-freebsd`."
+msgstr "Где Perl хранит архитектурно-зависимые библиотеки. По умолчанию: `${ARCH}-freebsd`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1338
+#, no-wrap
+msgid "`PERL_PORT`"
+msgstr "`PERL_PORT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1340
+#, no-wrap
+msgid "Name of the Perl port that is installed (for example, `perl5`)."
+msgstr "Имя порта Perl, который установлен (например, `perl5`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1341
+#, no-wrap
+msgid "`SITE_PERL`"
+msgstr "`SITE_PERL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1342
+#, no-wrap
+msgid "Directory name where site specific Perl packages go. This value is added to `PLIST_SUB`."
+msgstr "Имя каталога, в котором размещаются специфичные для сайта пакеты Perl. Это значение добавляется в `PLIST_SUB`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1348
+msgid ""
+"Ports of Perl modules which do not have an official website must link to "
+"`cpan.org` in the WWW line of [.filename]#Makefile#. The preferred URL form "
+"is `https://search.cpan.org/dist/Module-Name/` (including the trailing "
+"slash)."
+msgstr ""
+"Порты Perl-модулей, у которых нет официального сайта, должны ссылаться на "
+"`cpan.org` в строке WWW файла [.filename]#Makefile#. Предпочтительный формат "
+"URL: `https://search.cpan.org/dist/Module-Name/` (включая завершающий слеш)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1356
+msgid ""
+"Do not use `${SITE_PERL}` in dependency declarations. Doing so assumes that "
+"[.filename]#perl5.mk# has been included, which is not always true. Ports "
+"depending on this port will have incorrect dependencies if this port's files "
+"move later in an upgrade. The right way to declare Perl module dependencies "
+"is shown in the example below."
+msgstr ""
+"Не используйте `${SITE_PERL}` в объявлениях зависимостей. Это предполагает, "
+"что был включён файл [.filename]#perl5.mk#, что не всегда верно. Порты, "
+"зависящие от этого порта, будут иметь некорректные зависимости, если файлы "
+"этого порта будут перемещены во время обновления. Правильный способ "
+"объявления зависимостей модулей Perl показан в примере ниже."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1359
+#, no-wrap
+msgid "Perl Dependency Example"
+msgstr "Пример зависимости Perl"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1365
+#, no-wrap
+msgid "p5-IO-Tee>=0.64:devel/p5-IO-Tee\n"
+msgstr "p5-IO-Tee>=0.64:devel/p5-IO-Tee\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1370
+msgid ""
+"For Perl ports that install manual pages, the macro `PERL5_MAN3` and "
+"`PERL5_MAN1` can be used inside [.filename]#pkg-plist#. For example,"
+msgstr ""
+"Для портов Perl, которые устанавливают страницы руководства, макросы "
+"`PERL5_MAN3` и `PERL5_MAN1` могут использоваться внутри [.filename]#pkg-"
+"plist#. Например,"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1375
+#, no-wrap
+msgid ""
+"lib/perl5/5.14/man/man1/event.1.gz\n"
+"lib/perl5/5.14/man/man3/AnyEvent::I3.3.gz\n"
+msgstr ""
+"lib/perl5/5.14/man/man1/event.1.gz\n"
+"lib/perl5/5.14/man/man3/AnyEvent::I3.3.gz\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1378
+msgid "can be replaced with"
+msgstr "может быть заменено на"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1383
+#, no-wrap
+msgid ""
+"%%PERL5_MAN1%%/event.1.gz\n"
+"%%PERL5_MAN3%%/AnyEvent::I3.3.gz\n"
+msgstr ""
+"%%PERL5_MAN1%%/event.1.gz\n"
+"%%PERL5_MAN3%%/AnyEvent::I3.3.gz\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1388
+msgid ""
+"There are no `PERL5_MAN_x_` macros for the other sections (_x_ in `2` and "
+"`4` to `9`) because those get installed in the regular directories."
+msgstr ""
+"Для других разделов (_x_ в `2` и `4`–`9`) макросы `PERL5_MAN_x_` "
+"отсутствуют, так как они устанавливаются в обычные каталоги."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1391
+#, no-wrap
+msgid "A Port Which Only Requires Perl to Build"
+msgstr "Порт, требующий Perl только для сборки"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1395
+msgid "As the default USE_PERL5 value is build and run, set it to:"
+msgstr ""
+"Поскольку значение USE_PERL5 по умолчанию включает build и run, установите "
+"его в:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1400
+#, no-wrap
+msgid ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tbuild\n"
+msgstr ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tbuild\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1405
+#, no-wrap
+msgid "A Port Which Also Requires Perl to Patch"
+msgstr "Порт, который также требует Perl для исправления"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1410
+msgid ""
+"From time to time, using man:sed[1] for patching is not enough. When using "
+"man:perl[1] is easier, use:"
+msgstr ""
+"Время от времени использования man:sed[1] для исправлений недостаточно. "
+"Когда использование man:perl[1] проще, примените:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1415
+#, no-wrap
+msgid ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tpatch build run\n"
+msgstr ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tpatch build run\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1420
+#, no-wrap
+msgid "A Perl Module Which Needs `ExtUtils::MakeMaker` to Build"
+msgstr "Модуль Perl, для сборки которого требуется `ExtUtils::MakeMaker`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1425
+msgid ""
+"Most Perl modules come with a [.filename]#Makefile.PL# configure script. In "
+"this case, set:"
+msgstr ""
+"Большинство модулей Perl поставляются с конфигурационным скриптом "
+"[.filename]#Makefile.PL#. В этом случае установите:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1430
+#, no-wrap
+msgid ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tconfigure\n"
+msgstr ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tconfigure\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1435
+#, no-wrap
+msgid "A Perl Module Which Needs `Module::Build` to Build"
+msgstr "Модуль Perl, для сборки которого требуется `Module::Build`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1439
+msgid ""
+"When a Perl module comes with a [.filename]#Build.PL# configure script, it "
+"can require Module::Build, in which case, set"
+msgstr ""
+"Когда модуль Perl поставляется с конфигурационным скриптом "
+"[.filename]#Build.PL#, он может требовать Module::Build, и в этом случае "
+"установите"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1444
+#, no-wrap
+msgid ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tmodbuild\n"
+msgstr ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tmodbuild\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1447
+msgid "If it instead requires Module::Build::Tiny, set"
+msgstr "Если вместо этого требуется Module::Build::Tiny, установите"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1452
+#, no-wrap
+msgid ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tmodbuildtiny\n"
+msgstr ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tmodbuildtiny\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1457
+#, no-wrap
+msgid "Using X11"
+msgstr "Использование X11"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1460
+#, no-wrap
+msgid "X.Org Components"
+msgstr "Компоненты X.Org"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1465
+msgid ""
+"The X11 implementation available in The Ports Collection is X.Org. If the "
+"application depends on X components, add `USES= xorg` and set `USE_XORG` to "
+"the list of required components. A full list can be found in "
+"crossref:uses[uses-xorg,`xorg`]."
+msgstr ""
+"Реализация X11, доступная в Коллекции портов, — это X.Org. Если приложение "
+"зависит от компонентов X, добавьте `USES= xorg` и укажите необходимые "
+"компоненты в `USE_XORG`. Полный список можно найти в crossref:uses[uses-"
+"xorg,`xorg`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1470
+msgid ""
+"The Mesa Project is an effort to provide free OpenGL implementation. To "
+"specify a dependency on various components of this project, use `USES= gl` "
+"and `USE_GL`. See crossref:uses[uses-gl,`gl`] for a full list of available "
+"components. For backwards compatibility, the value of `yes` maps to `glu`."
+msgstr ""
+"Проект Mesa — это инициатива по предоставлению свободной реализации OpenGL. "
+"Чтобы указать зависимость от различных компонентов этого проекта, "
+"используйте `USES=gl` и `USE_GL`. См. crossref:uses[uses-gl,`gl`] для "
+"полного списка доступных компонентов. Для обратной совместимости значение "
+"`yes` соответствует `glu`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1472
+#, no-wrap
+msgid "`USE_XORG` Example"
+msgstr "Пример `USE_XORG`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1480
+#, no-wrap
+msgid ""
+"USES=\t\tgl xorg\n"
+"USE_GL=\t\tglu\n"
+"USE_XORG=\txrender xft xkbfile xt xaw\n"
+msgstr ""
+"USES=\t\tgl xorg\n"
+"USE_GL=\t\tglu\n"
+"USE_XORG=\txrender xft xkbfile xt xaw\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1485
+#, no-wrap
+msgid "Variables for Ports That Use X"
+msgstr "Переменные для портов, использующих X"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1489
+#, no-wrap
+msgid "`USES= imake`"
+msgstr "`USES= imake`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1491
+#, no-wrap
+msgid "The port uses `imake`."
+msgstr "Порт использует `imake`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1492
+#, no-wrap
+msgid "`XMKMF`"
+msgstr "`XMKMF`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1493
+#, no-wrap
+msgid "Set to the path of `xmkmf` if not in the `PATH`. Defaults to `xmkmf -a`."
+msgstr "Установить путь к `xmkmf`, если он отсутствует в `PATH`. По умолчанию: `xmkmf -a`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1496
+#, no-wrap
+msgid "Using X11-Related Variables"
+msgstr "Использование переменных, связанных с X11"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1504
+#, no-wrap
+msgid ""
+"# Use some X11 libraries\n"
+"USES=\t\txorg\n"
+"USE_XORG=\tx11 xpm\n"
+msgstr ""
+"# Use some X11 libraries\n"
+"USES=\t\txorg\n"
+"USE_XORG=\tx11 xpm\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1509
+#, no-wrap
+msgid "Ports That Require Motif"
+msgstr "Порты, требующие Motif"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1515
+msgid ""
+"If the port requires a Motif library, define `USES= motif` in the "
+"[.filename]#Makefile#. Default Motif implementation is package:x11-toolkits/"
+"open-motif[]. Users can choose package:x11-toolkits/lesstif[] instead by "
+"setting `WANT_LESSTIF` in their [.filename]#make.conf#. Similarly "
+"package:x11-toolkits/open-motif-devel[] can be chosen by setting "
+"`WANT_OPEN_MOTIF_DEVEL` in [.filename]#make.conf#."
+msgstr ""
+"Если порт требует библиотеку Motif, определите `USES= motif` в "
+"[.filename]#Makefile#. Реализация Motif по умолчанию — это package:x11-"
+"toolkits/open-motif[]. Пользователи могут выбрать package:x11-toolkits/"
+"lesstif[] вместо этого, установив `WANT_LESSTIF` в своём "
+"[.filename]#make.conf#. Аналогично package:x11-toolkits/open-motif-devel[] "
+"можно выбрать, установив `WANT_OPEN_MOTIF_DEVEL` в [.filename]#make.conf#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1518
+msgid ""
+"`MOTIFLIB` will be set by [.filename]#motif.mk# to reference the appropriate "
+"Motif library. Please patch the source of the port to use `${MOTIFLIB}` "
+"wherever the Motif library is referenced in the original "
+"[.filename]#Makefile# or [.filename]#Imakefile#."
+msgstr ""
+"`MOTIFLIB` будет установлен в файле [.filename]#motif.mk# для ссылки на "
+"соответствующую библиотеку Motif. Пожалуйста, исправьте исходный код порта, "
+"чтобы использовать `${MOTIFLIB}` везде, где библиотека Motif упоминается в "
+"оригинальном [.filename]#Makefile# или [.filename]#Imakefile#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1520
+msgid "There are two common cases:"
+msgstr "Есть два распространённых случая:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1522
+msgid ""
+"If the port refers to the Motif library as `-lXm` in its "
+"[.filename]#Makefile# or [.filename]#Imakefile#, substitute `${MOTIFLIB}` "
+"for it."
+msgstr ""
+"Если порт ссылается на библиотеку Motif как `-lXm` в своем "
+"[.filename]#Makefile# или [.filename]#Imakefile#, замените это на `$"
+"{MOTIFLIB}`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1523
+msgid ""
+"If the port uses `XmClientLibs` in its [.filename]#Imakefile#, change it to "
+"`${MOTIFLIB} ${XTOOLLIB} ${XLIB}`."
+msgstr ""
+"Если порт использует `XmClientLibs` в своем [.filename]#Imakefile#, замените "
+"это на `${MOTIFLIB} ${XTOOLLIB} ${XLIB}`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1525
+msgid ""
+"Note that `MOTIFLIB` (usually) expands to `-L/usr/local/lib -lXm -lXp` or `/"
+"usr/local/lib/libXm.a`, so there is no need to add `-L` or `-l` in front."
+msgstr ""
+"Обратите внимание, что `MOTIFLIB` (обычно) раскрывается в `-L/usr/local/lib "
+"-lXm -lXp` или `/usr/local/lib/libXm.a`, поэтому нет необходимости добавлять "
+"`-L` или `-l` перед этим."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1527
+#, no-wrap
+msgid "X11 Fonts"
+msgstr "Шрифты X11"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1530
+msgid ""
+"If the port installs fonts for the X Window System, put them in "
+"[.filename]#LOCALBASE/lib/X11/fonts/local#."
+msgstr ""
+"Если порт устанавливает шрифты для X Window System, поместите их в "
+"[.filename]#LOCALBASE/lib/X11/fonts/local#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1532
+#, no-wrap
+msgid "Getting a Fake `DISPLAY` with Xvfb"
+msgstr "Получение поддельного `DISPLAY` с помощью Xvfb"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1539
+msgid ""
+"Some applications require a working X11 display for compilation to succeed. "
+"This poses a problem for machines that operate headless. When this variable "
+"is used, the build infrastructure will start the virtual framebuffer X "
+"server. The working `DISPLAY` is then passed to the build. See "
+"crossref:uses[uses-display,`USES=display`] for the possible arguments."
+msgstr ""
+"Некоторые приложения требуют рабочего дисплея X11 для успешной компиляции. "
+"Это создаёт проблему для машин, работающих без монитора. При использовании "
+"этой переменной инфраструктура сборки запустит виртуальный X-сервер с "
+"буфером кадров. Рабочий `DISPLAY` затем передаётся в процесс сборки. См. "
+"crossref:uses[uses-display,`USES=display`] для возможных аргументов."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1543
+#, no-wrap
+msgid "USES=\tdisplay\n"
+msgstr "USES=\tdisplay\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1547
+#, no-wrap
+msgid "Desktop Entries"
+msgstr "Desktop Entries (пункты рабочего стола)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1553
+msgid ""
+"Desktop entries (https://standards.freedesktop.org/desktop-entry-spec/latest/"
+"[a Freedesktop standard]) provide a way to automatically adjust desktop "
+"features when a new program is installed, without requiring user "
+"intervention. For example, newly-installed programs automatically appear in "
+"the application menus of compatible desktop environments. Desktop entries "
+"originated in the GNOME desktop environment, but are now a standard and also "
+"work with KDE and Xfce. This bit of automation provides a real benefit to "
+"the user, and desktop entries are encouraged for applications which can be "
+"used in a desktop environment."
+msgstr ""
+"Desktop entries (https://standards.freedesktop.org/desktop-entry-spec/latest/"
+"[стандарт Freedesktop]) предоставляют способ автоматической настройки "
+"функций рабочего стола при установке новой программы без вмешательства "
+"пользователя. Например, вновь установленные программы автоматически "
+"появляются в меню приложений совместимых сред рабочего стола. Desktop "
+"entries появились в среде GNOME, но теперь стали стандартом и также работают "
+"с KDE и Xfce. Эта автоматизация приносит реальную пользу пользователю, "
+"поэтому Desktop entries рекомендуются для приложений, которые могут "
+"использоваться в среде рабочего стола."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1555
+#, no-wrap
+msgid "Using Predefined [.filename]#.desktop# Files"
+msgstr "Использование предопределенных файлов [.filename]#.desktop#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1559
+msgid ""
+"Ports that include predefined [.filename]#*.desktop# must include those "
+"files in [.filename]#pkg-plist# and install them in the "
+"[.filename]#$LOCALBASE/share/applications# directory. The "
+"crossref:makefiles[install-macros,`INSTALL_DATA` macro] is useful for "
+"installing these files."
+msgstr ""
+"Порты, включающие предопределённые файлы [.filename]#*.desktop#, должны "
+"добавлять эти файлы в [.filename]#pkg-plist# и устанавливать их в директорию "
+"[.filename]#$LOCALBASE/share/applications#. Для установки таких файлов "
+"полезен макрос crossref:makefiles[install-macros,`INSTALL_DATA`]."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1561
+#, no-wrap
+msgid "Updating Desktop Database"
+msgstr "Обновление базы данных рабочего стола"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1565
+msgid ""
+"If a port has a MimeType entry in its [.filename]#portname.desktop#, the "
+"desktop database must be updated after install and deinstall. To do this, "
+"define `USES`= desktop-file-utils."
+msgstr ""
+"Если порт имеет запись MimeType в файле [.filename]#portname.desktop#, базу "
+"данных рабочего стола необходимо обновить после установки и удаления. Для "
+"этого определите `USES`= desktop-file-utils."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1567
+#, no-wrap
+msgid "Creating Desktop Entries with `DESKTOP_ENTRIES`"
+msgstr "Создание Desktop Entries с помощью `DESKTOP_ENTRIES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1572
+msgid ""
+"Desktop entries can be easily created for applications by using "
+"`DESKTOP_ENTRIES`. A file named [.filename]#name.desktop# will be created, "
+"installed, and added to [.filename]#pkg-plist# automatically. Syntax is:"
+msgstr ""
+"Desktop Entries могут быть легко созданы для приложений с использованием "
+"`DESKTOP_ENTRIES`. Файл с именем [.filename]#name.desktop# будет создан, "
+"установлен и автоматически добавлен в [.filename]#pkg-plist#. Синтаксис "
+"следующий:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1576
+#, no-wrap
+msgid "DESKTOP_ENTRIES=\t\"NAME\" \"COMMENT\" \"ICON\" \"COMMAND\" \"CATEGORY\" StartupNotify\n"
+msgstr "DESKTOP_ENTRIES=\t\"NAME\" \"COMMENT\" \"ICON\" \"COMMAND\" \"CATEGORY\" StartupNotify\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1583
+msgid ""
+"The list of possible categories is available on the https://"
+"standards.freedesktop.org/menu-spec/latest/apa.html[Freedesktop website]. "
+"`StartupNotify` indicates whether the application is compatible with "
+"_startup notifications_. These are typically a graphic indicator like a "
+"clock that appear at the mouse pointer, menu, or panel to give the user an "
+"indication when a program is starting. A program that is compatible with "
+"startup notifications clears the indicator after it has started. Programs "
+"that are not compatible with startup notifications would never clear the "
+"indicator (potentially confusing and infuriating the user), and must have "
+"`StartupNotify` set to `false` so the indicator is not shown at all."
+msgstr ""
+"Список возможных категорий доступен на https://standards.freedesktop.org/"
+"menu-spec/latest/apa.html[сайте Freedesktop]. `StartupNotify` указывает, "
+"совместимо ли приложение с _уведомлениями о запуске_. Обычно это "
+"графический индикатор, например, часы, который появляется у указателя мыши, "
+"в меню или на панели, чтобы дать пользователю понять, что программа "
+"запускается. Программа, совместимая с уведомлениями о запуске, очищает "
+"индикатор после своего старта. Программы, не совместимые с уведомлениями о "
+"запуске, никогда не очищают индикатор (что может сбивать с толку и "
+"раздражать пользователя), и у них должен быть установлен параметр "
+"`StartupNotify` в значение `false`, чтобы индикатор вообще не отображался."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1585
+msgid "Example:"
+msgstr "Пример:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1592
+#, no-wrap
+msgid ""
+"DESKTOP_ENTRIES=\t\"ToME\" \"Roguelike game based on JRR Tolkien's work\" \\\n"
+"\t\t\t\"${DATADIR}/xtra/graf/tome-128.png\" \\\n"
+"\t\t\t\"tome -v -g\" \"Application;Game;RolePlaying;\" \\\n"
+"\t\t\tfalse\n"
+msgstr ""
+"DESKTOP_ENTRIES=\t\"ToME\" \"Roguelike game based on JRR Tolkien's work\" \\\n"
+"\t\t\t\"${DATADIR}/xtra/graf/tome-128.png\" \\\n"
+"\t\t\t\"tome -v -g\" \"Application;Game;RolePlaying;\" \\\n"
+"\t\t\tfalse\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1597
+msgid ""
+"`DESKTOP_ENTRIES` are installed in the directory pointed to by the "
+"`DESKTOPDIR` variable. `DESKTOPDIR` defaults to [.filename]#${PREFIX}/share/"
+"applications#"
+msgstr ""
+"`DESKTOP_ENTRIES` устанавливаются в директорию, указанную переменной "
+"`DESKTOPDIR`. По умолчанию `DESKTOPDIR` имеет значение [.filename]#${PREFIX}/"
+"share/applications#"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1600
+#, no-wrap
+msgid "Using GNOME"
+msgstr "Использование GNOME"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1603
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3769
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4070
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4286
+#, no-wrap
+msgid "Introduction"
+msgstr "Введение"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1607
+msgid ""
+"This chapter explains the GNOME framework as used by ports. The framework "
+"can be loosely divided into the base components, GNOME desktop components, "
+"and a few special macros that simplify the work of port maintainers."
+msgstr ""
+"Эта глава объясняет фреймворк GNOME, используемый в портах. Фреймворк можно "
+"условно разделить на базовые компоненты, компоненты рабочего стола GNOME и "
+"несколько специальных макросов, упрощающих работу сопровождающих портов."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1609
+#, no-wrap
+msgid "Using `USE_GNOME`"
+msgstr "Использование `USE_GNOME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1617
+msgid ""
+"Adding this variable to the port allows the use of the macros and components "
+"defined in [.filename]#bsd.gnome.mk#. The code in [.filename]#bsd.gnome.mk# "
+"adds the needed build-time, run-time or library dependencies or the handling "
+"of special files. GNOME applications under FreeBSD use the `USE_GNOME` "
+"infrastructure. Include all the needed components as a space-separated "
+"list. The `USE_GNOME` components are divided into these virtual lists: "
+"basic components, GNOME 3 components and legacy components. If the port "
+"needs only GTK3 libraries, this is the shortest way to define it:"
+msgstr ""
+"Добавление этой переменной в порт позволяет использовать макросы и "
+"компоненты, определённые в [.filename]#bsd.gnome.mk#. Код в "
+"[.filename]#bsd.gnome.mk# добавляет необходимые зависимости для сборки, "
+"выполнения или библиотеки, а также обработку специальных файлов. Приложения "
+"GNOME в FreeBSD используют инфраструктуру `USE_GNOME`. Включите все "
+"необходимые компоненты в виде списка, разделённого пробелами. Компоненты "
+"`USE_GNOME` разделены на следующие виртуальные списки: основные компоненты, "
+"компоненты GNOME 3 и устаревшие компоненты. Если порту требуются только "
+"библиотеки GTK3, это кратчайший способ определить это:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1621
+#, no-wrap
+msgid "USE_GNOME=\tgtk30\n"
+msgstr "USE_GNOME=\tgtk30\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1625
+msgid ""
+"`USE_GNOME` components automatically add the dependencies they need. Please "
+"see crossref:special[gnome-components, GNOME Components] for an exhaustive "
+"list of all `USE_GNOME` components and which other components they imply and "
+"their dependencies."
+msgstr ""
+"`USE_GNOME` компоненты автоматически добавляют необходимые им зависимости. "
+"Подробный список всех компонентов `USE_GNOME`, а также информацию о том, "
+"какие другие компоненты они подразумевают и их зависимости, можно найти в "
+"crossref:special[gnome-components, Компоненты GNOME]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1628
+msgid ""
+"Here is an example [.filename]#Makefile# for a GNOME port that uses many of "
+"the techniques outlined in this document. Please use it as a guide for "
+"creating new ports."
+msgstr ""
+"Вот пример [.filename]#Makefile# для порта GNOME, в котором используются "
+"многие методы, описанные в этом документе. Пожалуйста, используйте его в "
+"качестве руководства при создании новых портов."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1635
+#, no-wrap
+msgid ""
+"PORTNAME=\tregexxer\n"
+"DISTVERSION=\t0.10\n"
+"CATEGORIES=\tdevel textproc gnome\n"
+"MASTER_SITES=\tGNOME\n"
+msgstr ""
+"PORTNAME=\tregexxer\n"
+"DISTVERSION=\t0.10\n"
+"CATEGORIES=\tdevel textproc gnome\n"
+"MASTER_SITES=\tGNOME\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1639
+#, no-wrap
+msgid ""
+"MAINTAINER=\tkwm@FreeBSD.org\n"
+"COMMENT=\tInteractive tool for performing search and replace operations\n"
+"WWW=\t\thttp://regexxer.sourceforge.net/\n"
+msgstr ""
+"MAINTAINER=\tkwm@FreeBSD.org\n"
+"COMMENT=\tInteractive tool for performing search and replace operations\n"
+"WWW=\t\thttp://regexxer.sourceforge.net/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1643
+#, no-wrap
+msgid ""
+"USES=\t\tgettext gmake localbase:ldflags pathfix pkgconfig tar:xz\n"
+"GNU_CONFIGURE=\tyes\n"
+"USE_GNOME=\tgnomeprefix intlhack gtksourceviewmm3\n"
+msgstr ""
+"USES=\t\tgettext gmake localbase:ldflags pathfix pkgconfig tar:xz\n"
+"GNU_CONFIGURE=\tyes\n"
+"USE_GNOME=\tgnomeprefix intlhack gtksourceviewmm3\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1645
+#, no-wrap
+msgid "GLIB_SCHEMAS=\torg.regexxer.gschema.xml\n"
+msgstr "GLIB_SCHEMAS=\torg.regexxer.gschema.xml\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1653
+msgid ""
+"The `USE_GNOME` macro without any arguments does not add any dependencies to "
+"the port. `USE_GNOME` cannot be set after [.filename]#bsd.port.pre.mk#."
+msgstr ""
+"Макрос `USE_GNOME` без аргументов не добавляет никаких зависимостей к порту. "
+"`USE_GNOME` не может быть установлен после [.filename]#bsd.port.pre.mk#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1656
+#, no-wrap
+msgid "Variables"
+msgstr "Переменные"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1662
+msgid ""
+"This section explains which macros are available and how they are used. "
+"Like they are used in the above example. The crossref:special[gnome-"
+"components, GNOME Components] has a more in-depth explanation. `USE_GNOME` "
+"has to be set for these macros to be of use."
+msgstr ""
+"Этот раздел объясняет, какие макросы доступны и как они используются. Как, "
+"например, в приведённом выше примере. В crossref:special[gnome-components, "
+"Компоненты GNOME] содержится более подробное объяснение. Для использования "
+"этих макросов необходимо установить `USE_GNOME`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1663
+#, no-wrap
+msgid "`GLIB_SCHEMAS`"
+msgstr "`GLIB_SCHEMAS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1666
+msgid ""
+"List of all the glib schema files the port installs. The macro will add the "
+"files to the port plist and handle the registration of these files on "
+"install and deinstall."
+msgstr ""
+"Список всех файлов схем glib, которые устанавливает порт. Макрос добавит "
+"файлы в plist порта и обработает регистрацию этих файлов при установке и "
+"удалении."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1671
+msgid ""
+"The glib schema files are written in XML and end with the "
+"[.filename]#gschema.xml# extension. They are installed in the "
+"[.filename]#share/glib-2.0/schemas/# directory. These schema files contain "
+"all application config values with their default settings. The actual "
+"database used by the applications is built by glib-compile-schema, which is "
+"run by the `GLIB_SCHEMAS` macro."
+msgstr ""
+"Файлы схем glib написаны в XML и имеют расширение [.filename]#gschema.xml#. "
+"Они устанавливаются в директорию [.filename]#share/glib-2.0/schemas/#. Эти "
+"файлы схем содержат все настройки конфигурации приложений со значениями по "
+"умолчанию. Фактическая база данных, используемая приложениями, создаётся с "
+"помощью glib-compile-schema, которая запускается макросом `GLIB_SCHEMAS`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1675
+#, no-wrap
+msgid "GLIB_SCHEMAS=foo.gschema.xml\n"
+msgstr "GLIB_SCHEMAS=foo.gschema.xml\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1681
+msgid ""
+"Do not add glib schemas to the [.filename]#pkg-plist#. If they are listed "
+"in [.filename]#pkg-plist#, they will not be registered and the applications "
+"might not work properly."
+msgstr ""
+"Не добавляйте схемы glib в файл [.filename]#pkg-plist#. Если они указаны в "
+"[.filename]#pkg-plist#, они не будут зарегистрированы, и приложения могут "
+"работать некорректно."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1683
+#, no-wrap
+msgid "`GCONF_SCHEMAS`"
+msgstr "`GCONF_SCHEMAS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1686
+msgid ""
+"List all the gconf schema files. The macro will add the schema files to the "
+"port plist and will handle their registration on install and deinstall."
+msgstr ""
+"Перечислите все файлы схем gconf. Макрос добавит файлы схем в plist порта и "
+"обеспечит их регистрацию при установке и удалении."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1691
+msgid ""
+"GConf is the XML-based database that virtually all GNOME applications use "
+"for storing their settings. These files are installed into the "
+"[.filename]#etc/gconf/schemas# directory. This database is defined by "
+"installed schema files that are used to generate [.filename]#%gconf.xml# key "
+"files. For each schema file installed by the port, there must be an entry "
+"in the [.filename]#Makefile#:"
+msgstr ""
+"GConf — это база данных на основе XML, которую используют практически все "
+"приложения GNOME для хранения своих настроек. Эти файлы устанавливаются в "
+"директорию [.filename]#etc/gconf/schemas#. Эта база данных определяется "
+"установленными файлами схем, которые используются для генерации ключевых "
+"файлов [.filename]#%gconf.xml#. Для каждого файла схемы, устанавливаемого "
+"портом, должна быть запись в [.filename]#Makefile#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1695
+#, no-wrap
+msgid "GCONF_SCHEMAS=my_app.schemas my_app2.schemas my_app3.schemas\n"
+msgstr "GCONF_SCHEMAS=my_app.schemas my_app2.schemas my_app3.schemas\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1701
+msgid ""
+"Gconf schemas are listed in the `GCONF_SCHEMAS` macro rather than "
+"[.filename]#pkg-plist#. If they are listed in [.filename]#pkg-plist#, they "
+"will not be registered and the applications might not work properly."
+msgstr ""
+"Схемы Gconf перечислены в макросе `GCONF_SCHEMAS`, а не в файле "
+"[.filename]#pkg-plist#. Если они указаны в [.filename]#pkg-plist#, они не "
+"будут зарегистрированы, и приложения могут работать некорректно."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1703
+#, no-wrap
+msgid "`INSTALLS_OMF`"
+msgstr "`INSTALLS_OMF`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1707
+msgid ""
+"Open Source Metadata Framework (OMF) files are commonly used by GNOME 2 "
+"applications. These files contain the application help file information, "
+"and require special processing by ScrollKeeper/rarian. To properly register "
+"OMF files when installing GNOME applications from packages, make sure that "
+"`omf` files are listed in `pkg-plist` and that the port "
+"[.filename]#Makefile# has `INSTALLS_OMF` defined:"
+msgstr ""
+"Файлы Open Source Metadata Framework (OMF) часто используются приложениями "
+"GNOME 2. Эти файлы содержат информацию о файлах справки приложений и требуют "
+"специальной обработки с помощью ScrollKeeper/rarian. Для правильной "
+"регистрации файлов OMF при установке приложений GNOME из пакетов убедитесь, "
+"что файлы `omf` указаны в `pkg-plist` и что в [.filename]#Makefile# порта "
+"определено `INSTALLS_OMF`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1711
+#, no-wrap
+msgid "INSTALLS_OMF=yes\n"
+msgstr "INSTALLS_OMF=yes\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1714
+msgid ""
+"When set, [.filename]#bsd.gnome.mk# automatically scans [.filename]#pkg-"
+"plist# and adds appropriate `@exec` and `@unexec` directives for each "
+"[.filename]#.omf# to track in the OMF registration database."
+msgstr ""
+"При установке [.filename]#bsd.gnome.mk# автоматически сканирует "
+"[.filename]#pkg-plist# и добавляет соответствующие директивы `@exec` и "
+"`@unexec` для каждого файла [.filename]#.omf#, который необходимо "
+"отслеживать в базе данных регистрации OMF."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1716
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1726
+#, no-wrap
+msgid "GNOME Components"
+msgstr "Компоненты GNOME"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1724
+msgid ""
+"For further help with a GNOME port, look at some of the link:https://"
+"ports.FreeBSD.org[existing ports] for examples. The link:https://"
+"www.FreeBSD.org/gnome/[FreeBSD GNOME page] has contact information if more "
+"help is needed. The components are divided into GNOME components that are "
+"currently in use and legacy components. If the component supports argument, "
+"they are listed between parenthesis in the description. The first is the "
+"default. \"Both\" is shown if the component defaults to adding to both "
+"build and run dependencies."
+msgstr ""
+"Для получения дополнительной помощи с портом GNOME, ознакомьтесь с "
+"некоторыми из link:https://ports.FreeBSD.org[существующих портов] в качестве "
+"примеров. На странице link:https://www.FreeBSD.org/gnome/[FreeBSD GNOME] "
+"указана контактная информация, если требуется дополнительная помощь. "
+"Компоненты разделены на используемые в настоящее время компоненты GNOME и "
+"устаревшие компоненты. Если компонент поддерживает аргументы, они "
+"перечислены в скобках в описании. Первый аргумент является значением по "
+"умолчанию. \"Both\" указывается, если компонент по умолчанию добавляется как "
+"в зависимости для сборки, так и для выполнения."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1730
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1899
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1916
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2085
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3911
+#, no-wrap
+msgid "Component"
+msgstr "Компонент"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1731
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1917
+#, no-wrap
+msgid "Associated program"
+msgstr "Связанная программа"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1734
+#, no-wrap
+msgid "`atk`"
+msgstr "`atk`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1735
+#, no-wrap
+msgid "accessibility/atk"
+msgstr "accessibility/atk"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1737
+#, no-wrap
+msgid "Accessibility toolkit (ATK)"
+msgstr "Инструментарий доступности (ATK)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1738
+#, no-wrap
+msgid "`atkmm`"
+msgstr "`atkmm`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1739
+#, no-wrap
+msgid "accessibility/atkmm"
+msgstr "accessibility/atkmm"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1741
+#, no-wrap
+msgid "c++ bindings for atk"
+msgstr "C++ интерфейс для atk"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1742
+#, no-wrap
+msgid "`cairo`"
+msgstr "`cairo`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1743
+#, no-wrap
+msgid "graphics/cairo"
+msgstr "graphics/cairo"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1745
+#, no-wrap
+msgid "Vector graphics library with cross-device output support"
+msgstr "Векторная графическая библиотека с поддержкой вывода на различные устройства"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1746
+#, no-wrap
+msgid "`cairomm`"
+msgstr "`cairomm`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1747
+#, no-wrap
+msgid "graphics/cairomm"
+msgstr "graphics/cairomm"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1749
+#, no-wrap
+msgid "c++ bindings for cairo"
+msgstr "C++ интерфейс для cairo"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1750
+#, no-wrap
+msgid "`dconf`"
+msgstr "`dconf`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1751
+#, no-wrap
+msgid "devel/dconf"
+msgstr "devel/dconf"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1753
+#, no-wrap
+msgid "Configuration database system (both, build, run)"
+msgstr "Система базы данных конфигурации (both, build, run)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1754
+#, no-wrap
+msgid "`evolutiondataserver3`"
+msgstr "`evolutiondataserver3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1755
+#, no-wrap
+msgid "databases/evolution-data-server"
+msgstr "databases/evolution-data-server"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1757
+#, no-wrap
+msgid "Data backends for the Evolution integrated mail/PIM suite"
+msgstr "Бэкенды данных для интегрированного почтового клиента/PIM Evolution"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1758
+#, no-wrap
+msgid "`gdkpixbuf2`"
+msgstr "`gdkpixbuf2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1759
+#, no-wrap
+msgid "graphics/gdk-pixbuf2"
+msgstr "graphics/gdk-pixbuf2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1761
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1943
+#, no-wrap
+msgid "Graphics library for GTK+"
+msgstr "Графическая библиотека для GTK+"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1762
+#, no-wrap
+msgid "`glib20`"
+msgstr "`glib20`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1763
+#, no-wrap
+msgid "devel/glib20"
+msgstr "devel/glib20"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1765
+#, no-wrap
+msgid "GNOME core library `glib20`"
+msgstr "Основная библиотека GNOME `glib20`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1766
+#, no-wrap
+msgid "`glibmm`"
+msgstr "`glibmm`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1767
+#, no-wrap
+msgid "devel/glibmm"
+msgstr "devel/glibmm"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1769
+#, no-wrap
+msgid "c++ bindings for glib20"
+msgstr "C++ интерфейс для glib20"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1770
+#, no-wrap
+msgid "`gnomecontrolcenter3`"
+msgstr "`gnomecontrolcenter3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1771
+#, no-wrap
+msgid "sysutils/gnome-control-center"
+msgstr "sysutils/gnome-control-center"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1773
+#, no-wrap
+msgid "GNOME 3 Control Center"
+msgstr "Центр управления GNOME 3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1774
+#, no-wrap
+msgid "`gnomedesktop3`"
+msgstr "`gnomedesktop3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1775
+#, no-wrap
+msgid "x11/gnome-desktop"
+msgstr "x11/gnome-desktop"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1777
+#, no-wrap
+msgid "GNOME 3 desktop UI library"
+msgstr "Библиотека пользовательского интерфейса рабочего стола GNOME 3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1778
+#, no-wrap
+msgid "`gsound`"
+msgstr "`gsound`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1779
+#, no-wrap
+msgid "audio/gsound"
+msgstr "audio/gsound"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1781
+#, no-wrap
+msgid "GObject library for playing system sounds (both, build, run)"
+msgstr "Библиотека GObject для воспроизведения системных звуков (both, build, run)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1782
+#, no-wrap
+msgid "`gtk-update-icon-cache`"
+msgstr "`gtk-update-icon-cache`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1783
+#, no-wrap
+msgid "graphics/gtk-update-icon-cache"
+msgstr "graphics/gtk-update-icon-cache"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1785
+#, no-wrap
+msgid "Gtk-update-icon-cache utility from the Gtk+ toolkit"
+msgstr "Утилита `gtk-update-icon-cache` из набора инструментов `Gtk+`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1786
+#, no-wrap
+msgid "`gtk20`"
+msgstr "`gtk20`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1787
+#, no-wrap
+msgid "x11-toolkits/gtk20"
+msgstr "x11-toolkits/gtk20"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1789
+#, no-wrap
+msgid "Gtk+ 2 toolkit"
+msgstr "Набор инструментов Gtk+ 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1790
+#, no-wrap
+msgid "`gtk30`"
+msgstr "`gtk30`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1791
+#, no-wrap
+msgid "x11-toolkits/gtk30"
+msgstr "x11-toolkits/gtk30"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1793
+#, no-wrap
+msgid "Gtk+ 3 toolkit"
+msgstr "Набор инструментов Gtk+ 3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1794
+#, no-wrap
+msgid "`gtkmm20`"
+msgstr "`gtkmm20`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1795
+#, no-wrap
+msgid "x11-toolkits/gtkmm20"
+msgstr "x11-toolkits/gtkmm20"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1797
+#, no-wrap
+msgid "c++ bindings 2.0 for the gtk20 toolkit"
+msgstr "C++ интерфейс 2.0 для инструментария gtk20"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1798
+#, no-wrap
+msgid "`gtkmm24`"
+msgstr "`gtkmm24`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1799
+#, no-wrap
+msgid "x11-toolkits/gtkmm24"
+msgstr "x11-toolkits/gtkmm24"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1801
+#, no-wrap
+msgid "c++ bindings 2.4 for the gtk20 toolkit"
+msgstr "C++ интерфейс 2.4 для инструментария gtk20"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1802
+#, no-wrap
+msgid "`gtkmm30`"
+msgstr "`gtkmm30`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1803
+#, no-wrap
+msgid "x11-toolkits/gtkmm30"
+msgstr "x11-toolkits/gtkmm30"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1805
+#, no-wrap
+msgid "c++ bindings 3.0 for the gtk30 toolkit"
+msgstr "C++ интерфейс 3.0 для набора инструментов gtk30"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1806
+#, no-wrap
+msgid "`gtksourceview2`"
+msgstr "`gtksourceview2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1807
+#, no-wrap
+msgid "x11-toolkits/gtksourceview2"
+msgstr "x11-toolkits/gtksourceview2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1809
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1987
+#, no-wrap
+msgid "Widget that adds syntax highlighting to GtkTextView"
+msgstr "Виджет, добавляющий подсветку синтаксиса в GtkTextView"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1810
+#, no-wrap
+msgid "`gtksourceview3`"
+msgstr "`gtksourceview3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1811
+#, no-wrap
+msgid "x11-toolkits/gtksourceview3"
+msgstr "x11-toolkits/gtksourceview3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1813
+#, no-wrap
+msgid "Text widget that adds syntax highlighting to the GtkTextView widget"
+msgstr "Текстовая виджет, добавляющая подсветку синтаксиса к виджету GtkTextView"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1814
+#, no-wrap
+msgid "`gtksourceviewmm3`"
+msgstr "`gtksourceviewmm3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1815
+#, no-wrap
+msgid "x11-toolkits/gtksourceviewmm3"
+msgstr "x11-toolkits/gtksourceviewmm3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1817
+#, no-wrap
+msgid "c++ bindings for the gtksourceview3 library"
+msgstr "C++ интерфейс для библиотеки gtksourceview3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1818
+#, no-wrap
+msgid "`gvfs`"
+msgstr "`gvfs`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1819
+#, no-wrap
+msgid "devel/gvfs"
+msgstr "devel/gvfs"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1821
+#, no-wrap
+msgid "GNOME virtual file system"
+msgstr "Виртуальная файловая система GNOME"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1822
+#, no-wrap
+msgid "`intltool`"
+msgstr "`intltool`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1823
+#, no-wrap
+msgid "textproc/intltool"
+msgstr "textproc/intltool"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1825
+#, no-wrap
+msgid "Tool for internationalization (also see intlhack)"
+msgstr "Инструмент для интернационализации (см. также intlhack)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1826
+#, no-wrap
+msgid "`introspection`"
+msgstr "`introspection`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1827
+#, no-wrap
+msgid "devel/gobject-introspection"
+msgstr "devel/gobject-introspection"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1829
+#, no-wrap
+msgid "Basic introspection bindings and tools to generate introspection bindings. Most of the time :build is enough, :both/:run is only need for applications that use introspection bindings. (both, build, run)"
+msgstr "Базовые привязки (биндинги) интроспекции и инструменты для генерации привязок интроспекции. В большинстве случаев достаточно `:build`, `:both`/`:run` нужны только для приложений, использующих привязки интроспекции. (both, build, run)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1830
+#, no-wrap
+msgid "`libgda5`"
+msgstr "`libgda5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1831
+#, no-wrap
+msgid "databases/libgda5"
+msgstr "databases/libgda5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1833
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2003
+#, no-wrap
+msgid "Provides uniform access to different kinds of data sources"
+msgstr "Обеспечивает единообразный доступ к различным типам источников данных"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1834
+#, no-wrap
+msgid "`libgda5-ui`"
+msgstr "`libgda5-ui`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1835
+#, no-wrap
+msgid "databases/libgda5-ui"
+msgstr "databases/libgda5-ui"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1837
+#, no-wrap
+msgid "UI library from the libgda5 library"
+msgstr "Библиотека пользовательского интерфейса из библиотеки libgda5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1838
+#, no-wrap
+msgid "`libgdamm5`"
+msgstr "`libgdamm5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1839
+#, no-wrap
+msgid "databases/libgdamm5"
+msgstr "databases/libgdamm5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1841
+#, no-wrap
+msgid "c++ bindings for the libgda5 library"
+msgstr "привязки C++ для библиотеки libgda5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1842
+#, no-wrap
+msgid "`libgsf`"
+msgstr "`libgsf`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1843
+#, no-wrap
+msgid "devel/libgsf"
+msgstr "devel/libgsf"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1845
+#, no-wrap
+msgid "Extensible I/O abstraction for dealing with structured file formats"
+msgstr "Расширяемая абстракция ввода-вывода для работы со структурированными форматами файлов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1846
+#, no-wrap
+msgid "`librsvg2`"
+msgstr "`librsvg2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1847
+#, no-wrap
+msgid "graphics/librsvg2"
+msgstr "graphics/librsvg2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1849
+#, no-wrap
+msgid "Library for parsing and rendering SVG vector-graphic files"
+msgstr "Библиотека для разбора и отображения SVG-файлов векторной графики"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1850
+#, no-wrap
+msgid "`libsigc++20`"
+msgstr "`libsigc++20`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1851
+#, no-wrap
+msgid "devel/libsigc++20"
+msgstr "devel/libsigc++20"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1853
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2047
+#, no-wrap
+msgid "Callback Framework for C++"
+msgstr "Фреймворк обратных вызовов для C++"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1854
+#, no-wrap
+msgid "`libxml++26`"
+msgstr "`libxml++26`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1855
+#, no-wrap
+msgid "textproc/libxml++26"
+msgstr "textproc/libxml++26"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1857
+#, no-wrap
+msgid "c++ bindings for the libxml2 library"
+msgstr "C++ привязки для библиотеки libxml2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1858
+#, no-wrap
+msgid "`libxml2`"
+msgstr "`libxml2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1859
+#, no-wrap
+msgid "textproc/libxml2"
+msgstr "textproc/libxml2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1861
+#, no-wrap
+msgid "XML parser library (both, build, run)"
+msgstr "Библиотека парсера XML (both, build, run)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1862
+#, no-wrap
+msgid "`libxslt`"
+msgstr "`libxslt`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1863
+#, no-wrap
+msgid "textproc/libxslt"
+msgstr "textproc/libxslt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1865
+#, no-wrap
+msgid "XSLT C library (both, build, run)"
+msgstr "Библиотека XSLT (сборка, выполнение)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1866
+#, no-wrap
+msgid "`metacity`"
+msgstr "`metacity`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1867
+#, no-wrap
+msgid "x11-wm/metacity"
+msgstr "x11-wm/metacity"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1869
+#, no-wrap
+msgid "Window manager from GNOME"
+msgstr "Менеджер окон из GNOME"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1870
+#, no-wrap
+msgid "`nautilus3`"
+msgstr "`nautilus3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1871
+#, no-wrap
+msgid "x11-fm/nautilus"
+msgstr "x11-fm/nautilus"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1873
+#, no-wrap
+msgid "GNOME file manager"
+msgstr "GNOME файловый менеджер"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1874
+#, no-wrap
+msgid "`pango`"
+msgstr "`pango`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1875
+#, no-wrap
+msgid "x11-toolkits/pango"
+msgstr "x11-toolkits/pango"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1877
+#, no-wrap
+msgid "Open-source framework for the layout and rendering of i18n text"
+msgstr "Открытый фреймворк для разметки и отображения интернационализированного текста"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1878
+#, no-wrap
+msgid "`pangomm`"
+msgstr "`pangomm`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1879
+#, no-wrap
+msgid "x11-toolkits/pangomm"
+msgstr "x11-toolkits/pangomm"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1881
+#, no-wrap
+msgid "c++ bindings for the pango library"
+msgstr "C++ интерфейс для библиотеки pango"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1882
+#, no-wrap
+msgid "`py3gobject3`"
+msgstr "`py3gobject3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1883
+#, no-wrap
+msgid "devel/py3-gobject3"
+msgstr "devel/py3-gobject3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1885
+#, no-wrap
+msgid "Python 3, GObject 3.0 bindings"
+msgstr "Python 3, интерфейс GObject 3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1886
+#, no-wrap
+msgid "`pygobject3`"
+msgstr "`pygobject3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1887
+#, no-wrap
+msgid "devel/py-gobject3"
+msgstr "devel/py-gobject3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1889
+#, no-wrap
+msgid "Python 2, GObject 3.0 bindings"
+msgstr "Python 2, интерфейс GObject 3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1890
+#, no-wrap
+msgid "`vte3`"
+msgstr "`vte3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1891
+#, no-wrap
+msgid "x11-toolkits/vte3"
+msgstr "x11-toolkits/vte3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1892
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2078
+#, no-wrap
+msgid "Terminal widget with improved accessibility and I18N support"
+msgstr "Виджет терминала с улучшенной поддержкой доступности и интернационализации (I18N)"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1895
+#, no-wrap
+msgid "GNOME Macro Components"
+msgstr "Компоненты макросов GNOME"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1902
+#, no-wrap
+msgid "`gnomeprefix`"
+msgstr "`gnomeprefix`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1904
+#, no-wrap
+msgid "Supply `configure` with some default locations."
+msgstr "Предоставляет `configure` некоторые стандартные расположения."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1905
+#, no-wrap
+msgid "`intlhack`"
+msgstr "`intlhack`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1907
+#, no-wrap
+msgid "Same as intltool, but patches to make sure [.filename]#share/locale/# is used. Please only use when `intltool` alone is not enough."
+msgstr "То же, что и `intltool`, но с патчами для гарантии использования [.filename]#share/locale/#. Используйте только в случае, когда одного `intltool` недостаточно."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1908
+#, no-wrap
+msgid "`referencehack`"
+msgstr "`referencehack`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1909
+#, no-wrap
+msgid "This macro is there to help splitting of the API or reference documentation into its own port."
+msgstr "Этот макрос предназначен для помощи в разделении API или справочной документации на собственный порт."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1912
+#, no-wrap
+msgid "GNOME Legacy Components"
+msgstr "Компоненты GNOME Legacy"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1920
+#, no-wrap
+msgid "`atspi`"
+msgstr "`atspi`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1921
+#, no-wrap
+msgid "accessibility/at-spi"
+msgstr "accessibility/at-spi"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1923
+#, no-wrap
+msgid "Assistive Technology Service Provider Interface"
+msgstr "Интерфейс поставщика услуг вспомогательных технологий (AT-SPI)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1924
+#, no-wrap
+msgid "`esound`"
+msgstr "`esound`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1925
+#, no-wrap
+msgid "audio/esound"
+msgstr "audio/esound"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1927
+#, no-wrap
+msgid "Enlightenment sound package"
+msgstr "Пакет звука Enlightenment"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1928
+#, no-wrap
+msgid "`gal2`"
+msgstr "`gal2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1929
+#, no-wrap
+msgid "x11-toolkits/gal2"
+msgstr "x11-toolkits/gal2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1931
+#, no-wrap
+msgid "Collection of widgets taken from GNOME 2 gnumeric"
+msgstr "Коллекция виджетов, взятых из GNOME 2 gnumeric"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1932
+#, no-wrap
+msgid "`gconf2`"
+msgstr "`gconf2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1933
+#, no-wrap
+msgid "devel/gconf2"
+msgstr "devel/gconf2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1935
+#, no-wrap
+msgid "Configuration database system for GNOME 2"
+msgstr "Система базы данных конфигурации для GNOME 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1936
+#, no-wrap
+msgid "`gconfmm26`"
+msgstr "`gconfmm26`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1937
+#, no-wrap
+msgid "devel/gconfmm26"
+msgstr "devel/gconfmm26"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1939
+#, no-wrap
+msgid "c++ bindings for gconf2"
+msgstr "C++ привязки C++ для gconf2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1940
+#, no-wrap
+msgid "`gdkpixbuf`"
+msgstr "`gdkpixbuf`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1941
+#, no-wrap
+msgid "graphics/gdk-pixbuf"
+msgstr "graphics/gdk-pixbuf"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1944
+#, no-wrap
+msgid "`glib12`"
+msgstr "`glib12`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1945
+#, no-wrap
+msgid "devel/glib12"
+msgstr "devel/glib12"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1947
+#, no-wrap
+msgid "glib 1.2 core library"
+msgstr "Библиотека ядра glib 1.2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1948
+#, no-wrap
+msgid "`gnomedocutils`"
+msgstr "`gnomedocutils`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1949
+#, no-wrap
+msgid "textproc/gnome-doc-utils"
+msgstr "textproc/gnome-doc-utils"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1951
+#, no-wrap
+msgid "GNOME doc utils"
+msgstr "Утилиты документации GNOME"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1952
+#, no-wrap
+msgid "`gnomemimedata`"
+msgstr "`gnomemimedata`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1953
+#, no-wrap
+msgid "misc/gnome-mime-data"
+msgstr "misc/gnome-mime-data"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1955
+#, no-wrap
+msgid "MIME and Application database for GNOME 2"
+msgstr "База данных MIME и приложений для GNOME 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1956
+#, no-wrap
+msgid "`gnomesharp20`"
+msgstr "`gnomesharp20`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1957
+#, no-wrap
+msgid "x11-toolkits/gnome-sharp20"
+msgstr "x11-toolkits/gnome-sharp20"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1959
+#, no-wrap
+msgid "GNOME 2 interfaces for the .NET runtime"
+msgstr "Интерфейсы GNOME 2 для среды выполнения .NET"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1960
+#, no-wrap
+msgid "`gnomespeech`"
+msgstr "`gnomespeech`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1961
+#, no-wrap
+msgid "accessibility/gnome-speech"
+msgstr "accessibility/gnome-speech"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1963
+#, no-wrap
+msgid "GNOME 2 text-to-speech API"
+msgstr "GNOME 2 API преобразования текста в речь"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1964
+#, no-wrap
+msgid "`gnomevfs2`"
+msgstr "`gnomevfs2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1965
+#, no-wrap
+msgid "devel/gnome-vfs"
+msgstr "devel/gnome-vfs"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1967
+#, no-wrap
+msgid "GNOME 2 Virtual File System"
+msgstr "Виртуальная файловая система GNOME 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1968
+#, no-wrap
+msgid "`gtk12`"
+msgstr "`gtk12`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1969
+#, no-wrap
+msgid "x11-toolkits/gtk12"
+msgstr "x11-toolkits/gtk12"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1971
+#, no-wrap
+msgid "Gtk+ 1.2 toolkit"
+msgstr "Набор инструментов Gtk+ 1.2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1972
+#, no-wrap
+msgid "`gtkhtml3`"
+msgstr "`gtkhtml3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1973
+#, no-wrap
+msgid "www/gtkhtml3"
+msgstr "www/gtkhtml3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1975
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1979
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2035
+#, no-wrap
+msgid "Lightweight HTML rendering/printing/editing engine"
+msgstr "Облегченный движок для отображения/печати/редактирования HTML"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1976
+#, no-wrap
+msgid "`gtkhtml4`"
+msgstr "`gtkhtml4`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1977
+#, no-wrap
+msgid "www/gtkhtml4"
+msgstr "www/gtkhtml4"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1980
+#, no-wrap
+msgid "`gtksharp20`"
+msgstr "`gtksharp20`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1981
+#, no-wrap
+msgid "x11-toolkits/gtk-sharp20"
+msgstr "x11-toolkits/gtk-sharp20"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1983
+#, no-wrap
+msgid "GTK+ and GNOME 2 interfaces for the .NET runtime"
+msgstr "Интерфейсы GTK+ и GNOME 2 для среды выполнения .NET"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1984
+#, no-wrap
+msgid "`gtksourceview`"
+msgstr "`gtksourceview`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1985
+#, no-wrap
+msgid "x11-toolkits/gtksourceview"
+msgstr "x11-toolkits/gtksourceview"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1988
+#, no-wrap
+msgid "`libartgpl2`"
+msgstr "`libartgpl2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1989
+#, no-wrap
+msgid "graphics/libart_lgpl"
+msgstr "graphics/libart_lgpl"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1991
+#, no-wrap
+msgid "Library for high-performance 2D graphics"
+msgstr "Библиотека для высокопроизводительной 2D графики"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1992
+#, no-wrap
+msgid "`libbonobo`"
+msgstr "`libbonobo`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1993
+#, no-wrap
+msgid "devel/libbonobo"
+msgstr "devel/libbonobo"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1995
+#, no-wrap
+msgid "Component and compound document system for GNOME 2"
+msgstr "Система компонентов и составных документов для GNOME 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1996
+#, no-wrap
+msgid "`libbonoboui`"
+msgstr "`libbonoboui`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1997
+#, no-wrap
+msgid "x11-toolkits/libbonoboui"
+msgstr "x11-toolkits/libbonoboui"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1999
+#, no-wrap
+msgid "GUI frontend to the libbonobo component of GNOME 2"
+msgstr "Интерфейс для libbonobo в GNOME 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2000
+#, no-wrap
+msgid "`libgda4`"
+msgstr "`libgda4`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2001
+#, no-wrap
+msgid "databases/libgda4"
+msgstr "databases/libgda4"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2004
+#, no-wrap
+msgid "`libglade2`"
+msgstr "`libglade2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2005
+#, no-wrap
+msgid "devel/libglade2"
+msgstr "devel/libglade2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2007
+#, no-wrap
+msgid "GNOME 2 glade library"
+msgstr "Библиотека glade для GNOME 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2008
+#, no-wrap
+msgid "`libgnome`"
+msgstr "`libgnome`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2009
+#, no-wrap
+msgid "x11/libgnome"
+msgstr "x11/libgnome"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2011
+#, no-wrap
+msgid "Libraries for GNOME 2, a GNU desktop environment"
+msgstr "Библиотеки для GNOME 2, GNU окружения рабочего стола"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2012
+#, no-wrap
+msgid "`libgnomecanvas`"
+msgstr "`libgnomecanvas`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2013
+#, no-wrap
+msgid "graphics/libgnomecanvas"
+msgstr "graphics/libgnomecanvas"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2015
+#, no-wrap
+msgid "Graphics library for GNOME 2"
+msgstr "Графическая библиотека для GNOME 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2016
+#, no-wrap
+msgid "`libgnomekbd`"
+msgstr "`libgnomekbd`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2017
+#, no-wrap
+msgid "x11/libgnomekbd"
+msgstr "x11/libgnomekbd"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2019
+#, no-wrap
+msgid "GNOME 2 keyboard shared library"
+msgstr "Динамическая библиотека клавиатуры GNOME 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2020
+#, no-wrap
+msgid "`libgnomeprint`"
+msgstr "`libgnomeprint`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2021
+#, no-wrap
+msgid "print/libgnomeprint"
+msgstr "print/libgnomeprint"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2023
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2027
+#, no-wrap
+msgid "Gnome 2 print support library"
+msgstr "Библиотека поддержки печати Gnome 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2024
+#, no-wrap
+msgid "`libgnomeprintui`"
+msgstr "`libgnomeprintui`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2025
+#, no-wrap
+msgid "x11-toolkits/libgnomeprintui"
+msgstr "x11-toolkits/libgnomeprintui"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2028
+#, no-wrap
+msgid "`libgnomeui`"
+msgstr "`libgnomeui`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2029
+#, no-wrap
+msgid "x11-toolkits/libgnomeui"
+msgstr "x11-toolkits/libgnomeui"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2031
+#, no-wrap
+msgid "Libraries for the GNOME 2 GUI, a GNU desktop environment"
+msgstr "Библиотеки для графического интерфейса GNOME 2, среды рабочего стола GNU"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2032
+#, no-wrap
+msgid "`libgtkhtml`"
+msgstr "`libgtkhtml`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2033
+#, no-wrap
+msgid "www/libgtkhtml"
+msgstr "www/libgtkhtml"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2036
+#, no-wrap
+msgid "`libgtksourceviewmm`"
+msgstr "`libgtksourceviewmm`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2037
+#, no-wrap
+msgid "x11-toolkits/libgtksourceviewmm"
+msgstr "x11-toolkits/libgtksourceviewmm"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2039
+#, no-wrap
+msgid "c++ binding of GtkSourceView"
+msgstr "C++ интерфейс GtkSourceView"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2040
+#, no-wrap
+msgid "`libidl`"
+msgstr "`libidl`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2041
+#, no-wrap
+msgid "devel/libIDL"
+msgstr "devel/libIDL"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2043
+#, no-wrap
+msgid "Library for creating trees of CORBA IDL file"
+msgstr "Библиотека для создания деревьев файлов CORBA IDL"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2044
+#, no-wrap
+msgid "`libsigc++12`"
+msgstr "`libsigc++12`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2045
+#, no-wrap
+msgid "devel/libsigc++12"
+msgstr "devel/libsigc++12"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2048
+#, no-wrap
+msgid "`libwnck`"
+msgstr "`libwnck`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2049
+#, no-wrap
+msgid "x11-toolkits/libwnck"
+msgstr "x11-toolkits/libwnck"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2051
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2055
+#, no-wrap
+msgid "Library used for writing pagers and taskslists"
+msgstr "Библиотека, используемая для написания пейджеров и списков задач"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2052
+#, no-wrap
+msgid "`libwnck3`"
+msgstr "`libwnck3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2053
+#, no-wrap
+msgid "x11-toolkits/libwnck3"
+msgstr "x11-toolkits/libwnck3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2056
+#, no-wrap
+msgid "`orbit2`"
+msgstr "`orbit2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2057
+#, no-wrap
+msgid "devel/ORBit2"
+msgstr "devel/ORBit2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2059
+#, no-wrap
+msgid "High-performance CORBA ORB with support for the C language"
+msgstr "Высокопроизводительный CORBA ORB с поддержкой языка C"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2060
+#, no-wrap
+msgid "`pygnome2`"
+msgstr "`pygnome2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2061
+#, no-wrap
+msgid "x11-toolkits/py-gnome2"
+msgstr "x11-toolkits/py-gnome2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2063
+#, no-wrap
+msgid "Python bindings for GNOME 2"
+msgstr "Интерфейс Python для GNOME 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2064
+#, no-wrap
+msgid "`pygobject`"
+msgstr "`pygobject`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2065
+#, no-wrap
+msgid "devel/py-gobject"
+msgstr "devel/py-gobject"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2067
+#, no-wrap
+msgid "Python 2, GObject 2.0 bindings"
+msgstr "Python 2, интерфейс GObject 2.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2068
+#, no-wrap
+msgid "`pygtk2`"
+msgstr "`pygtk2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2069
+#, no-wrap
+msgid "x11-toolkits/py-gtk2"
+msgstr "x11-toolkits/py-gtk2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2071
+#, no-wrap
+msgid "Set of Python bindings for GTK+"
+msgstr "Набор интерфейсов Python для GTK+"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2072
+#, no-wrap
+msgid "`pygtksourceview`"
+msgstr "`pygtksourceview`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2073
+#, no-wrap
+msgid "x11-toolkits/py-gtksourceview"
+msgstr "x11-toolkits/py-gtksourceview"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2075
+#, no-wrap
+msgid "Python bindings for GtkSourceView 2"
+msgstr "Интерфейс Python для GtkSourceView 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2076
+#, no-wrap
+msgid "`vte`"
+msgstr "`vte`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2077
+#, no-wrap
+msgid "x11-toolkits/vte"
+msgstr "x11-toolkits/vte"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2081
+#, no-wrap
+msgid "Deprecated Components: Do Not Use"
+msgstr "Устаревшие компоненты: не использовать"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2088
+#, no-wrap
+msgid "`pangox-compat`"
+msgstr "`pangox-compat`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2089
+#, no-wrap
+msgid "pangox-compat has been deprecated and split off from the pango package."
+msgstr "pangox-compat устарел и был отделён от пакета pango."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2092
+#, no-wrap
+msgid "Using Qt"
+msgstr "Использование Qt"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2097
+msgid ""
+"For ports that are part of Qt itself, see crossref:uses[uses-qt-dist,`qt-"
+"dist`]."
+msgstr ""
+"Для портов, которые являются частью самого Qt, см. crossref:uses[uses-qt-"
+"dist,`qt-dist`]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2100
+#, no-wrap
+msgid "Ports That Require Qt"
+msgstr "Порты, требующие Qt"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2105
+msgid ""
+"The Ports Collection provides support for Qt 5 and Qt 6 with `USES+=qt:5` "
+"and `USES+=qt:6` respectively. Set `USE_QT` to the list of required Qt "
+"components (libraries, tools, plugins)."
+msgstr ""
+"Коллекция портов поддерживает Qt 5 и Qt 6 с помощью `USES+=qt:5` и "
+"`USES+=qt:6` соответственно. Установите `USE_QT` в список необходимых "
+"компонентов Qt (libraries, tools, plugins - библиотеки, инструменты, "
+"плагины)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2107
+msgid ""
+"The Qt framework exports a number of variables which can be used by ports, "
+"some of them listed below:"
+msgstr ""
+"Фреймворк Qt экспортирует ряд переменных, которые могут использоваться "
+"портами, некоторые из них перечислены ниже:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2109
+#, no-wrap
+msgid "Variables Provided to Ports That Use Qt"
+msgstr "Переменные, предоставляемые портам, использующим Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2113
+#, no-wrap
+msgid "`QMAKE`"
+msgstr "`QMAKE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2115
+#, no-wrap
+msgid "Full path to `qmake` binary."
+msgstr "Полный путь к исполняемому файлу `qmake`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2116
+#, no-wrap
+msgid "`LRELEASE`"
+msgstr "`LRELEASE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2118
+#, no-wrap
+msgid "Full path to `lrelease` utility."
+msgstr "Полный путь к утилите `lrelease`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2119
+#, no-wrap
+msgid "`MOC`"
+msgstr "`MOC`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2121
+#, no-wrap
+msgid "Full path to `moc`."
+msgstr "Полный путь к `moc`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2122
+#, no-wrap
+msgid "`RCC`"
+msgstr "`RCC`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2124
+#, no-wrap
+msgid "Full path to `rcc`."
+msgstr "Полный путь к `rcc`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2125
+#, no-wrap
+msgid "`UIC`"
+msgstr "`UIC`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2127
+#, no-wrap
+msgid "Full path to `uic`."
+msgstr "Полный путь к `uic`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2128
+#, no-wrap
+msgid "`QT_INCDIR`"
+msgstr "`QT_INCDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2130
+#, no-wrap
+msgid "Qt include directory."
+msgstr "Каталог включаемых файлов Qt."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2131
+#, no-wrap
+msgid "`QT_LIBDIR`"
+msgstr "`QT_LIBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2133
+#, no-wrap
+msgid "Qt libraries path."
+msgstr "Путь к библиотекам Qt."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2134
+#, no-wrap
+msgid "`QT_PLUGINDIR`"
+msgstr "`QT_PLUGINDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2135
+#, no-wrap
+msgid "Qt plugins path."
+msgstr "Путь к плагинам Qt."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2138
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3857
+#, no-wrap
+msgid "Component Selection"
+msgstr "Выбор компонентов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2145
+msgid ""
+"Individual Qt tool and library dependencies must be specified in `USE_QT`. "
+"Every component can be suffixed with `_build` or `_run`, the suffix "
+"indicating whether the dependency on the component is at buildtime or "
+"runtime. If unsuffixed, the component will be depended on at both build- "
+"and runtime. Usually, library components are specified unsuffixed, tool "
+"components are mostly specified with the `_build` suffix and plugin "
+"components are specified with the `_run` suffix. The most commonly used "
+"components are listed below (all available components are listed in "
+"`_USE_QT_ALL`, which is generated from `_USE_QT_COMMON` and "
+"`_USE_QT[56]_ONLY` in [.filename]#/usr/ports/Mk/Uses/qt.mk#):"
+msgstr ""
+"Отдельные зависимости инструментов и библиотек Qt должны быть указаны в "
+"`USE_QT`. Каждый компонент может иметь суффикс `_build` или `_run`, "
+"указывающий, требуется ли компонент во время сборки или выполнения. Если "
+"суффикс отсутствует, компонент будет требоваться как во время сборки, так и "
+"во время выполнения. Обычно компоненты библиотек указываются без суффикса, "
+"компоненты инструментов чаще всего указываются с суффиксом `_build`, а "
+"компоненты плагинов — с суффиксом `_run`. Наиболее часто используемые "
+"компоненты перечислены ниже (все доступные компоненты перечислены в "
+"`_USE_QT_ALL`, которая формируется из `_USE_QT_COMMON` и `_USE_QT[56]_ONLY` "
+"в [.filename]#/usr/ports/Mk/Uses/qt.mk#):"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2147
+#, no-wrap
+msgid "Available Qt Library Components"
+msgstr "Доступные компоненты библиотеки Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2151
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2395
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2412
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2545
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3125
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3847
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3867
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3892
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3996
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4166
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4218
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4310
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4401
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4463
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4724
+#, no-wrap
+msgid "Name"
+msgstr "Имя"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2154
+#, no-wrap
+msgid "`3d`"
+msgstr "`3d`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2156
+#, no-wrap
+msgid "Qt3D module"
+msgstr "Модуль Qt3D"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2157
+#, no-wrap
+msgid "`5compat`"
+msgstr "`5compat`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2159
+#, no-wrap
+msgid "Qt 5 compatibility module for Qt 6"
+msgstr "Модуль совместимости Qt 5 для Qt 6"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2160
+#, no-wrap
+msgid "`assistant`"
+msgstr "`assistant`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2162
+#, no-wrap
+msgid "Qt 5 documentation browser"
+msgstr "Браузер документации Qt 5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2163
+#, no-wrap
+msgid "`base`"
+msgstr "`base`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2165
+#, no-wrap
+msgid "Qt 6 base module"
+msgstr "Модуль Qt 6 base"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2166
+#, no-wrap
+msgid "`canvas3d`"
+msgstr "`canvas3d`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2168
+#, no-wrap
+msgid "Qt canvas3d module"
+msgstr "Модуль Qt canvas3d"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2169
+#, no-wrap
+msgid "`charts`"
+msgstr "`charts`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2171
+#, no-wrap
+msgid "Qt 5 charts module"
+msgstr "Модуль Qt 5 charts"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2172
+#, no-wrap
+msgid "`concurrent`"
+msgstr "`concurrent`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2174
+#, no-wrap
+msgid "Qt multi-threading module"
+msgstr "Модуль многопоточности Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2175
+#, no-wrap
+msgid "`connectivity`"
+msgstr "`connectivity`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2177
+#, no-wrap
+msgid "Qt connectivity (Bluetooth/NFC) module"
+msgstr "Модуль Qt для подключения (Bluetooth/NFC)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2178
+#, no-wrap
+msgid "`core`"
+msgstr "`core`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2180
+#, no-wrap
+msgid "Qt core non-graphical module"
+msgstr "Ядро Qt, неграфический модуль"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2181
+#, no-wrap
+msgid "`datavis3d`"
+msgstr "`datavis3d`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2183
+#, no-wrap
+msgid "Qt 5 3D data visualization module"
+msgstr "Модуль визуализации 3D данных Qt 5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2184
+#, no-wrap
+msgid "`dbus`"
+msgstr "`dbus`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2186
+#, no-wrap
+msgid "Qt D-Bus inter-process communication module"
+msgstr "Модуль межпроцессного взаимодействия Qt D-Bus"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2187
+#, no-wrap
+msgid "`declarative`"
+msgstr "`declarative`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2189
+#, no-wrap
+msgid "Qt declarative framework for dynamic user interfaces"
+msgstr "Декларативный фреймворк Qt для динамических пользовательских интерфейсов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2190
+#, no-wrap
+msgid "`designer`"
+msgstr "`designer`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2192
+#, no-wrap
+msgid "Qt 5 graphical user interface designer"
+msgstr "Интерфейсный конструктор Qt 5 для графического пользовательского интерфейса"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2193
+#, no-wrap
+msgid "`diag`"
+msgstr "`diag`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2195
+#, no-wrap
+msgid "Tool for reporting diagnostic information about Qt and its environment"
+msgstr "Инструмент для сбора диагностической информации о Qt и его окружении"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2196
+#, no-wrap
+msgid "`doc`"
+msgstr "`doc`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2198
+#, no-wrap
+msgid "Qt 5 documentation"
+msgstr "Документация Qt 5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2199
+#, no-wrap
+msgid "`examples`"
+msgstr "`examples`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2201
+#, no-wrap
+msgid "Qt 5 examples sourcecode"
+msgstr "Исходный код примеров Qt 5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2202
+#, no-wrap
+msgid "`gamepad`"
+msgstr "`gamepad`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2204
+#, no-wrap
+msgid "Qt 5 Gamepad Module"
+msgstr "Модуль Qt 5 Gamepad"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2205
+#, no-wrap
+msgid "`graphicaleffects`"
+msgstr "`graphicaleffects`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2207
+#, no-wrap
+msgid "Qt Quick graphical effects"
+msgstr "Графические эффекты Qt Quick"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2208
+#, no-wrap
+msgid "`gui`"
+msgstr "`gui`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2210
+#, no-wrap
+msgid "Qt graphical user interface module"
+msgstr "Модуль графического интерфейса Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2211
+#, no-wrap
+msgid "`help`"
+msgstr "`help`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2213
+#, no-wrap
+msgid "Qt online help integration module"
+msgstr "Модуль интеграции справки Qt в режиме онлайн"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2214
+#, no-wrap
+msgid "`l10n`"
+msgstr "`l10n`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2216
+#, no-wrap
+msgid "Qt localized messages"
+msgstr "Локализованные сообщения Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2217
+#, no-wrap
+msgid "`languageserver`"
+msgstr "`languageserver`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2219
+#, no-wrap
+msgid "Qt 6 Language Server Protocol implementation"
+msgstr "Реализация протокола Language Server Protocol в Qt 6"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2220
+#, no-wrap
+msgid "`linguist`"
+msgstr "`linguist`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2222
+#, no-wrap
+msgid "Qt 5 translation tool"
+msgstr "Инструмент перевода Qt 5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2223
+#, no-wrap
+msgid "`location`"
+msgstr "`location`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2225
+#, no-wrap
+msgid "Qt location module"
+msgstr "Модуль Qt Location"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2226
+#, no-wrap
+msgid "`lottie`"
+msgstr "`lottie`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2228
+#, no-wrap
+msgid "Qt 6 QML API for rendering graphics and animations"
+msgstr "Qt 6 QML API для отрисовки графики и анимаций"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2229
+#, no-wrap
+msgid "`multimedia`"
+msgstr "`multimedia`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2231
+#, no-wrap
+msgid "Qt audio, video, radio and camera support module"
+msgstr "Модуль поддержки аудио, видео, радио и камеры Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2232
+#, no-wrap
+msgid "`network`"
+msgstr "`network`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2234
+#, no-wrap
+msgid "Qt network module"
+msgstr "Сетевой модуль Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2235
+#, no-wrap
+msgid "`networkauth`"
+msgstr "`networkauth`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2237
+#, no-wrap
+msgid "Qt network auth module"
+msgstr "Модуль сетевой аутентификации Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2238
+#, no-wrap
+msgid "`opengl`"
+msgstr "`opengl`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2240
+#, no-wrap
+msgid "Qt 5-compatible OpenGL support module"
+msgstr "Модуль поддержки OpenGL, совместимый с Qt 5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2241
+#, no-wrap
+msgid "`paths`"
+msgstr "`paths`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2243
+#, no-wrap
+msgid "Command line client to QStandardPaths"
+msgstr "Клиент командной строки для QStandardPaths"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2244
+#, no-wrap
+msgid "`phonon4`"
+msgstr "`phonon4`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2246
+#, no-wrap
+msgid "KDE multimedia framework"
+msgstr "Мультимедийный фреймворк KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2247
+#, no-wrap
+msgid "`pixeltool`"
+msgstr "`pixeltool`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2249
+#, no-wrap
+msgid "Qt 5 screen magnifier"
+msgstr "Увеличитель экрана Qt 5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2250
+#, no-wrap
+msgid "`plugininfo`"
+msgstr "`plugininfo`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2252
+#, no-wrap
+msgid "Qt 5 plugin metadata dumper"
+msgstr "Дампер метаданных плагинов Qt 5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2253
+#, no-wrap
+msgid "`positioning`"
+msgstr "`positioning`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2255
+#, no-wrap
+msgid "Qt 6 positioning API from sources such as satellite, wifi or text files."
+msgstr "Qt 6 API позиционирования из источников, таких как спутники, Wi-Fi или текстовые файлы."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2256
+#, no-wrap
+msgid "`printsupport`"
+msgstr "`printsupport`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2258
+#, no-wrap
+msgid "Qt print support module"
+msgstr "Модуль поддержки печати Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2259
+#, no-wrap
+msgid "`qdbus`"
+msgstr "`qdbus`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2261
+#, no-wrap
+msgid "Qt command-line interface to D-Bus"
+msgstr "Интерфейс командной строки Qt для D-Bus"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2262
+#, no-wrap
+msgid "`qdbusviewer`"
+msgstr "`qdbusviewer`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2264
+#, no-wrap
+msgid "Qt 5 graphical interface to D-Bus"
+msgstr "Графический интерфейс Qt 5 для D-Bus"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2265
+#, no-wrap
+msgid "`qdoc`"
+msgstr "`qdoc`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2267
+#, no-wrap
+msgid "Qt documentation generator"
+msgstr "Генератор документации Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2268
+#, no-wrap
+msgid "`qdoc-data`"
+msgstr "`qdoc-data`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2270
+#, no-wrap
+msgid "QDoc configuration files"
+msgstr "Файлы конфигурации QDoc"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2271
+#, no-wrap
+msgid "`qev`"
+msgstr "`qev`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2273
+#, no-wrap
+msgid "Qt QWidget events introspection tool"
+msgstr "Инструмент для интроспекции событий Qt QWidget"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2274
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2404
+#, no-wrap
+msgid "`qmake`"
+msgstr "`qmake`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2276
+#, no-wrap
+msgid "Qt Makefile generator"
+msgstr "Генератор Makefile Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2277
+#, no-wrap
+msgid "`quickcontrols`"
+msgstr "`quickcontrols`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2279
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2282
+#, no-wrap
+msgid "Set of controls for building complete interfaces in Qt Quick"
+msgstr "Набор элементов управления для создания полных интерфейсов в Qt Quick"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2280
+#, no-wrap
+msgid "`quickcontrols2`"
+msgstr "`quickcontrols2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2283
+#, no-wrap
+msgid "`remoteobjects`"
+msgstr "`remoteobjects`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2285
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2294
+#, no-wrap
+msgid "Qt 5 SXCML module"
+msgstr "Модуль Qt 5 SXCML"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2286
+#, no-wrap
+msgid "`script`"
+msgstr "`script`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2288
+#, no-wrap
+msgid "Qt 4-compatible scripting module"
+msgstr "Совместимый с Qt 4 модуль для написания сценариев"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2289
+#, no-wrap
+msgid "`scripttools`"
+msgstr "`scripttools`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2291
+#, no-wrap
+msgid "Qt Script additional components"
+msgstr "Дополнительные компоненты Qt Script"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2292
+#, no-wrap
+msgid "`scxml`"
+msgstr "`scxml`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2295
+#, no-wrap
+msgid "`sensors`"
+msgstr "`sensors`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2297
+#, no-wrap
+msgid "Qt sensors module"
+msgstr "Модуль Qt sensors"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2298
+#, no-wrap
+msgid "`serialbus`"
+msgstr "`serialbus`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2300
+#, no-wrap
+msgid "Qt functions to access industrial bus systems"
+msgstr "Функции Qt для доступа к промышленным шинным системам"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2301
+#, no-wrap
+msgid "`serialport`"
+msgstr "`serialport`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2303
+#, no-wrap
+msgid "Qt functions to access serial ports"
+msgstr "Функции Qt для доступа к последовательным портам"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2304
+#, no-wrap
+msgid "`shadertools`"
+msgstr "`shadertools`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2306
+#, no-wrap
+msgid "Qt 6 tools for the cross-platform Qt shader pipeline"
+msgstr "Инструменты Qt 6 для кроссплатформенного конвейера шейдеров Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2307
+#, no-wrap
+msgid "`speech`"
+msgstr "`speech`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2309
+#, no-wrap
+msgid "Accessibility features for Qt5"
+msgstr "Доступность в Qt5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2310
+#, no-wrap
+msgid "`sql`"
+msgstr "`sql`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2312
+#, no-wrap
+msgid "Qt SQL database integration module"
+msgstr "Модуль интеграции с базой данных Qt SQL"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2313
+#, no-wrap
+msgid "`sql-ibase`"
+msgstr "`sql-ibase`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2315
+#, no-wrap
+msgid "Qt InterBase/Firebird database plugin"
+msgstr "Плагин Qt баз данных InterBase/Firebird"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2316
+#, no-wrap
+msgid "`sql-mysql`"
+msgstr "`sql-mysql`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2318
+#, no-wrap
+msgid "Qt MySQL database plugin"
+msgstr "Плагин Qt базы данных MySQL"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2319
+#, no-wrap
+msgid "`sql-odbc`"
+msgstr "`sql-odbc`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2321
+#, no-wrap
+msgid "Qt Open Database Connectivity plugin"
+msgstr "Плагин Qt ODBC"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2322
+#, no-wrap
+msgid "`sql-pgsql`"
+msgstr "`sql-pgsql`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2324
+#, no-wrap
+msgid "Qt PostgreSQL database plugin"
+msgstr "Плагин Qt базы данных PostgreSQL"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2325
+#, no-wrap
+msgid "`sql-sqlite2`"
+msgstr "`sql-sqlite2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2327
+#, no-wrap
+msgid "Qt SQLite 2 database plugin"
+msgstr "Плагин Qt базы данных SQLite 2"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2328
+#, no-wrap
+msgid "`sql-sqlite3`"
+msgstr "`sql-sqlite3`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2330
+#, no-wrap
+msgid "Qt SQLite 3 database plugin"
+msgstr "Плагин Qt базы данных SQLite 3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2331
+#, no-wrap
+msgid "`sql-tds`"
+msgstr "`sql-tds`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2333
+#, no-wrap
+msgid "Qt TDS Database Connectivity database plugin"
+msgstr "Плагин Qt для подключение к базам данных по протоколу TDS"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2334
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3926
+#, no-wrap
+msgid "`svg`"
+msgstr "`svg`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2336
+#, no-wrap
+msgid "Qt SVG support module"
+msgstr "Модуль поддержки SVG в Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2337
+#, no-wrap
+msgid "`testlib`"
+msgstr "`testlib`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2339
+#, no-wrap
+msgid "Qt unit testing module"
+msgstr "Модуль тестирования Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2340
+#, no-wrap
+msgid "`tools`"
+msgstr "`tools`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2342
+#, no-wrap
+msgid "Qt 6 assorted tools"
+msgstr "Различные инструменты Qt 6"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2343
+#, no-wrap
+msgid "`translations`"
+msgstr "`translations`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2345
+#, no-wrap
+msgid "Qt 6 translation module"
+msgstr "Модуль перевода Qt 6"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2346
+#, no-wrap
+msgid "`uiplugin`"
+msgstr "`uiplugin`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2348
+#, no-wrap
+msgid "Custom Qt widget plugin interface for Qt Designer"
+msgstr "Интерфейс плагина пользовательского виджета Qt для Qt Designer"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2349
+#, no-wrap
+msgid "`uitools`"
+msgstr "`uitools`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2351
+#, no-wrap
+msgid "Qt Designer UI forms support module"
+msgstr "Модуль поддержки форм пользовательского интерфейса Qt Designer"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2352
+#, no-wrap
+msgid "`virtualkeyboard`"
+msgstr "`virtualkeyboard`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2354
+#, no-wrap
+msgid "Qt 5 Virtual Keyboard Module"
+msgstr "Модуль виртуальной клавиатуры Qt 5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2355
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3079
+#, no-wrap
+msgid "`wayland`"
+msgstr "`wayland`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2357
+#, no-wrap
+msgid "Qt 5 wrapper for Wayland"
+msgstr "Оболочка Qt 5 для Wayland"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2358
+#, no-wrap
+msgid "`webchannel`"
+msgstr "`webchannel`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2360
+#, no-wrap
+msgid "Qt 5 library for integration of C++/QML with HTML/js clients"
+msgstr "Библиотека Qt 5 для интеграции C++/QML с клиентами на HTML/js"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2361
+#, no-wrap
+msgid "`webengine`"
+msgstr "`webengine`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2363
+#, no-wrap
+msgid "Qt 5 library to render web content"
+msgstr "Библиотека Qt 5 для отображения веб-содержимого"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2364
+#, no-wrap
+msgid "`webkit`"
+msgstr "`webkit`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2366
+#, no-wrap
+msgid "QtWebKit with a more modern WebKit code base"
+msgstr "QtWebKit с более современной кодовой базой WebKit"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2367
+#, no-wrap
+msgid "`websockets`"
+msgstr "`websockets`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2369
+#, no-wrap
+msgid "Qt implementation of WebSocket protocol"
+msgstr "Реализация протокола WebSocket на Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2370
+#, no-wrap
+msgid "`websockets-qml`"
+msgstr "`websockets-qml`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2372
+#, no-wrap
+msgid "Qt implementation of WebSocket protocol (QML bindings)"
+msgstr "Реализация протокола WebSocket на Qt (привязки QML)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2373
+#, no-wrap
+msgid "`webview`"
+msgstr "`webview`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2375
+#, no-wrap
+msgid "Qt component for displaying web content"
+msgstr "Компонент Qt для отображения веб-содержимого"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2376
+#, no-wrap
+msgid "`widgets`"
+msgstr "`widgets`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2378
+#, no-wrap
+msgid "Qt C++ widgets module"
+msgstr "Модуль виджетов Qt C++"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2379
+#, no-wrap
+msgid "`x11extras`"
+msgstr "`x11extras`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2381
+#, no-wrap
+msgid "Qt platform-specific features for X11-based systems"
+msgstr "Платформо-специфичные возможности Qt для систем на основе X11"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2382
+#, no-wrap
+msgid "`xml`"
+msgstr "`xml`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2384
+#, no-wrap
+msgid "Qt SAX and DOM implementations"
+msgstr "Реализации SAX и DOM в Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2385
+#, no-wrap
+msgid "`xmlpatterns`"
+msgstr "`xmlpatterns`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2386
+#, no-wrap
+msgid "Qt support for XPath, XQuery, XSLT and XML Schema"
+msgstr "Поддержка Qt для XPath, XQuery, XSLT и XML Schema"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2389
+msgid ""
+"To determine the libraries an application depends on, run `ldd` on the main "
+"executable after a successful compilation."
+msgstr ""
+"Чтобы определить библиотеки, от которых зависит приложение, выполните `ldd` "
+"для основного исполняемого файла после успешной компиляции."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2391
+#, no-wrap
+msgid "Available Qt Tool Components"
+msgstr "Доступные компоненты инструментов Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2398
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3128
+#, no-wrap
+msgid "`buildtools`"
+msgstr "`buildtools`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2400
+#, no-wrap
+msgid "build tools (`moc`, `rcc`), needed for almost every Qt application."
+msgstr "инструменты сборки (`moc`, `rcc`), необходимые практически для любого приложения Qt."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2401
+#, no-wrap
+msgid "`linguisttools`"
+msgstr "`linguisttools`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2403
+#, no-wrap
+msgid "localization tools: `lrelease`, `lupdate`"
+msgstr "инструменты локализации: `lrelease`, `lupdate`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2405
+#, no-wrap
+msgid "Makefile generator/build utility"
+msgstr "Генератор Makefile/утилита сборки"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2408
+#, no-wrap
+msgid "Available Qt Plugin Components"
+msgstr "Доступные компоненты плагинов Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2415
+#, no-wrap
+msgid "`imageformats`"
+msgstr "`imageformats`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2416
+#, no-wrap
+msgid "plugins for TGA, TIFF, and MNG image formats"
+msgstr "плагины для графических форматов TGA, TIFF и MNG"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2419
+#, no-wrap
+msgid "Selecting Qt 5 Components"
+msgstr "Выбор компонентов Qt 5"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2425
+msgid ""
+"In this example, the ported application uses the Qt 5 graphical user "
+"interface library, the Qt 5 core library, all of the Qt 5 code generation "
+"tools and Qt 5's Makefile generator. Since the `gui` library implies a "
+"dependency on the core library, `core` does not need to be specified. The "
+"Qt 5 code generation tools `moc`, `uic` and `rcc`, as well as the Makefile "
+"generator `qmake` are only needed at buildtime, thus they are specified with "
+"the `_build` suffix:"
+msgstr ""
+"В этом примере портированное приложение использует библиотеку графического "
+"интерфейса Qt 5, основную библиотеку Qt 5, все инструменты генерации кода Qt "
+"5 и генератор Makefile Qt 5. Поскольку библиотека `gui` подразумевает "
+"зависимость от основной библиотеки, `core` не нужно указывать. Инструменты "
+"генерации кода Qt 5 `moc`, `uic` и `rcc`, а также генератор Makefile `qmake` "
+"требуются только во время сборки, поэтому они указаны с суффиксом `_build`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2430
+#, no-wrap
+msgid ""
+"USES=\tqt:5\n"
+"USE_QT=\tgui buildtools_build qmake_build\n"
+msgstr ""
+"USES=\tqt:5\n"
+"USE_QT=\tgui buildtools_build qmake_build\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2435
+#, no-wrap
+msgid "Using `qmake`"
+msgstr "Использование `qmake`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2443
+msgid ""
+"If the application provides a qmake project file ([.filename]#*.pro#), "
+"define `USES= qmake` along with `USE_QT`. `USES= qmake` already implies a "
+"build dependency on qmake, therefore the qmake component can be omitted from "
+"`USE_QT`. Similar to crossref:special[using-cmake,CMake], qmake supports "
+"out-of-source builds, which can be enabled by specifying the `outsource` "
+"argument (see crossref:special[using-qmake-example,`USES= qmake` example]). "
+"Also see crossref:special[using-qmake-arguments,Possible Arguments for `USES "
+"qmake`]."
+msgstr ""
+"Если приложение предоставляет файл проекта qmake ([.filename]#*.pro#), "
+"определите `USES= qmake` вместе с `USE_QT`. `USES= qmake` уже подразумевает "
+"зависимость сборки от qmake, поэтому компонент qmake может быть опущен в "
+"`USE_QT`. Подобно crossref:special[using-cmake,CMake], qmake поддерживает "
+"сборку вне исходного дерева, которую можно включить, указав аргумент "
+"`outsource` (см. crossref:special[using-qmake-example,пример `USES= "
+"qmake`]). Также см. crossref:special[using-qmake-arguments,Возможные "
+"аргументы для `USES qmake`]."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2445
+#, no-wrap
+msgid "Possible Arguments for `USES= qmake`"
+msgstr "Возможные аргументы для `USES= qmake`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2452
+#, no-wrap
+msgid "`no_configure`"
+msgstr "`no_configure`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2454
+#, no-wrap
+msgid "Do not add the configure target. This is implied by `HAS_CONFIGURE=yes` and `GNU_CONFIGURE=yes`. It is required when the build only needs the environment setup from `USES= qmake`, but otherwise runs `qmake` on its own."
+msgstr "Не добавлять цель configure. Это подразумевается при `HAS_CONFIGURE=yes` и `GNU_CONFIGURE=yes`. Это требуется, когда сборке нужна только настройка окружения из `USES= qmake`, но в остальном она запускает `qmake` самостоятельно."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2455
+#, no-wrap
+msgid "`no_env`"
+msgstr "`no_env`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2457
+#, no-wrap
+msgid "Suppress modification of the configure and make environments. It is only required when `qmake` is used to configure the software and the build fails to understand the environment setup by `USES= qmake`."
+msgstr "Подавить модификацию окружения configure и make. Это требуется только когда `qmake` используется для настройки программного обеспечения и сборка не понимает окружение, установленное `USES= qmake`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2458
+#, no-wrap
+msgid "`norecursive`"
+msgstr "`norecursive`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2460
+#, no-wrap
+msgid "Do not pass the `-recursive` argument to `qmake`."
+msgstr "Не передавать аргумент `-recursive` в `qmake`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2461
+#, no-wrap
+msgid "`outsource`"
+msgstr "`outsource`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2462
+#, no-wrap
+msgid "Perform an out-of-source build."
+msgstr "Выполнить сборку вне исходного кода."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2465
+#, no-wrap
+msgid "Variables for Ports That Use `qmake`"
+msgstr "Переменные для портов, использующих `qmake`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2472
+#, no-wrap
+msgid "`QMAKE_ARGS`"
+msgstr "`QMAKE_ARGS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2474
+#, no-wrap
+msgid "Port specific qmake flags to be passed to the `qmake` binary."
+msgstr "Специфичные для порта флаги qmake, передаваемые в бинарный файл `qmake`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2475
+#, no-wrap
+msgid "`QMAKE_ENV`"
+msgstr "`QMAKE_ENV`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2477
+#, no-wrap
+msgid "Environment variables to be set for the `qmake` binary. The default is `${CONFIGURE_ENV}`."
+msgstr "Переменные окружения, которые должны быть установлены для бинарного файла `qmake`. По умолчанию используется `${CONFIGURE_ENV}`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2478
+#, no-wrap
+msgid "`QMAKE_SOURCE_PATH`"
+msgstr "`QMAKE_SOURCE_PATH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2479
+#, no-wrap
+msgid "Path to qmake project files ([.filename]#.pro#). The default is `${WRKSRC}` if an out-of-source build is requested, empty otherwise."
+msgstr "Путь к файлам проекта qmake ([.filename]#.pro#). По умолчанию используется `${WRKSRC}`, если запрошена сборка вне исходного кода, в противном случае оставляется пустым."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2482
+msgid "When using `USES= qmake`, these settings are deployed:"
+msgstr "При использовании `USES= qmake` применяются следующие настройки:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2489
+#, no-wrap
+msgid ""
+"CONFIGURE_ARGS+=\t--with-qt-includes=${QT_INCDIR} \\\n"
+"\t\t\t--with-qt-libraries=${QT_LIBDIR} \\\n"
+"\t\t\t--with-extra-libs=${LOCALBASE}/lib \\\n"
+"\t\t\t--with-extra-includes=${LOCALBASE}/include\n"
+msgstr ""
+"CONFIGURE_ARGS+=\t--with-qt-includes=${QT_INCDIR} \\\n"
+"\t\t\t--with-qt-libraries=${QT_LIBDIR} \\\n"
+"\t\t\t--with-extra-libs=${LOCALBASE}/lib \\\n"
+"\t\t\t--with-extra-includes=${LOCALBASE}/include\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2493
+#, no-wrap
+msgid ""
+"CONFIGURE_ENV+=\tQTDIR=\"${QT_PREFIX}\" QMAKE=\"${QMAKE}\" \\\n"
+"\t\tMOC=\"${MOC}\" RCC=\"${RCC}\" UIC=\"${UIC}\" \\\n"
+"\t\tQMAKESPEC=\"${QMAKESPEC}\"\n"
+msgstr ""
+"CONFIGURE_ENV+=\tQTDIR=\"${QT_PREFIX}\" QMAKE=\"${QMAKE}\" \\\n"
+"\t\tMOC=\"${MOC}\" RCC=\"${RCC}\" UIC=\"${UIC}\" \\\n"
+"\t\tQMAKESPEC=\"${QMAKESPEC}\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2497
+#, no-wrap
+msgid ""
+"PLIST_SUB+=\tQT_INCDIR=${QT_INCDIR_REL} \\\n"
+"\t\tQT_LIBDIR=${QT_LIBDIR_REL} \\\n"
+"\t\tQT_PLUGINDIR=${QT_PLUGINDIR_REL}\n"
+msgstr ""
+"PLIST_SUB+=\tQT_INCDIR=${QT_INCDIR_REL} \\\n"
+"\t\tQT_LIBDIR=${QT_LIBDIR_REL} \\\n"
+"\t\tQT_PLUGINDIR=${QT_PLUGINDIR_REL}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2501
+msgid ""
+"Some configure scripts do not support the arguments above. To suppress "
+"modification of `CONFIGURE_ENV` and `CONFIGURE_ARGS`, set `USES= "
+"qmake:no_env`."
+msgstr ""
+"Некоторые скрипты configure не поддерживают указанные выше аргументы. Чтобы "
+"отключить изменение `CONFIGURE_ENV` и `CONFIGURE_ARGS`, установите `USES= "
+"qmake:no_env`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2503
+#, no-wrap
+msgid "`USES= qmake` Example"
+msgstr "Пример `USES= qmake`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2507
+msgid "This snippet demonstrates the use of qmake for a Qt 5 port:"
+msgstr "Этот фрагмент демонстрирует использование qmake для порта Qt 5:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2512
+#, no-wrap
+msgid ""
+"USES=\tqmake:outsource qt:5\n"
+"USE_QT=\tbuildtools_build\n"
+msgstr ""
+"USES=\tqmake:outsource qt:5\n"
+"USE_QT=\tbuildtools_build\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2517
+msgid ""
+"Qt applications are often written to be cross-platform and often X11/Unix is "
+"not the platform they are developed on, which in turn leads to certain loose "
+"ends, like:"
+msgstr ""
+"Приложения Qt часто разрабатываются как кроссплатформенные, и зачастую X11/"
+"Unix — не та платформа, на которой они создаются. Это, в свою очередь, "
+"приводит к определённым недоработкам, таким как:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2519
+msgid ""
+"_Missing additional include paths._ Many applications come with system tray "
+"icon support, but neglect to look for includes and/or libraries in the X11 "
+"directories. To add directories to `qmake`'s include and library search "
+"paths via the command line, use:"
+msgstr ""
+"_Отсутствуют дополнительные пути для заголовочных файлов._ Многие приложения "
+"поддерживают значки в системном трее, но не учитывают пути для заголовочных "
+"файлов и/или библиотек в каталогах X11. Чтобы добавить каталоги в пути "
+"поиска заголовочных файлов и библиотек для `qmake` через командную строку, "
+"используйте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2524
+#, no-wrap
+msgid ""
+"QMAKE_ARGS+=\tINCLUDEPATH+=${LOCALBASE}/include \\\n"
+"\t\tLIBS+=-L${LOCALBASE}/lib\n"
+msgstr ""
+"QMAKE_ARGS+=\tINCLUDEPATH+=${LOCALBASE}/include \\\n"
+"\t\tLIBS+=-L${LOCALBASE}/lib\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2527
+msgid ""
+"_Bogus installation paths._ Sometimes data such as icons or .desktop files "
+"are by default installed into directories which are not scanned by XDG-"
+"compatible applications. package:editors/texmaker[] is an example for this - "
+"look at [.filename]#patch-texmaker.pro# in the [.filename]#files# directory "
+"of that port for a template on how to remedy this directly in the `qmake` "
+"project file."
+msgstr ""
+"_Некорректные пути установки._ Иногда данные, такие как иконки или "
+"файлы .desktop, по умолчанию устанавливаются в каталоги, которые не "
+"сканируются приложениями, совместимыми с XDG. Например, package:editors/"
+"texmaker[] — посмотрите на файл [.filename]#patch-texmaker.pro# в директории "
+"[.filename]#files# этого порта, чтобы увидеть шаблон исправления этой "
+"проблемы напрямую в проектом файле `qmake`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2529
+#, no-wrap
+msgid "Using KDE"
+msgstr "Использование KDE"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2532
+#, no-wrap
+msgid "KDE Variable Definitions"
+msgstr "Определения переменных KDE"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2539
+msgid ""
+"If the application depends on KDE, set `USES+=kde:5` and `USE_KDE` to the "
+"list of required components. `_build` and `_run` suffixes can be used to "
+"force components dependency type (for example, `baseapps_run`). If no "
+"suffix is set, a default dependency type will be used. To force both types, "
+"add the component twice with both suffixes (for example, `ecm_build "
+"ecm_run`). Available components are listed below (up-to-date components are "
+"also listed in [.filename]#/usr/ports/Mk/Uses/kde.mk#):"
+msgstr ""
+"Если приложение зависит от KDE, установите `USES+=kde:5` и `USE_KDE` в "
+"список необходимых компонентов. Суффиксы `_build` и `_run` можно "
+"использовать для принудительного указания типа зависимости компонентов "
+"(например, `baseapps_run`). Если суффикс не задан, будет использован тип "
+"зависимости по умолчанию. Чтобы принудительно задать оба типа, добавьте "
+"компонент дважды с обоими суффиксами (например, `ecm_build ecm_run`). "
+"Доступные компоненты перечислены ниже (актуальный список компонентов также "
+"приведён в [.filename]#/usr/ports/Mk/Uses/kde.mk#):"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2541
+#, no-wrap
+msgid "Available KDE Components"
+msgstr "Доступные компоненты KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2548
+#, no-wrap
+msgid "`activities`"
+msgstr "`activities`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2550
+#, no-wrap
+msgid "KF5 runtime and library to organize work in separate activities"
+msgstr "Среда выполнения и библиотека KF5 для организации работы в отдельных автивностях"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2551
+#, no-wrap
+msgid "`activities-stats`"
+msgstr "`activities-stats`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2553
+#, no-wrap
+msgid "KF5 statistics for activities"
+msgstr "KF5 статистика для активностей"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2554
+#, no-wrap
+msgid "`activitymanagerd`"
+msgstr "`activitymanagerd`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2556
+#, no-wrap
+msgid "System service to manage user's activities, track the usage patterns"
+msgstr "Системный сервис для управления активностью пользователей, отслеживания шаблонов использования"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2557
+#, no-wrap
+msgid "`akonadi`"
+msgstr "`akonadi`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2559
+#, no-wrap
+msgid "Storage server for KDE-Pim"
+msgstr "Хранилище данных для KDE-Pim"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2560
+#, no-wrap
+msgid "`akonadicalendar`"
+msgstr "`akonadicalendar`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2562
+#, no-wrap
+msgid "Akonadi Calendar Integration"
+msgstr "Интеграция Akonadi с Календарем"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2563
+#, no-wrap
+msgid "`akonadiconsole`"
+msgstr "`akonadiconsole`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2565
+#, no-wrap
+msgid "Akonadi management and debugging console"
+msgstr "Консоль управления и отладки Akonadi"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2566
+#, no-wrap
+msgid "`akonadicontacts`"
+msgstr "`akonadicontacts`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2568
+#, no-wrap
+msgid "Libraries and daemons to implement Contact Management in Akonadi"
+msgstr "Библиотеки и демоны для реализации управления контактами в Akonadi"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2569
+#, no-wrap
+msgid "`akonadiimportwizard`"
+msgstr "`akonadiimportwizard`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2571
+#, no-wrap
+msgid "Import data from other mail clients to KMail"
+msgstr "Импорт данных из других почтовых клиентов в KMail"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2572
+#, no-wrap
+msgid "`akonadimime`"
+msgstr "`akonadimime`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2574
+#, no-wrap
+msgid "Libraries and daemons to implement basic email handling"
+msgstr "Библиотеки и демоны для реализации базовой обработки электронной почты"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2575
+#, no-wrap
+msgid "`akonadinotes`"
+msgstr "`akonadinotes`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2577
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2940
+#, no-wrap
+msgid "KDE library for accessing mail storages in MBox format"
+msgstr "Библиотека KDE для доступа к хранилищам почты в формате MBox"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2578
+#, no-wrap
+msgid "`akonadisearch`"
+msgstr "`akonadisearch`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2580
+#, no-wrap
+msgid "Libraries and daemons to implement searching in Akonadi"
+msgstr "Библиотеки и демоны для реализации поиска в Akonadi"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2581
+#, no-wrap
+msgid "`akregator`"
+msgstr "`akregator`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2583
+#, no-wrap
+msgid "A Feed Reader by KDE"
+msgstr "Читатель лент от KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2584
+#, no-wrap
+msgid "`alarmcalendar`"
+msgstr "`alarmcalendar`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2586
+#, no-wrap
+msgid "KDE API for KAlarm alarms"
+msgstr "KDE API для будильников KAlarm"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2587
+#, no-wrap
+msgid "`apidox`"
+msgstr "`apidox`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2589
+#, no-wrap
+msgid "KF5 API Documentation Tools"
+msgstr "Документация API KF5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2590
+#, no-wrap
+msgid "`archive`"
+msgstr "`archive`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2592
+#, no-wrap
+msgid "KF5 library that provides classes for handling archive formats"
+msgstr "Библиотека KF5, предоставляющая классы для работы с форматами архивов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2593
+#, no-wrap
+msgid "`attica`"
+msgstr "`attica`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2595
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2598
+#, no-wrap
+msgid "Open Collaboration Services API library KDE5 version"
+msgstr "Библиотека API Open Collaboration Services, версия для KDE5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2596
+#, no-wrap
+msgid "`attica5`"
+msgstr "`attica5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2599
+#, no-wrap
+msgid "`auth`"
+msgstr "`auth`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2601
+#, no-wrap
+msgid "KF5 abstraction to system policy and authentication features"
+msgstr "Абстракция KF5 для системной политики и функций аутентификации"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2602
+#, no-wrap
+msgid "`baloo`"
+msgstr "`baloo`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2604
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2610
+#, no-wrap
+msgid "KF5 Framework for searching and managing user metadata"
+msgstr "KF5 Фреймворк для поиска и управления пользовательскими метаданными"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2605
+#, no-wrap
+msgid "`baloo-widgets`"
+msgstr "`baloo-widgets`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2607
+#, no-wrap
+msgid "BalooWidgets library"
+msgstr "Библиотека BalooWidgets"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2608
+#, no-wrap
+msgid "`baloo5`"
+msgstr "`baloo5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2611
+#, no-wrap
+msgid "`blog`"
+msgstr "`blog`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2613
+#, no-wrap
+msgid "KDE API for weblogging access"
+msgstr "KDE API для доступа к веб-логам"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2614
+#, no-wrap
+msgid "`bookmarks`"
+msgstr "`bookmarks`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2616
+#, no-wrap
+msgid "KF5 library for bookmarks and the XBEL format"
+msgstr "Библиотека KF5 для закладок и формата XBEL"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2617
+#, no-wrap
+msgid "`breeze`"
+msgstr "`breeze`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2619
+#, no-wrap
+msgid "Plasma5 artwork, styles and assets for the Breeze visual style"
+msgstr "Plasma5 artwork, стили и ресурсы для визуального стиля Breeze"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2620
+#, no-wrap
+msgid "`breeze-gtk`"
+msgstr "`breeze-gtk`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2622
+#, no-wrap
+msgid "Plasma5 Breeze visual style for Gtk"
+msgstr "Plasma5 Breeze визуальный стиль для Gtk"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2623
+#, no-wrap
+msgid "`breeze-icons`"
+msgstr "`breeze-icons`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2625
+#, no-wrap
+msgid "Breeze icon theme for KDE"
+msgstr "Тема значков Breeze для KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2626
+#, no-wrap
+msgid "`calendarcore`"
+msgstr "`calendarcore`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2628
+#, no-wrap
+msgid "KDE calendar access library"
+msgstr "Библиотека доступа к календарю KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2629
+#, no-wrap
+msgid "`calendarsupport`"
+msgstr "`calendarsupport`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2631
+#, no-wrap
+msgid "Calendar support libraries for KDEPim"
+msgstr "Библиотеки поддержки календарей для KDEPim"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2632
+#, no-wrap
+msgid "`calendarutils`"
+msgstr "`calendarutils`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2634
+#, no-wrap
+msgid "KDE utility and user interface functions for accessing calendar"
+msgstr "Утилита KDE и пользовательские функции интерфейса для доступа к календарю"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2635
+#, no-wrap
+msgid "`codecs`"
+msgstr "`codecs`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2637
+#, no-wrap
+msgid "KF5 library for string manipulation"
+msgstr "Библиотека KF5 для работы со строками"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2638
+#, no-wrap
+msgid "`completion`"
+msgstr "`completion`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2640
+#, no-wrap
+msgid "KF5 text completion helpers and widgets"
+msgstr "KF5 вспомогательные средства и виджеты автодополнения текста"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2641
+#, no-wrap
+msgid "`config`"
+msgstr "`config`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2643
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2646
+#, no-wrap
+msgid "KF5 widgets for configuration dialogs"
+msgstr "Виджеты KF5 для диалогов настройки"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2644
+#, no-wrap
+msgid "`configwidgets`"
+msgstr "`configwidgets`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2647
+#, no-wrap
+msgid "`contacts`"
+msgstr "`contacts`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2649
+#, no-wrap
+msgid "KDE api to manage contact information"
+msgstr "KDE API для управления контактной информацией"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2650
+#, no-wrap
+msgid "`coreaddons`"
+msgstr "`coreaddons`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2652
+#, no-wrap
+msgid "KF5 addons to QtCore"
+msgstr "KF5 аддоны для QtCore"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2653
+#, no-wrap
+msgid "`crash`"
+msgstr "`crash`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2655
+#, no-wrap
+msgid "KF5 library to handle crash analysis and bug report from apps"
+msgstr "Библиотека KF5 для обработки анализа сбоев и отчётов об ошибках в приложениях"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2656
+#, no-wrap
+msgid "`dbusaddons`"
+msgstr "`dbusaddons`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2658
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3066
+#, no-wrap
+msgid "KF5 addons to QtDBus"
+msgstr "KF5 дополнения к QtDBus"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2659
+#, no-wrap
+msgid "`decoration`"
+msgstr "`decoration`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2661
+#, no-wrap
+msgid "Plasma5 library to create window decorations"
+msgstr "Библиотека Plasma5 для создания оформления окон"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2662
+#, no-wrap
+msgid "`designerplugin`"
+msgstr "`designerplugin`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2664
+#, no-wrap
+msgid "KF5 integration of Frameworks widgets in Qt Designer/Creator"
+msgstr "Интеграция KF5 виджетов Frameworks в Qt Designer/Creator"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2665
+#, no-wrap
+msgid "`discover`"
+msgstr "`discover`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2667
+#, no-wrap
+msgid "Plasma5 package management tools"
+msgstr "Инструменты управления пакетами Plasma5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2668
+#, no-wrap
+msgid "`dnssd`"
+msgstr "`dnssd`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2670
+#, no-wrap
+msgid "KF5 abstraction to system DNSSD features"
+msgstr "Абстракция KF5 для системных функций DNSSD"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2671
+#, no-wrap
+msgid "`doctools`"
+msgstr "`doctools`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2673
+#, no-wrap
+msgid "KF5 documentation generation from docbook"
+msgstr "Генерация документации KF5 из docbook"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2674
+#, no-wrap
+msgid "`drkonqi`"
+msgstr "`drkonqi`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2676
+#, no-wrap
+msgid "Plasma5 crash handler"
+msgstr "Обработчик сбоев Plasma5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2677
+#, no-wrap
+msgid "`ecm`"
+msgstr "`ecm`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2679
+#, no-wrap
+msgid "Extra modules and scripts for CMake"
+msgstr "Дополнительные модули и скрипты для CMake"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2680
+#, no-wrap
+msgid "`emoticons`"
+msgstr "`emoticons`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2682
+#, no-wrap
+msgid "KF5 library to convert emoticons"
+msgstr "Библиотека KF5 для преобразования эмотиконов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2683
+#, no-wrap
+msgid "`eventviews`"
+msgstr "`eventviews`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2685
+#, no-wrap
+msgid "Event view libriares for KDEPim"
+msgstr "Библиотеки просмотра событий для KDEPim"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2686
+#, no-wrap
+msgid "`filemetadata`"
+msgstr "`filemetadata`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2688
+#, no-wrap
+msgid "KF5 library for extracting file metadata"
+msgstr "Библиотека KF5 для извлечения метаданных файлов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2689
+#, no-wrap
+msgid "`frameworkintegration`"
+msgstr "`frameworkintegration`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2691
+#, no-wrap
+msgid "KF5 workspace and cross-framework integration plugins"
+msgstr "Плагины рабочего пространства KF5 и интеграции фреймворков"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2692
+#, no-wrap
+msgid "`gapi`"
+msgstr "`gapi`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2694
+#, no-wrap
+msgid "KDE based library to access google services"
+msgstr "Библиотека на основе KDE для доступа к сервисам Google"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2695
+#, no-wrap
+msgid "`globalaccel`"
+msgstr "`globalaccel`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2697
+#, no-wrap
+msgid "KF5 library to add support for global workspace shortcuts"
+msgstr "Библиотека KF5 для добавления поддержки глобальных сочетаний клавиш рабочего пространства"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2698
+#, no-wrap
+msgid "`grantlee-editor`"
+msgstr "`grantlee-editor`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2700
+#, no-wrap
+msgid "Editor for Grantlee themes"
+msgstr "Редактор тем Grantlee"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2701
+#, no-wrap
+msgid "`grantleetheme`"
+msgstr "`grantleetheme`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2703
+#, no-wrap
+msgid "KDE PIM grantleetheme"
+msgstr "KDE PIM grantleetheme"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2704
+#, no-wrap
+msgid "`gravatar`"
+msgstr "`gravatar`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2706
+#, no-wrap
+msgid "Library for gravatar support"
+msgstr "Библиотека для поддержки gravatar"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2707
+#, no-wrap
+msgid "`guiaddons`"
+msgstr "`guiaddons`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2709
+#, no-wrap
+msgid "KF5 addons to QtGui"
+msgstr "KF5 аддоны для QtGui"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2710
+#, no-wrap
+msgid "`holidays`"
+msgstr "`holidays`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2712
+#, no-wrap
+msgid "KDE library for calendar holidays"
+msgstr "Библиотека KDE для календарных праздников"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2713
+#, no-wrap
+msgid "`hotkeys`"
+msgstr "`hotkeys`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2715
+#, no-wrap
+msgid "Plasma5 library for hotkeys"
+msgstr "Библиотека Plasma5 для горячих клавиш"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2716
+#, no-wrap
+msgid "`i18n`"
+msgstr "`i18n`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2718
+#, no-wrap
+msgid "KF5 advanced internationalization framework"
+msgstr "KF5 — расширенная инфраструктура интернационализации"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2719
+#, no-wrap
+msgid "`iconthemes`"
+msgstr "`iconthemes`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2721
+#, no-wrap
+msgid "KF5 library for handling icons in applications"
+msgstr "Библиотека KF5 для работы с иконками в приложениях"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2722
+#, no-wrap
+msgid "`identitymanagement`"
+msgstr "`identitymanagement`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2724
+#, no-wrap
+msgid "KDE pim identities"
+msgstr "KDE pim идентификации"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2725
+#, no-wrap
+msgid "`idletime`"
+msgstr "`idletime`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2727
+#, no-wrap
+msgid "KF5 library for monitoring user activity"
+msgstr "Библиотека KF5 для мониторинга активности пользователей"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2728
+#, no-wrap
+msgid "`imap`"
+msgstr "`imap`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2730
+#, no-wrap
+msgid "KDE API for IMAP support"
+msgstr "KDE API для поддержки IMAP"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2731
+#, no-wrap
+msgid "`incidenceeditor`"
+msgstr "`incidenceeditor`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2733
+#, no-wrap
+msgid "Incidence editor libriares for KDEPim"
+msgstr "Инцидентные редакторские библиотеки для KDEPim"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2734
+#, no-wrap
+msgid "`infocenter`"
+msgstr "`infocenter`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2736
+#, no-wrap
+msgid "Plasma5 utility providing system information"
+msgstr "Утилита Plasma5, предоставляющая системную информацию"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2737
+#, no-wrap
+msgid "`init`"
+msgstr "`init`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2739
+#, no-wrap
+msgid "KF5 process launcher to speed up launching KDE applications"
+msgstr "Запускатель процессов KF5 для ускорения запуска приложений KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2740
+#, no-wrap
+msgid "`itemmodels`"
+msgstr "`itemmodels`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2742
+#, no-wrap
+msgid "KF5 models for Qt Model/View system"
+msgstr "Модели KF5 для системы Qt Model/View"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2743
+#, no-wrap
+msgid "`itemviews`"
+msgstr "`itemviews`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2745
+#, no-wrap
+msgid "KF5 widget addons for Qt Model/View"
+msgstr "KF5 виджеты-дополнения для Qt Model/View"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2746
+#, no-wrap
+msgid "`jobwidgets`"
+msgstr "`jobwidgets`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2748
+#, no-wrap
+msgid "KF5 widgets for tracking KJob instance"
+msgstr "Виджеты KF5 для отслеживания экземпляра KJob"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2749
+#, no-wrap
+msgid "`js`"
+msgstr "`js`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2751
+#, no-wrap
+msgid "KF5 library providing an ECMAScript interpreter"
+msgstr "Библиотека KF5, предоставляющая интерпретатор ECMAScript"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2752
+#, no-wrap
+msgid "`jsembed`"
+msgstr "`jsembed`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2754
+#, no-wrap
+msgid "KF5 library for binding JavaScript objects to QObjects"
+msgstr "Библиотека KF5 для привязки объектов JavaScript к QObjects"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2755
+#, no-wrap
+msgid "`kaddressbook`"
+msgstr "`kaddressbook`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2757
+#, no-wrap
+msgid "KDE contact manager"
+msgstr "Менеджер контактов KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2758
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2761
+#, no-wrap
+msgid "`kalarm`"
+msgstr "`kalarm`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2760
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2763
+#, no-wrap
+msgid "Personal alarm scheduler"
+msgstr "Планировщик персональных сигналов тревоги"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2764
+#, no-wrap
+msgid "`kate`"
+msgstr "`kate`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2766
+#, no-wrap
+msgid "Basic editor framework for the KDE system"
+msgstr "Базовая структура редактора для системы KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2767
+#, no-wrap
+msgid "`kcmutils`"
+msgstr "`kcmutils`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2769
+#, no-wrap
+msgid "KF5 utilities for working with KCModules"
+msgstr "KF5 утилиты для работы с KCModules"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2770
+#, no-wrap
+msgid "`kde-cli-tools`"
+msgstr "`kde-cli-tools`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2772
+#, no-wrap
+msgid "Plasma5 non-interactive system tools"
+msgstr "Неинтерактивные системные инструменты Plasma5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2773
+#, no-wrap
+msgid "`kde-gtk-config`"
+msgstr "`kde-gtk-config`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2775
+#, no-wrap
+msgid "Plasma5 GTK2 and GTK3 configurator"
+msgstr "Plasma5 конфигуратор GTK2 и GTK3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2776
+#, no-wrap
+msgid "`kdeclarative`"
+msgstr "`kdeclarative`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2778
+#, no-wrap
+msgid "KF5 library providing integration of QML and KDE Frameworks"
+msgstr "Библиотека KF5, обеспечивающая интеграцию QML и KDE Frameworks"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2779
+#, no-wrap
+msgid "`kded`"
+msgstr "`kded`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2781
+#, no-wrap
+msgid "KF5 extensible daemon for providing system level services"
+msgstr "KF5 расширяемый демон для предоставления системных сервисов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2782
+#, no-wrap
+msgid "`kdelibs4support`"
+msgstr "`kdelibs4support`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2784
+#, no-wrap
+msgid "KF5 porting aid from KDELibs4"
+msgstr "Помощник в портировании KF5 из KDELibs4"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2785
+#, no-wrap
+msgid "`kdepim-addons`"
+msgstr "`kdepim-addons`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2787
+#, no-wrap
+msgid "KDE PIM addons"
+msgstr "Дополнения KDE PIM"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2788
+#, no-wrap
+msgid "`kdepim-apps-libs`"
+msgstr "`kdepim-apps-libs`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2790
+#, no-wrap
+msgid "KDE PIM mail related libraries"
+msgstr "Библиотеки KDE PIM, связанные с почтой"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2791
+#, no-wrap
+msgid "`kdepim-runtime5`"
+msgstr "`kdepim-runtime5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2793
+#, no-wrap
+msgid "KDE PIM tools and services"
+msgstr "Инструменты и службы KDE PIM"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2794
+#, no-wrap
+msgid "`kdeplasma-addons`"
+msgstr "`kdeplasma-addons`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2796
+#, no-wrap
+msgid "Plasma5 addons to improve the Plasma experience"
+msgstr "Дополнения Plasma5 для улучшения работы с Plasma"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2797
+#, no-wrap
+msgid "`kdesu`"
+msgstr "`kdesu`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2799
+#, no-wrap
+msgid "KF5 integration with su for elevated privileges"
+msgstr "Интеграция KF5 с su для повышенных привилегий"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2800
+#, no-wrap
+msgid "`kdewebkit`"
+msgstr "`kdewebkit`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2802
+#, no-wrap
+msgid "KF5 library providing integration of QtWebKit"
+msgstr "Библиотека KF5, обеспечивающая интеграцию QtWebKit"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2803
+#, no-wrap
+msgid "`kgamma5`"
+msgstr "`kgamma5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2805
+#, no-wrap
+msgid "Plasma5 monitor's gamma settings"
+msgstr "Настройки гаммы монитора Plasma5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2806
+#, no-wrap
+msgid "`khtml`"
+msgstr "`khtml`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2808
+#, no-wrap
+msgid "KF5 KTHML rendering engine"
+msgstr "Механизм рендеринга KF5 KTHML"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2809
+#, no-wrap
+msgid "`kimageformats`"
+msgstr "`kimageformats`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2811
+#, no-wrap
+msgid "KF5 library providing support for additional image formats"
+msgstr "Библиотека KF5, обеспечивающая поддержку дополнительных форматов изображений"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2812
+#, no-wrap
+msgid "`kio`"
+msgstr "`kio`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2814
+#, no-wrap
+msgid "KF5 resource and network access abstraction"
+msgstr "Абстракция ресурсов и сетевого доступа KF5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2815
+#, no-wrap
+msgid "`kirigami2`"
+msgstr "`kirigami2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2817
+#, no-wrap
+msgid "QtQuick based components set"
+msgstr "Набор компонентов на основе QtQuick"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2818
+#, no-wrap
+msgid "`kitinerary`"
+msgstr "`kitinerary`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2820
+#, no-wrap
+msgid "Data Model and Extraction System for Travel Reservation information"
+msgstr "Модель данных и система извлечения информации о бронировании путешествий"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2821
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2824
+#, no-wrap
+msgid "`kmail`"
+msgstr "`kmail`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2823
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2826
+#, no-wrap
+msgid "KDE mail client"
+msgstr "Клиент электронной почты KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2827
+#, no-wrap
+msgid "`kmail-account-wizard`"
+msgstr "`kmail-account-wizard`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2829
+#, no-wrap
+msgid "KDE mail account wizard"
+msgstr "Мастер настройки почтового аккаунта KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2830
+#, no-wrap
+msgid "`kmenuedit`"
+msgstr "`kmenuedit`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2832
+#, no-wrap
+msgid "Plasma5 menu editor"
+msgstr "Редактор меню Plasma5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2833
+#, no-wrap
+msgid "`knotes`"
+msgstr "`knotes`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2835
+#, no-wrap
+msgid "Popup notes"
+msgstr "Всплывающие примечания"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2836
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2839
+#, no-wrap
+msgid "`kontact`"
+msgstr "`kontact`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2838
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2841
+#, no-wrap
+msgid "KDE Personal Information Manager"
+msgstr "KDE Персональный Органайзер"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2842
+#, no-wrap
+msgid "`kontactinterface`"
+msgstr "`kontactinterface`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2844
+#, no-wrap
+msgid "KDE glue for embedding KParts into Kontact"
+msgstr "KDE glue для встраивания KParts в Kontact"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2845
+#, no-wrap
+msgid "`korganizer`"
+msgstr "`korganizer`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2847
+#, no-wrap
+msgid "Calendar and scheduling Program"
+msgstr "Программа для календаря и планирования"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2848
+#, no-wrap
+msgid "`kpimdav`"
+msgstr "`kpimdav`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2850
+#, no-wrap
+msgid "A DAV protocol implementation with KJobs"
+msgstr "Реализация протокола DAV с KJobs"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2851
+#, no-wrap
+msgid "`kpkpass`"
+msgstr "`kpkpass`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2853
+#, no-wrap
+msgid "Library to deal with Apple Wallet pass files"
+msgstr "Библиотека для работы с файлами паролей Apple Wallet"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2854
+#, no-wrap
+msgid "`kross`"
+msgstr "`kross`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2856
+#, no-wrap
+msgid "KF5 multi-language application scripting"
+msgstr "KF5 мультиязыковые прикладные скрипты"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2857
+#, no-wrap
+msgid "`kscreen`"
+msgstr "`kscreen`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2859
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2919
+#, no-wrap
+msgid "Plasma5 screen management library"
+msgstr "Библиотека управления экраном Plasma5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2860
+#, no-wrap
+msgid "`kscreenlocker`"
+msgstr "`kscreenlocker`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2862
+#, no-wrap
+msgid "Plasma5 secure lock screen architecture"
+msgstr "Архитектура безопасной блокировки экрана Plasma5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2863
+#, no-wrap
+msgid "`ksmtp`"
+msgstr "`ksmtp`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2865
+#, no-wrap
+msgid "Job-based library to send email through an SMTP server"
+msgstr "Библиотека на основе задач для отправки электронной почты через SMTP-сервер"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2866
+#, no-wrap
+msgid "`ksshaskpass`"
+msgstr "`ksshaskpass`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2868
+#, no-wrap
+msgid "Plasma5 ssh-add frontend"
+msgstr "Plasma5 интерфейс для ssh-add"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2869
+#, no-wrap
+msgid "`ksysguard`"
+msgstr "`ksysguard`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2871
+#, no-wrap
+msgid "Plasma5 utility to track and control the running processes"
+msgstr "Утилита Plasma5 для отслеживания и управления запущенными процессами"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2872
+#, no-wrap
+msgid "`kwallet-pam`"
+msgstr "`kwallet-pam`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2874
+#, no-wrap
+msgid "Plasma5 KWallet PAM Integration"
+msgstr "Интеграция Plasma5 KWallet с PAM"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2875
+#, no-wrap
+msgid "`kwayland-integration`"
+msgstr "`kwayland-integration`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2877
+#, no-wrap
+msgid "Integration plugins for a Wayland-based desktop"
+msgstr "Интеграционные плагины для рабочего стола на основе Wayland"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2878
+#, no-wrap
+msgid "`kwin`"
+msgstr "`kwin`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2880
+#, no-wrap
+msgid "Plasma5 window manager"
+msgstr "Менеджер окон Plasma5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2881
+#, no-wrap
+msgid "`kwrited`"
+msgstr "`kwrited`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2883
+#, no-wrap
+msgid "Plasma5 daemon listening for wall and write messages"
+msgstr "Демон Plasma5, ожидающий сообщения wall и write"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2884
+#, no-wrap
+msgid "`ldap`"
+msgstr "`ldap`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2886
+#, no-wrap
+msgid "LDAP access API for KDE"
+msgstr "API доступа к LDAP для KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2887
+#, no-wrap
+msgid "`libkcddb`"
+msgstr "`libkcddb`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2889
+#, no-wrap
+msgid "KDE CDDB library"
+msgstr "Библиотека KDE CDDB"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2890
+#, no-wrap
+msgid "`libkcompactdisc`"
+msgstr "`libkcompactdisc`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2892
+#, no-wrap
+msgid "KDE library for interfacing with audio CDs"
+msgstr "Библиотека KDE для взаимодействия с аудио-CD"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2893
+#, no-wrap
+msgid "`libkdcraw`"
+msgstr "`libkdcraw`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2895
+#, no-wrap
+msgid "LibRaw interface for KDE"
+msgstr "Интерфейс LibRaw для KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2896
+#, no-wrap
+msgid "`libkdegames`"
+msgstr "`libkdegames`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2898
+#, no-wrap
+msgid "Libraries used by KDE games"
+msgstr "Библиотеки, используемые играми KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2899
+#, no-wrap
+msgid "`libkdepim`"
+msgstr "`libkdepim`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2901
+#, no-wrap
+msgid "KDE PIM Libraries"
+msgstr "Библиотеки KDE PIM"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2902
+#, no-wrap
+msgid "`libkeduvocdocument`"
+msgstr "`libkeduvocdocument`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2904
+#, no-wrap
+msgid "Library for reading and writing vocabulary files"
+msgstr "Библиотека для чтения и записи файлов словарей"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2905
+#, no-wrap
+msgid "`libkexiv2`"
+msgstr "`libkexiv2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2907
+#, no-wrap
+msgid "Exiv2 library interface for KDE"
+msgstr "Интерфейс библиотеки Exiv2 для KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2908
+#, no-wrap
+msgid "`libkipi`"
+msgstr "`libkipi`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2910
+#, no-wrap
+msgid "KDE Image Plugin Interface"
+msgstr "Интерфейс плагинов изображений KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2911
+#, no-wrap
+msgid "`libkleo`"
+msgstr "`libkleo`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2913
+#, no-wrap
+msgid "Certificate manager for KDE"
+msgstr "Менеджер сертификатов для KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2914
+#, no-wrap
+msgid "`libksane`"
+msgstr "`libksane`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2916
+#, no-wrap
+msgid "SANE library interface for KDE"
+msgstr "Интерфейс библиотеки SANE для KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2917
+#, no-wrap
+msgid "`libkscreen`"
+msgstr "`libkscreen`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2920
+#, no-wrap
+msgid "`libksieve`"
+msgstr "`libksieve`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2922
+#, no-wrap
+msgid "Sieve libriares for KDEPim"
+msgstr "Библиотеки Sieve для KDEPim"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2923
+#, no-wrap
+msgid "`libksysguard`"
+msgstr "`libksysguard`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2925
+#, no-wrap
+msgid "Plasma5 library to track and control running processes"
+msgstr "Библиотека Plasma5 для отслеживания и управления запущенными процессами"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2926
+#, no-wrap
+msgid "`mailcommon`"
+msgstr "`mailcommon`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2928
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2988
+#, no-wrap
+msgid "Common libriares for KDEPim"
+msgstr "Общие библиотеки для KDEPim"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2929
+#, no-wrap
+msgid "`mailimporter`"
+msgstr "`mailimporter`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2931
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2943
+#, no-wrap
+msgid "Import mbox files to KMail"
+msgstr "Импорт файлов mbox в KMail"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2932
+#, no-wrap
+msgid "`mailtransport`"
+msgstr "`mailtransport`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2934
+#, no-wrap
+msgid "KDE library to managing mail transport"
+msgstr "Библиотека KDE для управления транспортом почты"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2935
+#, no-wrap
+msgid "`marble`"
+msgstr "`marble`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2937
+#, no-wrap
+msgid "Virtual globe and world atlas for KDE"
+msgstr "Виртуальный глобус и мировой атлас для KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2938
+#, no-wrap
+msgid "`mbox`"
+msgstr "`mbox`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2941
+#, no-wrap
+msgid "`mbox-importer`"
+msgstr "`mbox-importer`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2944
+#, no-wrap
+msgid "`mediaplayer`"
+msgstr "`mediaplayer`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2946
+#, no-wrap
+msgid "KF5 plugin interface for media player features"
+msgstr "Интерфейс плагина KF5 для функций медиаплеера"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2947
+#, no-wrap
+msgid "`messagelib`"
+msgstr "`messagelib`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2949
+#, no-wrap
+msgid "Library for handling messages"
+msgstr "Библиотека для обработки сообщений"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2950
+#, no-wrap
+msgid "`milou`"
+msgstr "`milou`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2952
+#, no-wrap
+msgid "Plasma5 Plasmoid for search"
+msgstr "Plasma5 Plasmoid для поиска"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2953
+#, no-wrap
+msgid "`mime`"
+msgstr "`mime`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2955
+#, no-wrap
+msgid "Library for handling MIME data"
+msgstr "Библиотека для обработки данных MIME"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2956
+#, no-wrap
+msgid "`newstuff`"
+msgstr "`newstuff`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2958
+#, no-wrap
+msgid "KF5 library for downloading application assets from the network"
+msgstr "Библиотека KF5 для загрузки ресурсов приложений из сети"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2959
+#, no-wrap
+msgid "`notifications`"
+msgstr "`notifications`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2961
+#, no-wrap
+msgid "KF5 abstraction for system notifications"
+msgstr "Абстракция KF5 для системных уведомлений"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2962
+#, no-wrap
+msgid "`notifyconfig`"
+msgstr "`notifyconfig`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2964
+#, no-wrap
+msgid "KF5 configuration system for KNotify"
+msgstr "Система конфигурации KF5 для KNotify"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2965
+#, no-wrap
+msgid "`okular`"
+msgstr "`okular`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2967
+#, no-wrap
+msgid "KDE universal document viewer"
+msgstr "Универсальная программа для просмотра документов KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2968
+#, no-wrap
+msgid "`oxygen`"
+msgstr "`oxygen`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2970
+#, no-wrap
+msgid "Plasma5 Oxygen style"
+msgstr "Стиль Plasma5 Oxygen"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2971
+#, no-wrap
+msgid "`oxygen-icons5`"
+msgstr "`oxygen-icons5`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2973
+#, no-wrap
+msgid "The Oxygen icon theme for KDE"
+msgstr "Тема иконок Oxygen для KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2974
+#, no-wrap
+msgid "`package`"
+msgstr "`package`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2976
+#, no-wrap
+msgid "KF5 library to load and install packages"
+msgstr "Библиотека KF5 для загрузки и установки пакетов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2977
+#, no-wrap
+msgid "`parts`"
+msgstr "`parts`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2979
+#, no-wrap
+msgid "KF5 document centric plugin system"
+msgstr "KF5 система плагинов для работы с документами"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2980
+#, no-wrap
+msgid "`people`"
+msgstr "`people`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2982
+#, no-wrap
+msgid "KF5 library providing access to contacts"
+msgstr "Библиотека KF5, предоставляющая доступ к контактам"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2983
+#, no-wrap
+msgid "`pim-data-exporter`"
+msgstr "`pim-data-exporter`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2985
+#, no-wrap
+msgid "Import and export KDE PIM settings"
+msgstr "Импорт и экспорт настроек KDE PIM"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2986
+#, no-wrap
+msgid "`pimcommon`"
+msgstr "`pimcommon`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2989
+#, no-wrap
+msgid "`pimtextedit`"
+msgstr "`pimtextedit`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2991
+#, no-wrap
+msgid "KDE library for PIM-specific text editing utilities"
+msgstr "Библиотека KDE для утилит редактирования текста, специфичных для PIM"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2992
+#, no-wrap
+msgid "`plasma-browser-integration`"
+msgstr "`plasma-browser-integration`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2994
+#, no-wrap
+msgid "Plasma5 components to integrate browsers into the desktop"
+msgstr "Компоненты Plasma5 для интеграции браузеров в рабочий стол"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2995
+#, no-wrap
+msgid "`plasma-desktop`"
+msgstr "`plasma-desktop`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2997
+#, no-wrap
+msgid "Plasma5 plasma desktop"
+msgstr "Plasma5 рабочий стол Plasma"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2998
+#, no-wrap
+msgid "`plasma-framework`"
+msgstr "`plasma-framework`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3000
+#, no-wrap
+msgid "KF5 plugin based UI runtime used to write user interfaces"
+msgstr "KF5 - среда выполнения пользовательского интерфейса на основе плагинов, используемая для создания пользовательских интерфейсов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3001
+#, no-wrap
+msgid "`plasma-integration`"
+msgstr "`plasma-integration`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3003
+#, no-wrap
+msgid "Qt Platform Theme integration plugins for the Plasma workspaces"
+msgstr "Плагины интеграции Qt Platform Theme для рабочего окружения Plasma"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3004
+#, no-wrap
+msgid "`plasma-pa`"
+msgstr "`plasma-pa`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3006
+#, no-wrap
+msgid "Plasma5 Plasma pulse audio mixer"
+msgstr "Plasma5 Микшер звука Plasma Pulse"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3007
+#, no-wrap
+msgid "`plasma-sdk`"
+msgstr "`plasma-sdk`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3009
+#, no-wrap
+msgid "Plasma5 applications useful for Plasma development"
+msgstr "Приложения Plasma5, полезные для разработки Plasma"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3010
+#, no-wrap
+msgid "`plasma-workspace`"
+msgstr "`plasma-workspace`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3012
+#, no-wrap
+msgid "Plasma5 Plasma workspace"
+msgstr "Plasma5 Рабочее пространство Plasma"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3013
+#, no-wrap
+msgid "`plasma-workspace-wallpapers`"
+msgstr "`plasma-workspace-wallpapers`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3015
+#, no-wrap
+msgid "Plasma5 wallpapers"
+msgstr "Обои Plasma5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3016
+#, no-wrap
+msgid "`plotting`"
+msgstr "`plotting`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3018
+#, no-wrap
+msgid "KF5 lightweight plotting framework"
+msgstr "KF5 облегченный фреймворк для построения графиков"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3019
+#, no-wrap
+msgid "`polkit-kde-agent-1`"
+msgstr "`polkit-kde-agent-1`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3021
+#, no-wrap
+msgid "Plasma5 daemon providing a polkit authentication UI"
+msgstr "Демон Plasma5, предоставляющий интерфейс аутентификации polkit"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3022
+#, no-wrap
+msgid "`powerdevil`"
+msgstr "`powerdevil`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3024
+#, no-wrap
+msgid "Plasma5 tool to manage the power consumption settings"
+msgstr "Инструмент Plasma5 для управления настройками энергопотребления"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3025
+#, no-wrap
+msgid "`prison`"
+msgstr "`prison`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3027
+#, no-wrap
+msgid "API to produce barcodes"
+msgstr "Интерфейс API для создания штрихкодов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3028
+#, no-wrap
+msgid "`pty`"
+msgstr "`pty`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3030
+#, no-wrap
+msgid "KF5 pty abstraction"
+msgstr "Абстракция pty KF5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3031
+#, no-wrap
+msgid "`purpose`"
+msgstr "`purpose`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3033
+#, no-wrap
+msgid "Offers available actions for a specific purpose"
+msgstr "Предлагает доступные действия для конкретной цели"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3034
+#, no-wrap
+msgid "`qqc2-desktop-style`"
+msgstr "`qqc2-desktop-style`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3036
+#, no-wrap
+msgid "Qt QuickControl2 style for KDE"
+msgstr "Стиль Qt QuickControl2 для KDE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3037
+#, no-wrap
+msgid "`runner`"
+msgstr "`runner`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3039
+#, no-wrap
+msgid "KF5 parallelized query system"
+msgstr "KF5 параллелизованная система запросов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3040
+#, no-wrap
+msgid "`service`"
+msgstr "`service`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3042
+#, no-wrap
+msgid "KF5 advanced plugin and service introspection"
+msgstr "KF5 расширенные плагины и интроспекция сервисов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3043
+#, no-wrap
+msgid "`solid`"
+msgstr "`solid`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3045
+#, no-wrap
+msgid "KF5 hardware integration and detection"
+msgstr "Интеграция и обнаружение оборудования KF5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3046
+#, no-wrap
+msgid "`sonnet`"
+msgstr "`sonnet`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3048
+#, no-wrap
+msgid "KF5 plugin-based spell checking library"
+msgstr "KF5 библиотека проверки орфографии на основе плагинов"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3049
+#, no-wrap
+msgid "`syndication`"
+msgstr "`syndication`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3051
+#, no-wrap
+msgid "KDE RSS feed handling library"
+msgstr "Библиотека KDE для обработки RSS-лент"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3052
+#, no-wrap
+msgid "`syntaxhighlighting`"
+msgstr "`syntaxhighlighting`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3054
+#, no-wrap
+msgid "KF5 syntax highlighting engine for structured text and code"
+msgstr "Движок подсветки синтаксиса KF5 для структурированного текста и кода"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3055
+#, no-wrap
+msgid "`systemsettings`"
+msgstr "`systemsettings`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3057
+#, no-wrap
+msgid "Plasma5 system settings"
+msgstr "Настройки системы Plasma5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3058
+#, no-wrap
+msgid "`texteditor`"
+msgstr "`texteditor`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3060
+#, no-wrap
+msgid "KF5 advanced embeddable text editor"
+msgstr "KF5 продвинутый встраиваемый текстовый редактор"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3061
+#, no-wrap
+msgid "`textwidgets`"
+msgstr "`textwidgets`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3063
+#, no-wrap
+msgid "KF5 advanced text editing widgets"
+msgstr "KF5 расширенные виджеты для редактирования текста"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3064
+#, no-wrap
+msgid "`threadweaver`"
+msgstr "`threadweaver`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3067
+#, no-wrap
+msgid "`tnef`"
+msgstr "`tnef`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3069
+#, no-wrap
+msgid "KDE API for the handling of TNEF data"
+msgstr "KDE API для обработки данных TNEF"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3070
+#, no-wrap
+msgid "`unitconversion`"
+msgstr "`unitconversion`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3072
+#, no-wrap
+msgid "KF5 library for unit conversion"
+msgstr "Библиотека KF5 для преобразования единиц измерения"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3073
+#, no-wrap
+msgid "`user-manager`"
+msgstr "`user-manager`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3075
+#, no-wrap
+msgid "Plasma5 user manager"
+msgstr "Пользовательский менеджер Plasma5"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3076
+#, no-wrap
+msgid "`wallet`"
+msgstr "`wallet`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3078
+#, no-wrap
+msgid "KF5 secure and unified container for user passwords"
+msgstr "KF5 безопасный и унифицированный контейнер для паролей пользователей"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3081
+#, no-wrap
+msgid "KF5 Client and Server library wrapper for the Wayland libraries"
+msgstr "Обёртка клиентской и серверной библиотек KF5 для библиотек Wayland"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3082
+#, no-wrap
+msgid "`widgetsaddons`"
+msgstr "`widgetsaddons`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3084
+#, no-wrap
+msgid "KF5 addons to QtWidgets"
+msgstr "KF5 аддоны для QtWidgets"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3085
+#, no-wrap
+msgid "`windowsystem`"
+msgstr "`windowsystem`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3087
+#, no-wrap
+msgid "KF5 library for access to the windowing system"
+msgstr "Библиотека KF5 для доступа к оконной системе"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3088
+#, no-wrap
+msgid "`xmlgui`"
+msgstr "`xmlgui`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3090
+#, no-wrap
+msgid "KF5 user configurable main windows"
+msgstr "KF5 настраиваемые пользователем главные окна"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3091
+#, no-wrap
+msgid "`xmlrpcclient`"
+msgstr "`xmlrpcclient`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3092
+#, no-wrap
+msgid "KF5 interaction with XMLRPC services"
+msgstr "Взаимодействие KF5 с XMLRPC-сервисами"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3095
+#, no-wrap
+msgid "`USE_KDE` Example"
+msgstr "Пример `USE_KDE`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3105
+msgid ""
+"This is a simple example for a KDE port. `USES= cmake` instructs the port "
+"to utilize CMake, a configuration tool widely used by KDE projects (see "
+"crossref:special[using-cmake, Using `cmake`] for detailed usage). `USE_KDE` "
+"brings dependency on KDE libraries. Required KDE components and other "
+"dependencies can be determined through the configure log. `USE_KDE` does "
+"not imply `USE_QT`. If a port requires some Qt components, specify them in "
+"`USE_QT`."
+msgstr ""
+"Это простой пример порта для KDE. `USES= cmake` указывает порту "
+"использовать CMake, инструмент конфигурации, широко применяемый в проектах "
+"KDE (см. crossref:special[using-cmake, Использование `cmake`] для подробного "
+"описания). `USE_KDE` добавляет зависимость от библиотек KDE. Необходимые "
+"компоненты KDE и другие зависимости можно определить через лог "
+"конфигурации. `USE_KDE` не подразумевает `USE_QT`. Если порту требуются "
+"некоторые компоненты Qt, укажите их в `USE_QT`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3111
+#, no-wrap
+msgid ""
+"USES=\t\tcmake kde:5 qt:5\n"
+"USE_KDE=\tecm\n"
+"USE_QT=\t\tcore buildtools_build qmake_build\n"
+msgstr ""
+"USES=\t\tcmake kde:5 qt:5\n"
+"USE_KDE=\tecm\n"
+"USE_QT=\t\tcore buildtools_build qmake_build\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3116
+#, no-wrap
+msgid "Using LXQt"
+msgstr "Использование LXQt"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3119
+msgid ""
+"Applications depending on LXQt should set `USES+= lxqt` and set `USE_LXQT` "
+"to the list of required components from the table below"
+msgstr ""
+"Приложения, зависящие от LXQt, должны устанавливать `USES+= lxqt` и задавать "
+"`USE_LXQT` списком необходимых компонентов из таблицы ниже"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3121
+#, no-wrap
+msgid "Available LXQt Components"
+msgstr "Доступные компоненты LXQt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3130
+#, no-wrap
+msgid "Helpers for additional CMake modules"
+msgstr "Помощники для дополнительных модулей CMake"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3131
+#, no-wrap
+msgid "`libfmqt`"
+msgstr "`libfmqt`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3133
+#, no-wrap
+msgid "Libfm Qt bindings"
+msgstr "Привязки Libfm к Qt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3134
+#, no-wrap
+msgid "`lxqt`"
+msgstr "`lxqt`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3136
+#, no-wrap
+msgid "LXQt core library"
+msgstr "Ядро библиотеки LXQt"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3137
+#, no-wrap
+msgid "`qtxdg`"
+msgstr "`qtxdg`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3138
+#, no-wrap
+msgid "Qt implementation of freedesktop.org XDG specifications"
+msgstr "Реализация Qt спецификаций freedesktop.org XDG"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3141
+#, no-wrap
+msgid "`USE_LXQT` Example"
+msgstr "Пример `USE_LXQT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3146
+msgid ""
+"This is a simple example, `USE_LXQT` adds a dependency on LXQt libraries. "
+"Required LXQt components and other dependencies can be determined from the "
+"configure log."
+msgstr ""
+"Это простой пример, `USE_LXQT` добавляет зависимость от библиотек LXQt. "
+"Необходимые компоненты LXQt и другие зависимости можно определить из лога "
+"конфигурации."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3152
+#, no-wrap
+msgid ""
+"USES=\tcmake lxqt qt:5 tar:xz\n"
+"USE_QT=\t\tcore dbus widgets buildtools_build qmake_build\n"
+"USE_LXQT=\tbuildtools libfmqt\n"
+msgstr ""
+"USES=\tcmake lxqt qt:5 tar:xz\n"
+"USE_QT=\t\tcore dbus widgets buildtools_build qmake_build\n"
+"USE_LXQT=\tbuildtools libfmqt\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3157
+#, no-wrap
+msgid "Using Java"
+msgstr "Использование Java"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3160
+#, no-wrap
+msgid "Variable Definitions"
+msgstr "Определения переменных"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3163
+msgid ""
+"If the port needs a Java(TM) Development Kit (JDK(TM)) to either build, run "
+"or even extract the distfile, then define `USE_JAVA`."
+msgstr ""
+"Если порту требуется Java(TM) Development Kit (JDK(TM)) для сборки, запуска "
+"или даже извлечения distfile, определите `USE_JAVA`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3167
+msgid ""
+"There are several JDKs in the ports collection, from various vendors, and in "
+"several versions. If the port must use a particular version, specify it "
+"using the `JAVA_VERSION` variable. The most current version is package:java/"
+"openjdk18[], with package:java/openjdk17[], package:java/openjdk16[], "
+"package:java/openjdk15[], package:java/openjdk14[], package:java/"
+"openjdk13[], package:java/openjdk12[], package:java/openjdk11[], "
+"package:java/openjdk8[], and package:java/openjdk7[] also available."
+msgstr ""
+"В коллекции портов доступно несколько JDK от различных поставщиков и в "
+"нескольких версиях. Если порт должен использовать определённую версию, "
+"укажите её с помощью переменной `JAVA_VERSION`. Самая актуальная версия — "
+"package:java/openjdk18[], также доступны package:java/openjdk17[], "
+"package:java/openjdk16[], package:java/openjdk15[], package:java/"
+"openjdk14[], package:java/openjdk13[], package:java/openjdk12[], "
+"package:java/openjdk11[], package:java/openjdk8[] и package:java/openjdk7[]."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3169
+#, no-wrap
+msgid "Variables Which May be Set by Ports That Use Java"
+msgstr "Переменные, которые могут быть установлены портами, использующими Java"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3176
+#, no-wrap
+msgid "`USE_JAVA`"
+msgstr "`USE_JAVA`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3178
+#, no-wrap
+msgid "Define for the remaining variables to have any effect."
+msgstr "Определите для остальных переменных, чтобы они имели какой-либо эффект."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3179
+#, no-wrap
+msgid "`JAVA_VERSION`"
+msgstr "`JAVA_VERSION`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3182
+#, no-wrap
+msgid ""
+"List of space-separated suitable Java versions for the port.\n"
+"An optional `\\+` allows specifying a range of versions (allowed values: `8[+] 11[\\+] 17[+] 18[\\+] 19[+] 20[\\+] 21[+]`)."
+msgstr ""
+"Список подходящих версий Java для порта, разделённых пробелами.\n"
+"Необязательный символ `\\+` позволяет указать диапазон версий (допустимые значения: `8[+] 11[\\+] 17[+] 18[\\+] 19[+] 20[\\+] 21[+]`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3183
+#, no-wrap
+msgid "`JAVA_OS`"
+msgstr "`JAVA_OS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3185
+#, no-wrap
+msgid "List of space-separated suitable JDK port operating systems for the port (allowed values: `native linux`)."
+msgstr "Список разделенных пробелами подходящих операционных систем портов JDK для порта (допустимые значения: `native linux`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3186
+#, no-wrap
+msgid "`JAVA_VENDOR`"
+msgstr "`JAVA_VENDOR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3188
+#, no-wrap
+msgid "List of space-separated suitable JDK port vendors for the port (allowed values: `openjdk oracle`)."
+msgstr "Список подходящих поставщиков портов JDK для порта через пробел (допустимые значения: `openjdk oracle`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3189
+#, no-wrap
+msgid "`JAVA_BUILD`"
+msgstr "`JAVA_BUILD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3191
+#, no-wrap
+msgid "When set, add the selected JDK port to the build dependencies."
+msgstr "Когда установлено, добавляет выбранный порт JDK в зависимости сборки."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3192
+#, no-wrap
+msgid "`JAVA_RUN`"
+msgstr "`JAVA_RUN`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3194
+#, no-wrap
+msgid "When set, add the selected JDK port to the run dependencies."
+msgstr "Когда установлено, добавляет выбранный порт JDK в зависимости времени выполнения."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3195
+#, no-wrap
+msgid "`JAVA_EXTRACT`"
+msgstr "`JAVA_EXTRACT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3196
+#, no-wrap
+msgid "When set, add the selected JDK port to the extract dependencies."
+msgstr "Когда установлено, добавляет выбранный порт JDK в зависимости для извлечения."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3199
+msgid ""
+"Below is the list of all settings a port will receive after setting "
+"`USE_JAVA`:"
+msgstr ""
+"Ниже приведен список всех настроек, которые порт получит после установки "
+"`USE_JAVA`:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3201
+#, no-wrap
+msgid "Variables Provided to Ports That Use Java"
+msgstr "Переменные, предоставляемые портам, использующим Java"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3207
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3286
+#, no-wrap
+msgid "Value"
+msgstr "Значение"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3208
+#, no-wrap
+msgid "`JAVA_PORT`"
+msgstr "`JAVA_PORT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3210
+#, no-wrap
+msgid "The name of the JDK port (for example, `java/openjdk6`)."
+msgstr "Имя порта JDK (например, `java/openjdk6`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3211
+#, no-wrap
+msgid "`JAVA_PORT_VERSION`"
+msgstr "`JAVA_PORT_VERSION`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3213
+#, no-wrap
+msgid "The full version of the JDK port (for example, `1.6.0`). Only the first two digits of this version number are needed, use `${JAVA_PORT_VERSION:C/^([0-9])\\.([0-9])(.*)$/\\1.\\2/}`."
+msgstr "Полная версия порта JDK (например, `1.6.0`). Требуются только первые две цифры номера версии, используйте `${JAVA_PORT_VERSION:C/^([0-9])\\.([0-9])(.*)$/\\1.\\2/}`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3214
+#, no-wrap
+msgid "`JAVA_PORT_OS`"
+msgstr "`JAVA_PORT_OS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3216
+#, no-wrap
+msgid "The operating system used by the JDK port (for example, `'native'`)."
+msgstr "Операционная система, используемая портом JDK (например, `'native'`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3217
+#, no-wrap
+msgid "`JAVA_PORT_VENDOR`"
+msgstr "`JAVA_PORT_VENDOR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3219
+#, no-wrap
+msgid "The vendor of the JDK port (for example, `'openjdk'`)."
+msgstr "Поставщик порта JDK (например, `'openjdk'`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3220
+#, no-wrap
+msgid "`JAVA_PORT_OS_DESCRIPTION`"
+msgstr "`JAVA_PORT_OS_DESCRIPTION`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3222
+#, no-wrap
+msgid "Description of the operating system used by the JDK port (for example, `'Native'`)."
+msgstr "Описание операционной системы, используемой портом JDK (например, `'Native'`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3223
+#, no-wrap
+msgid "`JAVA_PORT_VENDOR_DESCRIPTION`"
+msgstr "`JAVA_PORT_VENDOR_DESCRIPTION`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3225
+#, no-wrap
+msgid "Description of the vendor of the JDK port (for example, `'OpenJDK BSD Porting Team'`)."
+msgstr "Описание поставщика порта JDK (например, `'OpenJDK BSD Porting Team'`)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3226
+#, no-wrap
+msgid "`JAVA_HOME`"
+msgstr "`JAVA_HOME`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3228
+#, no-wrap
+msgid "Path to the installation directory of the JDK (for example, [.filename]#'/usr/local/openjdk6'#)."
+msgstr "Путь к каталогу установки JDK (например, [.filename]#'/usr/local/openjdk6'#)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3229
+#, no-wrap
+msgid "`JAVAC`"
+msgstr "`JAVAC`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3231
+#, no-wrap
+msgid "Path to the Java compiler to use (for example, [.filename]#'/usr/local/openjdk6/bin/javac'#)."
+msgstr "Путь к используемому компилятору Java (например, [.filename]#'/usr/local/openjdk6/bin/javac'#)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3232
+#, no-wrap
+msgid "`JAR`"
+msgstr "`JAR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3234
+#, no-wrap
+msgid "Path to the `jar` tool to use (for example, [.filename]#'/usr/local/openjdk6/bin/jar'# or [.filename]#'/usr/local/bin/fastjar'#)."
+msgstr "Путь к инструменту `jar`, который следует использовать (например, [.filename]#'/usr/local/openjdk6/bin/jar'# или [.filename]#'/usr/local/bin/fastjar'#)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3235
+#, no-wrap
+msgid "`APPLETVIEWER`"
+msgstr "`APPLETVIEWER`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3237
+#, no-wrap
+msgid "Path to the `appletviewer` utility (for example, [.filename]#'/usr/local/openjdk6/bin/appletviewer'#)."
+msgstr "Путь к утилите `appletviewer` (например, [.filename]#'/usr/local/openjdk6/bin/appletviewer'#)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3238
+#, no-wrap
+msgid "`JAVA`"
+msgstr "`JAVA`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3240
+#, no-wrap
+msgid "Path to the `java` executable. Use this for executing Java programs (for example, [.filename]#'/usr/local/openjdk6/bin/java'#)."
+msgstr "Путь к исполняемому файлу `java`. Используется для запуска программ на Java (например, [.filename]#'/usr/local/openjdk6/bin/java'#)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3241
+#, no-wrap
+msgid "`JAVADOC`"
+msgstr "`JAVADOC`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3243
+#, no-wrap
+msgid "Path to the `javadoc` utility program."
+msgstr "Путь к программе `javadoc`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3244
+#, no-wrap
+msgid "`JAVAH`"
+msgstr "`JAVAH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3246
+#, no-wrap
+msgid "Path to the `javah` program."
+msgstr "Путь к программе `javah`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3247
+#, no-wrap
+msgid "`JAVAP`"
+msgstr "`JAVAP`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3249
+#, no-wrap
+msgid "Path to the `javap` program."
+msgstr "Путь к программе `javap`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3250
+#, no-wrap
+msgid "`JAVA_KEYTOOL`"
+msgstr "`JAVA_KEYTOOL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3252
+#, no-wrap
+msgid "Path to the `keytool` utility program."
+msgstr "Путь к утилите `keytool`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3253
+#, no-wrap
+msgid "`JAVA_N2A`"
+msgstr "`JAVA_N2A`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3255
+#, no-wrap
+msgid "Path to the `native2ascii` tool."
+msgstr "Путь к инструменту `native2ascii`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3256
+#, no-wrap
+msgid "`JAVA_POLICYTOOL`"
+msgstr "`JAVA_POLICYTOOL`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3258
+#, no-wrap
+msgid "Path to the `policytool` program."
+msgstr "Путь к программе `policytool`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3259
+#, no-wrap
+msgid "`JAVA_SERIALVER`"
+msgstr "`JAVA_SERIALVER`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3261
+#, no-wrap
+msgid "Path to the `serialver` utility program."
+msgstr "Путь к утилите `serialver`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3262
+#, no-wrap
+msgid "`RMIC`"
+msgstr "`RMIC`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3264
+#, no-wrap
+msgid "Path to the RMI stub/skeleton generator, `rmic`."
+msgstr "Путь к генератору RMI-заглушек/скелетов, `rmic`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3265
+#, no-wrap
+msgid "`RMIREGISTRY`"
+msgstr "`RMIREGISTRY`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3267
+#, no-wrap
+msgid "Path to the RMI registry program, `rmiregistry`."
+msgstr "Путь к программе реестра RMI, `rmiregistry`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3268
+#, no-wrap
+msgid "`RMID`"
+msgstr "`RMID`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3270
+#, no-wrap
+msgid "Path to the RMI daemon program `rmid`."
+msgstr "Путь к программе демона RMI `rmid`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3271
+#, no-wrap
+msgid "`JAVA_CLASSES`"
+msgstr "`JAVA_CLASSES`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3272
+#, no-wrap
+msgid "Path to the archive that contains the JDK class files, [.filename]#${JAVA_HOME}/jre/lib/rt.jar#."
+msgstr "Путь к архиву, содержащему файлы классов JDK, [.filename]#${JAVA_HOME}/jre/lib/rt.jar#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3276
+msgid ""
+"Use the `java-debug` make target to get information for debugging the port. "
+"It will display the value of many of the previously listed variables."
+msgstr ""
+"Используйте цель `java-debug` в make для получения информации для отладки "
+"порта. Она отобразит значения многих из перечисленных ранее переменных."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3278
+msgid ""
+"Additionally, these constants are defined so all Java ports may be installed "
+"in a consistent way:"
+msgstr ""
+"Кроме того, определены следующие константы, чтобы все порты Java могли быть "
+"установлены единообразно:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3280
+#, no-wrap
+msgid "Constants Defined for Ports That Use Java"
+msgstr "Константы, определенные для портов, использующих Java"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3284
+#, no-wrap
+msgid "Constant"
+msgstr "Константа"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3287
+#, no-wrap
+msgid "`JAVASHAREDIR`"
+msgstr "`JAVASHAREDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3289
+#, no-wrap
+msgid "The base directory for everything related to Java. Default: [.filename]#${PREFIX}/share/java#."
+msgstr "Базовый каталог для всего, связанного с Java. По умолчанию: [.filename]#${PREFIX}/share/java#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3290
+#, no-wrap
+msgid "`JAVAJARDIR`"
+msgstr "`JAVAJARDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3292
+#, no-wrap
+msgid "The directory where JAR files is installed. Default: [.filename]#${JAVASHAREDIR}/classes#."
+msgstr "Каталог, в котором установлены JAR-файлы. По умолчанию: [.filename]#${JAVASHAREDIR}/classes#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3293
+#, no-wrap
+msgid "`JAVALIBDIR`"
+msgstr "`JAVALIBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3294
+#, no-wrap
+msgid "The directory where JAR files installed by other ports are located. Default: [.filename]#${LOCALBASE}/share/java/classes#."
+msgstr "Каталог, в котором расположены JAR-файлы, установленные другими портами. По умолчанию: [.filename]#${LOCALBASE}/share/java/classes#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3297
+msgid ""
+"The related entries are defined in both `PLIST_SUB` (documented in "
+"crossref:plist[plist-sub,Changing pkg-plist Based on Make Variables]) and "
+"`SUB_LIST`."
+msgstr ""
+"Связанные записи определены как в `PLIST_SUB` (документировано в "
+"crossref:plist[plist-sub,Изменение pkg-plist на основе переменных Make]), "
+"так и в `SUB_LIST`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3299
+#, no-wrap
+msgid "Building with Ant"
+msgstr "Сборка с Ant"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3305
+msgid ""
+"When the port is to be built using Apache Ant, it has to define `USE_ANT`. "
+"Ant is thus considered to be the sub-make command. When no `do-build` "
+"target is defined by the port, a default one will be set that runs Ant "
+"according to `MAKE_ENV`, `MAKE_ARGS` and `ALL_TARGET`. This is similar to "
+"the `USES= gmake` mechanism, which is documented in "
+"crossref:special[building, Building Mechanisms]."
+msgstr ""
+"Когда порт должен собираться с использованием Apache Ant, он должен "
+"определять `USE_ANT`. Таким образом, Ant считается командой sub-make. Если "
+"цель `do-build` не определена в порте, будет установлена цель по умолчанию, "
+"которая запускает Ant в соответствии с `MAKE_ENV`, `MAKE_ARGS` и "
+"`ALL_TARGET`. Это аналогично механизму `USES= gmake`, который документирован "
+"в crossref:special[building, Building Mechanisms]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3307
+#, no-wrap
+msgid "Best Practices"
+msgstr "Лучшие практики"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3312
+msgid ""
+"When porting a Java library, the port has to install the JAR file(s) in "
+"[.filename]#${JAVAJARDIR}#, and everything else under [.filename]#$"
+"{JAVASHAREDIR}/${PORTNAME}# (except for the documentation, see below). To "
+"reduce the packing file size, reference the JAR file(s) directly in the "
+"[.filename]#Makefile#. Use this statement (where [.filename]#myport.jar# is "
+"the name of the JAR file installed as part of the port):"
+msgstr ""
+"При переносе библиотеки Java порт должен устанавливать JAR-файл(ы) в "
+"[.filename]#${JAVAJARDIR}#, а все остальное — в [.filename]#${JAVASHAREDIR}/$"
+"{PORTNAME}# (за исключением документации, см. ниже). Чтобы уменьшить размер "
+"упаковочного файла, ссылайтесь на JAR-файл(ы) напрямую в "
+"[.filename]#Makefile#. Используйте следующую инструкцию (где "
+"[.filename]#myport.jar# — имя JAR-файла, устанавливаемого как часть порта):"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3316
+#, no-wrap
+msgid "PLIST_FILES+=\t${JAVAJARDIR}/myport.jar\n"
+msgstr "PLIST_FILES+=\t${JAVAJARDIR}/myport.jar\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3321
+msgid ""
+"When porting a Java application, the port usually installs everything under "
+"a single directory (including its JAR dependencies). The use of "
+"[.filename]#${JAVASHAREDIR}/${PORTNAME}# is strongly encouraged in this "
+"regard. It is up the porter to decide whether the port installs the "
+"additional JAR dependencies under this directory or uses the already "
+"installed ones (from [.filename]#${JAVAJARDIR}#)."
+msgstr ""
+"При переносе Java-приложения порт обычно устанавливает все компоненты в "
+"единый каталог (включая зависимости в виде JAR-файлов). В этом отношении "
+"настоятельно рекомендуется использовать [.filename]#${JAVASHAREDIR}/$"
+"{PORTNAME}#. Портеру предстоит решить, устанавливать ли дополнительные JAR-"
+"зависимости в этот каталог или использовать уже установленные (из "
+"[.filename]#${JAVAJARDIR}#)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3328
+msgid ""
+"When porting a Java(TM) application that requires an application server such "
+"as package:www/tomcat7[] to run the service, it is quite common for a vendor "
+"to distribute a [.filename]#.war#. A [.filename]#.war# is a Web application "
+"ARchive and is extracted when called by the application. Avoid adding a "
+"[.filename]#.war# to [.filename]#pkg-plist#. It is not considered best "
+"practice. An application server will expand war archive, but not clean it "
+"up properly if the port is removed. A more desirable way of working with "
+"this file is to extract the archive, then install the files, and lastly add "
+"these files to [.filename]#pkg-plist#."
+msgstr ""
+"При переносе Java(TM)-приложения, которое требует сервера приложений, такого "
+"как package:www/tomcat7[], для запуска службы, вендор часто распространяет "
+"файл [.filename]#.war#. [.filename]#.war# — это веб-архив приложения (Web "
+"application ARchive), который извлекается при вызове приложением. Избегайте "
+"добавления [.filename]#.war# в [.filename]#pkg-plist#. Это не считается "
+"лучшей практикой. Сервер приложений развернет архив war, но не очистит его "
+"должным образом при удалении порта. Более предпочтительный способ работы с "
+"этим файлом — извлечь архив, затем установить файлы и, наконец, добавить эти "
+"файлы в [.filename]#pkg-plist#."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3333
+#, no-wrap
+msgid ""
+"TOMCATDIR=\t${LOCALBASE}/apache-tomcat-7.0\n"
+"WEBAPPDIR=\tmyapplication\n"
+msgstr ""
+"TOMCATDIR=\t${LOCALBASE}/apache-tomcat-7.0\n"
+"WEBAPPDIR=\tmyapplication\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3337
+#, no-wrap
+msgid ""
+"post-extract:\n"
+"\t@${MKDIR} ${WRKDIR}/${PORTDIRNAME}\n"
+"\t@${TAR} xf ${WRKDIR}/myapplication.war -C ${WRKDIR}/${PORTDIRNAME}\n"
+msgstr ""
+"post-extract:\n"
+"\t@${MKDIR} ${WRKDIR}/${PORTDIRNAME}\n"
+"\t@${TAR} xf ${WRKDIR}/myapplication.war -C ${WRKDIR}/${PORTDIRNAME}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3342
+#, no-wrap
+msgid ""
+"do-install:\n"
+"\tcd ${WRKDIR} && \\\n"
+"\t${INSTALL} -d -o ${WWWOWN} -g ${WWWGRP} ${TOMCATDIR}/webapps/${PORTDIRNAME}\n"
+"\tcd ${WRKDIR}/${PORTDIRNAME} && ${COPYTREE_SHARE} \\* ${WEBAPPDIR}/${PORTDIRNAME}\n"
+msgstr ""
+"do-install:\n"
+"\tcd ${WRKDIR} && \\\n"
+"\t${INSTALL} -d -o ${WWWOWN} -g ${WWWGRP} ${TOMCATDIR}/webapps/${PORTDIRNAME}\n"
+"\tcd ${WRKDIR}/${PORTDIRNAME} && ${COPYTREE_SHARE} \\* ${WEBAPPDIR}/${PORTDIRNAME}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3349
+msgid ""
+"Regardless of the type of port (library or application), the additional "
+"documentation is installed in the crossref:makefiles[install-"
+"documentation,same location] as for any other port. The Javadoc tool is "
+"known to produce a different set of files depending on the version of the "
+"JDK that is used. For ports that do not enforce the use of a particular "
+"JDK, it is therefore a complex task to specify the packing list "
+"([.filename]#pkg-plist#). This is one reason why porters are strongly "
+"encouraged to use `PORTDOCS`. Moreover, even if the set of files that will "
+"be generated by `javadoc` can be predicted, the size of the resulting "
+"[.filename]#pkg-plist# advocates for the use of `PORTDOCS`."
+msgstr ""
+"Независимо от типа порта (библиотека или приложение), дополнительная "
+"документация устанавливается crossref:makefiles[install-documentation,в том "
+"же месте], что и для любого другого порта. Известно, что инструмент Javadoc "
+"создает разный набор файлов в зависимости от версии используемого JDK. Для "
+"портов, которые не требуют использования конкретной версии JDK, указание "
+"списка упаковки ([.filename]#pkg-plist#) становится сложной задачей. Это "
+"одна из причин, по которой разработчикам портов настоятельно рекомендуется "
+"использовать `PORTDOCS`. Более того, даже если набор файлов, генерируемых "
+"`javadoc`, можно предсказать, размер результирующего [.filename]#pkg-plist# "
+"говорит в пользу использования `PORTDOCS`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3353
+msgid ""
+"The default value for `DATADIR` is [.filename]#${PREFIX}/share/${PORTNAME}"
+"#. It is a good idea to override `DATADIR` to [.filename]#${JAVASHAREDIR}/$"
+"{PORTNAME}# for Java ports. Indeed, `DATADIR` is automatically added to "
+"`PLIST_SUB` (documented in crossref:plist[plist-sub,Changing pkg-plist Based "
+"on Make Variables]) so use `%%DATADIR%%` directly in [.filename]#pkg-plist#."
+msgstr ""
+"Значение по умолчанию для `DATADIR` — [.filename]#${PREFIX}/share/${PORTNAME}"
+"#. Рекомендуется переопределить `DATADIR` на [.filename]#${JAVASHAREDIR}/$"
+"{PORTNAME}# для портов Java. Действительно, `DATADIR` автоматически "
+"добавляется в `PLIST_SUB` (документировано в crossref:plist[plist-"
+"sub,Изменение pkg-plist на основе переменных Make]), поэтому используйте `%"
+"%DATADIR%%` напрямую в [.filename]#pkg-plist#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3356
+msgid ""
+"As for the choice of building Java ports from source or directly installing "
+"them from a binary distribution, there is no defined policy at the time of "
+"writing. However, people from the https://www.freebsd.org/java/[FreeBSD "
+"Java Project] encourage porters to have their ports built from source "
+"whenever it is a trivial task."
+msgstr ""
+"Что касается выбора между сборкой портов Java из исходного кода или их "
+"непосредственной установкой из бинарного дистрибутива, на момент написания "
+"документации определённой политики не существует. Однако участники https://"
+"www.freebsd.org/java/[FreeBSD Java Project] рекомендуют сопровождающим "
+"портов по возможности собирать их из исходного кода, если это не "
+"представляет сложностей."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3360
+msgid ""
+"All the features that have been presented in this section are implemented in "
+"[.filename]#bsd.java.mk#. If the port needs more sophisticated Java "
+"support, please first have a look at the https://cgit.FreeBSD.org/ports/tree/"
+"Mk/bsd.java.mk[bsd.java.mk Git log] as it usually takes some time to "
+"document the latest features. Then, if the needed support that is lacking "
+"would be beneficial to many other Java ports, feel free to discuss it on the "
+"freebsd-java."
+msgstr ""
+"Все функции, представленные в этом разделе, реализованы в "
+"[.filename]#bsd.java.mk#. Если порту требуется более сложная поддержка Java, "
+"сначала ознакомьтесь с https://cgit.FreeBSD.org/ports/tree/Mk/"
+"bsd.java.mk[историей изменений bsd.java.mk], так как документирование новых "
+"функций обычно занимает некоторое время. Затем, если отсутствующая поддержка "
+"будет полезна для многих других Java-портов, не стесняйтесь обсудить это на "
+"списке рассылки freebsd-java."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3363
+msgid ""
+"Although there is a `java` category for PRs, it refers to the JDK porting "
+"effort from the FreeBSD Java project. Therefore, submit the Java port in "
+"the `ports` category as for any other port, unless the issue is related to "
+"either a JDK implementation or [.filename]#bsd.java.mk#."
+msgstr ""
+"Хотя существует категория `java` для PR, она относится к усилиям по "
+"портированию JDK в рамках проекта FreeBSD Java. Поэтому отправляйте порт "
+"Java в категорию `ports`, как и любой другой порт, если только проблема не "
+"связана либо с реализацией JDK, либо с [.filename]#bsd.java.mk#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3365
+msgid ""
+"Similarly, there is a defined policy regarding the `CATEGORIES` of a Java "
+"port, which is detailed in crossref:makefiles[makefile-"
+"categories,Categorization]."
+msgstr ""
+"Аналогично существует определённая политика в отношении `CATEGORIES` для "
+"портов Java, которая подробно описана в crossref:makefiles[makefile-"
+"categories,Категоризация]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3367
+#, no-wrap
+msgid "Web Applications, Apache and PHP"
+msgstr "Веб-приложения, Apache и PHP"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3370
+#, no-wrap
+msgid "Apache"
+msgstr "Apache"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3373
+#, no-wrap
+msgid "Variables for Ports That Use Apache"
+msgstr "Переменные для портов, использующих Apache"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3377
+#, no-wrap
+msgid "`USE_APACHE`"
+msgstr "`USE_APACHE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3379
+#, no-wrap
+msgid "The port requires Apache. Possible values: `yes` (gets any version), `22`, `24`, `22-24`, `22+`, etc. The default APACHE version is `22`. More details are available in [.filename]#ports/Mk/bsd.apache.mk# and at https://wiki.freebsd.org/Apache/[wiki.freebsd.org/Apache/]."
+msgstr "Порт требует Apache. Возможные значения: `yes` (любая версия), `22`, `24`, `22-24`, `22+` и т.д. Версия APACHE по умолчанию — `22`. Подробнее см. в [.filename]#ports/Mk/bsd.apache.mk# и на https://wiki.freebsd.org/Apache/[wiki.freebsd.org/Apache/]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3380
+#, no-wrap
+msgid "`APXS`"
+msgstr "`APXS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3382
+#, no-wrap
+msgid "Full path to the `apxs` binary. Can be overridden in the port."
+msgstr "Полный путь к бинарному файлу `apxs`. Может быть переопределён в порте."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3383
+#, no-wrap
+msgid "`HTTPD`"
+msgstr "`HTTPD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3385
+#, no-wrap
+msgid "Full path to the `httpd` binary. Can be overridden in the port."
+msgstr "Полный путь к бинарному файлу `httpd`. Может быть переопределён в порте."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3386
+#, no-wrap
+msgid "`APACHE_VERSION`"
+msgstr "`APACHE_VERSION`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3388
+#, no-wrap
+msgid "The version of present Apache installation (read-only variable). This variable is only available after inclusion of [.filename]#bsd.port.pre.mk#. Possible values: `22`, `24`."
+msgstr "Версия установленной Apache (переменная только для чтения). Эта переменная доступна только после включения [.filename]#bsd.port.pre.mk#. Возможные значения: `22`, `24`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3389
+#, no-wrap
+msgid "`APACHEMODDIR`"
+msgstr "`APACHEMODDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3391
+#, no-wrap
+msgid "Directory for Apache modules. This variable is automatically expanded in [.filename]#pkg-plist#."
+msgstr "Каталог для модулей Apache. Эта переменная автоматически раскрывается в [.filename]#pkg-plist#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3392
+#, no-wrap
+msgid "`APACHEINCLUDEDIR`"
+msgstr "`APACHEINCLUDEDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3394
+#, no-wrap
+msgid "Directory for Apache headers. This variable is automatically expanded in [.filename]#pkg-plist#."
+msgstr "Каталог для заголовков Apache. Эта переменная автоматически раскрывается в [.filename]#pkg-plist#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3395
+#, no-wrap
+msgid "`APACHEETCDIR`"
+msgstr "`APACHEETCDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3396
+#, no-wrap
+msgid "Directory for Apache configuration files. This variable is automatically expanded in [.filename]#pkg-plist#."
+msgstr "Каталог для файлов конфигурации Apache. Эта переменная автоматически раскрывается в [.filename]#pkg-plist#."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3399
+#, no-wrap
+msgid "Useful Variables for Porting Apache Modules"
+msgstr "Полезные переменные для переноса модулей Apache"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3403
+#, no-wrap
+msgid "`MODULENAME`"
+msgstr "`MODULENAME`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3405
+#, no-wrap
+msgid "Name of the module. Default value is `PORTNAME`. Example: `mod_hello`"
+msgstr "Имя модуля. Значение по умолчанию — `PORTNAME`. Пример: `mod_hello`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3406
+#, no-wrap
+msgid "`SHORTMODNAME`"
+msgstr "`SHORTMODNAME`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3408
+#, no-wrap
+msgid "Short name of the module. Automatically derived from `MODULENAME`, but can be overridden. Example: `hello`"
+msgstr "Короткое имя модуля. Автоматически определяется из `MODULENAME`, но может быть переопределено. Пример: `hello`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3409
+#, no-wrap
+msgid "`AP_FAST_BUILD`"
+msgstr "`AP_FAST_BUILD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3411
+#, no-wrap
+msgid "Use `apxs` to compile and install the module."
+msgstr "Используйте `apxs` для компиляции и установки модуля."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3412
+#, no-wrap
+msgid "`AP_GENPLIST`"
+msgstr "`AP_GENPLIST`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3414
+#, no-wrap
+msgid "Also automatically creates a [.filename]#pkg-plist#."
+msgstr "Также автоматически создаёт файл [.filename]#pkg-plist#."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3415
+#, no-wrap
+msgid "`AP_INC`"
+msgstr "`AP_INC`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3417
+#, no-wrap
+msgid "Adds a directory to a header search path during compilation."
+msgstr "Добавляет каталог в путь поиска заголовков во время компиляции."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3418
+#, no-wrap
+msgid "`AP_LIB`"
+msgstr "`AP_LIB`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3420
+#, no-wrap
+msgid "Adds a directory to a library search path during compilation."
+msgstr "Добавляет каталог в путь поиска библиотек во время компиляции."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3421
+#, no-wrap
+msgid "`AP_EXTRAS`"
+msgstr "`AP_EXTRAS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3422
+#, no-wrap
+msgid "Additional flags to pass to `apxs`."
+msgstr "Дополнительные флаги для передачи в `apxs`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3425
+#, no-wrap
+msgid "Web Applications"
+msgstr "Веб-приложения"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3429
+msgid ""
+"Web applications must be installed into [.filename]#PREFIX/www/appname#. "
+"This path is available both in [.filename]#Makefile# and in [.filename]#pkg-"
+"plist# as `WWWDIR`, and the path relative to `PREFIX` is available in "
+"[.filename]#Makefile# as `WWWDIR_REL`."
+msgstr ""
+"Веб-приложения должны быть установлены в [.filename]#PREFIX/www/appname#. "
+"Этот путь доступен как в [.filename]#Makefile#, так и в [.filename]#pkg-"
+"plist# как `WWWDIR`, а путь относительно `PREFIX` доступен в "
+"[.filename]#Makefile# как `WWWDIR_REL`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3434
+msgid ""
+"The user and group of web server process are available as `WWWOWN` and "
+"`WWWGRP`, in case the ownership of some files needs to be changed. The "
+"default values of both are `www`. Use `WWWOWN?= myuser` and `WWWGRP?= "
+"mygroup` if the port needs different values. This allows the user to "
+"override them easily."
+msgstr ""
+"Пользователь и группа процесса веб-сервера доступны как `WWWOWN` и `WWWGRP`, "
+"если необходимо изменить владельца некоторых файлов. Значения по умолчанию "
+"для обоих — `www`. Используйте `WWWOWN?= myuser` и `WWWGRP?= mygroup`, если "
+"порту требуются другие значения. Это позволяет пользователю легко их "
+"переопределить."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3439
+msgid ""
+"Use `WWWOWN` and `WWWGRP` sparingly. Remember that every file the web "
+"server can write to is a security risk waiting to happen."
+msgstr ""
+"Используйте `WWWOWN` и `WWWGRP` с осторожностью. Помните, что каждый файл, "
+"доступный для записи веб-серверу, представляет собой потенциальную угрозу "
+"безопасности."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3443
+msgid ""
+"Do not depend on Apache unless the web app explicitly needs Apache. Respect "
+"that users may wish to run a web application on a web server other than "
+"Apache."
+msgstr ""
+"Не зависьте от Apache, если веб-приложение явно не требует Apache. "
+"Учитывайте, что пользователи могут захотеть запускать веб-приложение на "
+"другом веб-сервере, кроме Apache."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3445
+#, no-wrap
+msgid "PHP"
+msgstr "PHP"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3449
+msgid ""
+"PHP web applications declare their dependency on it with `USES=php`. See "
+"crossref:uses[uses-php,`php`] for more information."
+msgstr ""
+"Веб-приложения PHP объявляют свою зависимость от него с помощью `USES=php`. "
+"Подробнее см. в crossref:uses[uses-php,`php`]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3451
+#, no-wrap
+msgid "PEAR Modules"
+msgstr "Модули PEAR"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3454
+msgid "Porting PEAR modules is a very simple process."
+msgstr "Портирование модулей PEAR — это очень простой процесс."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3457
+msgid ""
+"Add `USES=pear` to the port's [.filename]#Makefile#. The framework will "
+"install the relevant files in the right places and automatically generate "
+"the plist at install time."
+msgstr ""
+"Добавьте `USES=pear` в [.filename]#Makefile# порта. Фреймворк установит "
+"соответствующие файлы в нужные места и автоматически сгенерирует plist во "
+"время установки."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3459
+#, no-wrap
+msgid "Example Makefile for PEAR Class"
+msgstr "Пример Makefile для PEAR Class"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3467
+#, no-wrap
+msgid ""
+"PORTNAME= Date\n"
+"DISTVERSION=\t1.4.3\n"
+"CATEGORIES=\tdevel www pear\n"
+msgstr ""
+"PORTNAME= Date\n"
+"DISTVERSION=\t1.4.3\n"
+"CATEGORIES=\tdevel www pear\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3471
+#, no-wrap
+msgid ""
+"MAINTAINER=\tsomeone@example.org\n"
+"COMMENT=\tPEAR Date and Time Zone Classes\n"
+"WWW=\t\thttps://pear.php.net/package/Date/\n"
+msgstr ""
+"MAINTAINER=\tsomeone@example.org\n"
+"COMMENT=\tPEAR Date and Time Zone Classes\n"
+"WWW=\t\thttps://pear.php.net/package/Date/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3473
+#, no-wrap
+msgid "USES=\tpear\n"
+msgstr "USES=\tpear\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3482
+msgid ""
+"PEAR modules will automatically be flavorized using crossref:flavors[flavors-"
+"auto-php,PHP flavors]."
+msgstr ""
+"Модули PEAR будут автоматически преобразованы в порт с флейвором с "
+"использованием crossref:flavors[flavors-auto-php,флейворов PHP]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3487
+msgid ""
+"If a non default `PEAR_CHANNEL` is used, the build and run-time dependencies "
+"will automatically be added."
+msgstr ""
+"Если используется нестандартный `PEAR_CHANNEL`, зависимости для сборки и "
+"выполнения будут добавлены автоматически."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3493
+msgid ""
+"PEAR modules do not need to defined `PKGNAMESUFFIX` it is automatically "
+"filled in using `PEAR_PKGNAMEPREFIX`. If a port needs to add to "
+"`PKGNAMEPREFIX`, it must also use `PEAR_PKGNAMEPREFIX` to differentiate "
+"between different flavors."
+msgstr ""
+"Модули PEAR не требуют определения `PKGNAMESUFFIX`, так как он автоматически "
+"заполняется с использованием `PEAR_PKGNAMEPREFIX`. Если порту необходимо "
+"добавить к `PKGNAMEPREFIX`, он также должен использовать "
+"`PEAR_PKGNAMEPREFIX`, чтобы отличать различные флейворы."
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3496
+#, no-wrap
+msgid "Horde Modules"
+msgstr "Модули Horde"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3499
+msgid "In the same way, porting Horde modules is a simple process."
+msgstr "Также и перенос модулей Horde является простым процессом."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3502
+msgid ""
+"Add `USES=horde` to the port's [.filename]#Makefile#. The framework will "
+"install the relevant files in the right places and automatically generate "
+"the plist at install time."
+msgstr ""
+"Добавьте `USES=horde` в [.filename]#Makefile# порта. Фреймворк установит "
+"соответствующие файлы в нужные места и автоматически сгенерирует plist во "
+"время установки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3505
+msgid ""
+"The `USE_HORDE_BUILD` and `USE_HORDE_RUN` variables can be used to add "
+"buildtime and runtime dependencies on other Horde modules. See "
+"[.filename]#Mk/Uses/horde.mk# for a complete list of available modules."
+msgstr ""
+"Переменные `USE_HORDE_BUILD` и `USE_HORDE_RUN` могут использоваться для "
+"добавления зависимостей времени сборки и выполнения от других модулей Horde. "
+"Полный список доступных модулей можно найти в [.filename]#Mk/Uses/horde.mk#."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3507
+#, no-wrap
+msgid "Example Makefile for Horde Module"
+msgstr "Пример Makefile для модуля Horde"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3515
+#, no-wrap
+msgid ""
+"PORTNAME=\tHorde_Core\n"
+"DISTVERSION=\t2.14.0\n"
+"CATEGORIES=\tdevel www pear\n"
+msgstr ""
+"PORTNAME=\tHorde_Core\n"
+"DISTVERSION=\t2.14.0\n"
+"CATEGORIES=\tdevel www pear\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3519
+#, no-wrap
+msgid ""
+"MAINTAINER=\thorde@FreeBSD.org\n"
+"COMMENT=\tHorde Core Framework libraries\n"
+"WWW=\t\thttps://pear.horde.org/\n"
+msgstr ""
+"MAINTAINER=\thorde@FreeBSD.org\n"
+"COMMENT=\tHorde Core Framework libraries\n"
+"WWW=\t\thttps://pear.horde.org/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3523
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tKOLAB SOCKETS\n"
+"KOLAB_DESC=\tEnable Kolab server support\n"
+"SOCKETS_DESC=\tDepend on sockets PHP extension\n"
+msgstr ""
+"OPTIONS_DEFINE=\tKOLAB SOCKETS\n"
+"KOLAB_DESC=\tEnable Kolab server support\n"
+"SOCKETS_DESC=\tDepend on sockets PHP extension\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3526
+#, no-wrap
+msgid ""
+"USES=\thorde\n"
+"USE_PHP=\tsession\n"
+msgstr ""
+"USES=\thorde\n"
+"USE_PHP=\tsession\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3530
+#, no-wrap
+msgid ""
+"USE_HORDE_BUILD=\tHorde_Role\n"
+"USE_HORDE_RUN=\tHorde_Role Horde_History Horde_Pack \\\n"
+"\t\tHorde_Text_Filter Horde_View\n"
+msgstr ""
+"USE_HORDE_BUILD=\tHorde_Role\n"
+"USE_HORDE_RUN=\tHorde_Role Horde_History Horde_Pack \\\n"
+"\t\tHorde_Text_Filter Horde_View\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3533
+#, no-wrap
+msgid ""
+"KOLAB_USE=\tHORDE_RUN=Horde_Kolab_Server,Horde_Kolab_Session\n"
+"SOCKETS_USE=\tPHP=sockets\n"
+msgstr ""
+"KOLAB_USE=\tHORDE_RUN=Horde_Kolab_Server,Horde_Kolab_Session\n"
+"SOCKETS_USE=\tPHP=sockets\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3542
+msgid ""
+"As Horde modules are also PEAR modules they will also automatically be "
+"flavorized using crossref:flavors[flavors-auto-php,PHP flavors]."
+msgstr ""
+"Поскольку модули Horde также являются модулями PEAR, они будут автоматически "
+"преобразованы с использованием crossref:flavors[flavors-auto-php,флейворов "
+"PHP]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3545
+#, no-wrap
+msgid "Using Python"
+msgstr "Использование Python"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3550
+msgid ""
+"The Ports Collection supports parallel installation of multiple Python "
+"versions. Ports must use a correct `python` interpreter, according to the "
+"user-settable `PYTHON_VERSION`. Most prominently, this means replacing the "
+"path to `python` executable in scripts with the value of `PYTHON_CMD`."
+msgstr ""
+"Коллекция портов поддерживает параллельную установку нескольких версий "
+"Python. Порты должны использовать правильный интерпретатор `python` в "
+"соответствии с настраиваемым пользователем параметром `PYTHON_VERSION`. "
+"Важнее всего заменить путь к исполняемому файлу `python` в скриптах на "
+"значение `PYTHON_CMD`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3552
+msgid ""
+"Ports that install files under `PYTHON_SITELIBDIR` must use the `pyXY-` "
+"package name prefix, so their package name embeds the version of Python they "
+"are installed into."
+msgstr ""
+"Порты, которые устанавливают файлы в `PYTHON_SITELIBDIR`, должны "
+"использовать префикс имени пакета `pyXY-`, чтобы их имя пакета включало "
+"версию Python, для которой они предназначены."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3556
+#, no-wrap
+msgid "PKGNAMEPREFIX=\t${PYTHON_PKGNAMEPREFIX}\n"
+msgstr "PKGNAMEPREFIX=\t${PYTHON_PKGNAMEPREFIX}\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3560
+#, no-wrap
+msgid "Most Useful Variables for Ports That Use Python"
+msgstr "Наиболее полезные переменные для портов, использующих Python"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3564
+#, no-wrap
+msgid "`USES=python`"
+msgstr "`USES=python`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3566
+#, no-wrap
+msgid "The port needs Python. The minimal required version can be specified with values such as `3.10+`. Version ranges can also be specified by separating two version numbers with a dash: `USES=python:3.8-3.9`. Note that `USES=python` does _not_ cover Python 2.7, it needs to be requested explicitly with `USES=python:2.7+`."
+msgstr "Порту требуется Python. Минимально необходимая версия может быть указана с такими значениями, как `3.10+`. Диапазоны версий также можно указать, разделив две версии дефисом: `USES=python:3.8-3.9`. Обратите внимание, что `USES=python` _не_ включает Python 2.7, его нужно запрашивать явно с помощью `USES=python:2.7+`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3567
+#, no-wrap
+msgid "`USE_PYTHON=distutils`"
+msgstr "`USE_PYTHON=distutils`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3569
+#, no-wrap
+msgid "Use Python distutils for configuring, compiling, and installing. This is required when the port comes with [.filename]#setup.py#. This overrides the `do-build` and `do-install` targets and may also override `do-configure` if `GNU_CONFIGURE` is not defined. Additionally, it implies `USE_PYTHON=flavors`."
+msgstr "Используйте Python distutils для настройки, компиляции и установки. Это требуется, когда порт поставляется с [.filename]#setup.py#. Это переопределяет цели `do-build` и `do-install`, а также может переопределить `do-configure`, если `GNU_CONFIGURE` не определён. Кроме того, подразумевается `USE_PYTHON=flavors`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3570
+#, no-wrap
+msgid "`USE_PYTHON=autoplist`"
+msgstr "`USE_PYTHON=autoplist`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3572
+#, no-wrap
+msgid "Create the packaging list automatically. This also requires `USE_PYTHON=distutils` to be set."
+msgstr "Создать список пакетов автоматически. Это также требует установки `USE_PYTHON=distutils`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3573
+#, no-wrap
+msgid "`USE_PYTHON=concurrent`"
+msgstr "`USE_PYTHON=concurrent`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3575
+#, no-wrap
+msgid "The port will use an unique prefix, typically `PYTHON_PKGNAMEPREFIX` for certain directories, such as `EXAMPLESDIR` and `DOCSDIR` and also will append a suffix, the python version from `PYTHON_VER`, to binaries and scripts to be installed. This allows ports to be installed for different Python versions at the same time, which otherwise would install conflicting files."
+msgstr "Порт будет использовать уникальный префикс, обычно `PYTHON_PKGNAMEPREFIX`, для определённых каталогов, таких как `EXAMPLESDIR` и `DOCSDIR`, а также добавлять суффикс — версию Python из `PYTHON_VER` — к устанавливаемым бинарным файлам и скриптам. Это позволяет устанавливать порты для разных версий Python одновременно, что в противном случае приводило бы к конфликту файлов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3576
+#, no-wrap
+msgid "`USE_PYTHON=flavors`"
+msgstr "`USE_PYTHON=flavors`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3578
+#, no-wrap
+msgid "The port does not use distutils but still supports multiple Python versions. `FLAVORS` will be set to the supported Python versions. See crossref:flavors[flavors-auto-python,`USES`=python and Flavors] for more information."
+msgstr "Порт не использует distutils, но по-прежнему поддерживает несколько версий Python. `FLAVORS` будет установлен в поддерживаемые версии Python. Дополнительную информацию см. в crossref:flavors[flavors-auto-python,`USES`=python и флейворы]."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3579
+#, no-wrap
+msgid "`USE_PYTHON=optsuffix`"
+msgstr "`USE_PYTHON=optsuffix`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3581
+#, no-wrap
+msgid "If the current Python version is not the default version, the port will gain `PKGNAMESUFFIX=${PYTHON_PKGNAMESUFFIX}`. Only useful with flavors."
+msgstr "Если текущая версия Python не является версией по умолчанию, порт получит `PKGNAMESUFFIX=${PYTHON_PKGNAMESUFFIX}`. Полезно только для флейворов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3582
+#, no-wrap
+msgid "`PYTHON_PKGNAMEPREFIX`"
+msgstr "`PYTHON_PKGNAMEPREFIX`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3584
+#, no-wrap
+msgid "Used as a `PKGNAMEPREFIX` to distinguish packages for different Python versions. Example: `py27-`"
+msgstr "Используется как `PKGNAMEPREFIX` для различения пакетов разных версий Python. Пример: `py27-`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3585
+#, no-wrap
+msgid "`PYTHON_SITELIBDIR`"
+msgstr "`PYTHON_SITELIBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3587
+#, no-wrap
+msgid "Location of the site-packages tree, that contains installation path of Python (usually `LOCALBASE`). `PYTHON_SITELIBDIR` can be very useful when installing Python modules."
+msgstr "Расположение дерева site-packages, которое содержит путь установки Python (обычно `LOCALBASE`). `PYTHON_SITELIBDIR` может быть очень полезно при установке модулей Python."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3588
+#, no-wrap
+msgid "`PYTHONPREFIX_SITELIBDIR`"
+msgstr "`PYTHONPREFIX_SITELIBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3590
+#, no-wrap
+msgid "The PREFIX-clean variant of PYTHON_SITELIBDIR. Always use `%%PYTHON_SITELIBDIR%%` in [.filename]#pkg-plist# when possible. The default value of `%%PYTHON_SITELIBDIR%%` is `lib/python%%PYTHON_VERSION%%/site-packages`"
+msgstr "Вариант PREFIX-clean для PYTHON_SITELIBDIR. Всегда используйте `%%PYTHON_SITELIBDIR%%` в [.filename]#pkg-plist#, когда это возможно. Значение по умолчанию для `%%PYTHON_SITELIBDIR%%` — `lib/python%%PYTHON_VERSION%%/site-packages`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3591
+#, no-wrap
+msgid "`PYTHON_CMD`"
+msgstr "`PYTHON_CMD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3592
+#, no-wrap
+msgid "Python interpreter command line, including version number."
+msgstr "Интерпретатор командной строки Python, включая номер версии."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3595
+#, no-wrap
+msgid "Python Module Dependency Helpers"
+msgstr "Помощники зависимостей модуля Python"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3599
+#, no-wrap
+msgid "`PYNUMERIC`"
+msgstr "`PYNUMERIC`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3601
+#, no-wrap
+msgid "Dependency line for numeric extension."
+msgstr "Строка зависимости для числового расширения."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3602
+#, no-wrap
+msgid "`PYNUMPY`"
+msgstr "`PYNUMPY`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3604
+#, no-wrap
+msgid "Dependency line for the new numeric extension, numpy. (PYNUMERIC is deprecated by upstream vendor)."
+msgstr "Строка зависимости для нового числового расширения, numpy. (PYNUMERIC устарел у вендора)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3605
+#, no-wrap
+msgid "`PYXML`"
+msgstr "`PYXML`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3607
+#, no-wrap
+msgid "Dependency line for XML extension (not needed for Python 2.0 and higher as it is also in base distribution)."
+msgstr "Строка зависимости для расширения XML (не требуется для Python 2.0 и выше, так как оно также входит в базовую поставку)."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3608
+#, no-wrap
+msgid "`PY_ENUM34`"
+msgstr "`PY_ENUM34`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3610
+#, no-wrap
+msgid "Conditional dependency on package:devel/py-enum34[] depending on the Python version."
+msgstr "Условная зависимость от пакета package:devel/py-enum34[] в зависимости от версии Python."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3611
+#, no-wrap
+msgid "`PY_ENUM_COMPAT`"
+msgstr "`PY_ENUM_COMPAT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3613
+#, no-wrap
+msgid "Conditional dependency on package:devel/py-enum-compat[] depending on the Python version."
+msgstr "Условная зависимость от пакета package:devel/py-enum-compat[] в зависимости от версии Python."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3614
+#, no-wrap
+msgid "`PY_PATHLIB`"
+msgstr "`PY_PATHLIB`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3616
+#, no-wrap
+msgid "Conditional dependency on package:devel/py-pathlib[] depending on the Python version."
+msgstr "Условная зависимость от пакета package:devel/py-pathlib[] в зависимости от версии Python."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3617
+#, no-wrap
+msgid "`PY_IPADDRESS`"
+msgstr "`PY_IPADDRESS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3619
+#, no-wrap
+msgid "Conditional dependency on package:net/py-ipaddress[] depending on the Python version."
+msgstr "Условная зависимость от пакета package:net/py-ipaddress[] в зависимости от версии Python."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3620
+#, no-wrap
+msgid "`PY_FUTURES`"
+msgstr "`PY_FUTURES`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3621
+#, no-wrap
+msgid "Conditional dependency on package:devel/py-futures[] depending on the Python version."
+msgstr "Условная зависимость от пакета package:devel/py-futures[] в зависимости от версии Python."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3624
+msgid ""
+"A complete list of available variables can be found in [.filename]#/usr/"
+"ports/Mk/Uses/python.mk#."
+msgstr ""
+"Полный список доступных переменных можно найти в [.filename]#/usr/ports/Mk/"
+"Uses/python.mk#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3629
+msgid ""
+"All dependencies to Python ports using crossref:flavors[flavors-auto-"
+"python,Python flavors] (either with `USE_PYTHON=distutils` or "
+"`USE_PYTHON=flavors`) must have the Python flavor appended to their origin "
+"using `@${PY_FLAVOR}`. See crossref:special[python-Makefile,Makefile for a "
+"Simple Python Module]."
+msgstr ""
+"Все зависимости для портов Python, использующих crossref:flavors[flavors-"
+"auto-python,флейворы Python] (с `USE_PYTHON=distutils` или "
+"`USE_PYTHON=flavors`), должны иметь флейвор Python, добавленную к их origin "
+"с помощью `@${PY_FLAVOR}`. См. crossref:special[python-Makefile,Makefile для "
+"простого модуля Python]."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3632
+#, no-wrap
+msgid "Makefile for a Simple Python Module"
+msgstr "Makefile для Простого Модуля Python"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3640
+#, no-wrap
+msgid ""
+"PORTNAME=\tsample\n"
+"DISTVERSION=\t1.2.3\n"
+"CATEGORIES=\tdevel\n"
+msgstr ""
+"PORTNAME=\tsample\n"
+"DISTVERSION=\t1.2.3\n"
+"CATEGORIES=\tdevel\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3644
+#, no-wrap
+msgid ""
+"MAINTAINER=\tfred.bloggs@example.com\n"
+"COMMENT=\tPython sample module\n"
+"WWW=\t\thttps://example.com/project/sample/\n"
+msgstr ""
+"MAINTAINER=\tfred.bloggs@example.com\n"
+"COMMENT=\tPython sample module\n"
+"WWW=\t\thttps://example.com/project/sample/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3646
+#, no-wrap
+msgid "RUN_DEPENDS=\t${PYTHON_PKGNAMEPREFIX}six>0:devel/py-six@${PY_FLAVOR}\n"
+msgstr "RUN_DEPENDS=\t${PYTHON_PKGNAMEPREFIX}six>0:devel/py-six@${PY_FLAVOR}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3649
+#, no-wrap
+msgid ""
+"USES=\t\tpython\n"
+"USE_PYTHON=\tautoplist distutils\n"
+msgstr ""
+"USES=\t\tpython\n"
+"USE_PYTHON=\tautoplist distutils\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3659
+msgid ""
+"Some Python applications claim to have `DESTDIR` support (which would be "
+"required for staging) but it is broken (Mailman up to 2.1.16, for "
+"instance). This can be worked around by recompiling the scripts. This can "
+"be done, for example, in the `post-build` target. Assuming the Python "
+"scripts are supposed to reside in `PYTHONPREFIX_SITELIBDIR` after "
+"installation, this solution can be applied:"
+msgstr ""
+"Некоторые приложения на Python заявляют о поддержке `DESTDIR` (что "
+"необходимо для промежуточной сборки), но она не работает (например, Mailman "
+"до версии 2.1.16). Это можно обойти, перекомпилировав скрипты. Это можно "
+"сделать, например, в цели `post-build`. Предполагая, что Python-скрипты "
+"должны находиться в `PYTHONPREFIX_SITELIBDIR` после установки, можно "
+"применить следующее решение:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3665
+#, no-wrap
+msgid ""
+"(cd ${STAGEDIR}${PREFIX} \\\n"
+" && ${PYTHON_CMD} ${PYTHON_LIBDIR}/compileall.py \\\n"
+" -d ${PREFIX} -f ${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;})\n"
+msgstr ""
+"(cd ${STAGEDIR}${PREFIX} \\\n"
+" && ${PYTHON_CMD} ${PYTHON_LIBDIR}/compileall.py \\\n"
+" -d ${PREFIX} -f ${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;})\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3668
+msgid ""
+"This recompiles the sources with a path relative to the stage directory, and "
+"prepends the value of `PREFIX` to the file name recorded in the byte-"
+"compiled output file by `-d`. `-f` is required to force recompilation, and "
+"the `:S;${PREFIX}/;;` strips prefixes from the value of "
+"`PYTHONPREFIX_SITELIBDIR` to make it relative to `PREFIX`."
+msgstr ""
+"Это перекомпилирует исходники с путём, относительным к stage-директории, и "
+"добавляет значение `PREFIX` к имени файла, записанному в байт-"
+"компилированном выходном файле с помощью `-d`. `-f` требуется для "
+"принудительной перекомпиляции, а `:S;${PREFIX}/;;` удаляет префиксы из "
+"значения `PYTHONPREFIX_SITELIBDIR`, чтобы сделать его относительным к "
+"`PREFIX`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3670
+#, no-wrap
+msgid "Using Tcl/Tk"
+msgstr "Использование Tcl/Tk"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3675
+msgid ""
+"The Ports Collection supports parallel installation of multiple Tcl/Tk "
+"versions. Ports should try to support at least the default Tcl/Tk version "
+"and higher with `USES=tcl`. It is possible to specify the desired version "
+"of `tcl` by appending `:_xx_`, for example, `USES=tcl:85`."
+msgstr ""
+"Коллекция Ports поддерживает параллельную установку нескольких версий Tcl/"
+"Tk. Порты должны стараться поддерживать как минимум версию Tcl/Tk по "
+"умолчанию и выше с помощью `USES=tcl`. Можно указать желаемую версию `tcl`, "
+"добавив `:_xx_`, например, `USES=tcl:85`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3677
+#, no-wrap
+msgid "The Most Useful Read-Only Variables for Ports That Use Tcl/Tk"
+msgstr "Самые полезные переменные только для чтения для портов, использующих Tcl/Tk"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3681
+#, no-wrap
+msgid "`TCL_VER`"
+msgstr "`TCL_VER`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3683
+#, no-wrap
+msgid "chosen major.minor version of Tcl"
+msgstr "выбранная версия Tcl major.minor"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3684
+#, no-wrap
+msgid "`TCLSH`"
+msgstr "`TCLSH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3686
+#, no-wrap
+msgid "full path of the Tcl interpreter"
+msgstr "полный путь к интерпретатору Tcl"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3687
+#, no-wrap
+msgid "`TCL_LIBDIR`"
+msgstr "`TCL_LIBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3689
+#, no-wrap
+msgid "path of the Tcl libraries"
+msgstr "путь к библиотекам Tcl"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3690
+#, no-wrap
+msgid "`TCL_INCLUDEDIR`"
+msgstr "`TCL_INCLUDEDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3692
+#, no-wrap
+msgid "path of the Tcl C header files"
+msgstr "путь к заголовочным файлам Tcl C"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3693
+#, no-wrap
+msgid "`TCL_PKG_LIB_PREFIX`"
+msgstr "`TCL_PKG_LIB_PREFIX`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3695
+#, no-wrap
+msgid "Library prefix, as per TIP595"
+msgstr "Префикс библиотеки, согласно TIP595"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3696
+#, no-wrap
+msgid "`TCL_PKG_STUB_POSTFIX`"
+msgstr "`TCL_PKG_STUB_POSTFIX`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3698
+#, no-wrap
+msgid "Stub library postfix"
+msgstr "Заглушка библиотеки postfix"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3699
+#, no-wrap
+msgid "`TK_VER`"
+msgstr "`TK_VER`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3701
+#, no-wrap
+msgid "chosen major.minor version of Tk"
+msgstr "выбранная версия Tk major.minor"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3702
+#, no-wrap
+msgid "`WISH`"
+msgstr "`WISH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3704
+#, no-wrap
+msgid "full path of the Tk interpreter"
+msgstr "полный путь к интерпретатору Tk"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3705
+#, no-wrap
+msgid "`TK_LIBDIR`"
+msgstr "`TK_LIBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3707
+#, no-wrap
+msgid "path of the Tk libraries"
+msgstr "путь к библиотекам Tk"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3708
+#, no-wrap
+msgid "`TK_INCLUDEDIR`"
+msgstr "`TK_INCLUDEDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3709
+#, no-wrap
+msgid "path of the Tk C header files"
+msgstr "путь к заголовочным файлам Tk C"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3713
+msgid ""
+"See the crossref:uses[uses-tcl,`USES=tcl`] and crossref:uses[uses-"
+"tk,`USES=tk`] of crossref:uses[uses,Using `USES` Macros] for a full "
+"description of those variables. A complete list of those variables is "
+"available in [.filename]#/usr/ports/Mk/Uses/tcl.mk#."
+msgstr ""
+"См. crossref:uses[uses-tcl,`USES=tcl`] и crossref:uses[uses-tk,`USES=tk`] в "
+"crossref:uses[uses,Использование макросов `USES`] для полного описания этих "
+"переменных. Полный список этих переменных доступен в [.filename]#/usr/ports/"
+"Mk/Uses/tcl.mk#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3715
+#, no-wrap
+msgid "Using SDL"
+msgstr "Использование SDL"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3718
+msgid ""
+"`USE_SDL` is used to autoconfigure the dependencies for ports which use an "
+"SDL based library like package:devel/sdl12[] and package:graphics/"
+"sdl_image[]."
+msgstr ""
+"`USE_SDL` используется для автоматической настройки зависимостей для портов, "
+"которые используют библиотеку на основе SDL, такие как package:devel/sdl12[] "
+"и package:graphics/sdl_image[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3720
+msgid "These SDL libraries for version 1.2 are recognized:"
+msgstr "Эти библиотеки SDL для версии 1.2 распознаются:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3722
+msgid "sdl: package:devel/sdl12[]"
+msgstr "sdl: package:devel/sdl12[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3723
+msgid "console: package:devel/sdl_console[]"
+msgstr "console: package:devel/sdl_console[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3724
+msgid "gfx: package:graphics/sdl_gfx[]"
+msgstr "gfx: package:graphics/sdl_gfx[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3725
+msgid "image: package:graphics/sdl_image[]"
+msgstr "image: package:graphics/sdl_image[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3726
+msgid "mixer: package:audio/sdl_mixer[]"
+msgstr "mixer: package:audio/sdl_mixer[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3727
+msgid "mm: package:devel/sdlmm[]"
+msgstr "mm: package:devel/sdlmm[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3728
+msgid "net: package:net/sdl_net[]"
+msgstr "net: package:net/sdl_net[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3729
+msgid "pango: package:x11-toolkits/sdl_pango[]"
+msgstr "pango: package:x11-toolkits/sdl_pango[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3730
+msgid "sound: package:audio/sdl_sound[]"
+msgstr "sound: package:audio/sdl_sound[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3731
+msgid "ttf: package:graphics/sdl_ttf[]"
+msgstr "ttf: package:graphics/sdl_ttf[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3733
+msgid "These SDL libraries for version 2.0 are recognized:"
+msgstr "Эти библиотеки SDL для версии 2.0 распознаются:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3735
+msgid "sdl: package:devel/sdl20[]"
+msgstr "sdl: package:devel/sdl20[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3736
+msgid "gfx: package:graphics/sdl2_gfx[]"
+msgstr "gfx: package:graphics/sdl2_gfx[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3737
+msgid "image: package:graphics/sdl2_image[]"
+msgstr "image: package:graphics/sdl2_image[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3738
+msgid "mixer: package:audio/sdl2_mixer[]"
+msgstr "mixer: package:audio/sdl2_mixer[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3739
+msgid "net: package:net/sdl2_net[]"
+msgstr "net: package:net/sdl2_net[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3740
+msgid "ttf: package:graphics/sdl2_ttf[]"
+msgstr "ttf: package:graphics/sdl2_ttf[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3742
+msgid ""
+"Therefore, if a port has a dependency on package:net/sdl_net[] and "
+"package:audio/sdl_mixer[], the syntax will be:"
+msgstr ""
+"Следовательно, если порт зависит от package:net/sdl_net[] и package:audio/"
+"sdl_mixer[], синтаксис будет следующим:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3746
+#, no-wrap
+msgid "USE_SDL=\tnet mixer\n"
+msgstr "USE_SDL=\tnet mixer\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3749
+msgid ""
+"The dependency package:devel/sdl12[], which is required by package:net/"
+"sdl_net[] and package:audio/sdl_mixer[], is automatically added as well."
+msgstr ""
+"Пакет зависимости package:devel/sdl12[], который требуется для package:net/"
+"sdl_net[] и package:audio/sdl_mixer[], также автоматически добавляется."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3751
+msgid "Using `USE_SDL` with entries for SDL 1.2, it will automatically:"
+msgstr "Использование `USE_SDL` с указанием SDL 1.2 автоматически:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3753
+msgid "Add a dependency on sdl12-config to `BUILD_DEPENDS`"
+msgstr "Добавить зависимость от sdl12-config в `BUILD_DEPENDS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3754
+msgid "Add the variable `SDL_CONFIG` to `CONFIGURE_ENV`"
+msgstr "Добавьте переменную `SDL_CONFIG` в `CONFIGURE_ENV`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3755
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3761
+msgid "Add the dependencies of the selected libraries to `LIB_DEPENDS`"
+msgstr "Добавьте зависимости выбранных библиотек в `LIB_DEPENDS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3757
+msgid "Using `USE_SDL` with entries for SDL 2.0, it will automatically:"
+msgstr "Используя `USE_SDL` с записями для SDL 2.0, это автоматически:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3759
+msgid "Add a dependency on sdl2-config to `BUILD_DEPENDS`"
+msgstr "Добавить зависимость от sdl2-config в `BUILD_DEPENDS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3760
+msgid "Add the variable `SDL2_CONFIG` to `CONFIGURE_ENV`"
+msgstr "Добавьте переменную `SDL2_CONFIG` в `CONFIGURE_ENV`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3764
+#, no-wrap
+msgid "Using wxWidgets"
+msgstr "Использование wxWidgets"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3767
+msgid ""
+"This section describes the status of the wxWidgets libraries in the ports "
+"tree and its integration with the ports system."
+msgstr ""
+"Этот раздел описывает состояние библиотек wxWidgets в дереве портов и их "
+"интеграцию с системой портов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3773
+msgid ""
+"There are many versions of the wxWidgets libraries which conflict between "
+"them (install files under the same name). In the ports tree this problem "
+"has been solved by installing each version under a different name using "
+"version number suffixes."
+msgstr ""
+"Существует множество версий библиотек wxWidgets, которые конфликтуют между "
+"собой (устанавливают файлы с одинаковыми именами). В дереве портов эта "
+"проблема решена путем установки каждой версии под разными именами с "
+"использованием суффиксов номеров версий."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3779
+msgid ""
+"The obvious disadvantage of this is that each application has to be modified "
+"to find the expected version. Fortunately, most of the applications call "
+"the `wx-config` script to determine the necessary compiler and linker "
+"flags. The script is named differently for every available version. "
+"Majority of applications respect an environment variable, or accept a "
+"configure argument, to specify which `wx-config` script to call. Otherwise "
+"they have to be patched."
+msgstr ""
+"Очевидный недостаток этого подхода заключается в том, что каждое приложение "
+"необходимо модифицировать для поиска нужной версии. К счастью, большинство "
+"приложений вызывают скрипт `wx-config` для определения необходимых флагов "
+"компилятора и компоновщика. Имя этого скрипта отличается для каждой "
+"доступной версии. Большинство приложений учитывают переменную окружения или "
+"принимают аргумент configure, чтобы указать, какой скрипт `wx-config` "
+"вызывать. В противном случае их необходимо патчить."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3781
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4082
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4301
+#, no-wrap
+msgid "Version Selection"
+msgstr "Выбор версии"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3784
+msgid ""
+"To make the port use a specific version of wxWidgets there are two variables "
+"available for defining (if only one is defined the other will be set to a "
+"default value):"
+msgstr ""
+"Чтобы порт использовал определённую версию wxWidgets, доступны две "
+"переменные для определения (если задана только одна, другая будет "
+"установлена в значение по умолчанию):"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3786
+#, no-wrap
+msgid "Variables to Select wxWidgets Versions"
+msgstr "Переменные для выбора версий wxWidgets"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3793
+#, no-wrap
+msgid "Default value"
+msgstr "Значение по умолчанию"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3794
+#, no-wrap
+msgid "`USE_WX`"
+msgstr "`USE_WX`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3795
+#, no-wrap
+msgid "List of versions the port can use"
+msgstr "Список версий, которые порт может использовать"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3797
+#, no-wrap
+msgid "All available versions"
+msgstr "Все доступные версии"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3798
+#, no-wrap
+msgid "`USE_WX_NOT`"
+msgstr "`USE_WX_NOT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3799
+#, no-wrap
+msgid "List of versions the port cannot use"
+msgstr "Список версий, которые порт не может использовать"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3800
+#, no-wrap
+msgid "None"
+msgstr "Ничего"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3803
+msgid ""
+"The available wxWidgets versions and the corresponding ports in the tree are:"
+msgstr "Доступные версии wxWidgets и соответствующие порты в дереве:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3805
+#, no-wrap
+msgid "Available wxWidgets Versions"
+msgstr "Доступные версии wxWidgets"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3809
+#, no-wrap
+msgid "Version"
+msgstr "Версия"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3811
+#, no-wrap
+msgid "Port"
+msgstr "Порт"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3812
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3830
+#, no-wrap
+msgid "`2.8`"
+msgstr "`2.8`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3814
+#, no-wrap
+msgid "package:x11-toolkits/wxgtk28[]"
+msgstr "package:x11-toolkits/wxgtk28[]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3815
+#, no-wrap
+msgid "`3.0`"
+msgstr "`3.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3816
+#, no-wrap
+msgid "package:x11-toolkits/wxgtk30[]"
+msgstr "package:x11-toolkits/wxgtk30[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3819
+msgid ""
+"The variables in crossref:special[wx-ver-sel-table,Variables to Select "
+"wxWidgets Versions] can be set to one or more of these combinations "
+"separated by spaces:"
+msgstr ""
+"Переменные в crossref:special[wx-ver-sel-table,Переменные для выбора версий "
+"wxWidgets] могут быть установлены в одну или несколько комбинаций, "
+"разделенных пробелами:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3821
+#, no-wrap
+msgid "wxWidgets Version Specifications"
+msgstr "Спецификации версий wxWidgets"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3827
+#, no-wrap
+msgid "Example"
+msgstr "Пример"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3828
+#, no-wrap
+msgid "Single version"
+msgstr "Единственная версия"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3831
+#, no-wrap
+msgid "Ascending range"
+msgstr "Возрастающий диапазон"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3833
+#, no-wrap
+msgid "`2.8+`"
+msgstr "`2.8+`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3834
+#, no-wrap
+msgid "Descending range"
+msgstr "Нисходящий диапазон"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3836
+#, no-wrap
+msgid "`3.0-`"
+msgstr "`3.0-`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3837
+#, no-wrap
+msgid "Full range (must be ascending)"
+msgstr "Полный диапазон (должен быть возрастающим)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3838
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3881
+#, no-wrap
+msgid "`2.8-3.0`"
+msgstr "`2.8-3.0`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3842
+msgid ""
+"There are also some variables to select the preferred versions from the "
+"available ones. They can be set to a list of versions, the first ones will "
+"have higher priority."
+msgstr ""
+"Существуют также переменные для выбора предпочтительных версий из доступных. "
+"Их можно установить в виде списка версий, где первые будут иметь более "
+"высокий приоритет."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3843
+#, no-wrap
+msgid "Variables to Select Preferred wxWidgets Versions"
+msgstr "Переменные для выбора предпочтительных версий wxWidgets"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3849
+#, no-wrap
+msgid "Designed for"
+msgstr "Предназначен для"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3850
+#, no-wrap
+msgid "`WANT_WX_VER`"
+msgstr "`WANT_WX_VER`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3852
+#, no-wrap
+msgid "the port"
+msgstr "порт"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3853
+#, no-wrap
+msgid "`WITH_WX_VER`"
+msgstr "`WITH_WX_VER`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3854
+#, no-wrap
+msgid "the user"
+msgstr "пользователь"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3861
+msgid ""
+"There are other applications that, while not being wxWidgets libraries, are "
+"related to them. These applications can be specified in `WX_COMPS`. These "
+"components are available:"
+msgstr ""
+"Существуют другие приложения, которые, не являясь библиотеками wxWidgets, "
+"связаны с ними. Эти приложения можно указать в `WX_COMPS`. Доступны "
+"следующие компоненты:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3863
+#, no-wrap
+msgid "Available wxWidgets Components"
+msgstr "Доступные компоненты wxWidgets"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3870
+#, no-wrap
+msgid "Version restriction"
+msgstr "Ограничение версии"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3871
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3914
+#, no-wrap
+msgid "`wx`"
+msgstr "`wx`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3872
+#, no-wrap
+msgid "main library"
+msgstr "основная библиотека"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3874
+#, no-wrap
+msgid "none"
+msgstr "none"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3875
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3917
+#, no-wrap
+msgid "`contrib`"
+msgstr "`contrib`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3876
+#, no-wrap
+msgid "contributed libraries"
+msgstr "сторонние библиотеки"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3878
+#, no-wrap
+msgid "`none`"
+msgstr "`none`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3879
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3920
+#, no-wrap
+msgid "`python`"
+msgstr "`python`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3880
+#, no-wrap
+msgid "wxPython (Python bindings)"
+msgstr "wxPython (интерфейс Python)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3886
+msgid ""
+"The dependency type can be selected for each component by adding a suffix "
+"separated by a semicolon. If not present then a default type will be used "
+"(see crossref:special[wx-def-dep-types,Default wxWidgets Dependency "
+"Types]). These types are available:"
+msgstr ""
+"Тип зависимости может быть выбран для каждого компонента путем добавления "
+"суффикса, разделенного точкой с запятой. Если он отсутствует, будет "
+"использоваться тип по умолчанию (см. crossref:special[wx-def-dep-types,Типы "
+"зависимостей wxWidgets по умолчанию]). Доступны следующие типы:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3888
+#, no-wrap
+msgid "Available wxWidgets Dependency Types"
+msgstr "Доступные типы зависимостей wxWidgets"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3895
+#, no-wrap
+msgid "`build`"
+msgstr "`build`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3897
+#, no-wrap
+msgid "Component is required for building, equivalent to `BUILD_DEPENDS`"
+msgstr "Компонент необходим для сборки, эквивалентен `BUILD_DEPENDS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3898
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3922
+#, no-wrap
+msgid "`run`"
+msgstr "`run`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3900
+#, no-wrap
+msgid "Component is required for running, equivalent to `RUN_DEPENDS`"
+msgstr "Компонент необходим для запуска, эквивалентно `RUN_DEPENDS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3901
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3916
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3919
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3925
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3927
+#, no-wrap
+msgid "`lib`"
+msgstr "`lib`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3902
+#, no-wrap
+msgid "Component is required for building and running, equivalent to `LIB_DEPENDS`"
+msgstr "Компонент необходим для сборки и запуска, эквивалентен `LIB_DEPENDS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3905
+msgid "The default values for the components are detailed in this table:"
+msgstr "Значения по умолчанию для компонентов подробно описаны в этой таблице:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3907
+#, no-wrap
+msgid "Default wxWidgets Dependency Types"
+msgstr "Типы зависимостей wxWidgets по умолчанию"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3913
+#, no-wrap
+msgid "Dependency type"
+msgstr "Тип зависимости"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3923
+#, no-wrap
+msgid "`mozilla`"
+msgstr "`mozilla`"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3930
+#, no-wrap
+msgid "Selecting wxWidgets Components"
+msgstr "Выбор компонентов wxWidgets"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3934
+msgid ""
+"This fragment corresponds to a port which uses wxWidgets version `2.4` and "
+"its contributed libraries."
+msgstr ""
+"Этот фрагмент соответствует порту, который использует wxWidgets версии `2.4` "
+"и дополнительные библиотеки."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3939
+#, no-wrap
+msgid ""
+"USE_WX=\t\t2.8\n"
+"WX_COMPS=\twx contrib\n"
+msgstr ""
+"USE_WX=\t\t2.8\n"
+"WX_COMPS=\twx contrib\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3944
+#, no-wrap
+msgid "Detecting Installed Versions"
+msgstr "Обнаружение установленных версий"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3949
+msgid ""
+"To detect an installed version, define `WANT_WX`. If it is not set to a "
+"specific version then the components will have a version suffix. `HAVE_WX` "
+"will be filled after detection."
+msgstr ""
+"Для определения установленной версии определите `WANT_WX`. Если значение не "
+"задано для конкретной версии, компоненты будут иметь суффикс версии. "
+"`HAVE_WX` будет заполнен после обнаружения."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3951
+#, no-wrap
+msgid "Detecting Installed wxWidgets Versions and Components"
+msgstr "Обнаружение установленных версий и компонентов wxWidgets"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3955
+msgid ""
+"This fragment can be used in a port that uses wxWidgets if it is installed, "
+"or an option is selected."
+msgstr ""
+"Этот фрагмент может использоваться в порте, который использует wxWidgets, "
+"если они установлены или выбран соответствующий параметр."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3959
+#, no-wrap
+msgid "WANT_WX=\tyes\n"
+msgstr "WANT_WX=\tyes\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3961
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3977
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4030
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4620
+#, no-wrap
+msgid ".include <bsd.port.pre.mk>\n"
+msgstr ".include <bsd.port.pre.mk>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3966
+#, no-wrap
+msgid ""
+".if defined(WITH_WX) || !empty(PORT_OPTIONS:MWX) || !empty(HAVE_WX:Mwx-2.8)\n"
+"USE_WX=\t\t\t2.8\n"
+"CONFIGURE_ARGS+=\t--enable-wx\n"
+".endif\n"
+msgstr ""
+".if defined(WITH_WX) || !empty(PORT_OPTIONS:MWX) || !empty(HAVE_WX:Mwx-2.8)\n"
+"USE_WX=\t\t\t2.8\n"
+"CONFIGURE_ARGS+=\t--enable-wx\n"
+".endif\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3969
+msgid ""
+"This fragment can be used in a port that enables wxPython support if it is "
+"installed or if an option is selected, in addition to wxWidgets, both "
+"version `2.8`."
+msgstr ""
+"Этот фрагмент может использоваться в порте, который включает поддержку "
+"wxPython, если она установлена или выбрана соответствующая опция, в "
+"дополнение к wxWidgets, обе версии `2.8`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3975
+#, no-wrap
+msgid ""
+"USE_WX=\t\t2.8\n"
+"WX_COMPS=\twx\n"
+"WANT_WX=\t2.8\n"
+msgstr ""
+"USE_WX=\t\t2.8\n"
+"WX_COMPS=\twx\n"
+"WANT_WX=\t2.8\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3982
+#, no-wrap
+msgid ""
+".if defined(WITH_WXPYTHON) || !empty(PORT_OPTIONS:MWXPYTHON) || !empty(HAVE_WX:Mpython)\n"
+"WX_COMPS+=\t\tpython\n"
+"CONFIGURE_ARGS+=\t--enable-wxpython\n"
+".endif\n"
+msgstr ""
+".if defined(WITH_WXPYTHON) || !empty(PORT_OPTIONS:MWXPYTHON) || !empty(HAVE_WX:Mpython)\n"
+"WX_COMPS+=\t\tpython\n"
+"CONFIGURE_ARGS+=\t--enable-wxpython\n"
+".endif\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3987
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4157
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4392
+#, no-wrap
+msgid "Defined Variables"
+msgstr "Переменные, определенные в фреймворке"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3990
+msgid ""
+"These variables are available in the port (after defining one from "
+"crossref:special[wx-ver-sel-table,Variables to Select wxWidgets Versions])."
+msgstr ""
+"Эти переменные доступны в порте (после определения одной из "
+"crossref:special[wx-ver-sel-table,переменных для выбора версий wxWidgets])."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3992
+#, no-wrap
+msgid "Variables Defined for Ports That Use wxWidgets"
+msgstr "Переменные, определенные для портов, использующих wxWidgets"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3999
+#, no-wrap
+msgid "`WX_CONFIG`"
+msgstr "`WX_CONFIG`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4001
+#, no-wrap
+msgid "The path to the wxWidgets`wx-config` script (with different name)"
+msgstr "Путь к скрипту `wx-config` wxWidgets (с другим именем)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4002
+#, no-wrap
+msgid "`WXRC_CMD`"
+msgstr "`WXRC_CMD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4004
+#, no-wrap
+msgid "The path to the wxWidgets`wxrc` program (with different name)"
+msgstr "Путь к программе `wxrc` wxWidgets (с другим именем)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4005
+#, no-wrap
+msgid "`WX_VERSION`"
+msgstr "`WX_VERSION`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4006
+#, no-wrap
+msgid "The wxWidgets version that is going to be used (for example, `2.6`)"
+msgstr "Версия wxWidgets, которая будет использоваться (например, `2.6`)"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4009
+#, no-wrap
+msgid "Processing in [.filename]#bsd.port.pre.mk#"
+msgstr "Обработка в [.filename]#bsd.port.pre.mk#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4012
+msgid ""
+"Define `WX_PREMK` to be able to use the variables right after including "
+"[.filename]#bsd.port.pre.mk#."
+msgstr ""
+"Определите `WX_PREMK`, чтобы иметь возможность использовать переменные сразу "
+"после включения [.filename]#bsd.port.pre.mk#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4016
+msgid ""
+"When defining `WX_PREMK`, then the version, dependencies, components and "
+"defined variables will not change if modifying the wxWidgets port variables "
+"_after_ including [.filename]#bsd.port.pre.mk#."
+msgstr ""
+"При определении `WX_PREMK` версия, зависимости, компоненты и определенные "
+"переменные не изменятся при модификации переменных порта wxWidgets _после_ "
+"включения [.filename]#bsd.port.pre.mk#."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4019
+#, no-wrap
+msgid "Using wxWidgets Variables in Commands"
+msgstr "Использование переменных wxWidgets в командах"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4023
+msgid ""
+"This fragment illustrates the use of `WX_PREMK` by running the `wx-config` "
+"script to obtain the full version string, assign it to a variable and pass "
+"it to the program."
+msgstr ""
+"Этот фрагмент иллюстрирует использование `WX_PREMK` путем запуска скрипта "
+"`wx-config` для получения полной строки версии, присвоения её переменной и "
+"передачи в программу."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4028
+#, no-wrap
+msgid ""
+"USE_WX=\t\t2.8\n"
+"WX_PREMK=\tyes\n"
+msgstr ""
+"USE_WX=\t\t2.8\n"
+"WX_PREMK=\tyes\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4033
+#, no-wrap
+msgid ""
+".if exists(${WX_CONFIG})\n"
+"VER_STR!=\t${WX_CONFIG} --release\n"
+msgstr ""
+".if exists(${WX_CONFIG})\n"
+"VER_STR!=\t${WX_CONFIG} --release\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4036
+#, no-wrap
+msgid ""
+"PLIST_SUB+=\tVERSION=\"${VER_STR}\"\n"
+".endif\n"
+msgstr ""
+"PLIST_SUB+=\tVERSION=\"${VER_STR}\"\n"
+".endif\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4043
+msgid ""
+"The wxWidgets variables can be safely used in commands when they are inside "
+"targets without the need of `WX_PREMK`."
+msgstr ""
+"Переменные wxWidgets можно безопасно использовать в командах внутри целей "
+"без необходимости в `WX_PREMK`."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4046
+#, no-wrap
+msgid "Additional `configure` Arguments"
+msgstr "Дополнительные параметры `configure`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4049
+msgid ""
+"Some GNU `configure` scripts cannot find wxWidgets with just the `WX_CONFIG` "
+"environment variable set, requiring additional arguments. `WX_CONF_ARGS` can "
+"be used for provide them."
+msgstr ""
+"Некоторые скрипты GNU `configure` не могут найти wxWidgets, если задана "
+"только переменная окружения `WX_CONFIG`, и требуют дополнительные параметры. "
+"`WX_CONF_ARGS` можно использовать для их указания."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4051
+#, no-wrap
+msgid "Legal Values for `WX_CONF_ARGS`"
+msgstr "Допустимые значения для `WX_CONF_ARGS`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4055
+#, no-wrap
+msgid "Possible value"
+msgstr "Возможное значение"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4057
+#, no-wrap
+msgid "Resulting argument"
+msgstr "Получаемый параметр"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4058
+#, no-wrap
+msgid "`absolute`"
+msgstr "`absolute`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4060
+#, no-wrap
+msgid "`--with-wx-config=${WX_CONFIG}`"
+msgstr "`--with-wx-config=${WX_CONFIG}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4061
+#, no-wrap
+msgid "`relative`"
+msgstr "`relative`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4062
+#, no-wrap
+msgid "`--with-wx=${LOCALBASE} --with-wx-config=${WX_CONFIG:T}`"
+msgstr "`--with-wx=${LOCALBASE} --with-wx-config=${WX_CONFIG:T}`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4065
+#, no-wrap
+msgid "Using Lua"
+msgstr "Использование Lua"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4068
+msgid ""
+"This section describes the status of the Lua libraries in the ports tree and "
+"its integration with the ports system."
+msgstr ""
+"Этот раздел описывает состояние библиотек Lua в дереве портов и их "
+"интеграцию с системой портов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4074
+msgid ""
+"There are many versions of the Lua libraries and corresponding interpreters, "
+"which conflict between them (install files under the same name). In the "
+"ports tree this problem has been solved by installing each version under a "
+"different name using version number suffixes."
+msgstr ""
+"Существует множество версий библиотек Lua и соответствующих интерпретаторов, "
+"которые конфликтуют между собой (устанавливают файлы с одинаковыми именами). "
+"В дереве портов эта проблема решена установкой каждой версии под разными "
+"именами с использованием суффиксов номеров версий."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4077
+msgid ""
+"The obvious disadvantage of this is that each application has to be modified "
+"to find the expected version. But it can be solved by adding some "
+"additional flags to the compiler and linker."
+msgstr ""
+"Очевидный недостаток этого заключается в том, что каждое приложение "
+"необходимо модифицировать для поиска ожидаемой версии. Однако это можно "
+"решить, добавив дополнительные флаги компилятору и компоновщику."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4080
+msgid ""
+"Applications that use Lua should normally build for just one version. "
+"However, loadable modules for Lua are built in a separate flavor for each "
+"Lua version that they support, and dependencies on such modules should "
+"specify the flavor using the `@${LUA_FLAVOR}` suffix on the port origin."
+msgstr ""
+"Приложения, использующие Lua, обычно должны собираться только для одной "
+"версии. Однако загружаемые модули для Lua собираются в отдельных флейворах "
+"для каждой поддерживаемой версии Lua, и зависимости от таких модулей должны "
+"указывать флейвор с использованием суффикса `@${LUA_FLAVOR}` в расположении "
+"(origin) порта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4085
+msgid "A port using Lua should have a line of this form:"
+msgstr "Порт, использующий Lua, должен содержать строку следующего вида:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4089
+#, no-wrap
+msgid "USES=\tlua\n"
+msgstr "USES=\tlua\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4094
+msgid ""
+"If a specific version of Lua, or range of versions, is needed, it can be "
+"specified as a parameter in the form `XY` (which may be used multiple "
+"times), `XY+`, `-XY`, or `XY-ZA`. The default version of Lua as set via "
+"`DEFAULT_VERSIONS` will be used if it falls in the requested range, "
+"otherwise the closest requested version to the default will be used. For "
+"example:"
+msgstr ""
+"Если требуется определённая версия Lua или диапазон версий, его можно "
+"указать в виде параметра `XY` (который можно использовать несколько раз), "
+"`XY+`, `-XY` или `XY-ZA`. Версия Lua, установленная через "
+"`DEFAULT_VERSIONS`, будет использована, если она попадает в запрошенный "
+"диапазон, в противном случае будет использована ближайшая к умолчанию "
+"запрошенная версия. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4098
+#, no-wrap
+msgid "USES=\tlua:52-53\n"
+msgstr "USES=\tlua:52-53\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4101
+msgid ""
+"Note that no attempt is made to adjust the version selection based on the "
+"presence of any already-installed Lua version."
+msgstr ""
+"Обратите внимание, что не предпринимается попытка изменить выбор версии на "
+"основе наличия любой уже установленной версии Lua."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4106
+msgid ""
+"The `XY+` form of version specification should not be used without careful "
+"consideration; the Lua API changes to some extent in every version, and "
+"configuration tools like CMake or Autoconf will often fail to work on future "
+"versions of Lua until updated to do so."
+msgstr ""
+"Форма указания версии `XY+` не должна использоваться без тщательного "
+"обдумывания; Lua API в некоторой степени меняется с каждой версией, и "
+"инструменты конфигурации, такие как CMake или Autoconf, скорее всего не "
+"будут работать с будущими версиями Lua, пока не будут обновлены для этого."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4109
+#, no-wrap
+msgid "Configuration and Compiler flags"
+msgstr "Конфигурация и флаги компилятора"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4114
+msgid ""
+"Software that uses Lua may have been written to auto-detect the Lua version "
+"in use. In general ports should override this assumption, and force the use "
+"of the specific Lua version selected as described above. Depending on the "
+"software being ported, this might require any or all of:"
+msgstr ""
+"Программное обеспечение, использующее Lua, может быть написано с "
+"автоматическим определением версии Lua в использовании. В общем случае порты "
+"должны переопределять это предположение и принудительно использовать "
+"конкретную выбранную версию Lua, как описано выше. В зависимости от "
+"портируемого программного обеспечения, это может потребовать любого или всех "
+"из следующих действий:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4116
+msgid ""
+"Using `LUA_VER` as part of a parameter to the software's configuration "
+"script via `CONFIGURE_ARGS` or `CONFIGURE_ENV` (or equivalent for other "
+"build systems);"
+msgstr ""
+"Использование `LUA_VER` в качестве части параметра для скрипта конфигурации "
+"программного обеспечения через `CONFIGURE_ARGS` или `CONFIGURE_ENV` (или "
+"эквивалентные для других систем сборки);"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4117
+msgid ""
+"Adding `-I${LUA_INCDIR}`, `-L${LUA_LIBDIR}`, and `-llua-${LUA_VER}` to "
+"`CFLAGS`, `LDFLAGS`, `LIBS` respectively as appropriate;"
+msgstr ""
+"Добавление `-I${LUA_INCDIR}`, `-L${LUA_LIBDIR}` и `-llua-${LUA_VER}` в "
+"`CFLAGS`, `LDFLAGS` и `LIBS` соответственно, где это необходимо;"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4118
+msgid ""
+"Patch the software's configuration or build files to select the correct "
+"version."
+msgstr ""
+"Исправьте конфигурационные или файлы сборки программного обеспечения, чтобы "
+"выбрать правильную версию."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4121
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4365
+#, no-wrap
+msgid "Version Flavors"
+msgstr "Флейворы версии"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4125
+msgid ""
+"A port which installs a Lua module (rather than an application that simply "
+"makes use of Lua) should build a separate flavor for each supported Lua "
+"version. This is done by adding the `module` parameter:"
+msgstr ""
+"Порт, который устанавливает модуль Lua (а не приложение, просто использующее "
+"Lua), должен собирать отдельный флейвор для каждой поддерживаемой версии "
+"Lua. Это делается путем добавления параметра `module`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4129
+#, no-wrap
+msgid "USES=\tlua:module\n"
+msgstr "USES=\tlua:module\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4132
+msgid ""
+"A version number or range of versions can be specified as well; use a comma "
+"to separate parameters."
+msgstr ""
+"Так же может быть указае номер версии или диапазон версий. Используйте "
+"запятую для разделения параметров."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4134
+msgid ""
+"Since each flavor must have a different package name, the variable "
+"`LUA_PKGNAMEPREFIX` is provided which will be set to an appropriate value; "
+"the intended usage is:"
+msgstr ""
+"Поскольку каждый флейвор должен иметь уникальное имя пакета, предоставляется "
+"переменная `LUA_PKGNAMEPREFIX`, которая будет установлена в соответствующее "
+"значение; предполагаемое использование:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4138
+#, no-wrap
+msgid "PKGNAMEPREFIX=\t${LUA_PKGNAMEPREFIX}\n"
+msgstr "PKGNAMEPREFIX=\t${LUA_PKGNAMEPREFIX}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4142
+msgid ""
+"Module ports should normally install files only to `LUA_MODLIBDIR`, "
+"`LUA_MODSHAREDIR`, `LUA_DOCSDIR`, and `LUA_EXAMPLESDIR`, all of which are "
+"set up to refer to version-specific subdirectories. Installing any other "
+"files must be done with care to avoid conflicts between versions."
+msgstr ""
+"Модульные порты обычно должны устанавливать файлы только в `LUA_MODLIBDIR`, "
+"`LUA_MODSHAREDIR`, `LUA_DOCSDIR` и `LUA_EXAMPLESDIR`, все из которых "
+"настроены на ссылки в версионно-зависимые подкаталоги. Установка любых "
+"других файлов должна выполняться с осторожностью, чтобы избежать конфликтов "
+"между версиями."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4144
+msgid ""
+"A port (other than a Lua module) which wishes to build a separate package "
+"for each Lua version should use the `flavors` parameter:"
+msgstr ""
+"Порт (кроме модуля Lua), который хочет собрать отдельный пакет для каждой "
+"версии Lua, должен использовать параметр `flavors`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4148
+#, no-wrap
+msgid "USES=\tlua:flavors\n"
+msgstr "USES=\tlua:flavors\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4152
+msgid ""
+"This operates the same way as the `module` parameter described above, but "
+"without the assumption that the package should be documented as a Lua module "
+"(so `LUA_DOCSDIR` and `LUA_EXAMPLESDIR` are not defined by default). "
+"However, the port may choose to define `LUA_DOCSUBDIR` as a suitable "
+"subdirectory name (usually the port's `PORTNAME` as long as this does not "
+"conflict with the `PORTNAME` of any module), in which case the framework "
+"will define both `LUA_DOCSDIR` and `LUA_EXAMPLESDIR`."
+msgstr ""
+"Это работает так же, как параметр `module`, описанный выше, но без "
+"предположения, что пакет должен быть задокументирован как модуль Lua "
+"(поэтому `LUA_DOCSDIR` и `LUA_EXAMPLESDIR` по умолчанию не определены). "
+"Однако порт может определить `LUA_DOCSUBDIR` как подходящее имя подкаталога "
+"(обычно `PORTNAME` порта, если это не конфликтует с `PORTNAME` любого "
+"модуля), и в этом случае фреймворк определит как `LUA_DOCSDIR`, так и "
+"`LUA_EXAMPLESDIR`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4155
+msgid ""
+"As with module ports, a flavored port should avoid installing files that "
+"would conflict between versions. Typically this is done by adding "
+"`LUA_VER_STR` as a suffix to program names (e.g. using crossref:uses[uses-"
+"uniquefiles,`uniquefiles`]), and otherwise using either `LUA_VER` or "
+"`LUA_VER_STR` as part of any other files or subdirectories used outside of "
+"`LUA_MODLIBDIR` and `LUA_MODSHAREDIR`."
+msgstr ""
+"Как и в случае с модульными портами, порт с флейворами должен избегать "
+"установки файлов, которые могут конфликтовать между версиями. Обычно это "
+"достигается добавлением `LUA_VER_STR` в качестве суффикса к именам программ "
+"(например, с использованием crossref:uses[uses-uniquefiles,`uniquefiles`]), "
+"а также использованием `LUA_VER` или `LUA_VER_STR` в составе других файлов "
+"или поддиректорий, используемых вне `LUA_MODLIBDIR` и `LUA_MODSHAREDIR`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4160
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4395
+msgid "These variables are available in the port."
+msgstr "В порте доступны эти переменные."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4162
+#, no-wrap
+msgid "Variables Defined for Ports That Use Lua"
+msgstr "Переменные, определенные для портов, использующих Lua"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4169
+#, no-wrap
+msgid "`LUA_VER`"
+msgstr "`LUA_VER`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4171
+#, no-wrap
+msgid "The Lua version that is going to be used (for example, `5.4`)"
+msgstr "Версия Lua, которая будет использоваться (например, `5.4`)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4172
+#, no-wrap
+msgid "`LUA_VER_STR`"
+msgstr "`LUA_VER_STR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4174
+#, no-wrap
+msgid "The Lua version without the dots (for example, `54`)"
+msgstr "Версия Lua без точек (например, `54`)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4175
+#, no-wrap
+msgid "`LUA_FLAVOR`"
+msgstr "`LUA_FLAVOR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4177
+#, no-wrap
+msgid "The flavor name corresponding to the selected Lua version, to be used for specifying dependencies"
+msgstr "Имя флейвора, соответствующее выбранной версии Lua, используемое для указания зависимостей"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4178
+#, no-wrap
+msgid "`LUA_BASE`"
+msgstr "`LUA_BASE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4180
+#, no-wrap
+msgid "The prefix that should be used to locate Lua (and components) that are already installed"
+msgstr "Префикс, который должен использоваться для поиска Lua (и компонентов), уже установленных"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4181
+#, no-wrap
+msgid "`LUA_PREFIX`"
+msgstr "`LUA_PREFIX`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4183
+#, no-wrap
+msgid "The prefix where Lua (and components) are to be installed by this port"
+msgstr "Префикс, куда этим портом будут установлены Lua (и компоненты)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4184
+#, no-wrap
+msgid "`LUA_INCDIR`"
+msgstr "`LUA_INCDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4186
+#, no-wrap
+msgid "The directory where Lua header files are installed"
+msgstr "Каталог, в котором установлены заголовочные файлы Lua"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4187
+#, no-wrap
+msgid "`LUA_LIBDIR`"
+msgstr "`LUA_LIBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4189
+#, no-wrap
+msgid "The directory where Lua libraries are installed"
+msgstr "Каталог, в котором установлены библиотеки Lua"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4190
+#, no-wrap
+msgid "`LUA_REFMODLIBDIR`"
+msgstr "`LUA_REFMODLIBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4192
+#, no-wrap
+msgid "The directory where Lua module libraries ([.filename]#.so#) that are already installed are to be found"
+msgstr "Каталог, в котором находятся уже установленные библиотеки модулей Lua ([.filename]#.so#)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4193
+#, no-wrap
+msgid "`LUA_REFMODSHAREDIR`"
+msgstr "`LUA_REFMODSHAREDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4195
+#, no-wrap
+msgid "The directory where Lua modules ([.filename]#.lua#) that are already installed are to be found"
+msgstr "Каталог, в котором находятся установленные модули Lua ([.filename]#.lua#)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4196
+#, no-wrap
+msgid "`LUA_MODLIBDIR`"
+msgstr "`LUA_MODLIBDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4198
+#, no-wrap
+msgid "The directory where Lua module libraries ([.filename]#.so#) are to be installed by this port"
+msgstr "Каталог, в котором библиотеки модулей Lua ([.filename]#.so#) должны быть установлены данным портом"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4199
+#, no-wrap
+msgid "`LUA_MODSHAREDIR`"
+msgstr "`LUA_MODSHAREDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4201
+#, no-wrap
+msgid "The directory where Lua modules ([.filename]#.lua#) are to be installed by this port"
+msgstr "Каталог, в котором должны быть установлены модули Lua ([.filename]#.lua#) данным портом"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4202
+#, no-wrap
+msgid "`LUA_PKGNAMEPREFIX`"
+msgstr "`LUA_PKGNAMEPREFIX`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4204
+#, no-wrap
+msgid "The package name prefix used by Lua modules"
+msgstr "Префикс имени пакета, используемый модулями Lua"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4205
+#, no-wrap
+msgid "`LUA_CMD`"
+msgstr "`LUA_CMD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4207
+#, no-wrap
+msgid "The name of the Lua interpreter (e.g. `lua54`)"
+msgstr "Название интерпретатора Lua (например, `lua54`)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4208
+#, no-wrap
+msgid "`LUAC_CMD`"
+msgstr "`LUAC_CMD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4209
+#, no-wrap
+msgid "The name of the Lua compiler (e.g. `luac54`)"
+msgstr "Название компилятора Lua (например, `luac54`)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4212
+msgid ""
+"These additional variables are available for ports that specified the "
+"`module` parameter:"
+msgstr ""
+"Эти дополнительные переменные доступны для портов, которые указали параметр "
+"`module`:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4214
+#, no-wrap
+msgid "Variables Defined for Lua Module Ports"
+msgstr "Переменные, определенные для модулей Lua в портах"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4221
+#, no-wrap
+msgid "`LUA_DOCSDIR`"
+msgstr "`LUA_DOCSDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4223
+#, no-wrap
+msgid "the directory to which the module's documentation should be installed."
+msgstr "каталог, в который должна быть установлена документация модуля."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4224
+#, no-wrap
+msgid "`LUA_EXAMPLESDIR`"
+msgstr "`LUA_EXAMPLESDIR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4225
+#, no-wrap
+msgid "the directory to which the module's example files should be installed."
+msgstr "каталог, в который должны быть установлены примеры файлов модуля."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4231
+#, no-wrap
+msgid "Makefile for an application using Lua"
+msgstr "`Makefile` для приложения, использующего Lua"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4236
+msgid ""
+"This example shows how to reference a Lua module required at run time. "
+"Notice that the reference must specify a flavor."
+msgstr ""
+"Этот пример показывает, как сослаться на модуль Lua, требуемый во время "
+"выполнения. Обратите внимание, что ссылка должна указывать флейвор."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4242
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4503
+#, no-wrap
+msgid ""
+"PORTNAME=\tsample\n"
+"DISTVERSION=\t1.2.3\n"
+"CATEGORIES=\twhatever\n"
+msgstr ""
+"PORTNAME=\tsample\n"
+"DISTVERSION=\t1.2.3\n"
+"CATEGORIES=\twhatever\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4246
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4270
+#, no-wrap
+msgid ""
+"MAINTAINER=\tfred.bloggs@example.com\n"
+"COMMENT=\tSample\n"
+"WWW=\t\thttps://example.com/lua_sample/sample/\n"
+msgstr ""
+"MAINTAINER=\tfred.bloggs@example.com\n"
+"COMMENT=\tSample\n"
+"WWW=\t\thttps://example.com/lua_sample/sample/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4248
+#, no-wrap
+msgid "RUN_DEPENDS=\t${LUA_REFMODLIBDIR}/lpeg.so:devel/lua-lpeg@${LUA_FLAVOR}\n"
+msgstr "RUN_DEPENDS=\t${LUA_REFMODLIBDIR}/lpeg.so:devel/lua-lpeg@${LUA_FLAVOR}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4250
+#, no-wrap
+msgid "USES=\t\tlua\n"
+msgstr "USES=\t\tlua\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4257
+#, no-wrap
+msgid "Makefile for a simple Lua module"
+msgstr "`Makefile` для простого модуля Lua"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4266
+#, no-wrap
+msgid ""
+"PORTNAME=\tsample\n"
+"DISTVERSION=\t1.2.3\n"
+"CATEGORIES=\twhatever\n"
+"PKGNAMEPREFIX=\t${LUA_PKGNAMEPREFIX}\n"
+msgstr ""
+"PORTNAME=\tsample\n"
+"DISTVERSION=\t1.2.3\n"
+"CATEGORIES=\twhatever\n"
+"PKGNAMEPREFIX=\t${LUA_PKGNAMEPREFIX}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4272
+#, no-wrap
+msgid "USES=\t\tlua:module\n"
+msgstr "USES=\t\tlua:module\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4274
+#, no-wrap
+msgid "DOCSDIR=\t${LUA_DOCSDIR}\n"
+msgstr "DOCSDIR=\t${LUA_DOCSDIR}\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4281
+#, no-wrap
+msgid "Using Guile"
+msgstr "Использование Guile"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4284
+msgid ""
+"This section describes the status of Guile in the ports tree and its "
+"integration with the ports system."
+msgstr ""
+"Этот раздел описывает состояние Guile в дереве портов и его интеграцию с "
+"системой портов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4293
+msgid ""
+"There are multiple versions of the Guile libraries and corresponding "
+"interpreters, which conflict between them (install files under the same "
+"name). In the ports tree this problem has been solved by installing each "
+"version under a different name using version number suffixes. In most "
+"cases, applications should detect the correct version from the configuration "
+"variables provided and use `pkg-config` to determine the name and associated "
+"paths. However, some applications (especially those using their own "
+"configuration rules for `cmake` or `meson`) will always try to use the "
+"latest available version. In this case, either patch the port or declare a "
+"build conflict (see the `conflicts` option below) to ensure that the correct "
+"dependency is generated when building outside of poudriere."
+msgstr ""
+"Существует несколько версий библиотек Guile и соответствующих "
+"интерпретаторов, которые конфликтуют между собой (устанавливают файлы с "
+"одинаковыми именами). В дереве портов эта проблема решена путем установки "
+"каждой версии под разными именами с использованием суффиксов номеров версий. "
+"В большинстве случаев приложения должны определять правильную версию из "
+"предоставленных конфигурационных переменных и использовать `pkg-config` для "
+"определения имени и связанных путей. Однако некоторые приложения (особенно "
+"те, которые используют собственные правила конфигурации для `cmake` или "
+"`meson`) всегда будут пытаться использовать последнюю доступную версию. В "
+"этом случае либо исправьте порт, либо объявите конфликт сборки (см. опцию "
+"`conflicts` ниже), чтобы гарантировать создание правильной зависимости при "
+"сборке вне poudriere."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4299
+msgid ""
+"Applications that use Guile should normally build for just one version, "
+"preferably the one specified in `DEFAULT_VERSIONS`, or failing that the "
+"latest version that they support. However, Guile or Scheme libraries, or "
+"extension modules for Guile are built in a separate flavor for each Guile "
+"version that they support, and dependencies on such ports should specify the "
+"flavor using the `@${GUILE_FLAVOR}` suffix on the port origin."
+msgstr ""
+"Приложения, использующие Guile, обычно должны собираться только для одной "
+"версии, предпочтительно указанной в `DEFAULT_VERSIONS`, или, если это "
+"невозможно, для последней поддерживаемой версии. Однако библиотеки Guile или "
+"Scheme, а также модули расширения для Guile собираются в отдельных флейворах "
+"для каждой поддерживаемой версии Guile. Зависимости от таких портов должны "
+"указывать флейвор с использованием суффикса `@${GUILE_FLAVOR}` в "
+"расположении (origin) порта."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4304
+msgid ""
+"A port using Guile should define `USES=guile:__arg,arg...__` with "
+"appropriate arguments as follows:"
+msgstr ""
+"Порт, использующий Guile, должен определять `USES=guile:__arg,arg...__` с "
+"соответствующими параметрами следующим образом:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4306
+#, no-wrap
+msgid "Arguments Defined for Ports That Use Guile"
+msgstr "Параметры, определенные для портов, использующих Guile"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4313
+#, no-wrap
+msgid "_X.Y_"
+msgstr "_X.Y_"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4317
+#, no-wrap
+msgid ""
+"Declare compatibility with Guile version `X.Y`.\n"
+"Currently available versions are `1.8` (obsolete), `2.2` and `3.0`.\n"
+"Multiple versions may be specified."
+msgstr ""
+"Объявить совместимость с версией Guile `X.Y`.\n"
+"Доступные версии: `1.8` (устарела), `2.2` и `3.0`.\n"
+"Можно указать несколько версий."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4318
+#, no-wrap
+msgid "flavors"
+msgstr "flavors"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4322
+#, no-wrap
+msgid ""
+"Create a flavor for every Guile version specified.\n"
+"The version specified by `DEFAULT_VERSIONS` will become the default flavor.\n"
+"Flavor names are of the form `guileXY`."
+msgstr ""
+"Создать флейвор для каждой указанной версии Guile.\n"
+"Версия, указанная в `DEFAULT_VERSIONS`, станет флейвором по умолчанию.\n"
+"Названия флейворов имеют вид `guileXY`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4323
+#, no-wrap
+msgid "build"
+msgstr "build"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4326
+#, no-wrap
+msgid ""
+"Add the Guile interpreter as a build dependency only, rather than a library dependency.\n"
+"`build` and `run` may both be specified."
+msgstr ""
+"Добавить интерпретатор Guile только как зависимость для сборки, а не как зависимость библиотеки.\n"
+"`build` и `run` могут быть указаны оба."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4327
+#, no-wrap
+msgid "run"
+msgstr "run"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4330
+#, no-wrap
+msgid ""
+"Add the Guile interpreter as a runtime dependency only, rather than a library dependency.\n"
+"`build` and `run` may both be specified."
+msgstr ""
+"Добавить интерпретатор Guile только как зависимость во время выполнения, а не как зависимость от библиотеки.\n"
+"`build` и `run` могут быть указаны оба."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4331
+#, no-wrap
+msgid "alias"
+msgstr "alias"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4333
+#, no-wrap
+msgid "Add `BINARY_ALIAS` values for the interpreter and tools."
+msgstr "Добавить значения `BINARY_ALIAS` для интерпретатора и инструментов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4334
+#, no-wrap
+msgid "conflicts"
+msgstr "conflicts"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4336
+#, no-wrap
+msgid ""
+"Declare `CONFLICTS_BUILD` for Guile versions newer than the one selected.\n"
+"Use this when the port cannot be configured to use a specific Guile version."
+msgstr ""
+"Объявить `CONFLICTS_BUILD` для версий Guile новее выбранной. \n"
+"Используйте это, когда порт нельзя настроить на использование определённой версии Guile."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4339
+msgid ""
+"Some additional arguments are available for handling unusual cases; see `Mk/"
+"Uses/guile.mk` for details."
+msgstr ""
+"Некоторые дополнительные аргументы доступны для обработки нестандартных "
+"случаев; подробности см. в `Mk/Uses/guile.mk`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4342
+msgid ""
+"Unless `build` or `run` is specified, then `LIB_DEPENDS` receives both the "
+"`libguile` library dependency and also any additional dependencies required "
+"by the guile version, e.g. `libgc`. Normally the port should not need any "
+"additional dependencies related to its use of Guile."
+msgstr ""
+"Если не указано `build` или `run`, то `LIB_DEPENDS` получает зависимость от "
+"библиотеки `libguile`, а также любые дополнительные зависимости, требуемые "
+"версией guile, например, `libgc`. Обычно порту не требуются дополнительные "
+"зависимости, связанные с использованием Guile."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4344
+#, no-wrap
+msgid "Configuration flags"
+msgstr "Флаги конфигурации"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4349
+msgid ""
+"Software that uses Guile should be using the `pkg-config` mechanism to "
+"obtain compiler and linker flags. Some older or esoteric ports may be using "
+"`guile-config` or obtaining values directly from `guile` instead, which "
+"should also work (the `alias` argument may be useful in some of these cases)."
+msgstr ""
+"Программное обеспечение, использующее Guile, должно использовать механизм "
+"`pkg-config` для получения флагов компилятора и компоновщика. Некоторые "
+"старые или экзотические порты могут использовать `guile-config` или получать "
+"значения напрямую из `guile`, что также должно работать (в некоторых из этих "
+"случаев может быть полезен аргумент `alias`)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4351
+msgid ""
+"The framework tries to inform the port of the desired Guile version using "
+"the following methods:"
+msgstr ""
+"Фреймворк пытается сообщить порту желаемую версию Guile, используя следующие "
+"методы:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4353
+msgid "`GUILE_EFFECTIVE_VERSION` is added to `CONFIGURE_ENV`;"
+msgstr "`GUILE_EFFECTIVE_VERSION` добавлен в `CONFIGURE_ENV`;"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4354
+msgid ""
+"The full path to the Guile binary is specified in the `GUILE` variable in "
+"`CONFIGURE_ENV` and `MAKE_ENV`;"
+msgstr ""
+"Полный путь к исполняемому файлу Guile указан в переменной `GUILE` в "
+"`CONFIGURE_ENV` и `MAKE_ENV`;"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4355
+msgid ""
+"If the `alias` option is used, the desired Guile version's binaries are the "
+"ones aliased;"
+msgstr ""
+"Если используется опция `alias`, то желаемые версии бинарных файлов Guile "
+"являются теми, которые имеют алиасы;"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4356
+msgid ""
+"If the `alias` option is not used, paths to the desired Guile version's "
+"tools (`guild`, `guile-config`, etc.) are added to `CONFIGURE_ENV` and "
+"`MAKE_ENV` as variables `GUILD`, `GUILE_CONFIG`, etc."
+msgstr ""
+"Если параметр `alias` не используется, пути к инструментам нужной версии "
+"Guile (`guild`, `guile-config` и т.д.) добавляются в `CONFIGURE_ENV` и "
+"`MAKE_ENV` в виде переменных `GUILD`, `GUILE_CONFIG` и т.д."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4359
+msgid ""
+"For some ports, it may be necessary to specify the version in additional "
+"ways, such as via `CONFIGURE_ARGS` or `MESON_ARGS`, depending on the port."
+msgstr ""
+"Для некоторых портов может потребоваться указать версию дополнительными "
+"способами, например, через `CONFIGURE_ARGS` или `MESON_ARGS`, в зависимости "
+"от порта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4363
+msgid ""
+"If none of these methods cause the port to select the specified Guile "
+"version when other versions are present, then preferably patch it to do so. "
+"If that is not feasible, specify the `conflicts` option to prevent building "
+"the port under conditions where it will detect the wrong version."
+msgstr ""
+"Если ни один из этих методов не приводит к тому, что порт выбирает указанную "
+"версию Guile при наличии других версий, то предпочтительно исправить его, "
+"чтобы это происходило. Если это невозможно, укажите опцию `conflicts`, чтобы "
+"предотвратить сборку порта в условиях, когда он обнаруживает неправильную "
+"версию."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4370
+msgid ""
+"A port which installs a Guile extension or library, or a Scheme library that "
+"precompiles for Guile, should build a separate flavor for each supported "
+"Guile version. This is done by adding the `flavors` option."
+msgstr ""
+"Порт, который устанавливает расширение или библиотеку Guile, или библиотеку "
+"Scheme, которая предварительно компилируется для Guile, должен собирать "
+"отдельный флейвор для каждой поддерживаемой версии Guile. Это делается путем "
+"добавления опции `flavors`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4372
+msgid ""
+"Since each flavor must have a different package name, such ports must set "
+"`PKGNAMESUFFIX`, typically:"
+msgstr ""
+"Поскольку каждый флейвор должен иметь уникальное имя пакета, такие порты "
+"обычно устанавливают `PKGNAMESUFFIX`, например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4376
+#, no-wrap
+msgid "PKGNAMESUFFIX=\t-${FLAVOR}\n"
+msgstr "PKGNAMESUFFIX=\t-${FLAVOR}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4380
+msgid ""
+"Such ports must install Scheme files to `GUILE_SITE_DIR` rather than to "
+"`GUILE_GLOBAL_SITE_DIR` even when the files are not version-specific. This "
+"often requires patching the port."
+msgstr ""
+"Такие порты должны устанавливать файлы Scheme в `GUILE_SITE_DIR`, а не в "
+"`GUILE_GLOBAL_SITE_DIR`, даже если файлы не зависят от версии. Это часто "
+"требует исправления порта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4383
+msgid ""
+"Additionally, if such a port installs a `.pc` file, it must be placed in "
+"`GUILE_PKGCONFIG_PATH` rather than in the global `pkgconfig` directory. "
+"This allows dependent ports to find a correct configuration for the specific "
+"Guile version in use."
+msgstr ""
+"Кроме того, если такой порт устанавливает файл `.pc`, он должен быть "
+"размещён в `GUILE_PKGCONFIG_PATH`, а не в глобальной директории `pkgconfig`. "
+"Это позволяет зависимым портам находить правильную конфигурацию для "
+"используемой версии Guile."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4386
+msgid ""
+"If a Guile extension port installs a `.so` file, then it must usually be "
+"placed in the Guile-version-specific `extensions` directory. `USE_LDCONFIG` "
+"should usually not be used."
+msgstr ""
+"Если порт расширения Guile устанавливает файл `.so`, то обычно он должен "
+"быть размещён в специфичной для версии Guile директории `extensions`. Обычно "
+"не следует использовать `USE_LDCONFIG`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4390
+msgid ""
+"Any other files installed by a flavored port must likewise be in version-"
+"specific directories or use version-specific filenames. For documentation "
+"and examples, `GUILE_DOCS_DIR` and `GUILE_EXAMPLES_DIR` specify suitable "
+"locations in which the port should create a subdirectory, see below."
+msgstr ""
+"Любые другие файлы, устанавливаемые портом с флейвором, также должны "
+"находиться в версионных каталогах или использовать версионные имена файлов. "
+"Для документации и примеров переменные `GUILE_DOCS_DIR` и "
+"`GUILE_EXAMPLES_DIR` указывают подходящие расположения, в которых порт "
+"должен создать подкаталог (см. ниже)."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4397
+#, no-wrap
+msgid "Variables Defined for Ports That Use Guile"
+msgstr "Переменные, определенные для портов, использующих Guile"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4402
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4464
+#, no-wrap
+msgid "Sample Value"
+msgstr "Пример значения"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4405
+#, no-wrap
+msgid "`GUILE_VER`"
+msgstr "`GUILE_VER`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4406
+#, no-wrap
+msgid "3.0"
+msgstr "3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4408
+#, no-wrap
+msgid "Guile version in use."
+msgstr "Используемая версия Guile."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4409
+#, no-wrap
+msgid "`GUILE_SFX`"
+msgstr "`GUILE_SFX`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4410
+#, no-wrap
+msgid "3"
+msgstr "3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4413
+#, no-wrap
+msgid ""
+"Short suffix used on some names.\n"
+"Use only with care; may be non-unique or may change in the future."
+msgstr ""
+"Короткий суффикс, используемый в некоторых именах.\n"
+"Используйте с осторожностью; может быть неуникальным или измениться в будущем."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4414
+#, no-wrap
+msgid "`GUILE_FLAVOR`"
+msgstr "`GUILE_FLAVOR`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4415
+#, no-wrap
+msgid "guile30"
+msgstr "guile30"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4417
+#, no-wrap
+msgid "Flavor name corresponding to the selected version."
+msgstr "Название флейвора, соответствующее выбранной версии."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4418
+#, no-wrap
+msgid "`GUILE_PORT`"
+msgstr "`GUILE_PORT`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4419
+#, no-wrap
+msgid "lang/guile3"
+msgstr "lang/guile3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4421
+#, no-wrap
+msgid "Port origin of the specified Guile version."
+msgstr "Расположение порта (origin) для указанной версии Guile."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4422
+#, no-wrap
+msgid "`GUILE_PREFIX`"
+msgstr "`GUILE_PREFIX`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4423
+#, no-wrap
+msgid "${PREFIX}"
+msgstr "${PREFIX}"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4425
+#, no-wrap
+msgid "Directory prefix to be used for installation."
+msgstr "Префикс каталога для использования при установке."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4426
+#, no-wrap
+msgid "`GUILE_CMD`"
+msgstr "`GUILE_CMD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4427
+#, no-wrap
+msgid "guile-3.0"
+msgstr "guile-3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4429
+#, no-wrap
+msgid "Name of the Guile interpreter, with version suffix."
+msgstr "Имя интерпретатора Guile с суффиксом версии."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4430
+#, no-wrap
+msgid "`GUILE_CMDPATH`"
+msgstr "`GUILE_CMDPATH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4431
+#, no-wrap
+msgid "${LOCALBASE}/bin/guile-3.0"
+msgstr "${LOCALBASE}/bin/guile-3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4433
+#, no-wrap
+msgid "Full path to the Guile interpreter."
+msgstr "Полный путь к интерпретатору Guile."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4434
+#, no-wrap
+msgid "`GUILD_CMD`"
+msgstr "`GUILD_CMD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4435
+#, no-wrap
+msgid "guild-3.0"
+msgstr "guild-3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4437
+#, no-wrap
+msgid "Name of the Guild tool, with version suffix."
+msgstr "Название инструмента Guild, с суффиксом версии."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4438
+#, no-wrap
+msgid "`GUILD_CMDPATH`"
+msgstr "`GUILD_CMDPATH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4439
+#, no-wrap
+msgid "${LOCALBASE}/bin/guild-3.0"
+msgstr "`${LOCALBASE}/bin/guild-3.0`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4441
+#, no-wrap
+msgid "Full path to the Guild tool."
+msgstr "Полный путь к инструменту Guild."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4443
+#, no-wrap
+msgid ""
+"`++GUILE_*_CMD++` +\n"
+"`++GUILE_*_CMDPATH++`"
+msgstr ""
+"`++GUILE_*_CMD++` +\n"
+"`++GUILE_*_CMDPATH++`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4446
+#, no-wrap
+msgid "Like `GUILE_CMD` and `GUILE_CMDPATH`, but for other tool binaries."
+msgstr "Как `GUILE_CMD` и `GUILE_CMDPATH`, но для других исполняемых файлов утилит."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4447
+#, no-wrap
+msgid "`GUILE_PKGCONFIG_PATH`"
+msgstr "`GUILE_PKGCONFIG_PATH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4448
+#, no-wrap
+msgid "${LOCALBASE}/libdata/pkgconfig/guile/3.0"
+msgstr "${LOCALBASE}/libdata/pkgconfig/guile/3.0"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4450
+#, no-wrap
+msgid "Where packages using `flavors` should install `.pc` files."
+msgstr "Где пакеты, использующие `flavors`, должны устанавливать файлы `.pc`."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4451
+#, no-wrap
+msgid "`GUILE_INFO_PATH`"
+msgstr "`GUILE_INFO_PATH`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4452
+#, no-wrap
+msgid "share/info/guile3"
+msgstr "share/info/guile3"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4453
+#, no-wrap
+msgid "A suitable value for `INFO_PATH` for ports using the `flavors` option."
+msgstr "Подходящее значение для `INFO_PATH` для портов, использующих опцию `flavors`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4457
+msgid ""
+"The following are defined as variables and as `PLIST_SUB` entries. The "
+"variable form is suffixed with `_DIR` and is a full path (prefixed with "
+"`GUILE_PREFIX`)."
+msgstr ""
+"Следующие элементы определены как переменные и как записи `PLIST_SUB`. Форма "
+"переменной имеет суффикс `_DIR` и представляет собой полный путь (с "
+"префиксом `GUILE_PREFIX`)."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4459
+#, no-wrap
+msgid "Path Substitutions Defined for Ports That Use Guile"
+msgstr "Подстановки путей, определенные для портов, использующих Guile"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4467
+#, no-wrap
+msgid "GUILE_GLOBAL_SITE"
+msgstr "GUILE_GLOBAL_SITE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4468
+#, no-wrap
+msgid "share/guile/site"
+msgstr "share/guile/site"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4470
+#, no-wrap
+msgid "Site directory shared by all guile versions; this should not usually be used."
+msgstr "Каталог сайта, общий для всех версий guile; обычно не должен использоваться."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4471
+#, no-wrap
+msgid "GUILE_SITE"
+msgstr "GUILE_SITE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4472
+#, no-wrap
+msgid "share/guile/3.0/site"
+msgstr "share/guile/3.0/site"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4474
+#, no-wrap
+msgid "Site directory for the selected Guile version."
+msgstr "Каталог сайта для выбранной версии Guile."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4475
+#, no-wrap
+msgid "GUILE_SITE_CCACHE"
+msgstr "GUILE_SITE_CCACHE"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4476
+#, no-wrap
+msgid "lib/guile/3.0/site-ccache"
+msgstr "lib/guile/3.0/site-ccache"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4478
+#, no-wrap
+msgid "Directory for compiled bytecode files."
+msgstr "Каталог для скомпилированных файлов байт-кода."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4479
+#, no-wrap
+msgid "GUILE_DOCS"
+msgstr "GUILE_DOCS"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4480
+#, no-wrap
+msgid "share/doc/guile30"
+msgstr "share/doc/guile30"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4482
+#, no-wrap
+msgid "Parent directory for version-specific documentation."
+msgstr "Родительский каталог для документации, специфичной для версий."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4483
+#, no-wrap
+msgid "GUILE_EXAMPLES"
+msgstr "GUILE_EXAMPLES"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4484
+#, no-wrap
+msgid "share/examples/guile30"
+msgstr "share/examples/guile30"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4485
+#, no-wrap
+msgid "Parent directory for version-specific examples."
+msgstr "Родительский каталог для примеров, специфичных для версий."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4491
+#, no-wrap
+msgid "Makefile for an application using Guile"
+msgstr "`Makefile` для приложения, использующего Guile"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4497
+msgid ""
+"This example shows how to reference a Guile library required at build and "
+"run time. Notice that the reference must specify a flavor. This example "
+"assumes that the application is using `pkg-config` to locate dependencies."
+msgstr ""
+"Этот пример демонстрирует, как сослаться на библиотеку Guile, необходимую во "
+"время сборки и выполнения. Обратите внимание, что ссылка должна указывать "
+"флейвор. В этом примере предполагается, что приложение использует `pkg-"
+"config` для поиска зависимостей."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4507
+#, no-wrap
+msgid ""
+"MAINTAINER=\tfred.bloggs@example.com\n"
+"COMMENT=\tSample\n"
+"WWW=\t\thttps://example.com/guile_sample/sample/\n"
+msgstr ""
+"MAINTAINER=\tfred.bloggs@example.com\n"
+"COMMENT=\tSample\n"
+"WWW=\t\thttps://example.com/guile_sample/sample/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4510
+#, no-wrap
+msgid ""
+"BUILD_DEPENDS=\tguile-lib-${GUILE_FLAVOR}>=0.2.5:devel/guile-lib@${GUILE_FLAVOR}\n"
+"RUN_DEPENDS=\tguile-lib-${GUILE_FLAVOR}>=0.2.5:devel/guile-lib@${GUILE_FLAVOR}\n"
+msgstr ""
+"BUILD_DEPENDS=\tguile-lib-${GUILE_FLAVOR}>=0.2.5:devel/guile-lib@${GUILE_FLAVOR}\n"
+"RUN_DEPENDS=\tguile-lib-${GUILE_FLAVOR}>=0.2.5:devel/guile-lib@${GUILE_FLAVOR}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4512
+#, no-wrap
+msgid "USES=\t\tguile:2.2,3.0 pkgconfig\n"
+msgstr "USES=\t\tguile:2.2,3.0 pkgconfig\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4519
+#, no-wrap
+msgid "Using `iconv`"
+msgstr "Использование `iconv`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4522
+msgid "FreeBSD has a native `iconv` in the operating system."
+msgstr ""
+"В FreeBSD имеется встроенная реализация `iconv` в самой операционной системе."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4524
+msgid "For software that needs `iconv`, define `USES=iconv`."
+msgstr ""
+"Для программного обеспечения, требующего `iconv`, определите `USES=iconv`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4526
+msgid "When a port defines `USES=iconv`, these variables will be available:"
+msgstr ""
+"Когда порт определяет `USES=iconv`, становятся доступны следующие переменные:"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4531
+#, no-wrap
+msgid "Variable name"
+msgstr "Имя переменной"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4532
+#, no-wrap
+msgid "Purpose"
+msgstr "Назначение"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4533
+#, no-wrap
+msgid "Port iconv (when using WCHAR_T or //TRANSLIT extensions)"
+msgstr "Порт iconv (при использовании расширений WCHAR_T или //TRANSLIT)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4536
+#, no-wrap
+msgid "Base iconv"
+msgstr "Базовый iconv"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4537
+#, no-wrap
+msgid "`ICONV_CMD`"
+msgstr "`ICONV_CMD`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4538
+#, no-wrap
+msgid "Directory where the `iconv` binary resides"
+msgstr "Каталог, в котором находится бинарный файл `iconv`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4539
+#, no-wrap
+msgid "`${LOCALBASE}/bin/iconv`"
+msgstr "`${LOCALBASE}/bin/iconv`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4541
+#, no-wrap
+msgid "[.filename]#/usr/bin/iconv#"
+msgstr "[.filename]#/usr/bin/iconv#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4542
+#, no-wrap
+msgid "`ICONV_LIB`"
+msgstr "`ICONV_LIB`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4543
+#, no-wrap
+msgid "`ld` argument to link to [.filename]#libiconv# (if needed)"
+msgstr "аргумент `ld` для линковки с [.filename]#libiconv# (если требуется)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4544
+#, no-wrap
+msgid "`-liconv`"
+msgstr "`-liconv`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4546
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4556
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4560
+#, no-wrap
+msgid "(empty)"
+msgstr "(пусто)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4547
+#, no-wrap
+msgid "`ICONV_PREFIX`"
+msgstr "`ICONV_PREFIX`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4548
+#, no-wrap
+msgid "Directory where the `iconv` implementation resides (useful for configure scripts)"
+msgstr "Каталог, в котором находится реализация `iconv` (полезно для скриптов configure)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4549
+#, no-wrap
+msgid "`${LOCALBASE}`"
+msgstr "`${LOCALBASE}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4551
+#, no-wrap
+msgid "[.filename]#/usr#"
+msgstr "[.filename]#/usr#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4552
+#, no-wrap
+msgid "`ICONV_CONFIGURE_ARG`"
+msgstr "`ICONV_CONFIGURE_ARG`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4553
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4558
+#, no-wrap
+msgid "Preconstructed configure argument for configure scripts"
+msgstr "Предварительно сконструированный аргумент configure для скриптов configure"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4554
+#, no-wrap
+msgid "`--with-libiconv-prefix=${LOCALBASE}`"
+msgstr "`--with-libiconv-prefix=${LOCALBASE}`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4557
+#, no-wrap
+msgid "`ICONV_CONFIGURE_BASE`"
+msgstr "`ICONV_CONFIGURE_BASE`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4559
+#, no-wrap
+msgid "`--with-libiconv=${LOCALBASE}`"
+msgstr "`--with-libiconv=${LOCALBASE}`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4563
+msgid ""
+"These two examples automatically populate the variables with the correct "
+"value for systems using package:converters/libiconv[] or the native `iconv` "
+"respectively:"
+msgstr ""
+"Эти два примера автоматически заполняют переменные правильным значением для "
+"систем, использующих package:converters/libiconv[] или `iconv`, входящий в "
+"состав операционной системы, соответственно:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4565
+#, no-wrap
+msgid "Simple `iconv` Usage"
+msgstr "Простое использование `iconv`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4572
+#, no-wrap
+msgid ""
+"USES=\t\ticonv\n"
+"LDFLAGS+=\t-L${LOCALBASE}/lib ${ICONV_LIB}\n"
+msgstr ""
+"USES=\t\ticonv\n"
+"LDFLAGS+=\t-L${LOCALBASE}/lib ${ICONV_LIB}\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4577
+#, no-wrap
+msgid "`iconv` Usage with `configure`"
+msgstr "Использование `iconv` с `configure`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4584
+#, no-wrap
+msgid ""
+"USES=\t\ticonv\n"
+"CONFIGURE_ARGS+=${ICONV_CONFIGURE_ARG}\n"
+msgstr ""
+"USES=\t\ticonv\n"
+"CONFIGURE_ARGS+=${ICONV_CONFIGURE_ARG}\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4590
+msgid ""
+"As shown above, `ICONV_LIB` is empty when a native `iconv` is present. This "
+"can be used to detect the native `iconv` and respond appropriately."
+msgstr ""
+"Как показано выше, `ICONV_LIB` пуста, когда присутствует встроенный `iconv`. "
+"Это можно использовать для обнаружения встроенного `iconv` и действовать "
+"соответственно."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4593
+msgid ""
+"Sometimes a program has an `ld` argument or search path hardcoded in a "
+"[.filename]#Makefile# or configure script. This approach can be used to "
+"solve that problem:"
+msgstr ""
+"Иногда в программе аргумент `ld` или путь поиска жестко заданы в "
+"[.filename]#Makefile# или скрипте configure. Для решения этой проблемы можно "
+"использовать следующий подход:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4595
+#, no-wrap
+msgid "Fixing Hardcoded `-liconv`"
+msgstr "Исправление жестко заданного `-liconv`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4601
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4618
+#, no-wrap
+msgid "USES=\t\ticonv\n"
+msgstr "USES=\t\ticonv\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4604
+#, no-wrap
+msgid ""
+"post-patch:\n"
+"\t@${REINPLACE_CMD} -e 's/-liconv/${ICONV_LIB}/' ${WRKSRC}/Makefile\n"
+msgstr ""
+"post-patch:\n"
+"\t@${REINPLACE_CMD} -e 's/-liconv/${ICONV_LIB}/' ${WRKSRC}/Makefile\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4610
+msgid ""
+"In some cases it is necessary to set alternate values or perform operations "
+"depending on whether there is a native `iconv`. "
+"[.filename]#bsd.port.pre.mk# must be included before testing the value of "
+"`ICONV_LIB`:"
+msgstr ""
+"В некоторых случаях необходимо установить альтернативные значения или "
+"выполнить операции в зависимости от наличия встроенного `iconv`. "
+"[.filename]#bsd.port.pre.mk# должен быть включен до проверки значения "
+"`ICONV_LIB`:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4612
+#, no-wrap
+msgid "Checking for Native `iconv` Availability"
+msgstr "Проверка доступности встроенной поддержки `iconv`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4626
+#, no-wrap
+msgid ""
+"post-patch:\n"
+".if empty(ICONV_LIB)\n"
+"\t# native iconv detected\n"
+"\t@${REINPLACE_CMD} -e 's|iconv||' ${WRKSRC}/Config.sh\n"
+".endif\n"
+msgstr ""
+"post-patch:\n"
+".if empty(ICONV_LIB)\n"
+"\t# native iconv detected\n"
+"\t@${REINPLACE_CMD} -e 's|iconv||' ${WRKSRC}/Config.sh\n"
+".endif\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4628
+#, no-wrap
+msgid ".include <bsd.port.post.mk>\n"
+msgstr ".include <bsd.port.post.mk>\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4633
+#, no-wrap
+msgid "Using Xfce"
+msgstr "Использование Xfce"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4636
+msgid "Ports that need Xfce libraries or applications set `USES=xfce`."
+msgstr ""
+"Порты, которым требуются библиотеки или приложения Xfce, устанавливают "
+"`USES=xfce`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4640
+msgid ""
+"Specific Xfce library and application dependencies are set with values "
+"assigned to `USE_XFCE`. They are defined in [.filename]#/usr/ports/Mk/Uses/"
+"xfce.mk#. The possible values are:"
+msgstr ""
+"Конкретные зависимости библиотек и приложений Xfce задаются с помощью "
+"значений, присвоенных `USE_XFCE`. Они определены в [.filename]#/usr/ports/Mk/"
+"Uses/xfce.mk#. Возможные значения:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4641
+#, no-wrap
+msgid "Values of `USE_XFCE`"
+msgstr "Значения `USE_XFCE`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4642
+#, no-wrap
+msgid "garcon"
+msgstr "garcon"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4644
+msgid "package:sysutils/garcon[]"
+msgstr "package:sysutils/garcon[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4645
+#, no-wrap
+msgid "libexo"
+msgstr "libexo"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4647
+msgid "package:x11/libexo[]"
+msgstr "package:x11/libexo[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4648
+#, no-wrap
+msgid "libgui"
+msgstr "libgui"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4650
+msgid "package:x11-toolkits/libxfce4gui[]"
+msgstr "package:x11-toolkits/libxfce4gui[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4651
+#, no-wrap
+msgid "libmenu"
+msgstr "libmenu"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4653
+msgid "package:x11/libxfce4menu[]"
+msgstr "package:x11/libxfce4menu[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4654
+#, no-wrap
+msgid "libutil"
+msgstr "libutil"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4656
+msgid "package:x11/libxfce4util[]"
+msgstr "package:x11/libxfce4util[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4657
+#, no-wrap
+msgid "panel"
+msgstr "panel"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4659
+msgid "package:x11-wm/xfce4-panel[]"
+msgstr "package:x11-wm/xfce4-panel[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4660
+#, no-wrap
+msgid "thunar"
+msgstr "thunar"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4662
+msgid "package:x11-fm/thunar[]"
+msgstr "package:x11-fm/thunar[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4663
+#, no-wrap
+msgid "xfconf"
+msgstr "xfconf"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4665
+msgid "package:x11/xfce4-conf[]"
+msgstr "package:x11/xfce4-conf[]"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4667
+#, no-wrap
+msgid "`USES=xfce` Example"
+msgstr "Пример `USES=xfce`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4674
+#, no-wrap
+msgid ""
+"USES=\t\txfce\n"
+"USE_XFCE=\tlibmenu\n"
+msgstr ""
+"USES=\t\txfce\n"
+"USE_XFCE=\tlibmenu\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4679
+#, no-wrap
+msgid "Using Xfce's Own GTK2 Widgets"
+msgstr "Использование собственных виджетов GTK2 в Xfce"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4683
+msgid ""
+"In this example, the ported application uses the GTK2-specific widgets "
+"package:x11/libxfce4menu[] and package:x11/xfce4-conf[]."
+msgstr ""
+"В этом примере портированное приложение использует пакет виджетов, "
+"специфичных для GTK2: package:x11/libxfce4menu[] и package:x11/xfce4-conf[]."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4688
+#, no-wrap
+msgid ""
+"USES=\t\txfce:gtk2\n"
+"USE_XFCE=\tlibmenu xfconf\n"
+msgstr ""
+"USES=\t\txfce:gtk2\n"
+"USE_XFCE=\tlibmenu xfconf\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4697
+msgid ""
+"Xfce components included this way will automatically include any "
+"dependencies they need. It is no longer necessary to specify the entire "
+"list. If the port only needs package:x11-wm/xfce4-panel[], use:"
+msgstr ""
+"Компоненты Xfce, включённые таким образом, автоматически загрузят все "
+"необходимые зависимости. Указывать полный список больше не требуется. Если "
+"порту нужен только package:x11-wm/xfce4-panel[], используйте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4702
+#, no-wrap
+msgid ""
+"USES=\t\txfce\n"
+"USE_XFCE=\tpanel\n"
+msgstr ""
+"USES=\t\txfce\n"
+"USE_XFCE=\tpanel\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4705
+msgid ""
+"There is no need to list the components package:x11-wm/xfce4-panel[] needs "
+"itself like this:"
+msgstr ""
+"Нет необходимости перечислять компоненты package:x11-wm/xfce4-panel[], "
+"которые ему самому требуются, вот так:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4710
+#, no-wrap
+msgid ""
+"USES=\t\txfce\n"
+"USE_XFCE=\tlibexo libmenu libutil panel\n"
+msgstr ""
+"USES=\t\txfce\n"
+"USE_XFCE=\tlibexo libmenu libutil panel\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4714
+msgid ""
+"However, Xfce components and non-Xfce dependencies of the port must be "
+"included explicitly. Do not count on an Xfce component to provide a sub-"
+"dependency other than itself for the main port."
+msgstr ""
+"Однако компоненты Xfce и зависимости порта, не относящиеся к Xfce, должны "
+"быть явно включены. Не рассчитывайте, что компонент Xfce предоставит "
+"дополнительную зависимость, кроме себя, для основного порта."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4717
+#, no-wrap
+msgid "Using Budgie"
+msgstr "Использование Budgie"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4720
+msgid ""
+"Applications or libraries depending on the Budgie desktop should set `USES= "
+"budgie` and set `USE_BUDGIE` to the list of required components."
+msgstr ""
+"Приложения или библиотеки, зависящие от рабочего стола Budgie, должны "
+"указывать `USES= budgie` и устанавливать `USE_BUDGIE` в список необходимых "
+"компонентов."
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4727
+#, no-wrap
+msgid "`libbudgie`"
+msgstr "`libbudgie`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4729
+#, no-wrap
+msgid "Desktop core (library)"
+msgstr "Ядро рабочего стола (библиотека)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4730
+#, no-wrap
+msgid "`libmagpie`"
+msgstr "`libmagpie`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4732
+#, no-wrap
+msgid "Budgie's X11 window manager and compositor library"
+msgstr "Оконный менеджер X11 и библиотека композитинга Budgie"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4733
+#, no-wrap
+msgid "`raven`"
+msgstr "`raven`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4735
+#, no-wrap
+msgid "All-in-one center in panel for accessing different applications widgets"
+msgstr "Универсальный центр в панели для доступа к различным виджетам приложений"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4736
+#, no-wrap
+msgid "`screensaver`"
+msgstr "`screensaver`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4738
+#, no-wrap
+msgid "Desktop-specific screensaver"
+msgstr "Рабочий стол: специальная заставка"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4743
+msgid ""
+"All application widgets communicate through the *org.budgie_desktop.Raven* "
+"service."
+msgstr ""
+"Все виджеты приложений взаимодействуют через службу "
+"*org.budgie_desktop.Raven*."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4745
+msgid ""
+"The default dependency is lib- and run-time, it can be changed with `:build` "
+"or `:run`, for example:"
+msgstr ""
+"Зависимость по умолчанию включает время сборки и выполнения, её можно "
+"изменить с помощью `:build` или `:run`, например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4750
+#, no-wrap
+msgid ""
+"USES=\t\tbudgie\n"
+"USE_BUDGIE=\tscreensaver:build\n"
+msgstr ""
+"USES=\t\tbudgie\n"
+"USE_BUDGIE=\tscreensaver:build\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4754
+#, no-wrap
+msgid "`USE_BUDGIE` Example"
+msgstr "Пример `USE_BUDGIE`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4761
+#, no-wrap
+msgid ""
+"USES=\t\tbudgie gettext gnome meson pkgconfig\n"
+"USE_BUDGIE=\tlibbudgie\n"
+msgstr ""
+"USES=\t\tbudgie gettext gnome meson pkgconfig\n"
+"USE_BUDGIE=\tlibbudgie\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4765
+#, no-wrap
+msgid "Using Databases"
+msgstr "Использование баз данных"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4768
+msgid ""
+"Use one of the `USES` macros from crossref:special[using-databases-"
+"uses,Database `USES` Macros] to add a dependency on a database."
+msgstr ""
+"Используйте один из макросов `USES` из crossref:special[using-databases-"
+"uses,Макросы `USES` для баз данных], чтобы добавить зависимость от базы "
+"данных."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4770
+#, no-wrap
+msgid "Database `USES` Macros"
+msgstr "Макросы `USES` для баз данных"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4774
+#, no-wrap
+msgid "Database"
+msgstr "База данных"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4776
+#, no-wrap
+msgid "USES Macro"
+msgstr "Макрос USES"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4777
+#, no-wrap
+msgid "Berkeley DB"
+msgstr "Berkeley DB"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4779
+#, no-wrap
+msgid "crossref:uses[uses-bdb,`bdb`]"
+msgstr "crossref:uses[uses-bdb,`bdb`]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4780
+#, no-wrap
+msgid "MariaDB, MySQL, Percona"
+msgstr "MariaDB, MySQL, Percona"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4782
+#, no-wrap
+msgid "crossref:uses[uses-mysql,`mysql`]"
+msgstr "crossref:uses[uses-mysql,`mysql`]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4783
+#, no-wrap
+msgid "PostgreSQL"
+msgstr "PostgreSQL"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4785
+#, no-wrap
+msgid "crossref:uses[uses-pgsql,`pgsql`]"
+msgstr "crossref:uses[uses-pgsql,`pgsql`]"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4786
+#, no-wrap
+msgid "SQLite"
+msgstr "SQLite"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4787
+#, no-wrap
+msgid "crossref:uses[uses-sqlite,`sqlite`]"
+msgstr "crossref:uses[uses-sqlite,`sqlite`]"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4790
+#, no-wrap
+msgid "Using Berkeley DB 6"
+msgstr "Использование Berkeley DB 6"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4796
+#, no-wrap
+msgid "USES=\tbdb:6\n"
+msgstr "USES=\tbdb:6\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4799
+msgid "See crossref:uses[uses-bdb,`bdb`] for more information."
+msgstr ""
+"См. crossref:uses[uses-bdb,`bdb`] для получения дополнительной информации."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4802
+#, no-wrap
+msgid "Using MySQL"
+msgstr "Использование MySQL"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4806
+msgid "When a port needs the MySQL client library add"
+msgstr "Когда порту требуется клиентская библиотека MySQL, добавьте"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4810
+#, no-wrap
+msgid "USES=\tmysql\n"
+msgstr "USES=\tmysql\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4813
+msgid "See crossref:uses[uses-mysql,`mysql`] for more information."
+msgstr ""
+"См. crossref:uses[uses-mysql,`mysql`] для получения дополнительной "
+"информации."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4816
+#, no-wrap
+msgid "Using PostgreSQL"
+msgstr "Использование PostgreSQL"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4820
+msgid "When a port needs the PostgreSQL server version 9.6 or later add"
+msgstr "Когда порту требуется сервер PostgreSQL версии 9.6 или новее, добавьте"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4825
+#, no-wrap
+msgid ""
+"USES=\t\tpgsql:9.6+\n"
+"WANT_PGSQL=\tserver\n"
+msgstr ""
+"USES=\t\tpgsql:9.6+\n"
+"WANT_PGSQL=\tserver\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4828
+msgid "See crossref:uses[uses-pgsql,`pgsql`] for more information."
+msgstr ""
+"См. crossref:uses[uses-pgsql,`pgsql`] для получения дополнительной "
+"информации."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4831
+#, no-wrap
+msgid "Using SQLite 3"
+msgstr "Использование SQLite 3"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4837
+#, no-wrap
+msgid "USES=\tsqlite:3\n"
+msgstr "USES=\tsqlite:3\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4840
+msgid "See crossref:uses[uses-sqlite,`sqlite`] for more information."
+msgstr ""
+"См. crossref:uses[uses-sqlite,`sqlite`] для получения дополнительной "
+"информации."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4843
+#, no-wrap
+msgid "Starting and Stopping Services (`rc` Scripts)"
+msgstr "Запуск и остановка служб (скрипты `rc`)"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4850
+msgid ""
+"[.filename]#rc.d# scripts are used to start services on system startup, and "
+"to give administrators a standard way of stopping, starting and restarting "
+"the service. Ports integrate into the system [.filename]#rc.d# framework. "
+"Details on its usage can be found in extref:{handbook}[the rc.d Handbook "
+"chapter, configtuning-rcd]. Detailed explanation of the available commands "
+"is provided in man:rc[8] and man:rc.subr[8]. Finally, there is extref:{rc-"
+"scripting}[an article] on practical aspects of [.filename]#rc.d# scripting."
+msgstr ""
+"[.filename]#rc.d# скрипты используются для запуска служб при загрузке "
+"системы, а также предоставляют администраторам стандартный способ остановки, "
+"запуска и перезапуска служб. Порты интегрируются в систему "
+"[.filename]#rc.d#. Подробности использования можно найти в extref:{handbook}"
+"[соответствующей главе Handbook, configtuning-rcd]. Детальное объяснение "
+"доступных команд приведено в man:rc[8] и man:rc.subr[8]. Наконец, существует "
+"extref:{rc-scripting}[статья], посвящённая практическим аспектам написания "
+"[.filename]#rc.d# скриптов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4853
+msgid ""
+"With a mythical port called _doorman_, which needs to start a _doormand_ "
+"daemon. Add the following to the [.filename]#Makefile#:"
+msgstr ""
+"С мифическим портом под названием _doorman_, которому необходимо запустить "
+"демон _doormand_. Добавьте следующее в [.filename]#Makefile#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4857
+#, no-wrap
+msgid "USE_RC_SUBR=\tdoormand\n"
+msgstr "USE_RC_SUBR=\tdoormand\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4864
+msgid ""
+"Multiple scripts may be listed and will be installed. Scripts must be "
+"placed in the [.filename]#files# subdirectory and a `.in` suffix must be "
+"added to their filename. Standard `SUB_LIST` expansions will be ran against "
+"this file. Use of the `%%PREFIX%%` and `%%LOCALBASE%%` expansions is "
+"strongly encouraged as well. More on `SUB_LIST` in crossref:pkg-files[using-"
+"sub-files,the relevant section]."
+msgstr ""
+"Можно указать несколько скриптов, которые будут установлены. Скрипты должны "
+"быть размещены в подкаталоге [.filename]#files#, и к их имени должен быть "
+"добавлен суффикс `.in`. Для этого файла будут выполнены стандартные "
+"подстановки `SUB_LIST`. Также настоятельно рекомендуется использовать "
+"подстановки `%%PREFIX%%` и `%%LOCALBASE%%`. Подробнее о `SUB_LIST` см. в "
+"crossref:pkg-files[using-sub-files,соответствующем разделе]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4866
+msgid ""
+"As of FreeBSD 6.1-RELEASE, local [.filename]#rc.d# scripts (including those "
+"installed by ports) are included in the overall man:rcorder[8] of the base "
+"system."
+msgstr ""
+"Начиная с FreeBSD 6.1-RELEASE, локальные скрипты [.filename]#rc.d# (включая "
+"те, что установлены через порты) включены в общий man:rcorder[8] базовой "
+"системы."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4868
+msgid ""
+"An example simple [.filename]#rc.d# script to start the doormand daemon:"
+msgstr "Пример простого скрипта [.filename]#rc.d# для запуска демона doormand:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4872
+#, no-wrap
+msgid "#!/bin/sh\n"
+msgstr "#!/bin/sh\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4884
+#, no-wrap
+msgid ""
+"# PROVIDE: doormand\n"
+"# REQUIRE: LOGIN\n"
+"# KEYWORD: shutdown\n"
+"#\n"
+"# Add these lines to /etc/rc.conf.local or /etc/rc.conf\n"
+"# to enable this service:\n"
+"#\n"
+"# doormand_enable (bool):\tSet to NO by default.\n"
+"#\t\t\t\tSet it to YES to enable doormand.\n"
+"# doormand_config (path):\tSet to %%PREFIX%%/etc/doormand/doormand.cf\n"
+"#\t\t\t\tby default.\n"
+msgstr ""
+"# PROVIDE: doormand\n"
+"# REQUIRE: LOGIN\n"
+"# KEYWORD: shutdown\n"
+"#\n"
+"# Add these lines to /etc/rc.conf.local or /etc/rc.conf\n"
+"# to enable this service:\n"
+"#\n"
+"# doormand_enable (bool):\tSet to NO by default.\n"
+"#\t\t\t\tSet it to YES to enable doormand.\n"
+"# doormand_config (path):\tSet to %%PREFIX%%/etc/doormand/doormand.cf\n"
+"#\t\t\t\tby default.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4886
+#, no-wrap
+msgid ". /etc/rc.subr\n"
+msgstr ". /etc/rc.subr\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4889
+#, no-wrap
+msgid ""
+"name=doormand\n"
+"rcvar=doormand_enable\n"
+msgstr ""
+"name=doormand\n"
+"rcvar=doormand_enable\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4891
+#, no-wrap
+msgid "load_rc_config $name\n"
+msgstr "load_rc_config $name\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4894
+#, no-wrap
+msgid ""
+": ${doormand_enable:=\"NO\"}\n"
+": ${doormand_config=\"%%PREFIX%%/etc/doormand/doormand.cf\"}\n"
+msgstr ""
+": ${doormand_enable:=\"NO\"}\n"
+": ${doormand_config=\"%%PREFIX%%/etc/doormand/doormand.cf\"}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4897
+#, no-wrap
+msgid ""
+"command=%%PREFIX%%/sbin/${name}\n"
+"pidfile=/var/run/${name}.pid\n"
+msgstr ""
+"command=%%PREFIX%%/sbin/${name}\n"
+"pidfile=/var/run/${name}.pid\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4899
+#, no-wrap
+msgid "command_args=\"-p $pidfile -f $doormand_config\"\n"
+msgstr "command_args=\"-p $pidfile -f $doormand_config\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4901
+#, no-wrap
+msgid "run_rc_command \"$1\"\n"
+msgstr "run_rc_command \"$1\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4904
+msgid ""
+"Unless there is a very good reason to start the service earlier, or it runs "
+"as a particular user (other than root), all ports scripts must use:"
+msgstr ""
+"Если нет очень веской причины запускать службу раньше или она работает от "
+"имени определенного пользователя (не root), все скрипты портов должны "
+"использовать:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4908
+#, no-wrap
+msgid "REQUIRE: LOGIN\n"
+msgstr "REQUIRE: LOGIN\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4911
+msgid ""
+"If the startup script launches a daemon that must be shutdown, the following "
+"will trigger a stop of the service on system shutdown:"
+msgstr ""
+"Если скрипт запуска демона требует его остановки, следующий код активирует "
+"остановку службы при выключении системы:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4915
+#, no-wrap
+msgid "KEYWORD: shutdown\n"
+msgstr "KEYWORD: shutdown\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4918
+msgid ""
+"If the script is not starting a persistent service this is not necessary."
+msgstr "Если скрипт не запускает постоянную службу, это не требуется."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4921
+msgid ""
+"For optional configuration elements the \"=\" style of default variable "
+"assignment is preferable to the \":=\" style here, since the former sets a "
+"default value only if the variable is unset, and the latter sets one if the "
+"variable is unset _or_ null. A user might very well include something like:"
+msgstr ""
+"Для необязательных элементов конфигурации предпочтительнее использовать "
+"стиль присваивания переменных по умолчанию \"=\" вместо стиля \":=\", так "
+"как первый устанавливает значение по умолчанию только если переменная не "
+"задана, а второй — если переменная не задана _или_ равна null. Пользователь "
+"может включить что-то вроде:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4925
+#, no-wrap
+msgid "doormand_flags=\"\"\n"
+msgstr "doormand_flags=\"\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4929
+msgid ""
+"in their [.filename]#rc.conf.local#, and a variable substitution using "
+"\":=\" would inappropriately override the user's intention. The `_enable` "
+"variable is not optional, and must use the \":\" for the default."
+msgstr ""
+"в свой [.filename]#rc.conf.local#, а подстановка переменной с использованием "
+"\":=\" некорректно переопределила бы намерение пользователя. Переменная "
+"`_enable` не является опциональной и должна использовать \":\" для значения "
+"по умолчанию."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4934
+msgid ""
+"Ports _must not_ start and stop their services when installing and "
+"deinstalling. Do not abuse the [.filename]#plist# keywords described in "
+"crossref:plist[plist-keywords-base-exec, \"the @preexec command,@postexec "
+"command,@preunexec command,@postunexec command section\"] by running "
+"commands that modify the currently running system, including starting or "
+"stopping services."
+msgstr ""
+"Порты _не должны_ запускать и останавливать свои службы при установке и "
+"удалении. Не злоупотребляйте ключевыми словами [.filename]#plist#, "
+"описанными в crossref:plist[plist-keywords-base-exec, \"разделе @preexec "
+"command,@postexec command,@preunexec command,@postunexec command\"], "
+"выполняя команды, которые изменяют работающую систему, включая запуск или "
+"остановку служб."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4937
+#, no-wrap
+msgid "Pre-Commit Checklist"
+msgstr "Pre-Commit Checklist"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4940
+msgid ""
+"Before contributing a port with an [.filename]#rc.d# script, and more "
+"importantly, before committing one, please consult this checklist to be sure "
+"that it is ready."
+msgstr ""
+"Прежде чем внести порт с [.filename]#rc.d# скриптом, и что более важно, "
+"перед его коммитом, пожалуйста, ознакомьтесь с этим контрольным списком, "
+"чтобы убедиться, что он готов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4942
+msgid ""
+"The package:devel/rclint[] port can check for most of these, but it is not a "
+"substitute for proper review."
+msgstr ""
+"Порт package:devel/rclint[] может проверить большинство из них, но он не "
+"заменяет тщательного просмотра и проверки."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4945
+msgid ""
+"If this is a new file, does it have a [.filename]#.sh# extension? If so, "
+"that must be changed to just [.filename]#file.in# since [.filename]#rc.d# "
+"files may not end with that extension."
+msgstr ""
+"Если это новый файл, имеет ли он расширение [.filename]#.sh#? Если да, его "
+"необходимо изменить на просто [.filename]#file.in#, поскольку файлы "
+"[.filename]#rc.d# не могут оканчиваться таким расширением."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4946
+msgid ""
+"Do the name of the file (minus [.filename]#.in#), the `PROVIDE` line, and "
+"`$` _name_ all match? The file name matching `PROVIDE` makes debugging "
+"easier, especially for man:rcorder[8] issues. Matching the file name and "
+"`$`_name_ makes it easier to figure out which variables are relevant in "
+"[.filename]#rc.conf[.local]#. It is also a policy for all new scripts, "
+"including those in the base system."
+msgstr ""
+"Совпадают ли имя файла (без [.filename]#.in#), строка `PROVIDE` и `$`_name_? "
+"Совпадение имени файла с `PROVIDE` упрощает отладку, особенно при проблемах "
+"с man:rcorder[8]. Совпадение имени файла и `$`_name_ облегчает понимание "
+"того, какие переменные актуальны в [.filename]#rc.conf[.local]#. Это также "
+"является политикой для всех новых скриптов, включая те, что в базовой "
+"системе."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4947
+msgid ""
+"Is the `REQUIRE` line set to `LOGIN`? This is mandatory for scripts that run "
+"as a non-root user. If it runs as root, is there a good reason for it to run "
+"prior to `LOGIN`? If not, it must run after so that local scrips can be "
+"loosely grouped to a point in man:rcorder[8] after most everything in the "
+"base is already running."
+msgstr ""
+"Установлена ли строка `REQUIRE` в значение `LOGIN`? Это обязательно для "
+"скриптов, выполняемых от имени непривилегированного пользователя. Если "
+"скрипт выполняется от имени root, есть ли веская причина для его запуска до "
+"`LOGIN`? Если нет, он должен запускаться после, чтобы локальные скрипты "
+"можно было условно сгруппировать в man:rcorder[8] после запуска большинства "
+"компонентов базовой системы."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4948
+msgid ""
+"Does the script start a persistent service? If so, it must have `KEYWORD: "
+"shutdown`."
+msgstr ""
+"Запускает ли скрипт постоянную службу? Если да, он должен содержать "
+"`KEYWORD: shutdown`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4949
+msgid ""
+"Make sure there is no `KEYWORD: FreeBSD` present. This has not been "
+"necessary nor desirable for years. It is also an indication that the new "
+"script was copy/pasted from an old script, so extra caution must be given to "
+"the review."
+msgstr ""
+"Убедитесь, что отсутствует `KEYWORD: FreeBSD`. Это перестало быть "
+"необходимым или желательным уже много лет. Это также указывает на то, что "
+"новый скрипт был скопирован/вставлен из старого скрипта, поэтому следует "
+"проявить дополнительную осторожность при проверке."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4950
+msgid ""
+"If the script uses an interpreted language like `perl`, `python`, or `ruby`, "
+"make certain that `command_interpreter` is set appropriately, for example, "
+"for Perl, by adding `PERL=${PERL}` to `SUB_LIST` and using `%%PERL%%`. "
+"Otherwise,"
+msgstr ""
+"Если скрипт использует интерпретируемый язык, например `perl`, `python` или "
+"`ruby`, убедитесь, что `command_interpreter` установлен корректно. Например, "
+"для Perl добавьте `PERL=${PERL}` в `SUB_LIST` и используйте `%%PERL%%`. В "
+"противном случае,"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4954
+#, no-wrap
+msgid "# service name stop\n"
+msgstr "# service name stop\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4957
+msgid ""
+"will probably not work properly. See man:service[8] for more information."
+msgstr ""
+"вероятно, не будет работать корректно. Дополнительную информацию смотрите в "
+"man:service[8]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4958
+msgid ""
+"Have all occurrences of [.filename]#/usr/local# been replaced with `%%PREFIX%"
+"%`?"
+msgstr ""
+"Проверено, что все вхождения [.filename]#/usr/local# заменены на `%%PREFIX%"
+"%`?"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4959
+msgid "Do the default variable assignments come after `load_rc_config`?"
+msgstr ""
+"Делаются ли присваивания переменным по умолчанию после `load_rc_config`?"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4960
+msgid ""
+"Are there default assignments to empty strings? They should be removed, but "
+"double-check that the option is documented in the comments at the top of the "
+"file."
+msgstr ""
+"Используются ли пустые строки при присвоении значений по умолчанию? Такие "
+"присвоения должны быть удалены, но перепроверьте, что эти параметры "
+"задокументированы в комментариях в начале файла."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4961
+msgid "Are things that are set in variables actually used in the script?"
+msgstr ""
+"Действительно ли в сценариях используются значения, присвоенные переменным?"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4962
+msgid ""
+"Are options listed in the default _name_`_flags` things that are actually "
+"mandatory? If so, they must be in `command_args`. `-d` is a red flag (pardon "
+"the pun) here, since it is usually the option to \"daemonize\" the process, "
+"and therefore is actually mandatory."
+msgstr ""
+"Являются ли опции, перечисленные в стандартном _name_`_flags`, "
+"обязательными? Если да, они должны быть в `command_args`. Флаг `-d` здесь, "
+"как красный флаг (простите за каламбур), так как обычно это опция для "
+"\"демонизации\" процесса и, следовательно, фактически обязательна."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4963
+msgid ""
+"`_name__flags` must never be included in `command_args` (and vice versa, "
+"although that error is less common)."
+msgstr ""
+"`_name__flags` никогда не должны включаться в `command_args` (и наоборот, "
+"хотя такая ошибка встречается реже)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4964
+msgid ""
+"Does the script execute any code unconditionally? This is frowned on. "
+"Usually these things must be dealt with through a `start_precmd`."
+msgstr ""
+"Выполняет ли скрипт любой код безусловно? Это не приветствуется. Обычно "
+"такие вещи должны обрабатываться через `start_precmd`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4965
+msgid ""
+"All boolean tests must use the `checkyesno` function. No hand-rolled tests "
+"for `[Yy][Ee][Ss]`, etc."
+msgstr ""
+"Все логические проверки должны использовать функцию `checkyesno`. Не "
+"допускаются самодельные проверки на `[Yy][Ee][Ss]` и т.п."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4966
+msgid ""
+"If there is a loop (for example, waiting for something to start) does it "
+"have a counter to terminate the loop? We do not want the boot to be stuck "
+"forever if there is an error."
+msgstr ""
+"Если есть цикл (например, ожидание запуска чего-либо), есть ли в нём счётчик "
+"для завершения цикла? Мы не хотим, чтобы загрузка зависала навсегда в случае "
+"ошибки."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4967
+msgid ""
+"Does the script create files or directories that need specific permissions, "
+"for example, a [.filename]#pid# that needs to be owned by the user that runs "
+"the process? Rather than the traditional man:touch[1]/man:chown[8]/"
+"man:chmod[1] routine, consider using man:install[1] with the proper command "
+"line arguments to do the whole procedure with one step."
+msgstr ""
+"Создает ли скрипт файлы или каталоги, требующие определенных разрешений, "
+"например, [.filename]#pid#, который должен принадлежать пользователю, "
+"запускающему процесс? Вместо традиционной последовательности man:touch[1]/"
+"man:chown[8]/man:chmod[1] рассмотрите использование man:install[1] с "
+"соответствующими аргументами командной строки, чтобы выполнить всю процедуру "
+"за один шаг."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4969
+#, no-wrap
+msgid "Adding Users and Groups"
+msgstr "Добавление пользователей и групп"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4974
+msgid ""
+"Some ports require a particular user account to be present, usually for "
+"daemons that run as that user. For these ports, choose a _unique_ UID from "
+"50 to 999 and register it in [.filename]#ports/UIDs# (for users) and "
+"[.filename]#ports/GIDs# (for groups). The unique identification should be "
+"the same for users and groups."
+msgstr ""
+"Некоторые порты требуют наличия определённой учётной записи пользователя, "
+"обычно для демонов, работающих от имени этого пользователя. Для таких портов "
+"выберите _уникальный_ UID в диапазоне от 50 до 999 и зарегистрируйте его в "
+"[.filename]#ports/UIDs# (для пользователей) и [.filename]#ports/GIDs# (для "
+"групп). Уникальный идентификатор должен быть одинаковым для пользователей и "
+"групп."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4976
+msgid ""
+"Please include a patch against these two files when requiring a new user or "
+"group to be created for the port."
+msgstr ""
+"Пожалуйста, приложите патч для этих двух файлов, если требуется создать "
+"нового пользователя или группу для порта."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4978
+msgid ""
+"Then use `USERS` and `GROUPS` in [.filename]#Makefile#, and the user will be "
+"automatically created when installing the port."
+msgstr ""
+"Затем используйте `USERS` и `GROUPS` в [.filename]#Makefile#, и пользователь "
+"будет автоматически создан при установке порта."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4983
+#, no-wrap
+msgid ""
+"USERS=\tpulse\n"
+"GROUPS=\tpulse pulse-access pulse-rt\n"
+msgstr ""
+"USERS=\tpulse\n"
+"GROUPS=\tpulse pulse-access pulse-rt\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4986
+msgid ""
+"The current list of reserved UIDs and GIDs can be found in [.filename]#ports/"
+"UIDs# and [.filename]#ports/GIDs#."
+msgstr ""
+"Текущий список зарезервированных UID и GID можно найти в [.filename]#ports/"
+"UIDs# и [.filename]#ports/GIDs#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4988
+#, no-wrap
+msgid "Ports That Rely on Kernel Sources"
+msgstr "Порты, зависящие от исходных кодов ядра"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4992
+msgid ""
+"Some ports (such as kernel loadable modules) need the kernel source files so "
+"that the port can compile. Here is the correct way to determine if the user "
+"has them installed:"
+msgstr ""
+"Некоторые порты (например, загружаемые модули ядра) требуют исходные файлы "
+"ядра для компиляции порта. Вот правильный способ проверить, установлены ли "
+"они у пользователя:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4996
+#, no-wrap
+msgid "USES=\tkmod\n"
+msgstr "USES=\tkmod\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4999
+msgid ""
+"Apart from this check, the `kmod` feature takes care of most items that "
+"these ports need to take into account."
+msgstr ""
+"Помимо этой проверки, функция `kmod` учитывает большинство аспектов, которые "
+"необходимо принимать во внимание данным портам."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5001
+#, no-wrap
+msgid "Go Libraries"
+msgstr "Библиотеки Go"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5005
+msgid ""
+"Ports must not package or install Go libs or source code. Go ports must "
+"fetch the required deps at the normal fetch time and should only install the "
+"programs and things users need, not the things Go developers would need."
+msgstr ""
+"Порты не должны упаковывать или устанавливать библиотеки или исходный код "
+"Go. Порты Go должны загружать необходимые зависимости в обычное время "
+"загрузки и должны устанавливать только программы и то, что нужно "
+"пользователям, а не то, что нужно разработчикам на Go."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5007
+msgid "Ports should (in order of preference):"
+msgstr "Порты должны (в порядке предпочтения):"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5009
+msgid "Use vendored dependencies included with the package source."
+msgstr "Использовать зависимости, включенные в исходный код пакета."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5010
+msgid ""
+"Fetch the versions of deps specified by upstream (in the case of go.mod, "
+"vendor.json or similar)."
+msgstr ""
+"Получить версии зависимостей, указанные вышестоящим проектом (в случае "
+"go.mod, vendor.json или аналогичных)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5011
+msgid ""
+"As a last resort (deps are not included nor versions specified exactly) "
+"fetch versions of dependencies available at the time of upstream development/"
+"release."
+msgstr ""
+"В крайнем случае (зависимости не включены и версии не указаны точно) "
+"получить версии зависимостей, доступные на момент разработки/выпуска "
+"вышестоящего проекта."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5013
+#, no-wrap
+msgid "Haskell Libraries"
+msgstr "Библиотеки Haskell"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5017
+msgid ""
+"Just like in case of Go language, Ports must not package or install Haskell "
+"libraries. Haskell ports must link statically to their dependencies and "
+"fetch all distribution files on fetch stage."
+msgstr ""
+"Как и в случае с языком Go, коллекция портов не должна включать или "
+"устанавливать библиотеки Haskell. Порты Haskell должны статически "
+"линковаться со своими зависимостями и загружать все распространяемые файлы "
+"на этапе fetch."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5019
+#, no-wrap
+msgid "Shell Completion Files"
+msgstr "Файлы завершения командной оболочки"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5024
+msgid ""
+"Many modern shells (including bash, fish, tcsh and zsh) support parameter "
+"and/or option tab-completion. This support usually comes from completion "
+"files, which contain the definitions for how tab completion will work for a "
+"certain command. Ports sometimes ship with their own completion files, or "
+"porters may have created them themselves."
+msgstr ""
+"Многие современные оболочки (включая bash, fish, tcsh и zsh) поддерживают "
+"табуляцию для параметров и/или опций. Эта поддержка обычно обеспечивается "
+"файлами завершения, которые содержат определения того, как будет работать "
+"завершение по табуляции для определённой команды. Порты иногда поставляются "
+"со своими собственными файлами завершения, или разработчики портов могут "
+"создавать их самостоятельно."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5028
+msgid ""
+"When available, completion files should always be installed. It is not "
+"necessary to make an option for it. If an option is used, though, always "
+"enable it in `OPTIONS_DEFAULT`."
+msgstr ""
+"Если доступны файлы завершения, их всегда следует устанавливать. Нет "
+"необходимости создавать для этого опцию. Однако если опция используется, "
+"всегда включайте её в `OPTIONS_DEFAULT`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5030
+#, no-wrap
+msgid "Full shell completion file names"
+msgstr "Полные имена файлов завершения оболочки"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5034
+#, no-wrap
+msgid "`bash`"
+msgstr "`bash`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5035
+#, no-wrap
+msgid "[.filename]#${PREFIX}/etc/bash_completion.d# or [.filename]#${PREFIX}/share/bash-completion/completions#"
+msgstr "[.filename]#${PREFIX}/etc/bash_completion.d# or [.filename]#${PREFIX}/share/bash-completion/completions#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5037
+#, no-wrap
+msgid "(any unique file names in one of these folders)"
+msgstr "(любые уникальные имена файлов в одной из этих папок)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5038
+#, no-wrap
+msgid "`fish`"
+msgstr "`fish`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5039
+#, no-wrap
+msgid "[.filename]#${PREFIX}/share/fish/completions/${PORTNAME}.fish#"
+msgstr "[.filename]#${PREFIX}/share/fish/completions/${PORTNAME}.fish#"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5042
+#, no-wrap
+msgid "`zsh`"
+msgstr "`zsh`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5043
+#, no-wrap
+msgid "[.filename]#${PREFIX}/share/zsh/site-functions/_${PORTNAME}#"
+msgstr "[.filename]#${PREFIX}/share/zsh/site-functions/_${PORTNAME}#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5046
+msgid "Do not register any dependencies on the shells themselves."
+msgstr "Не регистрируйте зависимости от самих оболочек."
diff --git a/documentation/content/ru/books/porters-handbook/testing/_index.adoc b/documentation/content/ru/books/porters-handbook/testing/_index.adoc
index 57676e2f64..73b8cdff1f 100644
--- a/documentation/content/ru/books/porters-handbook/testing/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/testing/_index.adoc
@@ -1,22 +1,24 @@
---
-title: Глава 9. Тестирование вашего порта
-prev: books/porters-handbook/pkg-files
+description: 'Тестирование порта FreeBSD'
next: books/porters-handbook/upgrading
-showBookMenu: true
-weight: 9
params:
- path: "/books/porters-handbook/testing/"
+ path: /books/porters-handbook/testing/
+prev: books/porters-handbook/pkg-files
+showBookMenu: true
+tags: ["testing", "port", "Portclippy", "Portfmt", "Portlint", "poudriere", "sets"]
+title: 'Глава 10. Тестирование вашего порта'
+weight: 10
---
[[testing]]
-= Тестирование вашего порта
+= Тестирование порта
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 9
+:sectnumoffset: 10
:partnums:
:source-highlighter: rouge
:experimental:
@@ -58,7 +60,37 @@ endif::[]
Если `make describe` выдаёт строчку, а не ошибку, то для вас это пройдёт безболезненно. Обратитесь к файлу [.filename]#bsd.port.mk#, чтобы выяснить значение выдаваемых строк.
-Заметьте также, что запуск последней версии `portlint` (как указано в следующем разделе) приведёт к автоматическому запуску команды `make describe`.
+Также обратите внимание, что запуск актуальной версии `portlint` (как указано в следующем разделе) приведёт к автоматическому выполнению `make describe`.
+
+[[make-test]]
+== Запуск `make test`
+
+Даже если порт успешно собирается, рекомендуется убедиться, что программа корректно выполняет свои функции. Если исходный проект предоставляет тесты вместе с программным обеспечением, рекомендуется их запустить и проверить, что всё работает, как ожидается.
+
+Порт может автоматически включить тесты, используя переменную `TEST_TARGET`. Когда эта переменная установлена, она содержит имя цели тестирования порта. Обычно это просто `test`, но другие варианты включают `tests`, `check` или, в специфических случаях, такие значения, как `run_tests.py`.
+
+В дополнение к переменной `TEST_TARGET` фреймворк предоставляет следующие переменные для управления выполнением тестов:
+
+* `TEST_WRKSRC` — это каталог для выполнения тестов.
+* `TEST_ENV` содержит дополнительные переменные, которые передаются на этап тестирования.
+* `TEST_ARGS` содержит любые дополнительные аргументы, переданные на этапе тестирования.
+
+Примеры использования этих переменных можно найти в package:cad/xyce[], package:www/libjwt[] и других.
+
+[NOTE]
+====
+Убедитесь, что тесты не ломаются при обновлении порта.
+====
+
+
+[[testing-portclippy]]
+== Portclippy / Portfmt
+
+Эти инструменты поставляются из пакета:ports-mgmt/portfmt[].
+
+Portclippy — это линтер, проверяющий, расположены ли переменные в файле [.filename]#Makefile# в правильном порядке согласно crossref:order[porting-order,Порядку переменных в Makefile портов].
+
+Portfmt — это инструмент для автоматического форматирования [.filename]#Makefile#.
[[testing-portlint]]
== Portlint
@@ -68,13 +100,13 @@ endif::[]
Так как для обнаружения ошибок `portlint` использует эвристические методы, то им могут выдаваться и ошибочные предупреждения. Кроме того, время от времени нечто, отмечаемое как некорректность, из-за ограничений механизма создания портов не может быть сделано никак иначе. Если вы сомневаетесь, то лучше всего спросить в {freebsd-ports}.
[[testing-porttools]]
-== Port Tools
+== Инструменты для работы с портами
Программа package:ports-mgmt/porttools[] входит в состав Коллекции Портов.
-`port` является сценарием переднего плана, который может упростить вам задачу тестирования. Если вы хотите проверить новый порт или обновить существующий, то вы можете использовать `port test` для проверки вашего порта, включая проверку <<testing-portlint,`portlint`>>. Эта команда также находит и отображает любые файлы, которые невключенные в [.filename]#pkg-plist#. Смотрите следующий пример:
+`port` является сценарием переднего плана, который может упростить вам задачу тестирования. Если вы хотите проверить новый порт или обновить существующий, то вы можете использовать `port test` для проверки вашего порта, включая проверку crossref:testing[testing-portlint,`portlint`]. Эта команда также находит и отображает любые файлы, которые невключенные в [.filename]#pkg-plist#. Смотрите следующий пример:
-[source,shell]
+[source, shell]
....
# port test /usr/ports/net/csup
....
@@ -92,43 +124,417 @@ endif::[]
Проверьте, что ваше приложение не устанавливает чего-либо в каталог [.filename]#/usr/local# вместо `PREFIX`. Наличие явно указанных путей можно быстро проверить следующим образом:
-[source,shell]
+[source, shell]
....
-# make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`
+% make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`
....
Если что-то было установлено за пределами `PREFIX`, то процесс создания пакета сообщит об отсутствии файлов.
Это также стоит проверить с использованием поддержки каталога сборки (смотрите crossref:special[staging, Staging]):
-[source,shell]
+[source, shell]
....
-# make stage && make check-orphans && make package
+% make stage && make check-plist && make stage-qa && make package
....
-Эти проверки не найдут явно указанных путей внутри файлов порта и не проверят корректность использования `LOCALBASE` в качестве ссылки на файлы из других портов. Порт, временно установленный в [.filename]#/var/tmp/`make -V PORTNAME`#, следует проверять на работоспособность, чтобы убедиться в отсутствии проблем с путями.
+* `check-plist` проверяет отсутствующие в plist файлы и файлы в plist, которые не установлены портом.
+* `stage-qa` проверяет наличие распространённых проблем, таких как неправильный шебанг (интерпретаторная строка в первой строке скрипта), символьные ссылки, указывающие за пределы stage-директории,файлы с setuid битом и библиотеки с отладочной информацией...
+
+Эти тесты не обнаружат жёстко заданные пути в файлах порта, а также не проверят, что `LOCALBASE` используется корректно для ссылок на файлы из других портов. Временно установленный порт в [.filename]#/var/tmp/`make -V PORTNAME`# должен быть протестирован на корректную работу, чтобы убедиться в отсутствии проблем с путями.
-Переменная `PREFIX` не должна задаваться явно в файле [.filename]#Makefile# порта. Пользователи при установке порта могут задать в `PREFIX` свое собственное место, и порт должен учитывать это значение.
+`PREFIX` не должен быть явно установлен в [.filename]#Makefile# порта. Пользователи, устанавливающие порт, могут задать `PREFIX` в другом месте, и порт должен учитывать эту настройку.
-Обратитесь к программам/файлам из других портов с переменными, перечисленными выше, без указания явных маршрутов. Например, если ваш порт требует, чтобы макрос `PAGER` являлся полным путем утилиты `less`, не используйте строковый путь [.filename]#/usr/local/bin/less#. Вместо этого используйте `${LOCALBASE}`:
+Обращайтесь к программам и файлам из других портов с помощью упомянутых выше переменных, а не явных путей. Например, если порт требует, чтобы макрос `PAGER` содержал полный путь к `less`, не используйте явный путь [.filename]#/usr/local/bin/less#. Вместо этого используйте `${LOCALBASE}`:
[.programlisting]
....
-DPAGER=\"${LOCALBASE}/bin/less\"
....
-Путь с использованием `LOCALBASE` имеет больше шансов оставаться работоспособным, если системный администратор переместил всё дерево [.filename]#/usr/local# куда-то в другое место.
+Путь с `LOCALBASE` с большей вероятностью продолжит работать, если системный администратор переместил всё дерево [.filename]#/usr/local# в другое место.
-[[testing-tinderbox]]
-== Tinderbox
+[TIP]
+====
+Все эти тесты выполняются автоматически при запуске `poudriere testport` или `poudriere bulk -t`. Настоятельно рекомендуется каждому участнику разработки портов устанавливать и тестировать свои порты с помощью этого инструмента. Дополнительную информацию можно найти в crossref:testing[testing-poudriere, poudriere].
+====
+
+[[testing-poudriere]]
+== poudriere
-Если вы алчный контрибутор портов, то вы можете захотеть взглянуть на Tinderbox. Это мощная система построения и тестирования портов. Tinderbox можно установить, используя порт package:ports-mgmt/tinderbox[]. Обязательно прочитайте поставляемую документацию, поскольку конфигурация не является тривиальной.
+Для контрибьютора портов poudriere является одним из самых важных и полезных инструментов для тестирования и сборки. Его основные возможности включают:
-Для получения подробностей посетите http://tinderbox.marcuscom.com/[вебсайт Tinderbox].
+* Массовая сборка всего дерева портов, определенных подмножеств дерева портов или отдельного порта с его зависимостями
+* Автоматическая упаковка результатов сборки
+* Генерация файлов журнала сборки для каждого порта
+* Предоставление подписанного репозитория man:pkg[8]
+* Тестирование сборки портов перед отправкой патча в трекер ошибок FreeBSD или внесением изменений в дерево портов
+* Тестирование успешных сборок портов с использованием различных параметров
-[[testing-poudriere]]
-== Poudriere
+Поскольку poudriere выполняет сборку в чистой среде man:jail[8] и использует возможности man:zfs[8], он имеет несколько преимуществ по сравнению с традиционным тестированием на основной системе:
+
+* Отсутствие загрязнения основной среды: никаких оставшихся файлов, случайных удалений или изменений существующих конфигурационных файлов.
+* Проверяет [.filename]#pkg-plist# на наличие отсутствующих или лишних записей
+* Коммиттеры портов иногда запрашивают журнал poudriere вместе с отправкой патча, чтобы оценить, готов ли патч для интеграции в дерево портов
+
+Также его настройка и использование довольно просты, он не имеет зависимостей и будет работать в любой поддерживаемой версии FreeBSD. В этом разделе показано, как установить, настроить и запустить poudriere в рамках обычного рабочего процесса разработчика портов.
+
+Примеры в этом разделе показывают стандартную структуру файлов, принятую в FreeBSD. Внесите соответствующие изменения, если у вас используются другие настройки. Дерево портов, обозначаемое как `${PORTSDIR}`, находится в [.filename]#/usr/ports#. По умолчанию `${LOCALBASE}` и `${PREFIX}` указывают на [.filename]#/usr/local#.
+
+[[testing-poudriere-installing]]
+=== Установка poudriere
+
+poudriere доступен в дереве портов в пакете package:ports-mgmt/poudriere[]. Его можно установить с помощью man:pkg[8] или из портов:
+
+[source, shell]
+....
+# pkg install poudriere
+....
+
+или
+
+[source, shell]
+....
+# make -C /usr/ports/ports-mgmt/poudriere install clean
+....
+
+Также существует версия poudriere в разработке, которая в конечном итоге станет следующим релизом. Она доступна в пакете:ports-mgmt/poudriere-devel[]. Эта версия используется для официальных сборок пакетов FreeBSD, поэтому она хорошо протестирована. В ней часто появляются новые интересные функции. Коммиттер портов захочет использовать версию в разработке, так как именно она используется в продакшене и содержит все новые функции, которые гарантируют, что всё будет работать идеально. Контрибьютору не обязательно нужны эти функции, так как наиболее важные исправления переносятся в выпущенную версию. Основная причина использования версии в разработке для сборки официальных пакетов заключается в её скорости — она позволяет сократить время полной сборки с 18 до 17 часов при использовании высокопроизводительного сервера с 32 CPU и 128 ГБ оперативной памяти. Эти оптимизации не будут столь значимы при сборке портов на настольном компьютере.
+
+[[testing-poudriere-setup]]
+=== Настройка poudriere
+
+Порт устанавливает файл конфигурации по умолчанию, [.filename]#/usr/local/etc/poudriere.conf#. Каждый параметр описан в этом файле конфигурации.
+
+Вот минимальный пример конфигурационного файла:
+
+[.programlisting]
+....
+ZPOOL=zroot
+BASEFS=/usr/local/poudriere
+DISTFILES_CACHE=/usr/ports/distfiles
+RESOLV_CONF=/etc/resolv.conf
+....
+
+`ZPOOL`::
+Имя пула хранения ZFS, который будет использовать poudriere. Должно быть указано в выводе команды `zpool status`.
+
+`BASEFS`::
+Корневая точка монтирования файловых систем poudriere. Эта запись приведет к тому, что poudriere смонтирует `tank/poudriere` в `/poudriere`.
+
+`DISTFILES_CACHE`::
+Определяет, где хранятся distfiles. В этом примере poudriere и хост используют общий каталог для хранения distfiles. Это позволяет избежать загрузки tарболов, которые уже присутствуют в системе. Пожалуйста, создайте этот каталог, если он ещё не существует, чтобы poudriere мог его найти.
+
+`RESOLV_CONF`::
+Используйте файл [.filename]#/etc/resolv.conf# хоста внутри клеток для DNS. Это необходимо, чтобы клетки могли разрешать URL-адреса distfiles при загрузке. Это не требуется при использовании прокси. Обратитесь к файлу конфигурации по умолчанию для настройки прокси.
+
+[[testing-poudriere-create-jails]]
+=== Создание клеток poudriere
+
+Создайте базовые клетки, которые poudriere будет использовать для сборки:
+
+[source, shell]
+....
+# poudriere jail -c -j 131Ramd64 -v 13.1-RELEASE -a amd64
+....
+
+Загрузите `13.1-RELEASE` для `amd64` с FTP-сервера, указанного в `FREEBSD_HOST` в [.filename]#poudriere.conf#, создайте ZFS-файловую систему `tank/poudriere/jails/131Ramd64`, смонтируйте её в [.filename]#/poudriere/jails/131Ramd64# и распакуйте тарболлы `13.1-RELEASE` в эту файловую систему.
+
+[source, shell]
+....
+# poudriere jail -c -j 12i386 -v stable/12 -a i386 -m git+https
+....
+
+Создайте `tank/poudriere/jails/12i386`, смонтируйте его на [.filename]#/poudriere/jails/12i386#, затем извлеките верхушку ветки Git `FreeBSD-12-STABLE` из `GIT_HOST` в [.filename]#poudriere.conf# или по умолчанию `git.freebsd.org` в [.filename]#/poudriere/jails/12i386/usr/src#, после чего выполните `buildworld` и установите его в [.filename]#/poudriere/jails/12i386#.
+
+[NOTE]
+====
+Хотя возможно собрать более новую версию FreeBSD на старой версии, в большинстве случаев она не запустится. Например, если требуется клетка на `stable/13`, то хост также должен работать на `stable/13`. Запуск `13.1-RELEASE` недостаточен.
+====
+
+[NOTE]
+====
+Для создания клетки poudriere для `14.0-CURRENT`:
+
+[source, shell]
+....
+# poudriere jail -c -j 14amd64 -v main -a amd64 -m git+https
+....
+
+Для запуска клетки `14.0-CURRENT` poudriere хостовая система должна работать под управлением `14.0-CURRENT`. В общем случае, более новые ядра могут собирать и запускать более старые клетки. Например, ядро `14.0-CURRENT` может собирать и запускать клетку `12.4-STABLE`, если параметр ядра `COMPAT_FREEBSD12` был скомпилирован (включен по умолчанию в конфигурации ядра [.filename]#GENERIC# `14.0-CURRENT`).
+====
+
+Список клеток, известных poudriere, можно вывести с помощью команды `poudriere jail -l`:
+
+[source, shell]
+....
+# poudriere jail -l
+JAILNAME VERSION ARCH METHOD
+131Ramd64 13.1-RELEASE amd64 ftp
+12i386 12.4-STABLE i386 git+https
+....
+
+[[testing-poudriere-maintaining-jails]]
+=== Обновление клеток poudriere
+
+Управление обновлениями очень простое. Команда:
+
+[source, shell]
+....
+# poudriere jail -u -j JAILNAME
+....
+
+обновляет указанную клетку до последней доступной версии. Для релизов FreeBSD обновление до последнего уровня исправлений с помощью man:freebsd-update[8]. Для версий FreeBSD, собранных из исходников, обновление до последней ревизии git в ветке.
+
+[TIP]
+====
+Для клеток, использующих метод `git+*`, полезно добавить `-J _КоличествоПараллельныхСборок_` для ускорения сборки за счёт увеличения количества параллельных задач компиляции. Например, если на машине для сборки 6 CPU, используйте:
+
+[source, shell]
+....
+# poudriere jail -u -J 6 -j JAILNAME
+....
+
+====
+
+[[testing-poudriere-ports-tree]]
+=== Настройка деревьев портов для использования с poudriere
+
+Существует несколько способов использования деревьев портов в poudriere. Наиболее простой способ — позволить poudriere создать для себя дерево портов по умолчанию, используя link:{handbook}mirrors/#git[Git]:
+
+[source, shell]
+....
+# poudriere ports -c -m git+https -B main
+....
+
+Эти команды создают `tank/poudriere/ports/default`, монтируют его в [.filename]#/poudriere/ports/default# и заполняют с помощью Git. После этого он включается в список известных деревьев портов:
+
+[source, shell]
+....
+# poudriere ports -l
+PORTSTREE METHOD TIMESTAMP PATH
+default git+https 2020-07-20 04:23:56 /poudriere/ports/default
+....
+
+[NOTE]
+====
+Обратите внимание, что дерево портов "default" является особым. Каждая из команд сборки, объяснённых далее, будет неявно использовать это дерево портов, если явно не указано иное. Чтобы использовать другое дерево, добавьте `-p _treename_` к командам.
+====
+
+Лучший способ работы с локальными изменениями для разработчика портов — использовать link:{handbook}mirrors/#git[Git]. Как и при создании клеток, можно использовать другой метод для создания дерева портов. Чтобы добавить дополнительное дерево портов для тестирования локальных изменений и разработки портов, предпочтительно использовать клонирование дерева через git (как описано выше).
+
+[[testing-poudriere-ports-tree-manual]]
+=== Использование управляемых вручную деревьев портов с помощью poudriere
-Если вы контрибутор портов, подумайте об установке poudriere. Это мощная система для построения и тестирования портов. Poudriere можно установить из package:ports-mgmt/poudriere[].
+В зависимости от рабочего процесса может быть крайне полезно использовать деревья портов, которые поддерживаются вручную. Например, если существует локальная копия дерева портов в [.filename]#/work/ports#, укажите poudriere на это расположение:
+
+[source, shell]
+....
+# poudriere ports -c -m null -M /work/ports -p development
+....
+
+Это будет указано в таблице известных деревьев:
+
+[source, shell]
+....
+# poudriere ports -l
+PORTSTREE METHOD TIMESTAMP PATH
+development null 2020-07-20 05:06:33 /work/ports
+....
+
+[NOTE]
+====
+Тире или `null` в колонке `METHOD` означает, что poudriere никогда не будет обновлять или изменять это дерево портов. Полностью на пользователе лежит ответственность за поддержку этого дерева, включая все локальные изменения, которые могут использоваться для тестирования новых портов и отправки исправлений.
+====
+
+[[testing-poudriere-ports-tree-updating]]
+=== Обновление деревьев портов poudriere
+
+Так же просто, как с клетками, описанными ранее:
+
+[source, shell]
+....
+# poudriere ports -u -p PORTSTREE
+....
+
+Обновит указанное _PORTSTREE_, дерево, указанное в выводе команды `poudriere -l`, до последней доступной ревизии на официальных серверах.
+
+[NOTE]
+====
+Деревья портов без метода, см. crossref:testing[testing-poudriere-ports-tree-manual, Использование вручную управляемых деревьев портов с помощью poudriere], не могут быть обновлены таким образом и должны обновляться вручную сопровождающим портов.
+====
+
+[[testing-poudriere-testing-ports]]
+=== Тестирование портов
+
+После настройки клеток и деревьев портов можно проверить результат изменений, внесенных участником в дерево портов.
+
+Например, локальные изменения в порте package:www/firefox[], расположенном в [.filename]#/work/ports/www/firefox#, можно протестировать в ранее созданной клетке 13.1-RELEASE:
+
+[source, shell]
+....
+# poudriere testport -j 131Ramd64 -p development -o www/firefox
+....
+
+Это соберет все зависимости Firefox. Если зависимость уже была собрана ранее и остается актуальной, будет установлен готовый пакет. Если для зависимости нет актуального пакета, он будет собран с параметрами по умолчанию в клетке. Затем будет собран сам Firefox.
+
+Полная сборка каждого порта записывается в [.filename]#/poudriere/data/logs/bulk/131Ri386-development/build-time/logs#.
+
+Имя каталога `131Ri386-development` формируется из аргументов `-j` и `-p` соответственно. Для удобства также поддерживается символическая ссылка [.filename]#/poudriere/data/logs/bulk/131Ri386-development/latest#. Эта ссылка указывает на последний каталог _времени сборки_. Также в этом каталоге находится файл [.filename]#index.html#, который позволяет наблюдать за процессом сборки через веб-браузер.
+
+По умолчанию poudriere очищает клетки и оставляет файлы журналов в указанных выше каталогах. Для упрощения анализа клетки можно оставить запущенными после сборки, добавив `-i` к `testport`:
+
+[source, shell]
+....
+# poudriere testport -j 131Ramd64 -p development -i -o www/firefox
+....
+
+После завершения сборки, независимо от того, была ли она успешной, в клетке предоставляется оболочка. Эта оболочка используется для дальнейшего исследования. Можно указать poudriere оставить клетку запущенной после завершения сборки с помощью `-I`. poudriere покажет команду для выполнения, когда клетка больше не нужна. Затем можно использовать man:jexec[8] для входа в неё:
+
+[source, shell]
+....
+# poudriere testport -j 131Ramd64 -p development -I -o www/firefox
+[...]
+====>> Installing local Pkg repository to /usr/local/etc/pkg/repos
+====>> Leaving jail 131Ramd64-development-n running, mounted at /poudriere/data/.m/131Ramd64-development/ref for interactive run testing
+====>> To enter jail: jexec 131Ramd64-development-n env -i TERM=$TERM /usr/bin/login -fp root
+====>> To stop jail: poudriere jail -k -j 131Ramd64 -p development
+# jexec 131Ramd64-development-n env -i TERM=$TERM /usr/bin/login -fp root
+# [do some stuff in the jail]
+# exit
+# poudriere jail -k -j 131Ramd64 -p development
+====>> Umounting file systems
+....
+
+Неотъемлемой частью инфраструктуры сборки портов FreeBSD является возможность настройки портов под личные предпочтения с помощью опций. Их также можно тестировать с помощью poudriere. Добавление опции `-c`:
+
+[source, shell]
+....
+# poudriere testport -j 131Ramd64 -c -o www/firefox
+....
+
+Представляет диалог настройки порта перед его сборкой. Порты, указанные после `-o` в формате `_категория_/_имя_порта_`, будут использовать указанные опции, все зависимости будут использовать опции по умолчанию. Тестирование зависимых портов с нестандартными опциями может быть выполнено с использованием наборов, см. crossref:testing[testing-poudriere-sets, Использование наборов].
+
+[TIP]
+====
+При тестировании портов, где файл [.filename]#pkg-plist# изменяется во время сборки в зависимости от выбранных опций, рекомендуется выполнить тестовый запуск со всеми выбранными опциями _и_ один без выбранных опций.
+====
+
+[[testing-poudriere-sets]]
+=== Использование наборов
+
+Для всех действий, связанных со сборкой, можно указать так называемый _набор_ с помощью `-z _имя_набора_`. Набор относится к полностью независимой сборке. Это позволяет, например, использовать `testport` с нестандартными параметрами для зависимых портов.
+
+Для использования наборов poudriere ожидает, что будет использована структура каталогов, аналогичная `PORT_DBDIR`, по умолчанию [.filename]#/var/db/ports#, в его конфигурационной директории. Этот каталог затем монтируется с помощью man:nullfs[5] в клетки, где собираются порты и их зависимости. Обычно подходящую начальную точку можно получить, рекурсивно скопировав существующий `PORT_DBDIR` в [.filename]#/usr/local/etc/poudriere.d/jailname-portname-setname-options#. Это подробно описано в man:poudriere[8]. Например, для тестирования package:www/firefox[] в определённом наборе с именем `devset`, добавьте параметр `-z devset` к команде `testport`:
+
+[source, shell]
+....
+# poudriere testport -j 131Ramd64 -p development -z devset -o www/firefox
+....
+
+Это проверит наличие этих каталогов в следующем порядке:
+
+* [.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-devset-options#
+* [.filename]#/usr/local/etc/poudriere.d/131Ramd64-devset-options#
+* [.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-options#
+* [.filename]#/usr/local/etc/poudriere.d/devset-options#
+* [.filename]#/usr/local/etc/poudriere.d/development-options#
+* [.filename]#/usr/local/etc/poudriere.d/131Ramd64-options#
+* [.filename]#/usr/local/etc/poudriere.d/options#
+
+Из этого списка poudriere man:nullfs[5] монтирует _первое существующее_ дерево каталогов в директорию [.filename]#/var/db/ports# сборных клеток. Таким образом, все пользовательские настройки используются для всех портов во время этого запуска `testport`.
+
+После предоставления структуры каталогов для набора можно изменить параметры для конкретного порта. Например:
+
+[source, shell]
+....
+# poudriere options -c www/firefox -z devset
+....
+
+Отображается диалог настройки package:www/firefox[], где можно редактировать параметры. Выбранные параметры сохраняются в набор `devset`.
+
+[NOTE]
+====
+poudriere очень гибок в настройке опций. poudriere можно настроить для конкретных клеток, деревьев портов и для нескольких портов одной командой. Подробности см. в man:poudriere[8].
+====
+
+[[testing-poudriere-make-conf]]
+=== Предоставление пользовательского файла [.filename]#make.conf#
+
+Подобно использованию наборов, poudriere также использует пользовательский [.filename]#make.conf#, если он предоставлен. Для этого не требуется специального аргумента командной строки. Вместо этого poudriere ищет существующие файлы, соответствующие схеме именования, производной от командной строки. Например:
+
+[source, shell]
+....
+# poudriere testport -j 131Ramd64 -p development -z devset -o www/firefox
+....
+
+заставляет poudriere проверять наличие этих файлов в следующем порядке:
+
+* [.filename]#/usr/local/etc/poudriere.d/make.conf#
+* [.filename]#/usr/local/etc/poudriere.d/devset-make.conf#
+* [.filename]#/usr/local/etc/poudriere.d/development-make.conf#
+* [.filename]#/usr/local/etc/poudriere.d/131Ramd64-make.conf#
+* [.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-make.conf#
+* [.filename]#/usr/local/etc/poudriere.d/131Ramd64-devset-make.conf#
+* [.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-devset-make.conf#
+
+В отличие от наборов, все найденные файлы будут добавлены, _в указанном порядке_, в один [.filename]#make.conf# внутри клеток сборки. Таким образом, можно задать общие переменные make, предназначенные для влияния на все сборки, в файле [.filename]#/usr/local/etc/poudriere.d/make.conf#. Специальные переменные, предназначенные только для определённых клеток или наборов, можно задать в специализированных файлах [.filename]#make.conf#, например, в [.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-devset-make.conf#.
+
+[[testing-poudriere-sets-perl]]
+.Использование [.filename]#make.conf# для изменения Perl по умолчанию
+[example]
+====
+
+Для сборки набора с нестандартной версией Perl, например, `5.20`, используя набор с именем `perl5-20`, создайте файл [.filename]#perl5-20-make.conf# со следующей строкой:
+
+[.programlisting]
+....
+DEFAULT_VERSIONS+= perl=5.20
+....
+[NOTE]
+****
+Обратите внимание на использование `+=`, чтобы содержимое переменной не было перезаписано, если она уже установлена в стандартном [.filename]#make.conf#.
+****
+
+====
+
+[[testing-poudriere-pruning-distfiles]]
+=== Удаление ненужных файлов дистрибутива
+
+poudriere имеет встроенный механизм для удаления устаревших файлов дистрибутива, которые больше не используются ни одним портом данного дерева. Команда
+
+[source, shell]
+....
+# poudriere distclean -p portstree
+....
+
+будет сканировать папку файлов дистрибутива, `DISTFILES_CACHE` в [.filename]#poudriere.conf#, сравнивая ее с деревом портов, указанным аргументом `-p _portstree_`, и запрашивать подтверждение на удаление этих файлов дистрибутива. Чтобы пропустить запрос и удалить все неиспользуемые файлы без подтверждения, можно добавить аргумент `-y`:
+
+[source, shell]
+....
+# poudriere distclean -p portstree -y
+....
+
+[[testing-debugging-ports]]
+== Отладка портов
+
+Иногда что-то идёт не так, и порт не работает во время выполнения. Фреймворк предоставляет некоторые средства для отладки портов. Эти вспомогательные инструменты ограничены, поскольку способ отладки порта во многом зависит от используемой технологии. Следующие переменные помогают в отладке портов:
+
+* `WITH_DEBUG`. Если установлено, порты собираются с отладочными символами.
+* `WITH_DEBUG_PORTS`. Указывает список портов, которые должны собираться с установленным `WITH_DEBUG`.
+* `DEBUG_FLAGS`. Используется для указания дополнительных флагов для `CFLAGS`. По умолчанию `-g`.
+
+Когда `WITH_DEBUG` установлен, глобально или для списка портов, результирующие бинарные файлы не лишаются символов.
+
+Эти переменные могут быть указаны в [.filename]#make.conf# или в командной строке:
+
+[source, shell]
+....
+# cd category/port && make -DWITH_DEBUG DEBUG_FLAGSS="-g -O0"
+....
+
+[NOTE]
+====
+Если порт собирается с использованием package:ports-mgmt/poudriere[], отладочные переменные должны быть указаны в [.filename]#make.conf# poudriere, а не в [.filename]#/etc/make.conf#. Подробности см. в документации package:ports-mgmt/poudriere[].
+====
-Для получения подробной информации посетите http://fossil.etoilebsd.net/poudriere[вебсайт Poudriere].
+Пожалуйста, обратитесь к отладочной информации в extref:{developers-handbook}tools[Руководстве разработчика, отладка] для получения более подробной информации о доступных инструментах отладки.
diff --git a/documentation/content/ru/books/porters-handbook/testing/_index.po b/documentation/content/ru/books/porters-handbook/testing/_index.po
new file mode 100644
index 0000000000..30ce20d0d6
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/testing/_index.po
@@ -0,0 +1,1685 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-09-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbooktesting_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:1
+#, no-wrap
+msgid "Testing a FreeBSD Port"
+msgstr "Тестирование порта FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:1
+#, no-wrap
+msgid "Chapter 10. Testing the Port"
+msgstr "Глава 10. Тестирование вашего порта"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:14
+#, no-wrap
+msgid "Testing the Port"
+msgstr "Тестирование порта"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:52
+#, no-wrap
+msgid "Running `make describe`"
+msgstr "Запуск `make describe`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:57
+msgid ""
+"Several of the FreeBSD port maintenance tools, such as man:portupgrade[1], "
+"rely on a database called [.filename]#/usr/ports/INDEX# which keeps track of "
+"such items as port dependencies. [.filename]#INDEX# is created by the top-"
+"level [.filename]#ports/Makefile# via `make index`, which descends into each "
+"port subdirectory and executes `make describe` there. Thus, if `make "
+"describe` fails in any port, no one can generate [.filename]#INDEX#, and "
+"many people will quickly become unhappy."
+msgstr ""
+"Некоторые утилиты FreeBSD для сопровождения портов, например, "
+"man:portupgrade[1], опираются на базу данных с именем [.filename]#/usr/ports/"
+"INDEX#, в которой отслеживаются такие характеристики портов, как их "
+"зависимости. Файл [.filename]#INDEX# создаётся при помощи [.filename]#ports/"
+"Makefile# верхнего уровня по команде `make index`, спускающейся в подкаталог "
+"каждого порта и выполняющей в нём `make describe`. Таким образом, если "
+"выполнение `make describe` с каким-либо портом завершится неудачно, то "
+"никому не удастся создать [.filename]#INDEX#, при этом много людей вскоре "
+"станут несчастны."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:62
+msgid ""
+"It is important to be able to generate this file no matter what options are "
+"present in [.filename]#make.conf#, so please avoid doing things such as "
+"using `.error` statements when (for instance) a dependency is not "
+"satisfied. (See crossref:porting-dads[dads-dot-error,Avoid Use of the "
+"`.error` Construct].)"
+msgstr ""
+"Возможность генерировать этот файл очень важна вне зависимости от того, "
+"какие параметры присутствуют в [.filename]#make.conf#, поэтому, пожалуйста, "
+"избегайте, таких вещей, как использование декларации `.error`, когда (к "
+"примеру) требования к зависимости не было удовлетворено. (Смотрите "
+"crossref:porting-dads[dads-dot-error, Избегайте использования конструкции "
+"`.error`].)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:66
+msgid ""
+"If `make describe` produces a string rather than an error message, "
+"everything is probably safe. See [.filename]#bsd.port.mk# for the meaning "
+"of the string produced."
+msgstr ""
+"Если `make describe` выдаёт строчку, а не ошибку, то для вас это пройдёт "
+"безболезненно. Обратитесь к файлу [.filename]#bsd.port.mk#, чтобы выяснить "
+"значение выдаваемых строк."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:68
+msgid ""
+"Also note that running a recent version of `portlint` (as specified in the "
+"next section) will cause `make describe` to be run automatically."
+msgstr ""
+"Также обратите внимание, что запуск актуальной версии `portlint` (как "
+"указано в следующем разделе) приведёт к автоматическому выполнению `make "
+"describe`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:70
+#, no-wrap
+msgid "Running `make test`"
+msgstr "Запуск `make test`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:76
+msgid ""
+"Even if the port builds fine, it is a good idea to ensure that the software "
+"correctly does what it is supposed to do. If the original upstream project "
+"provides tests along with the software, it is a good idea to run them and "
+"check everything works as expected."
+msgstr ""
+"Даже если порт успешно собирается, рекомендуется убедиться, что программа "
+"корректно выполняет свои функции. Если исходный проект предоставляет тесты "
+"вместе с программным обеспечением, рекомендуется их запустить и проверить, "
+"что всё работает, как ожидается."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:81
+msgid ""
+"A port can enable tests automatically by using the `TEST_TARGET` variable. "
+"When set, this variable contains the name of the testing target of the "
+"port. This is usually just `test` but other names include `tests`, `check` "
+"or for specific cases things like `run_tests.py`."
+msgstr ""
+"Порт может автоматически включить тесты, используя переменную `TEST_TARGET`. "
+"Когда эта переменная установлена, она содержит имя цели тестирования порта. "
+"Обычно это просто `test`, но другие варианты включают `tests`, `check` или, "
+"в специфических случаях, такие значения, как `run_tests.py`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:84
+msgid ""
+"In addition to the `TEST_TARGET` variable the framework provides the "
+"following variables to control the tests execution:"
+msgstr ""
+"В дополнение к переменной `TEST_TARGET` фреймворк предоставляет следующие "
+"переменные для управления выполнением тестов:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:86
+msgid "`TEST_WRKSRC` is the directory to do the tests in."
+msgstr "`TEST_WRKSRC` — это каталог для выполнения тестов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:87
+msgid ""
+"`TEST_ENV` contains additional variables to be passed to the test stage."
+msgstr ""
+"`TEST_ENV` содержит дополнительные переменные, которые передаются на этап "
+"тестирования."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:88
+msgid "`TEST_ARGS` contains any extra arguments passed to the test stage."
+msgstr ""
+"`TEST_ARGS` содержит любые дополнительные аргументы, переданные на этапе "
+"тестирования."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:91
+msgid ""
+"Examples of use of these variables can be found in package:cad/xyce[], "
+"package:www/libjwt[] and others."
+msgstr ""
+"Примеры использования этих переменных можно найти в package:cad/xyce[], "
+"package:www/libjwt[] и других."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:95
+msgid "Please make sure that tests do not break when updating a port."
+msgstr "Убедитесь, что тесты не ломаются при обновлении порта."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:99
+#, no-wrap
+msgid "Portclippy / Portfmt"
+msgstr "Portclippy / Portfmt"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:102
+msgid "Those tools come from package:ports-mgmt/portfmt[]."
+msgstr "Эти инструменты поставляются из пакета:ports-mgmt/portfmt[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:104
+msgid ""
+"Portclippy is a linter that checks if variables in the [.filename]#Makefile# "
+"are in the correct order according to crossref:order[porting-order,Order of "
+"Variables in Port Makefiles]."
+msgstr ""
+"Portclippy — это линтер, проверяющий, расположены ли переменные в файле "
+"[.filename]#Makefile# в правильном порядке согласно crossref:order[porting-"
+"order,Порядку переменных в Makefile портов]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:106
+msgid "Portfmt is a tool for automatically formatting [.filename]#Makefile#."
+msgstr ""
+"Portfmt — это инструмент для автоматического форматирования "
+"[.filename]#Makefile#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:108
+#, no-wrap
+msgid "Portlint"
+msgstr "Portlint"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:113
+msgid ""
+"Do check the port with crossref:quick-porting[porting-portlint,`portlint`] "
+"before submitting or committing it. `portlint` warns about many common "
+"errors, both functional and stylistic. For a new port, `portlint -A` is the "
+"most thorough; for an existing port, `portlint -C` is sufficient."
+msgstr ""
+"Проверьте свою работу командой crossref:quick-porting[porting-"
+"portlint,`portlint`] перед тем, как её отослать или перенести в дерево "
+"портов. `portlint` предупреждает вас о многих распространённых ошибках, как "
+"функциональных, так и стилистических. Для нового (или скопированного внутри "
+"хранилища) порта самым подходящим является запуск `portlint -A`; для уже "
+"существующего порта достаточно будет запустить `portlint -C`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:117
+msgid ""
+"Since `portlint` uses heuristics to try to figure out errors, it can produce "
+"false positive warnings. In addition, occasionally something that is "
+"flagged as a problem really cannot be done in any other way due to "
+"limitations in the ports framework. When in doubt, the best thing to do is "
+"ask on {freebsd-ports}."
+msgstr ""
+"Так как для обнаружения ошибок `portlint` использует эвристические методы, "
+"то им могут выдаваться и ошибочные предупреждения. Кроме того, время от "
+"времени нечто, отмечаемое как некорректность, из-за ограничений механизма "
+"создания портов не может быть сделано никак иначе. Если вы сомневаетесь, то "
+"лучше всего спросить в {freebsd-ports}."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:119
+#, no-wrap
+msgid "Port Tools"
+msgstr "Инструменты для работы с портами"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:122
+msgid ""
+"The package:ports-mgmt/porttools[] program is part of the Ports Collection."
+msgstr ""
+"Программа package:ports-mgmt/porttools[] входит в состав Коллекции Портов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:128
+msgid ""
+"`port` is the front-end script, which can help simplify the testing job. "
+"Whenever a new port or an update to an existing one needs testing, use `port "
+"test` to test the port, including the crossref:testing[testing-"
+"portlint,`portlint`] checking. This command also detects and lists any "
+"files that are not listed in [.filename]#pkg-plist#. For example:"
+msgstr ""
+"`port` является сценарием переднего плана, который может упростить вам "
+"задачу тестирования. Если вы хотите проверить новый порт или обновить "
+"существующий, то вы можете использовать `port test` для проверки вашего "
+"порта, включая проверку crossref:testing[testing-portlint,`portlint`]. Эта "
+"команда также находит и отображает любые файлы, которые невключенные в "
+"[.filename]#pkg-plist#. Смотрите следующий пример:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:132
+#, no-wrap
+msgid "# port test /usr/ports/net/csup\n"
+msgstr "# port test /usr/ports/net/csup\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:135
+#, no-wrap
+msgid "`PREFIX` and `DESTDIR`"
+msgstr "`PREFIX` и `DESTDIR`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:140
+msgid ""
+"`PREFIX` determines where the port will be installed. It defaults to "
+"[.filename]#/usr/local#, but can be set by the user to a custom path like "
+"[.filename]#/opt#. The port must respect the value of this variable."
+msgstr ""
+"Переменная `PREFIX` определяет, куда будет установлен порт. По умолчанию это "
+"[.filename]#/usr/local#, но может меняться пользователем на собственный "
+"путь, такой как [.filename]#/opt#. В вашем порту значение этой переменной "
+"должно учитываться."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:145
+msgid ""
+"`DESTDIR`, if set by the user, determines the complete alternative "
+"environment, usually a jail or an installed system mounted somewhere other "
+"than [.filename]#/#. A port will actually install into [.filename]#DESTDIR/"
+"PREFIX#, and register with the package database in [.filename]#DESTDIR/var/"
+"db/pkg#. `DESTDIR` is handled automatically by the ports infrastructure "
+"with man:chroot[8]. There is no need for modifications or any extra care to "
+"write `DESTDIR`-compliant ports."
+msgstr ""
+"Если пользователь установил переменную `DESTDIR`, то она определяет полное "
+"альтернативное окружение, обычно, это jail или установленная система, "
+"смонтированная в месте, отличном от [.filename]#/#. На самом деле порт "
+"устанавливается в [.filename]#DESTDIR/PREFIX# и регистрируется в базе данных "
+"пакетов в [.filename]#DESTDIR/var/db/pkg#. Поскольку управление `DESTDIR` "
+"производится автоматически инфраструктурой портов с помощью man:chroot[8], "
+"вам не нужны никакие изменения или проявление особой осторожности при "
+"написании портов, совместымых с `DESTDIR`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:148
+msgid ""
+"The value of `PREFIX` will be set to `LOCALBASE` (defaulting to [.filename]#/"
+"usr/local#). If `USE_LINUX_PREFIX` is set, `PREFIX` will be `LINUXBASE` "
+"(defaulting to [.filename]#/compat/linux#)."
+msgstr ""
+"Значение переменной `PREFIX` будет установлено в `LOCALBASE` (по умолчанию "
+"[.filename]#/usr/local#). Если задана переменная `USE_LINUX_PREFIX`, то "
+"`PREFIX` примет значение `LINUXBASE` (по умолчанию [.filename]#/compat/"
+"linux#)."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:152
+msgid ""
+"Avoiding hard-coded [.filename]#/usr/local# paths in the source makes the "
+"port much more flexible and able to cater to the needs of other sites. "
+"Often, this can be accomplished by replacing occurrences of [.filename]#/usr/"
+"local# in the port's various [.filename]##Makefile##s with `${PREFIX}`. "
+"This variable is automatically passed down to every stage of the build and "
+"install processes."
+msgstr ""
+"Избегание явно прописываемых путей [.filename]#/usr/local# в исходном коде "
+"сделает порт гораздо более гибким и способным удовлетворить потребности "
+"других серверов. Часто этого можно добиться простой заменой строк "
+"[.filename]#/usr/local# в различных файлах [.filename]#Makefile# внутри "
+"порта на `${PREFIX}`. Эта переменная автоматически передаётся далее на "
+"каждом этапе построения и установки."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:155
+msgid ""
+"Make sure the application is not installing things in [.filename]#/usr/"
+"local# instead of `PREFIX`. A quick test for such hard-coded paths is:"
+msgstr ""
+"Проверьте, что ваше приложение не устанавливает чего-либо в каталог "
+"[.filename]#/usr/local# вместо `PREFIX`. Наличие явно указанных путей можно "
+"быстро проверить следующим образом:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:159
+#, no-wrap
+msgid "% make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`\n"
+msgstr "% make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:162
+msgid ""
+"If anything is installed outside of `PREFIX`, the package creation process "
+"will complain that it cannot find the files."
+msgstr ""
+"Если что-то было установлено за пределами `PREFIX`, то процесс создания "
+"пакета сообщит об отсутствии файлов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:164
+msgid ""
+"In addition, it is worth checking the same with the stage directory support "
+"(see crossref:special[staging,Staging]):"
+msgstr ""
+"Это также стоит проверить с использованием поддержки каталога сборки "
+"(смотрите crossref:special[staging, Staging]):"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:168
+#, no-wrap
+msgid "% make stage && make check-plist && make stage-qa && make package\n"
+msgstr "% make stage && make check-plist && make stage-qa && make package\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:171
+msgid ""
+"`check-plist` checks for files missing from the plist, and files in the "
+"plist that are not installed by the port."
+msgstr ""
+"`check-plist` проверяет отсутствующие в plist файлы и файлы в plist, которые "
+"не установлены портом."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:172
+msgid ""
+"`stage-qa` checks for common problems like bad shebang, symlinks pointing "
+"outside the stage directory, setuid files, and non-stripped libraries..."
+msgstr ""
+"`stage-qa` проверяет наличие распространённых проблем, таких как "
+"неправильный шебанг (интерпретаторная строка в первой строке скрипта), "
+"символьные ссылки, указывающие за пределы stage-директории,файлы с setuid "
+"битом и библиотеки с отладочной информацией..."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:175
+msgid ""
+"These tests will not find hard-coded paths inside the port's files, nor will "
+"it verify that `LOCALBASE` is being used to correctly refer to files from "
+"other ports. The temporarily installed port in [.filename]#/var/tmp/`make "
+"-V PORTNAME`# must be tested for proper operation to make sure there are no "
+"problems with paths."
+msgstr ""
+"Эти тесты не обнаружат жёстко заданные пути в файлах порта, а также не "
+"проверят, что `LOCALBASE` используется корректно для ссылок на файлы из "
+"других портов. Временно установленный порт в [.filename]#/var/tmp/`make -V "
+"PORTNAME`# должен быть протестирован на корректную работу, чтобы убедиться в "
+"отсутствии проблем с путями."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:178
+msgid ""
+"`PREFIX` must not be set explicitly in a port's [.filename]#Makefile#. "
+"Users installing the port may have set `PREFIX` to a custom location, and "
+"the port must respect that setting."
+msgstr ""
+"`PREFIX` не должен быть явно установлен в [.filename]#Makefile# порта. "
+"Пользователи, устанавливающие порт, могут задать `PREFIX` в другом месте, и "
+"порт должен учитывать эту настройку."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:182
+msgid ""
+"Refer to programs and files from other ports with the variables mentioned "
+"above, not explicit pathnames. For instance, if the port requires a macro "
+"`PAGER` to have the full pathname of `less`, do not use a literal path of "
+"[.filename]#/usr/local/bin/less#. Instead, use `${LOCALBASE}`:"
+msgstr ""
+"Обращайтесь к программам и файлам из других портов с помощью упомянутых выше "
+"переменных, а не явных путей. Например, если порт требует, чтобы макрос "
+"`PAGER` содержал полный путь к `less`, не используйте явный путь "
+"[.filename]#/usr/local/bin/less#. Вместо этого используйте `${LOCALBASE}`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:186
+#, no-wrap
+msgid "-DPAGER=\\\"${LOCALBASE}/bin/less\\\"\n"
+msgstr "-DPAGER=\\\"${LOCALBASE}/bin/less\\\"\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:189
+msgid ""
+"The path with `LOCALBASE` is more likely to still work if the system "
+"administrator has moved the whole [.filename]#/usr/local# tree somewhere "
+"else."
+msgstr ""
+"Путь с `LOCALBASE` с большей вероятностью продолжит работать, если системный "
+"администратор переместил всё дерево [.filename]#/usr/local# в другое место."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:195
+msgid ""
+"All these tests are done automatically when running `poudriere testport` or "
+"`poudriere bulk -t`. It is highly recommended that every ports contributor "
+"install and test their ports with it. See crossref:testing[testing-"
+"poudriere, poudriere] for more information."
+msgstr ""
+"Все эти тесты выполняются автоматически при запуске `poudriere testport` или "
+"`poudriere bulk -t`. Настоятельно рекомендуется каждому участнику разработки "
+"портов устанавливать и тестировать свои порты с помощью этого инструмента. "
+"Дополнительную информацию можно найти в crossref:testing[testing-poudriere, "
+"poudriere]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:198
+#, no-wrap
+msgid "poudriere"
+msgstr "poudriere"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:202
+msgid ""
+"For a ports contributor, poudriere is one of the most important and helpful "
+"testing and build tools. Its main features include:"
+msgstr ""
+"Для контрибьютора портов poudriere является одним из самых важных и полезных "
+"инструментов для тестирования и сборки. Его основные возможности включают:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:204
+msgid ""
+"Bulk building of the entire ports tree, specific subsets of the ports tree, "
+"or a single port including its dependencies"
+msgstr ""
+"Массовая сборка всего дерева портов, определенных подмножеств дерева портов "
+"или отдельного порта с его зависимостями"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:205
+msgid "Automatic packaging of build results"
+msgstr "Автоматическая упаковка результатов сборки"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:206
+msgid "Generation of build log files per port"
+msgstr "Генерация файлов журнала сборки для каждого порта"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:207
+msgid "Providing a signed man:pkg[8] repository"
+msgstr "Предоставление подписанного репозитория man:pkg[8]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:208
+msgid ""
+"Testing of port builds before submitting a patch to the FreeBSD bug tracker "
+"or committing to the ports tree"
+msgstr ""
+"Тестирование сборки портов перед отправкой патча в трекер ошибок FreeBSD или "
+"внесением изменений в дерево портов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:209
+msgid "Testing for successful ports builds using different options"
+msgstr ""
+"Тестирование успешных сборок портов с использованием различных параметров"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:212
+msgid ""
+"Because poudriere performs its building in a clean man:jail[8] environment "
+"and uses man:zfs[8] features, it has several advantages over traditional "
+"testing on the host system:"
+msgstr ""
+"Поскольку poudriere выполняет сборку в чистой среде man:jail[8] и использует "
+"возможности man:zfs[8], он имеет несколько преимуществ по сравнению с "
+"традиционным тестированием на основной системе:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:214
+msgid ""
+"No pollution of the host environment: No leftover files, no accidental "
+"removals, no changes of existing configuration files."
+msgstr ""
+"Отсутствие загрязнения основной среды: никаких оставшихся файлов, случайных "
+"удалений или изменений существующих конфигурационных файлов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:215
+msgid "Verify [.filename]#pkg-plist# for missing or superfluous entries"
+msgstr ""
+"Проверяет [.filename]#pkg-plist# на наличие отсутствующих или лишних записей"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:216
+msgid ""
+"Ports committers sometimes ask for a poudriere log alongside a patch "
+"submission to assess whether the patch is ready for integration into the "
+"ports tree"
+msgstr ""
+"Коммиттеры портов иногда запрашивают журнал poudriere вместе с отправкой "
+"патча, чтобы оценить, готов ли патч для интеграции в дерево портов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:219
+msgid ""
+"It is also quite straightforward to set up and use, has no dependencies, and "
+"will run on any supported FreeBSD release. This section shows how to "
+"install, configure, and run poudriere as part of the normal workflow of a "
+"ports contributor."
+msgstr ""
+"Также его настройка и использование довольно просты, он не имеет "
+"зависимостей и будет работать в любой поддерживаемой версии FreeBSD. В этом "
+"разделе показано, как установить, настроить и запустить poudriere в рамках "
+"обычного рабочего процесса разработчика портов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:224
+msgid ""
+"The examples in this section show a default file layout, as standard in "
+"FreeBSD. Substitute any local changes accordingly. The ports tree, "
+"represented by `${PORTSDIR}`, is located in [.filename]#/usr/ports#. Both `$"
+"{LOCALBASE}` and `${PREFIX}` are [.filename]#/usr/local# by default."
+msgstr ""
+"Примеры в этом разделе показывают стандартную структуру файлов, принятую в "
+"FreeBSD. Внесите соответствующие изменения, если у вас используются другие "
+"настройки. Дерево портов, обозначаемое как `${PORTSDIR}`, находится в "
+"[.filename]#/usr/ports#. По умолчанию `${LOCALBASE}` и `${PREFIX}` указывают "
+"на [.filename]#/usr/local#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:226
+#, no-wrap
+msgid "Installing poudriere"
+msgstr "Установка poudriere"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:230
+msgid ""
+"poudriere is available in the ports tree in package:ports-mgmt/poudriere[]. "
+"It can be installed using man:pkg[8] or from ports:"
+msgstr ""
+"poudriere доступен в дереве портов в пакете package:ports-mgmt/poudriere[]. "
+"Его можно установить с помощью man:pkg[8] или из портов:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:234
+#, no-wrap
+msgid "# pkg install poudriere\n"
+msgstr "# pkg install poudriere\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:237
+msgid "or"
+msgstr "или"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:241
+#, no-wrap
+msgid "# make -C /usr/ports/ports-mgmt/poudriere install clean\n"
+msgstr "# make -C /usr/ports/ports-mgmt/poudriere install clean\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:252
+msgid ""
+"There is also a work-in-progress version of poudriere which will eventually "
+"become the next release. It is available in package:ports-mgmt/poudriere-"
+"devel[]. This development version is used for the official FreeBSD package "
+"builds, so it is well tested. It often has newer interesting features. A "
+"ports committer will want to use the development version because it is what "
+"is used in production, and has all the new features that will make sure "
+"everything is exactly right. A contributor will not necessarily need those "
+"as the most important fixes are backported to released version. The main "
+"reason for the use of the development version to build the official package "
+"is because it is faster, in a way that will shorten a full build from 18 "
+"hours to 17 hours when using a high end 32 CPU server with 128GB of RAM. "
+"Those optimizations will not matter a lot when building ports on a desktop "
+"machine."
+msgstr ""
+"Также существует версия poudriere в разработке, которая в конечном итоге "
+"станет следующим релизом. Она доступна в пакете:ports-mgmt/poudriere-"
+"devel[]. Эта версия используется для официальных сборок пакетов FreeBSD, "
+"поэтому она хорошо протестирована. В ней часто появляются новые интересные "
+"функции. Коммиттер портов захочет использовать версию в разработке, так как "
+"именно она используется в продакшене и содержит все новые функции, которые "
+"гарантируют, что всё будет работать идеально. Контрибьютору не обязательно "
+"нужны эти функции, так как наиболее важные исправления переносятся в "
+"выпущенную версию. Основная причина использования версии в разработке для "
+"сборки официальных пакетов заключается в её скорости — она позволяет "
+"сократить время полной сборки с 18 до 17 часов при использовании "
+"высокопроизводительного сервера с 32 CPU и 128 ГБ оперативной памяти. Эти "
+"оптимизации не будут столь значимы при сборке портов на настольном "
+"компьютере."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:254
+#, no-wrap
+msgid "Setting Up poudriere"
+msgstr "Настройка poudriere"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:258
+msgid ""
+"The port installs a default configuration file, [.filename]#/usr/local/etc/"
+"poudriere.conf#. Each parameter is documented in the configuration file."
+msgstr ""
+"Порт устанавливает файл конфигурации по умолчанию, [.filename]#/usr/local/"
+"etc/poudriere.conf#. Каждый параметр описан в этом файле конфигурации."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:260
+msgid "Here is a minimal example config file:"
+msgstr "Вот минимальный пример конфигурационного файла:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:267
+#, no-wrap
+msgid ""
+"ZPOOL=zroot\n"
+"BASEFS=/usr/local/poudriere\n"
+"DISTFILES_CACHE=/usr/ports/distfiles\n"
+"RESOLV_CONF=/etc/resolv.conf\n"
+msgstr ""
+"ZPOOL=zroot\n"
+"BASEFS=/usr/local/poudriere\n"
+"DISTFILES_CACHE=/usr/ports/distfiles\n"
+"RESOLV_CONF=/etc/resolv.conf\n"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:269
+#, no-wrap
+msgid "`ZPOOL`"
+msgstr "`ZPOOL`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:272
+msgid ""
+"The name of the ZFS storage pool which poudriere shall use. Must be listed "
+"in the output of `zpool status`."
+msgstr ""
+"Имя пула хранения ZFS, который будет использовать poudriere. Должно быть "
+"указано в выводе команды `zpool status`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:273
+#, no-wrap
+msgid "`BASEFS`"
+msgstr "`BASEFS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:276
+msgid ""
+"The root mount point for poudriere file systems. This entry will cause "
+"poudriere to mount `tank/poudriere` to `/poudriere`."
+msgstr ""
+"Корневая точка монтирования файловых систем poudriere. Эта запись приведет к "
+"тому, что poudriere смонтирует `tank/poudriere` в `/poudriere`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:277
+#, no-wrap
+msgid "`DISTFILES_CACHE`"
+msgstr "`DISTFILES_CACHE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:282
+msgid ""
+"Defines where distfiles are stored. In this example, poudriere and the host "
+"share the distfiles storage directory. This avoids downloading tarballs "
+"which are already present on the system. Please create this directory if it "
+"does not already exist so that poudriere can find it."
+msgstr ""
+"Определяет, где хранятся distfiles. В этом примере poudriere и хост "
+"используют общий каталог для хранения distfiles. Это позволяет избежать "
+"загрузки tарболов, которые уже присутствуют в системе. Пожалуйста, создайте "
+"этот каталог, если он ещё не существует, чтобы poudriere мог его найти."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:283
+#, no-wrap
+msgid "`RESOLV_CONF`"
+msgstr "`RESOLV_CONF`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:288
+msgid ""
+"Use the host [.filename]#/etc/resolv.conf# inside jails for DNS. This is "
+"needed so jails can resolve the URLs of distfiles when downloading. It is "
+"not needed when using a proxy. Refer to the default configuration file for "
+"proxy configuration."
+msgstr ""
+"Используйте файл [.filename]#/etc/resolv.conf# хоста внутри клеток для DNS. "
+"Это необходимо, чтобы клетки могли разрешать URL-адреса distfiles при "
+"загрузке. Это не требуется при использовании прокси. Обратитесь к файлу "
+"конфигурации по умолчанию для настройки прокси."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:290
+#, no-wrap
+msgid "Creating poudriere Jails"
+msgstr "Создание клеток poudriere"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:293
+msgid "Create the base jails which poudriere will use for building:"
+msgstr ""
+"Создайте базовые клетки, которые poudriere будет использовать для сборки:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:297
+#, no-wrap
+msgid "# poudriere jail -c -j 131Ramd64 -v 13.1-RELEASE -a amd64\n"
+msgstr "# poudriere jail -c -j 131Ramd64 -v 13.1-RELEASE -a amd64\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:302
+msgid ""
+"Fetch a `13.1-RELEASE` for `amd64` from the FTP server given by "
+"`FREEBSD_HOST` in [.filename]#poudriere.conf#, create the zfs file system "
+"`tank/poudriere/jails/131Ramd64`, mount it on [.filename]#/poudriere/jails/"
+"131Ramd64# and extract the `13.1-RELEASE` tarballs into this file system."
+msgstr ""
+"Загрузите `13.1-RELEASE` для `amd64` с FTP-сервера, указанного в "
+"`FREEBSD_HOST` в [.filename]#poudriere.conf#, создайте ZFS-файловую систему "
+"`tank/poudriere/jails/131Ramd64`, смонтируйте её в [.filename]#/poudriere/"
+"jails/131Ramd64# и распакуйте тарболлы `13.1-RELEASE` в эту файловую систему."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:306
+#, no-wrap
+msgid "# poudriere jail -c -j 12i386 -v stable/12 -a i386 -m git+https\n"
+msgstr "# poudriere jail -c -j 12i386 -v stable/12 -a i386 -m git+https\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:311
+msgid ""
+"Create `tank/poudriere/jails/12i386`, mount it on [.filename]#/poudriere/"
+"jails/12i386#, then check out the tip of the Git branch of `FreeBSD-12-"
+"STABLE` from `GIT_HOST` in [.filename]#poudriere.conf# or the default "
+"`git.freebsd.org` into [.filename]#/poudriere/jails/12i386/usr/src#, then "
+"complete a `buildworld` and install it into [.filename]#/poudriere/jails/"
+"12i386#."
+msgstr ""
+"Создайте `tank/poudriere/jails/12i386`, смонтируйте его на [.filename]#/"
+"poudriere/jails/12i386#, затем извлеките верхушку ветки Git `FreeBSD-12-"
+"STABLE` из `GIT_HOST` в [.filename]#poudriere.conf# или по умолчанию "
+"`git.freebsd.org` в [.filename]#/poudriere/jails/12i386/usr/src#, после чего "
+"выполните `buildworld` и установите его в [.filename]#/poudriere/jails/"
+"12i386#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:317
+msgid ""
+"While it is possible to build a newer version of FreeBSD on an older "
+"version, most of the time it will not run. For example, if a `stable/13` "
+"jail is needed, the host will have to run `stable/13` too. Running `13.1-"
+"RELEASE` is not enough."
+msgstr ""
+"Хотя возможно собрать более новую версию FreeBSD на старой версии, в "
+"большинстве случаев она не запустится. Например, если требуется клетка на "
+"`stable/13`, то хост также должен работать на `stable/13`. Запуск `13.1-"
+"RELEASE` недостаточен."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:322
+msgid "To create a poudriere jail for `14.0-CURRENT`:"
+msgstr "Для создания клетки poudriere для `14.0-CURRENT`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:326
+#, no-wrap
+msgid "# poudriere jail -c -j 14amd64 -v main -a amd64 -m git+https\n"
+msgstr "# poudriere jail -c -j 14amd64 -v main -a amd64 -m git+https\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:331
+msgid ""
+"In order to run a `14.0-CURRENT` poudriere jail the host must be running "
+"`14.0-CURRENT`. In general, newer kernels can build and run older jails. "
+"For instance, a `14.0-CURRENT` kernel can build and run a `12.4-STABLE` if "
+"the `COMPAT_FREEBSD12` kernel option was compiled in (on by default in `14.0-"
+"CURRENT`[.filename]#GENERIC# kernel config)."
+msgstr ""
+"Для запуска клетки `14.0-CURRENT` poudriere хостовая система должна работать "
+"под управлением `14.0-CURRENT`. В общем случае, более новые ядра могут "
+"собирать и запускать более старые клетки. Например, ядро `14.0-CURRENT` "
+"может собирать и запускать клетку `12.4-STABLE`, если параметр ядра "
+"`COMPAT_FREEBSD12` был скомпилирован (включен по умолчанию в конфигурации "
+"ядра [.filename]#GENERIC# `14.0-CURRENT`)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:334
+msgid ""
+"A list of jails currently known to poudriere can be shown with `poudriere "
+"jail -l`:"
+msgstr ""
+"Список клеток, известных poudriere, можно вывести с помощью команды "
+"`poudriere jail -l`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:341
+#, no-wrap
+msgid ""
+"# poudriere jail -l\n"
+"JAILNAME VERSION ARCH METHOD\n"
+"131Ramd64 13.1-RELEASE amd64 ftp\n"
+"12i386 12.4-STABLE i386 git+https\n"
+msgstr ""
+"# poudriere jail -l\n"
+"JAILNAME VERSION ARCH METHOD\n"
+"131Ramd64 13.1-RELEASE amd64 ftp\n"
+"12i386 12.4-STABLE i386 git+https\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:344
+#, no-wrap
+msgid "Keeping poudriere Jails Updated"
+msgstr "Обновление клеток poudriere"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:348
+msgid "Managing updates is very straightforward. The command:"
+msgstr "Управление обновлениями очень простое. Команда:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:352
+#, no-wrap
+msgid "# poudriere jail -u -j JAILNAME\n"
+msgstr "# poudriere jail -u -j JAILNAME\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:357
+msgid ""
+"updates the specified jail to the latest version available. For FreeBSD "
+"releases, update to the latest patchlevel with man:freebsd-update[8]. For "
+"FreeBSD versions built from source, update to the latest git revision in the "
+"branch."
+msgstr ""
+"обновляет указанную клетку до последней доступной версии. Для релизов "
+"FreeBSD обновление до последнего уровня исправлений с помощью man:freebsd-"
+"update[8]. Для версий FreeBSD, собранных из исходников, обновление до "
+"последней ревизии git в ветке."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:362
+msgid ""
+"For jails employing a `git+*` method, it is helpful to add `-J "
+"_NumberOfParallelBuildJobs_` to speed up the build by increasing the number "
+"of parallel compile jobs used. For example, if the building machine has 6 "
+"CPUs, use:"
+msgstr ""
+"Для клеток, использующих метод `git+*`, полезно добавить `-J "
+"_КоличествоПараллельныхСборок_` для ускорения сборки за счёт увеличения "
+"количества параллельных задач компиляции. Например, если на машине для "
+"сборки 6 CPU, используйте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:366
+#, no-wrap
+msgid "# poudriere jail -u -J 6 -j JAILNAME\n"
+msgstr "# poudriere jail -u -J 6 -j JAILNAME\n"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:371
+#, no-wrap
+msgid "Setting Up Ports Trees for Use with poudriere"
+msgstr "Настройка деревьев портов для использования с poudriere"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:375
+msgid ""
+"There are multiple ways to use ports trees in poudriere. The most "
+"straightforward way is to have poudriere create a default ports tree for "
+"itself, using link:{handbook}mirrors/#git[Git]:"
+msgstr ""
+"Существует несколько способов использования деревьев портов в poudriere. "
+"Наиболее простой способ — позволить poudriere создать для себя дерево портов "
+"по умолчанию, используя link:{handbook}mirrors/#git[Git]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:379
+#, no-wrap
+msgid "# poudriere ports -c -m git+https -B main\n"
+msgstr "# poudriere ports -c -m git+https -B main\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:383
+msgid ""
+"These commands create `tank/poudriere/ports/default`, mount it on "
+"[.filename]#/poudriere/ports/default#, and populate it using Git. Afterward "
+"it is included in the list of known ports trees:"
+msgstr ""
+"Эти команды создают `tank/poudriere/ports/default`, монтируют его в "
+"[.filename]#/poudriere/ports/default# и заполняют с помощью Git. После этого "
+"он включается в список известных деревьев портов:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:389
+#, no-wrap
+msgid ""
+"# poudriere ports -l\n"
+"PORTSTREE METHOD TIMESTAMP PATH\n"
+"default git+https 2020-07-20 04:23:56 /poudriere/ports/default\n"
+msgstr ""
+"# poudriere ports -l\n"
+"PORTSTREE METHOD TIMESTAMP PATH\n"
+"default git+https 2020-07-20 04:23:56 /poudriere/ports/default\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:396
+msgid ""
+"Note that the \"default\" ports tree is special. Each of the build commands "
+"explained later will implicitly use this ports tree unless specifically "
+"specified otherwise. To use another tree, add `-p _treename_` to the "
+"commands."
+msgstr ""
+"Обратите внимание, что дерево портов \"default\" является особым. Каждая из "
+"команд сборки, объяснённых далее, будет неявно использовать это дерево "
+"портов, если явно не указано иное. Чтобы использовать другое дерево, "
+"добавьте `-p _treename_` к командам."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:401
+msgid ""
+"The best way to deal with local modifications for a ports contributor is to "
+"use link:{handbook}mirrors/#git[Git]. As with the creation of jails, it is "
+"possible to use a different method for creating the ports tree. To add an "
+"additional ports tree for testing local modifications and ports development, "
+"checking out the tree via git (as described above) is preferable."
+msgstr ""
+"Лучший способ работы с локальными изменениями для разработчика портов — "
+"использовать link:{handbook}mirrors/#git[Git]. Как и при создании клеток, "
+"можно использовать другой метод для создания дерева портов. Чтобы добавить "
+"дополнительное дерево портов для тестирования локальных изменений и "
+"разработки портов, предпочтительно использовать клонирование дерева через "
+"git (как описано выше)."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:403
+#, no-wrap
+msgid "Using Manually Managed Ports Trees with poudriere"
+msgstr "Использование управляемых вручную деревьев портов с помощью poudriere"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:407
+msgid ""
+"Depending on the workflow, it can be extremely helpful to use ports trees "
+"which are maintained manually. For instance, if there is a local copy of "
+"the ports tree in [.filename]#/work/ports#, point poudriere to the location:"
+msgstr ""
+"В зависимости от рабочего процесса может быть крайне полезно использовать "
+"деревья портов, которые поддерживаются вручную. Например, если существует "
+"локальная копия дерева портов в [.filename]#/work/ports#, укажите poudriere "
+"на это расположение:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:411
+#, no-wrap
+msgid "# poudriere ports -c -m null -M /work/ports -p development\n"
+msgstr "# poudriere ports -c -m null -M /work/ports -p development\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:414
+msgid "This will be listed in the table of known trees:"
+msgstr "Это будет указано в таблице известных деревьев:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:420
+#, no-wrap
+msgid ""
+"# poudriere ports -l\n"
+"PORTSTREE METHOD TIMESTAMP PATH\n"
+"development null 2020-07-20 05:06:33 /work/ports\n"
+msgstr ""
+"# poudriere ports -l\n"
+"PORTSTREE METHOD TIMESTAMP PATH\n"
+"development null 2020-07-20 05:06:33 /work/ports\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:426
+msgid ""
+"The dash or `null` in the `METHOD` column means that poudriere will not "
+"update or change this ports tree, ever. It is completely up to the user to "
+"maintain this tree, including all local modifications that may be used for "
+"testing new ports and submitting patches."
+msgstr ""
+"Тире или `null` в колонке `METHOD` означает, что poudriere никогда не будет "
+"обновлять или изменять это дерево портов. Полностью на пользователе лежит "
+"ответственность за поддержку этого дерева, включая все локальные изменения, "
+"которые могут использоваться для тестирования новых портов и отправки "
+"исправлений."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:429
+#, no-wrap
+msgid "Keeping poudriere Ports Trees Updated"
+msgstr "Обновление деревьев портов poudriere"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:432
+msgid "As straightforward as with jails described earlier:"
+msgstr "Так же просто, как с клетками, описанными ранее:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:436
+#, no-wrap
+msgid "# poudriere ports -u -p PORTSTREE\n"
+msgstr "# poudriere ports -u -p PORTSTREE\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:439
+msgid ""
+"Will update the given _PORTSTREE_, one tree given by the output of "
+"`poudriere -l`, to the latest revision available on the official servers."
+msgstr ""
+"Обновит указанное _PORTSTREE_, дерево, указанное в выводе команды `poudriere "
+"-l`, до последней доступной ревизии на официальных серверах."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:444
+msgid ""
+"Ports trees without a method, see crossref:testing[testing-poudriere-ports-"
+"tree-manual, Using Manually Managed Ports Trees with poudriere], cannot be "
+"updated like this and must be updated manually by the porter."
+msgstr ""
+"Деревья портов без метода, см. crossref:testing[testing-poudriere-ports-tree-"
+"manual, Использование вручную управляемых деревьев портов с помощью "
+"poudriere], не могут быть обновлены таким образом и должны обновляться "
+"вручную сопровождающим портов."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:447
+#, no-wrap
+msgid "Testing Ports"
+msgstr "Тестирование портов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:450
+msgid ""
+"After jails and ports trees have been set up, the result of a contributor's "
+"modifications to the ports tree can be tested."
+msgstr ""
+"После настройки клеток и деревьев портов можно проверить результат "
+"изменений, внесенных участником в дерево портов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:452
+msgid ""
+"For example, local modifications to the package:www/firefox[] port located "
+"in [.filename]#/work/ports/www/firefox# can be tested in the previously "
+"created 13.1-RELEASE jail:"
+msgstr ""
+"Например, локальные изменения в порте package:www/firefox[], расположенном в "
+"[.filename]#/work/ports/www/firefox#, можно протестировать в ранее созданной "
+"клетке 13.1-RELEASE:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:456
+#, no-wrap
+msgid "# poudriere testport -j 131Ramd64 -p development -o www/firefox\n"
+msgstr "# poudriere testport -j 131Ramd64 -p development -o www/firefox\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:462
+msgid ""
+"This will build all dependencies of Firefox. If a dependency has been built "
+"previously and is still up-to-date, the pre-built package is installed. If "
+"a dependency has no up-to-date package, one will be built with default "
+"options in a jail. Then Firefox itself is built."
+msgstr ""
+"Это соберет все зависимости Firefox. Если зависимость уже была собрана ранее "
+"и остается актуальной, будет установлен готовый пакет. Если для зависимости "
+"нет актуального пакета, он будет собран с параметрами по умолчанию в клетке. "
+"Затем будет собран сам Firefox."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:464
+msgid ""
+"The complete build of every port is logged to [.filename]#/poudriere/data/"
+"logs/bulk/131Ri386-development/build-time/logs#."
+msgstr ""
+"Полная сборка каждого порта записывается в [.filename]#/poudriere/data/logs/"
+"bulk/131Ri386-development/build-time/logs#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:469
+msgid ""
+"The directory name `131Ri386-development` is derived from the arguments to `-"
+"j` and `-p`, respectively. For convenience, a symbolic link [.filename]#/"
+"poudriere/data/logs/bulk/131Ri386-development/latest# is also maintained. "
+"The link points to the latest _build-time_ directory. Also in this "
+"directory is an [.filename]#index.html# for observing the build process with "
+"a web browser."
+msgstr ""
+"Имя каталога `131Ri386-development` формируется из аргументов `-j` и `-p` "
+"соответственно. Для удобства также поддерживается символическая ссылка "
+"[.filename]#/poudriere/data/logs/bulk/131Ri386-development/latest#. Эта "
+"ссылка указывает на последний каталог _времени сборки_. Также в этом "
+"каталоге находится файл [.filename]#index.html#, который позволяет наблюдать "
+"за процессом сборки через веб-браузер."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:472
+msgid ""
+"By default, poudriere cleans up the jails and leaves log files in the "
+"directories mentioned above. To ease investigation, jails can be kept "
+"running after the build by adding `-i` to `testport`:"
+msgstr ""
+"По умолчанию poudriere очищает клетки и оставляет файлы журналов в указанных "
+"выше каталогах. Для упрощения анализа клетки можно оставить запущенными "
+"после сборки, добавив `-i` к `testport`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:476
+#, no-wrap
+msgid "# poudriere testport -j 131Ramd64 -p development -i -o www/firefox\n"
+msgstr "# poudriere testport -j 131Ramd64 -p development -i -o www/firefox\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:483
+msgid ""
+"After the build completes, and regardless of whether it was successful, a "
+"shell is provided within the jail. The shell is used to investigate "
+"further. poudriere can be told to leave the jail running after the build "
+"finishes with `-I`. poudriere will show the command to run when the jail is "
+"no longer needed. It is then possible to man:jexec[8] into it:"
+msgstr ""
+"После завершения сборки, независимо от того, была ли она успешной, в клетке "
+"предоставляется оболочка. Эта оболочка используется для дальнейшего "
+"исследования. Можно указать poudriere оставить клетку запущенной после "
+"завершения сборки с помощью `-I`. poudriere покажет команду для выполнения, "
+"когда клетка больше не нужна. Затем можно использовать man:jexec[8] для "
+"входа в неё:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:497
+#, no-wrap
+msgid ""
+"# poudriere testport -j 131Ramd64 -p development -I -o www/firefox\n"
+"[...]\n"
+"====>> Installing local Pkg repository to /usr/local/etc/pkg/repos\n"
+"====>> Leaving jail 131Ramd64-development-n running, mounted at /poudriere/data/.m/131Ramd64-development/ref for interactive run testing\n"
+"====>> To enter jail: jexec 131Ramd64-development-n env -i TERM=$TERM /usr/bin/login -fp root\n"
+"====>> To stop jail: poudriere jail -k -j 131Ramd64 -p development\n"
+"# jexec 131Ramd64-development-n env -i TERM=$TERM /usr/bin/login -fp root\n"
+"# [do some stuff in the jail]\n"
+"# exit\n"
+"# poudriere jail -k -j 131Ramd64 -p development\n"
+"====>> Umounting file systems\n"
+msgstr ""
+"# poudriere testport -j 131Ramd64 -p development -I -o www/firefox\n"
+"[...]\n"
+"====>> Installing local Pkg repository to /usr/local/etc/pkg/repos\n"
+"====>> Leaving jail 131Ramd64-development-n running, mounted at /poudriere/data/.m/131Ramd64-development/ref for interactive run testing\n"
+"====>> To enter jail: jexec 131Ramd64-development-n env -i TERM=$TERM /usr/bin/login -fp root\n"
+"====>> To stop jail: poudriere jail -k -j 131Ramd64 -p development\n"
+"# jexec 131Ramd64-development-n env -i TERM=$TERM /usr/bin/login -fp root\n"
+"# [do some stuff in the jail]\n"
+"# exit\n"
+"# poudriere jail -k -j 131Ramd64 -p development\n"
+"====>> Umounting file systems\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:502
+msgid ""
+"An integral part of the FreeBSD ports build infrastructure is the ability to "
+"tweak ports to personal preferences with options. These can be tested with "
+"poudriere as well. Adding the `-c`:"
+msgstr ""
+"Неотъемлемой частью инфраструктуры сборки портов FreeBSD является "
+"возможность настройки портов под личные предпочтения с помощью опций. Их "
+"также можно тестировать с помощью poudriere. Добавление опции `-c`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:506
+#, no-wrap
+msgid "# poudriere testport -j 131Ramd64 -c -o www/firefox\n"
+msgstr "# poudriere testport -j 131Ramd64 -c -o www/firefox\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:512
+msgid ""
+"Presents the port configuration dialog before the port is built. The ports "
+"given after `-o` in the format `_category_/_portname_` will use the "
+"specified options, all dependencies will use the default options. Testing "
+"dependent ports with non-default options can be accomplished using sets, see "
+"crossref:testing[testing-poudriere-sets, Using Sets]."
+msgstr ""
+"Представляет диалог настройки порта перед его сборкой. Порты, указанные "
+"после `-o` в формате `_категория_/_имя_порта_`, будут использовать указанные "
+"опции, все зависимости будут использовать опции по умолчанию. Тестирование "
+"зависимых портов с нестандартными опциями может быть выполнено с "
+"использованием наборов, см. crossref:testing[testing-poudriere-sets, "
+"Использование наборов]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:517
+msgid ""
+"When testing ports where [.filename]#pkg-plist# is altered during build "
+"depending on the selected options, it is recommended to perform a test run "
+"with all options selected _and_ one with all options deselected."
+msgstr ""
+"При тестировании портов, где файл [.filename]#pkg-plist# изменяется во время "
+"сборки в зависимости от выбранных опций, рекомендуется выполнить тестовый "
+"запуск со всеми выбранными опциями _и_ один без выбранных опций."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:520
+#, no-wrap
+msgid "Using Sets"
+msgstr "Использование наборов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:525
+msgid ""
+"For all actions involving builds, a so-called _set_ can be specified using `-"
+"z _setname_`. A set refers to a fully independent build. This allows, for "
+"instance, usage of `testport` with non-standard options for the dependent "
+"ports."
+msgstr ""
+"Для всех действий, связанных со сборкой, можно указать так называемый "
+"_набор_ с помощью `-z _имя_набора_`. Набор относится к полностью независимой "
+"сборке. Это позволяет, например, использовать `testport` с нестандартными "
+"параметрами для зависимых портов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:531
+msgid ""
+"To use sets, poudriere expects an existing directory structure similar to "
+"`PORT_DBDIR`, defaults to [.filename]#/var/db/ports# in its configuration "
+"directory. This directory is then man:nullfs[5]-mounted into the jails "
+"where the ports and their dependencies are built. Usually a suitable "
+"starting point can be obtained by recursively copying the existing "
+"`PORT_DBDIR` to [.filename]#/usr/local/etc/poudriere.d/jailname-portname-"
+"setname-options#. This is described in detail in man:poudriere[8]. For "
+"instance, testing package:www/firefox[] in a specific set named `devset`, "
+"add the `-z devset` parameter to the `testport` command:"
+msgstr ""
+"Для использования наборов poudriere ожидает, что будет использована "
+"структура каталогов, аналогичная `PORT_DBDIR`, по умолчанию [.filename]#/var/"
+"db/ports#, в его конфигурационной директории. Этот каталог затем монтируется "
+"с помощью man:nullfs[5] в клетки, где собираются порты и их зависимости. "
+"Обычно подходящую начальную точку можно получить, рекурсивно скопировав "
+"существующий `PORT_DBDIR` в [.filename]#/usr/local/etc/poudriere.d/jailname-"
+"portname-setname-options#. Это подробно описано в man:poudriere[8]. "
+"Например, для тестирования package:www/firefox[] в определённом наборе с "
+"именем `devset`, добавьте параметр `-z devset` к команде `testport`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:535
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:579
+#, no-wrap
+msgid "# poudriere testport -j 131Ramd64 -p development -z devset -o www/firefox\n"
+msgstr "# poudriere testport -j 131Ramd64 -p development -z devset -o www/firefox\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:538
+msgid "This will look for the existence of these directories in this order:"
+msgstr "Это проверит наличие этих каталогов в следующем порядке:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:540
+msgid ""
+"[.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-devset-options#"
+msgstr ""
+"[.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-devset-options#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:541
+msgid "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-devset-options#"
+msgstr "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-devset-options#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:542
+msgid "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-options#"
+msgstr "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-options#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:543
+msgid "[.filename]#/usr/local/etc/poudriere.d/devset-options#"
+msgstr "[.filename]#/usr/local/etc/poudriere.d/devset-options#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:544
+msgid "[.filename]#/usr/local/etc/poudriere.d/development-options#"
+msgstr "[.filename]#/usr/local/etc/poudriere.d/development-options#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:545
+msgid "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-options#"
+msgstr "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-options#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:546
+msgid "[.filename]#/usr/local/etc/poudriere.d/options#"
+msgstr "[.filename]#/usr/local/etc/poudriere.d/options#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:549
+msgid ""
+"From this list, poudriere man:nullfs[5]-mounts the _first existing_ "
+"directory tree into the [.filename]#/var/db/ports# directory of the build "
+"jails. Hence, all custom options are used for all the ports during this run "
+"of `testport`."
+msgstr ""
+"Из этого списка poudriere man:nullfs[5] монтирует _первое существующее_ "
+"дерево каталогов в директорию [.filename]#/var/db/ports# сборных клеток. "
+"Таким образом, все пользовательские настройки используются для всех портов "
+"во время этого запуска `testport`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:552
+msgid ""
+"After the directory structure for a set is provided, the options for a "
+"particular port can be altered. For example:"
+msgstr ""
+"После предоставления структуры каталогов для набора можно изменить параметры "
+"для конкретного порта. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:556
+#, no-wrap
+msgid "# poudriere options -c www/firefox -z devset\n"
+msgstr "# poudriere options -c www/firefox -z devset\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:560
+msgid ""
+"The configuration dialog for package:www/firefox[] is shown, and options can "
+"be edited. The selected options are saved to the `devset` set."
+msgstr ""
+"Отображается диалог настройки package:www/firefox[], где можно редактировать "
+"параметры. Выбранные параметры сохраняются в набор `devset`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:566
+msgid ""
+"poudriere is very flexible in the option configuration. poudriere can be "
+"set for particular jails, ports trees, and for multiple ports by one "
+"command. Refer to man:poudriere[8] for details."
+msgstr ""
+"poudriere очень гибок в настройке опций. poudriere можно настроить для "
+"конкретных клеток, деревьев портов и для нескольких портов одной командой. "
+"Подробности см. в man:poudriere[8]."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:569
+#, no-wrap
+msgid "Providing a Custom [.filename]#make.conf# File"
+msgstr "Предоставление пользовательского файла [.filename]#make.conf#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:575
+msgid ""
+"Similar to using sets, poudriere will also use a custom "
+"[.filename]#make.conf# if it is provided. No special command line argument "
+"is necessary. Instead, poudriere looks for existing files matching a name "
+"scheme derived from the command line. For instance:"
+msgstr ""
+"Подобно использованию наборов, poudriere также использует пользовательский "
+"[.filename]#make.conf#, если он предоставлен. Для этого не требуется "
+"специального аргумента командной строки. Вместо этого poudriere ищет "
+"существующие файлы, соответствующие схеме именования, производной от "
+"командной строки. Например:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:582
+msgid ""
+"causes poudriere to check for the existence of these files in this order:"
+msgstr ""
+"заставляет poudriere проверять наличие этих файлов в следующем порядке:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:584
+msgid "[.filename]#/usr/local/etc/poudriere.d/make.conf#"
+msgstr "[.filename]#/usr/local/etc/poudriere.d/make.conf#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:585
+msgid "[.filename]#/usr/local/etc/poudriere.d/devset-make.conf#"
+msgstr "[.filename]#/usr/local/etc/poudriere.d/devset-make.conf#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:586
+msgid "[.filename]#/usr/local/etc/poudriere.d/development-make.conf#"
+msgstr "[.filename]#/usr/local/etc/poudriere.d/development-make.conf#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:587
+msgid "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-make.conf#"
+msgstr "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-make.conf#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:588
+msgid "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-make.conf#"
+msgstr ""
+"[.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-make.conf#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:589
+msgid "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-devset-make.conf#"
+msgstr "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-devset-make.conf#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:590
+msgid ""
+"[.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-devset-"
+"make.conf#"
+msgstr ""
+"[.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-devset-"
+"make.conf#"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:594
+msgid ""
+"Unlike with sets, all of the found files will be appended, _in that order_, "
+"into one [.filename]#make.conf# inside the build jails. It is hence "
+"possible to have general make variables, intended to affect all builds in "
+"[.filename]#/usr/local/etc/poudriere.d/make.conf#. Special variables, "
+"intended to affect only certain jails or sets can be set in specialised "
+"[.filename]#make.conf# files, such as [.filename]#/usr/local/etc/poudriere.d/"
+"131Ramd64-development-devset-make.conf#."
+msgstr ""
+"В отличие от наборов, все найденные файлы будут добавлены, _в указанном "
+"порядке_, в один [.filename]#make.conf# внутри клеток сборки. Таким образом, "
+"можно задать общие переменные make, предназначенные для влияния на все "
+"сборки, в файле [.filename]#/usr/local/etc/poudriere.d/make.conf#. "
+"Специальные переменные, предназначенные только для определённых клеток или "
+"наборов, можно задать в специализированных файлах [.filename]#make.conf#, "
+"например, в [.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-"
+"devset-make.conf#."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:596
+#, no-wrap
+msgid "Using [.filename]#make.conf# to Change Default Perl"
+msgstr "Использование [.filename]#make.conf# для изменения Perl по умолчанию"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:601
+msgid ""
+"To build a set with a non default Perl version, for example, `5.20`, using a "
+"set named `perl5-20`, create a [.filename]#perl5-20-make.conf# with this "
+"line:"
+msgstr ""
+"Для сборки набора с нестандартной версией Perl, например, `5.20`, используя "
+"набор с именем `perl5-20`, создайте файл [.filename]#perl5-20-make.conf# со "
+"следующей строкой:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:605
+#, no-wrap
+msgid "DEFAULT_VERSIONS+= perl=5.20\n"
+msgstr "DEFAULT_VERSIONS+= perl=5.20\n"
+
+#. type: delimited block * 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:609
+msgid ""
+"Note the use of `+=` so that if the variable is already set in the default "
+"[.filename]#make.conf# its content will not be overwritten."
+msgstr ""
+"Обратите внимание на использование `+=`, чтобы содержимое переменной не было "
+"перезаписано, если она уже установлена в стандартном [.filename]#make.conf#."
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:614
+#, no-wrap
+msgid "Pruning no Longer Needed Distfiles"
+msgstr "Удаление ненужных файлов дистрибутива"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:618
+msgid ""
+"poudriere comes with a built-in mechanism to remove outdated distfiles that "
+"are no longer used by any port of a given tree. The command"
+msgstr ""
+"poudriere имеет встроенный механизм для удаления устаревших файлов "
+"дистрибутива, которые больше не используются ни одним портом данного дерева. "
+"Команда"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:622
+#, no-wrap
+msgid "# poudriere distclean -p portstree\n"
+msgstr "# poudriere distclean -p portstree\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:627
+msgid ""
+"will scan the distfiles folder, `DISTFILES_CACHE` in "
+"[.filename]#poudriere.conf#, versus the ports tree given by the `-p "
+"_portstree_` argument and prompt for removal of those distfiles. To skip "
+"the prompt and remove all unused files unconditionally, the `-y` argument "
+"can be added:"
+msgstr ""
+"будет сканировать папку файлов дистрибутива, `DISTFILES_CACHE` в "
+"[.filename]#poudriere.conf#, сравнивая ее с деревом портов, указанным "
+"аргументом `-p _portstree_`, и запрашивать подтверждение на удаление этих "
+"файлов дистрибутива. Чтобы пропустить запрос и удалить все неиспользуемые "
+"файлы без подтверждения, можно добавить аргумент `-y`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:631
+#, no-wrap
+msgid "# poudriere distclean -p portstree -y\n"
+msgstr "# poudriere distclean -p portstree -y\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:634
+#, no-wrap
+msgid "Debugging ports"
+msgstr "Отладка портов"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:641
+msgid ""
+"Sometimes things go wrong and the port fails at run time. The framework "
+"provides some facilities to help in debugging ports. These helpers are "
+"limited since the way of debugging a port heavily depends on the technology "
+"used. The following variables help with debugging ports:"
+msgstr ""
+"Иногда что-то идёт не так, и порт не работает во время выполнения. Фреймворк "
+"предоставляет некоторые средства для отладки портов. Эти вспомогательные "
+"инструменты ограничены, поскольку способ отладки порта во многом зависит от "
+"используемой технологии. Следующие переменные помогают в отладке портов:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:643
+msgid "`WITH_DEBUG`. If set, ports are built with debugging symbols."
+msgstr ""
+"`WITH_DEBUG`. Если установлено, порты собираются с отладочными символами."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:644
+msgid ""
+"`WITH_DEBUG_PORTS`. Specifies a list of ports to be built with `WITH_DEBUG` "
+"set."
+msgstr ""
+"`WITH_DEBUG_PORTS`. Указывает список портов, которые должны собираться с "
+"установленным `WITH_DEBUG`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:645
+msgid ""
+"`DEBUG_FLAGS`. Used to specify additional flags to `CFLAGS`. Defaults to `-"
+"g`."
+msgstr ""
+"`DEBUG_FLAGS`. Используется для указания дополнительных флагов для `CFLAGS`. "
+"По умолчанию `-g`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:648
+msgid ""
+"When `WITH_DEBUG` is set, either globally or for a list of ports, the "
+"resulting binaries are not stripped."
+msgstr ""
+"Когда `WITH_DEBUG` установлен, глобально или для списка портов, "
+"результирующие бинарные файлы не лишаются символов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:651
+msgid ""
+"These variables can be specified in [.filename]#make.conf# or in the command "
+"line:"
+msgstr ""
+"Эти переменные могут быть указаны в [.filename]#make.conf# или в командной "
+"строке:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:655
+#, no-wrap
+msgid "# cd category/port && make -DWITH_DEBUG DEBUG_FLAGSS=\"-g -O0\"\n"
+msgstr "# cd category/port && make -DWITH_DEBUG DEBUG_FLAGSS=\"-g -O0\"\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:663
+msgid ""
+"If the port is built using package:ports-mgmt/poudriere[] the debugging "
+"variables must be specified in poudriere's [.filename]#make.conf# and not in "
+"[.filename]#/etc/make.conf#. Refer to package:ports-mgmt/poudriere[] "
+"documentation for details."
+msgstr ""
+"Если порт собирается с использованием package:ports-mgmt/poudriere[], "
+"отладочные переменные должны быть указаны в [.filename]#make.conf# "
+"poudriere, а не в [.filename]#/etc/make.conf#. Подробности см. в "
+"документации package:ports-mgmt/poudriere[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:667
+msgid ""
+"Please refer to the debugging information in the extref:{developers-handbook}"
+"tools[Developer's Handbook, debugging] for more details about the debugging "
+"tools available."
+msgstr ""
+"Пожалуйста, обратитесь к отладочной информации в extref:{developers-handbook}"
+"tools[Руководстве разработчика, отладка] для получения более подробной "
+"информации о доступных инструментах отладки."
+
+#~ msgid ""
+#~ "Since `portlint` uses heuristics to try to figure out errors, it can "
+#~ "produce false positive warnings. In addition, occasionally something "
+#~ "that is flagged as a problem really cannot be done in any other way due "
+#~ "to limitations in the ports framework. pass:[<!-- vale Vale.Terms = NO --"
+#~ ">] When in doubt, the best thing to do is ask on {freebsd-ports}. pass:"
+#~ "[<!-- vale Vale.Terms = YES -->]"
+#~ msgstr ""
+#~ "Так как для обнаружения ошибок `portlint` использует эвристические "
+#~ "методы, то им могут выдаваться и ошибочные предупреждения. Кроме того, "
+#~ "время от времени нечто, отмечаемое как некорректность, из-за ограничений "
+#~ "механизма создания портов не может быть сделано никак иначе. pass:[<!-- "
+#~ "vale Vale.Terms = NO -->] Если вы сомневаетесь, то лучше всего спросить в "
+#~ "{freebsd-ports}. pass:[<!-- vale Vale.Terms = YES -->]"
+
+#~ msgid ""
+#~ "updates the specified jail to the latest version available. pass:[<!-- "
+#~ "vale Vale.Terms = NO -->] For FreeBSD releases, update to the latest "
+#~ "patchlevel with man:freebsd-update[8]. pass:[<!-- vale Vale.Terms = YES "
+#~ "-->] For FreeBSD versions built from source, update to the latest git "
+#~ "revision in the branch."
+#~ msgstr ""
+#~ "обновляет указанную клетку до последней доступной версии. pass:[<!-- "
+#~ "vale Vale.Terms = NO -->] Для релизов FreeBSD обновление до последнего "
+#~ "уровня исправлений с помощью man:freebsd-update[8]. pass:[<!-- vale "
+#~ "Vale.Terms = YES -->] Для версий FreeBSD, собранных из исходников, "
+#~ "обновление до последней ревизии git в ветке."
diff --git a/documentation/content/ru/books/porters-handbook/upgrading/_index.adoc b/documentation/content/ru/books/porters-handbook/upgrading/_index.adoc
index 863bd4ad3b..c6f3b2a5bb 100644
--- a/documentation/content/ru/books/porters-handbook/upgrading/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/upgrading/_index.adoc
@@ -1,11 +1,13 @@
---
-title: Глава 10. Обновление отдельного порта
-prev: books/porters-handbook/testing
+description: 'Обновление порта FreeBSD'
next: books/porters-handbook/security
-showBookMenu: true
-weight: 10
params:
- path: "/books/porters-handbook/upgrading/"
+ path: /books/porters-handbook/upgrading/
+prev: books/porters-handbook/testing
+showBookMenu: true
+tags: ["upgrading", "port", "git"]
+title: 'Глава 11. Обновление отдельного порта'
+weight: 11
---
[[port-upgrading]]
@@ -16,7 +18,7 @@ params:
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 10
+:sectnumoffset: 11
:partnums:
:source-highlighter: rouge
:experimental:
@@ -46,32 +48,37 @@ toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
-Если вы заметите, что ваш порт устарел по сравнению с последней авторской версией, первым делом вы должны получить самую последнюю версия порта. Вы можете найти их в каталоге [.filename]#ports/ports-current# на зеркальных FTP-серверах FreeBSD. Однако если вы работаете с достаточно большим количеством портов, наверное, будет проще использовать Subversion или man:portsnap[8] для поддержания всей коллекции портов в актуальном состоянии, как это описано в extref:{handbook}ports/[Руководстве, ports-using]. К тому же это даст возможность отслеживать все зависимости портов.
+Когда порт не является самой последней версией, доступной от авторов, обновите локальную рабочую копию [.filename]#/usr/ports#. Возможно, порт уже был обновлён до новой версии.
-На следующем шаге необходимо выяснить, нет ожидает ли уже это обновление своей очереди. Для этого у вас есть две возможности. Существует интерфейс к http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query[базе данных сообщений о проблемах FreeBSD (PR)] (известной также как `GNATS`) с поисковыми возможностями. Выберите из выпадающего списка `ports` и введите название порта.
+При работе с большим количеством портов, вероятно, будет проще использовать Git для поддержания всей коллекции портов в актуальном состоянии, как описано в extref:{handbook}ports[Использование коллекции портов, ports-using]. Это также позволит отслеживать все зависимости портов.
-Однако иногда люди забывают поместить название порта в поле Synopsis в точном виде. В таком случае вы можете воспользоваться <<portsmon,Системой мониторинга портов FreeBSD>> (которая известна также как `portsmon`). В рамках этой системы делается попытка классифицировать PR, касающиеся портов, по имени порта. Для поиска PR, относящихся к определённому порту, используйте механизм http://portsmon.FreeBSD.org/portoverview.py[Просмотра по одному порту].
+Следующий шаг — проверить, есть ли уже ожидающее обновление. Для этого есть два варианта. Доступен поиск в https://bugs.freebsd.org/search/[Сообщения о проблемах (PR) или база данных ошибок FreeBSD]. Выберите `Ports & Packages` в меню множественного выбора `Product` и введите название порта в поле `Summary`.
Если таких отложенных PR не существует, то на следующем этапе следует послать сообщение электронной почты человеку, поддерживающему порт, который выдаётся по команде `make maintainer`. Этот человек может уже работать над обновлением, или иметь причину не обновлять порт прямо сейчас (например, из-за проблем со стабильностью функционирования новой версии); вам нет нужды дублировать их работу. Заметьте, что неподдерживаемые порты перечисляются с адресом сопровождающего `ports@FreeBSD.org`, который является всего лишь адресом общего списка рассылки, так что отправка туда сообщений, скорее всего, в данном случае не поможет.
Если сопровождающий просит вас выполнить обновление, либо сопровождающий отсутствует, то у вас появляется шанс помочь FreeBSD, приготовив обновление самим! Пожалуйста, делайте это с использованием команды man:diff[1] в основной системе.
-Чтобы создать подходящий `diff` для одного патча, скопируйте файл, который нужно пропатчить, в _something.orig_, сохраните ваши изменения в _something_, а затем создайте ваше патч:
+Чтобы создать подходящий `diff` для одного патча, скопируйте файл, который нужно пропатчить, в [.filename]#something.orig#, сохраните ваши изменения в [.filename]#something#, а затем создайте ваше патч:
-[source,shell]
+[source, shell]
....
% diff -u something.orig something > something.diff
....
-В противном случае, вам следует воспользоваться методом `svn diff` (<<svn-diff>>), либо скопировать содержимое порта в отдельный каталог и применить результат рекурсивной команды man:diff[1] между новым и старым каталогами порта (например, если каталог с модифицированным портом называется [.filename]#superedit#, а оригинальный, совпадающий с находящимся в нашем дереве портов, [.filename]#superedit.bak#, то сохраните результат выполнения команды `diff -ruN superedit.bak superedit`). Подойдёт как унифицированный, так и контекстный дифф, однако коммиттеры портов обычно предпочитают унифицированный формат. Отметьте использование опции `-N`-это одобряемый способ заставить diff корректно работать в случае добавления новых файлов или удаления старых. Перед тем, как посылать нам diff-файл, пожалуйста, проверьте его, чтобы убедиться в значимости всех внесённых изменений. (В частности, убедитесь, что вы очистили рабочие каталоги командой `make clean`).
+В противном случае используйте метод `git diff` (crossref:upgrading[git-diff, Использование Git для создания патчей]) или скопируйте содержимое порта в совершенно другой каталог и используйте результат рекурсивного вывода man:diff[1] для новых и старых каталогов портов (например, если изменённый каталог порта называется [.filename]#superedit#, а исходный находится в нашем дереве как [.filename]#superedit.bak#, сохраните результат выполнения `diff -ruN superedit.bak superedit`). Подойдёт как унифицированный, так и контекстный diff, но коммиттеры портов обычно предпочитают унифицированные diff. Обратите внимание на использование опции `-N` — это общепринятый способ заставить diff корректно обрабатывать случаи добавления новых файлов или удаления старых. Перед отправкой diff, пожалуйста, проверьте вывод, чтобы убедиться, что все изменения имеют смысл. (В частности, не забудьте сначала очистить рабочие каталоги с помощью `make clean`).
-Для упрощения повторяющихся операций с файлами заплаток вы можете воспользоваться скриптом [.filename]#/usr/ports/Tools/scripts/patchtool.py#. Перед тем, как его запускать, пожалуйста, прочтите [.filename]#/usr/ports/Tools/scripts/README.patchtool#.
+[NOTE]
+====
+Если некоторые файлы были добавлены, скопированы, перемещены или удалены, добавьте эту информацию в отчёт о проблеме, чтобы коммиттер, принимающий патч, знал, какие команды man:git[1] нужно выполнить.
+====
+
+Для упрощения стандартных операций с файлами исправлений используйте `make makepatch`, как описано в crossref:slow-porting[slow-patch,Применение партчей]. Существуют и другие инструменты, например [.filename]#/usr/ports/Tools/scripts/patchtool.py#. Перед его использованием прочтите [.filename]#/usr/ports/Tools/scripts/README.patchtool#.
Если порт никем не поддерживается, а вы активно его используете, пожалуйста, подумайте над тем, чтобы добровольно стать его сопровождающим. Во FreeBSD имеется более 4000 портов без поддержки, и это как раз та область, где всегда нужны добровольцы. (Детальное описание обязанностей сопровождающего можно найти в разделе extref:{developers-handbook}[Руководства Разработчика, POLICIES-MAINTAINER].)
-Лучше всего послать нам diff-файл, включив его в посылку по команде man:send-pr[1] (категория `ports`). Если вы сопровождаете порт, обязательно поместите текст `[maintainer update]` в начале строки описания и задайте в поле "Class" вашего PR строчку `maintainer-update`. В противном случае в поле "Class" вашего PR должно быть указано `change-request`. Будьте добры, в сообщении отметьте все добавленные или удалённые файлы, так как они будут непосредственно указаны man:svn[1] при выполнении операции коммита. Если diff-файл имеет размер, превышающий 20КБ, сожмите его и обработайте утилитой uuencode; в противном случае просто включите его как есть в PR.
+Для отправки diff используйте https://bugs.freebsd.org/submit/[форму отправки багов] (продукт `Ports & Packages`, компонент `Individual Port(s)`). Всегда указывайте категорию с именем порта, за которой следует двоеточие и краткое описание проблемы. Примеры: `_категория/имя_порта_: _добавить опцию FOO_`; `_категория/имя_порта_: _Обновление до X.Y_`. Упоминайте в сообщении все добавленные или удалённые файлы, так как они должны быть явно указаны в man:git[1] при выполнении коммита. Не сжимайте и не кодируйте diff.
-Прежде чем пользоваться man:send-pr[1] просмотрите раздел о extref:{problem-reports}[Написании сообщений о проблемах, pr-writing] в статье о Сообщениях об ошибках. Он содержит гораздо больше информации о том, как писать полезные сообщения о проблемах.
+Прежде чем отправить сообщение об ошибке, ознакомьтесь с разделом extref:{problem-reports}[Написание отчета о проблеме, pr-writing] в статье "Отчеты о проблемах". В нем содержится гораздо больше информации о том, как составлять полезные отчеты о проблемах.
[IMPORTANT]
====
@@ -80,82 +87,100 @@ endif::[]
[NOTE]
====
-Повторяем еще раз - для посылки обновлений существующих портов используйте утилиту man:diff[1], а не man:shar[1]! Это поможет понять коммиттерам портов, что именно было изменено.
+Пожалуйста, используйте man:diff[1] или `git diff` для создания обновлений существующих портов. Другие форматы включают весь файл и делают невозможным увидеть только изменённые части. Если различия не включены, всё обновление может быть проигнорировано.
====
Теперь, когда вы проделали всё это, прочитайте о том, как поддерживать актуальное состояние, в crossref:keeping-up[keeping-up, Актуализация].
-[[svn-diff]]
-== Использование Subversion для создания патчей
+[[git-diff]]
+== Использование Git для создания патчей
-По возможности присылайте исправления в формате man:svn[1] diff. В таком виде их проще использовать по сравнению с разницей между "старым и новым" каталогами. Так проще увидеть изменения и обновить их в случае, если что-нибудь изменилось в Коллекции Портов с тех пор, как вы начали работу, либо если коммиттер просит что-то исправить.
+Когда это возможно, пожалуйста, предоставляйте патч или diff с помощью man:git[1]. Их проще обрабатывать, чем различия между «новым и старым» каталогом. Так легче увидеть, что изменилось, и обновить diff, если что-то было изменено в Коллекции портов с момента начала работы над ней, или если коммиттер просит что-то исправить. Кроме того, патч, созданный с помощью man:git-format-patch[1] или man:git-diff[1], можно легко применить с помощью man:git-am[1] или man:git-apply[1], что сэкономит время коммиттера. Наконец, git-патч, созданный man:git-format-patch[1], включает информацию об авторе и сообщения коммитов. Они будут записаны в лог репозитория, и это рекомендуемый способ отправки ваших изменений.
-[source,shell]
+[source, shell]
....
-% cd ~/my_wrkdir <.>
-% svn co https://svn0.us-west.FreeBSD.org/ports/head/dns/pdnsd <.>
-% cd ~/my_wrkdir/pdnsd
+% git clone https://git.FreeBSD.org/ports.git ~/my_wrkdir <.> <.>
+% cd ~/my_wrkdir
....
<.> Это может быть где угодно; место, в котором производится построение портов, не привязано к [.filename]#/usr/ports/#.
-<.> https://svn0.us-west.FreeBSD.org/[svn0.us-west.FreeBSD.org] - это общедоступный сервер Subversion. Выберите ближайшее зеркало и проверьте сертификат зеркалирующего сервера на наличие в перечне extref:{handbook}mirrors/[зеркалирующих сайтов Subversion, svn-mirrors].
+<.> https://git.FreeBSD.org/[git.FreeBSD.org] — это публичный Git-сервер FreeBSD. Подробнее см. в extref:{handbook}mirrors[таблице URL-репозиториев FreeBSD Git, git-url-table].
-Находясь в рабочем каталоге, вносите любые изменения, которые обычно делают для порта. При добавлении или удалении файла используйте `svn` для отслеживания этих изменений:
+Находясь в каталоге порта, внесите необходимые изменения. Если требуется добавить, переместить или удалить файл, используйте `git` для отслеживания этих изменений:
-[source,shell]
+[source, shell]
....
-% svn add new_file
-% svn remove deleted_file
+% git add new_file
+% git mv old_name new_name
+% git rm deleted_file
....
-Убедитесь, что вы проверяете порт в соответствии с рекомендуемым порядком проверки, описанным в crossref:quick-porting[porting-testing, Тестирование порта] и crossref:quick-porting[porting-portlint, Проверка вашего порта утилитой `portlint`].
+Убедитесь, что проверили порт, используя контрольный список в crossref:quick-porting[porting-testing,Тестирование порта] и crossref:quick-porting[porting-portlint,Проверка порта с помощью `portlint`].
+
+Также обновите ссылку на контрольную сумму в distinfo с помощью `make makesum`.
-[source,shell]
+Прежде чем создавать патч, загрузите последнюю версию репозитория и перебазируйте изменения поверх неё. Внимательно следите за выводом и следуйте ему. Если какие-либо файлы не удалось перебазировать, это означает, что исходные файлы изменились во время вашего редактирования, и конфликты необходимо разрешить вручную.
+
+[source, shell]
....
-% svn status
-% svn update <.>
+% git fetch origin main
+% git rebase origin/main
....
-<.> Эта команда попытается выполнить слияние различий между вашим патчем и текущей версией репозитория; внимательно проверьте полученный вывод. Буква перед названием каждого файла означает тип изменения, сделанного с этим файлом. Для получения полного списка смотрите <<table-svn-up>>.
+Проверьте изменения, подготовленные для исправления:
-[[table-svn-up]]
-.Префиксы файлов для Subversion Update
-[cols="1,1", frame="none"]
-|===
-|U
-|Файл обновлен без проблем.
+[source, shell]
+....
+% git status
+% git diff --staged
+....
-|G
-|Файл обновлен без проблем (вы увидите это только при работе с удаленным репозиторием).
+Последний шаг — создать унифицированный diff или патч изменений:
-|M
-|Файл с локальными изменениями, слияние выполнено без конфликтов.
+Для создания патча с помощью man:git-format-patch[1]:
+[source, shell]
+....
+% git checkout -b my_branch
+% git commit
+% git format-patch main
+....
-|C
-|Файл с локальными изменениями, слияние выполнено с конфликтами.
-|===
+Это создаст файл исправления с именем вида `0001-foo.patch`. Это предпочтительный способ, так как он включает идентификацию автора, а также удобнее, когда вы делаете серию изменений, которые не должны объединяться вместе.
-Если в результате выполнения `svn update` отображается `C`, то это означает, что что-то изменилось в репозитории Subversion и man:svn[1] не смогла выполнить слияние локальных изменений с полученными из репозитория. В любом случае никогда не помешает просмотреть изменения, поскольку man:svn[1] ничего не знает о том, каким должен быть порт, поэтому эта команда может (и, вероятно, будет) делать слияние тех изменений, которые не имеют смысла.
+Или для создания унифицированного diff с помощью man:git-diff[1]:
+[source, shell]
+....
+% git diff --staged > ../`make -VPKGNAME`.diff
+....
+Это создаст файл с различиями с именем вида `foo-1.2.3.diff`. Здесь `foo` заменяется на первую строку сообщения коммита, то есть на тему сообщения коммита.
-Последним шагом является создание унифицированного man:diff[1] для полученных изменений:
+После создания патча вы можете переключиться на основную ветку для начала других разработок.
+[source, shell]
+....
+% git checkout main
+....
-[source,shell]
+После принятия и слияния патча вы можете удалить локальную ветку разработки, если хотите:
+[source, shell]
....
-% svn diff > ../`basename ${PWD}`.diff
+% git branch -D my_branch
....
[NOTE]
====
-Информация о любых удаляемых файлов должна быть явным образом указана в PR, поскольку необходимость в удалении файла для коммиттера может быть неочевидна.
+Если файлы были добавлены, перемещены или удалены, укажите использованные команды man:git[1] `add`, `mv` и `rm`. Команда `git mv` должна быть выполнена до применения патча. Команды `git add` или `git rm` должны быть выполнены после применения патча.
====
-Присылайте свои патчи в соответствии с руководством, описанном в <<port-upgrading>>.
+Отправьте исправление, следуя extref:{problem-reports}[рекомендациям по отправке отчетов о проблемах, pr-writing].
[[moved-and-updating-files]]
-== Файлы [.filename]#UPDATING# и [.filename]#MOVED#
+== UPDATING и MOVED
+
+[[moved-and-updating-updating]]
+=== /usr/ports/UPDATING
-Если при обновлении порта требуются специальные шаги, такие как изменение файлов конфигурации или запуск специальной программы, то вам следует это задокументировать в файле [.filename]#/usr/ports/UPDATING#. Формат записи в этом файле приводится ниже:
+Если обновление порта требует специальных действий, таких как изменение конфигурационных файлов или запуск определённой программы, это должно быть задокументировано в данном файле. Формат записи в этом файле следующий:
[.programlisting]
....
@@ -166,17 +191,55 @@ YYYYMMDD:
Special instructions
....
-Если вы включаете точные инструкции portmaster или portupgrade, пожалуйста, убедитесь в правильном экранировании символов внутри командной оболочки.
+[TIP]
+====
-Файл [.filename]#/usr/ports/MOVED# содержит записи об удалённых или перемещённых портах. Каждая строка в этом файле состоит из полей: название порта, место, куда он был перемещён, дата и причина перемещения. Если порт был удалён, то поле, указывающее новое место, может оставаться незаполненным. Поля должны разделяться символом `|` (pipe), как это показано ниже:
+При включении точных инструкций для portmaster, portupgrade и/или pkg, убедитесь в правильности экранирования в shell. Например, _не_ используйте:
+
+[source, shell]
+....
+# pkg delete -g -f docbook-xml* docbook-sk* docbook[2345]??-* docbook-4*
+....
+
+Как показано, команда будет работать только с bourne-оболочками. Вместо этого используйте форму, приведённую ниже, которая будет работать как с bourne-оболочкой, так и с c-оболочкой:
+
+[source, shell]
+....
+# pkg delete -g -f docbook-xml\* docbook-sk\* docbook\[2345\]\?\?-\* docbook-4\*
+....
+
+====
+
+[NOTE]
+====
+Рекомендуется, чтобы строка AFFECTS содержала glob-выражение, соответствующее всем портам, затронутым записью, чтобы автоматизированные инструменты могли максимально легко её обработать. Если обновление касается всех существующих версий BIND 9, содержимое `AFFECTS` должно быть `users of dns/bind9*`, и оно _не должно_ быть `users of BIND 9`
+====
+
+[[moved-and-updating-moved]]
+=== /usr/ports/MOVED
+
+Этот файл используется для перечисления перемещённых или удалённых портов. Каждая строка в файле состоит из названия порта, места, куда порт был перемещён, даты и причины. Если порт был удалён, раздел с указанием места перемещения может быть оставлен пустым. Каждый раздел должен быть отделён символом `|` (вертикальная черта), например:
[.programlisting]
....
old name|new name (blank for deleted)|date of move|reason
....
-Дату следует вводить в формате `YYYY-MM-DD`. Новые записи следует добавлять в конец файла в хронологическом порядке.
+Дата должна быть введена в формате `ГГГГ-ММ-ДД`. Новые записи добавляются в конец списка, чтобы сохранить его в хронологическом порядке, при этом самая старая запись находится в начале списка.
+
+Если порт был удален, но затем восстановлен, удалите строку в этом файле, которая указывает, что он был удален.
+
+Если порт был переименован, а затем переименован обратно в исходное имя, добавьте новую запись с промежуточным именем для старого имени и удалите старую запись, чтобы не создавать цикл.
+
+[NOTE]
+====
+Любые изменения должны быть проверены с помощью `Tools/scripts/MOVEDlint.awk`.
-Если порт был перемещён, но в дальнейшем восстановлен на прежнем месте, удалите в этом файле строку, содержащую информацию о перемещении.
+Если используется каталог портов, отличный от [.filename]#/usr/ports#, следует указать:
-Полученные изменения можно проверить командой `Tools/scripts/MOVEDlint.awk`.
+[source, shell]
+....
+% cd /home/user/ports
+% env PORTSDIR=$PWD Tools/scripts/MOVEDlint.awk
+....
+====
diff --git a/documentation/content/ru/books/porters-handbook/upgrading/_index.po b/documentation/content/ru/books/porters-handbook/upgrading/_index.po
new file mode 100644
index 0000000000..66343c9f72
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/upgrading/_index.po
@@ -0,0 +1,688 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-09-05 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookupgrading_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:1
+#, no-wrap
+msgid "Upgrading a FreeBSD Port"
+msgstr "Обновление порта FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:1
+#, no-wrap
+msgid "Chapter 11. Upgrading a Port"
+msgstr "Глава 11. Обновление отдельного порта"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:14
+#, no-wrap
+msgid "Upgrading a Port"
+msgstr "Обновление отдельного порта"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:53
+msgid ""
+"When a port is not the most recent version available from the authors, "
+"update the local working copy of [.filename]#/usr/ports#. The port might "
+"have already been updated to the new version."
+msgstr ""
+"Когда порт не является самой последней версией, доступной от авторов, "
+"обновите локальную рабочую копию [.filename]#/usr/ports#. Возможно, порт уже "
+"был обновлён до новой версии."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:57
+msgid ""
+"When working with more than a few ports, it will probably be easier to use "
+"Git to keep the whole ports collection up-to-date, as described in extref:"
+"{handbook}ports[Using the Ports Collection, ports-using]. This will have "
+"the added benefit of tracking all the port's dependencies."
+msgstr ""
+"При работе с большим количеством портов, вероятно, будет проще использовать "
+"Git для поддержания всей коллекции портов в актуальном состоянии, как "
+"описано в extref:{handbook}ports[Использование коллекции портов, ports-"
+"using]. Это также позволит отслеживать все зависимости портов."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:62
+msgid ""
+"The next step is to see if there is an update already pending. To do this, "
+"there are two options. There is a searchable interface to the https://"
+"bugs.freebsd.org/search/[FreeBSD Problem Report (PR) or bug database]. "
+"Select `Ports & Packages` in the `Product` multiple select menu, and enter "
+"the name of the port in the `Summary` field."
+msgstr ""
+"Следующий шаг — проверить, есть ли уже ожидающее обновление. Для этого есть "
+"два варианта. Доступен поиск в https://bugs.freebsd.org/search/[Сообщения о "
+"проблемах (PR) или база данных ошибок FreeBSD]. Выберите `Ports & Packages` "
+"в меню множественного выбора `Product` и введите название порта в поле "
+"`Summary`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:66
+msgid ""
+"If there is no pending PR, the next step is to send an email to the port's "
+"maintainer, as shown by `make maintainer`. That person may already be "
+"working on an upgrade, or have a reason to not upgrade the port right now "
+"(because of, for example, stability problems of the new version), and there "
+"is no need to duplicate their work. Note that unmaintained ports are listed "
+"with a maintainer of `ports@FreeBSD.org`, which is just the general ports "
+"mailing list, so sending mail there probably will not help in this case."
+msgstr ""
+"Если таких отложенных PR не существует, то на следующем этапе следует "
+"послать сообщение электронной почты человеку, поддерживающему порт, который "
+"выдаётся по команде `make maintainer`. Этот человек может уже работать над "
+"обновлением, или иметь причину не обновлять порт прямо сейчас (например, из-"
+"за проблем со стабильностью функционирования новой версии); вам нет нужды "
+"дублировать их работу. Заметьте, что неподдерживаемые порты перечисляются с "
+"адресом сопровождающего `ports@FreeBSD.org`, который является всего лишь "
+"адресом общего списка рассылки, так что отправка туда сообщений, скорее "
+"всего, в данном случае не поможет."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:68
+msgid ""
+"If the maintainer asks you to do the upgrade or there is no maintainer, then "
+"help out FreeBSD by preparing the update! Please do this by using the "
+"man:diff[1] command in the base system."
+msgstr ""
+"Если сопровождающий просит вас выполнить обновление, либо сопровождающий "
+"отсутствует, то у вас появляется шанс помочь FreeBSD, приготовив обновление "
+"самим! Пожалуйста, делайте это с использованием команды man:diff[1] в "
+"основной системе."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:70
+msgid ""
+"To create a suitable `diff` for a single patch, copy the file that needs "
+"patching to [.filename]#something.orig#, save the changes to "
+"[.filename]#something# and then create the patch:"
+msgstr ""
+"Чтобы создать подходящий `diff` для одного патча, скопируйте файл, который "
+"нужно пропатчить, в [.filename]#something.orig#, сохраните ваши изменения в "
+"[.filename]#something#, а затем создайте ваше патч:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:74
+#, no-wrap
+msgid "% diff -u something.orig something > something.diff\n"
+msgstr "% diff -u something.orig something > something.diff\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:81
+msgid ""
+"Otherwise, either use the `git diff` method (crossref:upgrading[git-diff, "
+"Using Git to Make Patches]) or copy the contents of the port to an entire "
+"different directory and use the result of the recursive man:diff[1] output "
+"of the new and old ports directories (for example, if the modified port "
+"directory is called [.filename]#superedit# and the original is in our tree "
+"as [.filename]#superedit.bak#, then save the result of `diff -ruN "
+"superedit.bak superedit`). Either unified or context diff is fine, but port "
+"committers generally prefer unified diffs. Note the use of the `-N` option-"
+"this is the accepted way to force diff to properly deal with the case of new "
+"files being added or old files being deleted. Before sending us the diff, "
+"please examine the output to make sure all the changes make sense. (In "
+"particular, make sure to first clean out the work directories with `make "
+"clean`)."
+msgstr ""
+"В противном случае используйте метод `git diff` (crossref:upgrading[git-"
+"diff, Использование Git для создания патчей]) или скопируйте содержимое "
+"порта в совершенно другой каталог и используйте результат рекурсивного "
+"вывода man:diff[1] для новых и старых каталогов портов (например, если "
+"изменённый каталог порта называется [.filename]#superedit#, а исходный "
+"находится в нашем дереве как [.filename]#superedit.bak#, сохраните результат "
+"выполнения `diff -ruN superedit.bak superedit`). Подойдёт как "
+"унифицированный, так и контекстный diff, но коммиттеры портов обычно "
+"предпочитают унифицированные diff. Обратите внимание на использование опции "
+"`-N` — это общепринятый способ заставить diff корректно обрабатывать случаи "
+"добавления новых файлов или удаления старых. Перед отправкой diff, "
+"пожалуйста, проверьте вывод, чтобы убедиться, что все изменения имеют смысл. "
+"(В частности, не забудьте сначала очистить рабочие каталоги с помощью `make "
+"clean`)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:85
+msgid ""
+"If some files have been added, copied, moved, or removed, add this "
+"information to the problem report so that the committer picking up the patch "
+"will know what man:git[1] commands to run."
+msgstr ""
+"Если некоторые файлы были добавлены, скопированы, перемещены или удалены, "
+"добавьте эту информацию в отчёт о проблеме, чтобы коммиттер, принимающий "
+"патч, знал, какие команды man:git[1] нужно выполнить."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:90
+msgid ""
+"To simplify common operations with patch files, use `make makepatch` as "
+"described in crossref:slow-porting[slow-patch,Patching]. Other tools "
+"exists, like [.filename]#/usr/ports/Tools/scripts/patchtool.py#. Before "
+"using it, please read [.filename]#/usr/ports/Tools/scripts/README.patchtool#."
+msgstr ""
+"Для упрощения стандартных операций с файлами исправлений используйте `make "
+"makepatch`, как описано в crossref:slow-porting[slow-patch,Применение "
+"партчей]. Существуют и другие инструменты, например [.filename]#/usr/ports/"
+"Tools/scripts/patchtool.py#. Перед его использованием прочтите [.filename]#/"
+"usr/ports/Tools/scripts/README.patchtool#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:94
+msgid ""
+"If the port is unmaintained, and you are actively using it, please consider "
+"volunteering to become its maintainer. FreeBSD has over 4000 ports without "
+"maintainers, and this is an area where more volunteers are always needed. "
+"(For a detailed description of the responsibilities of maintainers, refer to "
+"the section in the extref:{developers-handbook}[Developer's Handbook, "
+"POLICIES-MAINTAINER].)"
+msgstr ""
+"Если порт никем не поддерживается, а вы активно его используете, пожалуйста, "
+"подумайте над тем, чтобы добровольно стать его сопровождающим. Во FreeBSD "
+"имеется более 4000 портов без поддержки, и это как раз та область, где "
+"всегда нужны добровольцы. (Детальное описание обязанностей сопровождающего "
+"можно найти в разделе extref:{developers-handbook}[Руководства Разработчика, "
+"POLICIES-MAINTAINER].)"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:100
+msgid ""
+"To submit the diff, use the https://bugs.freebsd.org/submit/[bug submit "
+"form] (product `Ports & Packages`, component `Individual Port(s)`). Always "
+"include the category with the port name, followed by colon, and brief "
+"description of the issue. Examples: `_category/portname_: _add FOO "
+"option_`; `_category/portname_: _Update to X.Y_`. Please mention any added "
+"or deleted files in the message, as they have to be explicitly specified to "
+"man:git[1] when doing a commit. Do not compress or encode the diff."
+msgstr ""
+"Для отправки diff используйте https://bugs.freebsd.org/submit/[форму "
+"отправки багов] (продукт `Ports & Packages`, компонент `Individual "
+"Port(s)`). Всегда указывайте категорию с именем порта, за которой следует "
+"двоеточие и краткое описание проблемы. Примеры: `_категория/имя_порта_: "
+"_добавить опцию FOO_`; `_категория/имя_порта_: _Обновление до X.Y_`. "
+"Упоминайте в сообщении все добавленные или удалённые файлы, так как они "
+"должны быть явно указаны в man:git[1] при выполнении коммита. Не сжимайте и "
+"не кодируйте diff."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:103
+msgid ""
+"Before submitting the bug, review the extref:{problem-reports}[Writing the "
+"problem report, pr-writing] section in the Problem Reports article. It "
+"contains far more information about how to write useful problem reports."
+msgstr ""
+"Прежде чем отправить сообщение об ошибке, ознакомьтесь с разделом extref:"
+"{problem-reports}[Написание отчета о проблеме, pr-writing] в статье \"Отчеты "
+"о проблемах\". В нем содержится гораздо больше информации о том, как "
+"составлять полезные отчеты о проблемах."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:109
+msgid ""
+"If the upgrade is motivated by security concerns or a serious fault in the "
+"currently committed port, please notify the {portmgr} to request immediate "
+"rebuilding and redistribution of the port's package. Unsuspecting users of "
+"`pkg` will otherwise continue to install the old version via `pkg install` "
+"for several weeks."
+msgstr ""
+"Если обновление вызвано соображениями информационной безопасности или "
+"наличием серьёзных ошибок в имеющемся порте, пожалуйста, оповестите "
+"{portmgr} о необходимости немедленного перепостроения и повторного "
+"распространения пакета данного порта. В противном случае ничего не "
+"подозревающие пользователи `pkg` будут продолжать устанавливать старую "
+"версию по команде `pkg install` в течение ещё нескольких недель."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:116
+msgid ""
+"Please use man:diff[1] or `git diff` to create updates to existing ports. "
+"Other formats include the whole file and make it impossible to see just what "
+"has changed. When diffs are not included, the entire update might be "
+"ignored."
+msgstr ""
+"Пожалуйста, используйте man:diff[1] или `git diff` для создания обновлений "
+"существующих портов. Другие форматы включают весь файл и делают невозможным "
+"увидеть только изменённые части. Если различия не включены, всё обновление "
+"может быть проигнорировано."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:119
+msgid ""
+"Now that all of that is done, read about how to keep up-to-date in "
+"crossref:keeping-up[keeping-up,Keeping Up]."
+msgstr ""
+"Теперь, когда вы проделали всё это, прочитайте о том, как поддерживать "
+"актуальное состояние, в crossref:keeping-up[keeping-up, Актуализация]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:121
+#, no-wrap
+msgid "Using Git to Make Patches"
+msgstr "Использование Git для создания патчей"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:130
+msgid ""
+"When possible, please submit a man:git[1] patch or diff. They are easier to "
+"handle than diffs between \"new and old\" directories. It is easier to see "
+"what has changed, and to update the diff if something was modified in the "
+"Ports Collection since the work on it began, or if the committer asks for "
+"something to be fixed. Also, a patch generated with man:git-format-patch[1] "
+"or man:git-diff[1] can be easily applied with man:git-am[1] or man:git-"
+"apply[1] and will save some time for the committer. Finally, the git patch "
+"generated by man:git-format-patch[1] includes your author information and "
+"commit messages. These will be recorded in the log of the repository and "
+"this is the recommended way to submit your changes."
+msgstr ""
+"Когда это возможно, пожалуйста, предоставляйте патч или diff с помощью "
+"man:git[1]. Их проще обрабатывать, чем различия между «новым и старым» "
+"каталогом. Так легче увидеть, что изменилось, и обновить diff, если что-то "
+"было изменено в Коллекции портов с момента начала работы над ней, или если "
+"коммиттер просит что-то исправить. Кроме того, патч, созданный с помощью "
+"man:git-format-patch[1] или man:git-diff[1], можно легко применить с помощью "
+"man:git-am[1] или man:git-apply[1], что сэкономит время коммиттера. Наконец, "
+"git-патч, созданный man:git-format-patch[1], включает информацию об авторе и "
+"сообщения коммитов. Они будут записаны в лог репозитория, и это "
+"рекомендуемый способ отправки ваших изменений."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:135
+#, no-wrap
+msgid ""
+"% git clone https://git.FreeBSD.org/ports.git ~/my_wrkdir <.> <.>\n"
+"% cd ~/my_wrkdir\n"
+msgstr ""
+"% git clone https://git.FreeBSD.org/ports.git ~/my_wrkdir <.> <.>\n"
+"% cd ~/my_wrkdir\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:138
+msgid ""
+"This can be anywhere, of course. Building ports is not limited to within "
+"[.filename]#/usr/ports/#."
+msgstr ""
+"Это может быть где угодно; место, в котором производится построение портов, "
+"не привязано к [.filename]#/usr/ports/#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:140
+msgid ""
+"https://git.FreeBSD.org/[git.FreeBSD.org] is the FreeBSD public Git server. "
+"See extref:{handbook}mirrors[FreeBSD Git Repository URL Table, git-url-"
+"table] for more information."
+msgstr ""
+"https://git.FreeBSD.org/[git.FreeBSD.org] — это публичный Git-сервер "
+"FreeBSD. Подробнее см. в extref:{handbook}mirrors[таблице URL-репозиториев "
+"FreeBSD Git, git-url-table]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:143
+msgid ""
+"While in the port directory, make any changes that are needed. If adding, "
+"moving, or removing a file, use `git` to track these changes:"
+msgstr ""
+"Находясь в каталоге порта, внесите необходимые изменения. Если требуется "
+"добавить, переместить или удалить файл, используйте `git` для отслеживания "
+"этих изменений:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:149
+#, no-wrap
+msgid ""
+"% git add new_file\n"
+"% git mv old_name new_name\n"
+"% git rm deleted_file\n"
+msgstr ""
+"% git add new_file\n"
+"% git mv old_name new_name\n"
+"% git rm deleted_file\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:152
+msgid ""
+"Make sure to check the port using the checklist in crossref:quick-"
+"porting[porting-testing,Testing the Port] and crossref:quick-porting[porting-"
+"portlint,Checking the Port with `portlint`]."
+msgstr ""
+"Убедитесь, что проверили порт, используя контрольный список в crossref:quick-"
+"porting[porting-testing,Тестирование порта] и crossref:quick-porting[porting-"
+"portlint,Проверка порта с помощью `portlint`]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:154
+msgid "Also, update the checksum reference in distinfo with `make makesum`."
+msgstr ""
+"Также обновите ссылку на контрольную сумму в distinfo с помощью `make "
+"makesum`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:158
+msgid ""
+"Before making the patch, fetch the latest repository and rebase the changes "
+"on top of it. Watch and follow the output carefully. If any of the files "
+"failed to rebase, it means that the upstream files changed while you were "
+"editing the same file, and the conflicts need to be resolved manually."
+msgstr ""
+"Прежде чем создавать патч, загрузите последнюю версию репозитория и "
+"перебазируйте изменения поверх неё. Внимательно следите за выводом и "
+"следуйте ему. Если какие-либо файлы не удалось перебазировать, это означает, "
+"что исходные файлы изменились во время вашего редактирования, и конфликты "
+"необходимо разрешить вручную."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:163
+#, no-wrap
+msgid ""
+"% git fetch origin main\n"
+"% git rebase origin/main\n"
+msgstr ""
+"% git fetch origin main\n"
+"% git rebase origin/main\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:166
+msgid "Check the changes staged for the patch:"
+msgstr "Проверьте изменения, подготовленные для исправления:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:171
+#, no-wrap
+msgid ""
+"% git status\n"
+"% git diff --staged\n"
+msgstr ""
+"% git status\n"
+"% git diff --staged\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:174
+msgid "The last step is to make an unified diff or patch of the changes:"
+msgstr "Последний шаг — создать унифицированный diff или патч изменений:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:176
+msgid "To generate a patch with man:git-format-patch[1]:"
+msgstr "Для создания патча с помощью man:git-format-patch[1]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:181
+#, no-wrap
+msgid ""
+"% git checkout -b my_branch\n"
+"% git commit\n"
+"% git format-patch main\n"
+msgstr ""
+"% git checkout -b my_branch\n"
+"% git commit\n"
+"% git format-patch main\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:187
+msgid ""
+"This will generate a patch named like `0001-foo.patch`. This is the "
+"preferred way as it would include author identity, and it is also easier "
+"when you are making a series of changes that are not meant to be squashed "
+"together."
+msgstr ""
+"Это создаст файл исправления с именем вида `0001-foo.patch`. Это "
+"предпочтительный способ, так как он включает идентификацию автора, а также "
+"удобнее, когда вы делаете серию изменений, которые не должны объединяться "
+"вместе."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:189
+msgid "Alternatively, to generate an unified diff with man:git-diff[1]:"
+msgstr "Или для создания унифицированного diff с помощью man:git-diff[1]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:192
+#, no-wrap
+msgid "% git diff --staged > ../`make -VPKGNAME`.diff\n"
+msgstr "% git diff --staged > ../`make -VPKGNAME`.diff\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:195
+msgid ""
+"This will generate a diff named like `foo-1.2.3.diff`. Where `foo` is "
+"replaced with the first line of the commit message, i.e., the subject of the "
+"commit message."
+msgstr ""
+"Это создаст файл с различиями с именем вида `foo-1.2.3.diff`. Здесь `foo` "
+"заменяется на первую строку сообщения коммита, то есть на тему сообщения "
+"коммита."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:197
+msgid ""
+"After patch has been created, you can switch to the main branch for starting "
+"other developments."
+msgstr ""
+"После создания патча вы можете переключиться на основную ветку для начала "
+"других разработок."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:200
+#, no-wrap
+msgid "% git checkout main\n"
+msgstr "% git checkout main\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:203
+msgid ""
+"Once the patch is accepted and merged, you can delete the local development "
+"branch if you want:"
+msgstr ""
+"После принятия и слияния патча вы можете удалить локальную ветку разработки, "
+"если хотите:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:206
+#, no-wrap
+msgid "% git branch -D my_branch\n"
+msgstr "% git branch -D my_branch\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:213
+msgid ""
+"If files have been added, moved, or removed, include the man:git[1] `add`, "
+"`mv`, and `rm` commands that were used. `git mv` must be run before the "
+"patch can be applied. `git add` or `git rm` must be run after the patch is "
+"applied."
+msgstr ""
+"Если файлы были добавлены, перемещены или удалены, укажите использованные "
+"команды man:git[1] `add`, `mv` и `rm`. Команда `git mv` должна быть "
+"выполнена до применения патча. Команды `git add` или `git rm` должны быть "
+"выполнены после применения патча."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:216
+msgid ""
+"Send the patch following the extref:{problem-reports}[problem report "
+"submission guidelines, pr-writing]."
+msgstr ""
+"Отправьте исправление, следуя extref:{problem-reports}[рекомендациям по "
+"отправке отчетов о проблемах, pr-writing]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:218
+#, no-wrap
+msgid "UPDATING and MOVED"
+msgstr "UPDATING и MOVED"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:221
+#, no-wrap
+msgid "/usr/ports/UPDATING"
+msgstr "/usr/ports/UPDATING"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:225
+msgid ""
+"If upgrading the port requires special steps like changing configuration "
+"files or running a specific program, it must be documented in this file. "
+"The format of an entry in this file is:"
+msgstr ""
+"Если обновление порта требует специальных действий, таких как изменение "
+"конфигурационных файлов или запуск определённой программы, это должно быть "
+"задокументировано в данном файле. Формат записи в этом файле следующий:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:231
+#, no-wrap
+msgid ""
+"YYYYMMDD:\n"
+" AFFECTS: users of portcategory/portname\n"
+" AUTHOR: Your name <Your email address>\n"
+msgstr ""
+"YYYYMMDD:\n"
+" AFFECTS: users of portcategory/portname\n"
+" AUTHOR: Your name <Your email address>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:233
+#, no-wrap
+msgid " Special instructions\n"
+msgstr " Special instructions\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:240
+msgid ""
+"When including exact portmaster, portupgrade, and/or pkg instructions, "
+"please make sure to get the shell escaping right. For example, do _not_ use:"
+msgstr ""
+"При включении точных инструкций для portmaster, portupgrade и/или pkg, "
+"убедитесь в правильности экранирования в shell. Например, _не_ используйте:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:244
+#, no-wrap
+msgid "# pkg delete -g -f docbook-xml* docbook-sk* docbook[2345]??-* docbook-4*\n"
+msgstr "# pkg delete -g -f docbook-xml* docbook-sk* docbook[2345]??-* docbook-4*\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:248
+msgid ""
+"As shown, the command will only work with bourne shells. Instead, use the "
+"form shown below, which will work with both bourne shell and c-shell:"
+msgstr ""
+"Как показано, команда будет работать только с bourne-оболочками. Вместо "
+"этого используйте форму, приведённую ниже, которая будет работать как с "
+"bourne-оболочкой, так и с c-оболочкой:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:252
+#, no-wrap
+msgid "# pkg delete -g -f docbook-xml\\* docbook-sk\\* docbook\\[2345\\]\\?\\?-\\* docbook-4\\*\n"
+msgstr "# pkg delete -g -f docbook-xml\\* docbook-sk\\* docbook\\[2345\\]\\?\\?-\\* docbook-4\\*\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:260
+msgid ""
+"It is recommended that the AFFECTS line contains a glob matching all the "
+"ports affected by the entry so that automated tools can parse it as easily "
+"as possible. If an update concerns all the existing BIND 9 versions the "
+"`AFFECTS` content must be `users of dns/bind9*`, it must _not_ be `users of "
+"BIND 9`"
+msgstr ""
+"Рекомендуется, чтобы строка AFFECTS содержала glob-выражение, "
+"соответствующее всем портам, затронутым записью, чтобы автоматизированные "
+"инструменты могли максимально легко её обработать. Если обновление касается "
+"всех существующих версий BIND 9, содержимое `AFFECTS` должно быть `users of "
+"dns/bind9*`, и оно _не должно_ быть `users of BIND 9`"
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:263
+#, no-wrap
+msgid "/usr/ports/MOVED"
+msgstr "/usr/ports/MOVED"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:269
+msgid ""
+"This file is used to list moved or removed ports. Each line in the file is "
+"made up of the name of the port, where the port was moved, when, and why. "
+"If the port was removed, the section detailing where it was moved can be "
+"left blank. Each section must be separated by the `|` (pipe) character, "
+"like so:"
+msgstr ""
+"Этот файл используется для перечисления перемещённых или удалённых портов. "
+"Каждая строка в файле состоит из названия порта, места, куда порт был "
+"перемещён, даты и причины. Если порт был удалён, раздел с указанием места "
+"перемещения может быть оставлен пустым. Каждый раздел должен быть отделён "
+"символом `|` (вертикальная черта), например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:273
+#, no-wrap
+msgid "old name|new name (blank for deleted)|date of move|reason\n"
+msgstr "old name|new name (blank for deleted)|date of move|reason\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:277
+msgid ""
+"The date must be entered in the form `YYYY-MM-DD`. New entries are added to "
+"the end of the list to keep it in chronological order, with the oldest entry "
+"at the top of the list."
+msgstr ""
+"Дата должна быть введена в формате `ГГГГ-ММ-ДД`. Новые записи добавляются в "
+"конец списка, чтобы сохранить его в хронологическом порядке, при этом самая "
+"старая запись находится в начале списка."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:279
+msgid ""
+"If a port was removed but has since been restored, delete the line in this "
+"file that states that it was removed."
+msgstr ""
+"Если порт был удален, но затем восстановлен, удалите строку в этом файле, "
+"которая указывает, что он был удален."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:281
+msgid ""
+"If a port was renamed and then renamed back to its original name, add a new "
+"one with the intermediate name to the old name, and remove the old entry as "
+"to not create a loop."
+msgstr ""
+"Если порт был переименован, а затем переименован обратно в исходное имя, "
+"добавьте новую запись с промежуточным именем для старого имени и удалите "
+"старую запись, чтобы не создавать цикл."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:285
+msgid "Any changes must be validated with `Tools/scripts/MOVEDlint.awk`."
+msgstr ""
+"Любые изменения должны быть проверены с помощью `Tools/scripts/"
+"MOVEDlint.awk`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:287
+msgid "If using a ports directory other than [.filename]#/usr/ports#, use:"
+msgstr ""
+"Если используется каталог портов, отличный от [.filename]#/usr/ports#, "
+"следует указать:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:292
+#, no-wrap
+msgid ""
+"% cd /home/user/ports\n"
+"% env PORTSDIR=$PWD Tools/scripts/MOVEDlint.awk\n"
+msgstr ""
+"% cd /home/user/ports\n"
+"% env PORTSDIR=$PWD Tools/scripts/MOVEDlint.awk\n"
diff --git a/documentation/content/ru/books/porters-handbook/uses/_index.adoc b/documentation/content/ru/books/porters-handbook/uses/_index.adoc
index 3e441f697e..3f90e301f2 100644
--- a/documentation/content/ru/books/porters-handbook/uses/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/uses/_index.adoc
@@ -1,26 +1,27 @@
---
-title: Глава 15. Значения USES
-prev: books/porters-handbook/keeping-up
+description: 'Макросы USES упрощают объявление требований и настроек для порта FreeBSD'
next: books/porters-handbook/versions
-showBookMenu: true
-weight: 15
params:
- path: "/books/porters-handbook/uses/"
+ path: /books/porters-handbook/uses/
+prev: books/porters-handbook/keeping-up
+showBookMenu: true
+tags: ["uses", "macros", "introduction", "guide"]
+title: 'Глава 17. Использование макроса USES'
+weight: 17
---
[[uses]]
-= Значения `USES`
+= Использование макроса `USES`
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 15
+:sectnumoffset: 17
:partnums:
:source-highlighter: rouge
:experimental:
-:c-plus-plus: c++
:images-path: books/porters-handbook/
ifdef::env-beastie[]
@@ -48,17 +49,14 @@ include::../../../../../shared/asciidoctor.adoc[]
endif::[]
[[uses-intro]]
-== An Introduction to `USES`
+== Введение в `USES`
-`USES` macros make it easy to declare requirements and settings for a port.
-They can add dependencies, change building behavior, add metadata to packages, and so on, all by selecting simple, preset values.
+Макросы `USES` упрощают объявление требований и настроек для порта. Они могут добавлять зависимости, изменять поведение при сборке, добавлять метаданные в пакеты и так далее, просто выбирая предустановленные значения.
-Each section in this chapter describes a possible value for `USES`, along with its possible arguments.
-Arguments are appended to the value after a colon (`:`).
-Multiple arguments are separated by commas (`,`).
+Каждый раздел в этой главе описывает возможное значение для `USES`, а также его возможные аргументы. Аргументы добавляются к значению после двоеточия (`:`). Несколько аргументов разделяются запятыми (`,`).
[[uses-intro-ex1]]
-.Using Multiple Values
+.Использование нескольких значений
[example]
====
[.programlisting]
@@ -68,7 +66,7 @@ USES= bison perl
====
[[uses-intro-ex2]]
-.Adding an Argument
+.Добавление аргумента
[example]
====
[.programlisting]
@@ -78,7 +76,7 @@ USES= tar:xz
====
[[uses-intro-ex3]]
-.Adding Multiple Arguments
+.Добавление нескольких аргументов
[example]
====
[.programlisting]
@@ -88,7 +86,7 @@ USES= drupal:7,theme
====
[[uses-intro-ex4]]
-.Mixing it All Together
+.Смешивая Все Вместе
[example]
====
[.programlisting]
@@ -100,418 +98,721 @@ USES= pgsql:9.3+ cpe python:2.7,build
[[uses-7z]]
== `7z`
-Possible arguments: (none), `p7zip`, `partial`
+Возможные аргументы: (нет), `p7zip`, `partial`
-Extract using man:7z[1] instead of man:bsdtar[1] and sets `EXTRACT_SUFX=.7z`.
-The `p7zip` option forces a dependency on the `7z` from package:archivers/p7zip[] if the one from the base system is not able to extract the files.
-`EXTRACT_SUFX` is not changed if the `partial` option is used, this can be used if the main distribution file does not have a [.filename]#.7z# extension.
+Извлечение с использованием man:7z[1] вместо man:bsdtar[1] и устанавливает `EXTRACT_SUFX=.7z`. Опция `p7zip` добавляет зависимость от `7z` из package:archivers/p7zip[], если версия из базовой системы не может извлечь файлы. `EXTRACT_SUFX` не изменяется, если используется опция `partial`, это может быть полезно, если основной дистрибутивный файл не имеет расширения [.filename]#.7z#.
[[uses-ada]]
== `ada`
-Possible arguments: (none), `5`, `6`
+Возможные аргументы: (нет), `6`, `12`, `(запуск)`
+
+Зависит от компилятора с поддержкой Ada и устанавливает `CC` соответствующим образом. По умолчанию используется `gcc6-aux` из портов.
+
+[[uses-angr]]
+== `angr`
+
+Возможные аргументы: `binaries`, `nose`
+
+Обеспечить поддержку портов, требующих https://github.com/angr/angr[платформу бинарного анализа angr].
+
+Если присутствует аргумент `binaries`, для тестирования порта требуются специальные бинарные файлы `angr`.
+
+Если присутствует аргумент `nose`, порт использует `nosetests` для цели тестирования. Этот аргумент подразумевает `USES=python:test`.
+
+Фреймворк предоставляет следующие переменные, которые могут быть установлены портом:
+
+`ANGR_VERSION`::
+Версия программ проекта `angr`.
+
+`ANGR_BINARIES_TAGNAME`::
+Имя тега для бинарных файлов `angr`.
+
+`ANGR_NOSETESTS`::
+Путь к программе `nosetests`.
+
+[[uses-ansible]]
+== `ansible`
+
+Возможные аргументы: `env`, `module`, `plugin`
+
+Обеспечивает поддержку портов, зависящих от пакета package:sysutils/ansible[].
+
+Если присутствует аргумент `env`, порт не зависит от package:sysutils/ansible[], но требует установки некоторых переменных Ansible.
+
+Если присутствует аргумент `module`, то порт является модулем Ansible.
+
+Если присутствует аргумент `plugin`, то порт является плагином Ansible.
+
+Фреймворк предоставляет следующие переменные порту:
+
+`ANSIBLE_CMD`::
+Путь к программе ansible.
+
+`ANSIBLE_DOC_CMD`::
+Путь к программе ansible-doc.
+
+`ANSIBLE_RUN_DEPENDS`::
+RUN_DEPENDS с портом Ansible.
+
+`ANSIBLE_DATADIR`::
+Путь к корню структуры каталогов, где хранятся все модули и плагины Ansible.
+
+`ANSIBLE_ETCDIR`::
+Путь к каталогу etc Ansible.
+
+`ANSIBLE_PLUGINS_PREFIX`::
+Путь к директории "plugins" в `${ANSIBLE_DATADIR}`.
+`ANSIBLE_MODULESDIR`::
+Путь к каталогу для локальных модулей Ansible.
+
+`ANSIBLE_PLUGINSDIR`::
+Путь к каталогу для локальных плагинов Ansible.
+
+`ANSIBLE_PLUGIN_TYPE`::
+Тип плагина Ansible (например, "connection", "inventory" или "vars").
+
+[[uses-apache]]
+== `apache`
+
+Возможные аргументы: (нет), `2.4`, `build`, `run`, `server`
+
+Обеспечивает поддержку портов, зависящих от веб-сервера Apache.
+
+Аргумент `version` можно использовать для указания конкретной версии Apache httpd. Можно задать определённую версию (`USES=apache:2.4`), минимальную версию (`USES=apache:2.4+`) или максимальную версию (`USES=apache:-2.4`).
+
+Если указан аргумент `build`, к порту добавляется зависимость для сборки.
+
+Если указан аргумент `run`, к порту добавляется зависимость времени выполнения.
+
+Если указан аргумент `server`, это означает, что порт является серверным.
+
+Фреймворк предоставляет следующие переменные, которые могут быть установлены портом:
+
+`AP_FAST_BUILD`::
+Автоматическая сборка модуля
+
+`AP_GENPLIST`::
+Автоматическое создание `PLIST` плюс добавление модуля в отключенном состоянии в [.filename]#httpd.conf# (только если нет файла `pkg-plist`)
+
+`MODULENAME`::
+Имя модуля Apache. По умолчанию: `${PORTNAME}`
+
+`SHORTMODNAME`::
+Краткое название модуля Apache. По умолчанию: `${MODULENAME:S/mod_//}`
+
+`SRC_FILE`::
+Исходный файл модуля APACHE. По умолчанию: `${MODULENAME}.c`
+
+Следующие переменные могут быть доступны для порта:
+
+`APACHE_VERSION`::
+Основная-вспомогательная версия выбранного сервера Apache, например 2.4
+
+`APACHEETCDIR`::
+Расположение каталога конфигурации Apache. По умолчанию: [.filename]#${LOCALBASE}/etc/apache24#
+
+`APACHEINCLUDEDIR`::
+Расположение include-файлов Apache. По умолчанию: [.filename]#${LOCALBASE}/include/apache24#
+
+`APACHEMODDIR`::
+Расположение модулей Apache. По умолчанию: [.filename]#${LOCALBASE}/libxexec/apache24#
+
+`APACHE_DEFAULT`::Версия Apache по умолчанию
-Depends on an Ada-capable compiler, and sets `CC` accordingly.
-Defaults to use gcc 5 from ports.
-Use the `:_X_` version option to force building with a different version.
[[uses-autoreconf]]
== `autoreconf`
-Possible arguments: (none), `build`
+Возможные аргументы: (нет), `build`
+
+Выполняет `autoreconf`. Эта команда объединяет функциональность `aclocal`, `autoconf`, `autoheader`, `automake`, `autopoint` и `libtoolize`. Каждая из этих команд применяется к [.filename]#${AUTORECONF_WRKSRC}/configure.ac# или его старому названию [.filename]#${AUTORECONF_WRKSRC}/configure.in#. Если [.filename]#configure.ac# определяет подкаталоги с их собственными [.filename]#configure.ac# с использованием `AC_CONFIG_SUBDIRS`, `autoreconf` также рекурсивно обновит их. Аргумент `:build` только добавляет зависимости времени сборки на эти инструменты, но не запускает `autoreconf`. Порт может установить `AUTORECONF_WRKSRC`, если `WRKSRC` не содержит путь к [.filename]#configure.ac#.
+
+[[uses-azurepy]]
+== `azurepy`
+
+Возможные аргументы: (отсутствуют)
-Runs `autoreconf`.
-It encapsulates the `aclocal`, `autoconf`, `autoheader`, `automake`, `autopoint`, and `libtoolize` commands.
-Each command applies to [.filename]#${AUTORECONF_WRKSRC}/configure.ac# or its old name, [.filename]#${AUTORECONF_WRKSRC}/configure.in#.
-If [.filename]#configure.ac# defines subdirectories with their own [.filename]#configure.ac# using `AC_CONFIG_SUBDIRS`, `autoreconf` will recursively update those as well.
-The `:build` argument only adds build time dependencies on those tools but does not run `autoreconf`.
-A port can set `AUTORECONF_WRKSRC` if `WRKSRC` does not contain the path to [.filename]#configure.ac#.
+Обеспечить поддержку портов `py-azure*`. Удаляет пространства имен `azure` и очищает общие файлы.
[[uses-blaslapack]]
== `blaslapack`
-Possible arguments: (none), `atlas`, `netlib` (default), `gotoblas`, `openblas`
+Возможные аргументы: (нет), `atlas`, `netlib` (по умолчанию), `gotoblas`, `openblas`
-Adds dependencies on Blas / Lapack libraries.
+Добавляет зависимости от библиотек Blas / Lapack.
[[uses-bdb]]
== `bdb`
-Possible arguments: (none), `48`, `5` (default), `6`
+Возможные аргументы: (отсутствуют), `5` (по умолчанию), `18`
-Add dependency on the Berkeley DB library.
-Default to package:databases/db5[].
-It can also depend on package:databases/db48[] when using the `:48` argument or package:databases/db6[] with `:6`.
-It is possible to declare a range of acceptable values, `:48+` finds the highest installed version, and falls back to 4.8 if nothing else is installed.
-`INVALID_BDB_VER` can be used to specify versions which do not work with this port.
-The framework exposes the following variables to the port:
+Добавить зависимость от библиотеки Berkeley DB. По умолчанию используется package:databases/db5[]. Также может зависеть от package:databases/db18[] при использовании аргумента `:18`. Можно объявить диапазон допустимых значений: `:5+` находит самую высокую установленную версию и возвращается к 5, если ничего другого не установлено. `INVALID_BDB_VER` можно использовать для указания версий, которые не работают с этим портом. Фреймворк предоставляет порту следующие переменные:
`BDB_LIB_NAME`::
-The name of the Berkeley DB library.
-For example, when using package:databases/db5[], it contains `db-5.3`.
+Имя библиотеки Berkeley DB. Например, при использовании package:databases/db5[] она содержит `db-5.3`.
`BDB_LIB_CXX_NAME`::
-The name of the Berkeley DBC++ library.
-For example, when using package:databases/db5[], it contains `db_cxx-5.3`.
+Название библиотеки Berkeley DBC++. Например, при использовании package:databases/db5[] она содержит `db_cxx-5.3`.
`BDB_INCLUDE_DIR`::
-The location of the Berkeley DB include directory.
-For example, when using package:databases/db5[], it will contain `${LOCALBASE}/include/db5`.
+Расположение каталога с заголовочными файлами Berkeley DB. Например, при использовании пакета package:databases/db5[], он будет содержать `${LOCALBASE}/include/db5`.
`BDB_LIB_DIR`::
-The location of the Berkeley DB library directory.
-For example, when using package:databases/db5[], it contains `${LOCALBASE}/lib`.
+Расположение каталога библиотеки Berkeley DB. Например, при использовании package:databases/db5[], он содержит `${LOCALBASE}/lib`.
`BDB_VER`::
-The detected Berkeley DB version.
-For example, if using `USES=bdb:48+` and Berkeley DB 5 is installed, it contains `5`.
+Обнаруженная версия Berkeley DB. Например, при использовании `USES=bdb:5+` и установленной Berkeley DB 18, будет содержать `18`.
[IMPORTANT]
====
-package:databases/db48[] is deprecated and unsupported.
-It must not be used by any port.
+package:databases/db48[] устарел и не поддерживается. Он не должен использоваться ни одним портом.
====
[[uses-bison]]
== `bison`
-Possible arguments: (none), `build`, `run`, `both`
+Возможные аргументы: (нет), `build`, `run`, `both`
-Uses package:devel/bison[] By default, with no arguments or with the `build` argument, it implies `bison` is a build-time dependency, `run` implies a run-time dependency, and `both` implies both run-time and build-time dependencies.
+Использует пакет package:devel/bison[] По умолчанию, без аргументов или с аргументом `build`, подразумевается, что `bison` является зависимостью на этапе сборки, `run` — зависимостью на этапе выполнения, а `both` — зависимостью как на этапе сборки, так и на этапе выполнения.
+
+[[uses-budgie]]
+== `budgie`
+
+Возможные аргументы: (отсутствуют)
+
+Предоставить поддержку окружения рабочего стола Budgie. Используйте `USE_BUDGIE` для выбора необходимых компонентов порта. Дополнительную информацию см. в разделе crossref:special[using-budgie,Использование Budgie].
[[uses-cabal]]
== `cabal`
[IMPORTANT]
====
-Ports should not be created for Haskell libraries, see crossref:special[haskell-libs,Haskell Libraries] for more information.
+Порты не следует создавать для библиотек Haskell, подробнее см. в crossref:special[haskell-libs,Библиотеки Haskell].
====
-Possible arguments: (none), `hpack`
+Возможные аргументы: (отсутствуют), `hpack`, `nodefault`
-Sets default values and targets used to build Haskell software using Cabal.
-A build dependency on the Haskell compiler port (GHC) is added.
-If `hpack` argument is given, a build dependency on package:devel/hs-hpack[] is added and `hpack` is invoked at configuration step to generate.
-cabal file.
+Устанавливает значения и цели по умолчанию, используемые для сборки программного обеспечения на Haskell с помощью Cabal. Добавляется зависимость для сборки на порт компилятора Haskell (package:lang/ghc[]). Если в переменной `BUILD_DEPENDS` уже указана другая версия GHC (например, package:lang/ghc810[]), она будет использована вместо версии по умолчанию. Если указан аргумент `hpack`, добавляется зависимость для сборки на package:devel/hs-hpack[], и `hpack` вызывается на этапе конфигурации для генерации файла .cabal. Если указан аргумент `nodefault`, фреймворк не будет пытаться загрузить основной дистрибутивный файл из Hackage. Этот аргумент добавляется неявно, если присутствует `USE_GITHUB` или `USE_GITLAB`.
-The framework provides the following variables:
+Фреймворк предоставляет следующие переменные:
+
+`CABAL_REVISION`::
+Пакеты Haskell, размещённые на Hackage, могут иметь ревизии. Установите этот параметр в целочисленное значение, чтобы использовать исправленное описание пакета.
`USE_CABAL`::
-If the software uses Haskell dependencies, list them in this variable.
-Each item should be present on Hackage and be listed in form `packagename-_0.1.2_`.
-Dependencies can have revisions, which are specified after the `_` symbol.
-Automatic generation of dependency list is supported, see crossref:special[using-cabal,Building Haskell Applications with `cabal`].
+Если программное обеспечение использует зависимости на Haskell, перечислите их в этой переменной. Каждый элемент должен присутствовать на Hackage и быть указан в формате `имяпакета-_0.1.2_`. Зависимости также могут иметь ревизии, которые указываются после символа `_`. Поддерживается автоматическое формирование списка зависимостей, см. crossref:special[using-cabal,Сборка приложений на Haskell с помощью `cabal`].
`CABAL_FLAGS`::
-List of flags to be passed to `cabal-install` during the configuring and building stage.
-The flags are passed verbatim.
+Список флагов, передаваемых `cabal-install` на этапах настройки и сборки. Флаги передаются в исходном виде. Эта переменная обычно используется для включения или отключения флагов, объявленных в файле .cabal. Передайте `foo`, чтобы включить флаг `foo`, и `-foo`, чтобы отключить его.
-`EXECUTABLES`::
-List of executable files installed by the port.
-Default value: `${PORTNAME}`.
-Items from this list are automatically added to pkg-plist.
+`CABAL_EXECUTABLES`::
+Список исполняемых файлов, устанавливаемых портом. Значение по умолчанию: `${PORTNAME}`. Для получения списка возможных значений этой переменной обратитесь к файлу .cabal портируемого проекта. Каждое значение соответствует разделу `executable` в файле .cabal. Элементы из этого списка автоматически добавляются в pkg-plist.
`SKIP_CABAL_PLIST`::
-If defined, do not add items from `${EXECUTABLES}` to pkg-plist.
+Если определено, не добавлять элементы из `${CABAL_EXECUTABLES}` в pkg-plist.
`opt_USE_CABAL`::
-Adds items to `${USE_CABAL}` depending on `opt` option.
+Добавляет элементы в `${USE_CABAL}` в зависимости от опции `opt`.
-`opt_EXECUTABLES`::
-Adds items to `${EXECUTABLES}` depending on `opt` option.
+`opt_CABAL_EXECUTABLES`::
+Добавляет элементы в `${CABAL_EXECUTABLES}` в зависимости от опции `opt`.
`opt_CABAL_FLAGS`::
-If `opt` is enabled, append the value to `${CABAL_FLAGS}`.
-Otherwise, append `-value` to disable the flag.
+Если `opt` включён, добавить значение к `${CABAL_FLAGS}`. В противном случае добавить `-value`, чтобы отключить флаг. Обратите внимание, что это поведение немного отличается от простого `CABAL_FLAGS`, так как оно не принимает значения, начинающиеся с `-`.
+
+`CABAL_WRAPPER_SCRIPTS`::
+Подмножество `${CABAL_EXECUTABLES}`, содержащее программы на Haskell, которые будут обёрнуты в shell-скрипт, устанавливающий переменные окружения `*_datadir` перед запуском программы. Это также приводит к тому, что фактический бинарный файл Haskell устанавливается в директорию `libexec/cabal/`. Данная настройка необходима для программ на Haskell, которые устанавливают свои файлы данных в директорию `share/`.
`FOO_DATADIR_VARS`::
-For an executable named `FOO` list Haskell packages, whose data files should be accessible by the executable.
+Список дополнительных пакетов Haskell, чьи файлы данных должны быть доступны исполняемому файлу с именем `FOO`. Исполняемый файл должен быть частью `${CABAL_WRAPPER_SCRIPTS}`. Указанные пакеты Haskell не должны иметь суффикса версии.
+
+`CABAL_PROJECT`::
+Некоторые проекты на Haskell могут уже иметь файл `cabal.project`, который также создаётся фреймворком портов. Если это так, используйте эту переменную, чтобы указать, что делать с оригинальным файлом `cabal.project`. Установка этой переменной в значение `remove` приведёт к удалению оригинального файла. Установка этой переменной в значение `append` приведёт к следующему:
+. Исходный файл переместится в `cabal.project.${PORTNAME}` на этапе `extract`.
+. Исходный файл `cabal.project.${PORTNAME}` и сгенерированный `cabal.project` объединятся в один файл после этапа `patch`. Использование `append` позволяет выполнить патчинг исходного файла перед его объединением.
[[uses-cargo]]
== `cargo`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Uses Cargo for configuring, building, and testing.
-It can be used to port Rust applications that use the Cargo build system.
-For more information see crossref:special[using-cargo,Building Rust Applications with `cargo`].
+Использует Cargo для настройки, сборки и тестирования. Может применяться для портирования приложений на Rust, использующих систему сборки Cargo. Дополнительную информацию смотрите в crossref:special[using-cargo,Сборка приложений на Rust с помощью `cargo`].
[[uses-charsetfix]]
== `charsetfix`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
+
+Предотвращает установку файла [.filename]#charset.alias# портом. Этот файл должен устанавливаться только пакетом package:converters/libiconv[]. Переменная `CHARSETFIX_MAKEFILEIN` может быть установлена в путь относительно `WRKSRC`, если [.filename]#charset.alias# не устанавливается через [.filename]#${WRKSRC}/Makefile.in#.
+
+[[uses-cl]]
+== `cl`
+
+Возможные аргументы: (отсутствуют)
+
+Предоставляет поддержку портов Common Lisp.
+
+Фреймворк предоставляет следующие переменные, которые могут быть установлены портами:
+
+`ASDF_MODULES`::
+Список модулей `ASDF` для сборки, когда установлен `FASL_TARGET` (по умолчанию `PORTNAME`)
+
+`FASL_TARGET`::
+Собрать fasl вариант порта (один из `ccl`, `clisp` или `sbcl`)
+
+`USE_ASDF`::
+Зависит от пакета package:devel/cl-asdf[]
+
+`USE_ASDF_FASL`::
+Зависит от `devel/cl-asdf-<FASL_TARGET>`
+
+`USE_CCL`::
+Зависит от пакета package:lang/ccl[]; подразумевается при `FASL_TARGET=ccl`
-Prevents the port from installing [.filename]#charset.alias#.
-This must be installed only by package:converters/libiconv[].
-`CHARSETFIX_MAKEFILEIN` can be set to a path relative to `WRKSRC` if [.filename]#charset.alias# is not installed by [.filename]#${WRKSRC}/Makefile.in#.
+`USE_CLISP`::
+Зависит от пакета package:lang/clisp[]; подразумевается при `FASL_TARGET=clisp`
+
+`USE_SBCL`::
+Зависит от пакета package:lang/sbcl[]; подразумевается, если `FASL_TARGET=SBCL`
+
+
+Фреймворк предоставляет следующие переменные, которые могут быть прочитаны портами:
+
+`ASDF_PATHNAME`::
+Путь к исходному коду CL
+
+`ASDF_REGISTRY`::
+Путь к реестру CL, содержащему файлы asd
+
+`CCL`::
+Путь к компилятору Clozure Common Lisp
+
+`CLISP`::
+Путь к компилятору GNU Common Lisp
+
+`CL_LIBDIR_REL`::
+Каталог библиотек CL относительно `LOCALBASE` или `PREFIX`
+
+`FASL_DIR_REL`::
+Относительный путь к скомпилированным fasl-файлам; зависит от `FASL_TARGET`
+
+`FASL_PATHNAME`::
+Путь к CL fasl
+
+`LISP_EXTRA_ARG`::
+Дополнительные аргументы, используемые при сборке fasl
+
+`SBCL`::
+Путь к компилятору Steel Bank Common Lisp
[[uses-cmake]]
== `cmake`
-Possible arguments: (none), `insource`, `noninja`, `run`, `testing`
+Возможные аргументы: (отсутствуют), `insource`, `noninja`, `run`, `testing`
-Use CMake for configuring the port and generating a build system.
+Используйте CMake для настройки порта и генерации системы сборки.
-By default an out-of-source build is performed, leaving the sources in `WRKSRC` free from build artifacts.
-With the `insource` argument, an in-source build will be performed instead.
-This argument should be an exception, used only when a regular out-of-source build does not work.
+По умолчанию выполняется сборка в дереве вне исходного кода, оставляя исходные файлы в `WRKSRC` свободными от артефактов сборки. С аргументом `insource` вместо этого будет выполнена сборка в исходном коде. Этот аргумент должен быть исключением и использоваться только в случае, когда обычная сборка вне исходного кода не работает.
-By default Ninja (package:devel/ninja[]) is used for the build.
-In some cases this does not work correctly.
-With the `noninja` argument, the build will use regular `make` for builds.
-This argument should only be used if a Ninja-based build does not work.
+По умолчанию для сборки используется Ninja (package:devel/ninja[]). В некоторых случаях это может работать некорректно. С аргументом `noninja` сборка будет использовать обычный `make`. Этот аргумент следует применять только если сборка на основе Ninja не работает.
-With the `run` argument, a run dependency is registered in addition to a build dependency.
+С аргументом `run` регистрируется зависимость во время выполнения в дополнение к зависимости при сборке.
-With the `testing` argument, a test-target is added that uses CTest.
-When running tests the port will be re-configured for testing and re-built.
+С аргументом `testing`, добавляется цель тестирования, использующая CTest. При запуске тестов порт будет переконфигурирован для тестирования и пересобран.
-For more information see crossref:special[using-cmake,Using `cmake`].
+Для получения дополнительной информации см. crossref:special[using-cmake,Использование `cmake`].
[[uses-compiler]]
== `compiler`
-Possible arguments: (none), `env` (default, implicit), `{c-plus-plus}17-lang`, `{c-plus-plus}14-lang`, `{c-plus-plus}11-lang`, `gcc-{c-plus-plus}11-lib`, `{c-plus-plus}11-lib`, `{c-plus-plus}0x`, `c11`, `nestedfct`, `features`
+Возможные аргументы: (нет), `env` (по умолчанию, подразумевается), `{cpp}17-lang`, `{cpp}14-lang`, `{cpp}11-lang`, `gcc-{cpp}11-lib`, `{cpp}11-lib`, `{cpp}0x`, `c11`, `nestedfct`, `features`
-Determines which compiler to use based on any given wishes.
-Use `{c-plus-plus}17-lang` if the port needs a {c-plus-plus}17-capable compiler, `{c-plus-plus}14-lang` if the port needs a {c-plus-plus}14-capable compiler, `{c-plus-plus}11-lang` if the port needs a {c-plus-plus}11-capable compiler, `gcc-{c-plus-plus}11-lib` if the port needs the `g++` compiler with a {c-plus-plus}11 library, or `{c-plus-plus}11-lib` if the port needs a {c-plus-plus}11-ready standard library.
-If the port needs a compiler understanding {c-plus-plus}0X, C11 or nested functions, the corresponding parameters should be used.
+Определяет, какой компилятор использовать, исходя из заданных предпочтений. Используйте `{cpp}17-lang`, если порту требуется компилятор с поддержкой {cpp}17, `{cpp}14-lang`, если порту требуется компилятор с поддержкой {cpp}14, `{cpp}11-lang`, если порту требуется компилятор с поддержкой {cpp}11, `gcc-{cpp}11-lib`, если порту требуется компилятор `g++` с библиотекой {cpp}11, или `{cpp}11-lib`, если порту требуется стандартная библиотека с поддержкой {cpp}11. Если порту требуется компилятор, понимающий {cpp}0X, C11 или вложенные функции, следует использовать соответствующие параметры.
-Use `features` to request a list of features supported by the default compiler.
-After including [.filename]#bsd.port.pre.mk# the port can inspect the results using these variables:
+Используйте `features` для запроса списка возможностей, поддерживаемых компилятором по умолчанию. После включения [.filename]#bsd.port.pre.mk# порт может проверить результаты с помощью следующих переменных:
-* `COMPILER_TYPE`: the default compiler on the system, either gcc or clang
-* `ALT_COMPILER_TYPE`: the alternative compiler on the system, either gcc or clang. Only set if two compilers are present in the base system.
-* `COMPILER_VERSION`: the first two digits of the version of the default compiler.
-* `ALT_COMPILER_VERSION`: the first two digits of the version of the alternative compiler, if present.
-* `CHOSEN_COMPILER_TYPE`: the chosen compiler, either gcc or clang
-* `COMPILER_FEATURES`: the features supported by the default compiler. It currently lists the {c-plus-plus} library.
+* `COMPILER_TYPE`: компилятор по умолчанию в системе, gcc или clang
+* `ALT_COMPILER_TYPE`: альтернативный компилятор в системе, gcc или clang. Устанавливается только при наличии двух компиляторов в базовой системе.
+* `COMPILER_VERSION`: первые две цифры версии компилятора по умолчанию.
+* `ALT_COMPILER_VERSION`: первые две цифры версии альтернативного компилятора, если он присутствует.
+* `CHOSEN_COMPILER_TYPE`: выбранный компилятор, gcc или clang
+* `COMPILER_FEATURES`: возможности, поддерживаемые компилятором по умолчанию. В настоящее время указана библиотека {cpp}.
[[uses-cpe]]
== `cpe`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Include Common Platform Enumeration (CPE) information in package manifest as a CPE 2.3 formatted string.
-See the http://scap.nist.gov/specifications/cpe/[CPE specification] for details.
-To add CPE information to a port, follow these steps:
+Включает информацию о Common Platform Enumeration (CPE) в манифест пакета в виде строки формата CPE 2.3. Подробности см. в https://scap.nist.gov/specifications/cpe/[спецификации CPE]. Чтобы добавить информацию CPE в порт, выполните следующие шаги:
[.procedure]
-. Search for the official CPE entry for the software product either by using the NVD's http://web.nvd.nist.gov/view/cpe/search[CPE search engine] or in the http://static.nvd.nist.gov/feeds/xml/cpe/dictionary/official-cpe-dictionary_v2.3.xml[official CPE dictionary] (warning, very large XML file). _Do not ever make up CPE data._
-. Add `cpe` to `USES` and compare the result of `make -V CPE_STR` to the CPE dictionary entry. Continue one step at a time until `make -V CPE_STR` is correct.
-. If the product name (second field, defaults to `PORTNAME`) is incorrect, define `CPE_PRODUCT`.
-. If the vendor name (first field, defaults to `CPE_PRODUCT`) is incorrect, define `CPE_VENDOR`.
-. If the version field (third field, defaults to `PORTVERSION`) is incorrect, define `CPE_VERSION`.
-. If the update field (fourth field, defaults to empty) is incorrect, define `CPE_UPDATE`.
-. If it is still not correct, check [.filename]#Mk/Uses/cpe.mk# for additional details, or contact the {ports-secteam}.
-. Derive as much as possible of the CPE name from existing variables such as `PORTNAME` and `PORTVERSION`. Use variable modifiers to extract the relevant portions from these variables rather than hardcoding the name.
-. _Always_ run `make -V CPE_STR` and check the output before committing anything that changes `PORTNAME` or `PORTVERSION` or any other variable which is used to derive `CPE_STR`.
+. Поищите официальную запись CPE для программного продукта, используя либо https://web.nvd.nist.gov/view/cpe/search[поисковую систему CPE] от NVD, либо https://nvd.nist.gov/feeds/xml/cpe/dictionary/official-cpe-dictionary_v2.3.xml.gz[официальный словарь CPE] (предупреждение: очень большой XML-файл). _Никогда не создавайте данные CPE самостоятельно._
+. Добавьте `cpe` в `USES` и сравните результат выполнения `make -V CPE_STR` с записью в словаре CPE. Продолжайте шаг за шагом, пока результат `make -V CPE_STR` не станет корректным.
+. Если название продукта (второе поле, по умолчанию `PORTNAME`) указано неверно, определите `CPE_PRODUCT`.
+. Если название производителя (первое поле, по умолчанию `CPE_PRODUCT`) указано неверно, определите `CPE_VENDOR`.
+. Если поле версии (третье поле, по умолчанию `PORTVERSION`) указано неверно, определите `CPE_VERSION`.
+. Если поле обновления (четвертое поле, по умолчанию пустое) указано неверно, определите `CPE_UPDATE`.
+. Если это всё ещё неверно, проверьте файл [.filename]#Mk/Uses/cpe.mk# для получения дополнительной информации или свяжитесь с {ports-secteam}.
+. Извлекайте как можно больше информации для имени CPE из существующих переменных, таких как `PORTNAME` и `PORTVERSION`. Используйте модификаторы переменных для извлечения соответствующих частей из этих переменных, вместо того чтобы жестко прописывать имя.
+. _Всегда_ выполняйте `make -V CPE_STR` и проверяйте вывод перед коммитом любых изменений, затрагивающих `PORTNAME`, `PORTVERSION` или любые другие переменные, используемые для формирования `CPE_STR`.
[[uses-cran]]
== `cran`
-Possible arguments: (none), `auto-plist`, `compiles`
+Возможные аргументы: (нет), `auto-plist`, `compiles`
-Uses the Comprehensive R Archive Network.
-Specify `auto-plist` to automatically generate [.filename]#pkg-plist#.
-Specify `compiles` if the port has code that need to be compiled.
+Использует Comprehensive R Archive Network. Укажите `auto-plist` для автоматического создания [.filename]#pkg-plist#. Укажите `compiles`, если порт содержит код, который необходимо компилировать.
[[uses-desktop-file-utils]]
== `desktop-file-utils`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Uses update-desktop-database from package:devel/desktop-file-utils[].
-An extra post-install step will be run without interfering with any post-install steps already in the port [.filename]#Makefile#.
-A line with <<plist-keywords-desktop-file-utils,`@desktop-file-utils`>> will be added to the plist.
+Использует update-desktop-database из пакета package:devel/desktop-file-utils[]. Дополнительный шаг post-install будет выполнен без вмешательства в уже существующие шаги post-install в [.filename]#Makefile# порта. Строка с crossref:plist[plist-keywords-desktop-file-utils,`@desktop-file-utils`] будет добавлена в plist. Используйте этот макрос только если порт предоставляет файл `.desktop`, содержащий запись `MimeType`.
[[uses-desthack]]
== `desthack`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Changes the behavior of GNU configure to properly support `DESTDIR` in case the original software does not.
+Изменяет поведение GNU configure для корректной поддержки `DESTDIR` в случае, если исходное программное обеспечение этого не делает.
[[uses-display]]
== `display`
-Possible arguments: (none), _ARGS_
+Возможные аргументы: (отсутствуют), _ARGS_
-Set up a virtual display environment.
-If the environment variable `DISPLAY` is not set, then Xvfb is added as a build dependency, and `CONFIGURE_ENV` is extended with the port number of the currently running instance of Xvfb.
-The _ARGS_ parameter defaults to `install` and controls the phase around which to start and stop the virtual display.
+Настраивает виртуальное окружение для отображения. Если переменная окружения `DISPLAY` не установлена, то Xvfb добавляется как зависимость при сборке, а `CONFIGURE_ENV` расширяется с указанием номера порта текущего запущенного экземпляра Xvfb. Параметр _ARGS_ по умолчанию имеет значение `install` и управляет фазой, вокруг которой запускается и останавливается виртуальный дисплей.
[[uses-dos2unix]]
== `dos2unix`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-The port has files with line endings in DOS format which need to be converted.
-Several variables can be set to control which files will be converted.
-The default is to convert _all_ files, including binaries.
-See crossref:slow-porting[slow-patch-automatic-replacements,Simple Automatic Replacements] for examples.
+Порт содержит файлы с символами конца строки в формате DOS, которые необходимо преобразовать. Несколько переменных могут быть установлены для контроля, какие файлы будут преобразованы. По умолчанию преобразуются _все_ файлы, включая бинарные. См. crossref:slow-porting[slow-patch-automatic-replacements,Простые автоматические замены] для примеров.
-* `DOS2UNIX_REGEX`: match file names based on a regular expression.
-* `DOS2UNIX_FILES`: match literal file names.
-* `DOS2UNIX_GLOB`: match file names based on a glob pattern.
-* `DOS2UNIX_WRKSRC`: the directory from which to start the conversions. Defaults to `${WRKSRC}`.
+* `DOS2UNIX_REGEX`: сопоставлять имена файлов на основе регулярного выражения.
+* `DOS2UNIX_FILES`: соответствуют точным именам файлов.
+* `DOS2UNIX_GLOB`: сопоставлять имена файлов на основе шаблона файлов оболочки.
+* `DOS2UNIX_WRKSRC`: каталог, с которого начинать преобразования. По умолчанию `${WRKSRC}`.
[[uses-drupal]]
== `drupal`
-Possible arguments: `7`, `module`, `theme`
+Возможные аргументы: `7`, `module`, `theme`
+
+Автоматизирует установку порта, который является темой или модулем Drupal. Использовать с версией Drupal, которую ожидает порт. Например, `USES=drupal:7,module` означает, что этот порт создает модуль Drupal 7. Тему Drupal 7 можно указать с помощью `USES=drupal:7,theme`.
+
+[[uses-ebur128]]
+== `ebur128`
-Automate installation of a port that is a Drupal theme or module.
-Use with the version of Drupal that the port is expecting.
-For example, `USES=drupal:7,module` says that this port creates a Drupal 6 module.
-A Drupal 7 theme can be specified with `USES=drupal:7,theme`.
+Возможные аргументы: (нет), `build`, `lib`, `run`, `test`
+
+Добавляет зависимость от пакета package:audio/ebur128[]. Позволяет прозрачно зависеть от вариантов `rust` или `legacy`, используя `DEFAULT_VERSIONS` в [.filename]#make.conf#. Например, для использования устаревшей версии укажите `DEFAULT_VERSIONS+=ebur128=legacy`
+
+Без аргументов поведение аналогично случаю с предоставлением аргумента `lib`. Остальные аргументы указывают соответствующую категорию зависимости.
[[uses-eigen]]
== `eigen`
-Possible arguments: 2, 3, build (default), run
+Возможные аргументы: 2, 3, build (по умолчанию), run
+
+Добавить зависимость от пакета package:math/eigen[].
+
+[[uses-elextronfix]]
+== `electronfix`
+
+Возможные аргументы: `31`, `32`, `33`
+
+Предоставить поддержку для простого портирования Electron-приложений, распространяемых в бинарной форме. Добавляет зависимость на этапах сборки и выполнения от package:devel/electron31[], package:devel/electron32[] или package:devel/electron33[] в зависимости от используемого аргумента.
+
+Фреймворк предоставляет следующие переменные, которые могут быть установлены портами:
+
+`ELECTRONFIX_SYMLINK_FILES`::
+Список файлов для создания символьных ссылок из дистрибутива Electron.
-Add dependency on package:math/eigen[].
+`ELECTRONFIX_MAIN_EXECUTABLE`::
+Имя файла основного исполняемого файла, который будет заменен оригинальным бинарным файлом Electron.
+
+
+[[uses-elfctl]]
+== `elfctl`
+
+Возможные аргументы: (отсутствуют), `build` (по умолчанию), `stage`
+
+Установите управляющие заметки функций ELF-бинарных файлов, задав `ELF_FEATURES`.
+
+Когда не указан аргумент или указан аргумент `build`, операции выполняются над бинарными файлами в `BUILD_WRKSRC`, а файлы, перечисленные в `ELF_FEATURES`, указываются относительно `BUILD_WRKSRC`. Когда указан аргумент `stage`, операции выполняются над бинарными файлами в `STAGEDIR`, а файлы, перечисленные в `ELF_FEATURES`, указываются относительно `STAGEDIR`.
+
+[[uses-elfct-ex1]]
+.Uses=elfctl
+[example]
+====
+[.programlisting]
+....
+ELF_FEATURES= featurelist:path/to/file1 \
+ featurelist:path/to/file2
+....
+
+====
+
+Формат `featurelist` описан в man:elfctl[1].
+
+[[uses-elixir]]
+== `elixir`
+
+Возможные аргументы: (отсутствуют)
+
+Предоставить поддержку для портов, использующих package:lang/elixir[]. Добавляет зависимость во время сборки и выполнения на package:lang/elixir[].
+
+Предоставляемые фреймворком переменные:
+
+`ELIXIR_APP_NAME`::
+Название приложения Elixir, как оно установлено в каталоге lib Elixir
+`ELIXIR_LIB_ROOT`::
+Путь к библиотекам Elixir по умолчанию
+`ELIXIR_APP_ROOT`::
+Корневая директория для этого приложения Elixir
+`ELIXIR_HIDDEN`::
+Приложения, которые необходимо скрыть из пути выполнения кода; обычно `${PORTNAME}`
+`ELIXIR_LOCALE`::
+Локаль UTF-8, которая будет использоваться Elixir во время сборки (подойдет любая локаль UTF-8)
+`MIX_CMD`::
+Команда `mix`
+`MIX_COMPILE`::
+Команда `mix`, используемая для компиляции приложения на Elixir
+`MIX_REWRITE`::
+Автоматически заменять зависимости Mix на пути к коду
+`MIX_BUILD_DEPS`::
+Список `BUILD_DEPENDS` в формате категория/имя_порта (часто упоминаемый как "deps" в Erlang и Elixir)
+`MIX_RUN_DEPS`::
+Список `RUN_DEPENDS` в формате категория/имя порта
+`MIX_DOC_DIRS`::
+Дополнительные каталоги документации для установки в `DOCSDIR`
+`MIX_DOC_FILES`::
+Дополнительные файлы документации для установки в `DOCSDIR` (обычно README.md)
+`MIX_ENV`::
+Окружение для сборки Mix (в том же формате, что и `MAKE_ENV`)
+`MIX_ENV_NAME`::
+Имя среды сборки Mix, обычно "prod"
+`MIX_BUILD_NAME`::
+Имя выходного файла сборки в _build/, обычно `${MIX_ENV_NAME}`
+`MIX_TARGET`::
+Имя цели Mix, обычно "compile"
+`MIX_EXTRA_APPS`::
+Список подприложений для сборки, если имеются
+`MIX_EXTRA_DIRS`::
+Список дополнительных каталогов для установки в `ELIXIR_APP_ROOT`
+`MIX_EXTRA_FILES`::
+Список дополнительных файлов для установки в `ELIXIR_APP_ROOT`
+
+[[uses-emacs]]
+== `emacs`
+
+Возможные аргументы: (нет) (по умолчанию), `build`, `run`, `noflavors`
+
+Предоставляет поддержку для портов, требующих Emacs. Аргумент `build` создает зависимость сборки от Emacs. Аргумент `run` создает зависимость выполнения от Emacs. Если оба аргумента `build` и `run` отсутствуют, создаются зависимости сборки и выполнения от Emacs. Аргумент `noflavors` запрещает флейворы и подразумевается, если нет зависимости выполнения от Emacs.
+
+Стандартный вариант Emacs для портов с `USES=emacs` можно определить в [.filename]#make.conf#. Например, для варианта `nox` используйте `DEFAULT_VERSIONS+= emacs=nox`. Допустимые флейворы: `full`, `canna`, `nox`, `wayland`, `devel_full`, `devel_nox`.
+
+Переменные, которые могут быть установлены портами:
+
+`EMACS_FLAVORS_EXCLUDE`::
+НЕ собирать эти флейворы Emacs. Если `EMACS_FLAVORS_EXCLUDE` не определена и:
+
+* существует зависимость во время выполнения от Emacs
+* аргумент noflavors не указан
+
++
+то предполагаются все допустимые флейворы Emacs.
+
+`EMACS_NO_DEPENDS`::
+НЕ добавлять зависимости сборки или выполнения от Emacs. Это предотвратит создание вариантов, и никакие файлы байт-кода не будут сгенерированы как часть пакета.
+
+Переменные, которые могут быть прочитаны портами:
+
+`EMACS_CMD`::
+Команда Emacs с полным путём (например, [.filename]#/usr/local/bin/emacs-30.1#)
+
+`EMACS_FLAVOR`::
+Используется для зависимостей (например, `BUILD_DEPENDS= dash.el${EMACS_PKGNAMESUFFIX}>0:devel/dash@${EMACS_FLAVOR}`)
+
+`EMACS_LIBDIR`::
+Каталог библиотек Emacs без `${PREFIX}` (например, [.filename]#share/emacs#)
+
+`EMACS_LIBDIR_WITH_VER`::
+Каталог библиотеки без `${PREFIX}`, включая версию (например, [.filename]#share/emacs/30.1#)
+
+`EMACS_MAJOR_VER`::
+Основная версия Emacs (например, 30)
+
+`EMACS_PKGNAMESUFFIX`::
+`PKGNAMESUFFIX` для различия вариантов Emacs
+
+`EMACS_SITE_LISPDIR`::
+Каталог site-lisp Emacs без `${PREFIX}` (например, [.filename]#share/emacs/site-lisp#)
+
+`EMACS_VER`::
+Версия Emacs (например, 30.1)
+
+`EMACS_VERSION_SITE_LISPDIR`::
+Каталог site-lisp Emacs, включая номер версии (например, [.filename]#share/emacs/30.1/site-lisp#)
+
+[[uses-erlang]]
+== `erlang`
+
+Возможные аргументы: (нет), `enc`, `rebar`, `rebar3`
+
+Добавляет зависимость на время сборки и выполнения от package:lang/erlang[]. В зависимости от аргумента, добавляет дополнительные зависимости для сборки. `enc` добавляет зависимость от package:devel/erlang-native-compiler[], `rebar` добавляет зависимость от package:devel/rebar[], а `rebar3` добавляет зависимость от package:devel/rebar3[].
+
+В дополнение, следующие переменные доступны для порта:
+
+* `ERL_APP_NAME`: Имя приложения Erlang, как оно установлено в каталоге lib Erlang (без указания версии)
+* `ERL_APP_ROOT`: Корневой каталог для этого приложения Erlang
+* `REBAR_CMD`: Путь к команде "rebar"
+* `REBAR3_CMD`: Путь к команде "rebar3"
+* `REBAR_PROFILE`: Профиль Rebar
+* `REBAR_TARGETS`: Список целей Rebar (обычно compile, возможно escriptize)
+* `ERL_BUILD_NAME`: Имя сборки для rebar3
+* `ERL_BUILD_DEPS`: Список BUILD_DEPENDS в формате категория/имя_порта
+* `ERL_RUN_DEPS`: Список RUN_DEPENDS в формате категория/имя_порта
+* `ERL_DOCS`: Список файлов и каталогов документации
[[uses-fakeroot]]
== `fakeroot`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Changes some default behavior of build systems to allow installing as a user.
-See https://wiki.debian.org/FakeRoot[] for more information on `fakeroot`.
+Изменяет некоторые стандартные поведения систем сборки для разрешения установки от имени пользователя. Дополнительную информацию о `fakeroot` можно найти на https://wiki.debian.org/FakeRoot[].
[[uses-fam]]
== `fam`
-Possible arguments: (none), `fam`, `gamin`
+Возможные аргументы: (нет), `fam`, `gamin`
-Uses a File Alteration Monitor as a library dependency, either package:devel/fam[] or package:devel/gamin[].
-End users can set WITH_FAM_SYSTEM to specify their preference.
+Использует монитор изменений файлов (FAM — File Alteration Monitor) как зависимость от библиотеки, либо package:devel/fam[], либо package:devel/gamin[]. Конечные пользователи могут задать WITH_FAM_SYSTEM, чтобы указать свои предпочтения.
[[uses-firebird]]
== `firebird`
-Possible arguments: (none), `25`
+Возможные аргументы: (отсутствуют), `25`
-Add a dependency to the client library of the Firebird database.
+Добавить зависимость от клиентской библиотеке базы данных Firebird.
[[uses-fonts]]
== `fonts`
-Possible arguments: (none), `fc`, `fcfontsdir` (default), `fontsdir`, `none`
+Возможные аргументы: (отсутствуют), `fc`, `fontsdir` (по умолчанию), `none`
-Adds a runtime dependency on tools needed to register fonts.
-Depending on the argument, add a `crossref:plist[plist-keywords-fc,@fc] ${FONTSDIR}` line, `crossref:plist[plist-keywords-fcfontsdir,@fcfontsdir] ${FONTSDIR}` line, `crossref:plist[plist-keywords-fontsdir,@fontsdir] ${FONTSDIR}` line, or no line if the argument is `none`, to the plist.
-`FONTSDIR` defaults to [.filename]#${PREFIX}/share/fonts/${FONTNAME}# and `FONTNAME` to `${PORTNAME}`.
-Add `FONTSDIR` to `PLIST_SUB` and `SUB_LIST`
+Добавляет зависимость во время выполнения на инструменты, необходимые для регистрации шрифтов. В зависимости от аргумента добавляет строку `crossref:plist[plist-keywords-fc,@fc] ${FONTSDIR}`, строку `crossref:plist[plist-keywords-fontsdir,@fontsdir] ${FONTSDIR}` или не добавляет строку, если аргумент `none`, в plist. `FONTSDIR` по умолчанию имеет значение [.filename]#${PREFIX}/share/fonts/${FONTNAME}#, а `FONTNAME` — `${PORTNAME}`. Добавляет `FONTSDIR` в `PLIST_SUB` и `SUB_LIST`
[[uses-fortran]]
== `fortran`
-Possible arguments: `gcc` (default)
+Возможные аргументы: `gcc` (по умолчанию)
+
+Использует компилятор GNU Fortran.
-Uses the GNU Fortran compiler.
+[[uses-fpc]]
+== `fpc`
+
+Возможные аргументы: (нет), `run`
+
+Обеспечить поддержку портов на основе Free Pascal. Установит компилятор Free Pascal и модули.
+
+Добавляет зависимость сборки от package:lang/fpc[].
+
+Если указан аргумент `run`, также добавляется зависимость запуска.
[[uses-fuse]]
== `fuse`
-Possible arguments: `2` (default), `3`
+Возможные аргументы: `2` (по умолчанию), `3`
-The port will depend on the FUSE library and handle the dependency on the kernel module depending on the version of FreeBSD.
+Порт будет зависеть от библиотеки FUSE и обрабатывать зависимость от модуля ядра в зависимости от версии FreeBSD.
[[uses-gem]]
== `gem`
-Possible arguments: (none), `noautoplist`
+Возможные аргументы: (отсутствуют), `noautoplist`
+
+Обработка сборки с RubyGems. Если используется `noautoplist`, список упаковки не генерируется автоматически.
-Handle building with RubyGems.
-If `noautoplist` is used, the packing list is not generated automatically.
+Это подразумевает `USES=ruby`.
[[uses-gettext]]
== `gettext`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Deprecated.
-Will include both <<uses-gettext-runtime,`gettext-runtime`>> and <<uses-gettext-tools,`gettext-tools`>>.
+Устарело. Будет включать как crossref:uses[uses-gettext-runtime,`gettext-runtime`], так и crossref:uses[uses-gettext-tools,`gettext-tools`].
[[uses-gettext-runtime]]
== `gettext-runtime`
-Possible arguments: (none), `lib` (default), `build`, `run`
+Возможные аргументы: (отсутствуют), `lib` (по умолчанию), `build`, `run`
-Uses package:devel/gettext-runtime[].
-By default, with no arguments or with the `lib` argument, implies a library dependency on [.filename]#libintl.so#.
-`build` and `run` implies, respectively a build-time and a run-time dependency on [.filename]#gettext#.
+Использует пакет package:devel/gettext-runtime[]. По умолчанию, без аргументов или с аргументом `lib`, подразумевает зависимость от библиотеки [.filename]#libintl.so#. Аргументы `build` и `run` подразумевают, соответственно, зависимость во время сборки и во время выполнения от [.filename]#gettext#.
[[uses-gettext-tools]]
== `gettext-tools`
-Possible arguments: (none), `build` (default), `run`
+Возможные аргументы: (отсутствуют), `build` (по умолчанию), `run`
-Uses package:devel/gettext-tools[].
-By default, with no argument, or with the `build` argument, a build time dependency on [.filename]#msgfmt# is registered.
-With the `run` argument, a run-time dependency is registered.
+Использует пакет package:devel/gettext-tools[]. По умолчанию, без аргумента или с аргументом `build`, регистрируется зависимость во время сборки от [.filename]#msgfmt#. С аргументом `run` регистрируется зависимость во время выполнения.
[[uses-ghostscript]]
== `ghostscript`
-Possible arguments: _X_, `build`, `run`, `nox11`
+Возможные аргументы: _X_, `build`, `run`, `nox11`
-A specific version _X_ can be used. Possible versions are `7`, `8`, `9`, and `agpl` (default).
-`nox11` indicates that the `-nox11` version of the port is required.
-`build` and `run` add build- and run-time dependencies on Ghostscript.
-The default is both build- and run-time dependencies.
+Можно указать конкретную версию _X_. Доступные версии: `7`, `8`, `9` и `agpl` (по умолчанию). `nox11` указывает, что требуется версия порта `-nox11`. `build` и `run` добавляют зависимости на Ghostscript во время сборки и выполнения соответственно. По умолчанию добавляются зависимости как на сборку, так и на выполнение.
[[uses-gl]]
== `gl`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Provides an easy way to depend on GL components.
-The components should be listed in `USE_GL`.
-The available components are:
+Предоставляет простой способ зависеть от компонентов GL. Компоненты должны быть перечислены в `USE_GL`. Доступные компоненты:
`egl`::
-add a library dependency on [.filename]#libEGL.so# from package:graphics/libglvnd[]
+добавить зависимость от библиотеки [.filename]#libEGL.so# из пакета package:graphics/libglvnd[]
`gbm`::
-Add a library dependency on [.filename]#libgbm.so# from package:graphics/mesa-libs[]
+Добавить зависимость от библиотеки [.filename]#libgbm.so# из пакета package:graphics/mesa-libs[]
`gl`::
-Add a library dependency on [.filename]#libGL.so# from package:graphics/libglvnd[]
+Добавить зависимость от библиотеки [.filename]#libGL.so# из пакета package:graphics/libglvnd[]
`glesv2`::
-Add a library dependency on [.filename]#libGLESv2.so# from package:graphics/libglvnd[]
+Добавить зависимость от библиотеки [.filename]#libGLESv2.so# из пакета package:graphics/libglvnd[]
`glew`::
-Add a library dependency on [.filename]#libGLEW.so# from package:graphics/glew[]
+Добавить зависимость от библиотеки [.filename]#libGLEW.so# из пакета package:graphics/glew[]
`glu`::
-Add a library dependency on [.filename]#libGLU.so# from package:graphics/libGLU[]
+Добавить зависимость от библиотеки [.filename]#libGLU.so# из package:graphics/libGLU[]
`glut`::
-Add a library dependency on [.filename]#libglut.so# from package:graphics/freeglut[]
+Добавить зависимость от библиотеки [.filename]#libglut.so# из package:graphics/freeglut[]
`opengl`::
-Add a library dependency on [.filename]#libOpenGL.so# from package:graphics/libglvnd[]
+Добавить зависимость от библиотеки [.filename]#libOpenGL.so# из package:graphics/libglvnd[]
[[uses-gmake]]
== `gmake`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Uses package:devel/gmake[] as a build-time dependency and sets up the environment to use `gmake` as the default `make` for the build.
+Использует пакет package:devel/gmake[] как зависимость во время сборки и настраивает окружение для использования `gmake` в качестве стандартного `make` при сборке.
[[uses-gnome]]
== `gnome`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Provides an easy way to depend on GNOME components.
-The components should be listed in `USE_GNOME`.
-The available components are:
+Предоставляет простой способ зависеть от компонентов GNOME. Компоненты должны быть перечислены в `USE_GNOME`. Доступные компоненты:
* `atk`
* `atkmm`
@@ -529,6 +830,7 @@ The available components are:
* `glibmm`
* `gnomecontrolcenter3`
* `gnomedesktop3`
+* `gnomedesktop4`
* `gnomedocutils`
* `gnomemenus3`
* `gnomemimedata`
@@ -595,8 +897,7 @@ The available components are:
* `vte`
* `vte3`
-The default dependency is build- and run-time, it can be changed with `:build` or `:run`.
-For example:
+Зависимость по умолчанию — на время сборки и выполнения, её можно изменить с помощью `:build` или `:run`. Например:
[.programlisting]
....
@@ -604,105 +905,79 @@ USES= gnome
USE_GNOME= gnomemenus3:build intlhack
....
-See crossref:special[using-gnome,Using GNOME] for more information.
+См. crossref:special[using-gnome,Использование GNOME] для получения дополнительной информации.
[[uses-go]]
== `go`
[IMPORTANT]
====
-Ports should not be created for Go libs, see crossref:special[go-libs,Go Libraries] for more information.
+Порты не следует создавать для библиотек Go, дополнительную информацию см. в crossref:special[go-libs,Библиотеки Go].
====
-Possible arguments: (none), `modules`, `no_targets`, `run`
+Возможные аргументы: (нет), `N.NN`, `N.NN-devel`, `modules`, `no_targets`, `run`
-Sets default values and targets used to build Go software.
-A build dependency on the Go compiler port selected via `GO_PORT` is added.
-By default the build is performed in GOPATH mode.
-If Go software uses modules, the modules-aware mode can be switched on with `modules` argument.
-`no_targets` will setup build environment like `GO_ENV`, `GO_BUILDFLAGS` but skip creating `post-extract` and `do-{build,install,test}` targets.
-`run` will also add a run dependency on what is in `GO_PORT`.
+Устанавливает значения и цели по умолчанию, используемые для сборки ПО на Go. Добавляется зависимость сборки от порта компилятора Go, сопровождающие порта могут установить требуемую версию. По умолчанию сборка выполняется в режиме GOPATH. Если ПО на Go использует модули, режим с поддержкой модулей можно включить с помощью аргумента `modules`. `no_targets` настроит окружение сборки, как `GO_ENV`, `GO_BUILDFLAGS`, но пропустит создание целей извлечения (extract) и сборки (build). `run` также добавит зависимость выполнения от порта компилятора Go.
-The build process is controlled by several variables:
+Процесс сборки контролируется несколькими переменными:
`GO_MODULE`::
-The name of the application module as specified by the `module` directive in `go.mod`.
-In most cases, this is the only required variable for ports that use Go modules.
+Имя модуля приложения, указанное директивой `module` в `go.mod`. В большинстве случаев это единственная необходимая переменная для портов, использующих модули Go.
`GO_PKGNAME`::
-The name of the Go package when building in GOPATH mode.
-This is the directory that will be created in `${GOPATH}/src`.
-If not set explicitly and `GH_SUBDIR` or `GL_SUBDIR` is present, `GO_PKGNAME` will be inferred from it.
-It is not needed when building in modules-aware mode.
+Имя пакета Go при сборке в режиме GOPATH. Это каталог, который будет создан в `${GOPATH}/src`. Если не задано явно и присутствует `GH_SUBDIR` или `GL_SUBDIR`, то `GO_PKGNAME` будет выведено из них. Не требуется при сборке в режиме с поддержкой модулей.
`GO_TARGET`::
-The packages to build.
-The default value is `${GO_PKGNAME}`.
-`GO_TARGET` can also be a tuple in the form `package:path` where path can be either a simple filename or a full path starting with `${PREFIX}`.
+Пакеты для сборки. Значение по умолчанию — `${GO_PKGNAME}`. `GO_TARGET` также может быть кортежем в формате `package:path`, где path может быть либо простым именем файла, либо полным путём, начинающимся с `${PREFIX}`.
`GO_TESTTARGET`::
-The packages to test.
-The default value is `./...` (the current package and all subpackages).
+Пакеты для тестирования. Значение по умолчанию — `./...` (текущий пакет и все подпакеты).
`CGO_CFLAGS`::
-Additional `CFLAGS` values to be passed to the C compiler by `go`.
+Дополнительные значения `CFLAGS`, передаваемые компилятору C с помощью `go`.
`CGO_LDFLAGS`::
-Additional `LDFLAGS` values to be passed to the C compiler by `go`.
+Дополнительные значения `LDFLAGS`, передаваемые компилятору C через `go`.
`GO_BUILDFLAGS`::
-Additional build arguments to be passed to `go build`.
+Дополнительные аргументы сборки, передаваемые в `go build`.
`GO_TESTFLAGS`::
-Additional build arguments to be passed to `go test`.
+Дополнительные аргументы сборки, передаваемые в `go test`.
-`GO_PORT`::
-The Go compiler port to use.
-By default this is package:lang/go[] but can be set to package:lang/go-devel[] in `make.conf` for testing with future Go versions.
-+
-[WARNING]
-====
-This variable must not be set by individual ports!
-====
-
-See crossref:special[using-go,Building Go Applications] for usage examples.
+См. crossref:special[using-go,Сборка приложений на Go] для примеров использования.
[[uses-gperf]]
== `gperf`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Add a buildtime dependency on package:devel/gperf[] if `gperf` is not present in the base system.
+Добавить зависимость во время сборки на package:devel/gperf[], если `gperf` отсутствует в базовой системе.
[[uses-grantlee]]
== `grantlee`
-Possible arguments: `5`, `selfbuild`
+Возможные аргументы: `5`, `selfbuild`
-Handle dependency on Grantlee.
-Specify `5` to depend on the Qt5 based version, package:devel/grantlee5[].
-`selfbuild` is used internally by package:devel/grantlee5[] to get their versions numbers.
+Обработать зависимость от Grantlee. Указать `5` для зависимости от версии на основе Qt5, package:devel/grantlee5[]. `selfbuild` используется внутри package:devel/grantlee5[] для получения номеров их версий.
[[uses-groff]]
== `groff`
-Possible arguments: `build`, `run`, `both`
+Возможные аргументы: `build`, `run`, `both`
-Registers a dependency on package:textproc/groff[] if not present in the base system.
+Регистрирует зависимость от package:textproc/groff[], если пакет отсутствует в базовой системе.
[[uses-gssapi]]
== `gssapi`
-Possible arguments: (none), `base` (default), `heimdal`, `mit`, `flags`, `bootstrap`
+Возможные аргументы: (отсутствуют), `base` (по умолчанию), `heimdal`, `mit`, `flags`, `bootstrap`
-Handle dependencies needed by consumers of the GSS-API.
-Only libraries that provide the Kerberos mechanism are available.
-By default, or set to `base`, the GSS-API library from the base system is used.
-Can also be set to `heimdal` to use package:security/heimdal[], or `mit` to use package:security/krb5[].
+Обрабатывает зависимости, необходимые для использования GSS-API. Доступны только библиотеки, предоставляющие механизм Kerberos. По умолчанию (или при значении `base`) используется библиотека GSS-API из базовой системы. Также можно установить значение `heimdal` для использования package:security/heimdal[] или `mit` для использования package:security/krb5[].
-When the local Kerberos installation is not in `LOCALBASE`, set `HEIMDAL_HOME` (for `heimdal`) or `KRB5_HOME` (for `krb5`) to the location of the Kerberos installation.
+Если локальная установка Kerberos не находится в `LOCALBASE`, установите `HEIMDAL_HOME` (для `heimdal`) или `KRB5_HOME` (для `krb5`) на каталог установки Kerberos.
-These variables are exported for the ports to use:
+Эти переменные экспортируются для использования портами:
* `GSSAPIBASEDIR`
* `GSSAPICPPFLAGS`
@@ -712,14 +987,12 @@ These variables are exported for the ports to use:
* `GSSAPILIBS`
* `GSSAPI_CONFIGURE_ARGS`
-The `flags` option can be given alongside `base`, `heimdal`, or `mit` to automatically add `GSSAPICPPFLAGS`, `GSSAPILDFLAGS`, and `GSSAPILIBS` to `CFLAGS`, `LDFLAGS`, and `LDADD`, respectively.
-For example, use `base,flags`.
+Опция `flags` может быть указана вместе с `base`, `heimdal` или `mit` для автоматического добавления `GSSAPICPPFLAGS`, `GSSAPILDFLAGS` и `GSSAPILIBS` в `CFLAGS`, `LDFLAGS` и `LDADD` соответственно. Например, используйте `base,flags`.
-The `bootstrap` option is a special prefix only for use by package:security/krb5[] and package:security/heimdal[].
-For example, use `bootstrap,mit`.
+Опция `bootstrap` — это специальный префикс, предназначенный только для использования в package:security/krb5[] и package:security/heimdal[]. Например, используйте `bootstrap,mit`.
[[uses-gssapi-ex1]]
-.Typical Use
+.Типичное использование
[example]
====
[.programlisting]
@@ -738,98 +1011,375 @@ GSSAPI_NONE_CONFIGURE_ON= --without-gssapi
====
+[[uses-gstreamer]]
+== `gstreamer`
+
+Возможные аргументы: (отсутствуют)
+
+Предоставляет простой способ зависимости от компонентов GStreamer. Компоненты должны быть перечислены в `USE_GSTREAMER`. Доступные компоненты:
+
+* `a52dec`
+* `aalib`
+* `amrnb`
+* `amrwbdec`
+* `aom`
+* `assrender`
+* `bad`
+* `bs2b`
+* `cairo`
+* `cdio`
+* `cdparanoia`
+* `chromaprint`
+* `curl`
+* `dash`
+* `dtls`
+* `dts`
+* `dv`
+* `dvd`
+* `dvdread`
+* `editing-services`
+* `faac`
+* `faad`
+* `flac`
+* `flite`
+* `gdkpixbuf`
+* `gl`
+* `gme`
+* `gnonlin`
+* `good`
+* `gsm`
+* `gtk4`
+* `gtk`
+* `hal`
+* `hls`
+* `jack`
+* `jpeg`
+* `kate`
+* `kms`
+* `ladspa`
+* `lame`
+* `libav`
+* `libcaca`
+* `libde265`
+* `libmms`
+* `libvisual`
+* `lv2`
+* `mm`
+* `modplug`
+* `mpeg2dec`
+* `mpeg2enc`
+* `mpg123`
+* `mplex`
+* `musepack`
+* `neon`
+* `ogg`
+* `opencv`
+* `openexr`
+* `openh264`
+* `openjpeg`
+* `openmpt`
+* `opus`
+* `pango`
+* `png`
+* `pulse`
+* `qt`
+* `resindvd`
+* `rsvg`
+* `rtmp`
+* `shout2`
+* `sidplay`
+* `smoothstreaming`
+* `sndfile`
+* `sndio`
+* `soundtouch`
+* `soup`
+* `spandsp`
+* `speex`
+* `srtp`
+* `taglib`
+* `theora`
+* `ttml`
+* `twolame`
+* `ugly`
+* `v4l2`
+* `vorbis`
+* `vpx`
+* `vulkan`
+* `wavpack`
+* `webp`
+* `webrtcdsp`
+* `x264`
+* `x265`
+* `x`
+* `ximagesrc`
+* `zbar`
+
+[[uses-guile]]
+== `guile`
+
+Возможные аргументы: (нет), `_X.Y_`, `flavors`, `build`, `run`, `alias`, `conflicts`
+
+Добавляет зависимость от Guile. По умолчанию это зависимость от соответствующей библиотеки `libguile*.so`, если не переопределено опциями `build` и/или `run`. Опция `alias` настраивает `BINARY_ALIAS` соответствующим образом (см. crossref:makefiles[binary-alias,Использование `BINARY_ALIAS`]).
+
+Версия по умолчанию устанавливается с помощью обычного механизма `DEFAULT_VERSIONS`; если версия по умолчанию не входит в список указанных версий, то используется последняя доступная версия из списка.
+
+Приложения, использующие Guile, обычно собираются только для одной версии Guile. Однако модули расширений или библиотек должны использовать опцию `flavors` для сборки с несколькими флейворами.
+
+Для получения дополнительной информации см. crossref:special[using-guile,Использование Guile].
+
[[uses-horde]]
== `horde`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Add buildtime and runtime dependencies on package:devel/pear-channel-horde[].
-Other Horde dependencies can be added with `USE_HORDE_BUILD` and `USE_HORDE_RUN`.
-See crossref:special[php-horde,Horde Modules] for more information.
+Добавить зависимости времени сборки и выполнения для package:devel/pear-channel-horde[]. Другие зависимости Horde можно добавить с помощью `USE_HORDE_BUILD` и `USE_HORDE_RUN`. Дополнительную информацию см. в разделе crossref:special[php-horde,Модули Horde].
[[uses-iconv]]
== `iconv`
-Possible arguments: (none), `lib`, `build`, `patch`, `translit`, `wchar_t`
+Возможные аргументы: (нет), `lib`, `build`, `patch`, `translit`, `wchar_t`
-Uses `iconv` functions, either from the port package:converters/libiconv[] as a build-time and run-time dependency, or from the base system.
-By default, with no arguments or with the `lib` argument, implies `iconv` with build-time and run-time dependencies.
-`build` implies a build-time dependency, and `patch` implies a patch-time dependency.
-If the port uses the `WCHAR_T` or `//TRANSLIT` iconv extensions, add the relevant arguments so that the correct iconv is used.
-For more information see crossref:special[using-iconv,Using `iconv`].
+Использует функции `iconv`, либо из порта package:converters/libiconv[] как зависимость на этапе сборки и выполнения, либо из базовой системы. По умолчанию, без аргументов или с аргументом `lib`, подразумевает `iconv` с зависимостями на этапе сборки и выполнения. `build` подразумевает зависимость на этапе сборки, а `patch` — на этапе патчинга. Если порт использует расширения `WCHAR_T` или `//TRANSLIT` для `iconv`, добавьте соответствующие аргументы, чтобы использовалась правильная версия `iconv`. Для получения дополнительной информации см. crossref:special[using-iconv,Использование `iconv`].
[[uses-imake]]
== `imake`
-Possible arguments: (none), `env`, `notall`, `noman`
+Возможные аргументы: (нет), `env`, `notall`, `noman`
+
+Добавить package:devel/imake[] как зависимость на этапе сборки и выполнить `xmkmf -a` на этапе `configure`. Если указан аргумент `env`, цель `configure` не устанавливается. Если флаг `-a` вызывает проблемы для порта, добавьте аргумент `notall`. Если `xmkmf` не генерирует цель `install.man`, добавьте аргумент `noman`.
+
+[[uses-java]]
+== `java`
+
+Возможные аргументы: (нет), `ant`, `build`, `extract`, `run`
+
+По умолчанию используется `USES=java:build,run`, если аргументы не предоставлены и `NO_BUILD` не определен. Если `NO_BUILD` определен, используется `USES=java:run`. Если указан аргумент `ant`, порт использует Apache Ant. Если указан аргумент `build`, порт JDK добавляется в зависимости сборки. Если указан аргумент `extract`, порт JDK добавляется в зависимости извлечения. Если указан аргумент `run`, порт JDK добавляется в зависимости выполнения.
+
+Фреймворк предоставляет следующие переменные, которые могут быть установлены портом:
+
+`JAVA_VERSION`::
+Список подходящих версий Java для порта, разделенных пробелами. Необязательный символ `\+` позволяет указать диапазон версий. (допустимые значения `8[+]`, `11[\+]`, `17[+]`, `18[\+]`, `19[+]`, `20[\+]`, `21[+]`, `22[\+]`, `22[+]`)
+
+`JAVA_OS`::
+Список поддерживаемых операционных систем для порта JDK, разделённых пробелами. (допустимые значения: `native`, `linux`)
+
+`JAVA_VENDOR`::
+Список подходящих поставщиков портов JDK для порта, разделенных пробелами. (допустимые значения: `openjdk`, `oracle`)
+
+Фреймворк предоставляет следующие переменные для чтения портом:
+
+`JAVA_PORT`::
+Имя порта JDK. (например, 'java/openjdk8')
+
+`JAVA_PORT_VERSION`::
+Версия порта JDK. (например, '8')
+
+`JAVA_PORT_OS`::
+Используемая операционная система для порта JDK. (например, 'linux')
+
+`JAVA_PORT_VENDOR`::
+Поставщик порта JDK. (например, 'openjdk')
+
+`JAVA_PORT_OS_DESCRIPTION`::
+Описание операционной системы, используемой портом JDK. (например, 'Linux')
+
+`JAVA_PORT_VENDOR_DESCRIPTION`::
+Описание поставщика порта JDK. (например, 'OpenJDK BSD Porting Team')
+
+`JAVA_HOME`::
+Путь к каталогу установки JDK. (например, [.filename]#/usr/local/openjdk8#)
+
+`JAVAC`::
+Путь к используемому компилятору Java. (например, [.filename]#/usr/local/openjdk8/bin/javac# или [.filename]#/usr/local/bin/javac#)
+
+`JAR`::
+Путь к используемому инструменту JAR. (например, [.filename]#/usr/local/openjdk8/bin/jar# или [.filename]#/usr/local/bin/fastjar#)
+
+`APPLETVIEWER`::
+Путь к утилите appletviewer. (например, [.filename]#/usr/local/linux-jdk1.8.0/bin/appletviewer#)
+
+`JAVA`::
+Путь к исполняемому файлу `java`. Используется для запуска программ на Java. (например, [.filename]#/usr/local/openjdk8/bin/java#)
+
+`JAVADOC`::
+Путь к программе `javadoc`.
+
+`JAVAH`::
+Путь к программе `javah`.
+
+`JAVAP`::
+Путь к программе `javap`.
+
+`JAVA_KEYTOOL`::
+Путь к утилите `keytool`.
+
+`JAVA_N2A`::
+Путь к инструменту `native2ascii`.
+
+`JAVA_POLICYTOOL`::
+Путь к программе `policytool`.
+
+`JAVA_SERIALVER`::
+Путь к утилите `serialver`.
+
+`RMIC`::
+Путь к генератору RMI-заглушек/скелетов, `rmic`.
+
+`RMIREGISTRY`::
+Путь к программе реестра RMI, `rmiregistry`.
+
+`RMID`::
+Путь к программе демона RMI.
+
+`JAVA_CLASSES`::
+Путь к архиву, содержащему файлы классов JDK. В большинстве JDK это [.filename]#${JAVA_HOME}/jre/lib/rt.jar#.
+
+`JAVASHAREDIR`::
+Базовый каталог для всех общих ресурсов Java.
+
+`JAVAJARDIR`::
+Каталог, в котором порт должен устанавливать JAR-файлы.
+
+`JAVALIBDIR`::
+Каталог, в котором находятся JAR-файлы, установленные другими портами.
-Add package:devel/imake[] as a build-time dependency and run `xmkmf -a` during the `configure` stage.
-If the `env` argument is given, the `configure` target is not set.
-If the `-a` flag is a problem for the port, add the `notall` argument.
-If `xmkmf` does not generate a `install.man` target, add the `noman` argument.
+[[uses-jpeg]]
+== `jpeg`
+
+Возможные аргументы: `lib` (по умолчанию, подразумевается), `build`, `run`
+
+Помощь в обработке зависимостей от `jpeg`.
+
+Если указан аргумент `lib` или аргументы не предоставлены, то в порт добавляется зависимость от библиотеки.
+
+Если указан аргумент `build`, то в порт добавляется зависимость сборки.
+
+Если указан аргумент `run`, то к порту добавляется зависимость времени выполнения.
+
+Если указан аргумент `both`, то к порту добавляется зависимость для сборки и зависимость для выполнения.
+
+Фреймворк предоставляет следующую переменную, которая может быть установлена портами:
+
+`JPEG_PORT`::
+Указывает реализацию JPEG для использования. Возможные значения:
+
+* package:graphics/jpeg-turbo[] (по умолчанию)
+* package:graphics/mozjpeg[]
[[uses-kde]]
== `kde`
-Possible arguments: `5`
+Возможные аргументы: `5`
-Add dependency on KDE components.
-See crossref:special[using-kde,Using KDE] for more information.
+Добавить зависимость от компонентов KDE. Подробнее см. в crossref:special[using-kde,Использование KDE].
[[uses-kmod]]
== `kmod`
-Possible arguments: (none), `debug`
+Возможные аргументы: (отсутствуют), `debug`
+
+Заполняет шаблон для портов модулей ядра, в настоящее время:
+
+* Добавьте `kld` в `CATEGORIES`.
+* Установите `SSP_UNSAFE`.
+* Установите `IGNORE`, если исходные коды ядра не найдены в `SRC_BASE`.
+* Определить `KMODDIR` по умолчанию как [.filename]#/boot/modules#, добавить его в `PLIST_SUB` и `MAKE_ENV`, а также создать его при установке. Если `KMODDIR` установлен в [.filename]#/boot/kernel#, он будет перезаписан в [.filename]#/boot/modules#. Это предотвращает повреждение пакетов при обновлении ядра из-за переименования [.filename]#/boot/kernel# в [.filename]#/boot/kernel.old# в процессе.
+* Обрабатывать перекрестные ссылки на модули ядра при установке и удалении, используя crossref:plist[plist-keywords-kld,`@kld`].
+* Если указан аргумент `debug`, порт может установить отладочную версию модуля в [.filename]#KERN_DEBUGDIR#/[.filename]#KMODDIR#. По умолчанию `KERN_DEBUGDIR` копируется из `DEBUGDIR` и устанавливается в [.filename]#/usr/lib/debug#. Фреймворк позаботится о создании и удалении необходимых каталогов.
+
+[[uses-kodi]]
+== `kodi`
+
+Возможные аргументы: (отсутствуют), `noautoplist`
+
+Обеспечить поддержку дополнений для package:multimedia/kodi[]. Если указан аргумент `noautoplist`, автоматическое создание `plist` не выполняется.
+
+[[uses-lazarus]]
+== `lazarus`
+
+Возможные аргументы: (отсутствуют), `gtk2` (по умолчанию), `qt5`, `qt6`, `flavors`
+
+Обеспечить поддержку портов на основе package:editors/lazarus[].
+
+Если аргументы не предоставлены или указан `gtk2`, приложение lazarus-app будет собрано с интерфейсом `gtk2`, и порт package:editors/lazarus[] будет собран с интерфейсом `gtk2`.
+
+Если указан аргумент `qt5`, приложение lazarus-app собирается с интерфейсом `qt5`.
+
+Если указан аргумент `qt6`, приложение lazarus-app собирается с интерфейсом `qt6`.
+
+Если указан аргумент `flavors`, приложение `lazarus-app` собирается с поддержкой функций флейворов.
+
+Если порт не требует автоматической компиляции файлов проекта lazarus, можно определить следующую переменную:
+
+`NO_LAZBUILD`= `yes`
-Fills in the boilerplate for kernel module ports, currently:
+Доступны следующие переменные для портов:
-* Add `kld` to `CATEGORIES`.
-* Set `SSP_UNSAFE`.
-* Set `IGNORE` if the kernel sources are not found in `SRC_BASE`.
-* Define `KMODDIR` to [.filename]#/boot/modules# by default, add it to `PLIST_SUB` and `MAKE_ENV`, and create it upon installation. If `KMODDIR` is set to [.filename]#/boot/kernel#, it will be rewritten to [.filename]#/boot/modules#. This prevents breaking packages when upgrading the kernel due to [.filename]#/boot/kernel# being renamed to [.filename]#/boot/kernel.old# in the process.
-* Handle cross-referencing kernel modules upon installation and deinstallation, using crossref:plist[plist-keywords-kld,`@kld`].
-* If the `debug` argument is given, the port can install a debug version of the module into [.filename]#KERN_DEBUGDIR#/[.filename]#KMODDIR#. By default, `KERN_DEBUGDIR` is copied from `DEBUGDIR` and set to [.filename]#/usr/lib/debug#. The framework will take care of creating and removing any required directories.
+`LAZARUS_PROJECT_FILES`::
+Список lpi-файлов. Он не должен быть пустым. По умолчанию: пусто
+
+`LAZARUS_DIR`::
+Путь к директории установки lazarus. По умолчанию: [.filename]#${LOCALBASE}/share/lazarus-${LAZARUS_VER}#
+
+`LAZBUILD_ARGS`::
+Дополнительные аргументы lazbuild. В большинстве случаев это может быть `-d`. Подробнее см. man:lazbuild[1]. По умолчанию: пусто
+
+`LAZARUS_NO_FLAVORS`::
+Не собирать эти флейворы lazarus. Если `LAZARUS_NO_FLAVORS` не определена, то предполагаются все допустимые флейворы lazarus.
+
+`WANT_LAZARUS_DEVEL`::
+Если установлено значение `yes`, то используйте package:lazarus/devel[] как зависимость сборки.
+
+[[uses-ldap]]
+== `ldap`
+
+Возможные аргументы: (нет), <версия>, клиент, сервер
+
+Регистрирует зависимость от пакета package:net/openldap[]. Использует конкретную `<версию>` (без точечной нотации), если она указана. В противном случае пытается найти установленную версию. При необходимости возвращается к версии по умолчанию, указанной в `bsd.default-versions.mk`. `client` указывает на зависимость во время выполнения от клиентской библиотеки. Это также значение по умолчанию. `server` указывает на зависимость во время выполнения от сервера.
+
+Следующие переменные могут быть доступны для порта:
+
+`IGNORE_WITH_OPENLDAP`::
+Эта переменная может быть определена, если порты не поддерживают одну или несколько версий OpenLDAP.
+`WITH_OPENLDAP_VER`::
+Пользовательская переменная для установки версии OpenLDAP.
+`OPENLDAP_VER`::
+Обнаруженная версия OpenLDAP.
[[uses-lha]]
== `lha`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Set `EXTRACT_SUFX` to `.lzh`
+Установите `EXTRACT_SUFX` в `.lzh`
[[uses-libarchive]]
== `libarchive`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Registers a dependency on package:archivers/libarchive[].
-Any ports depending on libarchive must include `USES=libarchive`.
+Регистрирует зависимость от package:archivers/libarchive[]. Любые порты, зависящие от libarchive, должны включать `USES=libarchive`.
[[uses-libedit]]
== `libedit`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Registers a dependency on package:devel/libedit[].
-Any ports depending on libedit must include `USES=libedit`.
+Регистрирует зависимость от package:devel/libedit[]. Все порты, зависящие от libedit, должны включать `USES=libedit`.
[[uses-libtool]]
== `libtool`
-Possible arguments: (none), `keepla`, `build`
+Возможные аргументы: (нет), `keepla`, `build`
-Patches `libtool` scripts. This must be added to all ports that use `libtool`.
-The `keepla` argument can be used to keep [.filename]#.la# files.
-Some ports do not ship with their own copy of libtool and need a build time dependency on package:devel/libtool[], use the `:build` argument to add such dependency.
+Исправляет скрипты `libtool`. Это должно быть добавлено во все порты, использующие `libtool`. Аргумент `keepla` может быть использован для сохранения файлов [.filename]#.la#. Некоторые порты не поставляются с собственной копией libtool и требуют зависимость во время сборки от package:devel/libtool[], используйте аргумент `:build` для добавления такой зависимости.
[[uses-linux]]
== `linux`
-Possible arguments: `c6`, `c7`
+Возможные аргументы: `c6`, `c7`
-Ports Linux compatibility framework.
-Specify `c6` to depend on CentOS 6 packags.
-Specify `c7` to depend on CentOS 7 packages. The available packages are:
+Порт фреймворка совместимости с Linux. Укажите `c6` для зависимостей от пакетов CentOS 6. Укажите `c7` для зависимостей от пакетов CentOS 7. Доступные пакеты:
* `allegro`
* `alsa-plugins-oss`
@@ -904,63 +1454,96 @@ Specify `c7` to depend on CentOS 7 packages. The available packages are:
* `ucl`
* `xorglibs`
+[[uses-llvm]]
+== `llvm`
+
+Возможные аргументы: (нет), `_XY_`, min=`_XY_`, max=`_XY_`, build, run, lib
+
+Добавляет зависимость от LLVM. По умолчанию это зависимость для сборки, если не переопределено опциями `run` или `lib`. Версия по умолчанию задаётся в `LLVM_DEFAULT`. Также можно указать конкретную версию. Минимальную и максимальную версии можно указать с помощью параметров `min` и `max` соответственно. Фреймворк портов экспортирует следующие переменные в порт:
+
+`LLVM_VERSION`::
+Версия, выбранная из аргументов к llvm.mk
+`LLVM_PORT`::
+Выбранный порт llvm
+`LLVM_CONFIG`::
+`llvm-config` выбранного порта
+`LLVM_LIBLLVM`::
+`libLLVM.so` выбранного порта
+`LLVM_PREFIX`::
+Префикс инсталляции выбранного порта
+
[[uses-localbase]]
== `localbase`
-Possible arguments: (none), `ldflags`
+Возможные аргументы: (отсутствуют), `ldflags`
-Ensures that libraries from dependencies in `LOCALBASE` are used instead of the ones from the base system.
-Specify `ldflags` to add `-L${LOCALBASE}/lib` to `LDFLAGS` instead of `LIBS`.
-Ports that depend on libraries that are also present in the base system should use this.
-It is also used internally by a few other `USES`.
+Гарантирует использование библиотек из зависимостей в `LOCALBASE` вместо библиотек из базовой системы. Указывает `ldflags` для добавления `-L${LOCALBASE}/lib` в `LDFLAGS` вместо `LIBS`. Порты, зависящие от библиотек, которые также присутствуют в базовой системе, должны использовать эту опцию. Она также используется внутри несколькими другими `USES`.
[[uses-lua]]
== `lua`
-Possible arguments: (none), `_XY_`, `_XY_+`, `-_XY_`, `_XY_-_ZA_`, `module`, `flavors`, `build`, `run`, `env`
+Возможные аргументы: (нет), `_XY_`, `_XY_+`, `-_XY_`, `_XY_-_ZA_`, `module`, `flavors`, `build`, `run`, `env`
+
+Добавляет зависимость от Lua. По умолчанию это зависимость от библиотеки, если не переопределено опциями `build` и/или `run`. Опция `env` предотвращает добавление любой зависимости, при этом все обычные переменные остаются определенными.
+
+Версия по умолчанию устанавливается с помощью обычного механизма `DEFAULT_VERSIONS`, если только версия или диапазон версий не указаны в качестве аргумента, например, `51` или `51-54`.
+
+Приложения, использующие Lua, обычно собираются только для одной версии Lua. Однако модули библиотек, предназначенные для загрузки кодом Lua, должны использовать опцию `module` для сборки с несколькими вариантами.
+
+Для получения дополнительной информации см. crossref:special[using-lua,Использование Lua].
-Adds a dependency on Lua.
-By default this is a library dependency, unless overridden by the `build` and/or `run` option.
-The `env` option prevents the addition of any dependency, while still defining all the usual variables.
+[[uses-luajit]]
+== `luajit`
-The default version is set by the usual `DEFAULT_VERSIONS` mechanism, unless a version or range of versions is specified as an argument, for example, `51` or `51-53`.
+Возможные аргументы: (нет), `_X_`
-Applications using Lua are normally built for only a single Lua version.
-However, library modules intended to be loaded by Lua code should use the `module` option to build with multiple flavors.
+Добавляет зависимость от среды выполнения luajit. Можно указать конкретную версию _X_. Доступные версии: `luajit`, `luajit-devel`, `luajit-openresty`
-For more information see crossref:special[using-lua,Using Lua].
+После включения [.filename]#bsd.port.options.mk# или [.filename]#bsd.port.pre.mk# порт может проверять эти переменные:
+
+`LUAJIT_VER`::
+Выбранная версия luajit
+`LUAJIT_INCDIR`::
+Путь к заголовочным файлам luajit
+`LUAJIT_LUAVER`::
+Какой версии спецификации luajit выбрана (2.0 для luajit, иначе 2.1)
+
+Для получения дополнительной информации см. crossref:special[using-lua,Использование Lua].
[[uses-lxqt]]
== `lxqt`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
+
+Обработка зависимостей для рабочей среды LXQt. Используйте `USE_LXQT` для выбора необходимых компонентов для порта. Дополнительную информацию см. в разделе crossref:special[using-lxqt,Использование LXQt].
+
+[[uses-magick]]
+== `magick`
+
+Возможные аргументы: (нет), `_X_`, `build`, `nox11`, `run`, `test`
-Handle dependencies for the LXQt Desktop Environment.
-Use `USE_LXQT` to select the components needed for the port.
-See crossref:special[using-lxqt,Using LXQt] for more information.
+Добавить зависимость библиотеки от `ImageMagick`. Можно указать конкретную версию _X_. Доступные версии: `6` и `7` (по умолчанию). `nox11` означает, что требуется версия порта `-nox11`. `build`, `run` и `test` добавляют зависимости на сборку, выполнение и тестирование для ImageMagick.
[[uses-makeinfo]]
== `makeinfo`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Add a build-time dependency on `makeinfo` if it is not present in the base system.
+Добавить зависимость во время сборки на `makeinfo`, если его нет в базовой системе.
[[uses-makeself]]
== `makeself`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Indicates that the distribution files are makeself archives and sets the appropriate dependencies.
+Указывает, что файлы дистрибутива являются архивами makeself и устанавливает соответствующие зависимости.
[[uses-mate]]
== `mate`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Provides an easy way to depend on MATE components.
-The components should be listed in `USE_MATE`.
-The available components are:
+Предоставляет простой способ зависимостей от компонентов MATE. Компоненты должны быть перечислены в `USE_MATE`. Доступные компоненты:
* `autogen`
* `caja`
@@ -983,8 +1566,7 @@ The available components are:
* `session`
* `settingsdaemon`
-The default dependency is build- and run-time, it can be changed with `:build` or `:run`.
-For example:
+Зависимость по умолчанию — на время сборки и выполнения, её можно изменить с помощью `:build` или `:run`. Например:
[.programlisting]
....
@@ -995,138 +1577,233 @@ USE_MATE= menus:build intlhack
[[uses-meson]]
== `meson`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Provide support for Meson based projects.
-For more information see crossref:special[using-meson,Using `meson`].
+Предоставить поддержку для проектов на основе Meson. Дополнительную информацию смотрите в crossref:special[using-meson,Использование `meson`].
[[uses-metaport]]
== `metaport`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Sets the following variables to make it easier to create a metaport: `MASTER_SITES`, `DISTFILES`, `EXTRACT_ONLY`, `NO_BUILD`, `NO_INSTALL`, `NO_MTREE`, `NO_ARCH`.
+Устанавливает следующие переменные для упрощения создания метапорта: `MASTER_SITES`, `DISTFILES`, `EXTRACT_ONLY`, `NO_BUILD`, `NO_INSTALL`, `NO_MTREE`, `NO_ARCH`.
+
+[[uses-minizip]]
+== `minizip`
+
+Возможные аргументы: (отсутствуют), `ng`
+
+Добавляет зависимость библиотеки от package:archivers/minizip[] или package:archivers/minizip-ng[] соответственно.
+
+[[uses-mlt]]
+== `mlt`
+
+Возможные аргументы: `7`, `nodepend`
+
+Обеспечить поддержку портов, зависящих от package:multimedia/mlt7[].
+
+Если указан аргумент `nodepend`, зависимости от библиотек не создаются. Этот аргумент имеет смысл только для портов multimedia/mlt7*.
[[uses-mysql]]
== `mysql`
-Possible arguments: (none), `_version_`, `client` (default), `server`, `embedded`
+Возможные аргументы: (отсутствуют), `_версия_`, `client` (по умолчанию), `server`, `embedded`
-Provide support for MySQL
-If no version is given, try to find the current installed version.
-Fall back to the default version, MySQL-5.6.
-The possible versions are `55`, `55m`, `55p`, `56`, `56p`, `56w`, `57`, `57p`, `80`, `100m`, `101m`, and `102m`.
-The `m` and `p` suffixes are for the MariaDB and Percona variants of MySQL.
-`server` and `embedded` add a build- and run-time dependency on the MySQL server.
-When using `server` or `embedded`, add `client` to also add a dependency on [.filename]#libmysqlclient.so#.
-A port can set `IGNORE_WITH_MYSQL` if some versions are not supported.
+Предоставить поддержку MySQL. Если версия не указана, попытаться определить установленную версию. В случае неудачи использовать версию по умолчанию, MySQL-5.6. Возможные версии: `55`, `55m`, `55p`, `56`, `56p`, `56w`, `57`, `57p`, `80`, `100m`, `101m` и `102m`. Суффиксы `m` и `p` обозначают флейворс MariaDB и Percona для MySQL. Параметры `server` и `embedded` добавляют зависимости во время сборки и выполнения на сервер MySQL. При использовании `server` или `embedded` добавьте `client`, чтобы также включить зависимость от [.filename]#libmysqlclient.so#. Порт может установить `IGNORE_WITH_MYSQL`, если некоторые версии не поддерживаются.
-The framework sets `MYSQL_VER` to the detected MySQL version.
+Фреймворк устанавливает `MYSQL_VER` в обнаруженную версию MySQL.
[[uses-mono]]
== `mono`
-Possible arguments: (none), `nuget`
+Возможные аргументы: (отсутствуют), `nuget`
-Adds a dependency on the Mono (currently only C#) framework by setting the appropriate dependencies.
+Добавляет зависимость от фреймворка Mono (в настоящее время только C#), устанавливая соответствующие зависимости.
-Specify `nuget` when the port uses nuget packages.
-`NUGET_DEPENDS` needs to be set with the names and versions of the nuget packages in the format `_name_=_version_`.
-An optional package origin can be added using `_name_=_version_:_origin_`.
+Укажите `nuget`, если порт использует пакеты nuget. `NUGET_DEPENDS` должен содержать имена и версии пакетов nuget в формате `_имя_=_версия_`. Можно добавить необязательное расположение пакета (origin), используя `_имя_=_версия_:_ расположение _`.
-The helper target, `buildnuget`, will output the content of the `NUGET_DEPENDS` based on the provided [.filename]#packages.config#.
+Вспомогательная цель `buildnuget` выведет содержимое `NUGET_DEPENDS` на основе предоставленного файла [.filename]#packages.config#.
[[uses-motif]]
== `motif`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
+
+Использует package:x11-toolkits/open-motif[] как зависимость библиотеки. Конечные пользователи могут установить `WANT_LESSTIF` в [.filename]#make.conf#, чтобы использовать package:x11-toolkits/lesstif[] как зависимость вместо package:x11-toolkits/open-motif[]. Аналогично, установка `WANT_OPEN_MOTIF_DEVEL` в [.filename]#make.conf# добавит зависимость от package:x11-toolkits/open-motif-devel[]
+
+[[uses-mpi]]
+== `mpi`
+
+Возможные аргументы: `mpich` (по умолчанию), `openmpi`
+
+Обеспечить поддержку портов, зависящих от `MPI`.
+
+Если указан аргумент `mpich`, в порт добавляется зависимость от package:net/mpich[].
+
+Если указан аргумент `openmpi`, в порт добавляется зависимость от package:net/openmpi[].
+
+Фреймворк портов предоставляет следующие переменные, которые могут быть прочитаны портом:
+
+`MPI_LIBS`::
+Библиотеки, необходимые для связывания программ с использованием `MPI`.
+
+`MPI_CFLAGS`::
+Флаги компилятора, необходимые для сборки программ с использованием `MPI`.
+
+`MPICC`::
+Расположение исполняемого файла `mpicc`. По умолчанию: [.filename]#${MPI_HOME}/bin/mpicc#.
+
+`MPICXX`::
+Расположение исполняемого файла `mpicxx`. По умолчанию: [.filename]#${MPI_HOME}/bin/mpicxx#.
+
+`MPIF90`::
+Расположение исполняемого файла `mpif90`. По умолчанию: [.filename]#${MPI_HOME}/bin/mpif90#.
+
+`MPIFC`::
+То же, что и выше.
+
+`MPI_HOME`::
+Каталог установки `MPI`. По умолчанию используется `${LOCALBASE}` для `MPICH`.
+
+`MPIEXEC`::
+Расположение исполняемого файла `mpiexec`. По умолчанию: [.filename]#${MPI_HOME}/bin/mpiexec#.
+
+`MPIRUN`::
+Расположение исполняемого файла `mpirun`. По умолчанию: [.filename]#${MPI_HOME}/bin/mpirun#.
-Uses package:x11-toolkits/open-motif[] as a library dependency.
-End users can set `WANT_LESSTIF` for the dependency to be on package:x11-toolkits/lesstif[] instead of package:x11-toolkits/open-motif[].
[[uses-ncurses]]
== `ncurses`
-Possible arguments: (none), `base`, `port`
+Возможные аргументы: (нет), `base`, `port`
+
+Использует ncurses и устанавливает некоторые полезные переменные.
+
+[[uses-nextcloud]]
+== `nextcloud`
-Uses ncurses, and causes some useful variables to be set.
+Возможные аргументы: (отсутствуют)
+
+Добавляет поддержку приложений Nextcloud, добавляя зависимость во время выполнения на package:www/nextcloud[].
[[uses-ninja]]
== `ninja`
-Possible arguments: (none)
+Возможные аргументы: (нет), `build`, `make` (по умолчанию), `run`
+
+Если указаны аргументы `build` или `run`, это соответственно добавляет зависимость во время сборки или выполнения от пакета package:devel/ninja[]. Если указан `make` или аргументы не предоставлены, используется ninja для сборки порта вместо make. `make` подразумевает `build`. Если переменная `NINJA_DEFAULT` установлена в `samurai`, тогда зависимости устанавливаются для пакета package:devel/samurai[] вместо этого.
+
+[[uses-nodejs]]
+== `nodejs`
-Uses ninja to build the port.
+Возможные аргументы: (нет), `build`, `run`, `current`, `lts`, `10`, `14`, `16`,
+ `17`.
+
+Использует nodejs. Добавляет зависимость от пакета package:www/node*[]. Если указана поддерживаемая версия, то также необходимо указать `run` и/или `build`.
[[uses-objc]]
== `objc`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
+
+Добавить зависимости Objective C (компилятор, библиотека времени выполнения), если базовая система их не поддерживает.
+
+[[uses-ocaml]]
+== `ocaml`
+
+Возможные аргументы: (нет), `build`, `camlp4`, `dune`, `findlib`, `findplist`, `ldconfig`, `run`, `tk`, `tkbuild`, `tkrun`, `wash`
+
+Обеспечить поддержку OCaml.
+
+Если аргументы не указаны, по умолчанию используются `build`, `run`.
+
+Если указан аргумент `build`, то package:lang/ocamlc[] добавляется в `BUILD_DEPENDS`, `EXTRACT` и `PATCH_DEPENDS`.
+
+Если указан аргумент `camlp4`, то для сборки используется package:devel/ocamlp4[].
+
+Если указан аргумент `dune`, то package:devel/ocaml-dune[] используется как система сборки.
+
+Если указан аргумент `findlib`, то для установки пакетов будет использоваться `ocamlfind`. Директории пакетов будут автоматически удалены.
+
+Если указан аргумент `findplist`, то содержимое целевых каталогов `findlib` будет добавлено автоматически.
+
+Если указан аргумент `ldconfig`, то файл [.filename]#ld.conf# OCaml будет обработан автоматически. При использовании `dune` Dune может устанавливать stublibs в директориях пакетов site-lib или в отдельной директории ниже `DUNE_LIBDIR` site-lib. Установите, если ваш порт устанавливает общие библиотеки в ocaml
+
+Если указан аргумент `run`, добавить ocamlc в `RUN_DEPENDS`.
+
+Если указан аргумент `tk`, то в порт добавляется зависимость на сборку и выполнение от пакета package:x11-toolkits/ocaml-labltk[]. Подразумевает `tkbuild` и `tkrun`.
+
+Если указан аргумент `tkbuild`, то пакет package:x11-toolkits/ocaml-labltk[] добавляется в `BUILD_DEPENDS`, `EXTRACT` и `PATCH_DEPENDS`.
+
+Если указан аргумент `tkrun`, то package:x11-toolkits/ocaml-labltk[] добавляется в `RUN_DEPENDS`.
-Add objective C dependencies (compiler, runtime library) if the base system does not support it.
+Если указан аргумент `wash`, общие каталоги Ocaml будут очищены при удалении. Полезно при установке в нестандартный `PREFIX`.
+
+Портом могут быть установлены следующие переменные:
+
+`OCAML_PKGDIRS`::
+Каталоги в site-lib для обработки, если указан аргумент `findlib`. По умолчанию: `${PORTNAME}`
+
+`OCAML_LDLIBS`::
+Каталоги в `PREFIX`, которые будут автоматически добавлены/удалены из [.filename]#ld.conf#. По умолчанию: `${OCAML_SITELIBDIR}/${PORTNAME}`
+
+`OCAML_PACKAGES`::
+Список пакетов для сборки и установки. По умолчанию `${PORTNAME}`
+
+
+[[uses-octave]]
+== `octave`
+
+Возможные аргументы: (нет), env
+
+Использует package:math/octave[]. `env` загружает только одну переменную окружения `OCTAVE_VERSION`.
[[uses-openal]]
== `openal`
-Possible arguments: `al`, `soft` (default), `si`, `alut`
+Возможные аргументы: `al`, `soft` (по умолчанию), `si`, `alut`
-Uses OpenAL.
-The backend can be specified, with the software implementation as the default.
-The user can specify a preferred backend with `WANT_OPENAL`.
-Valid values for this knob are `soft` (default) and `si`.
+Использует OpenAL. Бэкенд может быть указан, с программной реализацией по умолчанию. Пользователь может указать предпочтительный бэкенд с помощью `WANT_OPENAL`. Допустимые значения для этой настройки: `soft` (по умолчанию) и `si`.
[[uses-pathfix]]
== `pathfix`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Look for [.filename]#Makefile.in# and [.filename]#configure# in `PATHFIX_WRKSRC` (defaults to `WRKSRC`) and fix common paths to make sure they respect the FreeBSD hierarchy.
-For example, it fixes the installation directory of `pkgconfig`'s [.filename]#.pc# files to [.filename]#${PREFIX}/libdata/pkgconfig#.
-If the port uses `USES=autoreconf`, [.filename]#Makefile.am# will be added to `PATHFIX_MAKEFILEIN` automatically.
+Ищите [.filename]#Makefile.in# и [.filename]#configure# в `PATHFIX_WRKSRC` (по умолчанию `WRKSRC`) и исправляйте стандартные пути, чтобы они соответствовали иерархии FreeBSD. Например, исправляется каталог установки для файлов [.filename]#.pc# `pkgconfig` на [.filename]#${PREFIX}/libdata/pkgconfig#. Если порт использует `USES=autoreconf`, [.filename]#Makefile.am# будет автоматически добавлен в `PATHFIX_MAKEFILEIN`.
-If the port <<uses-cmake,`USES=cmake`>> it will look for [.filename]#CMakeLists.txt# in `PATHFIX_WRKSRC`.
-If needed, that default filename can be changed with `PATHFIX_CMAKELISTSTXT`.
+Если порт crossref:uses[uses-cmake,`USES=cmake`], он будет искать файл [.filename]#CMakeLists.txt# в `PATHFIX_WRKSRC`. При необходимости это имя файла по умолчанию можно изменить с помощью `PATHFIX_CMAKELISTSTXT`.
[[uses-pear]]
== `pear`
-Possible arguments: `env`
+Возможные аргументы: `env`
-Adds a dependency on package:devel/pear[].
-It will setup default behavior for software using the PHP Extension and Application Repository.
-Using the `env` arguments only sets up the PEAR environment variables.
-See crossref:special[php-pear,PEAR Modules] for more information.
+Добавляет зависимость от пакета package:devel/pear[]. Настраивает поведение по умолчанию для программного обеспечения, использующего PHP Extension and Application Repository. Использование аргументов `env` только устанавливает переменные окружения PEAR. Дополнительную информацию см. в crossref:special[php-pear,Модули PEAR].
[[uses-perl5]]
== `perl5`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Depends on Perl. The configuration is done using `USE_PERL5`.
+Зависит от Perl. Настройка выполняется с помощью `USE_PERL5`.
-`USE_PERL5` can contain the phases in which to use Perl, can be `extract`, `patch`, `build`, `run`, or `test`.
+`USE_PERL5` может содержать фазы, в которых используется Perl: `extract`, `patch`, `build`, `run` или `test`.
-`USE_PERL5` can also contain `configure`, `modbuild`, or `modbuildtiny` when [.filename]#Makefile.PL#, [.filename]#Build.PL#,
-or Module::Build::Tiny's flavor of [.filename]#Build.PL# is required.
+`USE_PERL5` также может содержать `configure`, `modbuild` или `modbuildtiny`, если требуется [.filename]#Makefile.PL#, [.filename]#Build.PL# или вариант [.filename]#Build.PL# для Module::Build::Tiny.
-`USE_PERL5` defaults to `build run`.
-When using `configure`, `modbuild`, or `modbuildtiny`, `build` and `run` are implied.
+`USE_PERL5` по умолчанию имеет значение `build run`. При использовании `configure`, `modbuild` или `modbuildtiny`, `build` и `run` подразумеваются автоматически.
-See crossref:special[using-perl,Using Perl] for more information.
+См. crossref:special[using-perl,Использование Perl] для получения дополнительной информации.
[[uses-pgsql]]
== `pgsql`
-Possible arguments: (none), `_X.Y_`, `_X.Y_+`, `_X.Y_-`, `_X.Y_-_Z.A_`
+Возможные аргументы: (нет), `_X.Y_`, `_X.Y_+`, `_X.Y_-`, `_X.Y_-_Z.A_`
-Provide support for PostgreSQL.
-Port maintainer can set version required.
-Minimum and maximum versions or a range can be specified; for example, `9.0-`, `8.4+`, `8.4-9.2.`
+Предоставить поддержку PostgreSQL. Ответственный за порт может указать требуемую версию. Можно указать минимальную и максимальную версии или диапазон; например, `9.0-`, `8.4+`, `8.4-9.2`
-By default, the added dependency will be the client, but if the port requires additional components,
-this can be done using `WANT_PGSQL=_component[:target]_`;
-for example, `WANT_PGSQL=server:configure pltcl plperl`.
-The available components are:
+По умолчанию добавляемая зависимость будет клиентской, но если порту требуются дополнительные компоненты, это можно указать с помощью `WANT_PGSQL=_компонент[:цель]_`; например, `WANT_PGSQL=server:configure pltcl plperl`. Доступные компоненты:
* `client`
* `contrib`
@@ -1140,83 +1817,67 @@ The available components are:
[[uses-php]]
== `php`
-Possible arguments: (none), `phpize`, `ext`, `zend`, `build`, `cli`, `cgi`, `mod`, `web`, `embed`, `pecl`, `flavors`, `noflavors`
+Возможные аргументы: (нет), `phpize`, `ext`, `zend`, `build`, `cli`, `cgi`, `mod`, `web`, `embed`, `pecl`, `flavors`, `noflavors`
-Provide support for PHP.
-Add a runtime dependency on the default PHP version, package:lang/php56[].
+Обеспечить поддержку PHP. Добавить зависимость во время выполнения на версию PHP по умолчанию, package:lang/php81[].
`phpize`::
-Use to build a PHP extension.
-Enables flavors.
+Используется для создания расширения PHP. Поддерживает флейворы.
`ext`::
-Use to build, install and register a PHP extension.
-Enables flavors.
+Используется для сборки, установки и регистрации расширения PHP. Поддерживает флейворы.
`zend`::
-Use to build, install and register a Zend extension.
-Enables flavors.
+Используется для сборки, установки и регистрации Zend-расширения. Поддерживает флейворы.
`build`::
-Set PHP also as a build-time dependency.
+Установить PHP также как зависимость во время сборки.
`cli`::
-Needs the CLI version of PHP.
+Требуется версия PHP для командной строки.
`cgi`::
-Needs the CGI version of PHP.
+Требуется CGI-версия PHP.
`mod`::
-Needs the Apache module for PHP.
+Требуется модуль Apache для PHP.
`web`::
-Needs the Apache module or the CGI version of PHP.
+Требуется модуль Apache или CGI-версия PHP.
`embed`::
-Needs the embedded library version of PHP.
+Требуется встроенная версия библиотеки PHP.
`pecl`::
-Provide defaults for fetching PHP extensions from the PECL repository.
-Enables flavors.
+Установить значения по умолчанию для загрузки расширений PHP из репозитория PECL. Включает флейворы.
`flavors`::
-Enable automatic crossref:flavors[flavors-auto-php,PHP flavors] generation.
-Flavors will be generated for all PHP versions, except the ones present in <<uses-php-ignore,`IGNORE_WITH_PHP`>>.
+Включить автоматическую генерацию crossref:flavors[flavors-auto-php,флейворов PHP]. Флейворы будут созданы для всех версий PHP, за исключением указанных в crossref:uses[uses-php-ignore,`IGNORE_WITH_PHP`].
`noflavors`::
-Disable automatic PHP flavors generation.
-_Must only_ be used with extensions provided by PHP itself.
+Отключить автоматическое создание флейворов PHP. _Должно_ использоваться только с расширениями, предоставляемыми самим PHP.
-Variables are used to specify which PHP modules are required, as well as which version of PHP are supported.
+Переменные используются для указания необходимых модулей PHP, а также версий PHP, которые поддерживаются.
`USE_PHP`::
-The list of required PHP extensions at run-time.
-Add `:build` to the extension name to add a build-time dependency.
-Example: `pcre xml:build gettext`
+Список необходимых расширений PHP во время выполнения. Добавьте `:build` к названию расширения, чтобы указать зависимость во время сборки. Пример: `pcre xml:build gettext`
[[uses-php-ignore]]
`IGNORE_WITH_PHP`::
-The port does not work with PHP of the given version.
-For possible values look at the content of `_ALL_PHP_VERSIONS` in [.filename]#Mk/Uses/php.mk#.
+Порт не работает с PHP указанной версии. Возможные значения можно посмотреть в содержимом `_ALL_PHP_VERSIONS` в [.filename]#Mk/Uses/php.mk#.
-When building a PHP or Zend extension with `:ext` or `:zend`, these variables can be set:
+При сборке расширения PHP или Zend с помощью `:ext` или `:zend`, можно задать следующие переменные:
`PHP_MODNAME`::
-The name of the PHP or Zend extension.
-Default value is `${PORTNAME}`.
+Имя расширения PHP или Zend. Значение по умолчанию: `${PORTNAME}`.
`PHP_HEADER_DIRS`::
-A list of subdirectories from which to install header files.
-The framework will always install the header files that are present in the same directory as the extension.
+Список подкаталогов, из которых следует устанавливать заголовочные файлы. Фреймворк всегда будет устанавливать заголовочные файлы, находящиеся в том же каталоге, что и расширение.
`PHP_MOD_PRIO`::
-The priority at which to load the extension.
-It is a number between `00` and `99`.
+Приоритет загрузки расширения. Это число от `00` до `99`.
+
-For extensions that do not depend on any extension, the priority is automatically set to `20`, for extensions that depend on another extension, the priority is automatically set to `30`.
-Some extensions may need to be loaded before every other extension, for example package:www/php56-opcache[].
-Some may need to be loaded after an extension with a priority of `30`.
-In that case, add `PHP_MOD_PRIO=_XX_` in the port's Makefile. For example:
+Для расширений, которые не зависят от других расширений, приоритет автоматически устанавливается в `20`, а для расширений, зависящих от другого расширения, приоритет автоматически устанавливается в `30`. Некоторые расширения могут требовать загрузки перед всеми остальными, например, package:www/php56-opcache[]. Некоторые могут требовать загрузки после расширения с приоритетом `30`. В таком случае добавьте `PHP_MOD_PRIO=_XX_` в Makefile порта. Например:
+
[.programlisting]
....
@@ -1225,52 +1886,42 @@ USE_PHP= wddx
PHP_MOD_PRIO= 40
....
-These variables are available to use in `PKGNAMEPREFIX` or `PKGNAMESUFFIX`:
+Эти переменные доступны для использования в `PKGNAMEPREFIX` или `PKGNAMESUFFIX`:
`PHP_PKGNAMEPREFIX`::
-Contains `php_XY_-` where _XY_ is the current flavor's PHP version.
-Use with PHP extensions and modules.
+Содержит `php_XY_-`, где _XY_ — версия PHP текущей редакции. Используется с расширениями и модулями PHP.
`PHP_PKGNAMESUFFIX`::
-Contains `-php_XY_` where _XY_ is the current flavor's PHP version.
-Use with PHP applications.
+Содержит `-php_XY_`, где _XY_ — версия PHP текущего варианта. Используется с PHP-приложениями.
`PECL_PKGNAMEPREFIX`::
-Contains `php_XY_-pecl-` where _XY_ is the current flavor's PHP version.
-Use with PECL modules.
+Содержит `php_XY_-pecl-`, где _XY_ — версия PHP текущей редакции. Используется с модулями PECL.
[IMPORTANT]
====
-With flavors, all PHP extensions, PECL extensions, PEAR modules _must have_ a different package name,
-so they must all use one of these three variables in their `PKGNAMEPREFIX` or `PKGNAMESUFFIX`.
+С вариантами сборки все расширения PHP, расширения PECL, модули PEAR _должны иметь_ разные имена пакетов, поэтому они должны использовать одну из трёх переменных в `PKGNAMEPREFIX` или `PKGNAMESUFFIX`.
====
[[uses-pkgconfig]]
== `pkgconfig`
-Possible arguments: (none), `build` (default), `run`, `both`
+Возможные аргументы: (отсутствуют), `build` (по умолчанию), `run`, `both`
-Uses package:devel/pkgconf[].
-With no arguments or with the `build` argument, it implies `pkg-config` as a build-time dependency.
-`run` implies a run-time dependency and `both` implies both run-time and build-time dependencies.
+Использует package:devel/pkgconf[]. Без аргументов или с аргументом `build` подразумевает зависимость от `pkg-config` во время сборки. `run` подразумевает зависимость во время выполнения, а `both` — зависимости как во время выполнения, так и во время сборки.
[[uses-pure]]
== `pure`
-Possible arguments: (none), `ffi`
+Возможные аргументы: (нет), `ffi`
-Uses package:lang/pure[].
-Largely used for building related pure ports.
-With the `ffi` argument, it implies package:devel/pure-ffi[] as a run-time dependency.
+Использует package:lang/pure[]. В основном применяется для сборки портов, зависящих от pure. С аргументом `ffi` подразумевает package:devel/pure-ffi[] как зависимость во время выполнения.
[[uses-pyqt]]
== `pyqt`
-Possible arguments: (none), `4`, `5`
+Возможные аргументы: (нет), `4`, `5`
-Uses PyQt. If the port is part of PyQT itself, set `PYQT_DIST`.
-Use `USE_PYQT` to select the components the port needs.
-The available components are:
+Использует PyQt. Если порт является частью самого PyQT, установите `PYQT_DIST`. Используйте `USE_PYQT` для выбора необходимых порту компонентов. Доступные компоненты:
* `core`
* `dbus`
@@ -1292,7 +1943,7 @@ The available components are:
* `xml`
* `xmlpatterns`
-These components are only available with PyQT4:
+Эти компоненты доступны только с PyQT4:
* `assistant`
* `declarative`
@@ -1301,7 +1952,7 @@ These components are only available with PyQT4:
* `script`
* `scripttools`
-These components are only available with PyQT5:
+Эти компоненты доступны только с PyQT5:
* `multimediawidgets`
* `printsupport`
@@ -1310,7 +1961,7 @@ These components are only available with PyQT5:
* `webkitwidgets`
* `widgets`
-The default dependency for each component is build- and run-time, to select only build or run, add `_build` or `_run` to the component name. For example:
+Зависимость по умолчанию для каждого компонента — это время сборки и выполнения. Чтобы выбрать только сборку или выполнение, добавьте `_build` или `_run` к имени компонента. Например:
[.programlisting]
....
@@ -1318,58 +1969,76 @@ USES= pyqt
USE_PYQT= core doc_build designer_run
....
+[[uses-pytest]]
+== `pytest`
+
+Возможные аргументы: (нет), 4
+
+Вводит новую зависимость от package:devel/pytest[]. Он определяет цель `do-test`, которая будет правильно запускать тесты. Используйте аргумент, чтобы зависеть от определённой версии package:devel/pytest[]. Для портов, использующих package:devel/pytest[], рекомендуется использовать это вместо конкретной цели `do-test`. Фреймворк предоставляет порту следующие переменные:
+
+`PYTEST_ARGS`::
+Дополнительные аргументы для pytest (по умолчанию пусто).
+
+`PYTEST_IGNORED_TESTS`::
+списки шаблонов `pytest -k` для игнорирования тестов (по умолчанию пустые). Для тестов, которые не должны проходить, например, требующих доступа к базе данных.
+
+`PYTEST_BROKEN_TESTS`::
+списки шаблонов `pytest -k` тестов для игнорирования (по умолчанию пустые). Для сломанных тестов, которые требуют исправления.
+
+В дополнение следующие переменные могут быть заданы пользователем:
+
+`PYTEST_ENABLE_IGNORED_TESTS`::
+Включить тесты, которые в противном случае игнорируются `PYTEST_IGNORED_TESTS`.
+
+`PYTEST_ENABLE_BROKEN_TESTS`::
+Включить тесты, которые в противном случае игнорируются `PYTEST_BROKEN_TESTS`.
+
+`PYTEST_ENABLE_ALL_TESTS`::
+Включить тесты, которые в противном случае игнорируются `PYTEST_IGNORED_TESTS` и `PYTEST_BROKEN_TESTS`.
+
+
[[uses-python]]
== `python`
-Possible arguments: (none), `_X.Y_`, `_X.Y+_`, `_-X.Y_`, `_X.Y-Z.A_`, `patch`, `build`, `run`, `test`
+Возможные аргументы: (нет), `_X.Y_`, `_X.Y+_`, `_-X.Y_`, `_X.Y-Z.A_`, `patch`, `build`, `run`, `test`
-Uses Python. A supported version or version range can be specified.
-If Python is only needed at build time, run time or for the tests, it can be set as a build, run or test dependency with `build`, `run`, or `test`.
-If Python is also needed during the patch phase, use `patch`.
-See crossref:special[using-python, Using Python] for more information.
+Использует Python. Можно указать поддерживаемую версию или диапазон версий. Если Python требуется только во время сборки, выполнения или тестирования, его можно установить как зависимость для сборки, выполнения или тестирования с помощью `build`, `run` или `test`. Если Python также требуется на этапе исправлений, используйте `patch`. Дополнительную информацию см. в разделе crossref:special[using-python,Использование Python].
-`PYTHON_NO_DEPENDS=yes` can be used when the variables exported by the framework are needed but a dependency on Python is not.
-It can happen when using with <<uses-shebangfix,`USES=shebangfix`>>, and the goal is only to fix the shebangs but not add a dependency on Python.
+`USES=python:env` можно использовать, когда необходимы переменные, экспортируемые фреймворком, но зависимость от Python не требуется. Это может быть полезно при использовании с crossref:uses[uses-shebangfix,`USES=shebangfix`], если цель состоит только в исправлении shebang без добавления зависимости от Python.
[[uses-qmail]]
== `qmail`
-Possible arguments: (none), `build`, `run`, `both`, `vars`
+Возможные аргументы: (нет), `build`, `run`, `both`, `vars`
-Uses package:mail/qmail[]. With the `build` argument, it implies `qmail` as a build-time dependency.
-`run` implies a run-time dependency.
-Using no argument or the `both` argument implies both run-time and build-time dependencies.
-`vars` will only set QMAIL variables for the port to use.
+Использует package:mail/qmail[]. С аргументом `build` подразумевается зависимость от `qmail` во время сборки. Аргумент `run` подразумевает зависимость во время выполнения. Использование без аргументов или с аргументом `both` подразумевает зависимости как во время выполнения, так и во время сборки. Аргумент `vars` только устанавливает переменные QMAIL для использования в порте.
[[uses-qmake]]
== `qmake`
-Possible arguments: (none), `norecursive`, `outsource`, `no_env`, `no_configure`
+Возможные аргументы: (отсутствуют), `norecursive`, `outsource`, `no_env`, `no_configure`
-Uses QMake for configuring. For more information see crossref:special[using-qmake,Using `qmake`].
+Использует QMake для настройки. Для получения дополнительной информации см. crossref:special[using-qmake,Использование `qmake`].
[[uses-qt]]
== `qt`
-Possible arguments: `5`, `no_env`
+Возможные аргументы: `5`, `6`, `no_env`
-Add dependency on Qt components.
-`no_env` is passed directly to `USES= qmake`.
-See crossref:special[using-qt,Using Qt] for more information.
+Добавить зависимость от компонентов Qt. `no_env` передаётся напрямую в `USES= qmake`. Подробнее см. в crossref:special[using-qt,Использование Qt].
[[uses-qt-dist]]
== `qt-dist`
-Possible arguments: (none) or `5` and (none) or one of `3d`, `activeqt`, `androidextras`, `base`, `canvas3d`, `charts`, `connectivity`, `datavis3d`, `declarative`, `doc`, `gamepad`, `graphicaleffects`, `imageformats`, `location`, `macextras`, `multimedia`, `networkauth`, `purchasing`, `quickcontrols2`, `quickcontrols`, `remoteobjects`, `script`, `scxml`, `sensors`, `serialbus`, `serialport`, `speech`, `svg`, `tools`, `translations`, `virtualkeyboard`, `wayland`, `webchannel`, `webengine`, `websockets`, `webview`, `winextras`, `x11extras`, `xmlpatterns`
+Possible arguments: (none) or `5` and (none) or `6` and (none) or one of `3d`, `5compat`, `base`, `charts`, `connectivity`, `datavis3d`, `declarative`, `doc` `languageserver`, `gamepad`, `graphicaleffects`, `imageformats`, `locat ion`, `lottie`, `multimedia`, `networkauth`, `positioning`, `quick3d`, `quickcontrols2`, `quickcontrols`, `quicktimeline`, `remoteobjects`, `script`, `scxml `, `sensors`, `serialbus`, `serialport`, `shadertools`, `speech`, `svg`, `tools`, `translations`, `virtualkeyboard`, `wayland`, `webchannel`, `webengine`, `webglplugin`, `websockets`, `webview`, `x11extras`, `xmlpatterns`.
-Provides support for building Qt 5 components.
-It takes care of setting up the appropriate configuration environment for the port to build.
+Предоставляет поддержку сборки компонентов Qt 5 и Qt 6. Обеспечивает настройку соответствующей конфигурации окружения для сборки порта.
[[qt5-dist-example]]
-.Building Qt 5 Components
+.Сборка компонентов Qt 5
[example]
====
-The port is Qt 5's `networkauth` component, which is part of the `networkauth` distribution file.
+Порт представляет собой компонент `networkauth` из Qt 5, который входит в файл дистрибутива `networkauth`.
[.programlisting]
....
@@ -1381,13 +2050,30 @@ USES= qt-dist:5
====
-If `PORTNAME` does not match the component name, it can be passed as an argument to `qt-dist`.
+
+[[qt6-dist-example]]
+.Сборка компонентов Qt 6
+[example]
+====
+Порт представляет собой компонент `websockets` из Qt 6, который входит в файл дистрибутива `websockets`.
+
+[.programlisting]
+....
+PORTNAME= websockets
+PORTVERSION= ${QT6_VERSION}
+
+USES= qt-dist:6
+....
+
+====
+
+Если `PORTNAME` не совпадает с именем компонента, его можно передать как аргумент в `qt-dist`.
[[qt5-dist-example-explicit]]
-.Building Qt 5 Components with Different Names
+.Сборка компонентов Qt 5 с разными именами
[example]
====
-The port is Qt 5's `gui` component, which is part of the `base` distribution file.
+Порт представляет собой компонент `gui` из Qt 5, который входит в файл дистрибутива `base`.
[.programlisting]
....
@@ -1402,116 +2088,181 @@ USES= qt-dist:5,base
[[uses-readline]]
== `readline`
-Possible arguments: (none), `port`
+Возможные аргументы: (нет), `port`
+
+Использует readline в качестве зависимости библиотеки и устанавливает `CPPFLAGS` и `LDFLAGS` по необходимости. Если используется аргумент `port` или если readline отсутствует в базовой системе, добавляет зависимость от package:devel/readline[]
+
+
+[[uses-ruby]]
+== `ruby`
+
+Возможные аргументы: (нет), `build`, `extconf`, `run`, `setup`
+
+Предоставить поддержку для портов, связанных с Ruby. `(none)` без аргументов добавляет зависимость во время выполнения на package:lang/ruby[]. `build` добавляет зависимость на package:lang/ruby[] во время сборки. `extconf` указывает, что порт использует extconf.rb для настройки. `run` добавляет зависимость на package:lang/ruby[] во время выполнения. Это также значение по умолчанию. `setup` указывает, что порт использует setup.rb для настройки и сборки.
+
+Пользователь может определить следующие переменные:
+
+`RUBY_VER`::
+Альтернативная короткая версия ruby в виде `x.y`.
+
+`RUBY_DEFAULT_VER`::
+Установите (например) `2.7`, чтобы использовать `ruby27` в качестве версии по умолчанию.
+
+`RUBY_ARCH`::
+Установите имя архитектуры (например, i386-freebsd7).
+
+Следующие переменные экспортируются для использования портом:
+
+`RUBY`::
+Установлена в полный путь к ruby. Если задано, значения следующих переменных автоматически получаются из исполняемого файла ruby: `RUBY_ARCH`, `RUBY_ARCHLIBDIR`, `RUBY_LIBDIR`, `RUBY_SITEARCHLIBDIR`, `RUBY_SITELIBDIR`, `RUBY_VER` и `RUBY_VERSION`
+
+`RUBY_VER`::
+Установлена в альтернативную короткую версию ruby в формате `x.y`.
+
+`RUBY_EXTCONF`::
+Установлена в альтернативное имя для extconf.rb (по умолчанию: extconf.rb).
+
+`RUBY_EXTCONF_SUBDIRS`::
+Установлена в список подкаталогов, если включено несколько модулей.
+
+`RUBY_SETUP`::
+Установлена в альтернативное имя для setup.rb (по умолчанию: setup.rb).
-Uses readline as a library dependency, and sets `CPPFLAGS` and `LDFLAGS` as necessary.
-If the `port` argument is used or if readline is not present in the base system, add a dependency on package:devel/readline[]
[[uses-samba]]
== `samba`
-Possible arguments: `build`, `env`, `lib`, `run`
+Возможные аргументы: `build`, `env`, `lib`, `run`
+
+Обработать зависимость от Samba. `env` не добавит никаких зависимостей, а только установит переменные. `build` и `run` добавят зависимости во время сборки и выполнения на [.filename]#smbd#. `lib` добавит зависимость на [.filename]#libsmbclient.so#. Экспортируемые переменные:
+
+`SAMBA_PORT`::
+Расположение порта Samba по умолчанию.
-Handle dependency on Samba.
-`env` will not add any dependency and only set up the variables.
-`build` and `run` will add build-time and run-time dependency on [.filename]#smbd#. `lib` will add a dependency on [.filename]#libsmbclient.so#.
-The variables that are exported are:
+`SAMBA_INCLUDEDIR`::
+Расположение заголовочных файлов Samba.
-`SAMBAPORT`::
-The origin of the default Samba port.
+`SAMBA_LIBS`::
+Каталог, в котором доступны общие библиотеки Samba.
-`SAMBAINCLUDES`::
-The location of the Samba header files.
+`SAMBA_LDB_PORT`::
+Расположение порта ldb, используемого выбранной версией Samba (например, package:databases/ldb28[]). Он должен использоваться, если порту требуется зависимость от той же версии ldb, что и у выбранной версии Samba.
-`SAMBALIBS`::
-The directory where the Samba shared libraries are available.
+`SAMBA_TALLOC_PORT`::
+Расположение порта talloc, используемого выбранной версией Samba. Следует использовать, если порту требуется зависеть от той же версии talloc, что и выбранная версия Samba.
+
+`SAMBA_TDB_PORT`::
+Расположение порта TDB, используемого выбранной версией Samba. Его следует использовать, если порту требуется зависеть от той же версии TDB, что и выбранная версия Samba.
+
+`SAMBA_TEVENT_PORT`::
+Расположение порта tevent, используемого выбранной версией Samba. Это следует использовать, если порту необходимо зависеть от той же версии tevent, что и выбранная версия Samba.
[[uses-scons]]
== `scons`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
+
+Предоставить поддержку для использования package:devel/scons[]. Дополнительную информацию смотрите в crossref:special[using-scons,Использование `scons`].
+
+[[uses-sdl]]
+== `sdl`
+
+Возможные аргументы: `sdl`
+
+Обеспечить поддержку использования пакетов `SDL`. Переменная `USE_SDL` является обязательной и указывает, какие компоненты добавить в зависимости.
+
+Поддерживаемые в настоящее время модули `SDL1.2`:
+
+* sdl
+* console
+* gfx
+* image
+* mixer
+* mm
+* net
+* pango
+* sound
+* ttf
-Provide support for the use of package:devel/scons[].
-See crossref:special[using-scons,Using `scons`] for more information.
+Текущие поддерживаемые модули `SDL2`:
+
+ * sdl2
+ * gfx2
+ * image2
+ * mixer2
+ * net2
+ * sound2
+ * ttf2
+
+Текущие поддерживаемые модули `SDL3`:
+
+ * sdl3
+ * image3
+ * ttf3
[[uses-shared-mime-info]]
== `shared-mime-info`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Uses update-mime-database from package:misc/shared-mime-info[].
-This uses will automatically add a post-install step in such a way that the port itself still can specify there own post-install step if needed.
-It also add an crossref:plist[plist-keywords-shared-mime-info,`@shared-mime-info`] entry to the plist.
+Использует update-mime-database из пакета package:misc/shared-mime-info[]. Это автоматически добавит шаг post-install таким образом, что сам порт всё ещё может указать собственный шаг post-install при необходимости. Также добавляет запись crossref:plist[plist-keywords-shared-mime-info,`@shared-mime-info`] в plist.
[[uses-shebangfix]]
== `shebangfix`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-A lot of software uses incorrect locations for script interpreters, most notably [.filename]#/usr/bin/perl# and [.filename]#/bin/bash#.
-The shebangfix macro fixes shebang lines in scripts listed in `SHEBANG_REGEX`, `SHEBANG_GLOB`, or `SHEBANG_FILES`.
+Множество программ используют некорректные расположения для интерпретаторов скриптов, особенно [.filename]#/usr/bin/perl# и [.filename]#/bin/bash#. Макрос shebangfix исправляет строки shebang в скриптах, перечисленных в `SHEBANG_REGEX`, `SHEBANG_GLOB` или `SHEBANG_FILES`.
`SHEBANG_REGEX`::
-Contains _one_ extended regular expressions, and is used with the `-iregex` argument of man:find[1].
-See <<uses-shebangfix-ex-regex>>.
+Содержит _одно_ расширенное регулярное выражение и используется с аргументом `-iregex` в man:find[1]. См. crossref:uses[uses-shebangfix-ex-regex,`USESshebangfix` с `SHEBANG_REGEX`].
`SHEBANG_GLOB`::
-Contains a list of patterns used with the `-name` argument of man:find[1].
-See <<uses-shebangfix-ex-glob>>.
+Содержит список шаблонов, используемых с аргументом `-name` в man:find[1]. См. crossref:uses[uses-shebangfix-ex-glob,`USESshebangfix` с `SHEBANG_GLOB`].
`SHEBANG_FILES`::
-Contains a list of files or man:sh[1] globs.
-The shebangfix macro is run from `${WRKSRC}`, so `SHEBANG_FILES` can contain paths that are relative to `${WRKSRC}`.
-It can also deal with absolute paths if files outside of `${WRKSRC}` require patching.
-See <<uses-shebangfix-ex-files>>.
+Содержит список файлов или шаблонов man:sh[1]. Макрос shebangfix выполняется из `${WRKSRC}`, поэтому `SHEBANG_FILES` может содержать пути, относительные к `${WRKSRC}`. Также он может работать с абсолютными путями, если требуется исправление файлов вне `${WRKSRC}`. См. crossref:uses[uses-shebangfix-ex-files,`USESshebangfix` с `SHEBANG_FILES`].
-Currently Bash, Java, Ksh, Lua, Perl, PHP, Python, Ruby, Tcl, and Tk are supported by default.
+В настоящее время Bash, Java, Ksh, Lua, Perl, PHP, Python, Ruby, Tcl и Tk поддерживаются по умолчанию.
-There are three configuration variables:
+Существует три переменных конфигурации:
`SHEBANG_LANG`::
-The list of supported interpreters.
+Список поддерживаемых интерпретаторов.
`_interp__CMD`::
-The path to the command interpreter on FreeBSD.
-The default value is `${LOCALBASE}/bin/_interp_`.
+Путь к интерпретатору команд в FreeBSD. Значение по умолчанию — `${LOCALBASE}/bin/_interp_`.
`_interp__OLD_CMD`::
-The list of wrong invocations of interpreters.
-These are typically obsolete paths, or paths used on other operating systems that are incorrect on FreeBSD.
-They will be replaced by the correct path in `_interp__CMD`.
+Список неправильных вызовов интерпретаторов. Обычно это устаревшие пути или пути, используемые в других операционных системах, которые неверны в FreeBSD. Они будут заменены на правильные пути в `_interp__CMD`.
+
[NOTE]
====
-These will _always_ be part of `_interp__OLD_CMD`: `"/usr/bin/env _interp_" /bin/_interp_ /usr/bin/_interp_ /usr/local/bin/_interp_`.
+Эти пути _всегда_ будут частью `_interp__OLD_CMD`: `"/usr/bin/env _interp_" /bin/_interp_ /usr/bin/_interp_ /usr/local/bin/_interp_`.
====
+
[TIP]
====
-`_interp__OLD_CMD` contain multiple values.
-Any entry with spaces must be quoted.
-See <<uses-shebangfix-ex-ksh>>.
+`_interp__OLD_CMD` содержит несколько значений. Любая запись с пробелами должна быть заключена в кавычки. См. crossref:uses[uses-shebangfix-ex-ksh,Указание всех путей при добавлении интерпретатора в `USESshebangfix`].
====
[IMPORTANT]
====
-The fixing of shebangs is done during the `patch` phase.
-If scripts are created with incorrect shebangs during the `build` phase, the build process (for example, the [.filename]#configure# script, or the [.filename]#Makefiles#) must be patched or given the right path (for example, with `CONFIGURE_ENV`, `CONFIGURE_ARGS`, `MAKE_ENV`, or `MAKE_ARGS`) to generate the right shebangs.
+Исправление шебанг-строк выполняется на этапе `patch`. Если скрипты создаются с некорректными шебанг-строками на этапе `build`, процесс сборки (например, скрипт [.filename]#configure# или [.filename]#Makefiles#) должен быть исправлен или ему должен быть указан правильный путь (например, с помощью `CONFIGURE_ENV`, `CONFIGURE_ARGS`, `MAKE_ENV` или `MAKE_ARGS`) для генерации корректных шебанг-строк.
-Correct paths for supported interpreters are available in `_interp__CMD`.
+Правильные пути для поддерживаемых интерпретаторов доступны в `_interp__CMD`.
====
[TIP]
====
-When used with <<uses-python,`USES=python`>>, and the aim is only to fix the shebangs but a dependency on Python itself is not wanted, use `PYTHON_NO_DEPENDS=yes`.
+При использовании с crossref:uses[uses-python,`USES=python`], если цель состоит только в исправлении shebang, но зависимость от самого Python не требуется, используйте `USES=python:env`.
====
[[uses-shebangfix-ex-lua]]
-.Adding Another Interpreter to `USES=shebangfix`
+.Добавление другого интерпретатора в `USES=shebangfix`
[example]
====
-To add another interpreter, set `SHEBANG_LANG`.
-For example:
+Чтобы добавить другой интерпретатор, установите `SHEBANG_LANG`. Например:
[.programlisting]
....
@@ -1521,10 +2272,10 @@ SHEBANG_LANG= lua
====
[[uses-shebangfix-ex-ksh]]
-.Specifying all the Paths When Adding an Interpreter to `USES=shebangfix`
+.Указание всех путей при добавлении интерпретатора в `USES=shebangfix`
[example]
====
-If it was not already defined, and there were no default values for `_interp__OLD_CMD` and `_interp__CMD` the Ksh entry could be defined as:
+Если они еще не были определены и не было значений по умолчанию для `_interp__OLD_CMD` и `_interp__CMD`, запись Ksh можно определить как:
[.programlisting]
....
@@ -1536,12 +2287,10 @@ ksh_CMD= ${LOCALBASE}/bin/ksh
====
[[uses-shebangfix-ex-strange]]
-.Adding a Strange Location for an Interpreter
+.Добавление нестандартного расположения интерпретатора
[example]
====
-Some software uses strange locations for an interpreter.
-For example, an application might expect Python to be located in [.filename]#/opt/bin/python2.7#.
-The strange path to be replaced can be declared in the port [.filename]#Makefile#:
+Некоторое программное обеспечение использует нестандартные пути для интерпретатора. Например, приложение может ожидать, что Python будет расположен в [.filename]#/opt/bin/python2.7#. Нестандартный путь, который нужно заменить, можно указать в [.filename]#Makefile# порта:
[.programlisting]
....
@@ -1551,10 +2300,10 @@ python_OLD_CMD= /opt/bin/python2.7
====
[[uses-shebangfix-ex-regex]]
-.`USES=shebangfix` with `SHEBANG_REGEX`
+.`USES=shebangfix` с `SHEBANG_REGEX`
[example]
====
-To fix all the files in `${WRKSRC}/scripts` ending in [.filename]#.pl#, [.filename]#.sh#, or [.filename]#.cgi# do:
+Для исправления всех файлов в `${WRKSRC}/scripts`, оканчивающихся на [.filename]#.pl#, [.filename]#.sh# или [.filename]#.cgi#, выполните:
[.programlisting]
....
@@ -1564,17 +2313,16 @@ SHEBANG_REGEX= ./scripts/.*\.(sh|pl|cgi)
[NOTE]
======
-`SHEBANG_REGEX` is used by running `find -E`, which uses modern regular expressions also known as extended regular expressions.
-See man:re_format[7] for more information.
+`SHEBANG_REGEX` используется при выполнении `find -E`, который применяет современные регулярные выражения, также известные как расширенные регулярные выражения. Подробнее см. в man:re_format[7].
======
====
[[uses-shebangfix-ex-glob]]
-.`USES=shebangfix` with `SHEBANG_GLOB`
+.`USES=shebangfix` с `SHEBANG_GLOB`
[example]
====
-To fix all the files in `${WRKSRC}` ending in [.filename]#.pl# or [.filename]#.sh#, do:
+Для исправления всех файлов в `${WRKSRC}` с окончанием [.filename]#.pl# или [.filename]#.sh# выполните:
[.programlisting]
....
@@ -1585,10 +2333,10 @@ SHEBANG_GLOB= *.sh *.pl
====
[[uses-shebangfix-ex-files]]
-.`USES=shebangfix` with `SHEBANG_FILES`
+.`USES=shebangfix` с `SHEBANG_FILES`
[example]
====
-To fix the files [.filename]#script/foobar.pl# and [.filename]#script/*.sh# in `${WRKSRC}`, do:
+Для исправления файлов [.filename]#script/foobar.pl# и [.filename]#script/*.sh# в `${WRKSRC}` выполните:
[.programlisting]
....
@@ -1601,38 +2349,42 @@ SHEBANG_FILES= scripts/foobar.pl scripts/*.sh
[[uses-sqlite]]
== `sqlite`
-Possible arguments: (none), `2`, `3`
+Возможные аргументы: (нет), `2`, `3`
+
+Добавить зависимость от SQLite. Используемая по умолчанию версия — 3, но также возможна версия 2 с использованием модификатора `:2`.
+
+[[uses-sbrk]]
+== `sbrk`
+
+Возможные аргументы: (отсутствуют)
-Add a dependency on SQLite.
-The default version used is 3, but version 2 is also possible using the `:2` modifier.
+Помечает порт как `BROKEN` для `aarch64` и `riscv64`.
[[uses-ssl]]
== `ssl`
-Possible arguments: (none), `build`, `run`
+Возможные аргументы: (нет), `build`, `run`
-Provide support for OpenSSL.
-A build- or run-time only dependency can be specified using `build` or `run`.
-These variables are available for the port's use, they are also added to `MAKE_ENV`:
+Обеспечить поддержку OpenSSL. Зависимость только для сборки или выполнения может быть указана с использованием `build` или `run`. Эти переменные доступны для использования портом, а также добавлены в `MAKE_ENV`:
`OPENSSLBASE`::
-Path to the OpenSSL installation base.
+Путь к базовой установке OpenSSL.
`OPENSSLDIR`::
-Path to OpenSSL's configuration files.
+Путь к файлам конфигурации OpenSSL.
`OPENSSLLIB`::
-Path to the OpenSSL libraries.
+Путь к библиотекам OpenSSL.
`OPENSSLINC`::
-Path to the OpenSSL includes.
+Путь к заголовочным файлам OpenSSL.
`OPENSSLRPATH`::
-If defined, the path the linker needs to use to find the OpenSSL libraries.
+Если определено, путь, который требуется компоновщику для поиска библиотек OpenSSL.
[TIP]
====
-If a port does not build with an OpenSSL flavor, set the `BROKEN_SSL` variable, and possibly the `BROKEN_SSL_REASON__flavor_`:
+Если порт не собирается с вариантом OpenSSL, установите переменную `BROKEN_SSL`, а также, возможно, `BROKEN_SSL_REASON__flavor_`:
[.programlisting]
....
@@ -1645,282 +2397,351 @@ BROKEN_SSL_REASON_libressl= needs features only available in OpenSSL
[[uses-tar]]
== `tar`
-Possible arguments: (none), `Z`, `bz2`, `bzip2`, `lzma`, `tbz`, `tbz2`, `tgz`, `txz`, `xz`
+Возможные аргументы: (нет), `Z`, `bz2`, `bzip2`, `lzma`, `tbz`, `tbz2`, `tgz`, `txz`, `xz`, `zst`, `zstd`
-Set `EXTRACT_SUFX` to `.tar`, `.tar.Z`, `.tar.bz2`, `.tar.bz2`, `.tar.lzma`, `.tbz`, `.tbz2`, `.tgz`, `.txz` or `.tar.xz` respectively.
+Установите `EXTRACT_SUFX` в `.tar`, `.tar.Z`, `.tar.bz2`, `.tar.bz2`, `.tar.lzma`, `.tbz`, `.tbz2`, `.tgz`, `.txz`, `.tar.xz`, `.tar.zst` или `.tar.zstd` соответственно.
[[uses-tcl]]
== `tcl`
-Possible arguments: _version_, `wrapper`, `build`, `run`, `tea`
+Возможные аргументы: _version_, `wrapper`, `build`, `run`, `tea`
-Add a dependency on Tcl. A specific version can be requested using _version_.
-The version can be empty, one or more exact version numbers (currently `84`, `85`, or `86`), or a minimal version number (currently `84+`, `85+` or `86+`).
-To only request a non version specific wrapper, use `wrapper`.
-A build- or run-time only dependency can be specified using `build` or `run`.
-To build the port using the Tcl Extension Architecture, use `tea`.
-After including [.filename]#bsd.port.pre.mk# the port can inspect the results using these variables:
+Добавьте зависимость от Tcl. Конкретная версия может быть запрошена с помощью _version_. Версия может быть пустой, одной или несколькими точными номерами версий (в настоящее время `84`, `85` или `86`), либо минимальным номером версии (в настоящее время `84+`, `85+` или `86+`). Чтобы запросить только неспецифичную для версии обёртку, используйте `wrapper`. Зависимость только на время сборки или выполнения может быть указана с помощью `build` или `run`. Для сборки порта с использованием Tcl Extension Architecture используйте `tea`. После включения [.filename]#bsd.port.pre.mk# порт может проверить результаты с помощью этих переменных:
-* `TCL_VER`: chosen major.minor version of Tcl
-* `TCLSH`: full path of the Tcl interpreter
-* `TCL_LIBDIR`: path of the Tcl libraries
-* `TCL_INCLUDEDIR`: path of the Tcl C header files
-* `TK_VER`: chosen major.minor version of Tk
-* `WISH`: full path of the Tk interpreter
-* `TK_LIBDIR`: path of the Tk libraries
-* `TK_INCLUDEDIR`: path of the Tk C header files
+* `TCL_VER`: выбранная версия Tcl в формате major.minor
+* `TCLSH`: полный путь к интерпретатору Tcl
+* `TCL_LIBDIR`: путь к библиотекам Tcl
+* `TCL_INCLUDEDIR`: путь к заголовочным файлам Tcl на языке C
+* `TCL_PKG_LIB_PREFIX`: Префикс библиотеки, согласно TIP595
+* `TCL_PKG_STUB_POSTFIX`: Постфикс библиотеки заглушки
+* `TK_VER`: выбранная версия Tk в формате major.minor
+* `WISH`: полный путь к интерпретатору Tk
+* `TK_LIBDIR`: путь к библиотекам Tk
+* `TK_INCLUDEDIR`: путь к заголовочным файлам Tk на языке C
[[uses-terminfo]]
== `terminfo`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
+
+Добавляет crossref:plist[plist-keywords-terminfo,`@terminfo`] в файл [.filename]#plist#. Используется, когда порт устанавливает файлы [.filename]#*.terminfo# в каталог [.filename]#${PREFIX}/share/misc#.
+
+[[uses-tex]]
+== `tex`
+
+Возможные аргументы: (отсутствуют)
+
+Обеспечить поддержку tex. Загружает все стандартные переменные для портов, связанных с TEX, и не добавляет зависимостей от других портов.
+
+Переменные используются для указания того, какие модули TEX требуются.
-Adds crossref:plist[plist-keywords-terminfo,`@terminfo`] to the [.filename]#plist#.
-Use when the port installs [.filename]#*.terminfo# files in [.filename]#${PREFIX}/share/misc#.
+`USE_TEX`::
+Список необходимых расширений TEX во время выполнения. Добавьте `:build` к названию расширения, чтобы добавить зависимость на время сборки, `:run` — для зависимости во время выполнения, `:test` — для зависимости во время тестирования, `:extract` — для зависимости во время извлечения. Пример: `base texmf:build source:run`
+
+Текущие возможные аргументы следующие:
+
+* `base`
+* `texmf`
+* `source`
+* `docs`
+* `web2c`
+* `kpathsea`
+* `ptexenc`
+* `basic`
+* `tlmgr`
+* `texlua`
+* `texluajit`
+* `synctex`
+* `xpdfopen`
+* `dvipsk`
+* `dvipdfmx`
+* `xdvik`
+* `gbklatex`
+* `formats`
+* `tex`
+* `latex`
+* `pdftex`
+* `jadetex`
+* `luatex`
+* `ptex`
+* `xetex`
+* `xmltex`
+* `texhash`
+* `updmap`
+* `fmtutil`
[[uses-tk]]
== `tk`
-Same as arguments for `tcl`
+Так же, как аргументы для `tcl`
+
+Небольшая обертка при использовании Tcl и Tk. Возвращаются те же переменные, что и при использовании Tcl.
+
+[[uses-trigger]]
+== `trigger`
-Small wrapper when using both Tcl and Tk.
-The same variables are returned as when using Tcl.
+Возможные аргументы: (отсутствуют)
+
+Предоставить поддержку для портов, требующих выполнения триггеров с помощью man:pkg[8]. Триггеры выполняются в конце транзакции, если условия выполнены.
+
+Следующая переменная может быть установлена портами:
+
+`TRIGGERS`::
+Список триггеров для пакета. По умолчанию используется `${PORTNAME}`.
+
+Триггеры указываются в формате UCL и обычно размещаются в каталоге [.filename]#files/# порта.
[[uses-uidfix]]
== `uidfix`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Changes some default behavior (mostly variables) of the build system to allow installing this port as a normal user.
-Try this in the port before using <<uses-fakeroot,USES=fakeroot>> or patching.
+Изменяет некоторые стандартные настройки (в основном переменные) системы сборки, чтобы позволить установку этого порта обычным пользователем. Попробуйте это в порте перед использованием crossref:uses[uses-fakeroot,`USES=fakeroot`] или исправлением.
[[uses-uniquefiles]]
== `uniquefiles`
-Possible arguments: (none), `dirs`
+Возможные аргументы: (нет), `dirs`
+
+Сделать файлы или каталоги 'уникальными', добавляя префикс или суффикс. Если используется аргумент `dirs`, порту требуется префикс (и только префикс) на основе `UNIQUE_PREFIX` для стандартных каталогов `DOCSDIR`, `EXAMPLESDIR`, `DATADIR`, `WWWDIR`, `ETCDIR`. Эти переменные доступны для портов:
-Make files or directories 'unique', by adding a prefix or suffix.
-If the `dirs` argument is used, the port needs a prefix (and only a prefix) based on `UNIQUE_PREFIX` for standard directories `DOCSDIR`, `EXAMPLESDIR`, `DATADIR`, `WWWDIR`, `ETCDIR`.
-These variables are available for ports:
+* `UNIQUE_PREFIX`: Префикс, используемый для каталогов и файлов. По умолчанию: `${PKGNAMEPREFIX}`.
+* `UNIQUE_PREFIX_FILES`: Список файлов, которые необходимо предварить префиксом. По умолчанию: пусто.
+* `UNIQUE_SUFFIX`: Суффикс, используемый для файлов. По умолчанию: `${PKGNAMESUFFIX}`.
+* `UNIQUE_SUFFIX_FILES`: Список файлов, к которым необходимо добавить суффикс. По умолчанию: пусто.
-* `UNIQUE_PREFIX`: The prefix to be used for directories and files. Default: `${PKGNAMEPREFIX}`.
-* `UNIQUE_PREFIX_FILES`: A list of files that need to be prefixed. Default: empty.
-* `UNIQUE_SUFFIX`: The suffix to be used for files. Default: `${PKGNAMESUFFIX}`.
-* `UNIQUE_SUFFIX_FILES`: A list of files that need to be suffixed. Default: empty.
+[[uses-vala]]
+== `vala`
+
+Возможные аргументы: `build`, `lib`, `no_depend`
+
+Добавляет зависимости сборки или библиотеки на package:lang/vala[]. Аргумент `no_depend` зарезервирован для самого package:lang/vala[].
[[uses-varnish]]
== `varnish`
-Possible arguments: `4`, `6`
+Возможные аргументы: `4` (по умолчанию), `6`, `7`
+
+Обрабатывает зависимости для Varnish Cache. Добавляет зависимость от пакета `package:www/varnish*[]`.
+
+[[uses-waf]]
+== `waf`
+
+Возможные аргументы: (отсутствуют)
+
+Обеспечить поддержку портов, использующих систему сборки `waf`.
+
+Это подразумевает `USES=python:build`.
+
+Следующие переменные экспортируются для использования портом:
+
+`WAF_CMD`::
+Расположение скрипта `waf`. Установите этот параметр, если скрипт `waf` не находится в [.filename]#WRKSRC/waf#.
+
+`CONFIGURE_TARGET`::
+Цель для `configure`. По умолчанию – `configure`.
+
+`ALL_TARGET`::
+Цель для `all`. По умолчанию `build`.
-Handle dependencies on Varnish Cache.
-`4` will add a dependency on package:www/varnish4[].
-`6` will add a dependency on package:www/varnish6[].
+`INSTALL_TARGET`::
+Цель для `install`. По умолчанию `install`.
[[uses-webplugin]]
== `webplugin`
-Possible arguments: (none), `ARGS`
+Возможные аргументы: (нет), `ARGS`
-Automatically create and remove symbolic links for each application that supports the webplugin framework.
-`ARGS` can be one of:
+Автоматически создавать и удалять символические ссылки для каждого приложения, поддерживающего фреймворк webplugin. `ARGS` может быть одним из:
-* `gecko`: support plug-ins based on Gecko
-* `native`: support plug-ins for Gecko, Opera, and WebKit-GTK
-* `linux`: support Linux plug-ins
-* `all` (default, implicit): support all plug-in types
-* (individual entries): support only the browsers listed
+* `gecko`: поддержка плагинов на основе Gecko
+* `native`: поддержка плагинов для Gecko, Opera и WebKit-GTK
+* `linux`: поддержка Linux плагинов
+* `all` (по умолчанию, неявно): поддержка всех типов плагинов
+* (отдельные записи): поддерживаются только перечисленные браузеры
-These variables can be adjusted:
+Эти переменные можно настроить:
-* `WEBPLUGIN_FILES`: No default, must be set manually. The plug-in files to install.
-* `WEBPLUGIN_DIR`: The directory to install the plug-in files to, default [.filename]#PREFIX/lib/browser_plugins/WEBPLUGIN_NAME#. Set this if the port installs plug-in files outside of the default directory to prevent broken symbolic links.
-* `WEBPLUGIN_NAME`: The final directory to install the plug-in files into, default `PKGBASE`.
+* `WEBPLUGIN_FILES`: Значение по умолчанию отсутствует, должно быть установлено вручную. Файлы плагинов для установки.
+* `WEBPLUGIN_DIR`: Каталог для установки файлов плагина, по умолчанию [.filename]#PREFIX/lib/browser_plugins/WEBPLUGIN_NAME#. Установите это значение, если порт устанавливает файлы плагина вне стандартного каталога, чтобы избежать битых символических ссылок.
+* `WEBPLUGIN_NAME`: Конечный каталог для установки файлов плагина, по умолчанию `PKGBASE`.
[[uses-xfce]]
== `xfce`
-Possible arguments: (none), `gtk2`
+Возможные аргументы: (нет), `gtk2`
-Provide support for Xfce related ports.
-See crossref:special[using-xfce,Using Xfce] for details.
+Предоставить поддержку для портов, связанных с Xfce. Подробности см. в crossref:special[using-xfce,Использование Xfce].
-The `gtk2` argument specifies that the port requires GTK2 support.
-It adds additional features provided by some core components, for example, package:x11/libxfce4menu[] and package:x11-wm/xfce4-panel[].
+Аргумент `gtk2` указывает, что порт требует поддержки GTK2. Он добавляет дополнительные возможности, предоставляемые некоторыми основными компонентами, например, package:x11/libxfce4menu[] и package:x11-wm/xfce4-panel[].
[[uses-xorg]]
== `xorg`
-Possible arguments: (none)
+Возможные аргументы: (отсутствуют)
-Provides an easy way to depend on X.org components.
-The components should be listed in `USE_XORG`.
-The available components are:
+Предоставляет простой способ зависеть от компонентов X.org. Компоненты должны быть перечислены в `USE_XORG`. Доступные компоненты:
[[using-x11-components]]
-.Available X.Org Components
+.Доступные компоненты X.Org
[cols="1,1", frame="none", options="header"]
|===
-| Name
-| Description
+| Имя
+| Описание
|`dmx`
-|DMX extension library
+|Библиотека расширений DMX
|`fontenc`
-|The fontenc Library
+|Библиотека fontenc
|`fontutil`
-|Create an index of X font files in a directory
+|Создать индекс файлов шрифтов X в каталоге
|`ice`
-|Inter Client Exchange library for X11
+|Библиотека Inter Client Exchange для X11
|`libfs`
-|The FS library
+|Библиотека FS
|`pciaccess`
-|Generic PCI access library
+|Универсальная библиотека доступа к PCI
|`pixman`
-|Low-level pixel manipulation library
+|Библиотека для низкоуровневого управления пикселями
|`sm`
-|Session Management library for X11
+|Библиотека управления сеансами для X11
|`x11`
-|X11 library
+|Библиотека X11
|`xau`
-|Authentication Protocol library for X11
+|Библиотека протокола аутентификации для X11
|`xaw`
-|X Athena Widgets library
+|Библиотека X Athena Widgets
|`xaw6`
-|X Athena Widgets library
+|Библиотека X Athena Widgets
|`xaw7`
-|X Athena Widgets library
+|Библиотека X Athena Widgets
|`xbitmaps`
-|X.Org bitmaps data
+|Данные растровых изображений X.Org
|`xcb`
-|The X protocol C-language Binding (XCB) library
+|Библиотека с интерфейсом языка С для X протокола (XCB)
|`xcomposite`
-|X Composite extension library
+|Библиотека расширения X Composite
|`xcursor`
-|X client-side cursor loading library
+|X библиотека загрузки курсоров на стороне клиента
|`xdamage`
-|X Damage extension library
+|Библиотека расширения X Damage
|`xdmcp`
-|X Display Manager Control Protocol library
+|Библиотека протокола управления дисплейным менеджером X (XDMCP)
|`xext`
-|X11 Extension library
+|Библиотека расширений X11
|`xfixes`
-|X Fixes extension library
+|Библиотека расширений X Fixes
|`xfont`
-|X font library
+|Библиотека шрифтов X
|`xfont2`
-|X font library
+|Библиотека шрифтов X
|`xft`
-|Client-sided font API for X applications
+|Клиентский API шрифтов для приложений X
|`xi`
-|X Input extension library
+|Библиотека расширения X Input
|`xinerama`
-|X11 Xinerama library
+|Библиотека X11 Xinerama
|`xkbfile`
-|XKB file library
+|Библиотека файлов XKB
|`xmu`
-|X Miscellaneous Utilities libraries
+|Библиотека X Miscellaneous Utilities
|`xmuu`
-|X Miscellaneous Utilities libraries
+|Библиотека X Miscellaneous Utilities
|`xorg-macros`
-|X.Org development aclocal macros
+|X.Org макросы разработки aclocal
|`xorg-server`
-|X.Org X server and related programs
+|Сервер X.Org X и относящиеся к нему программы
|`xorgproto`
-|xorg protocol headers
+|Заголовочные файлы протокола xorg
|`xpm`
-|X Pixmap library
+|Библиотека X Pixmap
|`xpresent`
-|X Present Extension library
+|Библиотека расширений X Present
|`xrandr`
-|X Resize and Rotate extension library
+|Библиотека расширений X Resize and Rotate
|`xrender`
-|X Render extension library
+|Библиотека расширения X Render
|`xres`
-|X Resource usage library
+|Библиотека мониторинга ресурсов X Resource usage
|`xscrnsaver`
-|The XScrnSaver library
+|Библиотека XScrnSaver
|`xshmfence`
-|Shared memory 'SyncFence' synchronization primitive
+|Примитив синхронизации "SyncFence" в разделяемой памяти
|`xt`
-|X Toolkit library
+|Библиотека X Toolkit
|`xtrans`
-|Abstract network code for X
+|Абстрактный сетевой код для X
|`xtst`
-|X Test extension
+|Расширение X Test
|`xv`
-|X Video Extension library
+|Библиотека расширения X Video
|`xvmc`
-|X Video Extension Motion Compensation library
+|Библиотека X Video Extension Motion Compensation
|`xxf86dga`
-|X DGA Extension
+|Расширение X DGA
|`xxf86vm`
-|X Vidmode Extension
+|Расширение X Vidmode
|===
[[uses-xorg-cat]]
== `xorg-cat`
-Possible arguments: `app`, `data`, `doc`, `driver`, `font`, `lib`, `proto`, `util`, `xserver` and (none) or one off `autotools` (default), `meson`
+Возможные аргументы: `app`, `data`, `doc`, `driver`, `font`, `lib`, `proto`, `util`, `xserver` и (без аргументов) или один из `autotools` (по умолчанию), `meson`
-Provide support for building Xorg components.
-It takes care of setting up common dependencies and an appropriate configuration environment needed.
-This is intended only for Xorg components.
+Обеспечивает поддержку сборки компонентов Xorg. Управляет настройкой общих зависимостей и необходимой конфигурационной среды. Предназначено только для компонентов Xorg.
-The category has to match upstream categories.
+Категория должна соответствовать категориям вышестоящего репозитория.
-The second argument is the build system to use.
-autotools is the default, but meson is also supported.
+Второй аргумент — используемая система сборки. По умолчанию используется `autotools`, но также поддерживается `meson`.
[[uses-zip]]
== `zip`
-Possible arguments: (none), `infozip`
+Возможные аргументы: (нет), `infozip`
-Indicates that the distribution files use the ZIP compression algorithm.
-For files using the InfoZip algorithm the `infozip` argument must be passed to set the appropriate dependencies.
+Указывает, что файлы дистрибутива используют алгоритм сжатия ZIP. Для файлов, использующих алгоритм InfoZip, необходимо передать аргумент `infozip`, чтобы установить соответствующие зависимости.
diff --git a/documentation/content/ru/books/porters-handbook/uses/_index.po b/documentation/content/ru/books/porters-handbook/uses/_index.po
new file mode 100644
index 0000000000..8326053acb
--- /dev/null
+++ b/documentation/content/ru/books/porters-handbook/uses/_index.po
@@ -0,0 +1,9971 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-09-18 22:05+0300\n"
+"PO-Revision-Date: 2025-07-24 21:10+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksporters-handbookuses_index/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Yaml Front Matter Hash Value: description
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1
+#, no-wrap
+msgid "USES macros make it easy to declare requirements and settings for a FreeBSD Port"
+msgstr "Макросы USES упрощают объявление требований и настроек для порта FreeBSD"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1
+#, no-wrap
+msgid "Chapter 17. Using USES Macros"
+msgstr "Глава 17. Использование макроса USES"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:14
+#, no-wrap
+msgid "Using `USES` Macros"
+msgstr "Использование макроса `USES`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:52
+#, no-wrap
+msgid "An Introduction to `USES`"
+msgstr "Введение в `USES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:56
+msgid ""
+"`USES` macros make it easy to declare requirements and settings for a port. "
+"They can add dependencies, change building behavior, add metadata to "
+"packages, and so on, all by selecting simple, preset values."
+msgstr ""
+"Макросы `USES` упрощают объявление требований и настроек для порта. Они "
+"могут добавлять зависимости, изменять поведение при сборке, добавлять "
+"метаданные в пакеты и так далее, просто выбирая предустановленные значения."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:60
+msgid ""
+"Each section in this chapter describes a possible value for `USES`, along "
+"with its possible arguments. Arguments are appended to the value after a "
+"colon (`:`). Multiple arguments are separated by commas (`,`)."
+msgstr ""
+"Каждый раздел в этой главе описывает возможное значение для `USES`, а также "
+"его возможные аргументы. Аргументы добавляются к значению после двоеточия "
+"(`:`). Несколько аргументов разделяются запятыми (`,`)."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:62
+#, no-wrap
+msgid "Using Multiple Values"
+msgstr "Использование нескольких значений"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:68
+#, no-wrap
+msgid "USES=\tbison perl\n"
+msgstr "USES=\tbison perl\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:72
+#, no-wrap
+msgid "Adding an Argument"
+msgstr "Добавление аргумента"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:78
+#, no-wrap
+msgid "USES=\ttar:xz\n"
+msgstr "USES=\ttar:xz\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:82
+#, no-wrap
+msgid "Adding Multiple Arguments"
+msgstr "Добавление нескольких аргументов"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:88
+#, no-wrap
+msgid "USES=\tdrupal:7,theme\n"
+msgstr "USES=\tdrupal:7,theme\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:92
+#, no-wrap
+msgid "Mixing it All Together"
+msgstr "Смешивая Все Вместе"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:98
+#, no-wrap
+msgid "USES=\tpgsql:9.3+ cpe python:2.7,build\n"
+msgstr "USES=\tpgsql:9.3+ cpe python:2.7,build\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:102
+#, no-wrap
+msgid "`7z`"
+msgstr "`7z`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:105
+msgid "Possible arguments: (none), `p7zip`, `partial`"
+msgstr "Возможные аргументы: (нет), `p7zip`, `partial`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:109
+msgid ""
+"Extract using man:7z[1] instead of man:bsdtar[1] and sets "
+"`EXTRACT_SUFX=.7z`. The `p7zip` option forces a dependency on the `7z` from "
+"package:archivers/p7zip[] if the one from the base system is not able to "
+"extract the files. `EXTRACT_SUFX` is not changed if the `partial` option is "
+"used, this can be used if the main distribution file does not have a "
+"[.filename]#.7z# extension."
+msgstr ""
+"Извлечение с использованием man:7z[1] вместо man:bsdtar[1] и устанавливает "
+"`EXTRACT_SUFX=.7z`. Опция `p7zip` добавляет зависимость от `7z` из "
+"package:archivers/p7zip[], если версия из базовой системы не может извлечь "
+"файлы. `EXTRACT_SUFX` не изменяется, если используется опция `partial`, это "
+"может быть полезно, если основной дистрибутивный файл не имеет расширения "
+"[.filename]#.7z#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:111
+#, no-wrap
+msgid "`ada`"
+msgstr "`ada`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:114
+msgid "Possible arguments: (none), `6`, `12`, `(run)`"
+msgstr "Возможные аргументы: (нет), `6`, `12`, `(запуск)`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:117
+msgid ""
+"Depends on an Ada-capable compiler, and sets `CC` accordingly. Defaults to "
+"use `gcc6-aux` from ports."
+msgstr ""
+"Зависит от компилятора с поддержкой Ada и устанавливает `CC` соответствующим "
+"образом. По умолчанию используется `gcc6-aux` из портов."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:119
+#, no-wrap
+msgid "`angr`"
+msgstr "`angr`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:122
+msgid "Possible arguments: `binaries`, `nose`"
+msgstr "Возможные аргументы: `binaries`, `nose`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:124
+msgid ""
+"Provide support for ports that need the https://github.com/angr/"
+"angr[angrinary analysis platform]."
+msgstr ""
+"Обеспечить поддержку портов, требующих https://github.com/angr/"
+"angr[платформу бинарного анализа angr]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:127
+msgid ""
+"If the `binaries` argument is present, the port requires the special `angr` "
+"binaries for testing."
+msgstr ""
+"Если присутствует аргумент `binaries`, для тестирования порта требуются "
+"специальные бинарные файлы `angr`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:130
+msgid ""
+"If the `nose` argument is present, the port uses `nosetests` for the test "
+"target. This argument implies `USES=python:test`."
+msgstr ""
+"Если присутствует аргумент `nose`, порт использует `nosetests` для цели "
+"тестирования. Этот аргумент подразумевает `USES=python:test`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:132
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:203
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1331
+msgid "The framework provides the following variables to be set by the port:"
+msgstr ""
+"Фреймворк предоставляет следующие переменные, которые могут быть установлены "
+"портом:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:133
+#, no-wrap
+msgid "`ANGR_VERSION`"
+msgstr "`ANGR_VERSION`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:135
+msgid "The version of the `angr` project programs."
+msgstr "Версия программ проекта `angr`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:136
+#, no-wrap
+msgid "`ANGR_BINARIES_TAGNAME`"
+msgstr "`ANGR_BINARIES_TAGNAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:138
+msgid "The tagname of the `angr` binaries."
+msgstr "Имя тега для бинарных файлов `angr`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:139
+#, no-wrap
+msgid "`ANGR_NOSETESTS`"
+msgstr "`ANGR_NOSETESTS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:141
+msgid "The path to the `nosetests` program."
+msgstr "Путь к программе `nosetests`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:143
+#, no-wrap
+msgid "`ansible`"
+msgstr "`ansible`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:146
+msgid "Possible arguments: `env`, `module`, `plugin`"
+msgstr "Возможные аргументы: `env`, `module`, `plugin`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:148
+msgid "Provide support for ports depending on package:sysutils/ansible[]."
+msgstr ""
+"Обеспечивает поддержку портов, зависящих от пакета package:sysutils/"
+"ansible[]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:151
+msgid ""
+"If the `env` argument is present, the port does not depend on "
+"package:sysutils/ansible[] but needs some Ansible variables set."
+msgstr ""
+"Если присутствует аргумент `env`, порт не зависит от package:sysutils/"
+"ansible[], но требует установки некоторых переменных Ansible."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:153
+msgid "If the `module` argument is present then the port is an Ansible module."
+msgstr "Если присутствует аргумент `module`, то порт является модулем Ansible."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:155
+msgid "If the `plugin` argument is present then the port is an Ansible plugin."
+msgstr ""
+"Если присутствует аргумент `plugin`, то порт является плагином Ansible."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:157
+msgid "The framework exposes the following variables to the port:"
+msgstr "Фреймворк предоставляет следующие переменные порту:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:158
+#, no-wrap
+msgid "`ANSIBLE_CMD`"
+msgstr "`ANSIBLE_CMD`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:160
+msgid "Path to the ansible program."
+msgstr "Путь к программе ansible."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:161
+#, no-wrap
+msgid "`ANSIBLE_DOC_CMD`"
+msgstr "`ANSIBLE_DOC_CMD`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:163
+msgid "Path to the ansible-doc program."
+msgstr "Путь к программе ansible-doc."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:164
+#, no-wrap
+msgid "`ANSIBLE_RUN_DEPENDS`"
+msgstr "`ANSIBLE_RUN_DEPENDS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:166
+msgid "RUN_DEPENDS with the Ansible port."
+msgstr "RUN_DEPENDS с портом Ansible."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:167
+#, no-wrap
+msgid "`ANSIBLE_DATADIR`"
+msgstr "`ANSIBLE_DATADIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:169
+msgid ""
+"Path to the root of the directory structure where all Ansible's modules and "
+"plugins are stored."
+msgstr ""
+"Путь к корню структуры каталогов, где хранятся все модули и плагины Ansible."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:170
+#, no-wrap
+msgid "`ANSIBLE_ETCDIR`"
+msgstr "`ANSIBLE_ETCDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:172
+msgid "Path to the Ansible etc directory."
+msgstr "Путь к каталогу etc Ansible."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:173
+#, no-wrap
+msgid "`ANSIBLE_PLUGINS_PREFIX`"
+msgstr "`ANSIBLE_PLUGINS_PREFIX`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:175
+msgid "Path to the \"plugins\" directory within `${ANSIBLE_DATADIR}`."
+msgstr "Путь к директории \"plugins\" в `${ANSIBLE_DATADIR}`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:175
+#, no-wrap
+msgid "`ANSIBLE_MODULESDIR`"
+msgstr "`ANSIBLE_MODULESDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:177
+msgid "Path to the directory for local Ansible modules."
+msgstr "Путь к каталогу для локальных модулей Ansible."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:178
+#, no-wrap
+msgid "`ANSIBLE_PLUGINSDIR`"
+msgstr "`ANSIBLE_PLUGINSDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:180
+msgid "Path to the directory for local Ansible plugins."
+msgstr "Путь к каталогу для локальных плагинов Ansible."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:181
+#, no-wrap
+msgid "`ANSIBLE_PLUGIN_TYPE`"
+msgstr "`ANSIBLE_PLUGIN_TYPE`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:183
+msgid "Ansible plugin type (e.g., \"connection\", \"inventory\", or \"vars\")."
+msgstr ""
+"Тип плагина Ansible (например, \"connection\", \"inventory\" или \"vars\")."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:185
+#, no-wrap
+msgid "`apache`"
+msgstr "`apache`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:188
+msgid "Possible arguments: (none), `2.4`, `build`, `run`, `server`"
+msgstr "Возможные аргументы: (нет), `2.4`, `build`, `run`, `server`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:190
+msgid "Provide support for ports depending on the Apache web server."
+msgstr "Обеспечивает поддержку портов, зависящих от веб-сервера Apache."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:194
+msgid ""
+"The version argument can be used to require a specific Apache httpd "
+"version. It is possible to set a specific version (`USES=apache:2.4`) a "
+"minimum version (`USES=apache:2.4+`) or a maximum version "
+"(`USES=apache:-2.4`)."
+msgstr ""
+"Аргумент `version` можно использовать для указания конкретной версии Apache "
+"httpd. Можно задать определённую версию (`USES=apache:2.4`), минимальную "
+"версию (`USES=apache:2.4+`) или максимальную версию (`USES=apache:-2.4`)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:196
+msgid ""
+"If the `build` argument is provided a build dependency is added to the port."
+msgstr ""
+"Если указан аргумент `build`, к порту добавляется зависимость для сборки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:198
+msgid ""
+"If the `run` argument is provided a run dependency is added to the port."
+msgstr ""
+"Если указан аргумент `run`, к порту добавляется зависимость времени "
+"выполнения."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:201
+msgid ""
+"If the `server` argument is provided then it indicates the port is a server "
+"port."
+msgstr ""
+"Если указан аргумент `server`, это означает, что порт является серверным."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:204
+#, no-wrap
+msgid "`AP_FAST_BUILD`"
+msgstr "`AP_FAST_BUILD`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:206
+msgid "Automatic module build"
+msgstr "Автоматическая сборка модуля"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:207
+#, no-wrap
+msgid "`AP_GENPLIST`"
+msgstr "`AP_GENPLIST`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:209
+msgid ""
+"Automatic `PLIST` generation plus add the module disabled into "
+"[.filename]#httpd.conf# (only if no `pkg-plist` exist)"
+msgstr ""
+"Автоматическое создание `PLIST` плюс добавление модуля в отключенном "
+"состоянии в [.filename]#httpd.conf# (только если нет файла `pkg-plist`)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:210
+#, no-wrap
+msgid "`MODULENAME`"
+msgstr "`MODULENAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:212
+msgid "Name of the Apache module. Default: `${PORTNAME}`"
+msgstr "Имя модуля Apache. По умолчанию: `${PORTNAME}`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:213
+#, no-wrap
+msgid "`SHORTMODNAME`"
+msgstr "`SHORTMODNAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:215
+msgid "Short name of the Apache module. Default: `${MODULENAME:S/mod_//}`"
+msgstr "Краткое название модуля Apache. По умолчанию: `${MODULENAME:S/mod_//}`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:216
+#, no-wrap
+msgid "`SRC_FILE`"
+msgstr "`SRC_FILE`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:218
+msgid "Source file of the APACHE module. Default: `${MODULENAME}.c`"
+msgstr "Исходный файл модуля APACHE. По умолчанию: `${MODULENAME}.c`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:220
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1544
+msgid "The following variables can be accessed by the port:"
+msgstr "Следующие переменные могут быть доступны для порта:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:221
+#, no-wrap
+msgid "`APACHE_VERSION`"
+msgstr "`APACHE_VERSION`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:223
+msgid "The major-minor release version of the chosen Apache server, e.g. 2.4"
+msgstr ""
+"Основная-вспомогательная версия выбранного сервера Apache, например 2.4"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:224
+#, no-wrap
+msgid "`APACHEETCDIR`"
+msgstr "`APACHEETCDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:226
+msgid ""
+"Location of the Apache configuration directory. Default: [.filename]#$"
+"{LOCALBASE}/etc/apache24#"
+msgstr ""
+"Расположение каталога конфигурации Apache. По умолчанию: [.filename]#$"
+"{LOCALBASE}/etc/apache24#"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:227
+#, no-wrap
+msgid "`APACHEINCLUDEDIR`"
+msgstr "`APACHEINCLUDEDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:229
+msgid ""
+"Location of the Apache include files Default: [.filename]#${LOCALBASE}/"
+"include/apache24#"
+msgstr ""
+"Расположение include-файлов Apache. По умолчанию: [.filename]#${LOCALBASE}/"
+"include/apache24#"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:230
+#, no-wrap
+msgid "`APACHEMODDIR`"
+msgstr "`APACHEMODDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:232
+msgid ""
+"Location of the Apache modules Default: [.filename]#${LOCALBASE}/libxexec/"
+"apache24#"
+msgstr ""
+"Расположение модулей Apache. По умолчанию: [.filename]#${LOCALBASE}/libxexec/"
+"apache24#"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:234
+msgid "`APACHE_DEFAULT`::Default Apache version"
+msgstr "`APACHE_DEFAULT`::Версия Apache по умолчанию"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:237
+#, no-wrap
+msgid "`autoreconf`"
+msgstr "`autoreconf`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:240
+msgid "Possible arguments: (none), `build`"
+msgstr "Возможные аргументы: (нет), `build`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:247
+msgid ""
+"Runs `autoreconf`. It encapsulates the `aclocal`, `autoconf`, `autoheader`, "
+"`automake`, `autopoint`, and `libtoolize` commands. Each command applies to "
+"[.filename]#${AUTORECONF_WRKSRC}/configure.ac# or its old name, [.filename]#$"
+"{AUTORECONF_WRKSRC}/configure.in#. If [.filename]#configure.ac# defines "
+"subdirectories with their own [.filename]#configure.ac# using "
+"`AC_CONFIG_SUBDIRS`, `autoreconf` will recursively update those as well. "
+"The `:build` argument only adds build time dependencies on those tools but "
+"does not run `autoreconf`. A port can set `AUTORECONF_WRKSRC` if `WRKSRC` "
+"does not contain the path to [.filename]#configure.ac#."
+msgstr ""
+"Выполняет `autoreconf`. Эта команда объединяет функциональность `aclocal`, "
+"`autoconf`, `autoheader`, `automake`, `autopoint` и `libtoolize`. Каждая из "
+"этих команд применяется к [.filename]#${AUTORECONF_WRKSRC}/configure.ac# или "
+"его старому названию [.filename]#${AUTORECONF_WRKSRC}/configure.in#. Если "
+"[.filename]#configure.ac# определяет подкаталоги с их собственными "
+"[.filename]#configure.ac# с использованием `AC_CONFIG_SUBDIRS`, `autoreconf` "
+"также рекурсивно обновит их. Аргумент `:build` только добавляет зависимости "
+"времени сборки на эти инструменты, но не запускает `autoreconf`. Порт может "
+"установить `AUTORECONF_WRKSRC`, если `WRKSRC` не содержит путь к "
+"[.filename]#configure.ac#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:249
+#, no-wrap
+msgid "`azurepy`"
+msgstr "`azurepy`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:252
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:313
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:399
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:408
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:417
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:519
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:548
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:559
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:575
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:663
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:797
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:867
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:904
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:937
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:944
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1099
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1170
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1292
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1556
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1563
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1571
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1739
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1758
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1765
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1772
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1811
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1819
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1872
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1933
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1961
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2039
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2061
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2505
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2551
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2560
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2723
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2798
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2806
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2861
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2877
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2915
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2970
+msgid "Possible arguments: (none)"
+msgstr "Возможные аргументы: (отсутствуют)"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:255
+msgid ""
+"Provide support for `py-azure*` ports. Removes `azure` namespaces and "
+"cleans up common files."
+msgstr ""
+"Обеспечить поддержку портов `py-azure*`. Удаляет пространства имен `azure` и "
+"очищает общие файлы."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:257
+#, no-wrap
+msgid "`blaslapack`"
+msgstr "`blaslapack`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:260
+msgid ""
+"Possible arguments: (none), `atlas`, `netlib` (default), `gotoblas`, "
+"`openblas`"
+msgstr ""
+"Возможные аргументы: (нет), `atlas`, `netlib` (по умолчанию), `gotoblas`, "
+"`openblas`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:262
+msgid "Adds dependencies on Blas / Lapack libraries."
+msgstr "Добавляет зависимости от библиотек Blas / Lapack."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:264
+#, no-wrap
+msgid "`bdb`"
+msgstr "`bdb`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:267
+msgid "Possible arguments: (none), `5` (default), `18`"
+msgstr "Возможные аргументы: (отсутствуют), `5` (по умолчанию), `18`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:275
+msgid ""
+"Add dependency on the Berkeley DB library. Default to package:databases/"
+"db5[]. It can also depend on package:databases/db18[] when using the `:18` "
+"argument. It is possible to declare a range of acceptable values, `:5+` "
+"finds the highest installed version, and falls back to 5 if nothing else is "
+"installed. `INVALID_BDB_VER` can be used to specify versions which do not "
+"work with this port. The framework exposes the following variables to the "
+"port:"
+msgstr ""
+"Добавить зависимость от библиотеки Berkeley DB. По умолчанию используется "
+"package:databases/db5[]. Также может зависеть от package:databases/db18[] "
+"при использовании аргумента `:18`. Можно объявить диапазон допустимых "
+"значений: `:5+` находит самую высокую установленную версию и возвращается к "
+"5, если ничего другого не установлено. `INVALID_BDB_VER` можно использовать "
+"для указания версий, которые не работают с этим портом. Фреймворк "
+"предоставляет порту следующие переменные:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:276
+#, no-wrap
+msgid "`BDB_LIB_NAME`"
+msgstr "`BDB_LIB_NAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:279
+msgid ""
+"The name of the Berkeley DB library. For example, when using "
+"package:databases/db5[], it contains `db-5.3`."
+msgstr ""
+"Имя библиотеки Berkeley DB. Например, при использовании package:databases/"
+"db5[] она содержит `db-5.3`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:280
+#, no-wrap
+msgid "`BDB_LIB_CXX_NAME`"
+msgstr "`BDB_LIB_CXX_NAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:283
+msgid ""
+"The name of the Berkeley DBC++ library. For example, when using "
+"package:databases/db5[], it contains `db_cxx-5.3`."
+msgstr ""
+"Название библиотеки Berkeley DBC++. Например, при использовании "
+"package:databases/db5[] она содержит `db_cxx-5.3`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:284
+#, no-wrap
+msgid "`BDB_INCLUDE_DIR`"
+msgstr "`BDB_INCLUDE_DIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:287
+msgid ""
+"The location of the Berkeley DB include directory. For example, when using "
+"package:databases/db5[], it will contain `${LOCALBASE}/include/db5`."
+msgstr ""
+"Расположение каталога с заголовочными файлами Berkeley DB. Например, при "
+"использовании пакета package:databases/db5[], он будет содержать `$"
+"{LOCALBASE}/include/db5`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:288
+#, no-wrap
+msgid "`BDB_LIB_DIR`"
+msgstr "`BDB_LIB_DIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:291
+msgid ""
+"The location of the Berkeley DB library directory. For example, when using "
+"package:databases/db5[], it contains `${LOCALBASE}/lib`."
+msgstr ""
+"Расположение каталога библиотеки Berkeley DB. Например, при использовании "
+"package:databases/db5[], он содержит `${LOCALBASE}/lib`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:292
+#, no-wrap
+msgid "`BDB_VER`"
+msgstr "`BDB_VER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:295
+msgid ""
+"The detected Berkeley DB version. For example, if using `USES=bdb:5+` and "
+"Berkeley DB 18 is installed, it contains `18`."
+msgstr ""
+"Обнаруженная версия Berkeley DB. Например, при использовании `USES=bdb:5+` и "
+"установленной Berkeley DB 18, будет содержать `18`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:300
+msgid ""
+"package:databases/db48[] is deprecated and unsupported. It must not be used "
+"by any port."
+msgstr ""
+"package:databases/db48[] устарел и не поддерживается. Он не должен "
+"использоваться ни одним портом."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:303
+#, no-wrap
+msgid "`bison`"
+msgstr "`bison`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:306
+msgid "Possible arguments: (none), `build`, `run`, `both`"
+msgstr "Возможные аргументы: (нет), `build`, `run`, `both`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:308
+msgid ""
+"Uses package:devel/bison[] By default, with no arguments or with the `build` "
+"argument, it implies `bison` is a build-time dependency, `run` implies a run-"
+"time dependency, and `both` implies both run-time and build-time "
+"dependencies."
+msgstr ""
+"Использует пакет package:devel/bison[] По умолчанию, без аргументов или с "
+"аргументом `build`, подразумевается, что `bison` является зависимостью на "
+"этапе сборки, `run` — зависимостью на этапе выполнения, а `both` — "
+"зависимостью как на этапе сборки, так и на этапе выполнения."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:310
+#, no-wrap
+msgid "`budgie`"
+msgstr "`budgie`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:317
+msgid ""
+"Provide support for the Budgie desktop environment. Use `USE_BUDGIE` to "
+"select the components needed for the port. See crossref:special[using-"
+"budgie,Using Budgie] for more information."
+msgstr ""
+"Предоставить поддержку окружения рабочего стола Budgie. Используйте "
+"`USE_BUDGIE` для выбора необходимых компонентов порта. Дополнительную "
+"информацию см. в разделе crossref:special[using-budgie,Использование Budgie]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:319
+#, no-wrap
+msgid "`cabal`"
+msgstr "`cabal`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:324
+msgid ""
+"Ports should not be created for Haskell libraries, see "
+"crossref:special[haskell-libs,Haskell Libraries] for more information."
+msgstr ""
+"Порты не следует создавать для библиотек Haskell, подробнее см. в "
+"crossref:special[haskell-libs,Библиотеки Haskell]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:327
+msgid "Possible arguments: (none), `hpack`, `nodefault`"
+msgstr "Возможные аргументы: (отсутствуют), `hpack`, `nodefault`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:335
+msgid ""
+"Sets default values and targets used to build Haskell software using Cabal. "
+"A build dependency on the Haskell compiler port (package:lang/ghc[]) is "
+"added. If there is some other version of GHC already listed in the "
+"`BUILD_DEPENDS` variable (for example, package:lang/ghc810[]), it would be "
+"used instead. If the `hpack` argument is given, a build dependency on "
+"package:devel/hs-hpack[] is added and `hpack` is invoked at configuration "
+"step to generate .cabal file. If the `nodefault` argument is given, the "
+"framework will not try to pull the main distribution file from the Hackage. "
+"This argument is implicitly added if `USE_GITHUB` or `USE_GITLAB` is present."
+msgstr ""
+"Устанавливает значения и цели по умолчанию, используемые для сборки "
+"программного обеспечения на Haskell с помощью Cabal. Добавляется зависимость "
+"для сборки на порт компилятора Haskell (package:lang/ghc[]). Если в "
+"переменной `BUILD_DEPENDS` уже указана другая версия GHC (например, "
+"package:lang/ghc810[]), она будет использована вместо версии по умолчанию. "
+"Если указан аргумент `hpack`, добавляется зависимость для сборки на "
+"package:devel/hs-hpack[], и `hpack` вызывается на этапе конфигурации для "
+"генерации файла .cabal. Если указан аргумент `nodefault`, фреймворк не будет "
+"пытаться загрузить основной дистрибутивный файл из Hackage. Этот аргумент "
+"добавляется неявно, если присутствует `USE_GITHUB` или `USE_GITLAB`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:337
+msgid "The framework provides the following variables:"
+msgstr "Фреймворк предоставляет следующие переменные:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:338
+#, no-wrap
+msgid "`CABAL_REVISION`"
+msgstr "`CABAL_REVISION`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:341
+msgid ""
+"Haskell packages hosted on Hackage may have revisions. Set this knob to an "
+"integer number to pull in revised package description."
+msgstr ""
+"Пакеты Haskell, размещённые на Hackage, могут иметь ревизии. Установите этот "
+"параметр в целочисленное значение, чтобы использовать исправленное описание "
+"пакета."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:342
+#, no-wrap
+msgid "`USE_CABAL`"
+msgstr "`USE_CABAL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:347
+msgid ""
+"If the software uses Haskell dependencies, list them in this variable. Each "
+"item should be present on Hackage and be listed in form `packagename-"
+"_0.1.2_`. Dependencies can have revisions too, which are specified after "
+"the `_` symbol. Automatic generation of the dependency list is supported, "
+"see crossref:special[using-cabal,Building Haskell Applications with `cabal`]."
+msgstr ""
+"Если программное обеспечение использует зависимости на Haskell, перечислите "
+"их в этой переменной. Каждый элемент должен присутствовать на Hackage и быть "
+"указан в формате `имяпакета-_0.1.2_`. Зависимости также могут иметь ревизии, "
+"которые указываются после символа `_`. Поддерживается автоматическое "
+"формирование списка зависимостей, см. crossref:special[using-cabal,Сборка "
+"приложений на Haskell с помощью `cabal`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:348
+#, no-wrap
+msgid "`CABAL_FLAGS`"
+msgstr "`CABAL_FLAGS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:353
+msgid ""
+"List of flags to be passed to `cabal-install` during the configuring and "
+"building stage. The flags are passed verbatim. This variable is usually "
+"used to enable or disable flags that are declared in the .cabal file. Pass "
+"`foo` to enable the `foo` flag and `-foo` to disable it."
+msgstr ""
+"Список флагов, передаваемых `cabal-install` на этапах настройки и сборки. "
+"Флаги передаются в исходном виде. Эта переменная обычно используется для "
+"включения или отключения флагов, объявленных в файле .cabal. Передайте "
+"`foo`, чтобы включить флаг `foo`, и `-foo`, чтобы отключить его."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:354
+#, no-wrap
+msgid "`CABAL_EXECUTABLES`"
+msgstr "`CABAL_EXECUTABLES`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:360
+msgid ""
+"List of executable files installed by the port. Default value: `${PORTNAME}"
+"`. Consult the .cabal file of the project being ported to get a list of "
+"possible values for this variable. Each value corresponds to an `executable` "
+"stanza in the .cabal file. Items from this list are automatically added to "
+"pkg-plist."
+msgstr ""
+"Список исполняемых файлов, устанавливаемых портом. Значение по умолчанию: `$"
+"{PORTNAME}`. Для получения списка возможных значений этой переменной "
+"обратитесь к файлу .cabal портируемого проекта. Каждое значение "
+"соответствует разделу `executable` в файле .cabal. Элементы из этого списка "
+"автоматически добавляются в pkg-plist."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:361
+#, no-wrap
+msgid "`SKIP_CABAL_PLIST`"
+msgstr "`SKIP_CABAL_PLIST`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:363
+msgid "If defined, do not add items from `${CABAL_EXECUTABLES}` to pkg-plist."
+msgstr ""
+"Если определено, не добавлять элементы из `${CABAL_EXECUTABLES}` в pkg-plist."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:364
+#, no-wrap
+msgid "`opt_USE_CABAL`"
+msgstr "`opt_USE_CABAL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:366
+msgid "Adds items to `${USE_CABAL}` depending on `opt` option."
+msgstr "Добавляет элементы в `${USE_CABAL}` в зависимости от опции `opt`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:367
+#, no-wrap
+msgid "`opt_CABAL_EXECUTABLES`"
+msgstr "`opt_CABAL_EXECUTABLES`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:369
+msgid "Adds items to `${CABAL_EXECUTABLES}` depending on `opt` option."
+msgstr ""
+"Добавляет элементы в `${CABAL_EXECUTABLES}` в зависимости от опции `opt`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:370
+#, no-wrap
+msgid "`opt_CABAL_FLAGS`"
+msgstr "`opt_CABAL_FLAGS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:374
+msgid ""
+"If `opt` is enabled, append the value to `${CABAL_FLAGS}`. Otherwise, "
+"append `-value` to disable the flag. Note that this behavior is slightly "
+"different from the plain `CABAL_FLAGS` as it does not accept values starting "
+"with `-`."
+msgstr ""
+"Если `opt` включён, добавить значение к `${CABAL_FLAGS}`. В противном случае "
+"добавить `-value`, чтобы отключить флаг. Обратите внимание, что это "
+"поведение немного отличается от простого `CABAL_FLAGS`, так как оно не "
+"принимает значения, начинающиеся с `-`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:375
+#, no-wrap
+msgid "`CABAL_WRAPPER_SCRIPTS`"
+msgstr "`CABAL_WRAPPER_SCRIPTS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:380
+msgid ""
+"A subset of `${CABAL_EXECUTABLES}` containing Haskell programs to be wrapped "
+"into a shell script that sets `*_datadir` environment variables before "
+"running the program. This also causes the actual Haskell binary to be "
+"installed under `libexec/cabal/` directory. This knob is needed for Haskell "
+"programs that install their data files under `share/` directory."
+msgstr ""
+"Подмножество `${CABAL_EXECUTABLES}`, содержащее программы на Haskell, "
+"которые будут обёрнуты в shell-скрипт, устанавливающий переменные окружения "
+"`*_datadir` перед запуском программы. Это также приводит к тому, что "
+"фактический бинарный файл Haskell устанавливается в директорию `libexec/"
+"cabal/`. Данная настройка необходима для программ на Haskell, которые "
+"устанавливают свои файлы данных в директорию `share/`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:381
+#, no-wrap
+msgid "`FOO_DATADIR_VARS`"
+msgstr "`FOO_DATADIR_VARS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:385
+msgid ""
+"List of extra Haskell packages, whose data files should be accessible by the "
+"executable named `FOO`. The executable should be a part of `$"
+"{CABAL_WRAPPER_SCRIPTS}`. Haskell packages listed there should not have a "
+"version suffix."
+msgstr ""
+"Список дополнительных пакетов Haskell, чьи файлы данных должны быть доступны "
+"исполняемому файлу с именем `FOO`. Исполняемый файл должен быть частью `$"
+"{CABAL_WRAPPER_SCRIPTS}`. Указанные пакеты Haskell не должны иметь суффикса "
+"версии."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:386
+#, no-wrap
+msgid "`CABAL_PROJECT`"
+msgstr "`CABAL_PROJECT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:391
+msgid ""
+"Some Haskell projects may already have a `cabal.project` file, which is also "
+"generated by the ports framework. If that is the case, use this variable to "
+"specify what to do with the original `cabal.project`. Setting this variable "
+"to `remove` will cause the original file to be removed. Setting this "
+"variable to `append` will:"
+msgstr ""
+"Некоторые проекты на Haskell могут уже иметь файл `cabal.project`, который "
+"также создаётся фреймворком портов. Если это так, используйте эту "
+"переменную, чтобы указать, что делать с оригинальным файлом `cabal.project`. "
+"Установка этой переменной в значение `remove` приведёт к удалению "
+"оригинального файла. Установка этой переменной в значение `append` приведёт "
+"к следующему:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:392
+msgid ""
+"Move the original file to `cabal.project.${PORTNAME}` during the `extract` "
+"stage."
+msgstr ""
+"Исходный файл переместится в `cabal.project.${PORTNAME}` на этапе `extract`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:394
+msgid ""
+"Concatenate the original `cabal.project.${PORTNAME}` and the generated "
+"`cabal.project` into a single file after the `patch` stage. Using `append` "
+"makes it possible to perform patching on the original file before it gets "
+"merged."
+msgstr ""
+"Исходный файл `cabal.project.${PORTNAME}` и сгенерированный `cabal.project` "
+"объединятся в один файл после этапа `patch`. Использование `append` "
+"позволяет выполнить патчинг исходного файла перед его объединением."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:396
+#, no-wrap
+msgid "`cargo`"
+msgstr "`cargo`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:403
+msgid ""
+"Uses Cargo for configuring, building, and testing. It can be used to port "
+"Rust applications that use the Cargo build system. For more information see "
+"crossref:special[using-cargo,Building Rust Applications with `cargo`]."
+msgstr ""
+"Использует Cargo для настройки, сборки и тестирования. Может применяться для "
+"портирования приложений на Rust, использующих систему сборки Cargo. "
+"Дополнительную информацию смотрите в crossref:special[using-cargo,Сборка "
+"приложений на Rust с помощью `cargo`]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:405
+#, no-wrap
+msgid "`charsetfix`"
+msgstr "`charsetfix`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:412
+msgid ""
+"Prevents the port from installing [.filename]#charset.alias#. This must be "
+"installed only by package:converters/libiconv[]. `CHARSETFIX_MAKEFILEIN` "
+"can be set to a path relative to `WRKSRC` if [.filename]#charset.alias# is "
+"not installed by [.filename]#${WRKSRC}/Makefile.in#."
+msgstr ""
+"Предотвращает установку файла [.filename]#charset.alias# портом. Этот файл "
+"должен устанавливаться только пакетом package:converters/libiconv[]. "
+"Переменная `CHARSETFIX_MAKEFILEIN` может быть установлена в путь "
+"относительно `WRKSRC`, если [.filename]#charset.alias# не устанавливается "
+"через [.filename]#${WRKSRC}/Makefile.in#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:414
+#, no-wrap
+msgid "`cl`"
+msgstr "`cl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:419
+msgid "Provides support for Common Lisp ports."
+msgstr "Предоставляет поддержку портов Common Lisp."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:421
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:627
+msgid ""
+"The framework provides the following variables that can be set by ports:"
+msgstr ""
+"Фреймворк предоставляет следующие переменные, которые могут быть установлены "
+"портами:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:422
+#, no-wrap
+msgid "`ASDF_MODULES`"
+msgstr "`ASDF_MODULES`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:424
+msgid ""
+"List of `ASDF` modules to build when `FASL_TARGET` is set (defaults to "
+"`PORTNAME`)"
+msgstr ""
+"Список модулей `ASDF` для сборки, когда установлен `FASL_TARGET` (по "
+"умолчанию `PORTNAME`)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:425
+#, no-wrap
+msgid "`FASL_TARGET`"
+msgstr "`FASL_TARGET`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:427
+msgid "Build fasl variant of port (one of `ccl`, `clisp`, or `sbcl`)"
+msgstr "Собрать fasl вариант порта (один из `ccl`, `clisp` или `sbcl`)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:428
+#, no-wrap
+msgid "`USE_ASDF`"
+msgstr "`USE_ASDF`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:430
+msgid "Depend on package:devel/cl-asdf[]"
+msgstr "Зависит от пакета package:devel/cl-asdf[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:431
+#, no-wrap
+msgid "`USE_ASDF_FASL`"
+msgstr "`USE_ASDF_FASL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:433
+msgid "Depend on `devel/cl-asdf-<FASL_TARGET>`"
+msgstr "Зависит от `devel/cl-asdf-<FASL_TARGET>`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:434
+#, no-wrap
+msgid "`USE_CCL`"
+msgstr "`USE_CCL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:436
+msgid "Depend on package:lang/ccl[]; implied when `FASL_TARGET=ccl`"
+msgstr ""
+"Зависит от пакета package:lang/ccl[]; подразумевается при `FASL_TARGET=ccl`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:437
+#, no-wrap
+msgid "`USE_CLISP`"
+msgstr "`USE_CLISP`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:439
+msgid "Depend on package:lang/clisp[]; implied when `FASL_TARGET=clisp`"
+msgstr ""
+"Зависит от пакета package:lang/clisp[]; подразумевается при "
+"`FASL_TARGET=clisp`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:440
+#, no-wrap
+msgid "`USE_SBCL`"
+msgstr "`USE_SBCL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:442
+msgid "Depend on package:lang/sbcl[]; implied when `FASL_TARGET=SBCL`"
+msgstr ""
+"Зависит от пакета package:lang/sbcl[]; подразумевается, если "
+"`FASL_TARGET=SBCL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:445
+msgid ""
+"The framework provides the following variables that can be read by ports:"
+msgstr ""
+"Фреймворк предоставляет следующие переменные, которые могут быть прочитаны "
+"портами:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:446
+#, no-wrap
+msgid "`ASDF_PATHNAME`"
+msgstr "`ASDF_PATHNAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:448
+msgid "Path to CL source"
+msgstr "Путь к исходному коду CL"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:449
+#, no-wrap
+msgid "`ASDF_REGISTRY`"
+msgstr "`ASDF_REGISTRY`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:451
+msgid "Path to CL registry containing asd files"
+msgstr "Путь к реестру CL, содержащему файлы asd"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:452
+#, no-wrap
+msgid "`CCL`"
+msgstr "`CCL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:454
+msgid "Path to the Clozure Common Lisp compiler"
+msgstr "Путь к компилятору Clozure Common Lisp"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:455
+#, no-wrap
+msgid "`CLISP`"
+msgstr "`CLISP`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:457
+msgid "Path to the GNU Common Lisp compiler"
+msgstr "Путь к компилятору GNU Common Lisp"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:458
+#, no-wrap
+msgid "`CL_LIBDIR_REL`"
+msgstr "`CL_LIBDIR_REL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:460
+msgid "CL library directory relative to `LOCALBASE` or `PREFIX`"
+msgstr "Каталог библиотек CL относительно `LOCALBASE` или `PREFIX`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:461
+#, no-wrap
+msgid "`FASL_DIR_REL`"
+msgstr "`FASL_DIR_REL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:463
+msgid "Relative path to compiled fasl files; depends on `FASL_TARGET`"
+msgstr ""
+"Относительный путь к скомпилированным fasl-файлам; зависит от `FASL_TARGET`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:464
+#, no-wrap
+msgid "`FASL_PATHNAME`"
+msgstr "`FASL_PATHNAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:466
+msgid "Path to CL fasl"
+msgstr "Путь к CL fasl"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:467
+#, no-wrap
+msgid "`LISP_EXTRA_ARG`"
+msgstr "`LISP_EXTRA_ARG`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:469
+msgid "Extra arguments used when building fasl"
+msgstr "Дополнительные аргументы, используемые при сборке fasl"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:470
+#, no-wrap
+msgid "`SBCL`"
+msgstr "`SBCL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:472
+msgid "Path to the Steel Bank Common Lisp compiler"
+msgstr "Путь к компилятору Steel Bank Common Lisp"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:474
+#, no-wrap
+msgid "`cmake`"
+msgstr "`cmake`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:477
+msgid "Possible arguments: (none), `insource`, `noninja`, `run`, `testing`"
+msgstr ""
+"Возможные аргументы: (отсутствуют), `insource`, `noninja`, `run`, `testing`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:479
+msgid "Use CMake for configuring the port and generating a build system."
+msgstr "Используйте CMake для настройки порта и генерации системы сборки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:483
+msgid ""
+"By default an out-of-source build is performed, leaving the sources in "
+"`WRKSRC` free from build artifacts. With the `insource` argument, an in-"
+"source build will be performed instead. This argument should be an "
+"exception, used only when a regular out-of-source build does not work."
+msgstr ""
+"По умолчанию выполняется сборка в дереве вне исходного кода, оставляя "
+"исходные файлы в `WRKSRC` свободными от артефактов сборки. С аргументом "
+"`insource` вместо этого будет выполнена сборка в исходном коде. Этот "
+"аргумент должен быть исключением и использоваться только в случае, когда "
+"обычная сборка вне исходного кода не работает."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:488
+msgid ""
+"By default Ninja (package:devel/ninja[]) is used for the build. In some "
+"cases this does not work correctly. With the `noninja` argument, the build "
+"will use regular `make` for builds. This argument should only be used if a "
+"Ninja-based build does not work."
+msgstr ""
+"По умолчанию для сборки используется Ninja (package:devel/ninja[]). В "
+"некоторых случаях это может работать некорректно. С аргументом `noninja` "
+"сборка будет использовать обычный `make`. Этот аргумент следует применять "
+"только если сборка на основе Ninja не работает."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:490
+msgid ""
+"With the `run` argument, a run dependency is registered in addition to a "
+"build dependency."
+msgstr ""
+"С аргументом `run` регистрируется зависимость во время выполнения в "
+"дополнение к зависимости при сборке."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:493
+msgid ""
+"With the `testing` argument, a test-target is added that uses CTest. When "
+"running tests the port will be re-configured for testing and re-built."
+msgstr ""
+"С аргументом `testing`, добавляется цель тестирования, использующая CTest. "
+"При запуске тестов порт будет переконфигурирован для тестирования и "
+"пересобран."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:495
+msgid "For more information see crossref:special[using-cmake,Using `cmake`]."
+msgstr ""
+"Для получения дополнительной информации см. crossref:special[using-"
+"cmake,Использование `cmake`]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:497
+#, no-wrap
+msgid "`compiler`"
+msgstr "`compiler`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:500
+msgid ""
+"Possible arguments: (none), `env` (default, implicit), `{cpp}17-lang`, `{cpp}"
+"14-lang`, `{cpp}11-lang`, `gcc-{cpp}11-lib`, `{cpp}11-lib`, `{cpp}0x`, "
+"`c11`, `nestedfct`, `features`"
+msgstr ""
+"Возможные аргументы: (нет), `env` (по умолчанию, подразумевается), `{cpp}17-"
+"lang`, `{cpp}14-lang`, `{cpp}11-lang`, `gcc-{cpp}11-lib`, `{cpp}11-lib`, "
+"`{cpp}0x`, `c11`, `nestedfct`, `features`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:504
+msgid ""
+"Determines which compiler to use based on any given wishes. Use `{cpp}17-"
+"lang` if the port needs a {cpp}17-capable compiler, `{cpp}14-lang` if the "
+"port needs a {cpp}14-capable compiler, `{cpp}11-lang` if the port needs a "
+"{cpp}11-capable compiler, `gcc-{cpp}11-lib` if the port needs the `g++` "
+"compiler with a {cpp}11 library, or `{cpp}11-lib` if the port needs a {cpp}"
+"11-ready standard library. If the port needs a compiler understanding {cpp}"
+"0X, C11 or nested functions, the corresponding parameters should be used."
+msgstr ""
+"Определяет, какой компилятор использовать, исходя из заданных предпочтений. "
+"Используйте `{cpp}17-lang`, если порту требуется компилятор с поддержкой "
+"{cpp}17, `{cpp}14-lang`, если порту требуется компилятор с поддержкой {cpp}"
+"14, `{cpp}11-lang`, если порту требуется компилятор с поддержкой {cpp}11, "
+"`gcc-{cpp}11-lib`, если порту требуется компилятор `g++` с библиотекой {cpp}"
+"11, или `{cpp}11-lib`, если порту требуется стандартная библиотека с "
+"поддержкой {cpp}11. Если порту требуется компилятор, понимающий {cpp}0X, C11 "
+"или вложенные функции, следует использовать соответствующие параметры."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:507
+msgid ""
+"Use `features` to request a list of features supported by the default "
+"compiler. After including [.filename]#bsd.port.pre.mk# the port can inspect "
+"the results using these variables:"
+msgstr ""
+"Используйте `features` для запроса списка возможностей, поддерживаемых "
+"компилятором по умолчанию. После включения [.filename]#bsd.port.pre.mk# порт "
+"может проверить результаты с помощью следующих переменных:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:509
+msgid ""
+"`COMPILER_TYPE`: the default compiler on the system, either gcc or clang"
+msgstr "`COMPILER_TYPE`: компилятор по умолчанию в системе, gcc или clang"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:510
+msgid ""
+"`ALT_COMPILER_TYPE`: the alternative compiler on the system, either gcc or "
+"clang. Only set if two compilers are present in the base system."
+msgstr ""
+"`ALT_COMPILER_TYPE`: альтернативный компилятор в системе, gcc или clang. "
+"Устанавливается только при наличии двух компиляторов в базовой системе."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:511
+msgid ""
+"`COMPILER_VERSION`: the first two digits of the version of the default "
+"compiler."
+msgstr "`COMPILER_VERSION`: первые две цифры версии компилятора по умолчанию."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:512
+msgid ""
+"`ALT_COMPILER_VERSION`: the first two digits of the version of the "
+"alternative compiler, if present."
+msgstr ""
+"`ALT_COMPILER_VERSION`: первые две цифры версии альтернативного компилятора, "
+"если он присутствует."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:513
+msgid "`CHOSEN_COMPILER_TYPE`: the chosen compiler, either gcc or clang"
+msgstr "`CHOSEN_COMPILER_TYPE`: выбранный компилятор, gcc или clang"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:514
+msgid ""
+"`COMPILER_FEATURES`: the features supported by the default compiler. It "
+"currently lists the {cpp} library."
+msgstr ""
+"`COMPILER_FEATURES`: возможности, поддерживаемые компилятором по умолчанию. "
+"В настоящее время указана библиотека {cpp}."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:516
+#, no-wrap
+msgid "`cpe`"
+msgstr "`cpe`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:523
+msgid ""
+"Include Common Platform Enumeration (CPE) information in package manifest as "
+"a CPE 2.3 formatted string. See the https://scap.nist.gov/specifications/"
+"cpe/[CPE specification] for details. To add CPE information to a port, "
+"follow these steps:"
+msgstr ""
+"Включает информацию о Common Platform Enumeration (CPE) в манифест пакета в "
+"виде строки формата CPE 2.3. Подробности см. в https://scap.nist.gov/"
+"specifications/cpe/[спецификации CPE]. Чтобы добавить информацию CPE в порт, "
+"выполните следующие шаги:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:526
+msgid ""
+"Search for the official CPE entry for the software product either by using "
+"the NVD's https://web.nvd.nist.gov/view/cpe/search[CPE search engine] or in "
+"the https://nvd.nist.gov/feeds/xml/cpe/dictionary/official-cpe-"
+"dictionary_v2.3.xml.gz[official CPE dictionary] (warning, very large XML "
+"file). _Do not ever make up CPE data._"
+msgstr ""
+"Поищите официальную запись CPE для программного продукта, используя либо "
+"https://web.nvd.nist.gov/view/cpe/search[поисковую систему CPE] от NVD, либо "
+"https://nvd.nist.gov/feeds/xml/cpe/dictionary/official-cpe-"
+"dictionary_v2.3.xml.gz[официальный словарь CPE] (предупреждение: очень "
+"большой XML-файл). _Никогда не создавайте данные CPE самостоятельно._"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:527
+msgid ""
+"Add `cpe` to `USES` and compare the result of `make -V CPE_STR` to the CPE "
+"dictionary entry. Continue one step at a time until `make -V CPE_STR` is "
+"correct."
+msgstr ""
+"Добавьте `cpe` в `USES` и сравните результат выполнения `make -V CPE_STR` с "
+"записью в словаре CPE. Продолжайте шаг за шагом, пока результат `make -V "
+"CPE_STR` не станет корректным."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:528
+msgid ""
+"If the product name (second field, defaults to `PORTNAME`) is incorrect, "
+"define `CPE_PRODUCT`."
+msgstr ""
+"Если название продукта (второе поле, по умолчанию `PORTNAME`) указано "
+"неверно, определите `CPE_PRODUCT`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:529
+msgid ""
+"If the vendor name (first field, defaults to `CPE_PRODUCT`) is incorrect, "
+"define `CPE_VENDOR`."
+msgstr ""
+"Если название производителя (первое поле, по умолчанию `CPE_PRODUCT`) "
+"указано неверно, определите `CPE_VENDOR`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:530
+msgid ""
+"If the version field (third field, defaults to `PORTVERSION`) is incorrect, "
+"define `CPE_VERSION`."
+msgstr ""
+"Если поле версии (третье поле, по умолчанию `PORTVERSION`) указано неверно, "
+"определите `CPE_VERSION`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:531
+msgid ""
+"If the update field (fourth field, defaults to empty) is incorrect, define "
+"`CPE_UPDATE`."
+msgstr ""
+"Если поле обновления (четвертое поле, по умолчанию пустое) указано неверно, "
+"определите `CPE_UPDATE`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:532
+msgid ""
+"If it is still not correct, check [.filename]#Mk/Uses/cpe.mk# for additional "
+"details, or contact the {ports-secteam}."
+msgstr ""
+"Если это всё ещё неверно, проверьте файл [.filename]#Mk/Uses/cpe.mk# для "
+"получения дополнительной информации или свяжитесь с {ports-secteam}."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:533
+msgid ""
+"Derive as much as possible of the CPE name from existing variables such as "
+"`PORTNAME` and `PORTVERSION`. Use variable modifiers to extract the relevant "
+"portions from these variables rather than hardcoding the name."
+msgstr ""
+"Извлекайте как можно больше информации для имени CPE из существующих "
+"переменных, таких как `PORTNAME` и `PORTVERSION`. Используйте модификаторы "
+"переменных для извлечения соответствующих частей из этих переменных, вместо "
+"того чтобы жестко прописывать имя."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:534
+msgid ""
+"_Always_ run `make -V CPE_STR` and check the output before committing "
+"anything that changes `PORTNAME` or `PORTVERSION` or any other variable "
+"which is used to derive `CPE_STR`."
+msgstr ""
+"_Всегда_ выполняйте `make -V CPE_STR` и проверяйте вывод перед коммитом "
+"любых изменений, затрагивающих `PORTNAME`, `PORTVERSION` или любые другие "
+"переменные, используемые для формирования `CPE_STR`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:536
+#, no-wrap
+msgid "`cran`"
+msgstr "`cran`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:539
+msgid "Possible arguments: (none), `auto-plist`, `compiles`"
+msgstr "Возможные аргументы: (нет), `auto-plist`, `compiles`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:543
+msgid ""
+"Uses the Comprehensive R Archive Network. Specify `auto-plist` to "
+"automatically generate [.filename]#pkg-plist#. Specify `compiles` if the "
+"port has code that need to be compiled."
+msgstr ""
+"Использует Comprehensive R Archive Network. Укажите `auto-plist` для "
+"автоматического создания [.filename]#pkg-plist#. Укажите `compiles`, если "
+"порт содержит код, который необходимо компилировать."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:545
+#, no-wrap
+msgid "`desktop-file-utils`"
+msgstr "`desktop-file-utils`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:554
+msgid ""
+"Uses update-desktop-database from package:devel/desktop-file-utils[]. An "
+"extra post-install step will be run without interfering with any post-"
+"install steps already in the port [.filename]#Makefile#. A line with "
+"crossref:plist[plist-keywords-desktop-file-utils,`@desktop-file-utils`] will "
+"be added to the plist. Only use this macro if the port provides a "
+"`.desktop` file which contains a `MimeType` entry."
+msgstr ""
+"Использует update-desktop-database из пакета package:devel/desktop-file-"
+"utils[]. Дополнительный шаг post-install будет выполнен без вмешательства в "
+"уже существующие шаги post-install в [.filename]#Makefile# порта. Строка с "
+"crossref:plist[plist-keywords-desktop-file-utils,`@desktop-file-utils`] "
+"будет добавлена в plist. Используйте этот макрос только если порт "
+"предоставляет файл `.desktop`, содержащий запись `MimeType`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:556
+#, no-wrap
+msgid "`desthack`"
+msgstr "`desthack`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:561
+msgid ""
+"Changes the behavior of GNU configure to properly support `DESTDIR` in case "
+"the original software does not."
+msgstr ""
+"Изменяет поведение GNU configure для корректной поддержки `DESTDIR` в "
+"случае, если исходное программное обеспечение этого не делает."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:563
+#, no-wrap
+msgid "`display`"
+msgstr "`display`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:566
+msgid "Possible arguments: (none), _ARGS_"
+msgstr "Возможные аргументы: (отсутствуют), _ARGS_"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:570
+msgid ""
+"Set up a virtual display environment. If the environment variable `DISPLAY` "
+"is not set, then Xvfb is added as a build dependency, and `CONFIGURE_ENV` is "
+"extended with the port number of the currently running instance of Xvfb. "
+"The _ARGS_ parameter defaults to `install` and controls the phase around "
+"which to start and stop the virtual display."
+msgstr ""
+"Настраивает виртуальное окружение для отображения. Если переменная окружения "
+"`DISPLAY` не установлена, то Xvfb добавляется как зависимость при сборке, а "
+"`CONFIGURE_ENV` расширяется с указанием номера порта текущего запущенного "
+"экземпляра Xvfb. Параметр _ARGS_ по умолчанию имеет значение `install` и "
+"управляет фазой, вокруг которой запускается и останавливается виртуальный "
+"дисплей."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:572
+#, no-wrap
+msgid "`dos2unix`"
+msgstr "`dos2unix`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:580
+msgid ""
+"The port has files with line endings in DOS format which need to be "
+"converted. Several variables can be set to control which files will be "
+"converted. The default is to convert _all_ files, including binaries. See "
+"crossref:slow-porting[slow-patch-automatic-replacements,Simple Automatic "
+"Replacements] for examples."
+msgstr ""
+"Порт содержит файлы с символами конца строки в формате DOS, которые "
+"необходимо преобразовать. Несколько переменных могут быть установлены для "
+"контроля, какие файлы будут преобразованы. По умолчанию преобразуются _все_ "
+"файлы, включая бинарные. См. crossref:slow-porting[slow-patch-automatic-"
+"replacements,Простые автоматические замены] для примеров."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:582
+msgid "`DOS2UNIX_REGEX`: match file names based on a regular expression."
+msgstr ""
+"`DOS2UNIX_REGEX`: сопоставлять имена файлов на основе регулярного выражения."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:583
+msgid "`DOS2UNIX_FILES`: match literal file names."
+msgstr "`DOS2UNIX_FILES`: соответствуют точным именам файлов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:584
+msgid "`DOS2UNIX_GLOB`: match file names based on a glob pattern."
+msgstr ""
+"`DOS2UNIX_GLOB`: сопоставлять имена файлов на основе шаблона файлов оболочки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:585
+msgid ""
+"`DOS2UNIX_WRKSRC`: the directory from which to start the conversions. "
+"Defaults to `${WRKSRC}`."
+msgstr ""
+"`DOS2UNIX_WRKSRC`: каталог, с которого начинать преобразования. По умолчанию "
+"`${WRKSRC}`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:587
+#, no-wrap
+msgid "`drupal`"
+msgstr "`drupal`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:590
+msgid "Possible arguments: `7`, `module`, `theme`"
+msgstr "Возможные аргументы: `7`, `module`, `theme`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:595
+msgid ""
+"Automate installation of a port that is a Drupal theme or module. Use with "
+"the version of Drupal that the port is expecting. For example, "
+"`USES=drupal:7,module` says that this port creates a Drupal 7 module. A "
+"Drupal 7 theme can be specified with `USES=drupal:7,theme`."
+msgstr ""
+"Автоматизирует установку порта, который является темой или модулем Drupal. "
+"Использовать с версией Drupal, которую ожидает порт. Например, "
+"`USES=drupal:7,module` означает, что этот порт создает модуль Drupal 7. Тему "
+"Drupal 7 можно указать с помощью `USES=drupal:7,theme`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:597
+#, no-wrap
+msgid "`ebur128`"
+msgstr "`ebur128`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:600
+msgid "Possible arguments: (none), `build`, `lib`, `run`, `test`"
+msgstr "Возможные аргументы: (нет), `build`, `lib`, `run`, `test`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:605
+msgid ""
+"Adds a dependency on package:audio/ebur128[]. It allows to transparently "
+"depend on the `rust` or `legacy` variants by using `DEFAULT_VERSIONS` in "
+"[.filename]#make.conf#. For instance, to use the legacy version, use "
+"`DEFAULT_VERSIONS+=ebur128=legacy`"
+msgstr ""
+"Добавляет зависимость от пакета package:audio/ebur128[]. Позволяет прозрачно "
+"зависеть от вариантов `rust` или `legacy`, используя `DEFAULT_VERSIONS` в "
+"[.filename]#make.conf#. Например, для использования устаревшей версии "
+"укажите `DEFAULT_VERSIONS+=ebur128=legacy`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:609
+msgid ""
+"When no arguments are used, the behavior is the same as if the `lib` "
+"argument was provided. The rest of the arguments provide the corresponding "
+"category of dependency."
+msgstr ""
+"Без аргументов поведение аналогично случаю с предоставлением аргумента "
+"`lib`. Остальные аргументы указывают соответствующую категорию зависимости."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:611
+#, no-wrap
+msgid "`eigen`"
+msgstr "`eigen`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:614
+msgid "Possible arguments: 2, 3, build (default), run"
+msgstr "Возможные аргументы: 2, 3, build (по умолчанию), run"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:616
+msgid "Add dependency on package:math/eigen[]."
+msgstr "Добавить зависимость от пакета package:math/eigen[]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:618
+#, no-wrap
+msgid "`electronfix`"
+msgstr "`electronfix`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:621
+msgid "Possible arguments: `31`, `32`, `33`"
+msgstr "Возможные аргументы: `31`, `32`, `33`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:625
+msgid ""
+"Provide support for easy porting of Electron applications that are "
+"distributed in binary form. Adds a build and run time dependency on "
+"package:devel/electron31[], package:devel/electron32[], or package:devel/"
+"electron33[] depending on the argument used."
+msgstr ""
+"Предоставить поддержку для простого портирования Electron-приложений, "
+"распространяемых в бинарной форме. Добавляет зависимость на этапах сборки и "
+"выполнения от package:devel/electron31[], package:devel/electron32[] или "
+"package:devel/electron33[] в зависимости от используемого аргумента."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:628
+#, no-wrap
+msgid "`ELECTRONFIX_SYMLINK_FILES`"
+msgstr "`ELECTRONFIX_SYMLINK_FILES`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:630
+msgid "List of files to be symlinked from Electron distribution."
+msgstr "Список файлов для создания символьных ссылок из дистрибутива Electron."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:631
+#, no-wrap
+msgid "`ELECTRONFIX_MAIN_EXECUTABLE`"
+msgstr "`ELECTRONFIX_MAIN_EXECUTABLE`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:633
+msgid ""
+"File name of the main executable to be replaced with the original Electron "
+"binary."
+msgstr ""
+"Имя файла основного исполняемого файла, который будет заменен оригинальным "
+"бинарным файлом Electron."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:636
+#, no-wrap
+msgid "`elfctl`"
+msgstr "`elfctl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:639
+msgid "Possible arguments: (none), `build` (default), `stage`"
+msgstr "Возможные аргументы: (отсутствуют), `build` (по умолчанию), `stage`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:641
+msgid "Set ELF binary feature control notes by setting `ELF_FEATURES`."
+msgstr ""
+"Установите управляющие заметки функций ELF-бинарных файлов, задав "
+"`ELF_FEATURES`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:644
+msgid ""
+"When either no argument or the `build` argument is supplied, binaries under "
+"`BUILD_WRKSRC` are operated on, and files listed in `ELF_FEATURES` are "
+"relative to `BUILD_WRKSRC`. When the `stage` argument is supplied, binaries "
+"under `STAGEDIR` are operated on and files listed in `ELF_FEATURES` are "
+"relative to `STAGEDIR`."
+msgstr ""
+"Когда не указан аргумент или указан аргумент `build`, операции выполняются "
+"над бинарными файлами в `BUILD_WRKSRC`, а файлы, перечисленные в "
+"`ELF_FEATURES`, указываются относительно `BUILD_WRKSRC`. Когда указан "
+"аргумент `stage`, операции выполняются над бинарными файлами в `STAGEDIR`, а "
+"файлы, перечисленные в `ELF_FEATURES`, указываются относительно `STAGEDIR`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:646
+#, no-wrap
+msgid "Uses=elfctl"
+msgstr "Uses=elfctl"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:653
+#, no-wrap
+msgid ""
+"ELF_FEATURES=\tfeaturelist:path/to/file1 \\\n"
+"\t\tfeaturelist:path/to/file2\n"
+msgstr ""
+"ELF_FEATURES=\tfeaturelist:path/to/file1 \\\n"
+"\t\tfeaturelist:path/to/file2\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:658
+msgid "The format of `featurelist` is described in man:elfctl[1]."
+msgstr "Формат `featurelist` описан в man:elfctl[1]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:660
+#, no-wrap
+msgid "`elixir`"
+msgstr "`elixir`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:666
+msgid ""
+"Provide support for ports using package:lang/elixir[]. Adds a build and run "
+"time dependency on package:lang/elixir[]."
+msgstr ""
+"Предоставить поддержку для портов, использующих package:lang/elixir[]. "
+"Добавляет зависимость во время сборки и выполнения на package:lang/elixir[]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:668
+msgid "Variables provided by the framework:"
+msgstr "Предоставляемые фреймворком переменные:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:669
+#, no-wrap
+msgid "`ELIXIR_APP_NAME`"
+msgstr "`ELIXIR_APP_NAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:671
+msgid "Elixir app name as installed in Elixir's lib directory"
+msgstr "Название приложения Elixir, как оно установлено в каталоге lib Elixir"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:671
+#, no-wrap
+msgid "`ELIXIR_LIB_ROOT`"
+msgstr "`ELIXIR_LIB_ROOT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:673
+msgid "Elixir default library path"
+msgstr "Путь к библиотекам Elixir по умолчанию"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:673
+#, no-wrap
+msgid "`ELIXIR_APP_ROOT`"
+msgstr "`ELIXIR_APP_ROOT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:675
+msgid "Root directory for this Elixir app"
+msgstr "Корневая директория для этого приложения Elixir"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:675
+#, no-wrap
+msgid "`ELIXIR_HIDDEN`"
+msgstr "`ELIXIR_HIDDEN`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:677
+msgid "Applications to be hidden from the code path; usually ${PORTNAME}"
+msgstr ""
+"Приложения, которые необходимо скрыть из пути выполнения кода; обычно `$"
+"{PORTNAME}`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:677
+#, no-wrap
+msgid "`ELIXIR_LOCALE`"
+msgstr "`ELIXIR_LOCALE`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:679
+msgid ""
+"An UTF-8 locale to be used by Elixir during builds (any UTF-8 locale is good)"
+msgstr ""
+"Локаль UTF-8, которая будет использоваться Elixir во время сборки (подойдет "
+"любая локаль UTF-8)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:679
+#, no-wrap
+msgid "`MIX_CMD`"
+msgstr "`MIX_CMD`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:681
+msgid "The `mix` command"
+msgstr "Команда `mix`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:681
+#, no-wrap
+msgid "`MIX_COMPILE`"
+msgstr "`MIX_COMPILE`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:683
+msgid "The `mix` command used to compile an Elixir app"
+msgstr "Команда `mix`, используемая для компиляции приложения на Elixir"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:683
+#, no-wrap
+msgid "`MIX_REWRITE`"
+msgstr "`MIX_REWRITE`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:685
+msgid "Automatically replace Mix dependencies with code paths"
+msgstr "Автоматически заменять зависимости Mix на пути к коду"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:685
+#, no-wrap
+msgid "`MIX_BUILD_DEPS`"
+msgstr "`MIX_BUILD_DEPS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:687
+msgid ""
+"List of `BUILD_DEPENDS` in category/portname format (commonly referenced to "
+"as \"deps\" in Erlang and Elixir)"
+msgstr ""
+"Список `BUILD_DEPENDS` в формате категория/имя_порта (часто упоминаемый как "
+"\"deps\" в Erlang и Elixir)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:687
+#, no-wrap
+msgid "`MIX_RUN_DEPS`"
+msgstr "`MIX_RUN_DEPS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:689
+msgid "List of `RUN_DEPENDS` in category/portname format"
+msgstr "Список `RUN_DEPENDS` в формате категория/имя порта"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:689
+#, no-wrap
+msgid "`MIX_DOC_DIRS`"
+msgstr "`MIX_DOC_DIRS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:691
+msgid "Extra doc directories to be installed in `DOCSDIR`"
+msgstr "Дополнительные каталоги документации для установки в `DOCSDIR`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:691
+#, no-wrap
+msgid "`MIX_DOC_FILES`"
+msgstr "`MIX_DOC_FILES`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:693
+msgid "Extra doc files to be installed in `DOCSDIR` (usually README.md)"
+msgstr ""
+"Дополнительные файлы документации для установки в `DOCSDIR` (обычно "
+"README.md)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:693
+#, no-wrap
+msgid "`MIX_ENV`"
+msgstr "`MIX_ENV`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:695
+msgid "Environment for the Mix build (same format as `MAKE_ENV`)"
+msgstr "Окружение для сборки Mix (в том же формате, что и `MAKE_ENV`)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:695
+#, no-wrap
+msgid "`MIX_ENV_NAME`"
+msgstr "`MIX_ENV_NAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:697
+msgid "Name of the Mix build environment, usually \"prod\""
+msgstr "Имя среды сборки Mix, обычно \"prod\""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:697
+#, no-wrap
+msgid "`MIX_BUILD_NAME`"
+msgstr "`MIX_BUILD_NAME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:699
+msgid "Name of the build output in _build/, usually `${MIX_ENV_NAME}`"
+msgstr "Имя выходного файла сборки в _build/, обычно `${MIX_ENV_NAME}`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:699
+#, no-wrap
+msgid "`MIX_TARGET`"
+msgstr "`MIX_TARGET`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:701
+msgid "Name of the Mix target, usually \"compile\""
+msgstr "Имя цели Mix, обычно \"compile\""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:701
+#, no-wrap
+msgid "`MIX_EXTRA_APPS`"
+msgstr "`MIX_EXTRA_APPS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:703
+msgid "List of sub-applications to be built, if any"
+msgstr "Список подприложений для сборки, если имеются"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:703
+#, no-wrap
+msgid "`MIX_EXTRA_DIRS`"
+msgstr "`MIX_EXTRA_DIRS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:705
+msgid "List of extra directories to be installed in `ELIXIR_APP_ROOT`"
+msgstr "Список дополнительных каталогов для установки в `ELIXIR_APP_ROOT`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:705
+#, no-wrap
+msgid "`MIX_EXTRA_FILES`"
+msgstr "`MIX_EXTRA_FILES`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:707
+msgid "List of extra files to be installed in `ELIXIR_APP_ROOT`"
+msgstr "Список дополнительных файлов для установки в `ELIXIR_APP_ROOT`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:709
+#, no-wrap
+msgid "`emacs`"
+msgstr "`emacs`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:712
+msgid "Possible arguments: (none) (default), `build`, `run`, `noflavors`"
+msgstr "Возможные аргументы: (нет) (по умолчанию), `build`, `run`, `noflavors`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:719
+msgid ""
+"Provides support for ports requiring Emacs. The `build` argument creates a "
+"build dependency on Emacs. The `run` argument creates a run dependency on "
+"Emacs. If both the `build` and `run` arguments are absent, create build and "
+"run dependencies on Emacs. The `noflavors` argument prevents flavors, and "
+"is implied if there is no run dependency on Emacs."
+msgstr ""
+"Предоставляет поддержку для портов, требующих Emacs. Аргумент `build` "
+"создает зависимость сборки от Emacs. Аргумент `run` создает зависимость "
+"выполнения от Emacs. Если оба аргумента `build` и `run` отсутствуют, "
+"создаются зависимости сборки и выполнения от Emacs. Аргумент `noflavors` "
+"запрещает флейворы и подразумевается, если нет зависимости выполнения от "
+"Emacs."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:723
+msgid ""
+"The default Emacs flavor for ports with `USES=emacs` can be defined in "
+"[.filename]#make.conf#. For example, for the `nox` flavor, use "
+"`DEFAULT_VERSIONS+= emacs=nox`. The valid flavors are: `full`, `canna`, "
+"`nox`, `wayland`, `devel_full`, `devel_nox`."
+msgstr ""
+"Стандартный вариант Emacs для портов с `USES=emacs` можно определить в "
+"[.filename]#make.conf#. Например, для варианта `nox` используйте "
+"`DEFAULT_VERSIONS+= emacs=nox`. Допустимые флейворы: `full`, `canna`, `nox`, "
+"`wayland`, `devel_full`, `devel_nox`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:725
+msgid "Variables, which can be set by ports:"
+msgstr "Переменные, которые могут быть установлены портами:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:726
+#, no-wrap
+msgid "`EMACS_FLAVORS_EXCLUDE`"
+msgstr "`EMACS_FLAVORS_EXCLUDE`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:729
+msgid ""
+"Do NOT build these Emacs flavors. If `EMACS_FLAVORS_EXCLUDE` is not defined "
+"and:"
+msgstr ""
+"НЕ собирать эти флейворы Emacs. Если `EMACS_FLAVORS_EXCLUDE` не определена и:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:731
+msgid "there is a run dependency on Emacs"
+msgstr "существует зависимость во время выполнения от Emacs"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:732
+msgid "the noflavors argument is not specified"
+msgstr "аргумент noflavors не указан"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:735
+msgid "then all valid Emacs flavors are assumed."
+msgstr "то предполагаются все допустимые флейворы Emacs."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:736
+#, no-wrap
+msgid "`EMACS_NO_DEPENDS`"
+msgstr "`EMACS_NO_DEPENDS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:740
+msgid ""
+"Do NOT add build or run dependencies on Emacs. This will prevent flavors, "
+"and no byte code files will be generated as part of the package."
+msgstr ""
+"НЕ добавлять зависимости сборки или выполнения от Emacs. Это предотвратит "
+"создание вариантов, и никакие файлы байт-кода не будут сгенерированы как "
+"часть пакета."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:742
+msgid "Variables, which can be read by ports:"
+msgstr "Переменные, которые могут быть прочитаны портами:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:743
+#, no-wrap
+msgid "`EMACS_CMD`"
+msgstr "`EMACS_CMD`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:745
+msgid ""
+"Emacs command with full path (e.g. [.filename]#/usr/local/bin/emacs-30.1#)"
+msgstr ""
+"Команда Emacs с полным путём (например, [.filename]#/usr/local/bin/"
+"emacs-30.1#)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:746
+#, no-wrap
+msgid "`EMACS_FLAVOR`"
+msgstr "`EMACS_FLAVOR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:748
+msgid ""
+"Used for dependencies (e.g. `BUILD_DEPENDS= dash.el${EMACS_PKGNAMESUFFIX}"
+">0:devel/dash@${EMACS_FLAVOR}`)"
+msgstr ""
+"Используется для зависимостей (например, `BUILD_DEPENDS= dash.el$"
+"{EMACS_PKGNAMESUFFIX}>0:devel/dash@${EMACS_FLAVOR}`)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:749
+#, no-wrap
+msgid "`EMACS_LIBDIR`"
+msgstr "`EMACS_LIBDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:751
+msgid ""
+"Emacs Library directory without `${PREFIX}` (e.g. [.filename]#share/emacs#)"
+msgstr ""
+"Каталог библиотек Emacs без `${PREFIX}` (например, [.filename]#share/emacs#)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:752
+#, no-wrap
+msgid "`EMACS_LIBDIR_WITH_VER`"
+msgstr "`EMACS_LIBDIR_WITH_VER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:754
+msgid ""
+"Library directory without `${PREFIX}` including version (e.g. "
+"[.filename]#share/emacs/30.1#)"
+msgstr ""
+"Каталог библиотеки без `${PREFIX}`, включая версию (например, "
+"[.filename]#share/emacs/30.1#)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:755
+#, no-wrap
+msgid "`EMACS_MAJOR_VER`"
+msgstr "`EMACS_MAJOR_VER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:757
+msgid "Emacs major version (e.g. 30)"
+msgstr "Основная версия Emacs (например, 30)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:758
+#, no-wrap
+msgid "`EMACS_PKGNAMESUFFIX`"
+msgstr "`EMACS_PKGNAMESUFFIX`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:760
+msgid "`PKGNAMESUFFIX` to distinguish Emacs flavors"
+msgstr "`PKGNAMESUFFIX` для различия вариантов Emacs"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:761
+#, no-wrap
+msgid "`EMACS_SITE_LISPDIR`"
+msgstr "`EMACS_SITE_LISPDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:763
+msgid ""
+"Emacs site-lisp directory without `${PREFIX}` (e.g. [.filename]#share/emacs/"
+"site-lisp#)"
+msgstr ""
+"Каталог site-lisp Emacs без `${PREFIX}` (например, [.filename]#share/emacs/"
+"site-lisp#)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:764
+#, no-wrap
+msgid "`EMACS_VER`"
+msgstr "`EMACS_VER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:766
+msgid "Emacs version (e.g. 30.1)"
+msgstr "Версия Emacs (например, 30.1)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:767
+#, no-wrap
+msgid "`EMACS_VERSION_SITE_LISPDIR`"
+msgstr "`EMACS_VERSION_SITE_LISPDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:769
+msgid "Include version (e.g. [.filename]#share/emacs/30.1/site-lisp#)"
+msgstr ""
+"Каталог site-lisp Emacs, включая номер версии (например, [.filename]#share/"
+"emacs/30.1/site-lisp#)"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:771
+#, no-wrap
+msgid "`erlang`"
+msgstr "`erlang`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:774
+msgid "Possible arguments: (none), `enc`, `rebar`, `rebar3`"
+msgstr "Возможные аргументы: (нет), `enc`, `rebar`, `rebar3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:779
+msgid ""
+"Adds a build and run time dependency on package:lang/erlang[]. Depending on "
+"the argument, it adds additional build dependencies. `enc` adds a dependency "
+"on package:devel/erlang-native-compiler[], `rebar` adds a dependency on "
+"package:devel/rebar[] and `rebar3` adds a dependency on package:devel/"
+"rebar3[]."
+msgstr ""
+"Добавляет зависимость на время сборки и выполнения от package:lang/erlang[]. "
+"В зависимости от аргумента, добавляет дополнительные зависимости для сборки. "
+"`enc` добавляет зависимость от package:devel/erlang-native-compiler[], "
+"`rebar` добавляет зависимость от package:devel/rebar[], а `rebar3` добавляет "
+"зависимость от package:devel/rebar3[]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:781
+msgid "In addition, the following variables are available to the port:"
+msgstr "В дополнение, следующие переменные доступны для порта:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:783
+msgid ""
+"`ERL_APP_NAME`: Erlang app name as installed in Erlang's lib dir (minus "
+"version)"
+msgstr ""
+"`ERL_APP_NAME`: Имя приложения Erlang, как оно установлено в каталоге lib "
+"Erlang (без указания версии)"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:784
+msgid "`ERL_APP_ROOT`: Root directory for this Erlang app"
+msgstr "`ERL_APP_ROOT`: Корневой каталог для этого приложения Erlang"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:785
+msgid "`REBAR_CMD`: Path to the \"rebar\" command"
+msgstr "`REBAR_CMD`: Путь к команде \"rebar\""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:786
+msgid "`REBAR3_CMD`: Path to the \"rebar3\" command"
+msgstr "`REBAR3_CMD`: Путь к команде \"rebar3\""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:787
+msgid "`REBAR_PROFILE`: Rebar profile"
+msgstr "`REBAR_PROFILE`: Профиль Rebar"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:788
+msgid "`REBAR_TARGETS`: Rebar target list (usually compile, maybe escriptize)"
+msgstr ""
+"`REBAR_TARGETS`: Список целей Rebar (обычно compile, возможно escriptize)"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:789
+msgid "`ERL_BUILD_NAME`: Build name for rebar3"
+msgstr "`ERL_BUILD_NAME`: Имя сборки для rebar3"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:790
+msgid "`ERL_BUILD_DEPS`: List of BUILD_DEPENDS in category/portname format"
+msgstr "`ERL_BUILD_DEPS`: Список BUILD_DEPENDS в формате категория/имя_порта"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:791
+msgid "`ERL_RUN_DEPS`: List of RUN_DEPENDS in category/portname format"
+msgstr "`ERL_RUN_DEPS`: Список RUN_DEPENDS в формате категория/имя_порта"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:792
+msgid "`ERL_DOCS`: List of documentation files and directories"
+msgstr "`ERL_DOCS`: Список файлов и каталогов документации"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:794
+#, no-wrap
+msgid "`fakeroot`"
+msgstr "`fakeroot`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:800
+msgid ""
+"Changes some default behavior of build systems to allow installing as a "
+"user. See https://wiki.debian.org/FakeRoot[] for more information on "
+"`fakeroot`."
+msgstr ""
+"Изменяет некоторые стандартные поведения систем сборки для разрешения "
+"установки от имени пользователя. Дополнительную информацию о `fakeroot` "
+"можно найти на https://wiki.debian.org/FakeRoot[]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:802
+#, no-wrap
+msgid "`fam`"
+msgstr "`fam`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:805
+msgid "Possible arguments: (none), `fam`, `gamin`"
+msgstr "Возможные аргументы: (нет), `fam`, `gamin`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:808
+msgid ""
+"Uses a File Alteration Monitor as a library dependency, either package:devel/"
+"fam[] or package:devel/gamin[]. End users can set WITH_FAM_SYSTEM to "
+"specify their preference."
+msgstr ""
+"Использует монитор изменений файлов (FAM — File Alteration Monitor) как "
+"зависимость от библиотеки, либо package:devel/fam[], либо package:devel/"
+"gamin[]. Конечные пользователи могут задать WITH_FAM_SYSTEM, чтобы указать "
+"свои предпочтения."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:810
+#, no-wrap
+msgid "`firebird`"
+msgstr "`firebird`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:813
+msgid "Possible arguments: (none), `25`"
+msgstr "Возможные аргументы: (отсутствуют), `25`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:815
+msgid "Add a dependency to the client library of the Firebird database."
+msgstr "Добавить зависимость от клиентской библиотеке базы данных Firebird."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:817
+#, no-wrap
+msgid "`fonts`"
+msgstr "`fonts`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:820
+msgid "Possible arguments: (none), `fc`, `fontsdir` (default), `none`"
+msgstr ""
+"Возможные аргументы: (отсутствуют), `fc`, `fontsdir` (по умолчанию), `none`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:826
+msgid ""
+"Adds a runtime dependency on tools needed to register fonts. Depending on "
+"the argument, add a `crossref:plist[plist-keywords-fc,`@fc`] ${FONTSDIR}` "
+"line, `crossref:plist[plist-keywords-fontsdir,`@fontsdir`] ${FONTSDIR}` "
+"line, or no line if the argument is `none`, to the plist. `FONTSDIR` "
+"defaults to [.filename]#${PREFIX}/share/fonts/${FONTNAME}# and `FONTNAME` to "
+"`${PORTNAME}`. Add `FONTSDIR` to `PLIST_SUB` and `SUB_LIST`"
+msgstr ""
+"Добавляет зависимость во время выполнения на инструменты, необходимые для "
+"регистрации шрифтов. В зависимости от аргумента добавляет строку "
+"`crossref:plist[plist-keywords-fc,@fc] ${FONTSDIR}`, строку "
+"`crossref:plist[plist-keywords-fontsdir,@fontsdir] ${FONTSDIR}` или не "
+"добавляет строку, если аргумент `none`, в plist. `FONTSDIR` по умолчанию "
+"имеет значение [.filename]#${PREFIX}/share/fonts/${FONTNAME}#, а `FONTNAME` "
+"— `${PORTNAME}`. Добавляет `FONTSDIR` в `PLIST_SUB` и `SUB_LIST`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:828
+#, no-wrap
+msgid "`fortran`"
+msgstr "`fortran`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:831
+msgid "Possible arguments: `gcc` (default)"
+msgstr "Возможные аргументы: `gcc` (по умолчанию)"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:833
+msgid "Uses the GNU Fortran compiler."
+msgstr "Использует компилятор GNU Fortran."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:835
+#, no-wrap
+msgid "`fpc`"
+msgstr "`fpc`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:838
+msgid "Possible arguments: (none), `run`"
+msgstr "Возможные аргументы: (нет), `run`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:841
+msgid ""
+"Provide support for Free Pascal based ports. It will install Free Pascal "
+"compiler and units."
+msgstr ""
+"Обеспечить поддержку портов на основе Free Pascal. Установит компилятор Free "
+"Pascal и модули."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:843
+msgid "Adds a build dependency on package:lang/fpc[]."
+msgstr "Добавляет зависимость сборки от package:lang/fpc[]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:845
+msgid "If the `run` argument is given a run dependency is also added."
+msgstr "Если указан аргумент `run`, также добавляется зависимость запуска."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:847
+#, no-wrap
+msgid "`fuse`"
+msgstr "`fuse`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:850
+msgid "Possible arguments: `2` (default), `3`"
+msgstr "Возможные аргументы: `2` (по умолчанию), `3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:852
+msgid ""
+"The port will depend on the FUSE library and handle the dependency on the "
+"kernel module depending on the version of FreeBSD."
+msgstr ""
+"Порт будет зависеть от библиотеки FUSE и обрабатывать зависимость от модуля "
+"ядра в зависимости от версии FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:854
+#, no-wrap
+msgid "`gem`"
+msgstr "`gem`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:857
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1479
+msgid "Possible arguments: (none), `noautoplist`"
+msgstr "Возможные аргументы: (отсутствуют), `noautoplist`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:860
+msgid ""
+"Handle building with RubyGems. If `noautoplist` is used, the packing list "
+"is not generated automatically."
+msgstr ""
+"Обработка сборки с RubyGems. Если используется `noautoplist`, список "
+"упаковки не генерируется автоматически."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:862
+msgid "This implies `USES=ruby`."
+msgstr "Это подразумевает `USES=ruby`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:864
+#, no-wrap
+msgid "`gettext`"
+msgstr "`gettext`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:871
+msgid ""
+"Deprecated. Will include both crossref:uses[uses-gettext-runtime,`gettext-"
+"runtime`] and crossref:uses[uses-gettext-tools,`gettext-tools`]."
+msgstr ""
+"Устарело. Будет включать как crossref:uses[uses-gettext-runtime,`gettext-"
+"runtime`], так и crossref:uses[uses-gettext-tools,`gettext-tools`]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:873
+#, no-wrap
+msgid "`gettext-runtime`"
+msgstr "`gettext-runtime`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:876
+msgid "Possible arguments: (none), `lib` (default), `build`, `run`"
+msgstr ""
+"Возможные аргументы: (отсутствуют), `lib` (по умолчанию), `build`, `run`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:880
+msgid ""
+"Uses package:devel/gettext-runtime[]. By default, with no arguments or with "
+"the `lib` argument, implies a library dependency on "
+"[.filename]#libintl.so#. `build` and `run` implies, respectively a build-"
+"time and a run-time dependency on [.filename]#gettext#."
+msgstr ""
+"Использует пакет package:devel/gettext-runtime[]. По умолчанию, без "
+"аргументов или с аргументом `lib`, подразумевает зависимость от библиотеки "
+"[.filename]#libintl.so#. Аргументы `build` и `run` подразумевают, "
+"соответственно, зависимость во время сборки и во время выполнения от "
+"[.filename]#gettext#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:882
+#, no-wrap
+msgid "`gettext-tools`"
+msgstr "`gettext-tools`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:885
+msgid "Possible arguments: (none), `build` (default), `run`"
+msgstr "Возможные аргументы: (отсутствуют), `build` (по умолчанию), `run`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:889
+msgid ""
+"Uses package:devel/gettext-tools[]. By default, with no argument, or with "
+"the `build` argument, a build time dependency on [.filename]#msgfmt# is "
+"registered. With the `run` argument, a run-time dependency is registered."
+msgstr ""
+"Использует пакет package:devel/gettext-tools[]. По умолчанию, без аргумента "
+"или с аргументом `build`, регистрируется зависимость во время сборки от "
+"[.filename]#msgfmt#. С аргументом `run` регистрируется зависимость во время "
+"выполнения."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:891
+#, no-wrap
+msgid "`ghostscript`"
+msgstr "`ghostscript`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:894
+msgid "Possible arguments: _X_, `build`, `run`, `nox11`"
+msgstr "Возможные аргументы: _X_, `build`, `run`, `nox11`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:899
+msgid ""
+"A specific version _X_ can be used. Possible versions are `7`, `8`, `9`, and "
+"`agpl` (default). `nox11` indicates that the `-nox11` version of the port "
+"is required. `build` and `run` add build- and run-time dependencies on "
+"Ghostscript. The default is both build- and run-time dependencies."
+msgstr ""
+"Можно указать конкретную версию _X_. Доступные версии: `7`, `8`, `9` и "
+"`agpl` (по умолчанию). `nox11` указывает, что требуется версия порта `-"
+"nox11`. `build` и `run` добавляют зависимости на Ghostscript во время "
+"сборки и выполнения соответственно. По умолчанию добавляются зависимости "
+"как на сборку, так и на выполнение."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:901
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:915
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1201
+#, no-wrap
+msgid "`gl`"
+msgstr "`gl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:908
+msgid ""
+"Provides an easy way to depend on GL components. The components should be "
+"listed in `USE_GL`. The available components are:"
+msgstr ""
+"Предоставляет простой способ зависеть от компонентов GL. Компоненты должны "
+"быть перечислены в `USE_GL`. Доступные компоненты:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:909
+#, no-wrap
+msgid "`egl`"
+msgstr "`egl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:911
+msgid ""
+"add a library dependency on [.filename]#libEGL.so# from package:graphics/"
+"libglvnd[]"
+msgstr ""
+"добавить зависимость от библиотеки [.filename]#libEGL.so# из пакета "
+"package:graphics/libglvnd[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:912
+#, no-wrap
+msgid "`gbm`"
+msgstr "`gbm`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:914
+msgid ""
+"Add a library dependency on [.filename]#libgbm.so# from package:graphics/"
+"mesa-libs[]"
+msgstr ""
+"Добавить зависимость от библиотеки [.filename]#libgbm.so# из пакета "
+"package:graphics/mesa-libs[]"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:917
+msgid ""
+"Add a library dependency on [.filename]#libGL.so# from package:graphics/"
+"libglvnd[]"
+msgstr ""
+"Добавить зависимость от библиотеки [.filename]#libGL.so# из пакета "
+"package:graphics/libglvnd[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:918
+#, no-wrap
+msgid "`glesv2`"
+msgstr "`glesv2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:920
+msgid ""
+"Add a library dependency on [.filename]#libGLESv2.so# from package:graphics/"
+"libglvnd[]"
+msgstr ""
+"Добавить зависимость от библиотеки [.filename]#libGLESv2.so# из пакета "
+"package:graphics/libglvnd[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:921
+#, no-wrap
+msgid "`glew`"
+msgstr "`glew`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:923
+msgid ""
+"Add a library dependency on [.filename]#libGLEW.so# from package:graphics/"
+"glew[]"
+msgstr ""
+"Добавить зависимость от библиотеки [.filename]#libGLEW.so# из пакета "
+"package:graphics/glew[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:924
+#, no-wrap
+msgid "`glu`"
+msgstr "`glu`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:926
+msgid ""
+"Add a library dependency on [.filename]#libGLU.so# from package:graphics/"
+"libGLU[]"
+msgstr ""
+"Добавить зависимость от библиотеки [.filename]#libGLU.so# из "
+"package:graphics/libGLU[]"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:927
+#, no-wrap
+msgid "`glut`"
+msgstr "`glut`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:929
+msgid ""
+"Add a library dependency on [.filename]#libglut.so# from package:graphics/"
+"freeglut[]"
+msgstr ""
+"Добавить зависимость от библиотеки [.filename]#libglut.so# из "
+"package:graphics/freeglut[]"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:930
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2244
+#, no-wrap
+msgid "`opengl`"
+msgstr "`opengl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:932
+msgid ""
+"Add a library dependency on [.filename]#libOpenGL.so# from package:graphics/"
+"libglvnd[]"
+msgstr ""
+"Добавить зависимость от библиотеки [.filename]#libOpenGL.so# из "
+"package:graphics/libglvnd[]"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:934
+#, no-wrap
+msgid "`gmake`"
+msgstr "`gmake`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:939
+msgid ""
+"Uses package:devel/gmake[] as a build-time dependency and sets up the "
+"environment to use `gmake` as the default `make` for the build."
+msgstr ""
+"Использует пакет package:devel/gmake[] как зависимость во время сборки и "
+"настраивает окружение для использования `gmake` в качестве стандартного "
+"`make` при сборке."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:941
+#, no-wrap
+msgid "`gnome`"
+msgstr "`gnome`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:948
+msgid ""
+"Provides an easy way to depend on GNOME components. The components should "
+"be listed in `USE_GNOME`. The available components are:"
+msgstr ""
+"Предоставляет простой способ зависеть от компонентов GNOME. Компоненты "
+"должны быть перечислены в `USE_GNOME`. Доступные компоненты:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:950
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1598
+msgid "`atk`"
+msgstr "`atk`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:951
+msgid "`atkmm`"
+msgstr "`atkmm`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:952
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1184
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1601
+msgid "`cairo`"
+msgstr "`cairo`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:953
+msgid "`cairomm`"
+msgstr "`cairomm`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:954
+msgid "`dconf`"
+msgstr "`dconf`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:955
+msgid "`esound`"
+msgstr "`esound`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:956
+msgid "`evolutiondataserver3`"
+msgstr "`evolutiondataserver3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:957
+msgid "`gconf2`"
+msgstr "`gconf2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:958
+msgid "`gconfmm26`"
+msgstr "`gconfmm26`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:959
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1200
+msgid "`gdkpixbuf`"
+msgstr "`gdkpixbuf`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:960
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1612
+msgid "`gdkpixbuf2`"
+msgstr "`gdkpixbuf2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:961
+msgid "`glib12`"
+msgstr "`glib12`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:962
+msgid "`glib20`"
+msgstr "`glib20`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:963
+msgid "`glibmm`"
+msgstr "`glibmm`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:964
+msgid "`gnomecontrolcenter3`"
+msgstr "`gnomecontrolcenter3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:965
+msgid "`gnomedesktop3`"
+msgstr "`gnomedesktop3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:966
+msgid "`gnomedesktop4`"
+msgstr "`gnomedesktop4`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:967
+msgid "`gnomedocutils`"
+msgstr "`gnomedocutils`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:968
+msgid "`gnomemenus3`"
+msgstr "`gnomemenus3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:969
+msgid "`gnomemimedata`"
+msgstr "`gnomemimedata`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:970
+msgid "`gnomeprefix`"
+msgstr "`gnomeprefix`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:971
+msgid "`gnomesharp20`"
+msgstr "`gnomesharp20`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:972
+msgid "`gnomevfs2`"
+msgstr "`gnomevfs2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:973
+msgid "`gsound`"
+msgstr "`gsound`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:974
+msgid "`gtk-update-icon-cache`"
+msgstr "`gtk-update-icon-cache`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:975
+msgid "`gtk12`"
+msgstr "`gtk12`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:976
+msgid "`gtk20`"
+msgstr "`gtk20`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:977
+msgid "`gtk30`"
+msgstr "`gtk30`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:978
+msgid "`gtkhtml3`"
+msgstr "`gtkhtml3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:979
+msgid "`gtkhtml4`"
+msgstr "`gtkhtml4`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:980
+msgid "`gtkmm20`"
+msgstr "`gtkmm20`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:981
+msgid "`gtkmm24`"
+msgstr "`gtkmm24`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:982
+msgid "`gtkmm30`"
+msgstr "`gtkmm30`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:983
+msgid "`gtksharp20`"
+msgstr "`gtksharp20`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:984
+msgid "`gtksourceview`"
+msgstr "`gtksourceview`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:985
+msgid "`gtksourceview2`"
+msgstr "`gtksourceview2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:986
+msgid "`gtksourceview3`"
+msgstr "`gtksourceview3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:987
+msgid "`gtksourceviewmm3`"
+msgstr "`gtksourceviewmm3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:988
+msgid "`gvfs`"
+msgstr "`gvfs`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:989
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1786
+msgid "`intlhack`"
+msgstr "`intlhack`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:990
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1787
+msgid "`intltool`"
+msgstr "`intltool`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:991
+msgid "`introspection`"
+msgstr "`introspection`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:992
+msgid "`libartlgpl2`"
+msgstr "`libartlgpl2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:993
+msgid "`libbonobo`"
+msgstr "`libbonobo`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:994
+msgid "`libbonoboui`"
+msgstr "`libbonoboui`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:995
+msgid "`libgda5`"
+msgstr "`libgda5`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:996
+msgid "`libgda5-ui`"
+msgstr "`libgda5-ui`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:997
+msgid "`libgdamm5`"
+msgstr "`libgdamm5`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:998
+msgid "`libglade2`"
+msgstr "`libglade2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:999
+msgid "`libgnome`"
+msgstr "`libgnome`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1000
+msgid "`libgnomecanvas`"
+msgstr "`libgnomecanvas`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1001
+msgid "`libgnomekbd`"
+msgstr "`libgnomekbd`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1002
+msgid "`libgnomeprint`"
+msgstr "`libgnomeprint`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1003
+msgid "`libgnomeprintui`"
+msgstr "`libgnomeprintui`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1004
+msgid "`libgnomeui`"
+msgstr "`libgnomeui`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1005
+msgid "`libgsf`"
+msgstr "`libgsf`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1006
+msgid "`libgtkhtml`"
+msgstr "`libgtkhtml`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1007
+msgid "`libgtksourceviewmm`"
+msgstr "`libgtksourceviewmm`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1008
+msgid "`libidl`"
+msgstr "`libidl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1009
+msgid "`librsvg2`"
+msgstr "`librsvg2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1010
+msgid "`libsigc++12`"
+msgstr "`libsigc++12`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1011
+msgid "`libsigc++20`"
+msgstr "`libsigc++20`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1012
+msgid "`libwnck`"
+msgstr "`libwnck`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1013
+msgid "`libwnck3`"
+msgstr "`libwnck3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1014
+msgid "`libxml++26`"
+msgstr "`libxml++26`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1015
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1637
+msgid "`libxml2`"
+msgstr "`libxml2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1016
+msgid "`libxslt`"
+msgstr "`libxslt`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1017
+msgid "`metacity`"
+msgstr "`metacity`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1018
+msgid "`nautilus3`"
+msgstr "`nautilus3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1019
+msgid "`orbit2`"
+msgstr "`orbit2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1020
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1237
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1648
+msgid "`pango`"
+msgstr "`pango`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1021
+msgid "`pangomm`"
+msgstr "`pangomm`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1022
+msgid "`pangox-compat`"
+msgstr "`pangox-compat`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1023
+msgid "`py3gobject3`"
+msgstr "`py3gobject3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1024
+msgid "`pygnome2`"
+msgstr "`pygnome2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1025
+msgid "`pygobject`"
+msgstr "`pygobject`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1026
+msgid "`pygobject3`"
+msgstr "`pygobject3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1027
+msgid "`pygtk2`"
+msgstr "`pygtk2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1028
+msgid "`pygtksourceview`"
+msgstr "`pygtksourceview`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1029
+msgid "`referencehack`"
+msgstr "`referencehack`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1030
+msgid "`vte`"
+msgstr "`vte`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1031
+msgid "`vte3`"
+msgstr "`vte3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1034
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1800
+msgid ""
+"The default dependency is build- and run-time, it can be changed with "
+"`:build` or `:run`. For example:"
+msgstr ""
+"Зависимость по умолчанию — на время сборки и выполнения, её можно изменить с "
+"помощью `:build` или `:run`. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1039
+#, no-wrap
+msgid ""
+"USES=\t\tgnome\n"
+"USE_GNOME=\tgnomemenus3:build intlhack\n"
+msgstr ""
+"USES=\t\tgnome\n"
+"USE_GNOME=\tgnomemenus3:build intlhack\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1042
+msgid "See crossref:special[using-gnome,Using GNOME] for more information."
+msgstr ""
+"См. crossref:special[using-gnome,Использование GNOME] для получения "
+"дополнительной информации."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1044
+#, no-wrap
+msgid "`go`"
+msgstr "`go`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1049
+msgid ""
+"Ports should not be created for Go libs, see crossref:special[go-libs,Go "
+"Libraries] for more information."
+msgstr ""
+"Порты не следует создавать для библиотек Go, дополнительную информацию см. в "
+"crossref:special[go-libs,Библиотеки Go]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1052
+msgid ""
+"Possible arguments: (none), `N.NN`, `N.NN-devel`, `modules`, `no_targets`, "
+"`run`"
+msgstr ""
+"Возможные аргументы: (нет), `N.NN`, `N.NN-devel`, `modules`, `no_targets`, "
+"`run`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1059
+msgid ""
+"Sets default values and targets used to build Go software. A build "
+"dependency on the Go compiler port is added, port maintainers can set "
+"version required. By default the build is performed in GOPATH mode. If Go "
+"software uses modules, the modules-aware mode can be switched on with "
+"`modules` argument. `no_targets` will setup build environment like "
+"`GO_ENV`, `GO_BUILDFLAGS` but skip creating extract and build targets. "
+"`run` will also add a run dependency on the Go compiler port."
+msgstr ""
+"Устанавливает значения и цели по умолчанию, используемые для сборки ПО на "
+"Go. Добавляется зависимость сборки от порта компилятора Go, сопровождающие "
+"порта могут установить требуемую версию. По умолчанию сборка выполняется в "
+"режиме GOPATH. Если ПО на Go использует модули, режим с поддержкой модулей "
+"можно включить с помощью аргумента `modules`. `no_targets` настроит "
+"окружение сборки, как `GO_ENV`, `GO_BUILDFLAGS`, но пропустит создание целей "
+"извлечения (extract) и сборки (build). `run` также добавит зависимость "
+"выполнения от порта компилятора Go."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1061
+msgid "The build process is controlled by several variables:"
+msgstr "Процесс сборки контролируется несколькими переменными:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1062
+#, no-wrap
+msgid "`GO_MODULE`"
+msgstr "`GO_MODULE`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1065
+msgid ""
+"The name of the application module as specified by the `module` directive in "
+"`go.mod`. In most cases, this is the only required variable for ports that "
+"use Go modules."
+msgstr ""
+"Имя модуля приложения, указанное директивой `module` в `go.mod`. В "
+"большинстве случаев это единственная необходимая переменная для портов, "
+"использующих модули Go."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1066
+#, no-wrap
+msgid "`GO_PKGNAME`"
+msgstr "`GO_PKGNAME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1071
+msgid ""
+"The name of the Go package when building in GOPATH mode. This is the "
+"directory that will be created in `${GOPATH}/src`. If not set explicitly "
+"and `GH_SUBDIR` or `GL_SUBDIR` is present, `GO_PKGNAME` will be inferred "
+"from it. It is not needed when building in modules-aware mode."
+msgstr ""
+"Имя пакета Go при сборке в режиме GOPATH. Это каталог, который будет создан "
+"в `${GOPATH}/src`. Если не задано явно и присутствует `GH_SUBDIR` или "
+"`GL_SUBDIR`, то `GO_PKGNAME` будет выведено из них. Не требуется при сборке "
+"в режиме с поддержкой модулей."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1072
+#, no-wrap
+msgid "`GO_TARGET`"
+msgstr "`GO_TARGET`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1076
+msgid ""
+"The packages to build. The default value is `${GO_PKGNAME}`. `GO_TARGET` "
+"can also be a tuple in the form `package:path` where path can be either a "
+"simple filename or a full path starting with `${PREFIX}`."
+msgstr ""
+"Пакеты для сборки. Значение по умолчанию — `${GO_PKGNAME}`. `GO_TARGET` "
+"также может быть кортежем в формате `package:path`, где path может быть либо "
+"простым именем файла, либо полным путём, начинающимся с `${PREFIX}`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1077
+#, no-wrap
+msgid "`GO_TESTTARGET`"
+msgstr "`GO_TESTTARGET`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1080
+msgid ""
+"The packages to test. The default value is `./...` (the current package and "
+"all subpackages)."
+msgstr ""
+"Пакеты для тестирования. Значение по умолчанию — `./...` (текущий пакет и "
+"все подпакеты)."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1081
+#, no-wrap
+msgid "`CGO_CFLAGS`"
+msgstr "`CGO_CFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1083
+msgid "Additional `CFLAGS` values to be passed to the C compiler by `go`."
+msgstr ""
+"Дополнительные значения `CFLAGS`, передаваемые компилятору C с помощью `go`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1084
+#, no-wrap
+msgid "`CGO_LDFLAGS`"
+msgstr "`CGO_LDFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1086
+msgid "Additional `LDFLAGS` values to be passed to the C compiler by `go`."
+msgstr ""
+"Дополнительные значения `LDFLAGS`, передаваемые компилятору C через `go`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1087
+#, no-wrap
+msgid "`GO_BUILDFLAGS`"
+msgstr "`GO_BUILDFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1089
+msgid "Additional build arguments to be passed to `go build`."
+msgstr "Дополнительные аргументы сборки, передаваемые в `go build`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1090
+#, no-wrap
+msgid "`GO_TESTFLAGS`"
+msgstr "`GO_TESTFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1092
+msgid "Additional build arguments to be passed to `go test`."
+msgstr "Дополнительные аргументы сборки, передаваемые в `go test`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1094
+msgid ""
+"See crossref:special[using-go,Building Go Applications] for usage examples."
+msgstr ""
+"См. crossref:special[using-go,Сборка приложений на Go] для примеров "
+"использования."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1096
+#, no-wrap
+msgid "`gperf`"
+msgstr "`gperf`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1101
+msgid ""
+"Add a buildtime dependency on package:devel/gperf[] if `gperf` is not "
+"present in the base system."
+msgstr ""
+"Добавить зависимость во время сборки на package:devel/gperf[], если `gperf` "
+"отсутствует в базовой системе."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1103
+#, no-wrap
+msgid "`grantlee`"
+msgstr "`grantlee`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1106
+msgid "Possible arguments: `5`, `selfbuild`"
+msgstr "Возможные аргументы: `5`, `selfbuild`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1110
+msgid ""
+"Handle dependency on Grantlee. Specify `5` to depend on the Qt5 based "
+"version, package:devel/grantlee5[]. `selfbuild` is used internally by "
+"package:devel/grantlee5[] to get their versions numbers."
+msgstr ""
+"Обработать зависимость от Grantlee. Указать `5` для зависимости от версии на "
+"основе Qt5, package:devel/grantlee5[]. `selfbuild` используется внутри "
+"package:devel/grantlee5[] для получения номеров их версий."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1112
+#, no-wrap
+msgid "`groff`"
+msgstr "`groff`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1115
+msgid "Possible arguments: `build`, `run`, `both`"
+msgstr "Возможные аргументы: `build`, `run`, `both`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1117
+msgid ""
+"Registers a dependency on package:textproc/groff[] if not present in the "
+"base system."
+msgstr ""
+"Регистрирует зависимость от package:textproc/groff[], если пакет отсутствует "
+"в базовой системе."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1119
+#, no-wrap
+msgid "`gssapi`"
+msgstr "`gssapi`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1122
+msgid ""
+"Possible arguments: (none), `base` (default), `heimdal`, `mit`, `flags`, "
+"`bootstrap`"
+msgstr ""
+"Возможные аргументы: (отсутствуют), `base` (по умолчанию), `heimdal`, `mit`, "
+"`flags`, `bootstrap`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1127
+msgid ""
+"Handle dependencies needed by consumers of the GSS-API. Only libraries that "
+"provide the Kerberos mechanism are available. By default, or set to `base`, "
+"the GSS-API library from the base system is used. Can also be set to "
+"`heimdal` to use package:security/heimdal[], or `mit` to use "
+"package:security/krb5[]."
+msgstr ""
+"Обрабатывает зависимости, необходимые для использования GSS-API. Доступны "
+"только библиотеки, предоставляющие механизм Kerberos. По умолчанию (или при "
+"значении `base`) используется библиотека GSS-API из базовой системы. Также "
+"можно установить значение `heimdal` для использования package:security/"
+"heimdal[] или `mit` для использования package:security/krb5[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1129
+msgid ""
+"When the local Kerberos installation is not in `LOCALBASE`, set "
+"`HEIMDAL_HOME` (for `heimdal`) or `KRB5_HOME` (for `krb5`) to the location "
+"of the Kerberos installation."
+msgstr ""
+"Если локальная установка Kerberos не находится в `LOCALBASE`, установите "
+"`HEIMDAL_HOME` (для `heimdal`) или `KRB5_HOME` (для `krb5`) на каталог "
+"установки Kerberos."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1131
+msgid "These variables are exported for the ports to use:"
+msgstr "Эти переменные экспортируются для использования портами:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1133
+msgid "`GSSAPIBASEDIR`"
+msgstr "`GSSAPIBASEDIR`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1134
+msgid "`GSSAPICPPFLAGS`"
+msgstr "`GSSAPICPPFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1135
+msgid "`GSSAPIINCDIR`"
+msgstr "`GSSAPIINCDIR`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1136
+msgid "`GSSAPILDFLAGS`"
+msgstr "`GSSAPILDFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1137
+msgid "`GSSAPILIBDIR`"
+msgstr "`GSSAPILIBDIR`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1138
+msgid "`GSSAPILIBS`"
+msgstr "`GSSAPILIBS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1139
+msgid "`GSSAPI_CONFIGURE_ARGS`"
+msgstr "`GSSAPI_CONFIGURE_ARGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1142
+msgid ""
+"The `flags` option can be given alongside `base`, `heimdal`, or `mit` to "
+"automatically add `GSSAPICPPFLAGS`, `GSSAPILDFLAGS`, and `GSSAPILIBS` to "
+"`CFLAGS`, `LDFLAGS`, and `LDADD`, respectively. For example, use "
+"`base,flags`."
+msgstr ""
+"Опция `flags` может быть указана вместе с `base`, `heimdal` или `mit` для "
+"автоматического добавления `GSSAPICPPFLAGS`, `GSSAPILDFLAGS` и `GSSAPILIBS` "
+"в `CFLAGS`, `LDFLAGS` и `LDADD` соответственно. Например, используйте "
+"`base,flags`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1145
+msgid ""
+"The `bootstrap` option is a special prefix only for use by package:security/"
+"krb5[] and package:security/heimdal[]. For example, use `bootstrap,mit`."
+msgstr ""
+"Опция `bootstrap` — это специальный префикс, предназначенный только для "
+"использования в package:security/krb5[] и package:security/heimdal[]. "
+"Например, используйте `bootstrap,mit`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1147
+#, no-wrap
+msgid "Typical Use"
+msgstr "Типичное использование"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1154
+#, no-wrap
+msgid ""
+"OPTIONS_SINGLE=\tGSSAPI\n"
+"OPTIONS_SINGLE_GSSAPI=\tGSSAPI_BASE GSSAPI_HEIMDAL GSSAPI_MIT GSSAPI_NONE\n"
+msgstr ""
+"OPTIONS_SINGLE=\tGSSAPI\n"
+"OPTIONS_SINGLE_GSSAPI=\tGSSAPI_BASE GSSAPI_HEIMDAL GSSAPI_MIT GSSAPI_NONE\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1162
+#, no-wrap
+msgid ""
+"GSSAPI_BASE_USES=\tgssapi\n"
+"GSSAPI_BASE_CONFIGURE_ON=\t--with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}\n"
+"GSSAPI_HEIMDAL_USES=\tgssapi:heimdal\n"
+"GSSAPI_HEIMDAL_CONFIGURE_ON=\t--with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}\n"
+"GSSAPI_MIT_USES=\tgssapi:mit\n"
+"GSSAPI_MIT_CONFIGURE_ON=\t--with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}\n"
+"GSSAPI_NONE_CONFIGURE_ON=\t--without-gssapi\n"
+msgstr ""
+"GSSAPI_BASE_USES=\tgssapi\n"
+"GSSAPI_BASE_CONFIGURE_ON=\t--with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}\n"
+"GSSAPI_HEIMDAL_USES=\tgssapi:heimdal\n"
+"GSSAPI_HEIMDAL_CONFIGURE_ON=\t--with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}\n"
+"GSSAPI_MIT_USES=\tgssapi:mit\n"
+"GSSAPI_MIT_CONFIGURE_ON=\t--with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}\n"
+"GSSAPI_NONE_CONFIGURE_ON=\t--without-gssapi\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1167
+#, no-wrap
+msgid "`gstreamer`"
+msgstr "`gstreamer`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1174
+msgid ""
+"Provides an easy way to depend on GStreamer components. The components "
+"should be listed in `USE_GSTREAMER`. The available components are:"
+msgstr ""
+"Предоставляет простой способ зависимости от компонентов GStreamer. "
+"Компоненты должны быть перечислены в `USE_GSTREAMER`. Доступные компоненты:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1176
+msgid "`a52dec`"
+msgstr "`a52dec`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1177
+msgid "`aalib`"
+msgstr "`aalib`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1178
+msgid "`amrnb`"
+msgstr "`amrnb`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1179
+msgid "`amrwbdec`"
+msgstr "`amrwbdec`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1180
+msgid "`aom`"
+msgstr "`aom`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1181
+msgid "`assrender`"
+msgstr "`assrender`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1182
+msgid "`bad`"
+msgstr "`bad`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1183
+msgid "`bs2b`"
+msgstr "`bs2b`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1185
+msgid "`cdio`"
+msgstr "`cdio`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1186
+msgid "`cdparanoia`"
+msgstr "`cdparanoia`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1187
+msgid "`chromaprint`"
+msgstr "`chromaprint`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1188
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1603
+msgid "`curl`"
+msgstr "`curl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1189
+msgid "`dash`"
+msgstr "`dash`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1190
+msgid "`dtls`"
+msgstr "`dtls`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1191
+msgid "`dts`"
+msgstr "`dts`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1192
+msgid "`dv`"
+msgstr "`dv`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1193
+msgid "`dvd`"
+msgstr "`dvd`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1194
+msgid "`dvdread`"
+msgstr "`dvdread`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1195
+msgid "`editing-services`"
+msgstr "`editing-services`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1196
+msgid "`faac`"
+msgstr "`faac`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1197
+msgid "`faad`"
+msgstr "`faad`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1198
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1610
+msgid "`flac`"
+msgstr "`flac`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1199
+msgid "`flite`"
+msgstr "`flite`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1202
+msgid "`gme`"
+msgstr "`gme`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1203
+msgid "`gnonlin`"
+msgstr "`gnonlin`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1204
+msgid "`good`"
+msgstr "`good`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1205
+msgid "`gsm`"
+msgstr "`gsm`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1206
+msgid "`gtk4`"
+msgstr "`gtk4`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1207
+msgid "`gtk`"
+msgstr "`gtk`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1208
+msgid "`hal`"
+msgstr "`hal`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1209
+msgid "`hls`"
+msgstr "`hls`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1210
+msgid "`jack`"
+msgstr "`jack`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1211
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1427
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1619
+#, no-wrap
+msgid "`jpeg`"
+msgstr "`jpeg`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1212
+msgid "`kate`"
+msgstr "`kate`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1213
+msgid "`kms`"
+msgstr "`kms`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1214
+msgid "`ladspa`"
+msgstr "`ladspa`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1215
+msgid "`lame`"
+msgstr "`lame`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1216
+msgid "`libav`"
+msgstr "`libav`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1217
+msgid "`libcaca`"
+msgstr "`libcaca`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1218
+msgid "`libde265`"
+msgstr "`libde265`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1219
+msgid "`libmms`"
+msgstr "`libmms`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1220
+msgid "`libvisual`"
+msgstr "`libvisual`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1221
+msgid "`lv2`"
+msgstr "`lv2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1222
+msgid "`mm`"
+msgstr "`mm`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1223
+msgid "`modplug`"
+msgstr "`modplug`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1224
+msgid "`mpeg2dec`"
+msgstr "`mpeg2dec`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1225
+msgid "`mpeg2enc`"
+msgstr "`mpeg2enc`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1226
+msgid "`mpg123`"
+msgstr "`mpg123`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1227
+msgid "`mplex`"
+msgstr "`mplex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1228
+msgid "`musepack`"
+msgstr "`musepack`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1229
+msgid "`neon`"
+msgstr "`neon`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1230
+msgid "`ogg`"
+msgstr "`ogg`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1231
+msgid "`opencv`"
+msgstr "`opencv`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1232
+msgid "`openexr`"
+msgstr "`openexr`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1233
+msgid "`openh264`"
+msgstr "`openh264`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1234
+msgid "`openjpeg`"
+msgstr "`openjpeg`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1235
+msgid "`openmpt`"
+msgstr "`openmpt`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1236
+msgid "`opus`"
+msgstr "`opus`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1238
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1650
+msgid "`png`"
+msgstr "`png`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1239
+msgid "`pulse`"
+msgstr "`pulse`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1240
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1652
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2346
+#, no-wrap
+msgid "`qt`"
+msgstr "`qt`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1241
+msgid "`resindvd`"
+msgstr "`resindvd`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1242
+msgid "`rsvg`"
+msgstr "`rsvg`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1243
+msgid "`rtmp`"
+msgstr "`rtmp`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1244
+msgid "`shout2`"
+msgstr "`shout2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1245
+msgid "`sidplay`"
+msgstr "`sidplay`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1246
+msgid "`smoothstreaming`"
+msgstr "`smoothstreaming`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1247
+msgid "`sndfile`"
+msgstr "`sndfile`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1248
+msgid "`sndio`"
+msgstr "`sndio`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1249
+msgid "`soundtouch`"
+msgstr "`soundtouch`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1250
+msgid "`soup`"
+msgstr "`soup`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1251
+msgid "`spandsp`"
+msgstr "`spandsp`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1252
+msgid "`speex`"
+msgstr "`speex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1253
+msgid "`srtp`"
+msgstr "`srtp`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1254
+msgid "`taglib`"
+msgstr "`taglib`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1255
+msgid "`theora`"
+msgstr "`theora`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1256
+msgid "`ttml`"
+msgstr "`ttml`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1257
+msgid "`twolame`"
+msgstr "`twolame`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1258
+msgid "`ugly`"
+msgstr "`ugly`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1259
+msgid "`v4l2`"
+msgstr "`v4l2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1260
+msgid "`vorbis`"
+msgstr "`vorbis`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1261
+msgid "`vpx`"
+msgstr "`vpx`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1262
+msgid "`vulkan`"
+msgstr "`vulkan`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1263
+msgid "`wavpack`"
+msgstr "`wavpack`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1264
+msgid "`webp`"
+msgstr "`webp`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1265
+msgid "`webrtcdsp`"
+msgstr "`webrtcdsp`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1266
+msgid "`x264`"
+msgstr "`x264`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1267
+msgid "`x265`"
+msgstr "`x265`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1268
+msgid "`x`"
+msgstr "`x`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1269
+msgid "`ximagesrc`"
+msgstr "`ximagesrc`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1270
+msgid "`zbar`"
+msgstr "`zbar`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1272
+#, no-wrap
+msgid "`guile`"
+msgstr "`guile`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1275
+msgid ""
+"Possible arguments: (none), `_X.Y_`, `flavors`, `build`, `run`, `alias`, "
+"`conflicts`"
+msgstr ""
+"Возможные аргументы: (нет), `_X.Y_`, `flavors`, `build`, `run`, `alias`, "
+"`conflicts`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1279
+msgid ""
+"Adds a dependency on Guile. By default this is a library dependency on the "
+"appropriate `libguile*.so`, unless overridden by the `build` and/or `run` "
+"option. The `alias` option configures `BINARY_ALIAS` appropriately (see "
+"crossref:makefiles[binary-alias,Use `BINARY_ALIAS`])."
+msgstr ""
+"Добавляет зависимость от Guile. По умолчанию это зависимость от "
+"соответствующей библиотеки `libguile*.so`, если не переопределено опциями "
+"`build` и/или `run`. Опция `alias` настраивает `BINARY_ALIAS` "
+"соответствующим образом (см. crossref:makefiles[binary-alias,Использование "
+"`BINARY_ALIAS`])."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1282
+msgid ""
+"The default version is set by the usual `DEFAULT_VERSIONS` mechanism; if the "
+"default version is not one of the listed versions, then the latest available "
+"listed version is used."
+msgstr ""
+"Версия по умолчанию устанавливается с помощью обычного механизма "
+"`DEFAULT_VERSIONS`; если версия по умолчанию не входит в список указанных "
+"версий, то используется последняя доступная версия из списка."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1285
+msgid ""
+"Applications using Guile are normally built for only a single Guile "
+"version. However, extension or library modules should use the `flavors` "
+"option to build with multiple flavors."
+msgstr ""
+"Приложения, использующие Guile, обычно собираются только для одной версии "
+"Guile. Однако модули расширений или библиотек должны использовать опцию "
+"`flavors` для сборки с несколькими флейворами."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1287
+msgid "For more information see crossref:special[using-guile,Using Guile]."
+msgstr ""
+"Для получения дополнительной информации см. crossref:special[using-"
+"guile,Использование Guile]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1289
+#, no-wrap
+msgid "`horde`"
+msgstr "`horde`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1296
+msgid ""
+"Add buildtime and runtime dependencies on package:devel/pear-channel-"
+"horde[]. Other Horde dependencies can be added with `USE_HORDE_BUILD` and "
+"`USE_HORDE_RUN`. See crossref:special[php-horde,Horde Modules] for more "
+"information."
+msgstr ""
+"Добавить зависимости времени сборки и выполнения для package:devel/pear-"
+"channel-horde[]. Другие зависимости Horde можно добавить с помощью "
+"`USE_HORDE_BUILD` и `USE_HORDE_RUN`. Дополнительную информацию см. в разделе "
+"crossref:special[php-horde,Модули Horde]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1298
+#, no-wrap
+msgid "`iconv`"
+msgstr "`iconv`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1301
+msgid ""
+"Possible arguments: (none), `lib`, `build`, `patch`, `translit`, `wchar_t`"
+msgstr ""
+"Возможные аргументы: (нет), `lib`, `build`, `patch`, `translit`, `wchar_t`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1307
+msgid ""
+"Uses `iconv` functions, either from the port package:converters/libiconv[] "
+"as a build-time and run-time dependency, or from the base system. By "
+"default, with no arguments or with the `lib` argument, implies `iconv` with "
+"build-time and run-time dependencies. `build` implies a build-time "
+"dependency, and `patch` implies a patch-time dependency. If the port uses "
+"the `WCHAR_T` or `//TRANSLIT` iconv extensions, add the relevant arguments "
+"so that the correct iconv is used. For more information see "
+"crossref:special[using-iconv,Using `iconv`]."
+msgstr ""
+"Использует функции `iconv`, либо из порта package:converters/libiconv[] как "
+"зависимость на этапе сборки и выполнения, либо из базовой системы. По "
+"умолчанию, без аргументов или с аргументом `lib`, подразумевает `iconv` с "
+"зависимостями на этапе сборки и выполнения. `build` подразумевает "
+"зависимость на этапе сборки, а `patch` — на этапе патчинга. Если порт "
+"использует расширения `WCHAR_T` или `//TRANSLIT` для `iconv`, добавьте "
+"соответствующие аргументы, чтобы использовалась правильная версия `iconv`. "
+"Для получения дополнительной информации см. crossref:special[using-"
+"iconv,Использование `iconv`]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1309
+#, no-wrap
+msgid "`imake`"
+msgstr "`imake`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1312
+msgid "Possible arguments: (none), `env`, `notall`, `noman`"
+msgstr "Возможные аргументы: (нет), `env`, `notall`, `noman`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1317
+msgid ""
+"Add package:devel/imake[] as a build-time dependency and run `xmkmf -a` "
+"during the `configure` stage. If the `env` argument is given, the "
+"`configure` target is not set. If the `-a` flag is a problem for the port, "
+"add the `notall` argument. If `xmkmf` does not generate a `install.man` "
+"target, add the `noman` argument."
+msgstr ""
+"Добавить package:devel/imake[] как зависимость на этапе сборки и выполнить "
+"`xmkmf -a` на этапе `configure`. Если указан аргумент `env`, цель "
+"`configure` не устанавливается. Если флаг `-a` вызывает проблемы для порта, "
+"добавьте аргумент `notall`. Если `xmkmf` не генерирует цель `install.man`, "
+"добавьте аргумент `noman`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1319
+#, no-wrap
+msgid "`java`"
+msgstr "`java`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1322
+msgid "Possible arguments: (none), `ant`, `build`, `extract`, `run`"
+msgstr "Возможные аргументы: (нет), `ant`, `build`, `extract`, `run`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1329
+msgid ""
+"Defaults to `USES=java:build,run` if no arguments are provided and "
+"`NO_BUILD` is undefined. If `NO_BUILD` is defined, `USES=java:run` is used. "
+"If the `ant` argument is given, the port uses Apache Ant. If the `build` "
+"argument is given, a JDK port is added to the build dependencies. If the "
+"`extract` argument is given, a JDK port is added to the extract "
+"dependencies. If the `run` argument is given, a JDK port is added to the "
+"run dependencies."
+msgstr ""
+"По умолчанию используется `USES=java:build,run`, если аргументы не "
+"предоставлены и `NO_BUILD` не определен. Если `NO_BUILD` определен, "
+"используется `USES=java:run`. Если указан аргумент `ant`, порт использует "
+"Apache Ant. Если указан аргумент `build`, порт JDK добавляется в зависимости "
+"сборки. Если указан аргумент `extract`, порт JDK добавляется в зависимости "
+"извлечения. Если указан аргумент `run`, порт JDK добавляется в зависимости "
+"выполнения."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1332
+#, no-wrap
+msgid "`JAVA_VERSION`"
+msgstr "`JAVA_VERSION`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1336
+msgid ""
+"List of space-separated suitable java versions for the port. An optional `\\"
+"+` allows you to specify a range of versions. (allowed values `8[+]`, `11[\\"
+"+]`, `17[+]`, `18[\\+]`, `19[+]`, `20[\\+]`, `21[+]`, `22[\\+]`, `22[+]`)"
+msgstr ""
+"Список подходящих версий Java для порта, разделенных пробелами. "
+"Необязательный символ `\\+` позволяет указать диапазон версий. (допустимые "
+"значения `8[+]`, `11[\\+]`, `17[+]`, `18[\\+]`, `19[+]`, `20[\\+]`, `21[+]`, "
+"`22[\\+]`, `22[+]`)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1337
+#, no-wrap
+msgid "`JAVA_OS`"
+msgstr "`JAVA_OS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1340
+msgid ""
+"List of space-separated suitable JDK port operating systems for the port. "
+"(allowed values: `native`, `linux`)"
+msgstr ""
+"Список поддерживаемых операционных систем для порта JDK, разделённых "
+"пробелами. (допустимые значения: `native`, `linux`)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1341
+#, no-wrap
+msgid "`JAVA_VENDOR`"
+msgstr "`JAVA_VENDOR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1344
+msgid ""
+"List of space-separated suitable JDK port vendors for the port. (allowed "
+"values: `openjdk`, `oracle`)"
+msgstr ""
+"Список подходящих поставщиков портов JDK для порта, разделенных пробелами. "
+"(допустимые значения: `openjdk`, `oracle`)"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1346
+msgid "The framework exposes the following variables to be read by the port:"
+msgstr "Фреймворк предоставляет следующие переменные для чтения портом:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1347
+#, no-wrap
+msgid "`JAVA_PORT`"
+msgstr "`JAVA_PORT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1349
+msgid "The name of the JDK port. (e.g. 'java/openjdk8')"
+msgstr "Имя порта JDK. (например, 'java/openjdk8')"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1350
+#, no-wrap
+msgid "`JAVA_PORT_VERSION`"
+msgstr "`JAVA_PORT_VERSION`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1352
+msgid "The version of the JDK port. (e.g. '8')"
+msgstr "Версия порта JDK. (например, '8')"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1353
+#, no-wrap
+msgid "`JAVA_PORT_OS`"
+msgstr "`JAVA_PORT_OS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1355
+msgid "The operating system used by the JDK port. (e.g. 'linux')"
+msgstr "Используемая операционная система для порта JDK. (например, 'linux')"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1356
+#, no-wrap
+msgid "`JAVA_PORT_VENDOR`"
+msgstr "`JAVA_PORT_VENDOR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1358
+msgid "The vendor of the JDK port. (e.g. 'openjdk')"
+msgstr "Поставщик порта JDK. (например, 'openjdk')"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1359
+#, no-wrap
+msgid "`JAVA_PORT_OS_DESCRIPTION`"
+msgstr "`JAVA_PORT_OS_DESCRIPTION`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1361
+msgid ""
+"Description of the operating system used by the JDK port. (e.g. 'Linux')"
+msgstr ""
+"Описание операционной системы, используемой портом JDK. (например, 'Linux')"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1362
+#, no-wrap
+msgid "`JAVA_PORT_VENDOR_DESCRIPTION`"
+msgstr "`JAVA_PORT_VENDOR_DESCRIPTION`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1364
+msgid ""
+"Description of the vendor of the JDK port. (e.g. 'OpenJDK BSD Porting Team')"
+msgstr "Описание поставщика порта JDK. (например, 'OpenJDK BSD Porting Team')"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1365
+#, no-wrap
+msgid "`JAVA_HOME`"
+msgstr "`JAVA_HOME`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1367
+msgid ""
+"Path to the installation directory of the JDK. (e.g. [.filename]#/usr/local/"
+"openjdk8#)"
+msgstr ""
+"Путь к каталогу установки JDK. (например, [.filename]#/usr/local/openjdk8#)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1368
+#, no-wrap
+msgid "`JAVAC`"
+msgstr "`JAVAC`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1371
+msgid ""
+"Path to the Java compiler to use. (e.g. [.filename]#/usr/local/openjdk8/bin/"
+"javac# or [.filename]#/usr/local/bin/javac#)"
+msgstr ""
+"Путь к используемому компилятору Java. (например, [.filename]#/usr/local/"
+"openjdk8/bin/javac# или [.filename]#/usr/local/bin/javac#)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1372
+#, no-wrap
+msgid "`JAR`"
+msgstr "`JAR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1375
+msgid ""
+"Path to the JAR tool to use. (e.g. [.filename]#/usr/local/openjdk8/bin/jar# "
+"or [.filename]#/usr/local/bin/fastjar#)"
+msgstr ""
+"Путь к используемому инструменту JAR. (например, [.filename]#/usr/local/"
+"openjdk8/bin/jar# или [.filename]#/usr/local/bin/fastjar#)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1376
+#, no-wrap
+msgid "`APPLETVIEWER`"
+msgstr "`APPLETVIEWER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1379
+msgid ""
+"Path to the appletviewer utility. (e.g. [.filename]#/usr/local/linux-"
+"jdk1.8.0/bin/appletviewer#)"
+msgstr ""
+"Путь к утилите appletviewer. (например, [.filename]#/usr/local/linux-"
+"jdk1.8.0/bin/appletviewer#)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1380
+#, no-wrap
+msgid "`JAVA`"
+msgstr "`JAVA`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1382
+msgid ""
+"Path to the `java` executable. Use this for executing Java programs. (e.g. "
+"[.filename]#/usr/local/openjdk8/bin/java#)"
+msgstr ""
+"Путь к исполняемому файлу `java`. Используется для запуска программ на Java. "
+"(например, [.filename]#/usr/local/openjdk8/bin/java#)"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1383
+#, no-wrap
+msgid "`JAVADOC`"
+msgstr "`JAVADOC`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1385
+msgid "Path to the `javadoc` utility program."
+msgstr "Путь к программе `javadoc`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1386
+#, no-wrap
+msgid "`JAVAH`"
+msgstr "`JAVAH`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1388
+msgid "Path to the `javah` program."
+msgstr "Путь к программе `javah`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1389
+#, no-wrap
+msgid "`JAVAP`"
+msgstr "`JAVAP`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1391
+msgid "Path to the `javap` program."
+msgstr "Путь к программе `javap`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1392
+#, no-wrap
+msgid "`JAVA_KEYTOOL`"
+msgstr "`JAVA_KEYTOOL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1394
+msgid "Path to the `keytool` utility program."
+msgstr "Путь к утилите `keytool`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1395
+#, no-wrap
+msgid "`JAVA_N2A`"
+msgstr "`JAVA_N2A`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1397
+msgid "Path to the `native2ascii` tool."
+msgstr "Путь к инструменту `native2ascii`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1398
+#, no-wrap
+msgid "`JAVA_POLICYTOOL`"
+msgstr "`JAVA_POLICYTOOL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1400
+msgid "Path to the `policytool` program."
+msgstr "Путь к программе `policytool`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1401
+#, no-wrap
+msgid "`JAVA_SERIALVER`"
+msgstr "`JAVA_SERIALVER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1403
+msgid "Path to the `serialver` utility program."
+msgstr "Путь к утилите `serialver`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1404
+#, no-wrap
+msgid "`RMIC`"
+msgstr "`RMIC`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1406
+msgid "Path to the RMI stub/skeleton generator, `rmic`."
+msgstr "Путь к генератору RMI-заглушек/скелетов, `rmic`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1407
+#, no-wrap
+msgid "`RMIREGISTRY`"
+msgstr "`RMIREGISTRY`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1409
+msgid "Path to the RMI registry program, `rmiregistry`."
+msgstr "Путь к программе реестра RMI, `rmiregistry`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1410
+#, no-wrap
+msgid "`RMID`"
+msgstr "`RMID`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1412
+msgid "Path to the RMI daemon program."
+msgstr "Путь к программе демона RMI."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1413
+#, no-wrap
+msgid "`JAVA_CLASSES`"
+msgstr "`JAVA_CLASSES`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1416
+msgid ""
+"Path to the archive that contains the JDK class files. On most JDKs, this is "
+"[.filename]#${JAVA_HOME}/jre/lib/rt.jar#."
+msgstr ""
+"Путь к архиву, содержащему файлы классов JDK. В большинстве JDK это "
+"[.filename]#${JAVA_HOME}/jre/lib/rt.jar#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1417
+#, no-wrap
+msgid "`JAVASHAREDIR`"
+msgstr "`JAVASHAREDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1419
+msgid "The base directory for all shared Java resources."
+msgstr "Базовый каталог для всех общих ресурсов Java."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1420
+#, no-wrap
+msgid "`JAVAJARDIR`"
+msgstr "`JAVAJARDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1422
+msgid "The directory where a port should install JAR files."
+msgstr "Каталог, в котором порт должен устанавливать JAR-файлы."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1423
+#, no-wrap
+msgid "`JAVALIBDIR`"
+msgstr "`JAVALIBDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1425
+msgid "The directory where JAR files installed by other ports are located."
+msgstr "Каталог, в котором находятся JAR-файлы, установленные другими портами."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1430
+msgid "Possible arguments: `lib` (default, implicit), `build`, `run`"
+msgstr ""
+"Возможные аргументы: `lib` (по умолчанию, подразумевается), `build`, `run`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1432
+msgid "Help handling dependencies on `jpeg`."
+msgstr "Помощь в обработке зависимостей от `jpeg`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1435
+msgid ""
+"If the `lib` argument is provided or no arguments are provided then a lib "
+"dependency is added to the port."
+msgstr ""
+"Если указан аргумент `lib` или аргументы не предоставлены, то в порт "
+"добавляется зависимость от библиотеки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1438
+msgid ""
+"If the `build` argument is provided then a build dependency is added to the "
+"port."
+msgstr ""
+"Если указан аргумент `build`, то в порт добавляется зависимость сборки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1441
+msgid ""
+"If the `run` argument is provided then a run dependency is added to the port."
+msgstr ""
+"Если указан аргумент `run`, то к порту добавляется зависимость времени "
+"выполнения."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1444
+msgid ""
+"If the `both` argument is provided then a build dependency and a run "
+"dependency are added to the port."
+msgstr ""
+"Если указан аргумент `both`, то к порту добавляется зависимость для сборки и "
+"зависимость для выполнения."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1446
+msgid "The framework provides the following variable that can be set by ports:"
+msgstr ""
+"Фреймворк предоставляет следующую переменную, которая может быть установлена "
+"портами:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1447
+#, no-wrap
+msgid "`JPEG_PORT`"
+msgstr "`JPEG_PORT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1449
+msgid "Specifies the JPEG implementation to use. Possible values are:"
+msgstr "Указывает реализацию JPEG для использования. Возможные значения:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1451
+msgid "package:graphics/jpeg-turbo[] (default)"
+msgstr "package:graphics/jpeg-turbo[] (по умолчанию)"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1452
+msgid "package:graphics/mozjpeg[]"
+msgstr "package:graphics/mozjpeg[]"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1454
+#, no-wrap
+msgid "`kde`"
+msgstr "`kde`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1457
+msgid "Possible arguments: `5`"
+msgstr "Возможные аргументы: `5`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1460
+msgid ""
+"Add dependency on KDE components. See crossref:special[using-kde,Using KDE] "
+"for more information."
+msgstr ""
+"Добавить зависимость от компонентов KDE. Подробнее см. в "
+"crossref:special[using-kde,Использование KDE]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1462
+#, no-wrap
+msgid "`kmod`"
+msgstr "`kmod`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1465
+msgid "Possible arguments: (none), `debug`"
+msgstr "Возможные аргументы: (отсутствуют), `debug`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1467
+msgid "Fills in the boilerplate for kernel module ports, currently:"
+msgstr "Заполняет шаблон для портов модулей ядра, в настоящее время:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1469
+msgid "Add `kld` to `CATEGORIES`."
+msgstr "Добавьте `kld` в `CATEGORIES`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1470
+msgid "Set `SSP_UNSAFE`."
+msgstr "Установите `SSP_UNSAFE`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1471
+msgid "Set `IGNORE` if the kernel sources are not found in `SRC_BASE`."
+msgstr "Установите `IGNORE`, если исходные коды ядра не найдены в `SRC_BASE`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1472
+msgid ""
+"Define `KMODDIR` to [.filename]#/boot/modules# by default, add it to "
+"`PLIST_SUB` and `MAKE_ENV`, and create it upon installation. If `KMODDIR` is "
+"set to [.filename]#/boot/kernel#, it will be rewritten to [.filename]#/boot/"
+"modules#. This prevents breaking packages when upgrading the kernel due to "
+"[.filename]#/boot/kernel# being renamed to [.filename]#/boot/kernel.old# in "
+"the process."
+msgstr ""
+"Определить `KMODDIR` по умолчанию как [.filename]#/boot/modules#, добавить "
+"его в `PLIST_SUB` и `MAKE_ENV`, а также создать его при установке. Если "
+"`KMODDIR` установлен в [.filename]#/boot/kernel#, он будет перезаписан в "
+"[.filename]#/boot/modules#. Это предотвращает повреждение пакетов при "
+"обновлении ядра из-за переименования [.filename]#/boot/kernel# в "
+"[.filename]#/boot/kernel.old# в процессе."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1473
+msgid ""
+"Handle cross-referencing kernel modules upon installation and "
+"deinstallation, using crossref:plist[plist-keywords-kld,`@kld`]."
+msgstr ""
+"Обрабатывать перекрестные ссылки на модули ядра при установке и удалении, "
+"используя crossref:plist[plist-keywords-kld,`@kld`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1474
+msgid ""
+"If the `debug` argument is given, the port can install a debug version of "
+"the module into [.filename]#KERN_DEBUGDIR#/[.filename]#KMODDIR#. By default, "
+"`KERN_DEBUGDIR` is copied from `DEBUGDIR` and set to [.filename]#/usr/lib/"
+"debug#. The framework will take care of creating and removing any required "
+"directories."
+msgstr ""
+"Если указан аргумент `debug`, порт может установить отладочную версию модуля "
+"в [.filename]#KERN_DEBUGDIR#/[.filename]#KMODDIR#. По умолчанию "
+"`KERN_DEBUGDIR` копируется из `DEBUGDIR` и устанавливается в [.filename]#/"
+"usr/lib/debug#. Фреймворк позаботится о создании и удалении необходимых "
+"каталогов."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1476
+#, no-wrap
+msgid "`kodi`"
+msgstr "`kodi`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1483
+msgid ""
+"Provide support for package:multimedia/kodi[] add-ons. If the `noautoplist` "
+"argument is provided it does not generate the `plist` automatically."
+msgstr ""
+"Обеспечить поддержку дополнений для package:multimedia/kodi[]. Если указан "
+"аргумент `noautoplist`, автоматическое создание `plist` не выполняется."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1485
+#, no-wrap
+msgid "`lazarus`"
+msgstr "`lazarus`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1488
+msgid "Possible arguments: (none), `gtk2` (default), `qt5`, `qt6`, `flavors`"
+msgstr ""
+"Возможные аргументы: (отсутствуют), `gtk2` (по умолчанию), `qt5`, `qt6`, "
+"`flavors`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1490
+msgid "Provide support for package:editors/lazarus[] based ports."
+msgstr "Обеспечить поддержку портов на основе package:editors/lazarus[]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1494
+msgid ""
+"If no arguments are provided or if `gtk2` is provided the lazarus-app is "
+"built with a `gtk2` interface the package:editors/lazarus[] port will be "
+"built with the `gtk2` interface."
+msgstr ""
+"Если аргументы не предоставлены или указан `gtk2`, приложение lazarus-app "
+"будет собрано с интерфейсом `gtk2`, и порт package:editors/lazarus[] будет "
+"собран с интерфейсом `gtk2`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1497
+msgid ""
+"If the `qt5` argument is provided, the lazarus-app is built with a `qt5` "
+"interface."
+msgstr ""
+"Если указан аргумент `qt5`, приложение lazarus-app собирается с интерфейсом "
+"`qt5`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1500
+msgid ""
+"If the `qt6` argument is provided, the lazarus-app is built with a `qt6` "
+"interface."
+msgstr ""
+"Если указан аргумент `qt6`, приложение lazarus-app собирается с интерфейсом "
+"`qt6`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1503
+msgid ""
+"If the `flavors` argument is provided the lazarus-app is built with flavors "
+"feature."
+msgstr ""
+"Если указан аргумент `flavors`, приложение `lazarus-app` собирается с "
+"поддержкой функций флейворов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1506
+msgid ""
+"If the port does not require compiling lazarus project files automatically, "
+"the following variable can be defined:"
+msgstr ""
+"Если порт не требует автоматической компиляции файлов проекта lazarus, можно "
+"определить следующую переменную:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1508
+msgid "`NO_LAZBUILD`= `yes`"
+msgstr "`NO_LAZBUILD`= `yes`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1510
+msgid "The following variables are available for ports:"
+msgstr "Доступны следующие переменные для портов:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1511
+#, no-wrap
+msgid "`LAZARUS_PROJECT_FILES`"
+msgstr "`LAZARUS_PROJECT_FILES`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1513
+msgid "List of lpi files. It must not be empty. Default: empty"
+msgstr "Список lpi-файлов. Он не должен быть пустым. По умолчанию: пусто"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1514
+#, no-wrap
+msgid "`LAZARUS_DIR`"
+msgstr "`LAZARUS_DIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1517
+msgid ""
+"Path to lazarus installation directory Default: [.filename]#${LOCALBASE}/"
+"share/lazarus-${LAZARUS_VER}#"
+msgstr ""
+"Путь к директории установки lazarus. По умолчанию: [.filename]#${LOCALBASE}/"
+"share/lazarus-${LAZARUS_VER}#"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1518
+#, no-wrap
+msgid "`LAZBUILD_ARGS`"
+msgstr "`LAZBUILD_ARGS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1522
+msgid ""
+"lazbuild extra args. It could be `-d` in most of cases. See man:lazbuild[1] "
+"for more information. Default: empty"
+msgstr ""
+"Дополнительные аргументы lazbuild. В большинстве случаев это может быть `-"
+"d`. Подробнее см. man:lazbuild[1]. По умолчанию: пусто"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1523
+#, no-wrap
+msgid "`LAZARUS_NO_FLAVORS`"
+msgstr "`LAZARUS_NO_FLAVORS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1526
+msgid ""
+"Do not build these lazarus flavors. If `LAZARUS_NO_FLAVORS` is not defined "
+"then all valid lazarus flavors are assumed."
+msgstr ""
+"Не собирать эти флейворы lazarus. Если `LAZARUS_NO_FLAVORS` не определена, "
+"то предполагаются все допустимые флейворы lazarus."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1527
+#, no-wrap
+msgid "`WANT_LAZARUS_DEVEL`"
+msgstr "`WANT_LAZARUS_DEVEL`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1529
+msgid "If set to `yes` then use package:lazarus/devel[] as build dependency."
+msgstr ""
+"Если установлено значение `yes`, то используйте package:lazarus/devel[] как "
+"зависимость сборки."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1531
+#, no-wrap
+msgid "`ldap`"
+msgstr "`ldap`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1534
+msgid "Possible arguments: (none), <version>, client, server"
+msgstr "Возможные аргументы: (нет), <версия>, клиент, сервер"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1542
+msgid ""
+"Registers a dependency on package:net/openldap[]. It uses the specific "
+"`<version>` (without the dot notation) if set. Otherwise it tries to find "
+"the currently installed version. If necessary it falls back to the default "
+"version found in `bsd.default-versions.mk`. `client` specifies a runtime "
+"dependency on the client library. This is also the default. `server` "
+"specifies a runtime dependency on the server."
+msgstr ""
+"Регистрирует зависимость от пакета package:net/openldap[]. Использует "
+"конкретную `<версию>` (без точечной нотации), если она указана. В противном "
+"случае пытается найти установленную версию. При необходимости возвращается к "
+"версии по умолчанию, указанной в `bsd.default-versions.mk`. `client` "
+"указывает на зависимость во время выполнения от клиентской библиотеки. Это "
+"также значение по умолчанию. `server` указывает на зависимость во время "
+"выполнения от сервера."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1545
+#, no-wrap
+msgid "`IGNORE_WITH_OPENLDAP`"
+msgstr "`IGNORE_WITH_OPENLDAP`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1547
+msgid ""
+"This variable can be defined if the ports does not support one or more "
+"versions of OpenLDAP."
+msgstr ""
+"Эта переменная может быть определена, если порты не поддерживают одну или "
+"несколько версий OpenLDAP."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1547
+#, no-wrap
+msgid "`WITH_OPENLDAP_VER`"
+msgstr "`WITH_OPENLDAP_VER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1549
+msgid "User defined variable to set OpenLDAP version."
+msgstr "Пользовательская переменная для установки версии OpenLDAP."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1549
+#, no-wrap
+msgid "`OPENLDAP_VER`"
+msgstr "`OPENLDAP_VER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1551
+msgid "Detected OpenLDAP version."
+msgstr "Обнаруженная версия OpenLDAP."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1553
+#, no-wrap
+msgid "`lha`"
+msgstr "`lha`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1558
+msgid "Set `EXTRACT_SUFX` to `.lzh`"
+msgstr "Установите `EXTRACT_SUFX` в `.lzh`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1560
+#, no-wrap
+msgid "`libarchive`"
+msgstr "`libarchive`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1566
+msgid ""
+"Registers a dependency on package:archivers/libarchive[]. Any ports "
+"depending on libarchive must include `USES=libarchive`."
+msgstr ""
+"Регистрирует зависимость от package:archivers/libarchive[]. Любые порты, "
+"зависящие от libarchive, должны включать `USES=libarchive`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1568
+#, no-wrap
+msgid "`libedit`"
+msgstr "`libedit`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1574
+msgid ""
+"Registers a dependency on package:devel/libedit[]. Any ports depending on "
+"libedit must include `USES=libedit`."
+msgstr ""
+"Регистрирует зависимость от package:devel/libedit[]. Все порты, зависящие от "
+"libedit, должны включать `USES=libedit`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1576
+#, no-wrap
+msgid "`libtool`"
+msgstr "`libtool`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1579
+msgid "Possible arguments: (none), `keepla`, `build`"
+msgstr "Возможные аргументы: (нет), `keepla`, `build`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1583
+msgid ""
+"Patches `libtool` scripts. This must be added to all ports that use "
+"`libtool`. The `keepla` argument can be used to keep [.filename]#.la# "
+"files. Some ports do not ship with their own copy of libtool and need a "
+"build time dependency on package:devel/libtool[], use the `:build` argument "
+"to add such dependency."
+msgstr ""
+"Исправляет скрипты `libtool`. Это должно быть добавлено во все порты, "
+"использующие `libtool`. Аргумент `keepla` может быть использован для "
+"сохранения файлов [.filename]#.la#. Некоторые порты не поставляются с "
+"собственной копией libtool и требуют зависимость во время сборки от "
+"package:devel/libtool[], используйте аргумент `:build` для добавления такой "
+"зависимости."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1585
+#, no-wrap
+msgid "`linux`"
+msgstr "`linux`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1588
+msgid "Possible arguments: `c6`, `c7`"
+msgstr "Возможные аргументы: `c6`, `c7`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1592
+msgid ""
+"Ports Linux compatibility framework. Specify `c6` to depend on CentOS 6 "
+"packages. Specify `c7` to depend on CentOS 7 packages. The available "
+"packages are:"
+msgstr ""
+"Порт фреймворка совместимости с Linux. Укажите `c6` для зависимостей от "
+"пакетов CentOS 6. Укажите `c7` для зависимостей от пакетов CentOS 7. "
+"Доступные пакеты:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1594
+msgid "`allegro`"
+msgstr "`allegro`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1595
+msgid "`alsa-plugins-oss`"
+msgstr "`alsa-plugins-oss`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1596
+msgid "`alsa-plugins-pulseaudio`"
+msgstr "`alsa-plugins-pulseaudio`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1597
+msgid "`alsalib`"
+msgstr "`alsalib`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1599
+msgid "`avahi-libs`"
+msgstr "`avahi-libs`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1600
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2820
+msgid "`base`"
+msgstr "`base`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1602
+msgid "`cups-libs`"
+msgstr "`cups-libs`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1604
+msgid "`cyrus-sasl2`"
+msgstr "`cyrus-sasl2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1605
+msgid "`dbusglib`"
+msgstr "`dbusglib`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1606
+msgid "`dbuslibs`"
+msgstr "`dbuslibs`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1607
+msgid "`devtools`"
+msgstr "`devtools`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1608
+msgid "`dri`"
+msgstr "`dri`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1609
+msgid "`expat`"
+msgstr "`expat`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1611
+msgid "`fontconfig`"
+msgstr "`fontconfig`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1613
+msgid "`gnutls`"
+msgstr "`gnutls`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1614
+msgid "`graphite2`"
+msgstr "`graphite2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1615
+msgid "`gtk2`"
+msgstr "`gtk2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1616
+msgid "`harfbuzz`"
+msgstr "`harfbuzz`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1617
+msgid "`jasper`"
+msgstr "`jasper`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1618
+msgid "`jbigkit`"
+msgstr "`jbigkit`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1620
+msgid "`libasyncns`"
+msgstr "`libasyncns`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1621
+msgid "`libaudiofile`"
+msgstr "`libaudiofile`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1622
+msgid "`libelf`"
+msgstr "`libelf`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1623
+msgid "`libgcrypt`"
+msgstr "`libgcrypt`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1624
+msgid "`libgfortran`"
+msgstr "`libgfortran`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1625
+msgid "`libgpg-error`"
+msgstr "`libgpg-error`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1626
+msgid "`libmng`"
+msgstr "`libmng`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1627
+msgid "`libogg`"
+msgstr "`libogg`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1628
+msgid "`libpciaccess`"
+msgstr "`libpciaccess`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1629
+msgid "`libsndfile`"
+msgstr "`libsndfile`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1630
+msgid "`libsoup`"
+msgstr "`libsoup`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1631
+msgid "`libssh2`"
+msgstr "`libssh2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1632
+msgid "`libtasn1`"
+msgstr "`libtasn1`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1633
+msgid "`libthai`"
+msgstr "`libthai`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1634
+msgid "`libtheora`"
+msgstr "`libtheora`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1635
+msgid "`libv4l`"
+msgstr "`libv4l`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1636
+msgid "`libvorbis`"
+msgstr "`libvorbis`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1638
+msgid "`mikmod`"
+msgstr "`mikmod`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1639
+msgid "`naslibs`"
+msgstr "`naslibs`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1640
+msgid "`ncurses-base`"
+msgstr "`ncurses-base`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1641
+msgid "`nspr`"
+msgstr "`nspr`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1642
+msgid "`nss`"
+msgstr "`nss`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1643
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2026
+#, no-wrap
+msgid "`openal`"
+msgstr "`openal`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1644
+msgid "`openal-soft`"
+msgstr "`openal-soft`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1645
+msgid "`openldap`"
+msgstr "`openldap`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1646
+msgid "`openmotif`"
+msgstr "`openmotif`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1647
+msgid "`openssl`"
+msgstr "`openssl`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1649
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3001
+#, no-wrap
+msgid "`pixman`"
+msgstr "`pixman`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1651
+msgid "`pulseaudio-libs`"
+msgstr "`pulseaudio-libs`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1653
+msgid "`qt-x11`"
+msgstr "`qt-x11`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1654
+msgid "`qtwebkit`"
+msgstr "`qtwebkit`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1655
+msgid "`scimlibs`"
+msgstr "`scimlibs`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1656
+msgid "`sdl12`"
+msgstr "`sdl12`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1657
+msgid "`sdlimage`"
+msgstr "`sdlimage`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1658
+msgid "`sdlmixer`"
+msgstr "`sdlmixer`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1659
+msgid "`sqlite3`"
+msgstr "`sqlite3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1660
+msgid "`tcl85`"
+msgstr "`tcl85`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1661
+msgid "`tcp_wrappers-libs`"
+msgstr "`tcp_wrappers-libs`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1662
+msgid "`tiff`"
+msgstr "`tiff`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1663
+msgid "`tk85`"
+msgstr "`tk85`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1664
+msgid "`ucl`"
+msgstr "`ucl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1665
+msgid "`xorglibs`"
+msgstr "`xorglibs`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1667
+#, no-wrap
+msgid "`llvm`"
+msgstr "`llvm`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1670
+msgid ""
+"Possible arguments: (none), `_XY_`, min=`_XY_`, max=`_XY_`, build, run, lib"
+msgstr ""
+"Возможные аргументы: (нет), `_XY_`, min=`_XY_`, max=`_XY_`, build, run, lib"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1678
+msgid ""
+"Adds a dependency on LLVM. By default this is a build dependency unless "
+"overridden by the `run` or `lib` options. The default version is the one "
+"set in `LLVM_DEFAULT`. A specific version can be specified as well. The "
+"minimum and maximum versions can be specified with the `min` and `max` "
+"parameters respectively. The ports framework export the following variables "
+"to the port:"
+msgstr ""
+"Добавляет зависимость от LLVM. По умолчанию это зависимость для сборки, если "
+"не переопределено опциями `run` или `lib`. Версия по умолчанию задаётся в "
+"`LLVM_DEFAULT`. Также можно указать конкретную версию. Минимальную и "
+"максимальную версии можно указать с помощью параметров `min` и `max` "
+"соответственно. Фреймворк портов экспортирует следующие переменные в порт:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1679
+#, no-wrap
+msgid "`LLVM_VERSION`"
+msgstr "`LLVM_VERSION`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1681
+msgid "Version chosen from the arguments to llvm.mk"
+msgstr "Версия, выбранная из аргументов к llvm.mk"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1681
+#, no-wrap
+msgid "`LLVM_PORT`"
+msgstr "`LLVM_PORT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1683
+msgid "Chosen llvm port"
+msgstr "Выбранный порт llvm"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1683
+#, no-wrap
+msgid "`LLVM_CONFIG`"
+msgstr "`LLVM_CONFIG`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1685
+msgid "llvm-config of the chosen port"
+msgstr "`llvm-config` выбранного порта"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1685
+#, no-wrap
+msgid "`LLVM_LIBLLVM`"
+msgstr "`LLVM_LIBLLVM`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1687
+msgid "libLLVM.so of the chosen port"
+msgstr "`libLLVM.so` выбранного порта"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1687
+#, no-wrap
+msgid "`LLVM_PREFIX`"
+msgstr "`LLVM_PREFIX`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1689
+msgid "Installation prefix of the chosen port"
+msgstr "Префикс инсталляции выбранного порта"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1691
+#, no-wrap
+msgid "`localbase`"
+msgstr "`localbase`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1694
+msgid "Possible arguments: (none), `ldflags`"
+msgstr "Возможные аргументы: (отсутствуют), `ldflags`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1699
+msgid ""
+"Ensures that libraries from dependencies in `LOCALBASE` are used instead of "
+"the ones from the base system. Specify `ldflags` to add `-L${LOCALBASE}/"
+"lib` to `LDFLAGS` instead of `LIBS`. Ports that depend on libraries that "
+"are also present in the base system should use this. It is also used "
+"internally by a few other `USES`."
+msgstr ""
+"Гарантирует использование библиотек из зависимостей в `LOCALBASE` вместо "
+"библиотек из базовой системы. Указывает `ldflags` для добавления `-L$"
+"{LOCALBASE}/lib` в `LDFLAGS` вместо `LIBS`. Порты, зависящие от библиотек, "
+"которые также присутствуют в базовой системе, должны использовать эту опцию. "
+"Она также используется внутри несколькими другими `USES`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1701
+#, no-wrap
+msgid "`lua`"
+msgstr "`lua`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1704
+msgid ""
+"Possible arguments: (none), `_XY_`, `_XY_+`, `-_XY_`, `_XY_-_ZA_`, `module`, "
+"`flavors`, `build`, `run`, `env`"
+msgstr ""
+"Возможные аргументы: (нет), `_XY_`, `_XY_+`, `-_XY_`, `_XY_-_ZA_`, `module`, "
+"`flavors`, `build`, `run`, `env`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1708
+msgid ""
+"Adds a dependency on Lua. By default this is a library dependency, unless "
+"overridden by the `build` and/or `run` option. The `env` option prevents "
+"the addition of any dependency, while still defining all the usual variables."
+msgstr ""
+"Добавляет зависимость от Lua. По умолчанию это зависимость от библиотеки, "
+"если не переопределено опциями `build` и/или `run`. Опция `env` "
+"предотвращает добавление любой зависимости, при этом все обычные переменные "
+"остаются определенными."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1710
+msgid ""
+"The default version is set by the usual `DEFAULT_VERSIONS` mechanism, unless "
+"a version or range of versions is specified as an argument, for example, "
+"`51` or `51-54`."
+msgstr ""
+"Версия по умолчанию устанавливается с помощью обычного механизма "
+"`DEFAULT_VERSIONS`, если только версия или диапазон версий не указаны в "
+"качестве аргумента, например, `51` или `51-54`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1713
+msgid ""
+"Applications using Lua are normally built for only a single Lua version. "
+"However, library modules intended to be loaded by Lua code should use the "
+"`module` option to build with multiple flavors."
+msgstr ""
+"Приложения, использующие Lua, обычно собираются только для одной версии Lua. "
+"Однако модули библиотек, предназначенные для загрузки кодом Lua, должны "
+"использовать опцию `module` для сборки с несколькими вариантами."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1715
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1734
+msgid "For more information see crossref:special[using-lua,Using Lua]."
+msgstr ""
+"Для получения дополнительной информации см. crossref:special[using-"
+"lua,Использование Lua]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1717
+#, no-wrap
+msgid "`luajit`"
+msgstr "`luajit`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1720
+msgid "Possible arguments: (none), `_X_`"
+msgstr "Возможные аргументы: (нет), `_X_`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1723
+msgid ""
+"Adds a dependency on luajit runtime. A specific version _X_ can be used. "
+"Possible versions are `luajit`, `luajit-devel`, `luajit-openresty`"
+msgstr ""
+"Добавляет зависимость от среды выполнения luajit. Можно указать конкретную "
+"версию _X_. Доступные версии: `luajit`, `luajit-devel`, `luajit-openresty`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1725
+msgid ""
+"After including [.filename]#bsd.port.options.mk# or "
+"[.filename]#bsd.port.pre.mk# the port can inspect these variables:"
+msgstr ""
+"После включения [.filename]#bsd.port.options.mk# или "
+"[.filename]#bsd.port.pre.mk# порт может проверять эти переменные:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1726
+#, no-wrap
+msgid "`LUAJIT_VER`"
+msgstr "`LUAJIT_VER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1728
+msgid "The selected luajit version"
+msgstr "Выбранная версия luajit"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1728
+#, no-wrap
+msgid "`LUAJIT_INCDIR`"
+msgstr "`LUAJIT_INCDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1730
+msgid "The path to luajit's header files"
+msgstr "Путь к заголовочным файлам luajit"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1730
+#, no-wrap
+msgid "`LUAJIT_LUAVER`"
+msgstr "`LUAJIT_LUAVER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1732
+msgid "Which luajit spec version is selected (2.0 for luajit, else 2.1)"
+msgstr "Какой версии спецификации luajit выбрана (2.0 для luajit, иначе 2.1)"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1736
+#, no-wrap
+msgid "`lxqt`"
+msgstr "`lxqt`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1743
+msgid ""
+"Handle dependencies for the LXQt Desktop Environment. Use `USE_LXQT` to "
+"select the components needed for the port. See crossref:special[using-"
+"lxqt,Using LXQt] for more information."
+msgstr ""
+"Обработка зависимостей для рабочей среды LXQt. Используйте `USE_LXQT` для "
+"выбора необходимых компонентов для порта. Дополнительную информацию см. в "
+"разделе crossref:special[using-lxqt,Использование LXQt]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1745
+#, no-wrap
+msgid "`magick`"
+msgstr "`magick`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1748
+msgid "Possible arguments: (none), `_X_`, `build`, `nox11`, `run`, `test`"
+msgstr "Возможные аргументы: (нет), `_X_`, `build`, `nox11`, `run`, `test`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1753
+msgid ""
+"Add a library dependency on `ImageMagick`. A specific version _X_ can be "
+"used. Possible versions are `6` and `7` (default). `nox11` indicates that "
+"the `-nox11` version of the port is required. `build`, `run` and `test` add "
+"build-, run-time and test dependencies on ImageMagick."
+msgstr ""
+"Добавить зависимость библиотеки от `ImageMagick`. Можно указать конкретную "
+"версию _X_. Доступные версии: `6` и `7` (по умолчанию). `nox11` означает, "
+"что требуется версия порта `-nox11`. `build`, `run` и `test` добавляют "
+"зависимости на сборку, выполнение и тестирование для ImageMagick."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1755
+#, no-wrap
+msgid "`makeinfo`"
+msgstr "`makeinfo`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1760
+msgid ""
+"Add a build-time dependency on `makeinfo` if it is not present in the base "
+"system."
+msgstr ""
+"Добавить зависимость во время сборки на `makeinfo`, если его нет в базовой "
+"системе."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1762
+#, no-wrap
+msgid "`makeself`"
+msgstr "`makeself`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1767
+msgid ""
+"Indicates that the distribution files are makeself archives and sets the "
+"appropriate dependencies."
+msgstr ""
+"Указывает, что файлы дистрибутива являются архивами makeself и устанавливает "
+"соответствующие зависимости."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1769
+#, no-wrap
+msgid "`mate`"
+msgstr "`mate`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1776
+msgid ""
+"Provides an easy way to depend on MATE components. The components should be "
+"listed in `USE_MATE`. The available components are:"
+msgstr ""
+"Предоставляет простой способ зависимостей от компонентов MATE. Компоненты "
+"должны быть перечислены в `USE_MATE`. Доступные компоненты:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1778
+msgid "`autogen`"
+msgstr "`autogen`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1779
+msgid "`caja`"
+msgstr "`caja`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1780
+msgid "`common`"
+msgstr "`common`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1781
+msgid "`controlcenter`"
+msgstr "`controlcenter`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1782
+msgid "`desktop`"
+msgstr "`desktop`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1783
+msgid "`dialogs`"
+msgstr "`dialogs`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1784
+msgid "`docutils`"
+msgstr "`docutils`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1785
+msgid "`icontheme`"
+msgstr "`icontheme`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1788
+msgid "`libmatekbd`"
+msgstr "`libmatekbd`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1789
+msgid "`libmateweather`"
+msgstr "`libmateweather`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1790
+msgid "`marco`"
+msgstr "`marco`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1791
+msgid "`menus`"
+msgstr "`menus`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1792
+msgid "`notificationdaemon`"
+msgstr "`notificationdaemon`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1793
+msgid "`panel`"
+msgstr "`panel`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1794
+msgid "`pluma`"
+msgstr "`pluma`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1795
+msgid "`polkit`"
+msgstr "`polkit`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1796
+msgid "`session`"
+msgstr "`session`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1797
+msgid "`settingsdaemon`"
+msgstr "`settingsdaemon`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1805
+#, no-wrap
+msgid ""
+"USES=\t\tmate\n"
+"USE_MATE=\tmenus:build intlhack\n"
+msgstr ""
+"USES=\t\tmate\n"
+"USE_MATE=\tmenus:build intlhack\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1808
+#, no-wrap
+msgid "`meson`"
+msgstr "`meson`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1814
+msgid ""
+"Provide support for Meson based projects. For more information see "
+"crossref:special[using-meson,Using `meson`]."
+msgstr ""
+"Предоставить поддержку для проектов на основе Meson. Дополнительную "
+"информацию смотрите в crossref:special[using-meson,Использование `meson`]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1816
+#, no-wrap
+msgid "`metaport`"
+msgstr "`metaport`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1821
+msgid ""
+"Sets the following variables to make it easier to create a metaport: "
+"`MASTER_SITES`, `DISTFILES`, `EXTRACT_ONLY`, `NO_BUILD`, `NO_INSTALL`, "
+"`NO_MTREE`, `NO_ARCH`."
+msgstr ""
+"Устанавливает следующие переменные для упрощения создания метапорта: "
+"`MASTER_SITES`, `DISTFILES`, `EXTRACT_ONLY`, `NO_BUILD`, `NO_INSTALL`, "
+"`NO_MTREE`, `NO_ARCH`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1823
+#, no-wrap
+msgid "`minizip`"
+msgstr "`minizip`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1826
+msgid "Possible arguments: (none), `ng`"
+msgstr "Возможные аргументы: (отсутствуют), `ng`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1828
+msgid ""
+"Adds a library dependency on package:archivers/minizip[] or "
+"package:archivers/minizip-ng[] respectively."
+msgstr ""
+"Добавляет зависимость библиотеки от package:archivers/minizip[] или "
+"package:archivers/minizip-ng[] соответственно."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1830
+#, no-wrap
+msgid "`mlt`"
+msgstr "`mlt`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1833
+msgid "Possible arguments: `7`, `nodepend`"
+msgstr "Возможные аргументы: `7`, `nodepend`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1835
+msgid "Provide support for ports depending on package:multimedia/mlt7[]."
+msgstr "Обеспечить поддержку портов, зависящих от package:multimedia/mlt7[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1838
+msgid ""
+"If the `nodepend` argument is provided no library dependency is generated. "
+"This argument only makes sense for multimedia/mlt7* ports."
+msgstr ""
+"Если указан аргумент `nodepend`, зависимости от библиотек не создаются. Этот "
+"аргумент имеет смысл только для портов multimedia/mlt7*."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1840
+#, no-wrap
+msgid "`mysql`"
+msgstr "`mysql`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1843
+msgid ""
+"Possible arguments: (none), `_version_`, `client` (default), `server`, "
+"`embedded`"
+msgstr ""
+"Возможные аргументы: (отсутствуют), `_версия_`, `client` (по умолчанию), "
+"`server`, `embedded`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1852
+msgid ""
+"Provide support for MySQL If no version is given, try to find the current "
+"installed version. Fall back to the default version, MySQL-5.6. The "
+"possible versions are `55`, `55m`, `55p`, `56`, `56p`, `56w`, `57`, `57p`, "
+"`80`, `100m`, `101m`, and `102m`. The `m` and `p` suffixes are for the "
+"MariaDB and Percona variants of MySQL. `server` and `embedded` add a build- "
+"and run-time dependency on the MySQL server. When using `server` or "
+"`embedded`, add `client` to also add a dependency on "
+"[.filename]#libmysqlclient.so#. A port can set `IGNORE_WITH_MYSQL` if some "
+"versions are not supported."
+msgstr ""
+"Предоставить поддержку MySQL. Если версия не указана, попытаться определить "
+"установленную версию. В случае неудачи использовать версию по умолчанию, "
+"MySQL-5.6. Возможные версии: `55`, `55m`, `55p`, `56`, `56p`, `56w`, `57`, "
+"`57p`, `80`, `100m`, `101m` и `102m`. Суффиксы `m` и `p` обозначают флейворс "
+"MariaDB и Percona для MySQL. Параметры `server` и `embedded` добавляют "
+"зависимости во время сборки и выполнения на сервер MySQL. При использовании "
+"`server` или `embedded` добавьте `client`, чтобы также включить зависимость "
+"от [.filename]#libmysqlclient.so#. Порт может установить "
+"`IGNORE_WITH_MYSQL`, если некоторые версии не поддерживаются."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1854
+msgid "The framework sets `MYSQL_VER` to the detected MySQL version."
+msgstr "Фреймворк устанавливает `MYSQL_VER` в обнаруженную версию MySQL."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1856
+#, no-wrap
+msgid "`mono`"
+msgstr "`mono`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1859
+msgid "Possible arguments: (none), `nuget`"
+msgstr "Возможные аргументы: (отсутствуют), `nuget`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1861
+msgid ""
+"Adds a dependency on the Mono (currently only C#) framework by setting the "
+"appropriate dependencies."
+msgstr ""
+"Добавляет зависимость от фреймворка Mono (в настоящее время только C#), "
+"устанавливая соответствующие зависимости."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1865
+msgid ""
+"Specify `nuget` when the port uses nuget packages. `NUGET_DEPENDS` needs to "
+"be set with the names and versions of the nuget packages in the format "
+"`_name_=_version_`. An optional package origin can be added using "
+"`_name_=_version_:_origin_`."
+msgstr ""
+"Укажите `nuget`, если порт использует пакеты nuget. `NUGET_DEPENDS` должен "
+"содержать имена и версии пакетов nuget в формате `_имя_=_версия_`. Можно "
+"добавить необязательное расположение пакета (origin), используя "
+"`_имя_=_версия_:_ расположение _`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1867
+msgid ""
+"The helper target, `buildnuget`, will output the content of the "
+"`NUGET_DEPENDS` based on the provided [.filename]#packages.config#."
+msgstr ""
+"Вспомогательная цель `buildnuget` выведет содержимое `NUGET_DEPENDS` на "
+"основе предоставленного файла [.filename]#packages.config#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1869
+#, no-wrap
+msgid "`motif`"
+msgstr "`motif`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1878
+msgid ""
+"Uses package:x11-toolkits/open-motif[] as a library dependency. End users "
+"can set `WANT_LESSTIF` in [.filename]#make.conf# to use package:x11-toolkits/"
+"lesstif[] as dependency instead of package:x11-toolkits/open-motif[]. "
+"Similarly setting `WANT_OPEN_MOTIF_DEVEL` in [.filename]#make.conf# will add "
+"a dependency on package:x11-toolkits/open-motif-devel[]"
+msgstr ""
+"Использует package:x11-toolkits/open-motif[] как зависимость библиотеки. "
+"Конечные пользователи могут установить `WANT_LESSTIF` в "
+"[.filename]#make.conf#, чтобы использовать package:x11-toolkits/lesstif[] "
+"как зависимость вместо package:x11-toolkits/open-motif[]. Аналогично, "
+"установка `WANT_OPEN_MOTIF_DEVEL` в [.filename]#make.conf# добавит "
+"зависимость от package:x11-toolkits/open-motif-devel[]"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1880
+#, no-wrap
+msgid "`mpi`"
+msgstr "`mpi`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1883
+msgid "Possible arguments: `mpich` (default), `openmpi`"
+msgstr "Возможные аргументы: `mpich` (по умолчанию), `openmpi`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1885
+msgid "Provide support for ports depending on `MPI`."
+msgstr "Обеспечить поддержку портов, зависящих от `MPI`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1888
+msgid ""
+"If the `mpich` argument is provided a dependency on package:net/mpich[] is "
+"added to the port."
+msgstr ""
+"Если указан аргумент `mpich`, в порт добавляется зависимость от package:net/"
+"mpich[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1891
+msgid ""
+"If the `openmpi` argument is provided a dependency on package:net/openmpi[] "
+"is added to the port."
+msgstr ""
+"Если указан аргумент `openmpi`, в порт добавляется зависимость от "
+"package:net/openmpi[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1893
+msgid ""
+"The ports framework provides the following variables that can be read by the "
+"port:"
+msgstr ""
+"Фреймворк портов предоставляет следующие переменные, которые могут быть "
+"прочитаны портом:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1894
+#, no-wrap
+msgid "`MPI_LIBS`"
+msgstr "`MPI_LIBS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1896
+msgid "Libraries needed to link programs using `MPI`."
+msgstr ""
+"Библиотеки, необходимые для связывания программ с использованием `MPI`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1897
+#, no-wrap
+msgid "`MPI_CFLAGS`"
+msgstr "`MPI_CFLAGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1899
+msgid "Compiler flags necessary to build programs using `MPI`."
+msgstr ""
+"Флаги компилятора, необходимые для сборки программ с использованием `MPI`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1900
+#, no-wrap
+msgid "`MPICC`"
+msgstr "`MPICC`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1902
+msgid ""
+"Location of the `mpicc` executable. Default: [.filename]#${MPI_HOME}/bin/"
+"mpicc#."
+msgstr ""
+"Расположение исполняемого файла `mpicc`. По умолчанию: [.filename]#$"
+"{MPI_HOME}/bin/mpicc#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1903
+#, no-wrap
+msgid "`MPICXX`"
+msgstr "`MPICXX`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1905
+msgid ""
+"Location of the `mpicxx` executable. Default: [.filename]#${MPI_HOME}/bin/"
+"mpicxx#."
+msgstr ""
+"Расположение исполняемого файла `mpicxx`. По умолчанию: [.filename]#$"
+"{MPI_HOME}/bin/mpicxx#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1906
+#, no-wrap
+msgid "`MPIF90`"
+msgstr "`MPIF90`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1908
+msgid ""
+"Location of the `mpif90` executable. Default: [.filename]#${MPI_HOME}/bin/"
+"mpif90#."
+msgstr ""
+"Расположение исполняемого файла `mpif90`. По умолчанию: [.filename]#$"
+"{MPI_HOME}/bin/mpif90#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1909
+#, no-wrap
+msgid "`MPIFC`"
+msgstr "`MPIFC`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1911
+msgid "Same as above."
+msgstr "То же, что и выше."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1912
+#, no-wrap
+msgid "`MPI_HOME`"
+msgstr "`MPI_HOME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1914
+msgid ""
+"Installation directory of `MPI`. Defaults to `${LOCALBASE}` for `MPICH`."
+msgstr ""
+"Каталог установки `MPI`. По умолчанию используется `${LOCALBASE}` для "
+"`MPICH`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1915
+#, no-wrap
+msgid "`MPIEXEC`"
+msgstr "`MPIEXEC`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1917
+msgid ""
+"Location of the `mpiexec` executable. Default: [.filename]#${MPI_HOME}/bin/"
+"mpiexec#."
+msgstr ""
+"Расположение исполняемого файла `mpiexec`. По умолчанию: [.filename]#$"
+"{MPI_HOME}/bin/mpiexec#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1918
+#, no-wrap
+msgid "`MPIRUN`"
+msgstr "`MPIRUN`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1920
+msgid ""
+"Location of the `mpirun` executable. Default: [.filename]#${MPI_HOME}/bin/"
+"mpirun#."
+msgstr ""
+"Расположение исполняемого файла `mpirun`. По умолчанию: [.filename]#$"
+"{MPI_HOME}/bin/mpirun#."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1923
+#, no-wrap
+msgid "`ncurses`"
+msgstr "`ncurses`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1926
+msgid "Possible arguments: (none), `base`, `port`"
+msgstr "Возможные аргументы: (нет), `base`, `port`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1928
+msgid "Uses ncurses, and causes some useful variables to be set."
+msgstr "Использует ncurses и устанавливает некоторые полезные переменные."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1930
+#, no-wrap
+msgid "`nextcloud`"
+msgstr "`nextcloud`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1935
+msgid ""
+"Adds support for Nextcloud applications by adding a run time dependency on "
+"package:www/nextcloud[]."
+msgstr ""
+"Добавляет поддержку приложений Nextcloud, добавляя зависимость во время "
+"выполнения на package:www/nextcloud[]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1937
+#, no-wrap
+msgid "`ninja`"
+msgstr "`ninja`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1940
+msgid "Possible arguments: (none), `build`, `make` (default), `run`"
+msgstr "Возможные аргументы: (нет), `build`, `make` (по умолчанию), `run`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1947
+msgid ""
+"If `build` or `run` arguments are specify, it respectively adds a build or "
+"run time dependency on package:devel/ninja[]. If `make` or no arguments are "
+"provided, use ninja to build the port instead of make. `make` implies "
+"`build`. If the variable `NINJA_DEFAULT` is set to `samurai`, then the "
+"dependencies are set on package:devel/samurai[] instead."
+msgstr ""
+"Если указаны аргументы `build` или `run`, это соответственно добавляет "
+"зависимость во время сборки или выполнения от пакета package:devel/ninja[]. "
+"Если указан `make` или аргументы не предоставлены, используется ninja для "
+"сборки порта вместо make. `make` подразумевает `build`. Если переменная "
+"`NINJA_DEFAULT` установлена в `samurai`, тогда зависимости устанавливаются "
+"для пакета package:devel/samurai[] вместо этого."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1949
+#, no-wrap
+msgid "`nodejs`"
+msgstr "`nodejs`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1953
+#, no-wrap
+msgid ""
+"Possible arguments: (none), `build`, `run`, `current`, `lts`, `10`, `14`, `16`,\n"
+" `17`.\n"
+msgstr ""
+"Возможные аргументы: (нет), `build`, `run`, `current`, `lts`, `10`, `14`, `16`,\n"
+" `17`.\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1956
+msgid ""
+"Uses nodejs. Adds a dependency on package:www/node*[]. If a supported "
+"version is specified then `run` and/or `build` must be specified too."
+msgstr ""
+"Использует nodejs. Добавляет зависимость от пакета package:www/node*[]. Если "
+"указана поддерживаемая версия, то также необходимо указать `run` и/или "
+"`build`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1958
+#, no-wrap
+msgid "`objc`"
+msgstr "`objc`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1963
+msgid ""
+"Add objective C dependencies (compiler, runtime library) if the base system "
+"does not support it."
+msgstr ""
+"Добавить зависимости Objective C (компилятор, библиотека времени "
+"выполнения), если базовая система их не поддерживает."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1965
+#, no-wrap
+msgid "`ocaml`"
+msgstr "`ocaml`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1968
+msgid ""
+"Possible arguments: (none), "
+"`build`,`camlp4`,`dune`,`findlib`,`findplist`,`ldconfig`,`run`,`tk`,`tkbuild`,`tkrun`,`wash`"
+msgstr ""
+"Возможные аргументы: (нет), `build`, `camlp4`, `dune`, `findlib`, "
+"`findplist`, `ldconfig`, `run`, `tk`, `tkbuild`, `tkrun`, `wash`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1970
+msgid "Provide support for OCaml."
+msgstr "Обеспечить поддержку OCaml."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1972
+msgid "If no arguments are provided, it defaults to `build`, `run`."
+msgstr "Если аргументы не указаны, по умолчанию используются `build`, `run`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1975
+msgid ""
+"If the `build` argument is provided then package:lang/ocamlc[] is added to "
+"`BUILD_DEPENDS`, `EXTRACT` and `PATCH_DEPENDS`."
+msgstr ""
+"Если указан аргумент `build`, то package:lang/ocamlc[] добавляется в "
+"`BUILD_DEPENDS`, `EXTRACT` и `PATCH_DEPENDS`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1977
+msgid ""
+"If the `camlp4` argument is provided then package:devel/ocamlp4[] is used to "
+"build."
+msgstr ""
+"Если указан аргумент `camlp4`, то для сборки используется package:devel/"
+"ocamlp4[]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1979
+msgid ""
+"If the `dune` argument is provided then package:devel/ocaml-dune[] is used "
+"as build system."
+msgstr ""
+"Если указан аргумент `dune`, то package:devel/ocaml-dune[] используется как "
+"система сборки."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1981
+msgid ""
+"If the `findlib` argument is provided then `ocamlfind` will be used to "
+"install packages. Package directories will be automatically deleted."
+msgstr ""
+"Если указан аргумент `findlib`, то для установки пакетов будет "
+"использоваться `ocamlfind`. Директории пакетов будут автоматически удалены."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1983
+msgid ""
+"If the `findplist` argument is provided then contents of the `findlib` "
+"target directories will be added automatically."
+msgstr ""
+"Если указан аргумент `findplist`, то содержимое целевых каталогов `findlib` "
+"будет добавлено автоматически."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1988
+msgid ""
+"If the `ldconfig` argument is provided then OCaml's [.filename]#ld.conf# "
+"file will be automatically processed. When `dune` is used Dune may install "
+"stublibs in site-lib package directory(ies) or in a single directory below "
+"`DUNE_LIBDIR` site-lib directory. Set if your port installs shared "
+"libraries into ocaml"
+msgstr ""
+"Если указан аргумент `ldconfig`, то файл [.filename]#ld.conf# OCaml будет "
+"обработан автоматически. При использовании `dune` Dune может устанавливать "
+"stublibs в директориях пакетов site-lib или в отдельной директории ниже "
+"`DUNE_LIBDIR` site-lib. Установите, если ваш порт устанавливает общие "
+"библиотеки в ocaml"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1990
+msgid "If the `run` argument is provided add ocamlc to `RUN_DEPENDS`."
+msgstr "Если указан аргумент `run`, добавить ocamlc в `RUN_DEPENDS`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1994
+msgid ""
+"If the `tk` argument is provided then a build and run dependency on "
+"package:x11-toolkits/ocaml-labltk[] is added to the port. Implies `tkbuild` "
+"and `tkrun`."
+msgstr ""
+"Если указан аргумент `tk`, то в порт добавляется зависимость на сборку и "
+"выполнение от пакета package:x11-toolkits/ocaml-labltk[]. Подразумевает "
+"`tkbuild` и `tkrun`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1997
+msgid ""
+"If the `tkbuild` argument is provided then package:x11-toolkits/ocaml-"
+"labltk[] is added to `BUILD_DEPENDS`, `EXTRACT` and `PATCH_DEPENDS`."
+msgstr ""
+"Если указан аргумент `tkbuild`, то пакет package:x11-toolkits/ocaml-labltk[] "
+"добавляется в `BUILD_DEPENDS`, `EXTRACT` и `PATCH_DEPENDS`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2000
+msgid ""
+"If the `tkrun` argument is provided then package:x11-toolkits/ocaml-labltk[] "
+"is added to `RUN_DEPENDS`."
+msgstr ""
+"Если указан аргумент `tkrun`, то package:x11-toolkits/ocaml-labltk[] "
+"добавляется в `RUN_DEPENDS`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2003
+msgid ""
+"If the `wash` argument is provided Ocaml's shared directories will be purged "
+"on uninstall. Useful when installing to non-standard `PREFIX`."
+msgstr ""
+"Если указан аргумент `wash`, общие каталоги Ocaml будут очищены при "
+"удалении. Полезно при установке в нестандартный `PREFIX`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2005
+msgid "The following variables can be set by the port:"
+msgstr "Портом могут быть установлены следующие переменные:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2006
+#, no-wrap
+msgid "`OCAML_PKGDIRS`"
+msgstr "`OCAML_PKGDIRS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2008
+msgid ""
+"Directories under site-lib to be processed if the `findlib` argument is "
+"specified. Default: `${PORTNAME}`"
+msgstr ""
+"Каталоги в site-lib для обработки, если указан аргумент `findlib`. По "
+"умолчанию: `${PORTNAME}`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2009
+#, no-wrap
+msgid "`OCAML_LDLIBS`"
+msgstr "`OCAML_LDLIBS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2012
+msgid ""
+"Directories under `PREFIX` to be automatically added/removed from "
+"[.filename]#ld.conf#. Default: `${OCAML_SITELIBDIR}/${PORTNAME}`"
+msgstr ""
+"Каталоги в `PREFIX`, которые будут автоматически добавлены/удалены из "
+"[.filename]#ld.conf#. По умолчанию: `${OCAML_SITELIBDIR}/${PORTNAME}`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2013
+#, no-wrap
+msgid "`OCAML_PACKAGES`"
+msgstr "`OCAML_PACKAGES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2015
+msgid "List of packages to build and install. Default to `${PORTNAME}`"
+msgstr "Список пакетов для сборки и установки. По умолчанию `${PORTNAME}`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2018
+#, no-wrap
+msgid "`octave`"
+msgstr "`octave`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2021
+msgid "Possible arguments: (none), env"
+msgstr "Возможные аргументы: (нет), env"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2024
+msgid ""
+"Uses package:math/octave[]. `env` loads only one `OCTAVE_VERSION` "
+"environmental variable."
+msgstr ""
+"Использует package:math/octave[]. `env` загружает только одну переменную "
+"окружения `OCTAVE_VERSION`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2029
+msgid "Possible arguments: `al`, `soft` (default), `si`, `alut`"
+msgstr "Возможные аргументы: `al`, `soft` (по умолчанию), `si`, `alut`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2034
+msgid ""
+"Uses OpenAL. The backend can be specified, with the software implementation "
+"as the default. The user can specify a preferred backend with "
+"`WANT_OPENAL`. Valid values for this knob are `soft` (default) and `si`."
+msgstr ""
+"Использует OpenAL. Бэкенд может быть указан, с программной реализацией по "
+"умолчанию. Пользователь может указать предпочтительный бэкенд с помощью "
+"`WANT_OPENAL`. Допустимые значения для этой настройки: `soft` (по умолчанию) "
+"и `si`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2036
+#, no-wrap
+msgid "`pathfix`"
+msgstr "`pathfix`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2043
+msgid ""
+"Look for [.filename]#Makefile.in# and [.filename]#configure# in "
+"`PATHFIX_WRKSRC` (defaults to `WRKSRC`) and fix common paths to make sure "
+"they respect the FreeBSD hierarchy. For example, it fixes the installation "
+"directory of `pkgconfig`'s [.filename]#.pc# files to [.filename]#${PREFIX}/"
+"libdata/pkgconfig#. If the port uses `USES=autoreconf`, "
+"[.filename]#Makefile.am# will be added to `PATHFIX_MAKEFILEIN` automatically."
+msgstr ""
+"Ищите [.filename]#Makefile.in# и [.filename]#configure# в `PATHFIX_WRKSRC` "
+"(по умолчанию `WRKSRC`) и исправляйте стандартные пути, чтобы они "
+"соответствовали иерархии FreeBSD. Например, исправляется каталог установки "
+"для файлов [.filename]#.pc# `pkgconfig` на [.filename]#${PREFIX}/libdata/"
+"pkgconfig#. Если порт использует `USES=autoreconf`, [.filename]#Makefile.am# "
+"будет автоматически добавлен в `PATHFIX_MAKEFILEIN`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2046
+msgid ""
+"If the port crossref:uses[uses-cmake,`USES=cmake`] it will look for "
+"[.filename]#CMakeLists.txt# in `PATHFIX_WRKSRC`. If needed, that default "
+"filename can be changed with `PATHFIX_CMAKELISTSTXT`."
+msgstr ""
+"Если порт crossref:uses[uses-cmake,`USES=cmake`], он будет искать файл "
+"[.filename]#CMakeLists.txt# в `PATHFIX_WRKSRC`. При необходимости это имя "
+"файла по умолчанию можно изменить с помощью `PATHFIX_CMAKELISTSTXT`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2048
+#, no-wrap
+msgid "`pear`"
+msgstr "`pear`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2051
+msgid "Possible arguments: `env`"
+msgstr "Возможные аргументы: `env`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2056
+msgid ""
+"Adds a dependency on package:devel/pear[]. It will setup default behavior "
+"for software using the PHP Extension and Application Repository. Using the "
+"`env` arguments only sets up the PEAR environment variables. See "
+"crossref:special[php-pear,PEAR Modules] for more information."
+msgstr ""
+"Добавляет зависимость от пакета package:devel/pear[]. Настраивает поведение "
+"по умолчанию для программного обеспечения, использующего PHP Extension and "
+"Application Repository. Использование аргументов `env` только устанавливает "
+"переменные окружения PEAR. Дополнительную информацию см. в "
+"crossref:special[php-pear,Модули PEAR]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2058
+#, no-wrap
+msgid "`perl5`"
+msgstr "`perl5`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2063
+msgid "Depends on Perl. The configuration is done using `USE_PERL5`."
+msgstr "Зависит от Perl. Настройка выполняется с помощью `USE_PERL5`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2065
+msgid ""
+"`USE_PERL5` can contain the phases in which to use Perl, can be `extract`, "
+"`patch`, `build`, `run`, or `test`."
+msgstr ""
+"`USE_PERL5` может содержать фазы, в которых используется Perl: `extract`, "
+"`patch`, `build`, `run` или `test`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2068
+msgid ""
+"`USE_PERL5` can also contain `configure`, `modbuild`, or `modbuildtiny` when "
+"[.filename]#Makefile.PL#, [.filename]#Build.PL#, or Module::Build::Tiny's "
+"flavor of [.filename]#Build.PL# is required."
+msgstr ""
+"`USE_PERL5` также может содержать `configure`, `modbuild` или "
+"`modbuildtiny`, если требуется [.filename]#Makefile.PL#, "
+"[.filename]#Build.PL# или вариант [.filename]#Build.PL# для "
+"Module::Build::Tiny."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2071
+msgid ""
+"`USE_PERL5` defaults to `build run`. When using `configure`, `modbuild`, or "
+"`modbuildtiny`, `build` and `run` are implied."
+msgstr ""
+"`USE_PERL5` по умолчанию имеет значение `build run`. При использовании "
+"`configure`, `modbuild` или `modbuildtiny`, `build` и `run` подразумеваются "
+"автоматически."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2073
+msgid "See crossref:special[using-perl,Using Perl] for more information."
+msgstr ""
+"См. crossref:special[using-perl,Использование Perl] для получения "
+"дополнительной информации."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2075
+#, no-wrap
+msgid "`pgsql`"
+msgstr "`pgsql`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2078
+msgid "Possible arguments: (none), `_X.Y_`, `_X.Y_+`, `_X.Y_-`, `_X.Y_-_Z.A_`"
+msgstr "Возможные аргументы: (нет), `_X.Y_`, `_X.Y_+`, `_X.Y_-`, `_X.Y_-_Z.A_`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2082
+msgid ""
+"Provide support for PostgreSQL. Port maintainer can set version required. "
+"Minimum and maximum versions or a range can be specified; for example, `9.0-"
+"`, `8.4+`, `8.4-9.2.`"
+msgstr ""
+"Предоставить поддержку PostgreSQL. Ответственный за порт может указать "
+"требуемую версию. Можно указать минимальную и максимальную версии или "
+"диапазон; например, `9.0-`, `8.4+`, `8.4-9.2`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2087
+msgid ""
+"By default, the added dependency will be the client, but if the port "
+"requires additional components, this can be done using "
+"`WANT_PGSQL=_component[:target]_`; for example, `WANT_PGSQL=server:configure "
+"pltcl plperl`. The available components are:"
+msgstr ""
+"По умолчанию добавляемая зависимость будет клиентской, но если порту "
+"требуются дополнительные компоненты, это можно указать с помощью "
+"`WANT_PGSQL=_компонент[:цель]_`; например, `WANT_PGSQL=server:configure "
+"pltcl plperl`. Доступные компоненты:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2089
+msgid "`client`"
+msgstr "`client`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2090
+msgid "`contrib`"
+msgstr "`contrib`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2091
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2823
+msgid "`docs`"
+msgstr "`docs`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2092
+msgid "`pgtcl`"
+msgstr "`pgtcl`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2093
+msgid "`plperl`"
+msgstr "`plperl`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2094
+msgid "`plpython`"
+msgstr "`plpython`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2095
+msgid "`pltcl`"
+msgstr "`pltcl`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2096
+msgid "`server`"
+msgstr "`server`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2098
+#, no-wrap
+msgid "`php`"
+msgstr "`php`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2101
+msgid ""
+"Possible arguments: (none), `phpize`, `ext`, `zend`, `build`, `cli`, `cgi`, "
+"`mod`, `web`, `embed`, `pecl`, `flavors`, `noflavors`"
+msgstr ""
+"Возможные аргументы: (нет), `phpize`, `ext`, `zend`, `build`, `cli`, `cgi`, "
+"`mod`, `web`, `embed`, `pecl`, `flavors`, `noflavors`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2104
+msgid ""
+"Provide support for PHP. Add a runtime dependency on the default PHP "
+"version, package:lang/php81[]."
+msgstr ""
+"Обеспечить поддержку PHP. Добавить зависимость во время выполнения на версию "
+"PHP по умолчанию, package:lang/php81[]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2105
+#, no-wrap
+msgid "`phpize`"
+msgstr "`phpize`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2108
+msgid "Use to build a PHP extension. Enables flavors."
+msgstr "Используется для создания расширения PHP. Поддерживает флейворы."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2109
+#, no-wrap
+msgid "`ext`"
+msgstr "`ext`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2112
+msgid "Use to build, install and register a PHP extension. Enables flavors."
+msgstr ""
+"Используется для сборки, установки и регистрации расширения PHP. "
+"Поддерживает флейворы."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2113
+#, no-wrap
+msgid "`zend`"
+msgstr "`zend`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2116
+msgid "Use to build, install and register a Zend extension. Enables flavors."
+msgstr ""
+"Используется для сборки, установки и регистрации Zend-расширения. "
+"Поддерживает флейворы."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2117
+#, no-wrap
+msgid "`build`"
+msgstr "`build`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2119
+msgid "Set PHP also as a build-time dependency."
+msgstr "Установить PHP также как зависимость во время сборки."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2120
+#, no-wrap
+msgid "`cli`"
+msgstr "`cli`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2122
+msgid "Needs the CLI version of PHP."
+msgstr "Требуется версия PHP для командной строки."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2123
+#, no-wrap
+msgid "`cgi`"
+msgstr "`cgi`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2125
+msgid "Needs the CGI version of PHP."
+msgstr "Требуется CGI-версия PHP."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2126
+#, no-wrap
+msgid "`mod`"
+msgstr "`mod`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2128
+msgid "Needs the Apache module for PHP."
+msgstr "Требуется модуль Apache для PHP."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2129
+#, no-wrap
+msgid "`web`"
+msgstr "`web`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2131
+msgid "Needs the Apache module or the CGI version of PHP."
+msgstr "Требуется модуль Apache или CGI-версия PHP."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2132
+#, no-wrap
+msgid "`embed`"
+msgstr "`embed`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2134
+msgid "Needs the embedded library version of PHP."
+msgstr "Требуется встроенная версия библиотеки PHP."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2135
+#, no-wrap
+msgid "`pecl`"
+msgstr "`pecl`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2138
+msgid ""
+"Provide defaults for fetching PHP extensions from the PECL repository. "
+"Enables flavors."
+msgstr ""
+"Установить значения по умолчанию для загрузки расширений PHP из репозитория "
+"PECL. Включает флейворы."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2139
+#, no-wrap
+msgid "`flavors`"
+msgstr "`flavors`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2143
+msgid ""
+"Enable automatic crossref:flavors[flavors-auto-php,PHP flavors] generation. "
+"Flavors will be generated for all PHP versions, except the ones present in "
+"crossref:uses[uses-php-ignore,`IGNORE_WITH_PHP`]."
+msgstr ""
+"Включить автоматическую генерацию crossref:flavors[flavors-auto-"
+"php,флейворов PHP]. Флейворы будут созданы для всех версий PHP, за "
+"исключением указанных в crossref:uses[uses-php-ignore,`IGNORE_WITH_PHP`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2144
+#, no-wrap
+msgid "`noflavors`"
+msgstr "`noflavors`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2147
+msgid ""
+"Disable automatic PHP flavors generation. _Must only_ be used with "
+"extensions provided by PHP itself."
+msgstr ""
+"Отключить автоматическое создание флейворов PHP. _Должно_ использоваться "
+"только с расширениями, предоставляемыми самим PHP."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2149
+msgid ""
+"Variables are used to specify which PHP modules are required, as well as "
+"which version of PHP are supported."
+msgstr ""
+"Переменные используются для указания необходимых модулей PHP, а также версий "
+"PHP, которые поддерживаются."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2150
+#, no-wrap
+msgid "`USE_PHP`"
+msgstr "`USE_PHP`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2154
+msgid ""
+"The list of required PHP extensions at run-time. Add `:build` to the "
+"extension name to add a build-time dependency. Example: `pcre xml:build "
+"gettext`"
+msgstr ""
+"Список необходимых расширений PHP во время выполнения. Добавьте `:build` к "
+"названию расширения, чтобы указать зависимость во время сборки. Пример: "
+"`pcre xml:build gettext`"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2156
+#, no-wrap
+msgid "`IGNORE_WITH_PHP`"
+msgstr "`IGNORE_WITH_PHP`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2159
+msgid ""
+"The port does not work with PHP of the given version. For possible values "
+"look at the content of `_ALL_PHP_VERSIONS` in [.filename]#Mk/Uses/php.mk#."
+msgstr ""
+"Порт не работает с PHP указанной версии. Возможные значения можно посмотреть "
+"в содержимом `_ALL_PHP_VERSIONS` в [.filename]#Mk/Uses/php.mk#."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2161
+msgid ""
+"When building a PHP or Zend extension with `:ext` or `:zend`, these "
+"variables can be set:"
+msgstr ""
+"При сборке расширения PHP или Zend с помощью `:ext` или `:zend`, можно "
+"задать следующие переменные:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2162
+#, no-wrap
+msgid "`PHP_MODNAME`"
+msgstr "`PHP_MODNAME`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2165
+msgid "The name of the PHP or Zend extension. Default value is `${PORTNAME}`."
+msgstr "Имя расширения PHP или Zend. Значение по умолчанию: `${PORTNAME}`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2166
+#, no-wrap
+msgid "`PHP_HEADER_DIRS`"
+msgstr "`PHP_HEADER_DIRS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2169
+msgid ""
+"A list of subdirectories from which to install header files. The framework "
+"will always install the header files that are present in the same directory "
+"as the extension."
+msgstr ""
+"Список подкаталогов, из которых следует устанавливать заголовочные файлы. "
+"Фреймворк всегда будет устанавливать заголовочные файлы, находящиеся в том "
+"же каталоге, что и расширение."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2170
+#, no-wrap
+msgid "`PHP_MOD_PRIO`"
+msgstr "`PHP_MOD_PRIO`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2173
+msgid ""
+"The priority at which to load the extension. It is a number between `00` "
+"and `99`."
+msgstr "Приоритет загрузки расширения. Это число от `00` до `99`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2178
+msgid ""
+"For extensions that do not depend on any extension, the priority is "
+"automatically set to `20`, for extensions that depend on another extension, "
+"the priority is automatically set to `30`. Some extensions may need to be "
+"loaded before every other extension, for example package:www/php56-"
+"opcache[]. Some may need to be loaded after an extension with a priority of "
+"`30`. In that case, add `PHP_MOD_PRIO=_XX_` in the port's Makefile. For "
+"example:"
+msgstr ""
+"Для расширений, которые не зависят от других расширений, приоритет "
+"автоматически устанавливается в `20`, а для расширений, зависящих от другого "
+"расширения, приоритет автоматически устанавливается в `30`. Некоторые "
+"расширения могут требовать загрузки перед всеми остальными, например, "
+"package:www/php56-opcache[]. Некоторые могут требовать загрузки после "
+"расширения с приоритетом `30`. В таком случае добавьте `PHP_MOD_PRIO=_XX_` в "
+"Makefile порта. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2184
+#, no-wrap
+msgid ""
+"USES=\t\tphp:ext\n"
+"USE_PHP=\twddx\n"
+"PHP_MOD_PRIO=\t40\n"
+msgstr ""
+"USES=\t\tphp:ext\n"
+"USE_PHP=\twddx\n"
+"PHP_MOD_PRIO=\t40\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2187
+msgid ""
+"These variables are available to use in `PKGNAMEPREFIX` or `PKGNAMESUFFIX`:"
+msgstr ""
+"Эти переменные доступны для использования в `PKGNAMEPREFIX` или "
+"`PKGNAMESUFFIX`:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2188
+#, no-wrap
+msgid "`PHP_PKGNAMEPREFIX`"
+msgstr "`PHP_PKGNAMEPREFIX`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2191
+msgid ""
+"Contains `php_XY_-` where _XY_ is the current flavor's PHP version. Use "
+"with PHP extensions and modules."
+msgstr ""
+"Содержит `php_XY_-`, где _XY_ — версия PHP текущей редакции. Используется с "
+"расширениями и модулями PHP."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2192
+#, no-wrap
+msgid "`PHP_PKGNAMESUFFIX`"
+msgstr "`PHP_PKGNAMESUFFIX`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2195
+msgid ""
+"Contains `-php_XY_` where _XY_ is the current flavor's PHP version. Use "
+"with PHP applications."
+msgstr ""
+"Содержит `-php_XY_`, где _XY_ — версия PHP текущего варианта. Используется с "
+"PHP-приложениями."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2196
+#, no-wrap
+msgid "`PECL_PKGNAMEPREFIX`"
+msgstr "`PECL_PKGNAMEPREFIX`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2199
+msgid ""
+"Contains `php_XY_-pecl-` where _XY_ is the current flavor's PHP version. "
+"Use with PECL modules."
+msgstr ""
+"Содержит `php_XY_-pecl-`, где _XY_ — версия PHP текущей редакции. "
+"Используется с модулями PECL."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2204
+msgid ""
+"With flavors, all PHP extensions, PECL extensions, PEAR modules _must have_ "
+"a different package name, so they must all use one of these three variables "
+"in their `PKGNAMEPREFIX` or `PKGNAMESUFFIX`."
+msgstr ""
+"С вариантами сборки все расширения PHP, расширения PECL, модули PEAR _должны "
+"иметь_ разные имена пакетов, поэтому они должны использовать одну из трёх "
+"переменных в `PKGNAMEPREFIX` или `PKGNAMESUFFIX`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2207
+#, no-wrap
+msgid "`pkgconfig`"
+msgstr "`pkgconfig`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2210
+msgid "Possible arguments: (none), `build` (default), `run`, `both`"
+msgstr ""
+"Возможные аргументы: (отсутствуют), `build` (по умолчанию), `run`, `both`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2214
+msgid ""
+"Uses package:devel/pkgconf[]. With no arguments or with the `build` "
+"argument, it implies `pkg-config` as a build-time dependency. `run` implies "
+"a run-time dependency and `both` implies both run-time and build-time "
+"dependencies."
+msgstr ""
+"Использует package:devel/pkgconf[]. Без аргументов или с аргументом `build` "
+"подразумевает зависимость от `pkg-config` во время сборки. `run` "
+"подразумевает зависимость во время выполнения, а `both` — зависимости как во "
+"время выполнения, так и во время сборки."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2216
+#, no-wrap
+msgid "`pure`"
+msgstr "`pure`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2219
+msgid "Possible arguments: (none), `ffi`"
+msgstr "Возможные аргументы: (нет), `ffi`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2223
+msgid ""
+"Uses package:lang/pure[]. Largely used for building related pure ports. "
+"With the `ffi` argument, it implies package:devel/pure-ffi[] as a run-time "
+"dependency."
+msgstr ""
+"Использует package:lang/pure[]. В основном применяется для сборки портов, "
+"зависящих от pure. С аргументом `ffi` подразумевает package:devel/pure-ffi[] "
+"как зависимость во время выполнения."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2225
+#, no-wrap
+msgid "`pyqt`"
+msgstr "`pyqt`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2228
+msgid "Possible arguments: (none), `4`, `5`"
+msgstr "Возможные аргументы: (нет), `4`, `5`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2232
+msgid ""
+"Uses PyQt. If the port is part of PyQT itself, set `PYQT_DIST`. Use "
+"`USE_PYQT` to select the components the port needs. The available "
+"components are:"
+msgstr ""
+"Использует PyQt. Если порт является частью самого PyQT, установите "
+"`PYQT_DIST`. Используйте `USE_PYQT` для выбора необходимых порту "
+"компонентов. Доступные компоненты:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2234
+msgid "`core`"
+msgstr "`core`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2235
+msgid "`dbus`"
+msgstr "`dbus`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2236
+msgid "`dbussupport`"
+msgstr "`dbussupport`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2237
+msgid "`demo`"
+msgstr "`demo`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2238
+msgid "`designer`"
+msgstr "`designer`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2239
+msgid "`designerplugin`"
+msgstr "`designerplugin`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2240
+msgid "`doc`"
+msgstr "`doc`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2241
+msgid "`gui`"
+msgstr "`gui`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2242
+msgid "`multimedia`"
+msgstr "`multimedia`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2243
+msgid "`network`"
+msgstr "`network`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2245
+msgid "`qscintilla2`"
+msgstr "`qscintilla2`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2246
+msgid "`sip`"
+msgstr "`sip`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2247
+msgid "`sql`"
+msgstr "`sql`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2248
+msgid "`svg`"
+msgstr "`svg`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2249
+msgid "`test`"
+msgstr "`test`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2250
+msgid "`webkit`"
+msgstr "`webkit`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2251
+msgid "`xml`"
+msgstr "`xml`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2252
+msgid "`xmlpatterns`"
+msgstr "`xmlpatterns`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2254
+msgid "These components are only available with PyQT4:"
+msgstr "Эти компоненты доступны только с PyQT4:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2256
+msgid "`assistant`"
+msgstr "`assistant`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2257
+msgid "`declarative`"
+msgstr "`declarative`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2258
+msgid "`help`"
+msgstr "`help`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2259
+msgid "`phonon`"
+msgstr "`phonon`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2260
+msgid "`script`"
+msgstr "`script`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2261
+msgid "`scripttools`"
+msgstr "`scripttools`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2263
+msgid "These components are only available with PyQT5:"
+msgstr "Эти компоненты доступны только с PyQT5:"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2265
+msgid "`multimediawidgets`"
+msgstr "`multimediawidgets`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2266
+msgid "`printsupport`"
+msgstr "`printsupport`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2267
+msgid "`qml`"
+msgstr "`qml`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2268
+msgid "`serialport`"
+msgstr "`serialport`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2269
+msgid "`webkitwidgets`"
+msgstr "`webkitwidgets`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2270
+msgid "`widgets`"
+msgstr "`widgets`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2272
+msgid ""
+"The default dependency for each component is build- and run-time, to select "
+"only build or run, add `_build` or `_run` to the component name. For example:"
+msgstr ""
+"Зависимость по умолчанию для каждого компонента — это время сборки и "
+"выполнения. Чтобы выбрать только сборку или выполнение, добавьте `_build` "
+"или `_run` к имени компонента. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2277
+#, no-wrap
+msgid ""
+"USES=\t\tpyqt\n"
+"USE_PYQT=\tcore doc_build designer_run\n"
+msgstr ""
+"USES=\t\tpyqt\n"
+"USE_PYQT=\tcore doc_build designer_run\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2280
+#, no-wrap
+msgid "`pytest`"
+msgstr "`pytest`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2283
+msgid "Possible arguments: (none), 4"
+msgstr "Возможные аргументы: (нет), 4"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2290
+msgid ""
+"Introduces a new dependency on package:devel/pytest[]. It defines a `do-"
+"test` target which will run the tests properly. Use the argument to depend "
+"on a specific package:devel/pytest[] version. For ports using package:devel/"
+"pytest[] consider using this instead of a specific `do-test` target. The "
+"framework exposes the following variables to the port:"
+msgstr ""
+"Вводит новую зависимость от package:devel/pytest[]. Он определяет цель `do-"
+"test`, которая будет правильно запускать тесты. Используйте аргумент, чтобы "
+"зависеть от определённой версии package:devel/pytest[]. Для портов, "
+"использующих package:devel/pytest[], рекомендуется использовать это вместо "
+"конкретной цели `do-test`. Фреймворк предоставляет порту следующие "
+"переменные:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2291
+#, no-wrap
+msgid "`PYTEST_ARGS`"
+msgstr "`PYTEST_ARGS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2293
+msgid "Additional arguments to pytest (defaults to empty)."
+msgstr "Дополнительные аргументы для pytest (по умолчанию пусто)."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2294
+#, no-wrap
+msgid "`PYTEST_IGNORED_TESTS`"
+msgstr "`PYTEST_IGNORED_TESTS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2297
+msgid ""
+"lists of `pytest -k` patterns of tests to ignore (defaults to empty). For "
+"tests which are not expected to pass, such as ones requiring a database "
+"access."
+msgstr ""
+"списки шаблонов `pytest -k` для игнорирования тестов (по умолчанию пустые). "
+"Для тестов, которые не должны проходить, например, требующих доступа к базе "
+"данных."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2298
+#, no-wrap
+msgid "`PYTEST_BROKEN_TESTS`"
+msgstr "`PYTEST_BROKEN_TESTS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2301
+msgid ""
+"lists of `pytest -k` patterns of tests to ignore (defaults to empty). For "
+"broken tests which require fixing."
+msgstr ""
+"списки шаблонов `pytest -k` тестов для игнорирования (по умолчанию пустые). "
+"Для сломанных тестов, которые требуют исправления."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2303
+msgid "In addition the following variables may be set by the user:"
+msgstr "В дополнение следующие переменные могут быть заданы пользователем:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2304
+#, no-wrap
+msgid "`PYTEST_ENABLE_IGNORED_TESTS`"
+msgstr "`PYTEST_ENABLE_IGNORED_TESTS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2306
+msgid "Enable tests which are otherwise ignored by `PYTEST_IGNORED_TESTS`."
+msgstr ""
+"Включить тесты, которые в противном случае игнорируются "
+"`PYTEST_IGNORED_TESTS`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2307
+#, no-wrap
+msgid "`PYTEST_ENABLE_BROKEN_TESTS`"
+msgstr "`PYTEST_ENABLE_BROKEN_TESTS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2309
+msgid "Enable tests which are otherwise ignored by `PYTEST_BROKEN_TESTS`."
+msgstr ""
+"Включить тесты, которые в противном случае игнорируются "
+"`PYTEST_BROKEN_TESTS`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2310
+#, no-wrap
+msgid "`PYTEST_ENABLE_ALL_TESTS`"
+msgstr "`PYTEST_ENABLE_ALL_TESTS`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2313
+msgid ""
+"Enable tests which are otherwise ignored by `PYTEST_IGNORED_TESTS` and "
+"`PYTEST_BROKEN_TESTS`."
+msgstr ""
+"Включить тесты, которые в противном случае игнорируются "
+"`PYTEST_IGNORED_TESTS` и `PYTEST_BROKEN_TESTS`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2316
+#, no-wrap
+msgid "`python`"
+msgstr "`python`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2319
+msgid ""
+"Possible arguments: (none), `_X.Y_`, `_X.Y+_`, `_-X.Y_`, `_X.Y-Z.A_`, "
+"`patch`, `build`, `run`, `test`"
+msgstr ""
+"Возможные аргументы: (нет), `_X.Y_`, `_X.Y+_`, `_-X.Y_`, `_X.Y-Z.A_`, "
+"`patch`, `build`, `run`, `test`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2324
+msgid ""
+"Uses Python. A supported version or version range can be specified. If "
+"Python is only needed at build time, run time or for the tests, it can be "
+"set as a build, run or test dependency with `build`, `run`, or `test`. If "
+"Python is also needed during the patch phase, use `patch`. See "
+"crossref:special[using-python, Using Python] for more information."
+msgstr ""
+"Использует Python. Можно указать поддерживаемую версию или диапазон версий. "
+"Если Python требуется только во время сборки, выполнения или тестирования, "
+"его можно установить как зависимость для сборки, выполнения или тестирования "
+"с помощью `build`, `run` или `test`. Если Python также требуется на этапе "
+"исправлений, используйте `patch`. Дополнительную информацию см. в разделе "
+"crossref:special[using-python,Использование Python]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2327
+msgid ""
+"`USES=python:env` can be used when the variables exported by the framework "
+"are needed but a dependency on Python is not. It can happen when using with "
+"crossref:uses[uses-shebangfix,`USES=shebangfix`], and the goal is only to "
+"fix the shebangs but not add a dependency on Python."
+msgstr ""
+"`USES=python:env` можно использовать, когда необходимы переменные, "
+"экспортируемые фреймворком, но зависимость от Python не требуется. Это может "
+"быть полезно при использовании с crossref:uses[uses-"
+"shebangfix,`USES=shebangfix`], если цель состоит только в исправлении "
+"shebang без добавления зависимости от Python."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2329
+#, no-wrap
+msgid "`qmail`"
+msgstr "`qmail`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2332
+msgid "Possible arguments: (none), `build`, `run`, `both`, `vars`"
+msgstr "Возможные аргументы: (нет), `build`, `run`, `both`, `vars`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2337
+msgid ""
+"Uses package:mail/qmail[]. With the `build` argument, it implies `qmail` as "
+"a build-time dependency. `run` implies a run-time dependency. Using no "
+"argument or the `both` argument implies both run-time and build-time "
+"dependencies. `vars` will only set QMAIL variables for the port to use."
+msgstr ""
+"Использует package:mail/qmail[]. С аргументом `build` подразумевается "
+"зависимость от `qmail` во время сборки. Аргумент `run` подразумевает "
+"зависимость во время выполнения. Использование без аргументов или с "
+"аргументом `both` подразумевает зависимости как во время выполнения, так и "
+"во время сборки. Аргумент `vars` только устанавливает переменные QMAIL для "
+"использования в порте."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2339
+#, no-wrap
+msgid "`qmake`"
+msgstr "`qmake`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2342
+msgid ""
+"Possible arguments: (none), `norecursive`, `outsource`, `no_env`, "
+"`no_configure`"
+msgstr ""
+"Возможные аргументы: (отсутствуют), `norecursive`, `outsource`, `no_env`, "
+"`no_configure`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2344
+msgid ""
+"Uses QMake for configuring. For more information see crossref:special[using-"
+"qmake,Using `qmake`]."
+msgstr ""
+"Использует QMake для настройки. Для получения дополнительной информации см. "
+"crossref:special[using-qmake,Использование `qmake`]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2349
+msgid "Possible arguments: `5`, `6`, `no_env`"
+msgstr "Возможные аргументы: `5`, `6`, `no_env`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2353
+msgid ""
+"Add dependency on Qt components. `no_env` is passed directly to `USES= "
+"qmake`. See crossref:special[using-qt,Using Qt] for more information."
+msgstr ""
+"Добавить зависимость от компонентов Qt. `no_env` передаётся напрямую в "
+"`USES= qmake`. Подробнее см. в crossref:special[using-qt,Использование Qt]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2355
+#, no-wrap
+msgid "`qt-dist`"
+msgstr "`qt-dist`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2358
+#, fuzzy
+#| msgid ""
+#| "Possible arguments: (none) or `5` and (none) or `6` and (none) or one of "
+#| "`3d`, `5compat`, `base`, `charts`, `connectivity`, `datavis3d`, "
+#| "`declarative`, `doc` `languageserver`, `gamepad`, `graphicaleffects`, "
+#| "`imageformats`, `locat ion`, `lottie`, `multimedia`, `networkauth`, "
+#| "`positioning`, `quick3d`, `quickcontrols2`, `quickcontrols`, "
+#| "`quicktimeline`, `remoteobjects`, `script`, `scxml `, `sensors`, "
+#| "`serialbus`, `serialport`, `shadertools`, `speech`, `svg`, `tools`, "
+#| "`translations`, `virtualkeyboard`, `wayland`, `webchannel`, `webengine`, "
+#| "`webglplugin`, `websockets`, `webview`, `x11extras`, `xmlpatterns`.\n"
+msgid ""
+"Possible arguments: (none) or `5` and (none) or `6` and (none) or one of "
+"`3d`, `5compat`, `base`, `charts`, `connectivity`, `datavis3d`, "
+"`declarative`, `doc` `languageserver`, `gamepad`, `graphicaleffects`, "
+"`imageformats`, `locat ion`, `lottie`, `multimedia`, `networkauth`, "
+"`positioning`, `quick3d`, `quickcontrols2`, `quickcontrols`, "
+"`quicktimeline`, `remoteobjects`, `script`, `scxml `, `sensors`, "
+"`serialbus`, `serialport`, `shadertools`, `speech`, `svg`, `tools`, "
+"`translations`, `virtualkeyboard`, `wayland`, `webchannel`, `webengine`, "
+"`webglplugin`, `websockets`, `webview`, `x11extras`, `xmlpatterns`."
+msgstr ""
+"Возможные аргументы: (нет) или `5` и (нет) или `6` и (нет) или один из `3d`, "
+"`5compat`, `base`, `charts`, `connectivity`, `datavis3d`, `declarative`, "
+"`doc`, `languageserver`, `gamepad`, `graphicaleffects`, `imageformats`, "
+"`location`, `lottie`, `multimedia`, `networkauth`, `positioning`, `quick3d`, "
+"`quickcontrols2`, `quickcontrols`, `quicktimeline`, `remoteobjects`, "
+"`script`, `scxml`, `sensors`, `serialbus`, `serialport`, `shadertools`, "
+"`speech`, `svg`, `tools`, `translations`, `virtualkeyboard`, `wayland`, "
+"`webchannel`, `webengine`, `webglplugin`, `websockets`, `webview`, "
+"`x11extras`, `xmlpatterns`.\n"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2361
+msgid ""
+"Provides support for building Qt 5 and Qt 6 components. It takes care of "
+"setting up the appropriate configuration environment for the port to build."
+msgstr ""
+"Предоставляет поддержку сборки компонентов Qt 5 и Qt 6. Обеспечивает "
+"настройку соответствующей конфигурации окружения для сборки порта."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2363
+#, no-wrap
+msgid "Building Qt 5 Components"
+msgstr "Сборка компонентов Qt 5"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2367
+msgid ""
+"The port is Qt 5's `networkauth` component, which is part of the "
+"`networkauth` distribution file."
+msgstr ""
+"Порт представляет собой компонент `networkauth` из Qt 5, который входит в "
+"файл дистрибутива `networkauth`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2372
+#, no-wrap
+msgid ""
+"PORTNAME=\tnetworkauth\n"
+"DISTVERSION=\t${QT5_VERSION}\n"
+msgstr ""
+"PORTNAME=\tnetworkauth\n"
+"DISTVERSION=\t${QT5_VERSION}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2374
+#, no-wrap
+msgid "USES=\t\tqt-dist:5\n"
+msgstr "USES=\t\tqt-dist:5\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2380
+#, no-wrap
+msgid "Building Qt 6 Components"
+msgstr "Сборка компонентов Qt 6"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2384
+msgid ""
+"The port is Qt 6's `websockets` component, which is part of the `websockets` "
+"distribution file."
+msgstr ""
+"Порт представляет собой компонент `websockets` из Qt 6, который входит в "
+"файл дистрибутива `websockets`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2389
+#, no-wrap
+msgid ""
+"PORTNAME= websockets\n"
+"PORTVERSION= ${QT6_VERSION}\n"
+msgstr ""
+"PORTNAME= websockets\n"
+"PORTVERSION= ${QT6_VERSION}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2391
+#, no-wrap
+msgid "USES= qt-dist:6\n"
+msgstr "USES= qt-dist:6\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2396
+msgid ""
+"If `PORTNAME` does not match the component name, it can be passed as an "
+"argument to `qt-dist`."
+msgstr ""
+"Если `PORTNAME` не совпадает с именем компонента, его можно передать как "
+"аргумент в `qt-dist`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2398
+#, no-wrap
+msgid "Building Qt 5 Components with Different Names"
+msgstr "Сборка компонентов Qt 5 с разными именами"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2402
+msgid ""
+"The port is Qt 5's `gui` component, which is part of the `base` distribution "
+"file."
+msgstr ""
+"Порт представляет собой компонент `gui` из Qt 5, который входит в файл "
+"дистрибутива `base`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2407
+#, no-wrap
+msgid ""
+"PORTNAME=\tgui\n"
+"DISTVERSION=\t${QT5_VERSION}\n"
+msgstr ""
+"PORTNAME=\tgui\n"
+"DISTVERSION=\t${QT5_VERSION}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2409
+#, no-wrap
+msgid "USES=\t\tqt-dist:5,base\n"
+msgstr "USES=\t\tqt-dist:5,base\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2414
+#, no-wrap
+msgid "`readline`"
+msgstr "`readline`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2417
+msgid "Possible arguments: (none), `port`"
+msgstr "Возможные аргументы: (нет), `port`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2420
+msgid ""
+"Uses readline as a library dependency, and sets `CPPFLAGS` and `LDFLAGS` as "
+"necessary. If the `port` argument is used or if readline is not present in "
+"the base system, add a dependency on package:devel/readline[]"
+msgstr ""
+"Использует readline в качестве зависимости библиотеки и устанавливает "
+"`CPPFLAGS` и `LDFLAGS` по необходимости. Если используется аргумент `port` "
+"или если readline отсутствует в базовой системе, добавляет зависимость от "
+"package:devel/readline[]"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2423
+#, no-wrap
+msgid "`ruby`"
+msgstr "`ruby`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2426
+msgid "Possible arguments: (none), `build`, `extconf`, `run`, `setup`"
+msgstr "Возможные аргументы: (нет), `build`, `extconf`, `run`, `setup`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2433
+msgid ""
+"Provide support for Ruby related ports. `(none)` without arguments adds "
+"runtime dependency on package:lang/ruby[]. `build` adds a dependency on "
+"package:lang/ruby[] at build time. `extconf` states that the port uses "
+"extconf.rb to configure. `run` adds a dependency on package:lang/ruby[] at "
+"run time. This is also the default. `setup` states that the port uses "
+"setup.rb to configure and build."
+msgstr ""
+"Предоставить поддержку для портов, связанных с Ruby. `(none)` без "
+"аргументов добавляет зависимость во время выполнения на package:lang/"
+"ruby[]. `build` добавляет зависимость на package:lang/ruby[] во время "
+"сборки. `extconf` указывает, что порт использует extconf.rb для настройки. "
+"`run` добавляет зависимость на package:lang/ruby[] во время выполнения. Это "
+"также значение по умолчанию. `setup` указывает, что порт использует "
+"setup.rb для настройки и сборки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2435
+msgid "The user may have the following variables defined:"
+msgstr "Пользователь может определить следующие переменные:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2436
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2453
+#, no-wrap
+msgid "`RUBY_VER`"
+msgstr "`RUBY_VER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2438
+msgid "Alternative short version of ruby in the form of `x.y'."
+msgstr "Альтернативная короткая версия ruby в виде `x.y`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2439
+#, no-wrap
+msgid "`RUBY_DEFAULT_VER`"
+msgstr "`RUBY_DEFAULT_VER`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2441
+msgid "Set to (e.g.) `2.7` to use `ruby27` as the default version."
+msgstr ""
+"Установите (например) `2.7`, чтобы использовать `ruby27` в качестве версии "
+"по умолчанию."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2442
+#, no-wrap
+msgid "`RUBY_ARCH`"
+msgstr "`RUBY_ARCH`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2444
+msgid "Set the architecture name (e.g. i386-freebsd7)."
+msgstr "Установите имя архитектуры (например, i386-freebsd7)."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2446
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2921
+msgid "The following variables are exported to be used by the port:"
+msgstr "Следующие переменные экспортируются для использования портом:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2447
+#, no-wrap
+msgid "`RUBY`"
+msgstr "`RUBY`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2452
+msgid ""
+"Set to full path of ruby. If set, the values of the following variables are "
+"automatically obtained from the ruby executable: `RUBY_ARCH`, "
+"`RUBY_ARCHLIBDIR`, `RUBY_LIBDIR`, `RUBY_SITEARCHLIBDIR`, `RUBY_SITELIBDIR`, "
+"`RUBY_VER` and `RUBY_VERSION`"
+msgstr ""
+"Установлена в полный путь к ruby. Если задано, значения следующих переменных "
+"автоматически получаются из исполняемого файла ruby: `RUBY_ARCH`, "
+"`RUBY_ARCHLIBDIR`, `RUBY_LIBDIR`, `RUBY_SITEARCHLIBDIR`, `RUBY_SITELIBDIR`, "
+"`RUBY_VER` и `RUBY_VERSION`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2455
+msgid "Set to the alternative short version of ruby in the form of `x.y'."
+msgstr "Установлена в альтернативную короткую версию ruby в формате `x.y`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2456
+#, no-wrap
+msgid "`RUBY_EXTCONF`"
+msgstr "`RUBY_EXTCONF`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2458
+msgid "Set to the alternative name of extconf.rb (default: extconf.rb)."
+msgstr ""
+"Установлена в альтернативное имя для extconf.rb (по умолчанию: extconf.rb)."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2459
+#, no-wrap
+msgid "`RUBY_EXTCONF_SUBDIRS`"
+msgstr "`RUBY_EXTCONF_SUBDIRS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2461
+msgid "Set to list of subdirectories, if multiple modules are included."
+msgstr "Установлена в список подкаталогов, если включено несколько модулей."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2462
+#, no-wrap
+msgid "`RUBY_SETUP`"
+msgstr "`RUBY_SETUP`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2464
+msgid "Set to the alternative name of setup.rb (default: setup.rb)."
+msgstr ""
+"Установлена в альтернативное имя для setup.rb (по умолчанию: setup.rb)."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2467
+#, no-wrap
+msgid "`samba`"
+msgstr "`samba`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2470
+msgid "Possible arguments: `build`, `env`, `lib`, `run`"
+msgstr "Возможные аргументы: `build`, `env`, `lib`, `run`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2475
+msgid ""
+"Handle dependency on Samba. `env` will not add any dependency and only set "
+"up the variables. `build` and `run` will add build-time and run-time "
+"dependency on [.filename]#smbd#. `lib` will add a dependency on "
+"[.filename]#libsmbclient.so#. The variables that are exported are:"
+msgstr ""
+"Обработать зависимость от Samba. `env` не добавит никаких зависимостей, а "
+"только установит переменные. `build` и `run` добавят зависимости во время "
+"сборки и выполнения на [.filename]#smbd#. `lib` добавит зависимость на "
+"[.filename]#libsmbclient.so#. Экспортируемые переменные:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2476
+#, no-wrap
+msgid "`SAMBA_PORT`"
+msgstr "`SAMBA_PORT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2478
+msgid "The origin of the default Samba port."
+msgstr "Расположение порта Samba по умолчанию."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2479
+#, no-wrap
+msgid "`SAMBA_INCLUDEDIR`"
+msgstr "`SAMBA_INCLUDEDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2481
+msgid "The location of the Samba header files."
+msgstr "Расположение заголовочных файлов Samba."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2482
+#, no-wrap
+msgid "`SAMBA_LIBS`"
+msgstr "`SAMBA_LIBS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2484
+msgid "The directory where the Samba shared libraries are available."
+msgstr "Каталог, в котором доступны общие библиотеки Samba."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2485
+#, no-wrap
+msgid "`SAMBA_LDB_PORT`"
+msgstr "`SAMBA_LDB_PORT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2488
+msgid ""
+"The origin of the ldb port used by the selected Samba version (e.g., "
+"package:databases/ldb28[]). It should be used if a port needs to depend on "
+"the same ldb version as the selected Samba version."
+msgstr ""
+"Расположение порта ldb, используемого выбранной версией Samba (например, "
+"package:databases/ldb28[]). Он должен использоваться, если порту требуется "
+"зависимость от той же версии ldb, что и у выбранной версии Samba."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2489
+#, no-wrap
+msgid "`SAMBA_TALLOC_PORT`"
+msgstr "`SAMBA_TALLOC_PORT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2492
+msgid ""
+"The origin of the talloc port used by the selected Samba version. It should "
+"be used if a port needs to depend on the same talloc version as the selected "
+"Samba version."
+msgstr ""
+"Расположение порта talloc, используемого выбранной версией Samba. Следует "
+"использовать, если порту требуется зависеть от той же версии talloc, что и "
+"выбранная версия Samba."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2493
+#, no-wrap
+msgid "`SAMBA_TDB_PORT`"
+msgstr "`SAMBA_TDB_PORT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2496
+msgid ""
+"The origin of the TDB port used by the selected Samba version. It should be "
+"used if a port needs to depend on the same TDB version as the selected Samba "
+"version."
+msgstr ""
+"Расположение порта TDB, используемого выбранной версией Samba. Его следует "
+"использовать, если порту требуется зависеть от той же версии TDB, что и "
+"выбранная версия Samba."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2497
+#, no-wrap
+msgid "`SAMBA_TEVENT_PORT`"
+msgstr "`SAMBA_TEVENT_PORT`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2500
+msgid ""
+"The origin of the tevent port used by the selected Samba version. It should "
+"be used if a port needs to depend on the same tevent version as the selected "
+"Samba version."
+msgstr ""
+"Расположение порта tevent, используемого выбранной версией Samba. Это "
+"следует использовать, если порту необходимо зависеть от той же версии "
+"tevent, что и выбранная версия Samba."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2502
+#, no-wrap
+msgid "`scons`"
+msgstr "`scons`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2508
+msgid ""
+"Provide support for the use of package:devel/scons[]. See "
+"crossref:special[using-scons,Using `scons`] for more information."
+msgstr ""
+"Предоставить поддержку для использования package:devel/scons[]. "
+"Дополнительную информацию смотрите в crossref:special[using-"
+"scons,Использование `scons`]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2510
+#, no-wrap
+msgid "`sdl`"
+msgstr "`sdl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2513
+msgid "Possible arguments: `sdl`"
+msgstr "Возможные аргументы: `sdl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2517
+msgid ""
+"Provide support for the use of `SDL` packages. The variable `USE_SDL` is "
+"mandatory and specifies which components to add as dependencies."
+msgstr ""
+"Обеспечить поддержку использования пакетов `SDL`. Переменная `USE_SDL` "
+"является обязательной и указывает, какие компоненты добавить в зависимости."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2519
+msgid "The current supported `SDL1.2` modules are:"
+msgstr "Поддерживаемые в настоящее время модули `SDL1.2`:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2521
+msgid "sdl"
+msgstr "sdl"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2522
+msgid "console"
+msgstr "console"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2523
+msgid "gfx"
+msgstr "gfx"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2524
+msgid "image"
+msgstr "image"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2525
+msgid "mixer"
+msgstr "mixer"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2526
+msgid "mm"
+msgstr "mm"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2527
+msgid "net"
+msgstr "net"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2528
+msgid "pango"
+msgstr "pango"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2529
+msgid "sound"
+msgstr "sound"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2530
+msgid "ttf"
+msgstr "ttf"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2532
+msgid "The current supported `SDL2` modules are:"
+msgstr "Текущие поддерживаемые модули `SDL2`:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2534
+msgid "sdl2"
+msgstr "sdl2"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2535
+msgid "gfx2"
+msgstr "gfx2"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2536
+msgid "image2"
+msgstr "image2"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2537
+msgid "mixer2"
+msgstr "mixer2"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2538
+msgid "net2"
+msgstr "net2"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2539
+msgid "sound2"
+msgstr "sound2"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2540
+msgid "ttf2"
+msgstr "ttf2"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2542
+msgid "The current supported `SDL3` modules are:"
+msgstr "Текущие поддерживаемые модули `SDL3`:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2544
+msgid "sdl3"
+msgstr "sdl3"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2545
+msgid "image3"
+msgstr "image3"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2546
+msgid "ttf3"
+msgstr "ttf3"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2548
+#, no-wrap
+msgid "`shared-mime-info`"
+msgstr "`shared-mime-info`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2555
+msgid ""
+"Uses update-mime-database from package:misc/shared-mime-info[]. This uses "
+"will automatically add a post-install step in such a way that the port "
+"itself still can specify there own post-install step if needed. It also add "
+"an crossref:plist[plist-keywords-shared-mime-info,`@shared-mime-info`] entry "
+"to the plist."
+msgstr ""
+"Использует update-mime-database из пакета package:misc/shared-mime-info[]. "
+"Это автоматически добавит шаг post-install таким образом, что сам порт всё "
+"ещё может указать собственный шаг post-install при необходимости. Также "
+"добавляет запись crossref:plist[plist-keywords-shared-mime-info,`@shared-"
+"mime-info`] в plist."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2557
+#, no-wrap
+msgid "`shebangfix`"
+msgstr "`shebangfix`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2563
+msgid ""
+"A lot of software uses incorrect locations for script interpreters, most "
+"notably [.filename]#/usr/bin/perl# and [.filename]#/bin/bash#. The "
+"shebangfix macro fixes shebang lines in scripts listed in `SHEBANG_REGEX`, "
+"`SHEBANG_GLOB`, or `SHEBANG_FILES`."
+msgstr ""
+"Множество программ используют некорректные расположения для интерпретаторов "
+"скриптов, особенно [.filename]#/usr/bin/perl# и [.filename]#/bin/bash#. "
+"Макрос shebangfix исправляет строки shebang в скриптах, перечисленных в "
+"`SHEBANG_REGEX`, `SHEBANG_GLOB` или `SHEBANG_FILES`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2564
+#, no-wrap
+msgid "`SHEBANG_REGEX`"
+msgstr "`SHEBANG_REGEX`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2567
+msgid ""
+"Contains _one_ extended regular expressions, and is used with the `-iregex` "
+"argument of man:find[1]. See crossref:uses[uses-shebangfix-ex-"
+"regex,`USESshebangfix` with `SHEBANG_REGEX`]."
+msgstr ""
+"Содержит _одно_ расширенное регулярное выражение и используется с аргументом "
+"`-iregex` в man:find[1]. См. crossref:uses[uses-shebangfix-ex-"
+"regex,`USESshebangfix` с `SHEBANG_REGEX`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2568
+#, no-wrap
+msgid "`SHEBANG_GLOB`"
+msgstr "`SHEBANG_GLOB`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2571
+msgid ""
+"Contains a list of patterns used with the `-name` argument of man:find[1]. "
+"See crossref:uses[uses-shebangfix-ex-glob,`USESshebangfix` with "
+"`SHEBANG_GLOB`]."
+msgstr ""
+"Содержит список шаблонов, используемых с аргументом `-name` в man:find[1]. "
+"См. crossref:uses[uses-shebangfix-ex-glob,`USESshebangfix` с `SHEBANG_GLOB`]."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2572
+#, no-wrap
+msgid "`SHEBANG_FILES`"
+msgstr "`SHEBANG_FILES`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2577
+msgid ""
+"Contains a list of files or man:sh[1] globs. The shebangfix macro is run "
+"from `${WRKSRC}`, so `SHEBANG_FILES` can contain paths that are relative to "
+"`${WRKSRC}`. It can also deal with absolute paths if files outside of `$"
+"{WRKSRC}` require patching. See crossref:uses[uses-shebangfix-ex-"
+"files,`USESshebangfix` with `SHEBANG_FILES`]."
+msgstr ""
+"Содержит список файлов или шаблонов man:sh[1]. Макрос shebangfix выполняется "
+"из `${WRKSRC}`, поэтому `SHEBANG_FILES` может содержать пути, относительные "
+"к `${WRKSRC}`. Также он может работать с абсолютными путями, если требуется "
+"исправление файлов вне `${WRKSRC}`. См. crossref:uses[uses-shebangfix-ex-"
+"files,`USESshebangfix` с `SHEBANG_FILES`]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2579
+msgid ""
+"Currently Bash, Java, Ksh, Lua, Perl, PHP, Python, Ruby, Tcl, and Tk are "
+"supported by default."
+msgstr ""
+"В настоящее время Bash, Java, Ksh, Lua, Perl, PHP, Python, Ruby, Tcl и Tk "
+"поддерживаются по умолчанию."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2581
+msgid "There are three configuration variables:"
+msgstr "Существует три переменных конфигурации:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2582
+#, no-wrap
+msgid "`SHEBANG_LANG`"
+msgstr "`SHEBANG_LANG`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2584
+msgid "The list of supported interpreters."
+msgstr "Список поддерживаемых интерпретаторов."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2585
+#, no-wrap
+msgid "`_interp__CMD`"
+msgstr "`_interp__CMD`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2588
+msgid ""
+"The path to the command interpreter on FreeBSD. The default value is `$"
+"{LOCALBASE}/bin/_interp_`."
+msgstr ""
+"Путь к интерпретатору команд в FreeBSD. Значение по умолчанию — `$"
+"{LOCALBASE}/bin/_interp_`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2589
+#, no-wrap
+msgid "`_interp__OLD_CMD`"
+msgstr "`_interp__OLD_CMD`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2593
+msgid ""
+"The list of wrong invocations of interpreters. These are typically obsolete "
+"paths, or paths used on other operating systems that are incorrect on "
+"FreeBSD. They will be replaced by the correct path in `_interp__CMD`."
+msgstr ""
+"Список неправильных вызовов интерпретаторов. Обычно это устаревшие пути или "
+"пути, используемые в других операционных системах, которые неверны в "
+"FreeBSD. Они будут заменены на правильные пути в `_interp__CMD`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2597
+msgid ""
+"These will _always_ be part of `_interp__OLD_CMD`: `\"/usr/bin/env "
+"_interp_\" /bin/_interp_ /usr/bin/_interp_ /usr/local/bin/_interp_`."
+msgstr ""
+"Эти пути _всегда_ будут частью `_interp__OLD_CMD`: `\"/usr/bin/env "
+"_interp_\" /bin/_interp_ /usr/bin/_interp_ /usr/local/bin/_interp_`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2604
+msgid ""
+"`_interp__OLD_CMD` contain multiple values. Any entry with spaces must be "
+"quoted. See crossref:uses[uses-shebangfix-ex-ksh,Specifying all the Paths "
+"When Adding an Interpreter to `USESshebangfix`]."
+msgstr ""
+"`_interp__OLD_CMD` содержит несколько значений. Любая запись с пробелами "
+"должна быть заключена в кавычки. См. crossref:uses[uses-shebangfix-ex-"
+"ksh,Указание всех путей при добавлении интерпретатора в `USESshebangfix`]."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2610
+msgid ""
+"The fixing of shebangs is done during the `patch` phase. If scripts are "
+"created with incorrect shebangs during the `build` phase, the build process "
+"(for example, the [.filename]#configure# script, or the "
+"[.filename]#Makefiles#) must be patched or given the right path (for "
+"example, with `CONFIGURE_ENV`, `CONFIGURE_ARGS`, `MAKE_ENV`, or `MAKE_ARGS`) "
+"to generate the right shebangs."
+msgstr ""
+"Исправление шебанг-строк выполняется на этапе `patch`. Если скрипты "
+"создаются с некорректными шебанг-строками на этапе `build`, процесс сборки "
+"(например, скрипт [.filename]#configure# или [.filename]#Makefiles#) должен "
+"быть исправлен или ему должен быть указан правильный путь (например, с "
+"помощью `CONFIGURE_ENV`, `CONFIGURE_ARGS`, `MAKE_ENV` или `MAKE_ARGS`) для "
+"генерации корректных шебанг-строк."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2612
+msgid ""
+"Correct paths for supported interpreters are available in `_interp__CMD`."
+msgstr ""
+"Правильные пути для поддерживаемых интерпретаторов доступны в `_interp__CMD`."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2617
+msgid ""
+"When used with crossref:uses[uses-python,`USES=python`], and the aim is only "
+"to fix the shebangs but a dependency on Python itself is not wanted, use "
+"`USES=python:env` instead."
+msgstr ""
+"При использовании с crossref:uses[uses-python,`USES=python`], если цель "
+"состоит только в исправлении shebang, но зависимость от самого Python не "
+"требуется, используйте `USES=python:env`."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2620
+#, no-wrap
+msgid "Adding Another Interpreter to `USES=shebangfix`"
+msgstr "Добавление другого интерпретатора в `USES=shebangfix`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2625
+msgid "To add another interpreter, set `SHEBANG_LANG`. For example:"
+msgstr ""
+"Чтобы добавить другой интерпретатор, установите `SHEBANG_LANG`. Например:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2629
+#, no-wrap
+msgid "SHEBANG_LANG=\tlua\n"
+msgstr "SHEBANG_LANG=\tlua\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2634
+#, no-wrap
+msgid "Specifying all the Paths When Adding an Interpreter to `USES=shebangfix`"
+msgstr "Указание всех путей при добавлении интерпретатора в `USES=shebangfix`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2638
+msgid ""
+"If it was not already defined, and there were no default values for "
+"`_interp__OLD_CMD` and `_interp__CMD` the Ksh entry could be defined as:"
+msgstr ""
+"Если они еще не были определены и не было значений по умолчанию для "
+"`_interp__OLD_CMD` и `_interp__CMD`, запись Ksh можно определить как:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2644
+#, no-wrap
+msgid ""
+"SHEBANG_LANG=\tksh\n"
+"ksh_OLD_CMD=\t\"/usr/bin/env ksh\" /bin/ksh /usr/bin/ksh\n"
+"ksh_CMD=\t${LOCALBASE}/bin/ksh\n"
+msgstr ""
+"SHEBANG_LANG=\tksh\n"
+"ksh_OLD_CMD=\t\"/usr/bin/env ksh\" /bin/ksh /usr/bin/ksh\n"
+"ksh_CMD=\t${LOCALBASE}/bin/ksh\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2649
+#, no-wrap
+msgid "Adding a Strange Location for an Interpreter"
+msgstr "Добавление нестандартного расположения интерпретатора"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2655
+msgid ""
+"Some software uses strange locations for an interpreter. For example, an "
+"application might expect Python to be located in [.filename]#/opt/bin/"
+"python2.7#. The strange path to be replaced can be declared in the port "
+"[.filename]#Makefile#:"
+msgstr ""
+"Некоторое программное обеспечение использует нестандартные пути для "
+"интерпретатора. Например, приложение может ожидать, что Python будет "
+"расположен в [.filename]#/opt/bin/python2.7#. Нестандартный путь, который "
+"нужно заменить, можно указать в [.filename]#Makefile# порта:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2659
+#, no-wrap
+msgid "python_OLD_CMD=\t/opt/bin/python2.7\n"
+msgstr "python_OLD_CMD=\t/opt/bin/python2.7\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2664
+#, no-wrap
+msgid "`USES=shebangfix` with `SHEBANG_REGEX`"
+msgstr "`USES=shebangfix` с `SHEBANG_REGEX`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2668
+msgid ""
+"To fix all the files in `${WRKSRC}/scripts` ending in [.filename]#.pl#, "
+"[.filename]#.sh#, or [.filename]#.cgi# do:"
+msgstr ""
+"Для исправления всех файлов в `${WRKSRC}/scripts`, оканчивающихся на "
+"[.filename]#.pl#, [.filename]#.sh# или [.filename]#.cgi#, выполните:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2673
+#, no-wrap
+msgid ""
+"USES=\tshebangfix\n"
+"SHEBANG_REGEX=\t./scripts/.*\\.(sh|pl|cgi)\n"
+msgstr ""
+"USES=\tshebangfix\n"
+"SHEBANG_REGEX=\t./scripts/.*\\.(sh|pl|cgi)\n"
+
+#. type: delimited block = 6
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2679
+msgid ""
+"`SHEBANG_REGEX` is used by running `find -E`, which uses modern regular "
+"expressions also known as extended regular expressions. See "
+"man:re_format[7] for more information."
+msgstr ""
+"`SHEBANG_REGEX` используется при выполнении `find -E`, который применяет "
+"современные регулярные выражения, также известные как расширенные регулярные "
+"выражения. Подробнее см. в man:re_format[7]."
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2684
+#, no-wrap
+msgid "`USES=shebangfix` with `SHEBANG_GLOB`"
+msgstr "`USES=shebangfix` с `SHEBANG_GLOB`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2688
+msgid ""
+"To fix all the files in `${WRKSRC}` ending in [.filename]#.pl# or "
+"[.filename]#.sh#, do:"
+msgstr ""
+"Для исправления всех файлов в `${WRKSRC}` с окончанием [.filename]#.pl# или "
+"[.filename]#.sh# выполните:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2693
+#, no-wrap
+msgid ""
+"USES=\tshebangfix\n"
+"SHEBANG_GLOB=\t*.sh *.pl\n"
+msgstr ""
+"USES=\tshebangfix\n"
+"SHEBANG_GLOB=\t*.sh *.pl\n"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2698
+#, no-wrap
+msgid "`USES=shebangfix` with `SHEBANG_FILES`"
+msgstr "`USES=shebangfix` с `SHEBANG_FILES`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2702
+msgid ""
+"To fix the files [.filename]#script/foobar.pl# and [.filename]#script/*.sh# "
+"in `${WRKSRC}`, do:"
+msgstr ""
+"Для исправления файлов [.filename]#script/foobar.pl# и [.filename]#script/"
+"*.sh# в `${WRKSRC}` выполните:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2707
+#, no-wrap
+msgid ""
+"USES=\tshebangfix\n"
+"SHEBANG_FILES=\tscripts/foobar.pl scripts/*.sh\n"
+msgstr ""
+"USES=\tshebangfix\n"
+"SHEBANG_FILES=\tscripts/foobar.pl scripts/*.sh\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2712
+#, no-wrap
+msgid "`sqlite`"
+msgstr "`sqlite`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2715
+msgid "Possible arguments: (none), `2`, `3`"
+msgstr "Возможные аргументы: (нет), `2`, `3`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2718
+msgid ""
+"Add a dependency on SQLite. The default version used is 3, but version 2 is "
+"also possible using the `:2` modifier."
+msgstr ""
+"Добавить зависимость от SQLite. Используемая по умолчанию версия — 3, но "
+"также возможна версия 2 с использованием модификатора `:2`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2720
+#, no-wrap
+msgid "`sbrk`"
+msgstr "`sbrk`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2725
+msgid "Marks the port as `BROKEN` in `aarch64` and `riscv64`."
+msgstr "Помечает порт как `BROKEN` для `aarch64` и `riscv64`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2727
+#, no-wrap
+msgid "`ssl`"
+msgstr "`ssl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2730
+msgid "Possible arguments: (none), `build`, `run`"
+msgstr "Возможные аргументы: (нет), `build`, `run`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2734
+msgid ""
+"Provide support for OpenSSL. A build- or run-time only dependency can be "
+"specified using `build` or `run`. These variables are available for the "
+"port's use, they are also added to `MAKE_ENV`:"
+msgstr ""
+"Обеспечить поддержку OpenSSL. Зависимость только для сборки или выполнения "
+"может быть указана с использованием `build` или `run`. Эти переменные "
+"доступны для использования портом, а также добавлены в `MAKE_ENV`:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2735
+#, no-wrap
+msgid "`OPENSSLBASE`"
+msgstr "`OPENSSLBASE`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2737
+msgid "Path to the OpenSSL installation base."
+msgstr "Путь к базовой установке OpenSSL."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2738
+#, no-wrap
+msgid "`OPENSSLDIR`"
+msgstr "`OPENSSLDIR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2740
+msgid "Path to OpenSSL's configuration files."
+msgstr "Путь к файлам конфигурации OpenSSL."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2741
+#, no-wrap
+msgid "`OPENSSLLIB`"
+msgstr "`OPENSSLLIB`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2743
+msgid "Path to the OpenSSL libraries."
+msgstr "Путь к библиотекам OpenSSL."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2744
+#, no-wrap
+msgid "`OPENSSLINC`"
+msgstr "`OPENSSLINC`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2746
+msgid "Path to the OpenSSL includes."
+msgstr "Путь к заголовочным файлам OpenSSL."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2747
+#, no-wrap
+msgid "`OPENSSLRPATH`"
+msgstr "`OPENSSLRPATH`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2749
+msgid ""
+"If defined, the path the linker needs to use to find the OpenSSL libraries."
+msgstr ""
+"Если определено, путь, который требуется компоновщику для поиска библиотек "
+"OpenSSL."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2753
+msgid ""
+"If a port does not build with an OpenSSL flavor, set the `BROKEN_SSL` "
+"variable, and possibly the `BROKEN_SSL_REASON__flavor_`:"
+msgstr ""
+"Если порт не собирается с вариантом OpenSSL, установите переменную "
+"`BROKEN_SSL`, а также, возможно, `BROKEN_SSL_REASON__flavor_`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2758
+#, no-wrap
+msgid ""
+"BROKEN_SSL=\tlibressl\n"
+"BROKEN_SSL_REASON_libressl=\tneeds features only available in OpenSSL\n"
+msgstr ""
+"BROKEN_SSL=\tlibressl\n"
+"BROKEN_SSL_REASON_libressl=\tneeds features only available in OpenSSL\n"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2763
+#, no-wrap
+msgid "`tar`"
+msgstr "`tar`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2767
+msgid ""
+"Possible arguments: (none), `Z`, `bz2`, `bzip2`, `lzma`, `tbz`, `tbz2`, "
+"`tgz`, `txz`, `xz`, `zst`, `zstd`"
+msgstr ""
+"Возможные аргументы: (нет), `Z`, `bz2`, `bzip2`, `lzma`, `tbz`, `tbz2`, "
+"`tgz`, `txz`, `xz`, `zst`, `zstd`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2770
+msgid ""
+"Set `EXTRACT_SUFX` to `.tar`, `.tar.Z`, `.tar.bz2`, `.tar.bz2`, `.tar.lzma`, "
+"`.tbz`, `.tbz2`, `.tgz`, `.txz`, `.tar.xz`, `.tar.zst` or `.tar.zstd` "
+"respectively."
+msgstr ""
+"Установите `EXTRACT_SUFX` в `.tar`, `.tar.Z`, `.tar.bz2`, `.tar.bz2`, "
+"`.tar.lzma`, `.tbz`, `.tbz2`, `.tgz`, `.txz`, `.tar.xz`, `.tar.zst` или "
+"`.tar.zstd` соответственно."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2772
+#, no-wrap
+msgid "`tcl`"
+msgstr "`tcl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2775
+msgid "Possible arguments: _version_, `wrapper`, `build`, `run`, `tea`"
+msgstr "Возможные аргументы: _version_, `wrapper`, `build`, `run`, `tea`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2782
+msgid ""
+"Add a dependency on Tcl. A specific version can be requested using "
+"_version_. The version can be empty, one or more exact version numbers "
+"(currently `84`, `85`, or `86`), or a minimal version number (currently "
+"`84+`, `85+` or `86+`). To only request a non version specific wrapper, use "
+"`wrapper`. A build- or run-time only dependency can be specified using "
+"`build` or `run`. To build the port using the Tcl Extension Architecture, "
+"use `tea`. After including [.filename]#bsd.port.pre.mk# the port can "
+"inspect the results using these variables:"
+msgstr ""
+"Добавьте зависимость от Tcl. Конкретная версия может быть запрошена с "
+"помощью _version_. Версия может быть пустой, одной или несколькими точными "
+"номерами версий (в настоящее время `84`, `85` или `86`), либо минимальным "
+"номером версии (в настоящее время `84+`, `85+` или `86+`). Чтобы запросить "
+"только неспецифичную для версии обёртку, используйте `wrapper`. Зависимость "
+"только на время сборки или выполнения может быть указана с помощью `build` "
+"или `run`. Для сборки порта с использованием Tcl Extension Architecture "
+"используйте `tea`. После включения [.filename]#bsd.port.pre.mk# порт может "
+"проверить результаты с помощью этих переменных:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2784
+msgid "`TCL_VER`: chosen major.minor version of Tcl"
+msgstr "`TCL_VER`: выбранная версия Tcl в формате major.minor"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2785
+msgid "`TCLSH`: full path of the Tcl interpreter"
+msgstr "`TCLSH`: полный путь к интерпретатору Tcl"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2786
+msgid "`TCL_LIBDIR`: path of the Tcl libraries"
+msgstr "`TCL_LIBDIR`: путь к библиотекам Tcl"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2787
+msgid "`TCL_INCLUDEDIR`: path of the Tcl C header files"
+msgstr "`TCL_INCLUDEDIR`: путь к заголовочным файлам Tcl на языке C"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2788
+msgid "`TCL_PKG_LIB_PREFIX`: Library prefix, as per TIP595"
+msgstr "`TCL_PKG_LIB_PREFIX`: Префикс библиотеки, согласно TIP595"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2789
+msgid "`TCL_PKG_STUB_POSTFIX`: Stub library postfix"
+msgstr "`TCL_PKG_STUB_POSTFIX`: Постфикс библиотеки заглушки"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2790
+msgid "`TK_VER`: chosen major.minor version of Tk"
+msgstr "`TK_VER`: выбранная версия Tk в формате major.minor"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2791
+msgid "`WISH`: full path of the Tk interpreter"
+msgstr "`WISH`: полный путь к интерпретатору Tk"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2792
+msgid "`TK_LIBDIR`: path of the Tk libraries"
+msgstr "`TK_LIBDIR`: путь к библиотекам Tk"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2793
+msgid "`TK_INCLUDEDIR`: path of the Tk C header files"
+msgstr "`TK_INCLUDEDIR`: путь к заголовочным файлам Tk на языке C"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2795
+#, no-wrap
+msgid "`terminfo`"
+msgstr "`terminfo`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2801
+msgid ""
+"Adds crossref:plist[plist-keywords-terminfo,`@terminfo`] to the "
+"[.filename]#plist#. Use when the port installs [.filename]#*.terminfo# "
+"files in [.filename]#${PREFIX}/share/misc#."
+msgstr ""
+"Добавляет crossref:plist[plist-keywords-terminfo,`@terminfo`] в файл "
+"[.filename]#plist#. Используется, когда порт устанавливает файлы "
+"[.filename]#*.terminfo# в каталог [.filename]#${PREFIX}/share/misc#."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2803
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2838
+#, no-wrap
+msgid "`tex`"
+msgstr "`tex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2809
+msgid ""
+"Provide support for tex. Loads all the default variables for TEX related "
+"ports and does not add any dependency on any ports."
+msgstr ""
+"Обеспечить поддержку tex. Загружает все стандартные переменные для портов, "
+"связанных с TEX, и не добавляет зависимостей от других портов."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2811
+msgid "Variables are used to specify which TEX modules are required."
+msgstr "Переменные используются для указания того, какие модули TEX требуются."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2812
+#, no-wrap
+msgid "`USE_TEX`"
+msgstr "`USE_TEX`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2816
+msgid ""
+"The list of required TEX extensions at run-time. Add `:build` to the "
+"extension name to add a build-time dependency, `:run` to add runtime "
+"dependency, `:test` for test time dependency, `:extract` for extract time "
+"dependency. Example: `base texmf:build source:run`"
+msgstr ""
+"Список необходимых расширений TEX во время выполнения. Добавьте `:build` к "
+"названию расширения, чтобы добавить зависимость на время сборки, `:run` — "
+"для зависимости во время выполнения, `:test` — для зависимости во время "
+"тестирования, `:extract` — для зависимости во время извлечения. Пример: "
+"`base texmf:build source:run`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2818
+msgid "Current possible arguments are as follows:"
+msgstr "Текущие возможные аргументы следующие:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2821
+msgid "`texmf`"
+msgstr "`texmf`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2822
+msgid "`source`"
+msgstr "`source`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2824
+msgid "`web2c`"
+msgstr "`web2c`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2825
+msgid "`kpathsea`"
+msgstr "`kpathsea`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2826
+msgid "`ptexenc`"
+msgstr "`ptexenc`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2827
+msgid "`basic`"
+msgstr "`basic`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2828
+msgid "`tlmgr`"
+msgstr "`tlmgr`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2829
+msgid "`texlua`"
+msgstr "`texlua`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2830
+msgid "`texluajit`"
+msgstr "`texluajit`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2831
+msgid "`synctex`"
+msgstr "`synctex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2832
+msgid "`xpdfopen`"
+msgstr "`xpdfopen`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2833
+msgid "`dvipsk`"
+msgstr "`dvipsk`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2834
+msgid "`dvipdfmx`"
+msgstr "`dvipdfmx`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2835
+msgid "`xdvik`"
+msgstr "`xdvik`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2836
+msgid "`gbklatex`"
+msgstr "`gbklatex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2837
+msgid "`formats`"
+msgstr "`formats`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2839
+msgid "`latex`"
+msgstr "`latex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2840
+msgid "`pdftex`"
+msgstr "`pdftex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2841
+msgid "`jadetex`"
+msgstr "`jadetex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2842
+msgid "`luatex`"
+msgstr "`luatex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2843
+msgid "`ptex`"
+msgstr "`ptex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2844
+msgid "`xetex`"
+msgstr "`xetex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2845
+msgid "`xmltex`"
+msgstr "`xmltex`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2846
+msgid "`texhash`"
+msgstr "`texhash`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2847
+msgid "`updmap`"
+msgstr "`updmap`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2848
+msgid "`fmtutil`"
+msgstr "`fmtutil`"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2850
+#, no-wrap
+msgid "`tk`"
+msgstr "`tk`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2853
+msgid "Same as arguments for `tcl`"
+msgstr "Так же, как аргументы для `tcl`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2856
+msgid ""
+"Small wrapper when using both Tcl and Tk. The same variables are returned "
+"as when using Tcl."
+msgstr ""
+"Небольшая обертка при использовании Tcl и Tk. Возвращаются те же переменные, "
+"что и при использовании Tcl."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2858
+#, no-wrap
+msgid "`trigger`"
+msgstr "`trigger`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2864
+msgid ""
+"Provide support for ports requiring triggers to be executed by man:pkg[8]. "
+"Triggers are executed at the end of a transaction if the conditions are met."
+msgstr ""
+"Предоставить поддержку для портов, требующих выполнения триггеров с помощью "
+"man:pkg[8]. Триггеры выполняются в конце транзакции, если условия выполнены."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2866
+msgid "The following variable can be set by ports:"
+msgstr "Следующая переменная может быть установлена портами:"
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2867
+#, no-wrap
+msgid "`TRIGGERS`"
+msgstr "`TRIGGERS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2869
+msgid "List of triggers to package. Defaults to `${PORTNAME}`."
+msgstr "Список триггеров для пакета. По умолчанию используется `${PORTNAME}`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2872
+msgid ""
+"Triggers are specified in UCL format and are usually placed in the "
+"[.filename]#files/# directory of the port."
+msgstr ""
+"Триггеры указываются в формате UCL и обычно размещаются в каталоге "
+"[.filename]#files/# порта."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2874
+#, no-wrap
+msgid "`uidfix`"
+msgstr "`uidfix`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2880
+msgid ""
+"Changes some default behavior (mostly variables) of the build system to "
+"allow installing this port as a normal user. Try this in the port before "
+"using crossref:uses[uses-fakeroot,`USES=fakeroot`] or patching."
+msgstr ""
+"Изменяет некоторые стандартные настройки (в основном переменные) системы "
+"сборки, чтобы позволить установку этого порта обычным пользователем. "
+"Попробуйте это в порте перед использованием crossref:uses[uses-"
+"fakeroot,`USES=fakeroot`] или исправлением."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2882
+#, no-wrap
+msgid "`uniquefiles`"
+msgstr "`uniquefiles`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2885
+msgid "Possible arguments: (none), `dirs`"
+msgstr "Возможные аргументы: (нет), `dirs`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2889
+msgid ""
+"Make files or directories 'unique', by adding a prefix or suffix. If the "
+"`dirs` argument is used, the port needs a prefix (and only a prefix) based "
+"on `UNIQUE_PREFIX` for standard directories `DOCSDIR`, `EXAMPLESDIR`, "
+"`DATADIR`, `WWWDIR`, `ETCDIR`. These variables are available for ports:"
+msgstr ""
+"Сделать файлы или каталоги 'уникальными', добавляя префикс или суффикс. Если "
+"используется аргумент `dirs`, порту требуется префикс (и только префикс) на "
+"основе `UNIQUE_PREFIX` для стандартных каталогов `DOCSDIR`, `EXAMPLESDIR`, "
+"`DATADIR`, `WWWDIR`, `ETCDIR`. Эти переменные доступны для портов:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2891
+msgid ""
+"`UNIQUE_PREFIX`: The prefix to be used for directories and files. Default: `$"
+"{PKGNAMEPREFIX}`."
+msgstr ""
+"`UNIQUE_PREFIX`: Префикс, используемый для каталогов и файлов. По умолчанию: "
+"`${PKGNAMEPREFIX}`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2892
+msgid ""
+"`UNIQUE_PREFIX_FILES`: A list of files that need to be prefixed. Default: "
+"empty."
+msgstr ""
+"`UNIQUE_PREFIX_FILES`: Список файлов, которые необходимо предварить "
+"префиксом. По умолчанию: пусто."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2893
+msgid ""
+"`UNIQUE_SUFFIX`: The suffix to be used for files. Default: `${PKGNAMESUFFIX}"
+"`."
+msgstr ""
+"`UNIQUE_SUFFIX`: Суффикс, используемый для файлов. По умолчанию: `$"
+"{PKGNAMESUFFIX}`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2894
+msgid ""
+"`UNIQUE_SUFFIX_FILES`: A list of files that need to be suffixed. Default: "
+"empty."
+msgstr ""
+"`UNIQUE_SUFFIX_FILES`: Список файлов, к которым необходимо добавить суффикс. "
+"По умолчанию: пусто."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2896
+#, no-wrap
+msgid "`vala`"
+msgstr "`vala`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2899
+msgid "Possible arguments: `build`, `lib`, `no_depend`"
+msgstr "Возможные аргументы: `build`, `lib`, `no_depend`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2902
+msgid ""
+"Adds build or library dependencies on package:lang/vala[]. The `no_depend` "
+"argument is reserved for package:lang/vala[] itself."
+msgstr ""
+"Добавляет зависимости сборки или библиотеки на package:lang/vala[]. Аргумент "
+"`no_depend` зарезервирован для самого package:lang/vala[]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2904
+#, no-wrap
+msgid "`varnish`"
+msgstr "`varnish`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2907
+msgid "Possible arguments: `4` (default), `6`, `7`"
+msgstr "Возможные аргументы: `4` (по умолчанию), `6`, `7`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2910
+msgid ""
+"Handle dependencies on Varnish Cache. Adds a dependency on package:www/"
+"varnish*[]."
+msgstr ""
+"Обрабатывает зависимости для Varnish Cache. Добавляет зависимость от пакета "
+"`package:www/varnish*[]`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2912
+#, no-wrap
+msgid "`waf`"
+msgstr "`waf`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2917
+msgid "Provide support for ports using the `waf` build system."
+msgstr "Обеспечить поддержку портов, использующих систему сборки `waf`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2919
+msgid "It implies `USES=python:build`."
+msgstr "Это подразумевает `USES=python:build`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2922
+#, no-wrap
+msgid "`WAF_CMD`"
+msgstr "`WAF_CMD`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2925
+msgid ""
+"Location of the `waf` script. Set this if the `waf` script is not in "
+"[.filename]#WRKSRC/waf#."
+msgstr ""
+"Расположение скрипта `waf`. Установите этот параметр, если скрипт `waf` не "
+"находится в [.filename]#WRKSRC/waf#."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2926
+#, no-wrap
+msgid "`CONFIGURE_TARGET`"
+msgstr "`CONFIGURE_TARGET`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2928
+msgid "`Configure` target. Default `configure`."
+msgstr "Цель для `configure`. По умолчанию – `configure`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2929
+#, no-wrap
+msgid "`ALL_TARGET`"
+msgstr "`ALL_TARGET`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2931
+msgid "`All` target. Default `build`."
+msgstr "Цель для `all`. По умолчанию `build`."
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2932
+#, no-wrap
+msgid "`INSTALL_TARGET`"
+msgstr "`INSTALL_TARGET`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2934
+msgid "`Install` target. Default `install`."
+msgstr "Цель для `install`. По умолчанию `install`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2936
+#, no-wrap
+msgid "`webplugin`"
+msgstr "`webplugin`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2939
+msgid "Possible arguments: (none), `ARGS`"
+msgstr "Возможные аргументы: (нет), `ARGS`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2942
+msgid ""
+"Automatically create and remove symbolic links for each application that "
+"supports the webplugin framework. `ARGS` can be one of:"
+msgstr ""
+"Автоматически создавать и удалять символические ссылки для каждого "
+"приложения, поддерживающего фреймворк webplugin. `ARGS` может быть одним из:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2944
+msgid "`gecko`: support plug-ins based on Gecko"
+msgstr "`gecko`: поддержка плагинов на основе Gecko"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2945
+msgid "`native`: support plug-ins for Gecko, Opera, and WebKit-GTK"
+msgstr "`native`: поддержка плагинов для Gecko, Opera и WebKit-GTK"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2946
+msgid "`linux`: support Linux plug-ins"
+msgstr "`linux`: поддержка Linux плагинов"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2947
+msgid "`all` (default, implicit): support all plug-in types"
+msgstr "`all` (по умолчанию, неявно): поддержка всех типов плагинов"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2948
+msgid "(individual entries): support only the browsers listed"
+msgstr "(отдельные записи): поддерживаются только перечисленные браузеры"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2950
+msgid "These variables can be adjusted:"
+msgstr "Эти переменные можно настроить:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2952
+msgid ""
+"`WEBPLUGIN_FILES`: No default, must be set manually. The plug-in files to "
+"install."
+msgstr ""
+"`WEBPLUGIN_FILES`: Значение по умолчанию отсутствует, должно быть "
+"установлено вручную. Файлы плагинов для установки."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2953
+msgid ""
+"`WEBPLUGIN_DIR`: The directory to install the plug-in files to, default "
+"[.filename]#PREFIX/lib/browser_plugins/WEBPLUGIN_NAME#. Set this if the port "
+"installs plug-in files outside of the default directory to prevent broken "
+"symbolic links."
+msgstr ""
+"`WEBPLUGIN_DIR`: Каталог для установки файлов плагина, по умолчанию "
+"[.filename]#PREFIX/lib/browser_plugins/WEBPLUGIN_NAME#. Установите это "
+"значение, если порт устанавливает файлы плагина вне стандартного каталога, "
+"чтобы избежать битых символических ссылок."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2954
+msgid ""
+"`WEBPLUGIN_NAME`: The final directory to install the plug-in files into, "
+"default `PKGBASE`."
+msgstr ""
+"`WEBPLUGIN_NAME`: Конечный каталог для установки файлов плагина, по "
+"умолчанию `PKGBASE`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2956
+#, no-wrap
+msgid "`xfce`"
+msgstr "`xfce`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2959
+msgid "Possible arguments: (none), `gtk2`"
+msgstr "Возможные аргументы: (нет), `gtk2`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2962
+msgid ""
+"Provide support for Xfce related ports. See crossref:special[using-"
+"xfce,Using Xfce] for details."
+msgstr ""
+"Предоставить поддержку для портов, связанных с Xfce. Подробности см. в "
+"crossref:special[using-xfce,Использование Xfce]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2965
+msgid ""
+"The `gtk2` argument specifies that the port requires GTK2 support. It adds "
+"additional features provided by some core components, for example, "
+"package:x11/libxfce4menu[] and package:x11-wm/xfce4-panel[]."
+msgstr ""
+"Аргумент `gtk2` указывает, что порт требует поддержки GTK2. Он добавляет "
+"дополнительные возможности, предоставляемые некоторыми основными "
+"компонентами, например, package:x11/libxfce4menu[] и package:x11-wm/xfce4-"
+"panel[]."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2967
+#, no-wrap
+msgid "`xorg`"
+msgstr "`xorg`"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2974
+msgid ""
+"Provides an easy way to depend on X.org components. The components should "
+"be listed in `USE_XORG`. The available components are:"
+msgstr ""
+"Предоставляет простой способ зависеть от компонентов X.org. Компоненты "
+"должны быть перечислены в `USE_XORG`. Доступные компоненты:"
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2976
+#, no-wrap
+msgid "Available X.Org Components"
+msgstr "Доступные компоненты X.Org"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2980
+#, no-wrap
+msgid "Name"
+msgstr "Имя"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2982
+#, no-wrap
+msgid "Description"
+msgstr "Описание"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2983
+#, no-wrap
+msgid "`dmx`"
+msgstr "`dmx`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2985
+#, no-wrap
+msgid "DMX extension library"
+msgstr "Библиотека расширений DMX"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2986
+#, no-wrap
+msgid "`fontenc`"
+msgstr "`fontenc`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2988
+#, no-wrap
+msgid "The fontenc Library"
+msgstr "Библиотека fontenc"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2989
+#, no-wrap
+msgid "`fontutil`"
+msgstr "`fontutil`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2991
+#, no-wrap
+msgid "Create an index of X font files in a directory"
+msgstr "Создать индекс файлов шрифтов X в каталоге"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2992
+#, no-wrap
+msgid "`ice`"
+msgstr "`ice`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2994
+#, no-wrap
+msgid "Inter Client Exchange library for X11"
+msgstr "Библиотека Inter Client Exchange для X11"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2995
+#, no-wrap
+msgid "`libfs`"
+msgstr "`libfs`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2997
+#, no-wrap
+msgid "The FS library"
+msgstr "Библиотека FS"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2998
+#, no-wrap
+msgid "`pciaccess`"
+msgstr "`pciaccess`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3000
+#, no-wrap
+msgid "Generic PCI access library"
+msgstr "Универсальная библиотека доступа к PCI"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3003
+#, no-wrap
+msgid "Low-level pixel manipulation library"
+msgstr "Библиотека для низкоуровневого управления пикселями"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3004
+#, no-wrap
+msgid "`sm`"
+msgstr "`sm`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3006
+#, no-wrap
+msgid "Session Management library for X11"
+msgstr "Библиотека управления сеансами для X11"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3007
+#, no-wrap
+msgid "`x11`"
+msgstr "`x11`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3009
+#, no-wrap
+msgid "X11 library"
+msgstr "Библиотека X11"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3010
+#, no-wrap
+msgid "`xau`"
+msgstr "`xau`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3012
+#, no-wrap
+msgid "Authentication Protocol library for X11"
+msgstr "Библиотека протокола аутентификации для X11"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3013
+#, no-wrap
+msgid "`xaw`"
+msgstr "`xaw`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3015
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3018
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3021
+#, no-wrap
+msgid "X Athena Widgets library"
+msgstr "Библиотека X Athena Widgets"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3016
+#, no-wrap
+msgid "`xaw6`"
+msgstr "`xaw6`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3019
+#, no-wrap
+msgid "`xaw7`"
+msgstr "`xaw7`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3022
+#, no-wrap
+msgid "`xbitmaps`"
+msgstr "`xbitmaps`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3024
+#, no-wrap
+msgid "X.Org bitmaps data"
+msgstr "Данные растровых изображений X.Org"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3025
+#, no-wrap
+msgid "`xcb`"
+msgstr "`xcb`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3027
+#, no-wrap
+msgid "The X protocol C-language Binding (XCB) library"
+msgstr "Библиотека с интерфейсом языка С для X протокола (XCB)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3028
+#, no-wrap
+msgid "`xcomposite`"
+msgstr "`xcomposite`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3030
+#, no-wrap
+msgid "X Composite extension library"
+msgstr "Библиотека расширения X Composite"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3031
+#, no-wrap
+msgid "`xcursor`"
+msgstr "`xcursor`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3033
+#, no-wrap
+msgid "X client-side cursor loading library"
+msgstr "X библиотека загрузки курсоров на стороне клиента"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3034
+#, no-wrap
+msgid "`xdamage`"
+msgstr "`xdamage`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3036
+#, no-wrap
+msgid "X Damage extension library"
+msgstr "Библиотека расширения X Damage"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3037
+#, no-wrap
+msgid "`xdmcp`"
+msgstr "`xdmcp`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3039
+#, no-wrap
+msgid "X Display Manager Control Protocol library"
+msgstr "Библиотека протокола управления дисплейным менеджером X (XDMCP)"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3040
+#, no-wrap
+msgid "`xext`"
+msgstr "`xext`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3042
+#, no-wrap
+msgid "X11 Extension library"
+msgstr "Библиотека расширений X11"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3043
+#, no-wrap
+msgid "`xfixes`"
+msgstr "`xfixes`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3045
+#, no-wrap
+msgid "X Fixes extension library"
+msgstr "Библиотека расширений X Fixes"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3046
+#, no-wrap
+msgid "`xfont`"
+msgstr "`xfont`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3048
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3051
+#, no-wrap
+msgid "X font library"
+msgstr "Библиотека шрифтов X"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3049
+#, no-wrap
+msgid "`xfont2`"
+msgstr "`xfont2`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3052
+#, no-wrap
+msgid "`xft`"
+msgstr "`xft`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3054
+#, no-wrap
+msgid "Client-sided font API for X applications"
+msgstr "Клиентский API шрифтов для приложений X"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3055
+#, no-wrap
+msgid "`xi`"
+msgstr "`xi`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3057
+#, no-wrap
+msgid "X Input extension library"
+msgstr "Библиотека расширения X Input"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3058
+#, no-wrap
+msgid "`xinerama`"
+msgstr "`xinerama`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3060
+#, no-wrap
+msgid "X11 Xinerama library"
+msgstr "Библиотека X11 Xinerama"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3061
+#, no-wrap
+msgid "`xkbfile`"
+msgstr "`xkbfile`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3063
+#, no-wrap
+msgid "XKB file library"
+msgstr "Библиотека файлов XKB"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3064
+#, no-wrap
+msgid "`xmu`"
+msgstr "`xmu`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3066
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3069
+#, no-wrap
+msgid "X Miscellaneous Utilities libraries"
+msgstr "Библиотека X Miscellaneous Utilities"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3067
+#, no-wrap
+msgid "`xmuu`"
+msgstr "`xmuu`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3070
+#, no-wrap
+msgid "`xorg-macros`"
+msgstr "`xorg-macros`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3072
+#, no-wrap
+msgid "X.Org development aclocal macros"
+msgstr "X.Org макросы разработки aclocal"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3073
+#, no-wrap
+msgid "`xorg-server`"
+msgstr "`xorg-server`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3075
+#, no-wrap
+msgid "X.Org X server and related programs"
+msgstr "Сервер X.Org X и относящиеся к нему программы"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3076
+#, no-wrap
+msgid "`xorgproto`"
+msgstr "`xorgproto`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3078
+#, no-wrap
+msgid "xorg protocol headers"
+msgstr "Заголовочные файлы протокола xorg"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3079
+#, no-wrap
+msgid "`xpm`"
+msgstr "`xpm`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3081
+#, no-wrap
+msgid "X Pixmap library"
+msgstr "Библиотека X Pixmap"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3082
+#, no-wrap
+msgid "`xpresent`"
+msgstr "`xpresent`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3084
+#, no-wrap
+msgid "X Present Extension library"
+msgstr "Библиотека расширений X Present"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3085
+#, no-wrap
+msgid "`xrandr`"
+msgstr "`xrandr`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3087
+#, no-wrap
+msgid "X Resize and Rotate extension library"
+msgstr "Библиотека расширений X Resize and Rotate"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3088
+#, no-wrap
+msgid "`xrender`"
+msgstr "`xrender`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3090
+#, no-wrap
+msgid "X Render extension library"
+msgstr "Библиотека расширения X Render"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3091
+#, no-wrap
+msgid "`xres`"
+msgstr "`xres`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3093
+#, no-wrap
+msgid "X Resource usage library"
+msgstr "Библиотека мониторинга ресурсов X Resource usage"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3094
+#, no-wrap
+msgid "`xscrnsaver`"
+msgstr "`xscrnsaver`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3096
+#, no-wrap
+msgid "The XScrnSaver library"
+msgstr "Библиотека XScrnSaver"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3097
+#, no-wrap
+msgid "`xshmfence`"
+msgstr "`xshmfence`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3099
+#, no-wrap
+msgid "Shared memory 'SyncFence' synchronization primitive"
+msgstr "Примитив синхронизации \"SyncFence\" в разделяемой памяти"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3100
+#, no-wrap
+msgid "`xt`"
+msgstr "`xt`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3102
+#, no-wrap
+msgid "X Toolkit library"
+msgstr "Библиотека X Toolkit"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3103
+#, no-wrap
+msgid "`xtrans`"
+msgstr "`xtrans`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3105
+#, no-wrap
+msgid "Abstract network code for X"
+msgstr "Абстрактный сетевой код для X"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3106
+#, no-wrap
+msgid "`xtst`"
+msgstr "`xtst`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3108
+#, no-wrap
+msgid "X Test extension"
+msgstr "Расширение X Test"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3109
+#, no-wrap
+msgid "`xv`"
+msgstr "`xv`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3111
+#, no-wrap
+msgid "X Video Extension library"
+msgstr "Библиотека расширения X Video"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3112
+#, no-wrap
+msgid "`xvmc`"
+msgstr "`xvmc`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3114
+#, no-wrap
+msgid "X Video Extension Motion Compensation library"
+msgstr "Библиотека X Video Extension Motion Compensation"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3115
+#, no-wrap
+msgid "`xxf86dga`"
+msgstr "`xxf86dga`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3117
+#, no-wrap
+msgid "X DGA Extension"
+msgstr "Расширение X DGA"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3118
+#, no-wrap
+msgid "`xxf86vm`"
+msgstr "`xxf86vm`"
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3119
+#, no-wrap
+msgid "X Vidmode Extension"
+msgstr "Расширение X Vidmode"
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3122
+#, no-wrap
+msgid "`xorg-cat`"
+msgstr "`xorg-cat`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3125
+msgid ""
+"Possible arguments: `app`, `data`, `doc`, `driver`, `font`, `lib`, `proto`, "
+"`util`, `xserver` and (none) or one off `autotools` (default), `meson`"
+msgstr ""
+"Возможные аргументы: `app`, `data`, `doc`, `driver`, `font`, `lib`, `proto`, "
+"`util`, `xserver` и (без аргументов) или один из `autotools` (по умолчанию), "
+"`meson`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3129
+msgid ""
+"Provide support for building Xorg components. It takes care of setting up "
+"common dependencies and an appropriate configuration environment needed. "
+"This is intended only for Xorg components."
+msgstr ""
+"Обеспечивает поддержку сборки компонентов Xorg. Управляет настройкой общих "
+"зависимостей и необходимой конфигурационной среды. Предназначено только для "
+"компонентов Xorg."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3131
+msgid "The category has to match upstream categories."
+msgstr "Категория должна соответствовать категориям вышестоящего репозитория."
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3134
+msgid ""
+"The second argument is the build system to use. autotools is the default, "
+"but meson is also supported."
+msgstr ""
+"Второй аргумент — используемая система сборки. По умолчанию используется "
+"`autotools`, но также поддерживается `meson`."
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3136
+#, no-wrap
+msgid "`zip`"
+msgstr "`zip`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3139
+msgid "Possible arguments: (none), `infozip`"
+msgstr "Возможные аргументы: (нет), `infozip`"
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:3141
+msgid ""
+"Indicates that the distribution files use the ZIP compression algorithm. "
+"For files using the InfoZip algorithm the `infozip` argument must be passed "
+"to set the appropriate dependencies."
+msgstr ""
+"Указывает, что файлы дистрибутива используют алгоритм сжатия ZIP. Для "
+"файлов, использующих алгоритм InfoZip, необходимо передать аргумент "
+"`infozip`, чтобы установить соответствующие зависимости."
diff --git a/documentation/content/ru/books/porters-handbook/versions/_index.adoc b/documentation/content/ru/books/porters-handbook/versions/_index.adoc
index 26bc8c466e..de0e82114f 100644
--- a/documentation/content/ru/books/porters-handbook/versions/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/versions/_index.adoc
@@ -1,10 +1,12 @@
---
-title: Глава 16. Значения __FreeBSD_version
+description: 'Список изменений файла sys/param.h'
+params:
+ path: /books/porters-handbook/versions/
prev: books/porters-handbook/uses
showBookMenu: true
-weight: 16
-params:
- path: "/books/porters-handbook/versions/"
+tags: ["FreeBSD versions"]
+title: 'Глава 18. Значения __FreeBSD_version'
+weight: 18
---
[[versions]]
@@ -15,7 +17,7 @@ params:
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 16
+:sectnumoffset: 18
:partnums:
:source-highlighter: rouge
:experimental:
@@ -45,6313 +47,7575 @@ toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
-Here is a convenient list of `__FreeBSD_version` values as defined in http://svnweb.FreeBSD.org/base/head/sys/sys/param.h?view=markup[sys/param.h]:
+Здесь удобный список значений `__FreeBSD_version` как определено в https://cgit.freebsd.org/src/tree/sys/sys/param.h[sys/param.h]:
+
+[[versions-15]]
+== Версии FreeBSD 15
+
+[[freebsd-versions-table-15]]
+.Значения `__FreeBSD_version` в FreeBSD 15
+[cols="1,1,1,1", frame="none", options="header"]
+|===
+| Значение
+| Версия
+| Дата
+| Релиз
+
+|1500000
+|gitref:29a16ce065dbc28bc9e87c9bfadb08bb58b137e4[repository="src",length=12]
+|24 августа 2023
+|15.0-CURRENT.
+
+|1500001
+|gitref:a6662c37b6ffee46e18be5f7570149edc64c1d0b[repository="src",length=12]
+|17 сентября 2023
+|15.0-CURRENT после реализации `fpu_kern_enter` и `fpu_kern_leave` для powerpc.
+
+|1500002
+|gitref:17f5e2b904aff8e4863199a137ee21ef0939bcf4[repository="src",length=12]
+|18 октября 2023
+|15.0-CURRENT после изменения внутреннего KAPI между модулями nfscommon и nfscl.
+
+|1500003
+|gitref:ef85fd507e6e1784a726bccd485129e00bb63311[repository="src",length=12]
+|1 ноября 2023
+|15.0-CURRENT после удаления кода обратной совместимости для преобразования inode64.
+
+|1500004
+|gitref:7fabea328fed60d5207b262d2372e85a7f731eef[repository="src",length=12]
+|23 ноября 2023
+|15.0-CURRENT после добавления новой функции VFS под названием `vfs_exjail_clone()`, которая будет использоваться модулем ZFS.
+
+|1500005
+|gitref:21fce617d1de231a30833cdd9819ef61277b08d8[repository="src",length=12]
+|27 ноября 2023
+|15.0-CURRENT после серии механических изменений в дереве: идентификаторы SCCS удалены, закомментированные строки с авторскими правами удалены с помощью `#if 0`, механические исправления стиля после этих изменений и удаление некоторых макросов из [.filename]#sys/cdefs.h#.
+
+|1500006
+|gitref:c711af7727824da79d87f375f3d6829feec3799a[repository="src",length=12]
+|8 декабря 2023
+|15.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до llvmorg-17.0.6-0-g6009708b4367, также известного как релиз 17.0.6.
+
+|1500007
+|gitref:8ccd0b876e67fda6249f294ff484798cc1e1569f[repository="src",length=12]
+|11 декабря 2023
+|15.0-CURRENT после предоставления доступа к execvpe для совместимости с Linux в libc.
+
+|1500008
+|gitref:9bf957fc9b378e0f9e65eb97e84c2166b450fccc[repository="src",length=12]
+|24 декабря 2023
+|15.0-CURRENT после изменений в LinuxKPI.
+
+|1500009
+|gitref:b068bb09a1a82d9fef0e939ad6135443a959e290[repository="src",length=12]
+|11 января 2024
+|15.0-CURRENT после добавления man:vnode_pager_clean_async[9] и man:vnode_pager_clean_sync[9].
+
+|1500010
+|gitref:a2da1bdb61bc2d9db0b4268f53281e7c0bbce0bc[repository="src",length=12]
+|12 января 2024
+|15.0-CURRENT после изменения внутреннего KAPI между модулями nfscommon и nfscl.
+
+|1500011
+|gitref:a2da1bdb61bc2d9db0b4268f53281e7c0bbce0bc[repository="src",length=12]
+|17 января 2024
+|15.0-CURRENT после добавления поддержки zfs.dataset в man:jail[8].
+
+|1500012
+|gitref:120ceebab5d4947dfc80d7492effa034a925d43e[repository="src",length=12]
+|24 января 2024
+|15.0-CURRENT после добавления man:kern_openatfp[9] и man:kcmp[2].
+
+|1500013
+|gitref:d04abb05375d3525132f1e9f78090db3d0d27f14[repository="src",length=12]
+|7 февраля 2024
+|15.0-CURRENT после добавления libsys.
+
+|1500014
+|gitref:ed27ae8df4b10f67289a32458d89d143e758f6d4[repository="src",length=12]
+|11 февраля 2024
+|15.0-CURRENT после переключения clang и других исполняемых файлов LLVM на сборку как PIE.
+
+|1500015
+|gitref:a7b9f4d96e8bdc30db27ec7a193a8d8fdf7c652c[repository="src",length=12]
+|13 марта 2024
+|15.0-CURRENT после удаления избыточных аргументов `type` и `rid` из нескольких функций в API ресурсов new-bus.
+
+|1500016
+|gitref:60bc9617e79e99bdf670304923f3baed4b749ad3[repository="src",length=12]
+|18 марта 2024
+|15.0-CURRENT после введения man:livedump_start_vnode[9].
+
+|1500017
+|gitref:bcd401b5a39c6186bb1fe450286299f2a481244c[repository="src",length=12]
+|20 марта 2024
+|15.0-CURRENT после исправления утверждения или сбоя clang при сборке последних библиотек boost.
+
+|1500018
+|gitref:0192eda105b367d4670205547e8e830e3716bea3[repository="src",length=12]
+|6 апреля 2024
+|15.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии llvmorg-18.1.3-0-gc13b7485b879, также известной как релиз 18.1.3.
+
+|1500019
+|gitref:e03e8b07743385e5b199409074fb60b1a9ed1fac[repository="src",length=12]
+|31 мая 2024
+|15.0-CURRENT после переопределения `CLOCK_BOOTTIME` как псевдонима для `CLOCK_MONOTONIC` вместо `CLOCK_UPTIME`.
+
+|1500020
+|gitref:7818c2d37c2c600fc9ad6f2a0951e50dd21b17c8[repository="src",length=12]
+|12 июля 2024
+|15.0-CURRENT после удаления поддержки сборки armv6.
+
+|1500021
+|gitref:24388fccd551f79f64e54099a7d78196535c0a29[repository="src",length=12]
+|21 июля 2024
+|15.0-CURRENT после изменений в LinuxKPI.
+
+|1500022
+|gitref:a1740cb93639648b41055958ad8c7f6083efdc96[repository="src",length=12]
+|29 июля 2024
+|15.0-CURRENT после удаления поддержки подкачки стека ядра.
+
+|1500023
+|gitref:1206cf04a717a55bc15255ed043b066941cb43f2[repository="src",length=12]
+|30 июля 2024
+|15.0-CURRENT после добавления новых флагов в man:malloc[9].
+
+|1500024
+|gitref:e3953c036f9d66c85b8e19f99f0710b3288ce5fb[repository="src",length=12]
+|2 октября 2024
+|15.0-CURRENT после увеличения версии [.filename]#libmd.so.6# до [.filename]#libmd.so.7#.
+
+|1500025
+|gitref:9d52823bf1dfac237e58b5208299aaa5e2df42e9[repository="src",length=12]
+|6 октября 2024
+|15.0-CURRENT после расширения поля `flags` в `vm_object`.
+
+|1500026
+|gitref:f3dbef108212460489ae68b4c47e20b73984f433[repository="src",length=12]
+|23 октября 2024
+|15.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии llvmorg-19.1.2-0-g7ba7d8e2f7b6, также известной как релиз 19.1.2.
+
+|1500027
+|gitref:893d044346d5ae5fe10cc188b8b0762efd2a5b27[repository="src",length=12]
+|14 ноября 2024
+|15.0-CURRENT после скрытия `struct ifnet` и изменения KPI регистрации устройств man:sound[4].
+
+|1500028
+|gitref:cab31f5633c1ffdd8b24749a3c9dd22c59568503[repository="src",length=12]
+|25 ноября 2024
+|15.0-CURRENT после добавления флага `TDA_PSELECT` для раннего восстановления масок сигналов.
+
+|1500029
+|gitref:46297859a74563dde6fc5bff9f9ecded9fb61ba6[repository="src",length=12]
+|6 декабря 2024
+|15.0-CURRENT после добавления `bus_attach_children`, `bus_detach_children` и `bus_identify_children`.
+
+|1500030
+|gitref:b196276c20b577b364372f1aa1a646b9ce34bf5c[repository="src",length=12]
+|2 января 2025
+|15.0-CURRENT после изменения `bus_generic_detach` для удаления дочерних устройств после их отключения.
+
+|1500037
+|gitref:7acd5af48cf1870ec48d5910dff1a26466d98074[repository="src",length=12]
+|12 апреля 2025
+|15.0-CURRENT после внесения изменений в alloc в LinuxKPI.
+
+|1500038
+|gitref:[repository="src",length=12]
+|19 апреля 2025
+|15.0-CURRENT после удаления vm_page_next() и _prev.
+
+|1500039
+|gitref:[repository="src",length=12]
+|4 мая 2025
+|15.0-CURRENT после введения правильно типизированных jiffies.
+
+|1500040
+|gitref:[repository="src",length=12]
+|4 мая 2025
+|15.0-CURRENT после изменения внутреннего API между модулями nfscommon и nfscl.
+
+|1500045
+|gitref:a02180cf60a6a0102669b678e9c81ad9f1aa4d91[repository="src",length=12]
+|3 июня 2025
+|15.0-CURRENT после внесения изменений dma-mapping.h из drm-kmod в LinuxKPI.
+
+|1500062
+|gitref:567e6250c003eeb251b4bc8dbe60d2adabab2988[repository="src",length=12]
+|17 августа 2025
+|15.0-CURRENT после добавления VTYPE_ISDEV(), VN_ISDEV() и VATTR_ISDEV().
+
+|===
+
+[[versions-14]]
+== Версии FreeBSD 14
+
+[[freebsd-versions-table-14]]
+.Значения `__FreeBSD_version` в FreeBSD 14
+[cols="1,1,1,1", frame="none", options="header"]
+|===
+| Значение
+| Версия
+| Дата
+| Релиз
+
+|1400000
+|gitref:a53ce3fc4938e37d5ec89304846203d2083c61a2[repository="src",length=12]
+|22 января 2021
+|14.0-CURRENT.
+
+|1400001
+|gitref:739ecbcf1c4fd22b5f6ee0bb180a67644046a3e0[repository="src",length=12]
+|23 января 2021
+|14.0-CURRENT после добавления поддержки символьных ссылок к бесблокировочному поиску.
+
+|1400002
+|gitref:2cf84258922f306a3f84866685d2f5346f67db58[repository="src",length=12]
+|26 января 2021
+|14.0-CURRENT после исправления утверждения clang при сборке порта package:devel/onetbb[].
+
+|1400003
+|gitref:d386f3a3c32f0396aa7995349dd65d6c59711393[repository="src",length=12]
+|28 января 2021
+|14.0-CURRENT после добавления различных компонентов LinuxKPI, конфликтующих с drm-kmod.
+
+|1400004
+|gitref:68f6800ce05c386ff045b4416d8595d09c4d8fdd[repository="src",length=12]
+|8 февраля 2021
+|14.0-CURRENT после изменения интерфейсов ядра для диспетчеризации криптографических операций.
+
+|1400005
+|gitref:45eabf5754ac1d291bd677fdf29f59ce4bbc2c8f[repository="src",length=12]
+|17 февраля 2021
+|14.0-CURRENT после изменения API man:ptrace[2] `PT_GETDBREGS`/`PT_SETDBREGS` на arm64.
+
+|1400006
+|gitref:c96151d33509655efb7fb26768cb56a041c176f1[repository="src",length=12]
+|17 марта 2021
+|14.0-CURRENT после добавления перечисляющих ioctl в man:sndstat[4].
+
+|1400007
+|gitref:d36d6816151705907393889d661cbfd25c630ca8[repository="src",length=12]
+|6 апреля 2021
+|14.0-CURRENT после исправления некорректного `dlpi_tls_data`.
+
+|1400008
+|gitref:e152bbecb221a592e7dbcabe3d1170a60f0d0dfe[repository="src",length=12]
+|11 апреля 2021
+|14.0-CURRENT после изменения внутреннего KAPI между модулями `krpc` и NFS.
+
+|1400009
+|gitref:9ca874cf740ee68c5742df8b5f9e20910085c011[repository="src",length=12]
+|20 апреля 2021
+|14.0-CURRENT после добавления поддержки TCP LRO для VLAN и VxLAN.
+
+|1400010
+|gitref:a3a02acde1009f03dc78e979e051acee9f9247c2[repository="src",length=12]
+|21 апреля 2021
+|14.0-CURRENT после изменения схемы и определений `nvlist` для ioctl man:sndstat[4].
+
+|1400015
+|gitref:d72cd275187c6399caf0ca4125292dc7e55fa478[repository="src",length=12]
+|25 мая 2021
+|14.0-CURRENT после добавления дополнительных изменений LinuxKPI, требующих корректировки drm-kmod.
+
+|1400016
+|gitref:21e3c1fbe2460f144f6d4dfd61c3346b2de59667[repository="src",length=12]
+|25 мая 2021
+|14.0-CURRENT после удаления поддержки программных бэкендов KTLS.
+
+|1400017
+|gitref:beb817edfe22cdea91e19a60c42caabd9404da48[repository="src",length=12]
+|25 мая 2021
+|14.0-CURRENT после добавления `crypto_cursor_segment()`.
+
+|1400018
+|gitref:a4b07a2701f568c2c0f0c0426091f1489244a92d[repository="src",length=12]
+|30 мая 2021
+|14.0-CURRENT после разрешения реализации man:VFS_QUOTACTL[9] указывать изменения состояния занятости.
+
+|1400019
+|gitref:37d64dcdfa519157aff9711f1f226ad7bd778f46[repository="src",length=12]
+|7 июня 2021
+|14.0-CURRENT после включения `pr_err_once()` в LinuxKPI [.filename]#printk.h#.
+
+|1400020
+|gitref:8a1a42b2a7a428fb97fda9f19fd0d67a4eec7535[repository="src",length=12]
+|9 июня 2021
+|14.0-CURRENT после добавления макросов для `might_lock_nested()` и `lockdep_(re/un/)pin_lock()` в LinuxKPI.
+
+|1400021
+|gitref:b47f461c8e67253fdb394968428b760e880baa08[repository="src",length=12]
+|10 июня 2021
+|14.0-CURRENT после добавления макроса `list_for_each_entry_lockless()` в LinuxKPI.
+
+|1400022
+|gitref:40cc9a3a6b81a65a03712dfd93bbed48552a97ad[repository="src",length=12]
+|11 июня 2021
+|14.0-CURRENT после коммита gitref:e1a907a25cfa422c0d1acaf9f91352ada04f4bca[repository="src",length=12] изменил внутренний KAPI между модулями `krpc` и nfsserver.
+
+|1400023
+|gitref:d409305fa3838fb39b38c26fc085fb729b8766d5[repository="src",length=12]
+|13 июня 2021
+|14.0-CURRENT после обновления llvm, clang, compiler-rt, libc++, libunwind, lld, lldb и openmp до версии llvmorg-12.0.0-0-gd28af7c654d8, также известной как релиз 12.0.0.
+
+|1400024
+|gitref:41dfd8bd6466fd39957dee2614d88c81cdf420a7[repository="src",length=12]
+|18 июня 2021
+|14.0-CURRENT после различных добавлений в LinuxKPI.
+
+|1400025
+|gitref:5fa1eb1cd927219070b5753b64114a9240d76bf8[repository="src",length=12]
+|5 июля 2021
+|14.0-CURRENT после различных добавлений в LinuxKPI.
+
+|1400026
+|gitref:fad3f322efb53d4924fdda34f9f23f881659c269[repository="src",length=12]
+|16 июля 2021
+|14.0-CURRENT после изменения внутреннего KAPI между модулями nfscommon и nfsd.
+
+|1400027
+|gitref:cc55ee8009a550810d38777fd6ace9abf3a2f6b4[repository="src",length=12]
+|28 июля 2021
+|14.0-CURRENT после добавления вспомогательных функций LSE атомарных операций вне строки в [.filename]#libcompiler_rt.a# для архитектуры aarch64.
+
+|1400028
+|gitref:792b602a337ddc5efaa5e5326d9433fe3da7f303[repository="src",length=12]
+|31 июля 2021
+|14.0-CURRENT после обеспечения потокобезопасности разделов FPU в LinuxKPI.
+
+|1400029
+|gitref:245ec7651e4221043d1032fb3f82f335dc65fc7f[repository="src",length=12]
+|5 августа 2021
+|14.0-CURRENT после добавления man:fspacectl[2], man:vn_deallocate[9] и man:VOP_DEALLOCATE[9].
+
+|1400030
+|gitref:95941b963606f6e03282cd6f866f3166dcedfa5b[repository="src",length=12]
+|12 августа 2021
+|14.0-CURRENT после изменений параметров man:VOP_DEALLOCATE[9] и добавления поддержки