diff options
Diffstat (limited to 'documentation/content/ru/books/porters-handbook/makefiles')
-rw-r--r-- | documentation/content/ru/books/porters-handbook/makefiles/_index.adoc | 4265 | ||||
-rw-r--r-- | documentation/content/ru/books/porters-handbook/makefiles/_index.po | 14066 |
2 files changed, 17471 insertions, 860 deletions
diff --git a/documentation/content/ru/books/porters-handbook/makefiles/_index.adoc b/documentation/content/ru/books/porters-handbook/makefiles/_index.adoc index f831873e56..51a032507e 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,325 @@ 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` в номер версии программы. + +`PORTVERSION` — это версия, используемая для пакета FreeBSD. Она будет автоматически вычислена из `DISTVERSION` в соответствии со схемой версионирования пакетов FreeBSD. Если версия содержит _буквы_, может потребоваться задать `PORTVERSION` вместо `DISTVERSION`. + +[IMPORTANT] +==== +Только одна из переменных `PORTVERSION` и `DISTVERSION` может быть установлена одновременно. +==== + +Время от времени некоторые программы используют схему версионирования, которая несовместима с тем, как `DISTVERSION` преобразуется в `PORTVERSION`. + +[TIP] +==== +При обновлении порта можно использовать аргумент `-t` утилиты man:pkg-version[8], чтобы проверить, является ли новая версия больше или меньше предыдущей. Смотрите ниже, как использовать man:pkg-version[8] для сравнения версий. +==== -В переменной `PORTNAME` вы должны указать основную часть имени вашего порта, а в переменной `PORTVERSION` - номер версии. +[[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` должно увеличиваться каждый раз, когда в порте FreeBSD делаются изменения, которые как-либо меняют получаемый пакет. Сюда относятся только изменения, затрагивающие построение пакета с <<makefile-options,параметрами>> по умолчанию. +`PORTREVISION` должен быть увеличен каждый раз, когда в порт вносятся изменения, которые так или иначе влияют на сгенерированный пакет. Это включает изменения, затрагивающие только пакеты, собранные с нестандартными crossref:makefiles[makefile-options,опциями]. -Примеры случаев, когда значение `PORTREVISION` должно быть увеличено: +Примеры случаев, когда необходимо увеличить `PORTREVISION`: -* Добавление патчей для исправления уязвимостей, ошибок, или добавления новой функциональности в порт. -* Изменения в файле [.filename]#Makefile# порта для включения и выключения параметров, определяемых при компиляции пакета. -* Изменения в списке упаковки или в поведении пакета во время его установки (например, изменение скрипта, генерирующего начальные данные для пакета, такие, как ssh-ключи для хоста). -* Увеличение версии динамической библиотеки, от которой зависит порт (в этом случае тот, кто попытается установить старый пакет после установки более новой версии библиотеки, не сможет этого сделать, потому что при этом будет делаться поиск старой библиотеки libfoo.x, а не libfoo.(x+1)). -* Большие функциональные изменения в дистрибутивном файле порта, происходящие без объявлений, и приводящие к большим изменениям, то есть изменения в дистрибутиве требуют корректировки файла [.filename]#distinfo# без соответствующего изменения `PORTVERSION`, когда как команда `diff -ru` между новой и старой версиями показывает нетривиальные изменения в коде. +* Добавление исправлений для устранения уязвимостей безопасности, ошибок или для добавления новой функциональности в порт. +* Изменения в [.filename]#Makefile# порта для включения или отключения параметров сборки в пакете. +* Изменения в списке файлов пакета или в поведении во время установки. Например, изменение скрипта, который генерирует начальные данные для пакета, такие как ключи хоста man:ssh[1]. +* Увеличение версии зависимости порта от общей библиотеки (в данном случае, попытка установить старый пакет после установки более новой версии зависимости завершится неудачей, так как будет искаться старая версия libfoo.x вместо libfoo.(x+1)). +* Тихие изменения в дистрибутивном файле порта, которые имеют значительные функциональные отличия. Например, изменения в дистрибутивном файле, требующие корректировки файла [.filename]#distinfo# без соответствующего изменения `DISTVERSION`, когда сравнение `diff -ru` старой и новой версий показывает нетривиальные изменения в коде. +* Изменения в `MAINTAINER`. -Примеры изменений, которые не требуют увеличения переменной `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 +375,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#. +Имена пакетов имеют формат [.filename]#language_region-name-compiled.specifics-version.numbers#. -Имя пакета определяется как `${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}`. Вы должны задавать значения переменных в соответствии с этим форматом. +Имя пакета определяется как `${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`. -. 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`. +[[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`. -Вот несколько (реальных) примеров того, как преобразовать имя из оригинального, придуманного авторами, к подходящему для имени пакета: +[[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_`. -[.informaltable] -[cols="1,1,1,1,1,1", frame="none", options="header"] +[IMPORTANT] +==== +Название пакета должно быть уникальным среди всех портов в дереве. Убедитесь, что порт с таким же `PORTNAME` ещё не существует, и если он есть, добавьте один из crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMEPREFIX` или `PKGNAMESUFFIX`]. +==== + +Вот несколько (реальных) примеров преобразования названия, указанного авторами программного обеспечения, в подходящее имя пакета. В каждой строке указана только одна из переменных `DISTVERSION` или `PORTVERSION`, в зависимости от того, какая используется в [.filename]#Makefile# порта: + +.Примеры наименования пакетов +[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 +572,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]#elisp*# -|Порты для Emacs lisp. -| +|[.filename]#education#`*` +|Программное обеспечение для образования. +|Это включает приложения, утилиты или игры, разработанные в первую очередь или в значительной степени для помощи пользователю в изучении конкретной темы или обучении в целом. Также сюда входят приложения для создания курсов, приложения для предоставления курсов и приложения для управления классом или школой + +|[.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-frameworks#`*` +|Дополнительные библиотеки от проекта https://www.kde.org/[KDE] для программирования с использованием Qt. +| -|[.filename]#kde*# -|Порты проекта http://www.kde.org[KDE]. -| +|[.filename]#kde-plasma#`*` +|Рабочий стол от проекта https://www.kde.org/[KDE]. +| -|[.filename]#kld*# +|[.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 +1169,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 +.... + +==== + +[NOTE] +==== +Некоторые имена `MASTER_SITE_*` довольно длинные, и для удобства использования были определены сокращения: + +[[makefile-master_sites-shortcut]] +.Сокращения для макросов `MASTER_SITE_*` +[cols="1,1", frame="none", options="header"] +|=== +| Макрос +| Сокращение -Эти переменные определены в файле [.filename]#/usr/ports/Mk/bsd.sites.mk#. Всё время добавляются новые записи, так что обращайтесь к последней версии этого файла перед тем, как послать нам свой порт. +|`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 +1248,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 +1946,7 @@ DISTFILES= source.tar.gz manual.html EXTRACT_ONLY= source.tar.gz .... -Если _ни один_ из `DISTFILES` не должен распаковываться, то установите пустое значение переменной `EXTRACT_ONLY`. +Если ни один из `DISTFILES` не требует распаковки, установите `EXTRACT_ONLY` в пустую строку. [.programlisting] .... @@ -911,77 +1956,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}#. Этот каталог может быть недоступен для записи. + +[TIP] +==== +Если есть несколько патчей и для них требуются разные значения параметра strip, его можно добавить рядом с именем патча в `PATCHFILES`, например: + +[.programlisting] +.... +PATCHFILES= patch1 patch2:-p1 +.... -Если патч не относится к самому верху дерева исходных текстов (то есть `WRKSRC`), потому что он содержит некоторые дополнительные пути, установите соответственно значение переменной `PATCH_DIST_STRIP`. В частности, если все имена путей в патче имеют дополнительный путь `foozolix-1.0/` перед именем файла, то задайте `PATCH_DIST_STRIP=-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 +2060,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 +2154,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 +2170,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 +2180,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 +2196,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 +2209,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 +2243,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` + +Установите здесь свой адрес электронной почты. Пожалуйста. _:-)_ -Он заглянет также в подкаталог с тем же именем на основном резервном сервере [.filename]#ftp.FreeBSD.org#. (Явное задание переменной `DISTDIR` в вашем файле `Makefile` этого не сделает, так что, пожалуйста, воспользуйтесь `DIST_SUBDIR`.) +Только один адрес без комментария допускается в качестве значения `MAINTAINER`. Используемый формат: `user@hostname.domain`. Пожалуйста, не включайте в эту запись описательный текст, например, настоящее имя. Это только вносит путаницу в инфраструктуру Ports и большинство инструментов, которые её используют. + +Ответственный за поддержку порта обязан поддерживать порт в актуальном состоянии и обеспечивать его корректную работу. Подробное описание обязанностей ответственного за поддержку порта приведено в разделе 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# считается устаревшим. + +[[licenses]] +== Лицензии + +Каждый порт должен содержать документацию о лицензии, под которой он распространяется. Если лицензия не одобрена OSI, необходимо также указать любые ограничения на распространение. -Если ваш порт использует двоичные дистрибутивные файлы и обладает лицензией, требующей, чтобы исходный код предоставлялся вместе с пакетами, распространяемыми в двоичной форме, например GPL, то `ALWAYS_KEEP_DISTFILES` даст кластеру построения FreeBSD указание сохранять копию файлов, указанных в `DISTFILES`. Пользователям таких портов эти файлы в основном не нужны, поэтому хорошей идеей является добавление в `DISTFILES` исходных дистрибутивных файлов, только когда определена переменная `PACKAGE_BUILDING`. +[[licenses-license]] +=== `LICENSE` -[[ports-master-sites-n-example-always-keep-distfiles]] -.Использование `ALWAYS_KEEP_DISTFILES`. +Краткое название лицензии или лицензий, если применяется более одной лицензии. + +Если это одна из лицензий, перечисленных в 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 +.... + +==== + +[[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 .... -В файле [.filename]#Makefile# переменная COMMENT должна следовать сразу за переменной MAINTAINER. +==== + +[[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 +3211,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 - -Многие приложения могут быть построены в различных конфигурациях и с дополнительной функциональностью. Например, выбор естественного (человеческого) языка, GUI против командной строки или типа используемой базы данных. Пользователи могут нуждаться в различных конфигурациях, отличных от используемой по умолчанию, поэтому в системе портов предусмотрен механизм, позволяющий автору порта управлять сборкой того или иного варианта конфигурации. Правильная поддержка этих необязательных параметров облегчает пользователям жизнь и даёт два или более порта по цене одного. - -=== Knobs +== Параметры Makefile -==== `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 +3549,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 +3569,12 @@ OPTIONS_SINGLE= SG1 OPTIONS_SINGLE_SG1= OPT3 OPT4 .... -`OPTIONS` можно группировать в виде переключателей, для которых разрешен выбор единственного варианта (или ни одного) в каждой группе: +[WARNING] +==== +В каждый момент времени _должна_ быть выбрана одна опция из каждой группы `OPTIONS_SINGLE`, чтобы параметры были действительными. Один вариант из каждой группы _должен_ быть добавлен в `OPTIONS_DEFAULT`. +==== + +`OPTIONS` могут быть сгруппированы как переключаемые варианты, где ни один или только один вариант из каждой группы разрешён: [.programlisting] .... @@ -1727,7 +3582,7 @@ OPTIONS_RADIO= RG1 OPTIONS_RADIO_RG1= OPT7 OPT8 .... -`OPTIONS` также можно группировать в виде списков со множественным выбором, для которых обязан быть включен _по крайней мере один_ из параметров: +`OPTIONS` также могут быть сгруппированы в виде списков "множественного выбора", где _хотя бы одна_ опция должна быть включена: [.programlisting] .... @@ -1735,7 +3590,7 @@ OPTIONS_MULTI= MG1 OPTIONS_MULTI_MG1= OPT5 OPT6 .... -`OPTIONS` также можно группировать в виде списков со множественным выбором, для которых могут быть включены любые параметры, включая отсутствие выбора: +`OPTIONS` также могут быть сгруппированы в виде списков "множественного выбора", где ни одна или любые опции могут быть включены: [.programlisting] .... @@ -1743,36 +3598,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 - -.include <bsd.port.options.mk> +OPTIONS_DEFAULT=FOO -.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 +3630,10 @@ RUN_DEPENDS+= bar:${PORTSDIR}/bar/bar ==== [[ports-options-check-unset]] -.Проверка незаданных значений `OPTIONS` +.Проверка неустановленных `OPTIONS` порта [example] ==== + [.programlisting] .... .if ! ${PORT_OPTIONS:MEXAMPLES} @@ -1790,15 +3641,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 +3675,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`]. -Существует несколько макросов, упрощающих запись условных значений, которые отличаются в зависимости от набора параметров. +`*_DEPENDS`:: +См. crossref:makefiles[options-dependencies, Зависимости, `OPT_DEPTYPE` и `OPT_DEPTYPE_OFF`]. -Если переменная `OPTIONS_SUB` имеет значение `yes`, то каждый из указанных в `OPTIONS_DEFINE` параметров будет добавлен в `PLIST_SUB`. Следующая запись: +`*` (Любая переменная):: +Наиболее используемые переменные имеют своих помощников, см. 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 +3826,7 @@ OPTIONS_DEFINE= OPT1 OPTIONS_SUB= yes .... -соответствует: +эквивалентно: [.programlisting] .... @@ -1924,21 +3835,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 +3870,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 +3902,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 +3969,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 +4036,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 +4067,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`, когда опция _не_ выбрана. Например: + +[.programlisting] +.... +OPTIONS_DEFINE= OPT1 +OPT1_MESON_TRUE= test debug +OPT1_MESON_FALSE= optimize +.... -Значение переменной `X_ABOVEVARIABLE` будет дописано в `ABOVEVARIABLE` в соответствии с состоянием `X`. Следующая запись: +эквивалентно: [.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 +4124,54 @@ 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 +.... + +[[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_MESON_ENABLED= test +OPT1_MESON_DISABLED= debug +.... + +эквивалентно: + +[.programlisting] +.... +OPTIONS_DEFINE= OPT1 + +.include <bsd.port.options.mk> + +.if ${PORT_OPTIONS:MOPT1} +MESON_ARGS+= -Dtest=enabled -Ddebug=disabled +.else +MESON_ARGS+= -Dtest=disabled -Ddebug=enabled .endif .... -Если установлена `X_ABOVEVARIABLE_OFF`, то флаг `ABOVEVARIABLE` будет автоматически выставлен при выключенном параметре `X`. Например: +[[options-qmake_on]] +==== `OPT_QMAKE_ON` и `OPT_QMAKE_OFF` + +Когда выбрана опция _OPT_, значение `OPT_QMAKE_ON`, если оно определено, добавляется к `QMAKE_ARGS`. `OPT_QMAKE_OFF` работает аналогичным образом, но когда `OPT` _не_ выбрана. Например: [.programlisting] .... OPTIONS_DEFINE= OPT1 -OPT1_USES_OFF=gmake +OPT1_QMAKE_ON= -DTEST:BOOL=true +OPT1_QMAKE_OFF= -DPRODUCTION:BOOL=true .... -соответствует: +эквивалентно: [.programlisting] .... @@ -2118,12 +4179,193 @@ OPTIONS_DEFINE= OPT1 .include <bsd.port.options.mk> -.if ! ${PORT_OPTIONS:MOPT1} -USES+= gmake +.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 +4375,91 @@ 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:devel/a +OPT1_LIB_DEPENDS_OFF= libb.so:devel/b +.... + +эквивалентно: + +[.programlisting] +.... +OPTIONS_DEFINE= OPT1 + +.include <bsd.port.options.mk> + +.if ${PORT_OPTIONS:MOPT1} +LIB_DEPENDS+= liba.so:devel/a +.else +LIB_DEPENDS+= libb.so:devel/b +.endif +.... + +[[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_LIB_DEPENDS= liba.so:${PORTSDIR}/devel/a +OPT1_USES= gmake +OPT1_CFLAGS_OFF= -DTEST .... -соответствует: +эквивалентно: [.programlisting] .... @@ -2150,118 +4468,290 @@ OPTIONS_DEFINE= OPT1 .include <bsd.port.options.mk> .if ${PORT_OPTIONS:MOPT1} -LIB_DEPENDS+= liba.so:${PORTSDIR}/devel/a +USES+= gmake +.else +CFLAGS+= -DTEST .endif .... -Если установлена `X_ABOVEVARIABLE_OFF`, то зависимость типа `ABOVEVARIABLE` будет добавлена при выключенном параметре `X`. Например: +[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 +4759,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 +4794,7 @@ post-install: (cd ${WRKSRC}/examples && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR}) .... -В этом примере устанавливается содержимое каталога [.filename]#examples# из установочных файлов производителя в надлежащее место для примеров вашего порта. +Этот пример установит содержимое каталога [.filename]#examples# из дистрибутива вендора в соответствующее расположение примеров порта. [.programlisting] .... @@ -2304,9 +4803,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 +4815,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 +4868,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`, нельзя использовать для создания бинарного псевдонима, так " +"как тестовые зависимости, указанные таким образом, обрабатываются после " +"создания бинарных псевдонимов." |