aboutsummaryrefslogtreecommitdiff
path: root/ru_RU.KOI8-R
diff options
context:
space:
mode:
authorSergey Kandaurov <pluknet@FreeBSD.org>2014-07-12 14:08:49 +0000
committerSergey Kandaurov <pluknet@FreeBSD.org>2014-07-12 14:08:49 +0000
commit8cc7166d976d6a5da04a21b299bcf499bdbf3682 (patch)
tree0943fd4d24cbb7f8e9c8f679db728cf6a7b92e2a /ru_RU.KOI8-R
parent63c96f9f372d73d0a3758c4ea154578f308e4e71 (diff)
downloaddoc-8cc7166d976d6a5da04a21b299bcf499bdbf3682.tar.gz
doc-8cc7166d976d6a5da04a21b299bcf499bdbf3682.zip
Whitespace fixes after PH split.
Notes
Notes: svn path=/head/; revision=45256
Diffstat (limited to 'ru_RU.KOI8-R')
-rw-r--r--ru_RU.KOI8-R/books/porters-handbook/appendices/chapter.xml109
-rw-r--r--ru_RU.KOI8-R/books/porters-handbook/keeping-up/chapter.xml304
-rw-r--r--ru_RU.KOI8-R/books/porters-handbook/makefiles/chapter.xml7859
-rw-r--r--ru_RU.KOI8-R/books/porters-handbook/new-port/chapter.xml81
-rw-r--r--ru_RU.KOI8-R/books/porters-handbook/pkg-files/chapter.xml377
-rw-r--r--ru_RU.KOI8-R/books/porters-handbook/plist/chapter.xml496
-rw-r--r--ru_RU.KOI8-R/books/porters-handbook/porting-dads/chapter.xml1267
-rw-r--r--ru_RU.KOI8-R/books/porters-handbook/porting-samplem/chapter.xml69
-rw-r--r--ru_RU.KOI8-R/books/porters-handbook/porting-why/chapter.xml27
-rw-r--r--ru_RU.KOI8-R/books/porters-handbook/quick-porting/chapter.xml729
-rw-r--r--ru_RU.KOI8-R/books/porters-handbook/security/chapter.xml811
-rw-r--r--ru_RU.KOI8-R/books/porters-handbook/slow-porting/chapter.xml839
-rw-r--r--ru_RU.KOI8-R/books/porters-handbook/special/chapter.xml8746
-rw-r--r--ru_RU.KOI8-R/books/porters-handbook/testing/chapter.xml393
-rw-r--r--ru_RU.KOI8-R/books/porters-handbook/upgrading/chapter.xml547
-rw-r--r--ru_RU.KOI8-R/books/porters-handbook/uses.xml86
-rw-r--r--ru_RU.KOI8-R/books/porters-handbook/versions.xml311
17 files changed, 11686 insertions, 11365 deletions
diff --git a/ru_RU.KOI8-R/books/porters-handbook/appendices/chapter.xml b/ru_RU.KOI8-R/books/porters-handbook/appendices/chapter.xml
index 00e7ce81a5..c6fd86a2ee 100644
--- a/ru_RU.KOI8-R/books/porters-handbook/appendices/chapter.xml
+++ b/ru_RU.KOI8-R/books/porters-handbook/appendices/chapter.xml
@@ -7,67 +7,70 @@
Original revision: r43844
-->
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="appendices">
+<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink=
+ "http://www.w3.org/1999/xlink" version="5.0" xml:id="appendices">
- <title>Приложения</title>
+ <title>Приложения</title>
- <sect1 xml:id="uses-values">
- <title>Значения <varname>USES</varname></title>
+ <sect1 xml:id="uses-values">
+ <title>Значения <varname>USES</varname></title>
- <table>
- <title>Значения <varname>USES</varname></title>
+ <table>
+ <title>Значения <varname>USES</varname></title>
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Наименование</entry>
- <entry>Аргументы</entry>
- <entry>Описание</entry>
- </row>
- </thead>
- <tbody valign="top">
- &values.uses;
- </tbody>
- </tgroup>
- </table>
- </sect1>
+ <tgroup cols="3">
+ <thead>
+ <row>
+ <entry>Наименование</entry>
+ <entry>Аргументы</entry>
+ <entry>Описание</entry>
+ </row>
+ </thead>
- <sect1 xml:id="freebsd-versions">
- <title>Значения <literal>__FreeBSD_version</literal></title>
+ <tbody valign="top">
+ &values.uses;
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
- <para>Ниже для справки приводится перечень значений
- <literal>__FreeBSD_version</literal> в виде, который определён в
- <link xlink:href="http://svnweb.FreeBSD.org/base/head/sys/sys/param.h?view=markup">sys/param.h</link>:</para>
+ <sect1 xml:id="freebsd-versions">
+ <title>Значения <literal>__FreeBSD_version</literal></title>
- <table frame="none">
- <title>Значения <literal>__FreeBSD_version</literal></title>
+ <para>Ниже для справки приводится перечень значений
+ <literal>__FreeBSD_version</literal> в виде, который определён
+ в <link
+ xlink:href="http://svnweb.FreeBSD.org/base/head/sys/sys/param.h?view=markup">sys/param.h</link>:</para>
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Значение</entry>
- <entry>Дата</entry>
- <entry>Релиз</entry>
- </row>
- </thead>
+ <table frame="none">
+ <title>Значения <literal>__FreeBSD_version</literal></title>
- <tbody>
- &values.versions;
- </tbody>
- </tgroup>
- </table>
+ <tgroup cols="3">
+ <thead>
+ <row>
+ <entry>Значение</entry>
+ <entry>Дата</entry>
+ <entry>Релиз</entry>
+ </row>
+ </thead>
- <note>
- <para>Заметьте, что 2.2-STABLE иногда идентифицирует себя как
- <quote>2.2.5-STABLE</quote> после 2.2.5-RELEASE. Такой принцип
- использовался год и месяц, но мы решили изменить его на более
- однозначную систему нумерации старший/младший, начиная с версии
- 2.2. Это объясняется тем, что параллельная разработка в нескольких
- ветках делает непрактичным идентификацию релизов просто по их
- реальным датам выпуска. Если вы сейчас делаете порт, вам не стоит
- заботиться о старых версиях -CURRENT; они перечислены здесь просто
- в информационных целях.</para>
- </note>
- </sect1>
- </chapter>
+ <tbody>
+ &values.versions;
+ </tbody>
+ </tgroup>
+ </table>
+ <note>
+ <para>Заметьте, что 2.2-STABLE иногда идентифицирует себя как
+ <quote>2.2.5-STABLE</quote> после 2.2.5-RELEASE. Такой
+ принцип использовался год и месяц, но мы решили изменить его
+ на более однозначную систему нумерации старший/младший,
+ начиная с версии 2.2. Это объясняется тем, что параллельная
+ разработка в нескольких ветках делает непрактичным
+ идентификацию релизов просто по их реальным датам выпуска.
+ Если вы сейчас делаете порт, вам не стоит заботиться о старых
+ версиях -CURRENT; они перечислены здесь просто в
+ информационных целях.</para>
+ </note>
+ </sect1>
+</chapter>
diff --git a/ru_RU.KOI8-R/books/porters-handbook/keeping-up/chapter.xml b/ru_RU.KOI8-R/books/porters-handbook/keeping-up/chapter.xml
index 80c2359ba9..030ab03c00 100644
--- a/ru_RU.KOI8-R/books/porters-handbook/keeping-up/chapter.xml
+++ b/ru_RU.KOI8-R/books/porters-handbook/keeping-up/chapter.xml
@@ -7,149 +7,161 @@
Original revision: r43840
-->
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="keeping-up">
-
- <title>Актуализация</title>
-
- <para>Коллекция Портов &os; постоянно изменяется. Здесь находится
- некоторая информация о том, как поддерживать её в актуальном
- состоянии.</para>
-
- <sect1 xml:id="freshports">
- <title>FreshPorts</title>
-
- <para>Самым простым способом отслеживать уже произошедшие обновления
- является подписка на <link xlink:href="http://www.FreshPorts.org/">
- FreshPorts</link>. Для мониторинга вы можете выбрать несколько
- портов. Мейнтейнерам настоятельно рекомендуется подписаться здесь,
- потому что они будут получать уведомления не только о собственных
- изменениях, но и об изменениях, сделанных любым другим коммиттером
- &os;. (Это часто необходимо для синхронизации с изменениями на более
- низком технологическом уровне&mdash;хотя более корректным было бы
- получение предупреждений от тех, кто вносит подобные изменения,
- иногда этот этап пропускается или он просто непрактичен. Кроме того,
- в некоторых случаях изменения по своей природе весьма незначительны.
- Мы полагаем, что любой разработчик в таких ситуациях будет
- руководствоваться здравым смыслом).</para>
-
- <para>Если вы хотите использовать FreshPorts, то вам нужна только
- учётная запись. Если регистрационный адрес вашей электронной почты
- будет иметь вид <literal>@FreeBSD.org</literal>, то справа на
- Web-страницах вы увидите дополнительную ссылку. Для тех из вас, кто
- уже получил учётную запись FreshPorts, но не использовал собственный
- адрес электронной почты <literal>@FreeBSD.org</literal>, достаточно
- сменить адрес на <literal>@FreeBSD.org</literal>, подписаться, а
- затем сменить его обратно.</para>
-
- <para>Во FreshPorts имеется также функция проверки правильности,
- которая автоматически проверяет каждое изменение, внесённое в дерево
- портов &os;. Если вы подпишетесь на эту услугу, то будете
- оповещаться обо всех ошибках, обнаруженных FreshPorts при проверке
- внесённых вами изменений.</para>
- </sect1>
-
- <sect1 xml:id="svnweb">
- <title>Web-интерфейс к хранилищу исходных текстов</title>
-
- <para>Файлы в хранилище исходных текстов можно просматривать при помощи
- Web-интерфейса. Изменения, которые касаются в целом всей системы
- портов, теперь документируются в файле <link xlink:href="http://svnweb.FreeBSD.org/ports/head/CHANGES">CHANGES</link>.
- Изменения, касающиеся отдельных портов, отражаются теперь в
- файле <link xlink:href="http://svnweb.FreeBSD.org/ports/head/UPDATING">UPDATING</link>.
- Однако однозначный ответ на любой вопрос можно найти, только
- прочитав исходных код <link xlink:href="http://svnweb.FreeBSD.org/ports/head/Mk/bsd.port.mk">bsd.port.mk</link>
- и связанных с ним файлов.</para>
- </sect1>
-
- <sect1 xml:id="ports-mailing-list">
- <title>Список рассылки &os;, посвящённый портам</title>
-
- <para>Если вы поддерживаете порты, то должны следить за &a.ports;.
- О важных изменениях, отражающихся на работе портов, будет сообщаться
- здесь, а затем они переносятся в <filename>CHANGES</filename>.</para>
-
- <para>Если данный список рассылки слишком загружен сообщениями,
- вы можете отслеживать &a.ports-announce.name;, который модерируется
- и не является местом для дискуссий.</para>
- </sect1>
-
- <sect1 xml:id="build-cluster">
- <title>Кластер построения портов &os;</title>
-
- <para>Одной из наименее известных сильных сторон &os; является тот
- факт, что для непрерывного построения Коллекции Портов для каждого
- из основных релизов ОС для каждой архитектуры уровня поддержки
- Tier-1 выделен целый кластер машин.</para>
-
- <para>Отдельные порты собираются, если они специально не помечены как
- <varname>IGNORE</varname>. Для портов, помеченных как
- <varname>BROKEN</varname>, попытки будут продолжены для того,
- чтобы увидеть, если основная проблема была решена. (Это сделано
- через использование переменной <varname>TRYBROKEN</varname> для
- <filename>Makefile</filename> порта.)</para>
-
- </sect1>
-
- <sect1 xml:id="distfile-survey">
- <title>Portscout: сканер дистрибутивных файлов портов &os;</title>
-
- <para>Кластер построения выделен для выполнения самого последнего
- релиза каждого из портов, дистрибутивные файлы которых уже были
- сгружены. Однако из-за постоянных изменений в Internet
- дистрибутивные файлы могут быстро исчезать. <link xlink:href="http://portscout.FreeBSD.org">Portscout</link>, средство
- сканирования дистрибутивных файлов &os; пытается опросить
- каждый из сайтов, доступных для сгрузки каждого из портов,
- для определения того, доступны ли ещё дистрибутивные файлы.
- <application>Portscout</application> может готовить отчёты
- в <acronym>HTML</acronym> и рассылать электронные письма об
- имеющихся обновлениях для портов тем, кто это запрашивает.
- Мейнтейнеры периодически запрашивают наличие изменений, либо
- вручную, либо используя ленту <acronym>RSS</acronym>.</para>
-
- <para>Главная страница <application>Portscout</application>
- отображает email мейнтейнера порта, количество портов, за
- которые ответственен мейнтейнер, количество портов с новыми
- дистрибутивными файлами и процент устаревших портов. Функция
- поиска выполняет поиск мейнтейнера по адресу электронной почты
- и позволяет выбирать между всеми портами или только
- устаревшими.</para>
-
- <para>При щелчке по адресу электронной почты мейнтейнера
- отображается список всех его портов, разделённых по категориям,
- вместе с текущим номером версии, информацией о наличии новой
- версии, временем последнего обновления порта и временем его
- последней проверки. Функция поиска на этой странице позволяет
- пользователю выполнять поиск конкретного порта.</para>
-
- <para>По щелчку на название порта в списке отображается информация
- о порте <link xlink:href="http://freshports.org">FreshPorts</link>.</para>
- </sect1>
-
- <sect1 xml:id="portsmon">
- <title>Система мониторинга портов &os;</title>
-
- <para>Другим полезным ресурсом является
- <link xlink:href="http://portsmon.FreeBSD.org">Система мониторинга
- портов &os;</link> (известная также как <literal>portsmon</literal>).
- Система представляет собой базу данных, обрабатывающую информацию из
- нескольких источников и позволяющую просматривать их при помощи
- Web-интерфейса. На данный момент задействованы база сообщений об
- ошибках (PR), протоколы ошибок кластера построения и отдельные файлы
- из коллекции портов. В будущем в этот список будет добавлена система
- проверки дистрибутивных файлов и другие ресурсы.</para>
-
- <para>Для начала вы можете просмотреть всю информацию о некотором порте
- при помощи средства <link xlink:href="http://portsmon.FreeBSD.org/portoverview.py">Обзор
- отдельного порта</link>.</para>
-
- <para>На момент написания это единственный доступный ресурс, который
- для имени порта ставит в соответствие записи PR GNATS.
- (Отправители PR не всегда добавляют в название имя порта, хотя
- мы предпочитаем, чтобы они это делали.) Таким образом,
- <literal>portsmon</literal> это хорошее место для начала, если вы
- хотите найти присланные PR и/или ошибки построения для существующего
- порта; либо поискать, был ли уже прислан новый порт, который вы
- подумывали создать сами.</para>
- </sect1>
- </chapter>
-
+<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink=
+ "http://www.w3.org/1999/xlink" version="5.0" xml:id="keeping-up">
+
+ <title>Актуализация</title>
+
+ <para>Коллекция Портов &os; постоянно изменяется. Здесь находится
+ некоторая информация о том, как поддерживать её в актуальном
+ состоянии.</para>
+
+ <sect1 xml:id="freshports">
+ <title>FreshPorts</title>
+
+ <para>Самым простым способом отслеживать уже произошедшие
+ обновления является подписка на <link xlink:href=
+ "http://www.FreshPorts.org/">FreshPorts</link>. Для
+ мониторинга вы можете выбрать несколько портов. Мейнтейнерам
+ настоятельно рекомендуется подписаться здесь, потому что они
+ будут получать уведомления не только о собственных изменениях,
+ но и об изменениях, сделанных любым другим коммиттером &os;.
+ (Это часто необходимо для синхронизации с изменениями на более
+ низком технологическом уровне&mdash;хотя более корректным было
+ бы получение предупреждений от тех, кто вносит подобные
+ изменения, иногда этот этап пропускается или он просто
+ непрактичен. Кроме того, в некоторых случаях изменения по
+ своей природе весьма незначительны. Мы полагаем, что любой
+ разработчик в таких ситуациях будет руководствоваться здравым
+ смыслом).</para>
+
+ <para>Если вы хотите использовать FreshPorts, то вам нужна только
+ учётная запись. Если регистрационный адрес вашей электронной
+ почты будет иметь вид <literal>@FreeBSD.org</literal>, то
+ справа на Web-страницах вы увидите дополнительную ссылку. Для
+ тех из вас, кто уже получил учётную запись FreshPorts, но не
+ использовал собственный адрес электронной почты
+ <literal>@FreeBSD.org</literal>, достаточно сменить адрес на
+ <literal>@FreeBSD.org</literal>, подписаться, а затем сменить
+ его обратно.</para>
+
+ <para>Во FreshPorts имеется также функция проверки правильности,
+ которая автоматически проверяет каждое изменение, внесённое в
+ дерево портов &os;. Если вы подпишетесь на эту услугу, то
+ будете оповещаться обо всех ошибках, обнаруженных FreshPorts
+ при проверке внесённых вами изменений.</para>
+ </sect1>
+
+ <sect1 xml:id="svnweb">
+ <title>Web-интерфейс к хранилищу исходных текстов</title>
+
+ <para>Файлы в хранилище исходных текстов можно просматривать при
+ помощи Web-интерфейса. Изменения, которые касаются в целом
+ всей системы портов, теперь документируются в файле <link
+ xlink:href="http://svnweb.FreeBSD.org/ports/head/CHANGES">CHANGES</link>.
+ Изменения, касающиеся отдельных портов, отражаются теперь в
+ файле <link
+ xlink:href="http://svnweb.FreeBSD.org/ports/head/UPDATING">UPDATING</link>.
+ Однако однозначный ответ на любой вопрос можно найти, только
+ прочитав исходных код <link
+ xlink:href="http://svnweb.FreeBSD.org/ports/head/Mk/bsd.port.mk">bsd.port.mk</link>
+ и связанных с ним файлов.</para>
+ </sect1>
+
+ <sect1 xml:id="ports-mailing-list">
+ <title>Список рассылки &os;, посвящённый портам</title>
+
+ <para>Если вы поддерживаете порты, то должны следить за
+ &a.ports;. О важных изменениях, отражающихся на работе портов,
+ будет сообщаться здесь, а затем они переносятся в
+ <filename>CHANGES</filename>.</para>
+
+ <para>Если данный список рассылки слишком загружен сообщениями,
+ вы можете отслеживать &a.ports-announce.name;, который
+ модерируется и не является местом для дискуссий.</para>
+ </sect1>
+
+ <sect1 xml:id="build-cluster">
+ <title>Кластер построения портов &os;</title>
+
+ <para>Одной из наименее известных сильных сторон &os; является
+ тот факт, что для непрерывного построения Коллекции Портов для
+ каждого из основных релизов ОС для каждой архитектуры уровня
+ поддержки Tier-1 выделен целый кластер машин.</para>
+
+ <para>Отдельные порты собираются, если они специально не помечены
+ как <varname>IGNORE</varname>. Для портов, помеченных как
+ <varname>BROKEN</varname>, попытки будут продолжены для того,
+ чтобы увидеть, если основная проблема была решена. (Это
+ сделано через использование переменной
+ <varname>TRYBROKEN</varname> для <filename>Makefile</filename>
+ порта.)</para>
+ </sect1>
+
+ <sect1 xml:id="distfile-survey">
+ <title>Portscout: сканер дистрибутивных файлов портов
+ &os;</title>
+
+ <para>Кластер построения выделен для выполнения самого последнего
+ релиза каждого из портов, дистрибутивные файлы которых уже были
+ сгружены. Однако из-за постоянных изменений в Internet
+ дистрибутивные файлы могут быстро исчезать. <link
+ xlink:href="http://portscout.FreeBSD.org">Portscout</link>,
+ средство сканирования дистрибутивных файлов &os; пытается
+ опросить каждый из сайтов, доступных для сгрузки каждого из
+ портов, для определения того, доступны ли ещё дистрибутивные
+ файлы. <application>Portscout</application> может готовить
+ отчёты в <acronym>HTML</acronym> и рассылать электронные письма
+ об имеющихся обновлениях для портов тем, кто это запрашивает.
+ Мейнтейнеры периодически запрашивают наличие изменений, либо
+ вручную, либо используя ленту <acronym>RSS</acronym>.</para>
+
+ <para>Главная страница <application>Portscout</application>
+ отображает email мейнтейнера порта, количество портов, за
+ которые ответственен мейнтейнер, количество портов с новыми
+ дистрибутивными файлами и процент устаревших портов. Функция
+ поиска выполняет поиск мейнтейнера по адресу электронной почты
+ и позволяет выбирать между всеми портами или только
+ устаревшими.</para>
+
+ <para>При щелчке по адресу электронной почты мейнтейнера
+ отображается список всех его портов, разделённых по категориям,
+ вместе с текущим номером версии, информацией о наличии новой
+ версии, временем последнего обновления порта и временем его
+ последней проверки. Функция поиска на этой странице позволяет
+ пользователю выполнять поиск конкретного порта.</para>
+
+ <para>По щелчку на название порта в списке отображается информация
+ о порте <link
+ xlink:href="http://freshports.org">FreshPorts</link>.</para>
+ </sect1>
+
+ <sect1 xml:id="portsmon">
+ <title>Система мониторинга портов &os;</title>
+
+ <para>Другим полезным ресурсом является <link
+ xlink:href="http://portsmon.FreeBSD.org">Система мониторинга
+ портов &os;</link> (известная также как
+ <literal>portsmon</literal>). Система представляет собой базу
+ данных, обрабатывающую информацию из нескольких источников и
+ позволяющую просматривать их при помощи Web-интерфейса. На
+ данный момент задействованы база сообщений об ошибках (PR),
+ протоколы ошибок кластера построения и отдельные файлы из
+ коллекции портов. В будущем в этот список будет добавлена
+ система проверки дистрибутивных файлов и другие ресурсы.</para>
+
+ <para>Для начала вы можете просмотреть всю информацию о некотором
+ порте при помощи средства <link
+ xlink:href="http://portsmon.FreeBSD.org/portoverview.py">Обзор
+ отдельного порта</link>.</para>
+
+ <para>На момент написания это единственный доступный ресурс,
+ который для имени порта ставит в соответствие записи PR GNATS.
+ (Отправители PR не всегда добавляют в название имя порта, хотя
+ мы предпочитаем, чтобы они это делали.) Таким образом,
+ <literal>portsmon</literal> это хорошее место для начала, если
+ вы хотите найти присланные PR и/или ошибки построения для
+ существующего порта; либо поискать, был ли уже прислан новый
+ порт, который вы подумывали создать сами.</para>
+ </sect1>
+</chapter>
diff --git a/ru_RU.KOI8-R/books/porters-handbook/makefiles/chapter.xml b/ru_RU.KOI8-R/books/porters-handbook/makefiles/chapter.xml
index 12e66950df..0b37c5b1d2 100644
--- a/ru_RU.KOI8-R/books/porters-handbook/makefiles/chapter.xml
+++ b/ru_RU.KOI8-R/books/porters-handbook/makefiles/chapter.xml
@@ -7,3028 +7,3209 @@
Original revision: r43840
-->
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="makefiles">
-
- <title>Настройка файла Makefile</title>
-
- <para>Настройка файла <filename>Makefile</filename> достаточно проста, и
- мы снова предполагаем, что перед тем, как начать, вы посмотрите на
- существующие примеры. К тому же в этом руководстве имеется <link linkend="porting-samplem">примерный Makefile</link>, так что взгляните
- на него и, пожалуйста, следуйте порядку переменных и разделов в этом
- образце, чтобы облегчить чтение вашего порта другими людьми.</para>
-
- <para>Итак, расположим решаемые задачи в порядке их возникновения при
- создании вашего нового файла <filename>Makefile</filename>:</para>
-
- <sect1 xml:id="makefile-source">
- <title>Оригинальные исходный код</title>
-
- <para>Находится ли он в каталоге <varname>DISTDIR</varname> в виде
- стандартного упакованного архиватором <command>gzip</command>
- tar-архива с именем типа
- <filename>foozolix-1.2.tar.gz</filename>? Если это так,
- можно перейти к следующему шагу. Если нет, то вы должны попытаться
- переопределить некоторые из переменных
- <varname>DISTVERSION</varname>, <varname>DISTNAME</varname>,
- <varname>EXTRACT_CMD</varname>,
- <varname>EXTRACT_BEFORE_ARGS</varname>,
- <varname>EXTRACT_AFTER_ARGS</varname>,
- <varname>EXTRACT_SUFX</varname> или <varname>DISTFILES</varname> в
- зависимости от того, насколько необычен формат дистрибутивного
- файла.</para>
-
- <para>В худшем случае вы можете просто определить свою собственную цель
- <buildtarget>do-extract</buildtarget> для переопределения действий по
- умолчанию, хотя к этому нужно будет прибегать в очень редких случаях,
- если вообще придётся.</para>
- </sect1>
-
- <sect1 xml:id="makefile-naming">
- <title>Именование</title>
-
- <para>В первой части <filename>Makefile</filename> порта ему даётся
- название, указывается его номер версии и принадлежность к правильной
- категории.</para>
-
- <sect2>
- <title><varname>PORTNAME</varname> и
- <varname>PORTVERSION</varname></title>
-
- <para>В переменной <varname>PORTNAME</varname> вы должны указать
- основную часть имени вашего порта, а в переменной
- <varname>PORTVERSION</varname> - номер версии.</para>
- </sect2>
-
- <sect2 xml:id="makefile-naming-revepoch">
- <title><varname>PORTREVISION</varname> и
- <varname>PORTEPOCH</varname></title>
-
- <sect3>
- <title><varname>PORTREVISION</varname></title>
-
- <para>Переменная <varname>PORTREVISION</varname> представляет собой
- монотонно увеличивающееся число, которое обнуляется при каждом
- увеличении значения переменной <varname>PORTVERSION</varname> (то
- есть каждый раз, когда создателями выпускается новый официальный
- релиз), и добавляется к имени пакета, если оно не равно нулю.
- Изменения в <varname>PORTREVISION</varname> используются
- автоматизированными инструментами (например,
- <command>pkg version</command>, см. &man.pkg-version.8;)
- для определения факта появления нового пакета.</para>
-
- <para>Значение <varname>PORTREVISION</varname> должно увеличиваться
- каждый раз, когда в порте FreeBSD делаются изменения, которые
- как-либо меняют получаемый пакет. Сюда относятся только
- изменения, затрагивающие построение пакета с <link
- linkend="makefile-options">параметрами</link> по
- умолчанию.</para>
-
- <para>Примеры случаев, когда значение <varname>PORTREVISION</varname>
- должно быть увеличено:</para>
-
- <itemizedlist>
- <listitem>
- <para>Добавление патчей для исправления уязвимостей,
- ошибок, или добавления новой функциональности в порт.</para>
- </listitem>
-
- <listitem>
- <para>Изменения в файле <filename>Makefile</filename> порта для
- включения и выключения параметров, определяемых при компиляции
- пакета.</para>
- </listitem>
-
- <listitem>
- <para>Изменения в списке упаковки или в поведении пакета во
- время его установки (например, изменение скрипта, генерирующего
- начальные данные для пакета, такие, как ssh-ключи для
- хоста).</para>
- </listitem>
-
- <listitem>
- <para>Увеличение версии динамической библиотеки, от которой
- зависит порт (в этом случае тот, кто попытается установить
- старый пакет после установки более новой версии библиотеки,
- не сможет этого сделать, потому что при этом будет делаться
- поиск старой библиотеки libfoo.x, а не libfoo.(x+1)).</para>
- </listitem>
-
- <listitem>
- <para>Большие функциональные изменения в дистрибутивном файле
- порта, происходящие без объявлений, и приводящие к большим
- изменениям, то есть изменения в дистрибутиве требуют
- корректировки файла <filename>distinfo</filename> без
- соответствующего изменения <varname>PORTVERSION</varname>,
- когда как команда <command>diff -ru</command> между новой
- и старой версиями показывает нетривиальные изменения в
- коде.</para>
- </listitem>
- </itemizedlist>
-
- <para>Примеры изменений, которые не требуют увеличения переменной
- <varname>PORTREVISION</varname>:</para>
-
- <itemizedlist>
- <listitem>
- <para>Изменения стиля в скелете порта без функциональных изменений
- в пакете.</para>
- </listitem>
-
- <listitem>
- <para>Изменения в переменной <varname>MASTER_SITES</varname> или
- другие функциональные изменения порта, которые не затрагивают
- получающегося пакета.</para>
- </listitem>
-
- <listitem>
- <para>Тривиальные патчи к дистрибутивному файлу, такие, как
- исправления опечаток, которые не так уж важны, что пользователи
- пакета должны озаботиться обновлением.</para>
- </listitem>
-
- <listitem>
- <para>Исправления, касающиеся этапа построения, которые делают
- возможным построение пакета, если ранее это было невозможно
- сделать (пока изменения не приводят к изменению работы на любых
- других платформах, на которых порт ранее строился). Так как
- <varname>PORTREVISION</varname> отражает содержимое пакета,
- то, если ранее пакет не строился, то нет нужды увеличивать
- <varname>PORTREVISION</varname> для отметки изменения.</para>
- </listitem>
- </itemizedlist>
-
- <para>Правило, которому нужно приблизительно следовать, заключается в
- том, что нужно спрашивать себя, является ли вносимое в порт
- изменение таким, что от него выиграют все (в виде
- усовершенствования, исправления или благодаря тому, что новый
- пакет будет вообще работоспособным), и примите во внимание тот
- факт, что при этом все, кто регулярно обновляют своё дерево портов,
- будут обязаны это сделать. Если это так, то переменная
- <varname>PORTREVISION</varname> должна быть увеличена.</para>
- </sect3>
-
- <sect3>
- <title><varname>PORTEPOCH</varname></title>
-
- <para>Время от времени разработчик программного обеспечения или
- создатель порта &os; делают что-то не так и выпускают версию
- программы, номер которой меньше предыдущей версии. Примером этого
- является порт, название которого меняется с foo-20000801 на foo-1.0
- (изначально это не считалось бы более новой версией, так как
- 20000801 численно больше, чем 1).</para>
-
- <tip>
- <para>Результат сравнения номера версии не всегда очевиден.
- Для выполнения сравнения двух строк с номером версии можно
- использовать <command>pkg version</command>
- (см. &man.pkg-version.8;). Например:</para>
-
- <screen>&prompt.user; <userinput>pkg_version -t 0.031 0.29</userinput>
-&gt;</screen>
-
- <para>Для пользователей <application>pkgng</application>:</para>
-
- <screen>&prompt.user; <userinput>pkg version -t 0.031 0.29</userinput>
-&gt;</screen>
-
- <para>Строка <literal>&gt;</literal> в выводе команды означает,
- что версия 0.031 считается выше, чем версия 0.29, что может
- быть не очевидно для того, кто выполняет портирование.</para>
- </tip>
+<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink=
+ "http://www.w3.org/1999/xlink" version="5.0" xml:id="makefiles">
+
+ <title>Настройка файла Makefile</title>
+
+ <para>Настройка файла <filename>Makefile</filename> достаточно
+ проста, и мы снова предполагаем, что перед тем, как начать, вы
+ посмотрите на существующие примеры. К тому же в этом руководстве
+ имеется <link linkend="porting-samplem">примерный
+ Makefile</link>, так что взгляните на него и, пожалуйста,
+ следуйте порядку переменных и разделов в этом образце, чтобы
+ облегчить чтение вашего порта другими людьми.</para>
+
+ <para>Итак, расположим решаемые задачи в порядке их возникновения
+ при создании вашего нового файла
+ <filename>Makefile</filename>:</para>
+
+ <sect1 xml:id="makefile-source">
+ <title>Оригинальные исходный код</title>
+
+ <para>Находится ли он в каталоге <varname>DISTDIR</varname> в
+ виде стандартного упакованного архиватором
+ <command>gzip</command> tar-архива с именем типа
+ <filename>foozolix-1.2.tar.gz</filename>? Если это так, можно
+ перейти к следующему шагу. Если нет, то вы должны попытаться
+ переопределить некоторые из переменных
+ <varname>DISTVERSION</varname>, <varname>DISTNAME</varname>,
+ <varname>EXTRACT_CMD</varname>,
+ <varname>EXTRACT_BEFORE_ARGS</varname>,
+ <varname>EXTRACT_AFTER_ARGS</varname>,
+ <varname>EXTRACT_SUFX</varname> или
+ <varname>DISTFILES</varname> в зависимости от того, насколько
+ необычен формат дистрибутивного файла.</para>
+
+ <para>В худшем случае вы можете просто определить свою
+ собственную цель <buildtarget>do-extract</buildtarget> для
+ переопределения действий по умолчанию, хотя к этому нужно будет
+ прибегать в очень редких случаях, если вообще придётся.</para>
+ </sect1>
- <para>В ситуациях, подобных этой, должно быть увеличено значение
- <varname>PORTEPOCH</varname>. Если значение
- <varname>PORTEPOCH</varname> не равно нулю, то оно добавляется к
- имени пакета, как описано в разделе выше. Значение
- <varname>PORTEPOCH</varname> никогда не должно уменьшаться или
- сбрасываться в ноль, потому что это приведёт к ошибке сравнения с
- пакетом с меньшим номером эпохи (то есть то, что пакет устарел,
- обнаружено не будет): номер новой версии (например,
- <literal>1.0,1</literal> в примере выше) останется меньше, чем
- номер предыдущей версии (20000801), однако суффикс
- <literal>,1</literal> интерпретируется различными
- автоматизированными утилитами особым образом, и окажется больше,
- чем предполагаемый суффикс <literal>,0</literal> более раннего
- пакета).</para>
-
- <para>Некорректное уменьшение или сброс <varname>PORTEPOCH</varname>
- приводит к печальным последствиям; если вы не поняли, о чём шла
- речь ранее, пожалуйста, всё же разберитесь с этим, либо спросите
- в списках рассылки.</para>
-
- <para>Предполагается, что в большинстве портов переменная
- <varname>PORTEPOCH</varname> использоваться не будет, но при
- корректном использовании <varname>PORTVERSION</varname> может
- появиться необходимость её иметь, если в будущих релизах
- программное обеспечение должно изменить структуру номера версии.
- Однако создателям портов для &os; нужно быть внимательными, когда
- разработчик выпускает релиз без официального номера версии &mdash;
- эдакие <quote>промежуточные</quote> релизы. Имеется соблазн
- пометить релиз датой его выхода, что может вызвать проблемы, как и
- в примере выше, когда будет выпущен новый
- <quote>официальный</quote> релиз.</para>
-
- <para>Например, если промежуточный релиз помечен датой 20000917, а
- предыдущая версия программного обеспечения имела номер 1.2, то
- промежуточному релизу должно быть поставлено в соответствие
- значение <varname>PORTVERSION</varname>, равное 1.2.20000917 или
- что-то похожее, но не 20000917, так как последующий релиз, скажем,
- 1.3, должен иметь численно большее значение.</para>
- </sect3>
-
- <sect3>
- <title>Пример использования переменных
- <varname>PORTREVISION</varname> и
- <varname>PORTEPOCH</varname></title>
-
- <para>Выполнен коммит порта <literal>gtkmumble</literal>, версии
- <literal>0.10</literal>, в коллекцию портов.</para>
-
- <programlisting>PORTNAME= gtkmumble
-PORTVERSION= 0.10</programlisting>
-
- <para>Значение <varname>PKGNAME</varname> станет равным
- <literal>gtkmumble-0.10</literal>.</para>
-
- <para>Обнаружена брешь в безопасности, исправление которой
- потребовало создания
- локального патча для &os;. Соответственно было увеличено
- значение переменной <varname>PORTREVISION</varname>.</para>
-
- <programlisting>PORTNAME= gtkmumble
-PORTVERSION= 0.10
-PORTREVISION= 1</programlisting>
-
- <para><varname>PKGNAME</varname> принимает значение
- <literal>gtkmumble-0.10_1</literal></para>
-
- <para>Разработчиком выпущена новая версия с номером
- <literal>0.2</literal> (оказалось, что под номером
- <literal>0.10</literal> автор имел в виду
- <literal>0.1.0</literal>, а не <quote>то, что будет выпущено после
- версии 0.9</quote> - извините, теперь уже поздно). Так как новый
- младший номер версии <literal>2</literal> по значению меньше, чем
- номер предыдущей версии <literal>10</literal>, то должно быть
- увеличено значение <varname>PORTEPOCH</varname> для того, чтобы
- заставить распознавать вновь создаваемый пакет как <quote>более
- новый</quote>. Так как это новый релиз программы, то
- <varname>PORTREVISION</varname> обнуляется (или удаляется из
- файла <filename>Makefile</filename>).</para>
-
- <programlisting>PORTNAME= gtkmumble
-PORTVERSION= 0.2
-PORTEPOCH= 1</programlisting>
-
- <para><varname>PKGNAME</varname> принимает значение
- <literal>gtkmumble-0.2,1</literal></para>
-
- <para>Следующий релиз имеет номер версии 0.3. Так как значение
- переменной <varname>PORTEPOCH</varname> никогда не уменьшается, что
- переменные, определяющие версии, теперь выглядят так:</para>
-
- <programlisting>PORTNAME= gtkmumble
-PORTVERSION= 0.3
-PORTEPOCH= 1</programlisting>
-
- <para><varname>PKGNAME</varname> принимает значение
- <literal>gtkmumble-0.3,1</literal></para>
-
- <note>
- <para>Если значение <varname>PORTEPOCH</varname> этим обновлением
- было бы сброшено в <literal>0</literal>, то кто-нибудь, имеющий
- установленный пакет <literal>gtkmumble-0.10_1</literal>, не
- смог бы опознать пакет <literal>gtkmumble-0.3</literal> как
- более новый, так как <literal>3</literal> было бы меньше, чем
- <literal>10</literal>. Помните, что в первую очередь это
- касается <varname>PORTEPOCH</varname>.</para>
- </note>
- </sect3>
- </sect2>
-
- <sect2>
- <title>Переменные <varname>PKGNAMEPREFIX</varname>
- и <varname>PKGNAMESUFFIX</varname></title>
-
- <para>Две необязательные переменные, <varname>PKGNAMEPREFIX</varname> и
- <varname>PKGNAMESUFFIX</varname>, объединяются со значениями
- <varname>PORTNAME</varname> и
- <varname>PORTVERSION</varname> для формирования
- <varname>PKGNAME</varname> в форме
- <literal>${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}</literal>.
- Добейтесь того, чтобы это соответствовало нашим <link linkend="porting-pkgname">рекомендациям по правильному выбору
- названий для пакетов</link>. В частности, в переменной
- <varname>PORTVERSION</varname> <emphasis>не разрешается</emphasis>
- использование дефиса (<literal>-</literal>). Кроме того, если в
- имени пакета присутствует часть <replaceable>language-</replaceable>
- или <replaceable>-compiled.specifics</replaceable> (смотрите ниже),
- то используйте переменные <varname>PKGNAMEPREFIX</varname> и
- <varname>PKGNAMESUFFIX</varname>, соответственно. Не делайте их
- частью значения переменной <varname>PORTNAME</varname>.</para>
- </sect2>
-
- <sect2 xml:id="porting-pkgname">
- <title>Соглашения по именованию пакетов</title>
-
- <para>Далее описаны некоторые соглашения, которым вы должны следовать
- в именовании ваших пакетов. Они были разработаны для облегчения
- просмотра каталога, так как имеется уже тысячи пакетов, а
- пользователи отвернутся от нас, если список не понравится их
- взору!</para>
-
- <para>Имя пакета должно иметь вид
- <filename>language_region-name-compiled.specifics-version.numbers</filename>.</para>
-
- <para>Имя пакета определяется как
- <literal>${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}</literal>.
- Вы должны задавать значения переменных в соответствии с этим
- форматом.</para>
-
- <orderedlist>
- <listitem>
- <para>&os; пытается поддерживать языки, на которых разговаривают
- её пользователи. Часть <replaceable>language-</replaceable>
- должна быть двухсимвольным сокращением от названия языка по
- стандарту ISO-639, если порт специфичен для конкретного языка.
- Примерами являются <literal>ja</literal> для японского,
- <literal>ru</literal> для русского, <literal>vi</literal> для
- вьетнамского, <literal>zh</literal> для китайского,
- <literal>ko</literal> для корейского и <literal>de</literal> для
- немецкого языков.</para>
-
- <para>Если ваш порт специфичен для конкретного региона внутри
- области использования языка, добавьте также двухсимвольный код
- страны. Примерами являются <literal>en_US</literal> для US
- English и <literal>fr_CH</literal> для Swiss French.</para>
-
- <para>Часть <replaceable>language-</replaceable> должна задаваться
- в переменной <varname>PKGNAMEPREFIX</varname>.</para>
- </listitem>
-
- <listitem>
- <para>Первая буква части <filename>name</filename> должна быть в
- нижнем регистре. (Оставшаяся часть названия может содержать
- буквы в верхнем регистре, так что принимайте решение сами, когда
- преобразуете имя программного пакета, содержащего в имени
- некоторое количество заглавных букв.) Существует традиция
- именовать модули для <literal>Perl 5</literal>, добавляя впереди
- <literal>p5-</literal> и преобразуя пару двоеточий в
- дефис; например, модуль <literal>Data::Dumper</literal> будет
- именоваться <literal>p5-Data-Dumper</literal>.</para>
- </listitem>
+ <sect1 xml:id="makefile-naming">
+ <title>Именование</title>
+
+ <para>В первой части <filename>Makefile</filename> порта ему
+ даётся название, указывается его номер версии и принадлежность
+ к правильной категории.</para>
+
+ <sect2>
+ <title><varname>PORTNAME</varname> и
+ <varname>PORTVERSION</varname></title>
+
+ <para>В переменной <varname>PORTNAME</varname> вы должны
+ указать основную часть имени вашего порта, а в переменной
+ <varname>PORTVERSION</varname> - номер версии.</para>
+ </sect2>
+
+ <sect2 xml:id="makefile-naming-revepoch">
+ <title><varname>PORTREVISION</varname> и
+ <varname>PORTEPOCH</varname></title>
+
+ <sect3>
+ <title><varname>PORTREVISION</varname></title>
+
+ <para>Переменная <varname>PORTREVISION</varname> представляет
+ собой монотонно увеличивающееся число, которое обнуляется
+ при каждом увеличении значения переменной
+ <varname>PORTVERSION</varname> (то есть каждый раз, когда
+ создателями выпускается новый официальный релиз), и
+ добавляется к имени пакета, если оно не равно нулю.
+ Изменения в <varname>PORTREVISION</varname> используются
+ автоматизированными инструментами (например,
+ <command>pkg version</command>, см. &man.pkg-version.8;)
+ для определения факта появления нового пакета.</para>
+
+ <para>Значение <varname>PORTREVISION</varname> должно
+ увеличиваться каждый раз, когда в порте FreeBSD делаются
+ изменения, которые как-либо меняют получаемый пакет. Сюда
+ относятся только изменения, затрагивающие построение пакета
+ с <link linkend="makefile-options">параметрами</link> по
+ умолчанию.</para>
+
+ <para>Примеры случаев, когда значение
+ <varname>PORTREVISION</varname> должно быть
+ увеличено:</para>
+ <itemizedlist>
<listitem>
- <para>Убедитесь, что имя порта и версия четко отделены и
- размещаются в переменных <varname>PORTNAME</varname> и
- <varname>PORTVERSION</varname>. Единственная причина, по
- которой <varname>PORTNAME</varname> содержит версионную часть,
- это если полученный дистрибутив сам назван таким образом, как
- это сделано для портов <filename>textproc/libxml2</filename>
- или <filename>japanese/kinput2-freewnn</filename>. В противном
- случае <varname>PORTNAME</varname> не должен содержать никакой
- информации, указывающей на версию. То, что некоторые порты
- имеют одинаковый <varname>PORTNAME</varname>, является вполне
- нормальным, как для портов <filename>www/apache*</filename>;
- в этом случае различные версии (и различные записи в индексе)
- отличаются по значениям <varname>PKGNAMEPREFIX</varname>
- и <varname>PKGNAMESUFFIX</varname>.</para>
- </listitem>
-
- <listitem>
- <para>Если порт может быть построен с различными <link linkend="makefile-masterdir">статически заданными значениями по
- умолчанию</link> (обычно это часть имени каталога в семействе
- портов), то часть <replaceable>-compiled.specifics</replaceable>
- должна определять вкомпилированные значения по умолчанию (дефис
- не обязателен). Примерами являются размеры бумаги и
- шрифтов.</para>
-
- <para>Часть <replaceable>-compiled.specifics</replaceable> должна
- задаваться в переменной <varname>PKGNAMESUFFIX</varname>.</para>
- </listitem>
-
- <listitem>
- <para>Строка с номером версии должна следовать за дефисом
- (<literal>-</literal>) и являться списком разделенных двоеточием
- чисел и букв в нижнем регистре. В частности, не разрешается
- иметь еще один дефис внутри строки с обозначением номера версии.
- Единственным исключением является строчка <literal>pl</literal>
- (означающая <quote>patchlevel</quote>), которая может
- использоваться <emphasis>только</emphasis> тогда, когда у
- программного обеспечения нет старшего и младшего номера версии.
- Если в номер версии программного обеспечения включена строчка
- типа <quote>alpha</quote>, <quote>beta</quote>,
- <quote>rc</quote> или <quote>pre</quote>, возьмите из неё первую
- букву и поставьте её непосредственно после точки. Если после
- таких строк номер версии ещё продолжается, то после буквы должно
- следовать число без дополнительной разделяющей точки.</para>
-
- <para>Смысл такого формата заключается в удобстве сортировки портов
- по номеру версии. В частности, следите за тем, чтобы компоненты
- номера версии разделялись точкой, и если там присутствует дата,
- то используйте формат
- <literal>0.0.yyyy.mm.dd</literal>, но не
- <literal>dd.mm.yyyy</literal>
- или не совместимый с проблемой Y2K
- <literal>yy.mm.dd</literal>.
- Добавление к версии префикса <literal>0.0.</literal> является
- важным, в случае если выпущен релиз с присвоением настоящей
- версии, которая в числовом представлении, конечно же, будет
- ниже, чем
- <literal>yyyy</literal>.</para>
- </listitem>
- </orderedlist>
-
- <para>Вот несколько (реальных) примеров того, как преобразовать имя из
- оригинального, придуманного авторами, к подходящему для имени
- пакета:</para>
-
- <informaltable frame="none" pgwide="1">
- <tgroup cols="6">
- <thead>
- <row>
- <entry>Имя дистрибутива</entry>
-
- <entry><varname>PKGNAMEPREFIX</varname></entry>
-
- <entry><varname>PORTNAME</varname></entry>
-
- <entry><varname>PKGNAMESUFFIX</varname></entry>
-
- <entry><varname>PORTVERSION</varname></entry>
-
- <entry>Обоснование</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry>mule-2.2.2</entry>
- <entry>(пусто)</entry>
- <entry>mule</entry>
- <entry>(пусто)</entry>
- <entry>2.2.2</entry>
- <entry>Изменений не потребовалось</entry>
- </row>
-
- <row>
- <entry>EmiClock-1.0.2</entry>
- <entry>(пусто)</entry>
- <entry>emiclock</entry>
- <entry>(пусто)</entry>
- <entry>1.0.2</entry>
- <entry>Для отдельных программ имена с заглавными буквами
- запрещены</entry>
- </row>
-
- <row>
- <entry>rdist-1.3alpha</entry>
- <entry>(пусто)</entry>
- <entry>rdist</entry>
- <entry>(пусто)</entry>
- <entry>1.3.a</entry>
- <entry>Строчки типа <literal>alpha</literal> запрещены</entry>
- </row>
-
- <row>
- <entry>es-0.9-beta1</entry>
- <entry>(пусто)</entry>
- <entry>es</entry>
- <entry>(пусто)</entry>
- <entry>0.9.b1</entry>
- <entry>Строчки типа <literal>beta</literal> запрещены</entry>
- </row>
-
- <row>
- <entry>mailman-2.0rc3</entry>
- <entry>(пусто)</entry>
- <entry>mailman</entry>
- <entry>(пусто)</entry>
- <entry>2.0.r3</entry>
- <entry>Строчки типа <literal>rc</literal> запрещены</entry>
- </row>
-
- <row>
- <entry>v3.3beta021.src</entry>
- <entry>(пусто)</entry>
- <entry>tiff</entry>
- <entry>(пусто)</entry>
- <entry>3.3</entry>
- <entry>Что это такое было вообще?</entry>
- </row>
-
- <row>
- <entry>tvtwm</entry>
- <entry>(пусто)</entry>
- <entry>tvtwm</entry>
- <entry>(пусто)</entry>
- <entry>pl11</entry>
- <entry>Всегда требуется указание номера версии</entry>
- </row>
-
- <row>
- <entry>piewm</entry>
- <entry>(пусто)</entry>
- <entry>piewm</entry>
- <entry>(пусто)</entry>
- <entry>1.0</entry>
- <entry>Всегда требуется указание номера версии</entry>
- </row>
-
- <row>
- <entry>xvgr-2.10pl1</entry>
- <entry>(пусто)</entry>
- <entry>xvgr</entry>
- <entry>(пусто)</entry>
- <entry>2.10.1</entry>
- <entry><literal>pl</literal> разрешено только при отсутствии
- старшего/младшего номера версии</entry>
- </row>
-
- <row>
- <entry>gawk-2.15.6</entry>
- <entry>ja-</entry>
- <entry>gawk</entry>
- <entry>(пусто)</entry>
- <entry>2.15.6</entry>
- <entry>Версия на японском языке</entry>
- </row>
-
- <row>
- <entry>psutils-1.13</entry>
- <entry>(пусто)</entry>
- <entry>psutils</entry>
- <entry>-letter</entry>
- <entry>1.13</entry>
- <entry>Размер бумаги задается статически во время построения
- пакета</entry>
- </row>
-
- <row>
- <entry>pkfonts</entry>
- <entry>(пусто)</entry>
- <entry>pkfonts</entry>
- <entry>300</entry>
- <entry>1.0</entry>
- <entry>пакет для шрифтов 300dpi</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>Если в исходном коде абсолютно нет информации о номере версии и
- не похоже, что автор собирается выпускать другую версию, то в
- качестве номера версии задайте просто <literal>1.0</literal> (как в
- примере с <literal>piewm</literal> выше). В противном случае
- спросите автора программы или используйте дату
- (<literal>0.0.yyyy.mm.dd</literal>)
- в качестве номера версии.</para>
- </sect2>
- </sect1>
-
- <sect1 xml:id="makefile-categories">
- <title>Разделение по категориям</title>
-
- <sect2>
- <title><varname>CATEGORIES</varname></title>
-
- <para>В процессе создания пакета он помещается в каталог
- <filename>/usr/ports/packages/All</filename>, а в одном или более
- подкаталогов из <filename>/usr/ports/packages</filename>
- создаются на него ссылки. Имена этих подкаталогов определяются
- переменной <varname>CATEGORIES</varname>. Такая схема нужна для
- облегчения жизни пользователя, когда он сталкивается с массой
- пакетов на FTP-сервере или компакт-диске. Пожалуйста, посмотрите на
- <link linkend="porting-categories">текущий список категорий</link>
- и выберите те из них,
- которые более всего подходят к вашему порту.</para>
-
- <para>Этот список также определяет, куда в дереве портов будет помещен
- порт. Если вы укажете здесь более одной категории, то
- предполагается, что файлы порта будут помещены в подкаталог с именем
- первой категории. Посмотрите <link linkend="choosing-categories">ниже</link> для получения
- подробной информации о том, как правильно выбрать категории.</para>
- </sect2>
-
- <sect2 xml:id="porting-categories">
- <title>Текущий список категорий</title>
-
- <para>Вот текущий список категорий. Те, которые отмечены
- звёздочкой (<literal>*</literal>), являются
- <emphasis>виртуальными</emphasis> категориями&mdash;они не имеют
- собственного подкаталога в дереве портов. Они используются только в
- качестве вторичных категорий, и только для поиска.</para>
-
- <note>
- <para>Для невиртуальных категорий имеется однострочное описание
- в <varname>COMMENT</varname> в <filename>Makefile</filename>
- соответствующего подкаталога.</para>
- </note>
-
- <informaltable frame="none" pgwide="1">
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Категория</entry>
-
- <entry>Описание</entry>
-
- <entry>Примечания</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><filename>accessibility</filename></entry>
- <entry>Порты для помощи пользователям с ограниченными
- возможностями.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>afterstep*</filename></entry>
- <entry>Порты, поддерживающие менеджер окон <link xlink:href="http://www.afterstep.org">AfterStep</link>.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>arabic</filename></entry>
- <entry>Поддержка арабского языка.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>archivers</filename></entry>
- <entry>Инструменты для работы с архивами.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>astro</filename></entry>
- <entry>Приложения, связанные с астрономией.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>audio</filename></entry>
- <entry>Поддержка работы со звуком.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>benchmarks</filename></entry>
- <entry>Утилиты для измерения производительности системы.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>biology</filename></entry>
- <entry>Программное обеспечение, связанное с биологией.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>cad</filename></entry>
- <entry>Инструменты Систем Автоматизированного
- Проектирования.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>chinese</filename></entry>
- <entry>Поддержка китайского языка.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>comms</filename></entry>
- <entry>Коммуникационное программное обеспечение.</entry>
- <entry>В основном программы для работы с последовательным
- портом.</entry>
- </row>
-
- <row>
- <entry><filename>converters</filename></entry>
- <entry>Утилиты для преобразования символьных форматов.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>databases</filename></entry>
- <entry>Базы данных.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>deskutils</filename></entry>
- <entry>То, что было на столе до изобретения компьютеров.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>devel</filename></entry>
- <entry>Утилиты для разработки программного обеспечения.</entry>
- <entry>Не помещайте сюда библиотеки просто потому что это
- библиотеки&mdash;если они подпадают под какую-то другую
- категорию, то их быть здесь не должно.</entry>
- </row>
-
- <row>
- <entry><filename>dns</filename></entry>
- <entry>Программное обеспечение для работы с DNS.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>docs*</filename></entry>
- <entry>Мета-порты для документации &os;.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>editors</filename></entry>
- <entry>Редакторы общего назначения.</entry>
- <entry>Специализированные редакторы относят к разделу для
- соответствующих инструментов (например, редактор
- математических формул попадает в
- категорию <filename>math</filename>).</entry>
- </row>
-
- <row>
- <entry><filename>elisp*</filename></entry>
- <entry>Порты для Emacs lisp.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>emulators</filename></entry>
- <entry>Эмуляторы других операционных систем.</entry>
- <entry>Эмуляторы терминалов сюда <emphasis>не</emphasis>
- относятся&mdash;те, которые разработаны для X, должны быть в
- категории <filename>x11</filename>, а текстовые в
- <filename>comms</filename> или <filename>misc</filename>, в
- зависимости от конкретного их предназначения.</entry>
- </row>
-
- <row>
- <entry><filename>finance</filename></entry>
- <entry>Приложения для работы с деньгами, финансами и всем, что
- с этим связано.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>french</filename></entry>
- <entry>Поддержка французского языка.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>ftp</filename></entry>
- <entry>Клиенты и серверы FTP.</entry>
- <entry>Если ваш порт понимает как FTP,
- так и HTTP, поместите его в категорию
- <filename>ftp</filename> и укажите вторичную категорию
- <filename>www</filename>.</entry>
- </row>
-
- <row>
- <entry><filename>games</filename></entry>
- <entry>Игры.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>geography*</filename></entry>
- <entry>Программное обеспечение, связанное с географией.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>german</filename></entry>
- <entry>Поддержка немецкого языка.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>gnome*</filename></entry>
- <entry>Порты Проекта <link xlink:href="http://www.gnome.org">GNOME</link>.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>gnustep*</filename></entry>
- <entry>Программное обеспечение для окружения рабочего
- стола GNUstep.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>graphics</filename></entry>
- <entry>Графические утилиты.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>hamradio*</filename></entry>
- <entry>Программное обеспечение для любительского радио</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>haskell*</filename></entry>
- <entry>Программное обеспечение, связанное с языком
- Haskell.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>hebrew</filename></entry>
- <entry>Поддержка иврита.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>hungarian</filename></entry>
- <entry>Поддержка венгерского языка.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>ipv6*</filename></entry>
- <entry>Программное обеспечение, связанное с IPv6.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>irc</filename></entry>
- <entry>Утилиты для работы с Internet Relay Chat.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>japanese</filename></entry>
- <entry>Поддержка японского языка.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>java</filename></entry>
- <entry>Программное обеспечение, связанное с языком
- Java&trade;.</entry>
- <entry>Категория <filename>java</filename> ни в коем случае
- не должна быть единственной для порта. Оставьте для портов,
- непосредственно имеющих отношение к языку Java, портерам
- также рекомендуется не использовать
- <filename>java</filename> как основную категорию
- порта.</entry>
- </row>
-
- <row>
- <entry><filename>kde*</filename></entry>
- <entry>Порты проекта
- <link xlink:href="http://www.kde.org">KDE</link>.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>kld*</filename></entry>
- <entry>Загружаемые модули ядра.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>korean</filename></entry>
- <entry>Поддержка корейского языка.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>lang</filename></entry>
- <entry>Языки программирования.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>linux*</filename></entry>
- <entry>Linux приложения и утилиты.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>lisp*</filename></entry>
- <entry>Программное обеспечение, связанное с языком
- Lisp.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>mail</filename></entry>
- <entry>Программы для работы с электронной почтой.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>math</filename></entry>
- <entry>Программное обеспечение для численных вычислений и
- другие утилиты, связанные с математикой.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>mbone*</filename></entry>
- <entry>Приложения для MBone.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>misc</filename></entry>
- <entry>Различные утилиты</entry>
- <entry>В основном то, что не попадает в
- другие категории. Если это возможно, попробуйте найти
- более подходящую, чем <literal>misc</literal>, категорию для
- вашего порта, так как здесь порты теряются.</entry>
- </row>
-
- <row>
- <entry><filename>multimedia</filename></entry>
- <entry>Программное обеспечение для работы с
- мультимедиа.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>net</filename></entry>
- <entry>Различное сетевое программное обеспечение.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>net-im</filename></entry>
- <entry>Программы мгновенного обмена сообщениями.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>net-mgmt</filename></entry>
- <entry>Программное обеспечение для сетевого управления.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>net-p2p</filename></entry>
- <entry>Приложения для пиринговых сетей.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>news</filename></entry>
- <entry>Программное обеспечение для работы с конференциями
- USENET.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>palm</filename></entry>
- <entry>Программная поддержка <link xlink:href="http://www.palm.com/">Palm&trade;</link>.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>parallel*</filename></entry>
- <entry>Приложения, связанные с параллельными
- вычислениями.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>pear*</filename></entry>
- <entry>Порты, относящиеся к технологии Pear PHP.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>perl5*</filename></entry>
- <entry>Порты, которым для работы требуется
- <application>Perl</application> версии 5.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>plan9*</filename></entry>
- <entry>Различные программы из <link xlink:href="http://www.cs.bell-labs.com/plan9dist/">
- Plan9</link>.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>polish</filename></entry>
- <entry>Поддержка польского языка.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>ports-mgmt</filename></entry>
- <entry>Порты для управления, установки и разработки
- портов и пакетов &os;.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>portuguese</filename></entry>
- <entry>Поддержка португальского языка.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>print</filename></entry>
- <entry>Программное обеспечение для печати.</entry>
- <entry>Инструменты для вёрстки (просмотрщики и тому подобное)
- тоже относятся сюда.</entry>
- </row>
-
- <row>
- <entry><filename>python*</filename></entry>
- <entry>Программное обеспечение, связанное с языком <link xlink:href="http://www.python.org/">Python</link>.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>ruby*</filename></entry>
- <entry>Программное обеспечение, связанное с языком <link xlink:href="http://www.ruby-lang.org/">Ruby</link>.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>rubygems*</filename></entry>
- <entry>Порты для пакетов <link xlink:href="http://www.rubygems.org/">RubyGems</link>.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>russian</filename></entry>
- <entry>Поддержка русского языка.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>scheme*</filename></entry>
- <entry>Программное обеспечение, связанное с языком
- Scheme.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>science</filename></entry>
- <entry>Научные программы, которые не подпадают под другие
- категории, скажем, <filename>astro</filename>,
- <filename>biology</filename> или
- <filename>math</filename>.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>security</filename></entry>
- <entry>Программы, обеспечивающие безопасность системы.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>shells</filename></entry>
- <entry>Различные командные процессоры.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>sysutils</filename></entry>
- <entry>Системные утилиты.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>spanish*</filename></entry>
- <entry>Поддержка испанского языка.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>tcl*</filename></entry>
- <entry>Порты, для работы которых нужен Tcl.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>textproc</filename></entry>
- <entry>Утилиты для обработки текстов.</entry>
- <entry>Инструменты для вёрстки помещаются в категорию
- <filename>print</filename>, а не сюда.</entry>
- </row>
-
- <row>
- <entry><filename>tk*</filename></entry>
- <entry>Порты, для работы которых нужен Tk.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>ukrainian</filename></entry>
- <entry>Поддержка украинского языка.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>vietnamese</filename></entry>
- <entry>Поддержка вьетнамского языка.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>windowmaker*</filename></entry>
- <entry>Порты, поддерживающие менеджер окон WindowMaker.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>www</filename></entry>
- <entry>Программное обеспечение, связанное с World Wide
- Web.</entry>
- <entry>Поддержка языка HTML относится сюда же.</entry>
- </row>
-
- <row>
- <entry><filename>x11</filename></entry>
- <entry>X Window System и иже с ними.</entry>
- <entry>Эта категория
- предназначена только для программного обеспечения, которое
- поддерживает саму оконную систему. Не помещайте сюда
- обычные приложения для X: большинство из них должны быть
- перенесены в другие категории <filename>x11-*</filename>
- (смотрите ниже).</entry>
- </row>
-
- <row>
- <entry><filename>x11-clocks</filename></entry>
- <entry>Часы для X11.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>x11-drivers</filename></entry>
- <entry>Драйверы X11.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>x11-fm</filename></entry>
- <entry>Менеджеры файлов для X11.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>x11-fonts</filename></entry>
- <entry>Шрифты для X11 и утилиты для работы с ними.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>x11-servers</filename></entry>
- <entry>Серверы для X11.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>x11-themes</filename></entry>
- <entry>Темы для X11.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>x11-toolkits</filename></entry>
- <entry>Пакеты разработчика для X11.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>x11-wm</filename></entry>
- <entry>Оконные менеджеры для X11.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>xfce*</filename></entry>
- <entry>Порты, связанные с окружением рабочего стола
- <link xlink:href="http://www.xfce.org/">Xfce</link>.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>zope*</filename></entry>
- <entry>Поддержка <link xlink:href="http://www.zope.org/">Zope</link>.</entry>
- <entry/>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect2>
-
- <sect2 xml:id="choosing-categories">
- <title>Выбор правильной категории</title>
-
- <para>Так как многие категории перекрываются, вам часто необходимо
- будет выбирать, какая их них должна быть основной для вашего порта.
- Есть несколько правил, по которым можно решить этот вопрос. Вот
- список приоритетов, в уменьшающейся степени предпочтения:</para>
+ <para>Добавление патчей для исправления уязвимостей,
+ ошибок, или добавления новой функциональности в
+ порт.</para>
+ </listitem>
- <itemizedlist>
<listitem>
- <para>Первая категория должна быть физической категорий (смотрите
- <link linkend="porting-categories">выше</link>). Это
- необходимо для создания пакетов. После этого виртуальные
- и физические категории могут смешиваться.</para>
+ <para>Изменения в файле <filename>Makefile</filename>
+ порта для включения и выключения параметров,
+ определяемых при компиляции пакета.</para>
</listitem>
<listitem>
- <para>Сначала всегда идут категории, специфичные для языков.
- Например, если ваш порт устанавливает японские шрифты для X11,
- то строчка <varname>CATEGORIES</varname> должна иметь вид
- <filename>japanese x11-fonts</filename>.</para>
+ <para>Изменения в списке упаковки или в поведении пакета
+ во время его установки (например, изменение скрипта,
+ генерирующего начальные данные для пакета, такие, как
+ ssh-ключи для хоста).</para>
</listitem>
<listitem>
- <para>Более конкретные категории идут первыми перед более
- общими. В частности, редактор HTML должен быть описан как
- <filename>www editors</filename>, а не наоборот. Кроме того, вы
- не должны указывать категорию <filename>net</filename>, если порт
- относится к одной из категорий <filename>irc</filename>,
- <filename>mail</filename>,
- <filename>news</filename>, <filename>security</filename> или
- <filename>www</filename>, так как <filename>net</filename>
- включается автоматически.</para>
+ <para>Увеличение версии динамической библиотеки, от
+ которой зависит порт (в этом случае тот, кто попытается
+ установить старый пакет после установки более новой
+ версии библиотеки, не сможет этого сделать, потому что
+ при этом будет делаться поиск старой библиотеки
+ libfoo.x, а не libfoo.(x+1)).</para>
</listitem>
<listitem>
- <para><filename>x11</filename> используется как вторичная категория
- только в случае, если в качестве основной категории указан
- естественный язык. В частности, вам не нужно указывать
- <filename>x11</filename> в качестве категории для
- приложений X.</para>
+ <para>Большие функциональные изменения в дистрибутивном
+ файле порта, происходящие без объявлений, и приводящие
+ к большим изменениям, то есть изменения в дистрибутиве
+ требуют корректировки файла
+ <filename>distinfo</filename> без соответствующего
+ изменения <varname>PORTVERSION</varname>, когда как
+ команда <command>diff -ru</command> между новой и
+ старой версиями показывает нетривиальные изменения в
+ коде.</para>
</listitem>
+ </itemizedlist>
+
+ <para>Примеры изменений, которые не требуют увеличения
+ переменной <varname>PORTREVISION</varname>:</para>
+ <itemizedlist>
<listitem>
- <para>Режимы для редактора <application>Emacs</application> должны
- помещаться в ту же категорию, что и приложение, которое
- поддерживается этим режимом, а не в <filename>editors</filename>.
- Например, режим <application>Emacs</application> для
- редактирования исходного кода некоторого языка программирования
- должен быть помещен в категорию <filename>lang</filename>.</para>
+ <para>Изменения стиля в скелете порта без функциональных
+ изменений в пакете.</para>
</listitem>
<listitem>
- <para>Порты, устанавливающие загружаемые модули ядра, должны
- содержать виртуальную категорию <filename>kld</filename> в
- строке <varname>CATEGORIES</varname>. Это одно из действий,
- выполняемых автоматически с добавлением
- <literal>kmod</literal> в строке <varname>USES</varname>.
- </para>
+ <para>Изменения в переменной
+ <varname>MASTER_SITES</varname> или другие
+ функциональные изменения порта, которые не затрагивают
+ получающегося пакета.</para>
</listitem>
<listitem>
- <para><filename>misc</filename>
- не должна указываться вместе с любой другой невиртуальной
- категорией. Если вы указываете <literal>misc</literal>
- вместе с чем-то ещё в строке <varname>CATEGORIES</varname>,
- это значит, что вы можете спокойно удалить
- <literal>misc</literal> и просто поместить порт в этот
- другой подкаталог!</para>
+ <para>Тривиальные патчи к дистрибутивному файлу, такие,
+ как исправления опечаток, которые не так уж важны, что
+ пользователи пакета должны озаботиться
+ обновлением.</para>
</listitem>
<listitem>
- <para>Если ваш порт решительным образом не подпадает ни под какую
- категорию, поместите его в <filename>misc</filename>.</para>
- </listitem>
- </itemizedlist>
-
- <para>Если вы не уверены в правильности выбора категории, пожалуйста,
- отметьте это в вашем сообщении через &man.send-pr.1;, чтобы мы
- могли обсудить это до того, как включить порт в Коллекцию. Если вы
- являетесь коммиттером, пошлите замечание на адрес &a.ports;, чтобы мы
- могли обсудить это. Зачастую новые порты помещаются не в ту
- категорию только для того, чтобы их оттуда сразу же удалили.
- Это приводит к излишнему и ненужному росту основного хранилища
- исходных текстов.</para>
- </sect2>
-
- <sect2 xml:id="proposing-categories">
- <title>Предложение новой категории</title>
-
- <para>Поскольку со временем Коллекция Портов увеличилась, то в связи
- с этим были добавлены различные новые категории. Новые категории
- могут быть или <emphasis>виртуальными</emphasis> категориями&mdash;
- которые не имеют соответствующего подкаталога в дереве портов&mdash;
- или <emphasis>физическими</emphasis> категориями&mdash;у которых
- он есть. Следующий текст содержит обсуждение вопросов, возникающих
- при создании новой физической категории, чтобы вы могли понимать
- их, когда предложите новую категорию.</para>
-
- <para>В соответствие с существующей практикой мы избегаем создания
- новой физической категории, пока достаточно большое число портов
- логически ей не принадлежит или же порты, которые могли бы ей
- принадлежать, не являются логически обособленной группой,
- представляющей для всех ограниченный интерес (в частности,
- категории, относящиеся к естественным языкам); предпочтительно
- выполнение обоих условий.</para>
-
- <para>Основной причиной для этого является то, что такое изменение
- создает <link xlink:href="&url.articles.committers-guide;/#ports">изрядное
- количество работы</link> и для коммиттеров, и для всех тех
- пользователей, которые отслеживают изменения в Коллекции Портов.
- В дополнение, предложенная категория создает естественное
- разногласие. (Пожалуй, потому что не существует четкого соглашения,
- является ли категория <quote>слишком большой</quote>, или должны
- ли категории предоставлять себя для просмотра (и, таким образом,
- какое количество категорий было бы идеальным значением), и так
- далее.)</para>
-
- <para>Процедура:</para>
-
- <procedure>
- <step>
- <para>Предложите новую категорию на &a.ports;. Вам следует
- включить для новой категории детальное обоснование, в том числе
- почему вы считаете, что существующие категории не являются
- достаточными, и список существующих портов, предложенных для
- перемещения. (Если есть новые порты, ожидающие в
- <application>GNATS</application> и попадающие в эту категорию,
- то укажите их тоже.) Если вы являетесь сопровождающим и/или
- отправителем, то укажите это соответственно, так как это может
- помочь вам в вашем деле.</para>
- </step>
-
- <step>
- <para>Принимайте участие в обсуждении.</para>
- </step>
-
- <step>
- <para>Если кажется, что для вашей идеи появилась поддержка,
- отправьте PR, который будет включать обоснование и список
- существующих портов, которые надо переместить. В идеале
- этот PR должен также включать патчи для следующего:</para>
-
- <itemizedlist>
- <listitem>
- <para><filename>Makefile</filename>'ы для новых портов в
- результате репозиторного копирования</para>
- </listitem>
-
- <listitem>
- <para><filename>Makefile</filename> для категорий старых
- портов</para>
- </listitem>
-
- <listitem>
- <para><filename>Makefile</filename>'ы для портов, зависящих
- от старых портов</para>
- </listitem>
-
- <listitem>
- <para>(в дополнение, вы можете включить другие файлы,
- требующие изменений, согласно процедуре из Руководства
- Коммиттера.)</para>
- </listitem>
- </itemizedlist>
- </step>
-
- <step>
- <para>Поскольку это затрагивает инфраструктуру портов и
- охватывает не только выполнение репозиторного копирования, но
- также, возможно, и выполнение регрессивных тестов на кластере
- построения, то PR должна назначать себе &a.portmgr;.</para>
- </step>
-
- <step>
- <para>Если этот PR одобрен, то коммиттеру нужно продолжить
- остальную часть процедуры, которая <link xlink:href="&url.articles.committers-guide;/article.html#PORTS">
- изложена в Руководстве Коммиттера</link>.</para>
- </step>
- </procedure>
-
- <para>Предложение новой виртуальной категории должно быть схожим
- с вышеизложенным, но при этом затрагивать намного меньше,
- поскольку ни один из портов не будет перемещен в действительности.
- В этом случае единственными патчами, включенными в PR, будут
- те, что добавляют новую категорию в <varname>CATEGORIES</varname>
- каждого из затрагиваемых портов.</para>
- </sect2>
-
- <sect2 xml:id="proposing-reorg">
- <title>Предложение реорганизации всех категорий</title>
-
- <para>Время от времени кто-нибудь предлагает произвести реорганизацию
- категорий либо до двухуровневой, либо другого типа на основе
- ключевых слов. На данный момент из этих предложений ничего не
- получилось, потому что, хотя они просты в реализации, но
- предполагаемая переделка всей коллекции портов по меньшей мере
- приводит в уныние. Пожалуйста, прочтите историю этих предложений
- в архивах рассылок перед тем, как присылать свои соображения;
- более того, вы должны быть готовы представить работающий
- прототип.</para>
- </sect2>
- </sect1>
-
- <sect1 xml:id="makefile-distfiles">
- <title>Дистрибутивные файлы</title>
-
- <para>Во второй части <filename>Makefile</filename> задаётся, какие
- файлы и откуда должны быть сгружены для того, чтобы построить
- порт.</para>
-
- <sect2>
- <title><varname>DISTVERSION/DISTNAME</varname></title>
-
- <para>В переменной <varname>DISTNAME</varname> указывается имя порта
- так, как назвали его создатели программного обеспечения. Значение
- <varname>DISTNAME</varname> по умолчанию совпадает с
- <literal>${PORTNAME}-${PORTVERSION}</literal>, так что
- переопределяете её значение только в случае необходимости.
- <varname>DISTNAME</varname> используется только в двух местах.
- Во-первых, список дистрибутивных файлов
- (<varname>DISTFILES</varname>) по умолчанию состоит из
- <varname>${DISTNAME}</varname><varname>${EXTRACT_SUFX}</varname>. И
- во-вторых, предполагается, что дистрибутивный файл будет распакован в
- подкаталог с именем <varname>WRKSRC</varname>, значение которого по
- умолчанию есть не что иное, как
- <filename>work/${DISTNAME}</filename>.</para>
-
- <para>Названия некоторых дистрибутивов, которые не укладываются в
- <literal>${PORTNAME}-${PORTVERSION}</literal>-схему, могут быть
- автоматически обработаны посредством установки переменной
- <varname>DISTVERSION</varname>. <varname>PORTVERSION</varname> и
- <varname>DISTNAME</varname> будут унаследованы автоматически, но
- конечно же могут быть переопределены. Следующая таблица
- демонстрирует некоторые примеры:</para>
-
- <informaltable frame="none" pgwide="0">
- <tgroup cols="2">
- <thead>
- <row>
- <entry><varname>DISTVERSION</varname></entry>
- <entry><varname>PORTVERSION</varname></entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry>0.7.1d</entry>
- <entry>0.7.1.d</entry>
- </row>
-
- <row>
- <entry>10Alpha3</entry>
- <entry>10.a3</entry>
- </row>
-
- <row>
- <entry>3Beta7-pre2</entry>
- <entry>3.b7.p2</entry>
- </row>
-
- <row>
- <entry>8:f_17</entry>
- <entry>8f.17</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <note>
- <para>Значения переменных <varname>PKGNAMEPREFIX</varname>
- и <varname>PKGNAMESUFFIX</varname> не влияют на значение
- <varname>DISTNAME</varname>. Заметьте также, что если значение
- <varname>WRKSRC</varname> равно
- <filename>work/${PORTNAME}-${PORTVERSION}</filename>,
- и в случае, когда оригинальный архив называется по имени, отличном
- от <varname>${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}</varname>,
- скорее всего, вы должны оставить <varname>DISTNAME</varname>
- как есть&mdash; лучше переопределить <varname>DISTFILES</varname>,
- чем задавать значения как
- <varname>DISTNAME</varname>, так и <varname>WRKSRC</varname>
- (и, возможно, ещё и <varname>EXTRACT_SUFX</varname>).</para>
- </note>
- </sect2>
-
- <sect2>
- <title><varname>MASTER_SITES</varname></title>
-
- <para>Содержит часть с каталогом FTP/HTTP-URL, которая указывает на
- оригинальный архив на сервере <varname>MASTER_SITES</varname>. Не
- забудьте лидирующий слэш (<filename>/</filename>)!</para>
-
- <para>Макрос команды <command>make</command> будет пытаться
- воспользоваться этой переменной для получения дистрибутивного файла
- с помощью программы <varname>FETCH</varname>, если он не будет найден
- в системе.</para>
-
- <para>Рекомендуется помещать в список много сайтов, предпочтительно с
- разных континентов. Это поможет при наличии проблем с мировой сетью.
- Мы даже планируем добавить поддержку автоматического определения
- ближайшего сайта и сгрузки файлов оттуда; наличие нескольких сайтов
- будет способствовать этому начинанию.</para>
-
- <para>Если оригинальный архив находится на одном из таких популярных
- серверов, как SourceForge, GNU или Perl CPAN, то указывайте эти
- сайты в простой форме при помощи
- <varname>MASTER_SITE_<replaceable>*</replaceable></varname>
- (к примеру, <varname>MASTER_SITE_SOURCEFORGE</varname>,
- <varname>MASTER_SITE_GNU</varname> или
- <varname>MASTER_SITE_PERL_CPAN</varname>. Просто укажите в переменной
- <varname>MASTER_SITES</varname> одно из этих значений, а в
- переменной <varname>MASTER_SITE_SUBDIR</varname> задайте путь к
- архиву. Вот пример:</para>
-
- <programlisting>MASTER_SITES= ${MASTER_SITE_GNU}
-MASTER_SITE_SUBDIR= make</programlisting>
-
- <para>Или можно использовать сокращенный формат:</para>
-
- <programlisting>MASTER_SITES= GNU/make</programlisting>
-
- <para>Эти переменные определены в файле
- <filename>/usr/ports/Mk/bsd.sites.mk</filename>. Всё время
- добавляются новые записи, так что обращайтесь к последней версии
- этого файла перед тем, как послать нам свой порт.</para>
-
- <para>Для популярных сайтов существует несколько
- <emphasis>магических</emphasis> макросов с заранее известной
- структурой каталогов. Используйте для них сокращения, и система
- попытается угадать для вас правильный подкаталог.</para>
-
- <programlisting>MASTER_SITES= SF</programlisting>
-
- <para>Если попытка угадать не удалась, то это может быть переписано
- следующим образом.</para>
-
- <programlisting>MASTER_SITES= SF/stardict/WyabdcRealPeopleTTS/${PORTVERSION}</programlisting>
-
- <para>Что также можно записать в таком виде:</para>
-
- <programlisting>MASTER_SITES= SF
-MASTER_SITE_SUBDIR= stardict/WyabdcRealPeopleTTS/${PORTVERSION}</programlisting>
-
- <table frame="none">
- <title>Популярные магические макросы для
- <varname>MASTER_SITES</varname></title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Macro</entry>
-
- <entry>Assumed subdirectory</entry>
- </row>
- </thead>
+ <para>Исправления, касающиеся этапа построения, которые
+ делают возможным построение пакета, если ранее это было
+ невозможно сделать (пока изменения не приводят к
+ изменению работы на любых других платформах, на которых
+ порт ранее строился). Так как
+ <varname>PORTREVISION</varname> отражает содержимое
+ пакета, то, если ранее пакет не строился, то нет нужды
+ увеличивать <varname>PORTREVISION</varname> для отметки
+ изменения.</para>
+ </listitem>
+ </itemizedlist>
- <tbody>
- <row>
- <entry><varname>BERLIOS</varname></entry>
+ <para>Правило, которому нужно приблизительно следовать,
+ заключается в том, что нужно спрашивать себя, является ли
+ вносимое в порт изменение таким, что от него выиграют все
+ (в виде усовершенствования, исправления или благодаря тому,
+ что новый пакет будет вообще работоспособным), и примите во
+ внимание тот факт, что при этом все, кто регулярно
+ обновляют своё дерево портов, будут обязаны это сделать.
+ Если это так, то переменная <varname>PORTREVISION</varname>
+ должна быть увеличена.</para>
+ </sect3>
+
+ <sect3>
+ <title><varname>PORTEPOCH</varname></title>
+
+ <para>Время от времени разработчик программного обеспечения
+ или создатель порта &os; делают что-то не так и выпускают
+ версию программы, номер которой меньше предыдущей версии.
+ Примером этого является порт, название которого меняется с
+ foo-20000801 на foo-1.0 (изначально это не считалось бы
+ более новой версией, так как 20000801 численно больше, чем
+ 1).</para>
+
+ <tip>
+ <para>Результат сравнения номера версии не всегда очевиден.
+ Для выполнения сравнения двух строк с номером версии
+ можно использовать <command>pkg version</command> (см.
+ &man.pkg-version.8;). Например:</para>
+
+ <screen>&prompt.user; <userinput>pkg version -t 0.031 0.29</userinput>
+&gt;</screen>
- <entry><varname>/${PORTNAME:L}</varname></entry>
- </row>
+ <para>Строка <literal>&gt;</literal> в выводе команды
+ означает, что версия 0.031 считается выше, чем версия
+ 0.29, что может быть не очевидно для того, кто выполняет
+ портирование.</para>
+ </tip>
- <row>
- <entry><varname>CHEESESHOP</varname></entry>
+ <para>В ситуациях, подобных этой, должно быть увеличено
+ значение <varname>PORTEPOCH</varname>. Если значение
+ <varname>PORTEPOCH</varname> не равно нулю, то оно
+ добавляется к имени пакета, как описано в разделе выше.
+ Значение <varname>PORTEPOCH</varname> никогда не должно
+ уменьшаться или сбрасываться в ноль, потому что это
+ приведёт к ошибке сравнения с пакетом с меньшим номером
+ эпохи (то есть то, что пакет устарел, обнаружено не будет):
+ номер новой версии (например, <literal>1.0,1</literal> в
+ примере выше) останется меньше, чем номер предыдущей версии
+ (20000801), однако суффикс <literal>,1</literal>
+ интерпретируется различными автоматизированными утилитами
+ особым образом, и окажется больше, чем предполагаемый
+ суффикс <literal>,0</literal> более раннего пакета).</para>
+
+ <para>Некорректное уменьшение или сброс
+ <varname>PORTEPOCH</varname> приводит к печальным
+ последствиям; если вы не поняли, о чём шла речь ранее,
+ пожалуйста, всё же разберитесь с этим, либо спросите в
+ списках рассылки.</para>
+
+ <para>Предполагается, что в большинстве портов переменная
+ <varname>PORTEPOCH</varname> использоваться не будет, но
+ при корректном использовании <varname>PORTVERSION</varname>
+ может появиться необходимость её иметь, если в будущих
+ релизах программное обеспечение должно изменить структуру
+ номера версии. Однако создателям портов для &os; нужно
+ быть внимательными, когда разработчик выпускает релиз без
+ официального номера версии &mdash; эдакие
+ <quote>промежуточные</quote> релизы. Имеется соблазн
+ пометить релиз датой его выхода, что может вызвать
+ проблемы, как и в примере выше, когда будет выпущен новый
+ <quote>официальный</quote> релиз.</para>
+
+ <para>Например, если промежуточный релиз помечен датой
+ 20000917, а предыдущая версия программного обеспечения
+ имела номер 1.2, то промежуточному релизу должно быть
+ поставлено в соответствие значение
+ <varname>PORTVERSION</varname>, равное 1.2.20000917 или
+ что-то похожее, но не 20000917, так как последующий релиз,
+ скажем, 1.3, должен иметь численно большее значение.</para>
+ </sect3>
+
+ <sect3>
+ <title>Пример использования переменных
+ <varname>PORTREVISION</varname> и
+ <varname>PORTEPOCH</varname></title>
+
+ <para>Выполнен коммит порта <literal>gtkmumble</literal>,
+ версии <literal>0.10</literal>, в коллекцию портов.</para>
+
+ <programlisting>PORTNAME= gtkmumble
+PORTVERSION= 0.10</programlisting>
+
+ <para>Значение <varname>PKGNAME</varname> станет равным
+ <literal>gtkmumble-0.10</literal>.</para>
+
+ <para>Обнаружена брешь в безопасности, исправление которой
+ потребовало создания локального патча для &os;.
+ Соответственно было увеличено значение переменной
+ <varname>PORTREVISION</varname>.</para>
+
+ <programlisting>PORTNAME= gtkmumble
+PORTVERSION= 0.10
+PORTREVISION= 1</programlisting>
+
+ <para><varname>PKGNAME</varname> принимает значение
+ <literal>gtkmumble-0.10_1</literal></para>
+
+ <para>Разработчиком выпущена новая версия с номером
+ <literal>0.2</literal> (оказалось, что под номером
+ <literal>0.10</literal> автор имел в виду
+ <literal>0.1.0</literal>, а не <quote>то, что будет
+ выпущено после версии 0.9</quote> - извините, теперь уже
+ поздно). Так как новый младший номер версии
+ <literal>2</literal> по значению меньше, чем номер
+ предыдущей версии <literal>10</literal>, то должно быть
+ увеличено значение <varname>PORTEPOCH</varname> для того,
+ чтобы заставить распознавать вновь создаваемый пакет как
+ <quote>более новый</quote>. Так как это новый релиз
+ программы, то <varname>PORTREVISION</varname> обнуляется
+ (или удаляется из файла
+ <filename>Makefile</filename>).</para>
+
+ <programlisting>PORTNAME= gtkmumble
+PORTVERSION= 0.2
+PORTEPOCH= 1</programlisting>
+
+ <para><varname>PKGNAME</varname> принимает значение
+ <literal>gtkmumble-0.2,1</literal></para>
+
+ <para>Следующий релиз имеет номер версии 0.3. Так как
+ значение переменной <varname>PORTEPOCH</varname> никогда не
+ уменьшается, что переменные, определяющие версии, теперь
+ выглядят так:</para>
+
+ <programlisting>PORTNAME= gtkmumble
+PORTVERSION= 0.3
+PORTEPOCH= 1</programlisting>
+
+ <para><varname>PKGNAME</varname> принимает значение
+ <literal>gtkmumble-0.3,1</literal></para>
- <entry><varname>/packages/source/source/${DISTNAME:C/(.).*/\1/}/${DISTNAME:C/(.*)-[0-9].*/\1/}</varname></entry>
- </row>
+ <note>
+ <para>Если значение <varname>PORTEPOCH</varname> этим
+ обновлением было бы сброшено в <literal>0</literal>, то
+ кто-нибудь, имеющий установленный пакет
+ <literal>gtkmumble-0.10_1</literal>, не смог бы опознать
+ пакет <literal>gtkmumble-0.3</literal> как более новый,
+ так как <literal>3</literal> было бы меньше, чем
+ <literal>10</literal>. Помните, что в первую очередь это
+ касается <varname>PORTEPOCH</varname>.</para>
+ </note>
+ </sect3>
+ </sect2>
+
+ <sect2>
+ <title>Переменные <varname>PKGNAMEPREFIX</varname> и
+ <varname>PKGNAMESUFFIX</varname></title>
+
+ <para>Две необязательные переменные,
+ <varname>PKGNAMEPREFIX</varname> и
+ <varname>PKGNAMESUFFIX</varname>, объединяются со значениями
+ <varname>PORTNAME</varname> и <varname>PORTVERSION</varname>
+ для формирования <varname>PKGNAME</varname> в форме
+ <literal>${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}</literal>.
+ Добейтесь того, чтобы это соответствовало нашим
+ <link linkend="porting-pkgname">рекомендациям по правильному
+ выбору названий для пакетов</link>. В частности, в
+ переменной <varname>PORTVERSION</varname> <emphasis>не
+ разрешается</emphasis> использование дефиса
+ (<literal>-</literal>). Кроме того, если в имени пакета
+ присутствует часть <replaceable>language-</replaceable> или
+ <replaceable>-compiled.specifics</replaceable> (смотрите
+ ниже), то используйте переменные
+ <varname>PKGNAMEPREFIX</varname> и
+ <varname>PKGNAMESUFFIX</varname>, соответственно. Не делайте
+ их частью значения переменной
+ <varname>PORTNAME</varname>.</para>
+ </sect2>
+
+ <sect2 xml:id="porting-pkgname">
+ <title>Соглашения по именованию пакетов</title>
+
+ <para>Далее описаны некоторые соглашения, которым вы должны
+ следовать в именовании ваших пакетов. Они были разработаны
+ для облегчения просмотра каталога, так как имеется уже тысячи
+ пакетов, а пользователи отвернутся от нас, если список не
+ понравится их взору!</para>
+
+ <para>Имя пакета должно иметь вид
+ <filename>language_region-name-compiled.specifics-version.numbers</filename>.</para>
+
+ <para>Имя пакета определяется как
+ <literal>${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}</literal>.
+ Вы должны задавать значения переменных в соответствии с этим
+ форматом.</para>
- <row>
- <entry><varname>DEBIAN</varname></entry>
+ <orderedlist>
+ <listitem>
+ <para>&os; пытается поддерживать языки, на которых
+ разговаривают её пользователи. Часть
+ <replaceable>language-</replaceable> должна быть
+ двухсимвольным сокращением от названия языка по стандарту
+ ISO-639, если порт специфичен для конкретного языка.
+ Примерами являются <literal>ja</literal> для японского,
+ <literal>ru</literal> для русского, <literal>vi</literal>
+ для вьетнамского, <literal>zh</literal> для китайского,
+ <literal>ko</literal> для корейского и
+ <literal>de</literal> для немецкого языков.</para>
+
+ <para>Если ваш порт специфичен для конкретного региона
+ внутри области использования языка, добавьте также
+ двухсимвольный код страны. Примерами являются
+ <literal>en_US</literal> для US English и
+ <literal>fr_CH</literal> для Swiss French.</para>
+
+ <para>Часть <replaceable>language-</replaceable> должна
+ задаваться в переменной
+ <varname>PKGNAMEPREFIX</varname>.</para>
+ </listitem>
- <entry><varname>/debian/pool/main/${PORTNAME:C/^((lib)?.).*$/\1/}/${PORTNAME}</varname></entry>
- </row>
+ <listitem>
+ <para>Первая буква части <filename>name</filename> должна
+ быть в нижнем регистре. (Оставшаяся часть названия может
+ содержать буквы в верхнем регистре, так что принимайте
+ решение сами, когда преобразуете имя программного пакета,
+ содержащего в имени некоторое количество заглавных букв.)
+ Существует традиция именовать модули для <literal>Perl
+ 5</literal>, добавляя впереди <literal>p5-</literal> и
+ преобразуя пару двоеточий в дефис; например, модуль
+ <literal>Data::Dumper</literal> будет именоваться
+ <literal>p5-Data-Dumper</literal>.</para>
+ </listitem>
- <row>
- <entry><varname>GCC</varname></entry>
+ <listitem>
+ <para>Убедитесь, что имя порта и версия четко отделены и
+ размещаются в переменных <varname>PORTNAME</varname> и
+ <varname>PORTVERSION</varname>. Единственная причина, по
+ которой <varname>PORTNAME</varname> содержит версионную
+ часть, это если полученный дистрибутив сам назван таким
+ образом, как это сделано для портов
+ <filename>textproc/libxml2</filename> или
+ <filename>japanese/kinput2-freewnn</filename>. В
+ противном случае <varname>PORTNAME</varname> не должен
+ содержать никакой информации, указывающей на версию. То,
+ что некоторые порты имеют одинаковый
+ <varname>PORTNAME</varname>, является вполне нормальным,
+ как для портов <filename>www/apache*</filename>; в этом
+ случае различные версии (и различные записи в индексе)
+ отличаются по значениям <varname>PKGNAMEPREFIX</varname>
+ и <varname>PKGNAMESUFFIX</varname>.</para>
+ </listitem>
- <entry><varname>/pub/gcc/releases/${DISTNAME}</varname></entry>
- </row>
+ <listitem>
+ <para>Если порт может быть построен с различными
+ <link linkend="makefile-masterdir">статически заданными
+ значениями по умолчанию</link> (обычно это часть
+ имени каталога в семействе портов), то часть
+ <replaceable>-compiled.specifics</replaceable> должна
+ определять вкомпилированные значения по умолчанию
+ (дефис не обязателен). Примерами являются размеры
+ бумаги и шрифтов.</para>
+
+ <para>Часть <replaceable>-compiled.specifics</replaceable>
+ должна задаваться в переменной
+ <varname>PKGNAMESUFFIX</varname>.</para>
+ </listitem>
- <row>
- <entry><varname>GNOME</varname></entry>
+ <listitem>
+ <para>Строка с номером версии должна следовать за дефисом
+ (<literal>-</literal>) и являться списком разделенных
+ двоеточием чисел и букв в нижнем регистре. В частности,
+ не разрешается иметь еще один дефис внутри строки с
+ обозначением номера версии. Единственным исключением
+ является строчка <literal>pl</literal> (означающая
+ <quote>patchlevel</quote>), которая может использоваться
+ <emphasis>только</emphasis> тогда, когда у программного
+ обеспечения нет старшего и младшего номера версии. Если
+ в номер версии программного обеспечения включена строчка
+ типа <quote>alpha</quote>, <quote>beta</quote>,
+ <quote>rc</quote> или <quote>pre</quote>, возьмите из неё
+ первую букву и поставьте её непосредственно после точки.
+ Если после таких строк номер версии ещё продолжается, то
+ после буквы должно следовать число без дополнительной
+ разделяющей точки.</para>
+
+ <para>Смысл такого формата заключается в удобстве
+ сортировки портов по номеру версии. В частности, следите
+ за тем, чтобы компоненты номера версии разделялись
+ точкой, и если там присутствует дата, то используйте
+ формат <literal>0.0.yyyy.mm.dd</literal>, но не
+ <literal>dd.mm.yyyy</literal> или не совместимый с
+ проблемой Y2K <literal>yy.mm.dd</literal>. Добавление к
+ версии префикса <literal>0.0.</literal> является важным,
+ в случае если выпущен релиз с присвоением настоящей
+ версии, которая в числовом представлении, конечно же,
+ будет ниже, чем <literal>yyyy</literal>.</para>
+ </listitem>
+ </orderedlist>
- <entry><varname>/pub/GNOME/sources/${PORTNAME}/${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/}</varname></entry>
- </row>
+ <para>Вот несколько (реальных) примеров того, как преобразовать
+ имя из оригинального, придуманного авторами, к подходящему
+ для имени пакета:</para>
+
+ <informaltable frame="none" pgwide="1">
+ <tgroup cols="6">
+ <thead>
+ <row>
+ <entry>Имя дистрибутива</entry>
+ <entry><varname>PKGNAMEPREFIX</varname></entry>
+ <entry><varname>PORTNAME</varname></entry>
+ <entry><varname>PKGNAMESUFFIX</varname></entry>
+ <entry><varname>PORTVERSION</varname></entry>
+ <entry>Обоснование</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry>mule-2.2.2</entry>
+ <entry>(пусто)</entry>
+ <entry>mule</entry>
+ <entry>(пусто)</entry>
+ <entry>2.2.2</entry>
+ <entry>Изменений не потребовалось</entry>
+ </row>
+
+ <row>
+ <entry>EmiClock-1.0.2</entry>
+ <entry>(пусто)</entry>
+ <entry>emiclock</entry>
+ <entry>(пусто)</entry>
+ <entry>1.0.2</entry>
+ <entry>Для отдельных программ имена с заглавными
+ буквами запрещены</entry>
+ </row>
+
+ <row>
+ <entry>rdist-1.3alpha</entry>
+ <entry>(пусто)</entry>
+ <entry>rdist</entry>
+ <entry>(пусто)</entry>
+ <entry>1.3.a</entry>
+ <entry>Строчки типа <literal>alpha</literal>
+ запрещены</entry>
+ </row>
+
+ <row>
+ <entry>es-0.9-beta1</entry>
+ <entry>(пусто)</entry>
+ <entry>es</entry>
+ <entry>(пусто)</entry>
+ <entry>0.9.b1</entry>
+ <entry>Строчки типа <literal>beta</literal>
+ запрещены</entry>
+ </row>
+
+ <row>
+ <entry>mailman-2.0rc3</entry>
+ <entry>(пусто)</entry>
+ <entry>mailman</entry>
+ <entry>(пусто)</entry>
+ <entry>2.0.r3</entry>
+ <entry>Строчки типа <literal>rc</literal>
+ запрещены</entry>
+ </row>
+
+ <row>
+ <entry>v3.3beta021.src</entry>
+ <entry>(пусто)</entry>
+ <entry>tiff</entry>
+ <entry>(пусто)</entry>
+ <entry>3.3</entry>
+ <entry>Что это такое было вообще?</entry>
+ </row>
+
+ <row>
+ <entry>tvtwm</entry>
+ <entry>(пусто)</entry>
+ <entry>tvtwm</entry>
+ <entry>(пусто)</entry>
+ <entry>pl11</entry>
+ <entry>Всегда требуется указание номера версии</entry>
+ </row>
+
+ <row>
+ <entry>piewm</entry>
+ <entry>(пусто)</entry>
+ <entry>piewm</entry>
+ <entry>(пусто)</entry>
+ <entry>1.0</entry>
+ <entry>Всегда требуется указание номера версии</entry>
+ </row>
+
+ <row>
+ <entry>xvgr-2.10pl1</entry>
+ <entry>(пусто)</entry>
+ <entry>xvgr</entry>
+ <entry>(пусто)</entry>
+ <entry>2.10.1</entry>
+ <entry><literal>pl</literal> разрешено только при
+ отсутствии старшего/младшего номера версии</entry>
+ </row>
+
+ <row>
+ <entry>gawk-2.15.6</entry>
+ <entry>ja-</entry>
+ <entry>gawk</entry>
+ <entry>(пусто)</entry>
+ <entry>2.15.6</entry>
+ <entry>Версия на японском языке</entry>
+ </row>
+
+ <row>
+ <entry>psutils-1.13</entry>
+ <entry>(пусто)</entry>
+ <entry>psutils</entry>
+ <entry>-letter</entry>
+ <entry>1.13</entry>
+ <entry>Размер бумаги задается статически во время
+ построения пакета</entry>
+ </row>
+
+ <row>
+ <entry>pkfonts</entry>
+ <entry>(пусто)</entry>
+ <entry>pkfonts</entry>
+ <entry>300</entry>
+ <entry>1.0</entry>
+ <entry>пакет для шрифтов 300dpi</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ <para>Если в исходном коде абсолютно нет информации о номере
+ версии и не похоже, что автор собирается выпускать другую
+ версию, то в качестве номера версии задайте просто
+ <literal>1.0</literal> (как в примере с
+ <literal>piewm</literal> выше). В противном случае спросите
+ автора программы или используйте дату
+ (<literal>0.0.yyyy.mm.dd</literal>) в качестве номера
+ версии.</para>
+ </sect2>
+ </sect1>
- <row>
- <entry><varname>GNU</varname></entry>
+ <sect1 xml:id="makefile-categories">
+ <title>Разделение по категориям</title>
+
+ <sect2>
+ <title><varname>CATEGORIES</varname></title>
+
+ <para>В процессе создания пакета он помещается в каталог
+ <filename>/usr/ports/packages/All</filename>, а в одном или
+ более подкаталогов из
+ <filename>/usr/ports/packages</filename> создаются на него
+ ссылки. Имена этих подкаталогов определяются переменной
+ <varname>CATEGORIES</varname>. Такая схема нужна для
+ облегчения жизни пользователя, когда он сталкивается с массой
+ пакетов на FTP-сервере или компакт-диске. Пожалуйста,
+ посмотрите на <link linkend="porting-categories">текущий
+ список категорий</link> и выберите те из них, которые более
+ всего подходят к вашему порту.</para>
+
+ <para>Этот список также определяет, куда в дереве портов будет
+ помещен порт. Если вы укажете здесь более одной категории,
+ то предполагается, что файлы порта будут помещены в
+ подкаталог с именем первой категории. Посмотрите
+ <link linkend="choosing-categories">ниже</link> для получения
+ подробной информации о том, как правильно выбрать
+ категории.</para>
+ </sect2>
+
+ <sect2 xml:id="porting-categories">
+ <title>Текущий список категорий</title>
+
+ <para>Вот текущий список категорий. Те, которые отмечены
+ звёздочкой (<literal>*</literal>), являются
+ <emphasis>виртуальными</emphasis> категориями&mdash;они не
+ имеют собственного подкаталога в дереве портов. Они
+ используются только в качестве вторичных категорий, и только
+ для поиска.</para>
- <entry><varname>/gnu/${PORTNAME}</varname></entry>
- </row>
+ <note>
+ <para>Для невиртуальных категорий имеется однострочное
+ описание в <varname>COMMENT</varname> в
+ <filename>Makefile</filename> соответствующего
+ подкаталога.</para>
+ </note>
- <row>
- <entry><varname>MOZDEV</varname></entry>
+ <informaltable frame="none" pgwide="1">
+ <tgroup cols="3">
+ <thead>
+ <row>
+ <entry>Категория</entry>
+ <entry>Описание</entry>
+ <entry>Примечания</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><filename>accessibility</filename></entry>
+ <entry>Порты для помощи пользователям с ограниченными
+ возможностями.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>afterstep*</filename></entry>
+ <entry>Порты, поддерживающие менеджер окон <link
+ xlink:href="http://www.afterstep.org">AfterStep</link>.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>arabic</filename></entry>
+ <entry>Поддержка арабского языка.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>archivers</filename></entry>
+ <entry>Инструменты для работы с архивами.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>astro</filename></entry>
+ <entry>Приложения, связанные с астрономией.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>audio</filename></entry>
+ <entry>Поддержка работы со звуком.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>benchmarks</filename></entry>
+ <entry>Утилиты для измерения производительности
+ системы.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>biology</filename></entry>
+ <entry>Программное обеспечение, связанное с
+ биологией.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>cad</filename></entry>
+ <entry>Инструменты Систем Автоматизированного
+ Проектирования.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>chinese</filename></entry>
+ <entry>Поддержка китайского языка.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>comms</filename></entry>
+ <entry>Коммуникационное программное
+ обеспечение.</entry>
+ <entry>В основном программы для работы с
+ последовательным портом.</entry>
+ </row>
+
+ <row>
+ <entry><filename>converters</filename></entry>
+ <entry>Утилиты для преобразования символьных
+ форматов.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>databases</filename></entry>
+ <entry>Базы данных.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>deskutils</filename></entry>
+ <entry>То, что было на столе до изобретения
+ компьютеров.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>devel</filename></entry>
+ <entry>Утилиты для разработки программного
+ обеспечения.</entry>
+ <entry>Не помещайте сюда библиотеки просто потому, что
+ это библиотеки&mdash;если они подпадают под какую-то
+ другую категорию, то их быть здесь не должно.</entry>
+ </row>
+
+ <row>
+ <entry><filename>dns</filename></entry>
+ <entry>Программное обеспечение для работы DNS.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>docs*</filename></entry>
+ <entry>Мета-порты для документации &os;.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>editors</filename></entry>
+ <entry>Редакторы общего назначения.</entry>
+ <entry>Специализированные редакторы относят к разделу
+ для соответствующих инструментов (например, редактор
+ математических формул попадает в категорию
+ <filename>math</filename>).</entry>
+ </row>
+
+ <row>
+ <entry><filename>elisp*</filename></entry>
+ <entry>Порты для Emacs lisp.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>emulators</filename></entry>
+ <entry>Эмуляторы других операционных систем.</entry>
+ <entry>Эмуляторы терминалов сюда
+ <emphasis>не</emphasis> относятся&mdash;те, которые
+ разработаны для X, должны быть в категории
+ <filename>x11</filename>, а текстовые в
+ <filename>comms</filename> или
+ <filename>misc</filename>, в зависимости от
+ конкретного их предназначения.</entry>
+ </row>
+
+ <row>
+ <entry><filename>finance</filename></entry>
+ <entry>Приложения для работы с деньгами, финансами и
+ всем, что с этим связано.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>french</filename></entry>
+ <entry>Поддержка французского языка.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>ftp</filename></entry>
+ <entry>Клиенты и серверы FTP.</entry>
+ <entry>Если ваш порт понимает как FTP, так и HTTP,
+ поместите его в категорию <filename>ftp</filename> и
+ укажите вторичную категорию
+ <filename>www</filename>.</entry>
+ </row>
+
+ <row>
+ <entry><filename>games</filename></entry>
+ <entry>Игры.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>geography*</filename></entry>
+ <entry>Программное обеспечение, связанное с
+ географией.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>german</filename></entry>
+ <entry>Поддержка немецкого языка.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>gnome*</filename></entry>
+ <entry>Порты Проекта <link
+ xlink:href="http://www.gnome.org">GNOME</link>.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>gnustep*</filename></entry>
+ <entry>Программное обеспечение для окружения рабочего
+ стола GNUstep.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>graphics</filename></entry>
+ <entry>Графические утилиты.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>hamradio*</filename></entry>
+ <entry>Программное обеспечение для любительского
+ радио</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>haskell*</filename></entry>
+ <entry>Программное обеспечение, связанное с языком
+ Haskell.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>hebrew</filename></entry>
+ <entry>Поддержка иврита.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>hungarian</filename></entry>
+ <entry>Поддержка венгерского языка.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>ipv6*</filename></entry>
+ <entry>Программное обеспечение, связанное с
+ IPv6.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>irc</filename></entry>
+ <entry>Утилиты для Internet Relay Chat.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>japanese</filename></entry>
+ <entry>Поддержка японского языка.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>java</filename></entry>
+ <entry>Программное обеспечение, связанное с языком
+ Java&trade;.</entry>
+ <entry>Категория <filename>java</filename> ни в коем
+ случае не должна быть единственной для порта.
+ Оставьте для портов, непосредственно имеющих
+ отношение к языку Java, портерам также рекомендуется
+ не использовать <filename>java</filename> как
+ основную категорию порта.</entry>
+ </row>
+
+ <row>
+ <entry><filename>kde*</filename></entry>
+ <entry>Порты проекта <link
+ xlink:href="http://www.kde.org">KDE</link>.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>kld*</filename></entry>
+ <entry>Загружаемые модули ядра.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>korean</filename></entry>
+ <entry>Поддержка корейского языка.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>lang</filename></entry>
+ <entry>Языки программирования.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>linux*</filename></entry>
+ <entry>Linux приложения и утилиты.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>lisp*</filename></entry>
+ <entry>Программное обеспечение, связанное с языком
+ Lisp.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>mail</filename></entry>
+ <entry>Программы для работы с почтой.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>math</filename></entry>
+ <entry>Программное обеспечение для численных вычислений
+ и другие утилиты, связанные с математикой.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>mbone*</filename></entry>
+ <entry>Приложения для MBone.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>misc</filename></entry>
+ <entry>Различные утилиты</entry>
+ <entry>В общем, то, что не попадает в другие категории.
+ Если это возможно, попробуйте найти более подходящую,
+ чем <literal>misc</literal>, категорию для вашего
+ порта, так как здесь порты теряются.</entry>
+ </row>
+
+ <row>
+ <entry><filename>multimedia</filename></entry>
+ <entry>Программное обеспечение для работы с
+ мультимедиа.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>net</filename></entry>
+ <entry>Различное сетевое программное
+ обеспечение.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>net-im</filename></entry>
+ <entry>Программы мгновенного обмена
+ сообщениями.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>net-mgmt</filename></entry>
+ <entry>Программное обеспечение для сетевого
+ управления.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>net-p2p</filename></entry>
+ <entry>Приложения для пиринговых сетей.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>news</filename></entry>
+ <entry>Программное обеспечение для работы с
+ конференциями USENET.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>palm</filename></entry>
+ <entry>Программная поддержка <link
+ xlink:href="http://www.palm.com/">Palm&trade;</link>.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>parallel*</filename></entry>
+ <entry>Приложения, связанные с параллельными
+ вычислениями.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>pear*</filename></entry>
+ <entry>Порты, относящиеся к технологии Pear
+ PHP.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>perl5*</filename></entry>
+ <entry>Порты, которым для работы требуется
+ <application>Perl</application> версии 5.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>plan9*</filename></entry>
+ <entry>Различные программы из <link
+ xlink:href="http://www.cs.bell-labs.com/plan9dist/">Plan9</link>.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>polish</filename></entry>
+ <entry>Поддержка польского языка.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>ports-mgmt</filename></entry>
+ <entry>Порты для управления, установки и разработки
+ портов и пакетов &os;.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>portuguese</filename></entry>
+ <entry>Поддержка португальского языка.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>print</filename></entry>
+ <entry>Программное обеспечение для печати.</entry>
+ <entry>Инструменты для вёрстки (просмотрщики и тому
+ подобное) тоже относятся сюда.</entry>
+ </row>
+
+ <row>
+ <entry><filename>python*</filename></entry>
+ <entry>Программное обеспечение, связанное с языком
+ <link
+ xlink:href="http://www.python.org/">Python</link>.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>ruby*</filename></entry>
+ <entry>Программное обеспечение, связанное с языком
+ <link
+ xlink:href="http://www.ruby-lang.org/">Ruby</link>.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>rubygems*</filename></entry>
+ <entry>Порты для пакетов <link
+ xlink:href="http://www.rubygems.org/">RubyGems</link>.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>russian</filename></entry>
+ <entry>Поддержка русского языка.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>scheme*</filename></entry>
+ <entry>Программное обеспечение, связанное с языком
+ Scheme.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>science</filename></entry>
+ <entry>Научные программы, которые не подпадают под
+ другие категории, скажем, <filename>astro</filename>,
+ <filename>biology</filename> или
+ <filename>math</filename>.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>security</filename></entry>
+ <entry>Программы, обеспечивающие безопасность
+ системы.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>shells</filename></entry>
+ <entry>Различные командные процессоры.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>sysutils</filename></entry>
+ <entry>Системные утилиты.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>spanish*</filename></entry>
+ <entry>Поддержка испанского языка.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>tcl*</filename></entry>
+ <entry>Порты, для работы которых нужен Tcl.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>textproc</filename></entry>
+ <entry>Утилиты для обработки текстов.</entry>
+ <entry>Инструменты для вёрстки помещаются в категорию
+ <filename>print</filename>, а не сюда.</entry>
+ </row>
+
+ <row>
+ <entry><filename>tk*</filename></entry>
+ <entry>Порты, для работы которых нужен Tk.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>ukrainian</filename></entry>
+ <entry>Поддержка украинского языка.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>vietnamese</filename></entry>
+ <entry>Поддержка вьетнамского языка.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>windowmaker*</filename></entry>
+ <entry>Порты для поддержки менеджера окон
+ WindowMaker.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>www</filename></entry>
+ <entry>Программное обеспечение, связанное со всемирной
+ паутиной.</entry>
+ <entry>Поддержка языка HTML относится сюда же.</entry>
+ </row>
+
+ <row>
+ <entry><filename>x11</filename></entry>
+ <entry>X Window System и иже с ними.</entry>
+ <entry>Эта категория предназначена только для
+ программного обеспечения, которое поддерживает саму
+ оконную систему. Не помещайте сюда обычные
+ приложения для X: большинство из них должны быть
+ перенесены в другие категории
+ <filename>x11-*</filename> (смотрите ниже).</entry>
+ </row>
+
+ <row>
+ <entry><filename>x11-clocks</filename></entry>
+ <entry>Часы для X11.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>x11-drivers</filename></entry>
+ <entry>Драйверы X11.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>x11-fm</filename></entry>
+ <entry>Менеджеры файлов для X11.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>x11-fonts</filename></entry>
+ <entry>Шрифты для X11 и утилиты для работы с
+ ними.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>x11-servers</filename></entry>
+ <entry>Серверы для X11.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>x11-themes</filename></entry>
+ <entry>Темы для X11.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>x11-toolkits</filename></entry>
+ <entry>Пакеты разработчика для X11.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>x11-wm</filename></entry>
+ <entry>Оконные менеджеры для X11.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>xfce*</filename></entry>
+ <entry>Порты, связанные с окружением рабочего стола
+ <link
+ xlink:href="http://www.xfce.org/">Xfce</link>.</entry>
+ <entry/>
+ </row>
+
+ <row>
+ <entry><filename>zope*</filename></entry>
+ <entry>Поддержка <link
+ xlink:href="http://www.zope.org/">Zope</link>.</entry>
+ <entry/>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </sect2>
+
+ <sect2 xml:id="choosing-categories">
+ <title>Выбор правильной категории</title>
+
+ <para>Так как многие категории перекрываются, вам часто
+ необходимо будет выбирать, какая их них должна быть основной
+ для вашего порта. Есть несколько правил, по которым можно
+ решить этот вопрос. Вот список приоритетов, в уменьшающейся
+ степени предпочтения:</para>
- <entry><varname>/pub/mozdev/${PORTNAME:L}</varname></entry>
- </row>
+ <itemizedlist>
+ <listitem>
+ <para>Первая категория должна быть физической категорий
+ (смотрите <link
+ linkend="porting-categories">выше</link>). Это
+ необходимо для создания пакетов. После этого виртуальные
+ и физические категории могут смешиваться.</para>
+ </listitem>
- <row>
- <entry><varname>PERL_CPAN</varname></entry>
+ <listitem>
+ <para>Сначала всегда идут категории, специфичные для
+ языков. Например, если ваш порт устанавливает японские
+ шрифты для X11, то строчка <varname>CATEGORIES</varname>
+ должна иметь вид
+ <filename>japanese x11-fonts</filename>.</para>
+ </listitem>
- <entry><varname>/pub/CPAN/modules/by-module/${PORTNAME:C/-.*//}</varname></entry>
- </row>
+ <listitem>
+ <para>Более конкретные категории идут первыми перед более
+ общими. В частности, редактор HTML должен быть описан
+ как <filename>www editors</filename>, а не наоборот.
+ Кроме того, вы не должны указывать категорию
+ <filename>net</filename>, если порт относится к одной из
+ категорий <filename>irc</filename>,
+ <filename>mail</filename>, <filename>news</filename>,
+ <filename>security</filename> или
+ <filename>www</filename>, так как
+ <filename>net</filename> включается автоматически.</para>
+ </listitem>
- <row>
- <entry><varname>PYTHON</varname></entry>
+ <listitem>
+ <para><filename>x11</filename> используется как вторичная
+ категория только в случае, если в качестве основной
+ категории указан естественный язык. В частности, вам не
+ нужно указывать <filename>x11</filename> в качестве
+ категории для приложений X.</para>
+ </listitem>
- <entry><varname>/ftp/python/${PYTHON_PORTVERSION:C/rc[0-9]//}</varname></entry>
- </row>
+ <listitem>
+ <para>Режимы для редактора <application>Emacs</application>
+ должны помещаться в ту же категорию, что и приложение,
+ которое поддерживается этим режимом, а не в
+ <filename>editors</filename>. Например,
+ режим <application>Emacs</application> для редактирования
+ исходного кода некоторого языка программирования должен
+ быть помещен в категорию
+ <filename>lang</filename>.</para>
+ </listitem>
- <row>
- <entry><varname>RUBYFORGE</varname></entry>
+ <listitem>
+ <para>Порты, устанавливающие загружаемые модули ядра,
+ должны содержать виртуальную категорию
+ <filename>kld</filename> в строке
+ <varname>CATEGORIES</varname>. Это одно из действий,
+ выполняемых автоматически с добавлением
+ <literal>kmod</literal> в строке
+ <varname>USES</varname>.</para>
+ </listitem>
- <entry><varname>/${PORTNAME:L}</varname></entry>
- </row>
+ <listitem>
+ <para><filename>misc</filename> не должна указываться
+ вместе с любой другой невиртуальной категорией. Если вы
+ указываете <literal>misc</literal> вместе с чем-то ещё в
+ строке <varname>CATEGORIES</varname>, это значит, что вы
+ можете спокойно удалить <literal>misc</literal> и просто
+ поместить порт в этот другой подкаталог!</para>
+ </listitem>
- <row>
- <entry><varname>SAVANNAH</varname></entry>
+ <listitem>
+ <para>Если ваш порт решительным образом не подпадает ни под
+ какую категорию, поместите его в
+ <filename>misc</filename>.</para>
+ </listitem>
+ </itemizedlist>
- <entry><varname>/${PORTNAME:L}</varname></entry>
- </row>
+ <para>Если вы не уверены в правильности выбора категории,
+ пожалуйста, отметьте это в вашем сообщении &man.send-pr.1;,
+ чтобы мы могли обсудить это до того, как включить порт в
+ Коллекцию. Если вы являетесь коммиттером, пошлите замечание
+ на адрес &a.ports;, чтобы мы могли обсудить это. Зачастую
+ новые порты помещаются не в ту категорию только для того,
+ чтобы их оттуда сразу же удалили. Это приводит к излишнему и
+ ненужному росту основного хранилища исходных текстов.</para>
+ </sect2>
+
+ <sect2 xml:id="proposing-categories">
+ <title>Предложение новой категории</title>
+
+ <para>Поскольку со временем Коллекция Портов увеличилась, то в
+ связи с этим были добавлены различные новые категории. Новые
+ категории могут быть или <emphasis>виртуальными</emphasis>
+ категориями&mdash;которые не имеют соответствующего
+ подкаталога в дереве портов&mdash;или
+ <emphasis>физическими</emphasis> категориями&mdash;у которых
+ он есть. Следующий текст содержит обсуждение вопросов,
+ возникающих при создании новой физической категории, чтобы вы
+ могли понимать их, когда предложите новую категорию.</para>
+
+ <para>В соответствие с существующей практикой мы избегаем
+ создания новой физической категории, пока достаточно большое
+ число портов логически ей не принадлежит или же порты,
+ которые могли бы ей принадлежать, не являются логически
+ обособленной группой, представляющей для всех ограниченный
+ интерес (в частности, категории, относящиеся к естественным
+ языкам); предпочтительно выполнение обоих условий.</para>
+
+ <para>Основной причиной для этого является то, что такое
+ изменение создает <link
+ xlink:href="&url.articles.committers-guide;/#ports">изрядное
+ количество работы</link> и для коммиттеров, и для всех тех
+ пользователей, которые отслеживают изменения в Коллекции
+ Портов. В дополнение, предложенная категория создает
+ естественное разногласие. (Пожалуй, потому что не существует
+ четкого соглашения, является ли категория <quote>слишком
+ большой</quote>, или должны ли категории предоставлять себя
+ для просмотра (и, таким образом, какое количество категорий
+ было бы идеальным значением), и так далее.)</para>
+
+ <para>Процедура:</para>
+
+ <procedure>
+ <step>
+ <para>Предложите новую категорию на &a.ports;. Вам следует
+ включить для новой категории детальное обоснование, в том
+ числе почему вы считаете, что существующие категории не
+ являются достаточными, и список существующих портов,
+ предложенных для перемещения. (Если есть новые порты,
+ ожидающие в <application>GNATS</application> и попадающие
+ в эту категорию, то укажите их тоже.) Если вы являетесь
+ сопровождающим и/или отправителем, то укажите это
+ соответственно, так как это может помочь вам в вашем
+ деле.</para>
+ </step>
+
+ <step>
+ <para>Принимайте участие в обсуждении.</para>
+ </step>
+
+ <step>
+ <para>Если кажется, что для вашей идеи появилась поддержка,
+ отправьте PR, который будет включать обоснование и список
+ существующих портов, которые надо переместить. В идеале
+ этот PR должен также включать патчи для
+ следующего:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><filename>Makefile</filename>'ы для новых портов
+ в результате репозиторного копирования</para>
+ </listitem>
- <row>
- <entry><varname>SF</varname></entry>
+ <listitem>
+ <para><filename>Makefile</filename> для категорий
+ старых портов</para>
+ </listitem>
- <entry><varname>/project/${PORTNAME:L}/${PORTNAME:L}/${PORTVERSION}</varname></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect2>
-
- <sect2>
- <title><varname>EXTRACT_SUFX</varname></title>
-
- <para>Если у вас имеется один дистрибутивный файл, и в его имени
- используется странное окончание для указания типа сжатия, задайте
- переменную <varname>EXTRACT_SUFX</varname>.</para>
-
- <para>К примеру, если дистрибутивный файл носит имя
- <filename>foo.tgz</filename>, а не более привычное
- <filename>foo.tar.gz</filename>, вы должны написать:</para>
-
- <programlisting>DISTNAME= foo
-EXTRACT_SUFX= .tgz</programlisting>
-
- <para>Переменные <varname>USE_BZIP2</varname>,
- <varname>USE_XZ</varname> и
- <varname>USE_ZIP</varname> при необходимости автоматически
- устанавливают значение <varname>EXTRACT_SUFX</varname> в
- <literal>.tar.bz2</literal>, <literal>.tar.xz</literal> или
- <literal>.zip</literal>. Если ни одна из этих
- переменных не задана, то значение <varname>EXTRACT_SUFX</varname>
- по умолчанию устанавливается в <literal>.tar.gz</literal>.</para>
-
- <note>
- <para>Вам не нужно задавать значения <varname>EXTRACT_SUFX</varname>
- и <varname>DISTFILES</varname> одновременно.</para>
- </note>
- </sect2>
-
- <sect2>
- <title><varname>DISTFILES</varname></title>
-
- <para>Иногда имена сгружаемых файлов не соответствуют имени порта. К
- примеру, файл может называться <filename>source.tar.gz</filename> или
- подобным образом. В других случаях исходный код приложения может
- располагаться в нескольких отличающихся архивах, и все они должны
- быть сгружены.</para>
-
- <para>Если это ваш случай, то задайте в переменной
- <varname>DISTFILES</varname> список разделённых пробелами имён
- файлов, которые нужно сгрузить.</para>
-
- <programlisting>DISTFILES= source1.tar.gz source2.tar.gz</programlisting>
-
- <para>Если переменная <varname>DISTFILES</varname> не задана явно, то
- её значением по умолчанию будет
- <literal>${DISTNAME}${EXTRACT_SUFX}</literal>.</para>
- </sect2>
-
- <sect2>
- <title><varname>EXTRACT_ONLY</varname></title>
-
- <para>Если только некоторые из <varname>DISTFILES</varname> должны быть
- распакованы&mdash;к примеру, часть из них является исходным кодом, а
- другие представляют собой неупакованную
- документацию&mdash;перечислите имена файлов, которые должны быть
- распакованы, в <varname>EXTRACT_ONLY</varname>.</para>
-
- <programlisting>DISTFILES= source.tar.gz manual.html
-EXTRACT_ONLY= source.tar.gz</programlisting>
-
- <para>Если <emphasis>ни один</emphasis> из <varname>DISTFILES</varname>
- не должен распаковываться, то установите пустое значение
- переменной <varname>EXTRACT_ONLY</varname>.</para>
-
- <programlisting>EXTRACT_ONLY=</programlisting>
- </sect2>
-
- <sect2 xml:id="porting-patchfiles">
- <title><varname>PATCHFILES</varname></title>
-
- <para>Если вашему порту требуются некоторых дополнительные патчи,
- которые доступны по FTP или HTTP, задайте имена этих файлов в
- переменной <varname>PATCHFILES</varname>, а в переменной
- <varname>PATCH_SITES</varname> укажите URL того каталога, в котором
- они содержатся (формат такой же, как
- для <varname>MASTER_SITES</varname>).</para>
-
- <para>Если патч не относится к самому верху дерева исходных текстов
- (то есть <varname>WRKSRC</varname>), потому что он содержит некоторые
- дополнительные пути, установите соответственно значение переменной
- <varname>PATCH_DIST_STRIP</varname>. В частности, если все имена
- путей в патче имеют дополнительный путь
- <literal>foozolix-1.0/</literal> перед именем файла, то задайте
- <literal>PATCH_DIST_STRIP=-p1</literal>.</para>
-
- <para>Не волнуйтесь, если патчи упакованы; они будут распакованы
- автоматически, если имена файлов оканчиваются на
- <filename>.gz</filename> или <filename>.Z</filename>.</para>
-
- <para>Если патч распространяется вместе с какими-то другими файлами,
- такими, как документация, в виде tar-архива <command>gzip</command>,
- вы не можете просто
- использовать <varname>PATCHFILES</varname>. Если это ваш случай,
- добавьте имя и местоположение архива с патчем к
- <varname>DISTFILES</varname> и <varname>MASTER_SITES</varname>.
- Затем воспользуйтесь переменной <varname>EXTRA_PATCHES</varname> для
- указания этих файлов, и <filename>bsd.port.mk</filename> автоматически
- применит эти патчи. В частности, <emphasis>не копируйте</emphasis>
- файлы с патчами в каталог <varname>PATCHDIR</varname>&mdash;этот
- каталог может быть недоступным для записи.</para>
-
- <note>
- <para>Архив будет распакован вне исходного кода, как
- обычно, и к тому же его не нужно явно распаковывать, если
- это обычный архив <command>gzip</command> или
- <command>compress</command>. Если вы сделаете последнее,
- приложите дополнительные усилия для того, чтобы не перезаписать
- что-либо, уже существующее в этом каталоге. Также не забудьте
- добавить команду для удаления скопированного патча в цели
- <buildtarget>pre-clean</buildtarget>.</para>
- </note>
- </sect2>
-
- <sect2 xml:id="porting-master-sites-n">
- <title>Несколько дистрибутивных файлов или патчей с различных серверов
- и подкаталогов (<literal>MASTER_SITES:n</literal>)</title>
-
- <para>(Этот раздел можно считать немного <quote>повышенной
- трудности</quote>; те, кто впервые знакомятся с этим текстом, могут
- пропустить этот раздел).</para>
-
- <para>В этом разделе находится информация о механизме сгрузки,
- известном как <literal>MASTER_SITES:n</literal> и
- <literal>MASTER_SITES_NN</literal>. Далее мы будем называть этот
- механизм <literal>MASTER_SITES:n</literal>.</para>
-
- <para>Сначала немного общей информации. В OpenBSD имеется полезная
- возможность, используемая в переменных <varname>DISTFILES</varname> и
- <varname>PATCHFILES</varname>, которая позволяет закреплять после
- имен файлов и патчей идентификаторы типа <literal>:n</literal>. Здесь
- <literal>n</literal> может быть из диапазона <literal>[0-9]</literal>
- и обозначать закреплённую группу. К примеру:</para>
-
- <programlisting>DISTFILES= alpha:0 beta:1</programlisting>
-
- <para>В OpenBSD дистрибутивный файл <filename>alpha</filename> будет
- связан с переменной <varname>MASTER_SITES0</varname>, но не с нашей
- общей переменной <varname>MASTER_SITES</varname>, а файл
- <filename>beta</filename> с переменной
- <varname>MASTER_SITES1</varname>.</para>
-
- <para>Этот очень интересная возможность, которая может уменьшить этот
- бесконечный поиск работающего сайта для сгрузки.</para>
-
- <para>Просто представьте себе 2 файла в <varname>DISTFILES</varname> и
- 20 сайтов в <varname>MASTER_SITES</varname>; сайты очень медленные,
- причём <filename>beta</filename> находится на всех сайтах из
- <varname>MASTER_SITES</varname>, а <filename>alpha</filename>
- может быть найден только на 20-м сайте. Будет неправильно проверять
- их все, если создатель знает об этом, не правда ли? Неподходящее
- начало для таких прекрасных выходных!</para>
-
- <para>Теперь, когда вы получили общее представление, просто представьте
- ещё большее количество <varname>DISTFILES</varname> и
- <varname>MASTER_SITES</varname>. Конечно, наш <quote>магистр
- доступности дистрибутивов</quote> представляет масштабы нагрузки
- на сеть, которую это даёт.</para>
-
- <para>В последующих разделах информация будет даваться вместе с
- реализацией этой идеи во &os;. Мы несколько улучшили концепцию
- OpenBSD.</para>
-
- <sect3>
- <title>Упрощённая информация</title>
-
- <para>В этом разделе рассказывается, как быстро подготовить точную
- сгрузку нескольких дистрибутивных файлов и патчей с разных сайтов
- и каталогов. Мы описываем здесь случай упрощённого использования
- <literal>MASTER_SITES:n</literal>. Для большинства сценариев этого
- будет достаточно. Однако, если вам нужна дополнительная
- информация, обратитесь к следующему разделу.</para>
-
- <para>Некоторые приложения состоят из многих дистрибутивных
- файлов, которые должны быть сгружены с нескольких различных сайтов.
- К примеру, <application>Ghostscript</application> состоит из
- основной программы и большого числа файлов драйверов, которые
- используются в зависимости от принтера пользователя. Некоторые из
- этих файлов драйверов поставляются с основной программой, но при
- этом многие другие должны быть сгружены с множества различных
- сайтов.</para>
-
- <para>Чтобы это поддерживать, за каждой записью в
- <varname>DISTFILES</varname> может следовать символ двоеточия и
- <quote>имя метки</quote>. За каждым сайтом, перечисленным в
- <varname>MASTER_SITES</varname>, тоже следует двоеточие и метка,
- которая указывает, какие файлы дистрибутива должны быть сгружены
- с этого сайта.</para>
-
- <para>Например, рассмотрим приложение, исходный код которого разделён
- на две части, <filename>source1.tar.gz</filename> и
- <filename>source2.tar.gz</filename>, которые должны быть сгружены с
- двух различных источников. Файл <filename>Makefile</filename>
- порта будет содержать строчки типа <xref linkend="ports-master-sites-n-example-simple-use-one-file-per-site"/>.</para>
-
- <example xml:id="ports-master-sites-n-example-simple-use-one-file-per-site">
-
- <title>Упрощённое использование <literal>MASTER_SITES:n</literal>
- с 1 файлом на каждом сайте</title>
-
- <programlisting>MASTER_SITES= ftp://ftp.example1.com/:source1 \
- ftp://ftp.example2.com/:source2
-DISTFILES= source1.tar.gz:source1 \
- source2.tar.gz:source2</programlisting>
- </example>
-
- <para>Несколько дистрибутивных файлов могут иметь одну и ту же метку.
- Продолжая предыдущий пример, положим, что имеется и третий
- дистрибутивный файл, <filename>source3.tar.gz</filename>, который
- должен быть сгружен с <systemitem>ftp.example2.com</systemitem>. Тогда
- файл <filename>Makefile</filename> будет написан как <xref linkend="ports-master-sites-n-example-simple-use-more-than-one-file-per-site"/>.</para>
-
- <example xml:id="ports-master-sites-n-example-simple-use-more-than-one-file-per-site">
- <title>Упрощённое использование <literal>MASTER_SITES:n</literal> с
- более чем 1 файлом на каждом сервере</title>
-
- <programlisting>MASTER_SITES= ftp://ftp.example1.com/:source1 \
- ftp://ftp.example2.com/:source2
-DISTFILES= source1.tar.gz:source1 \
- source2.tar.gz:source2 \
- source3.tar.gz:source2</programlisting>
- </example>
- </sect3>
-
- <sect3>
- <title>Подробная информация</title>
-
- <para>Прекрасно, но пример из предыдущего раздела не показал вам всё,
- что вам нужно? В этом разделе мы подробно опишем, как работает
- механизм <literal>MASTER_SITES:n</literal> точной сгрузки и как
- вы можете изменить ваши порты, чтобы это использовать.</para>
-
- <orderedlist>
<listitem>
- <para>За элементами могут следовать символы
- <literal>:n</literal>, где
- <replaceable>n</replaceable> это <literal>[^:,]+</literal>, то
- есть <replaceable>n</replaceable> может теоретически быть
- любой алфавитно-цифровой строкой, но пока мы будем ограничивать
- их <literal>[a-zA-Z_][0-9a-zA-Z_]+</literal>.</para>
-
- <para>Более того, совпадение строк чувствительно к регистру;
- другими словами, <literal>n</literal> отличается от
- <literal>N</literal>.</para>
-
- <para>Однако следующие слова не могут использоваться для этих
- нужд, так как они имеют особое значение:
- <literal>default</literal>, <literal>all</literal> и
- <literal>ALL</literal> (они используются для своих нужд в <xref linkend="porting-master-sites-n-what-changes-in-port-targets"/>).
- Кроме того, <literal>DEFAULT</literal> является специальным
- ключевым словом (посмотрите <xref linkend="porting-master-sites-n-DEFAULT-group"/>).</para>
+ <para><filename>Makefile</filename>'ы для портов,
+ зависящих от старых портов</para>
</listitem>
<listitem>
- <para>Элементы, за которыми следуют <literal>:n</literal>,
- принадлежат группе <literal>n</literal>,
- <literal>:m</literal> относится к группе <literal>m</literal> и
- так далее.</para>
+ <para>(в дополнение, вы можете включить другие файлы,
+ требующие изменений, согласно процедуре из
+ Руководства Коммиттера.)</para>
</listitem>
+ </itemizedlist>
+ </step>
+
+ <step>
+ <para>Поскольку это затрагивает инфраструктуру портов и
+ охватывает не только выполнение репозиторного
+ копирования, но также, возможно, и выполнение
+ регрессивных тестов на кластере построения, то PR должна
+ назначать себе &a.portmgr;.</para>
+ </step>
+
+ <step>
+ <para>Если этот PR одобрен, то коммиттеру нужно продолжить
+ остальную часть процедуры, которая <link
+ xlink:href="&url.articles.committers-guide;/article.html#PORTS">изложена
+ в Руководстве Коммиттера</link>.</para>
+ </step>
+ </procedure>
+
+ <para>Предложение новой виртуальной категории должно быть
+ схожим с вышеизложенным, но при этом затрагивать намного
+ меньше, поскольку ни один из портов не будет перемещен в
+ действительности. В этом случае единственными патчами,
+ включенными в PR, будут те, что добавляют новую категорию в
+ <varname>CATEGORIES</varname> каждого из затрагиваемых
+ портов.</para>
+ </sect2>
+
+ <sect2 xml:id="proposing-reorg">
+ <title>Предложение реорганизации всех категорий</title>
+
+ <para>Время от времени кто-нибудь предлагает произвести
+ реорганизацию категорий либо до двухуровневой, либо другого
+ типа на основе ключевых слов. На данный момент из этих
+ предложений ничего не получилось, потому что, хотя они просты
+ в реализации, но предполагаемая переделка всей коллекции
+ портов по меньшей мере приводит в уныние. Пожалуйста,
+ прочтите историю этих предложений в архивах рассылок перед
+ тем, как присылать свои соображения; более того, вы должны
+ быть готовы представить работающий прототип.</para>
+ </sect2>
+ </sect1>
- <listitem xml:id="porting-master-sites-n-DEFAULT-group">
- <para>Элементы без таких суффиксов не относятся ни к какой
- группе, то есть они принадлежат к особой группе
- <literal>DEFAULT</literal>. Если вы укажете суффиксом любого
- элемента <literal>DEFAULT</literal>, вы просто выполните
- излишнюю работу, если только вы не хотите отнесения элемента
- как к группе <literal>DEFAULT</literal>, так и какой-то другой
- в одно и то же время (посмотрите на пункт <xref linkend="porting-master-sites-n-comma-operator"/>).</para>
+ <sect1 xml:id="makefile-distfiles">
+ <title>Дистрибутивные файлы</title>
+
+ <para>Во второй части <filename>Makefile</filename> задаётся,
+ какие файлы и откуда должны быть сгружены для того, чтобы
+ построить порт.</para>
+
+ <sect2>
+ <title><varname>DISTVERSION/DISTNAME</varname></title>
+
+ <para>В переменной <varname>DISTNAME</varname> указывается имя
+ порта так, как назвали его создатели программного
+ обеспечения. Значение <varname>DISTNAME</varname> по
+ умолчанию совпадает с
+ <literal>${PORTNAME}-${PORTVERSION}</literal>, так что
+ переопределяете её значение только в случае необходимости.
+ <varname>DISTNAME</varname> используется только в двух
+ местах. Во-первых, список дистрибутивных файлов
+ (<varname>DISTFILES</varname>) по умолчанию состоит из
+ <varname>${DISTNAME}</varname><varname>${EXTRACT_SUFX}</varname>.
+ И во-вторых, предполагается, что дистрибутивный файл будет
+ распакован в подкаталог с именем <varname>WRKSRC</varname>,
+ значение которого по умолчанию есть не что иное, как
+ <filename>work/${DISTNAME}</filename>.</para>
+
+ <para>Названия некоторых дистрибутивов, которые не укладываются
+ в <literal>${PORTNAME}-${PORTVERSION}</literal>-схему, могут
+ быть автоматически обработаны посредством установки
+ переменной <varname>DISTVERSION</varname>.
+ <varname>PORTVERSION</varname> и <varname>DISTNAME</varname>
+ будут унаследованы автоматически, но конечно же могут быть
+ переопределены. Следующая таблица демонстрирует некоторые
+ примеры:</para>
+
+ <informaltable frame="none" pgwide="0">
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry><varname>DISTVERSION</varname></entry>
+ <entry><varname>PORTVERSION</varname></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry>0.7.1d</entry>
+ <entry>0.7.1.d</entry>
+ </row>
+
+ <row>
+ <entry>10Alpha3</entry>
+ <entry>10.a3</entry>
+ </row>
+
+ <row>
+ <entry>3Beta7-pre2</entry>
+ <entry>3.b7.p2</entry>
+ </row>
+
+ <row>
+ <entry>8:f_17</entry>
+ <entry>8f.17</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
- <para>Следующие примеры равнозначны, но первый более
- предпочтителен:</para>
+ <note>
+ <para>Значения переменных <varname>PKGNAMEPREFIX</varname>
+ и <varname>PKGNAMESUFFIX</varname> не влияют на значение
+ <varname>DISTNAME</varname>. Заметьте также, что если
+ значение <varname>WRKSRC</varname> равно
+ <filename>work/${PORTNAME}-${PORTVERSION}</filename>, и в
+ случае, когда оригинальный архив называется по имени,
+ отличном от
+ <varname>${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}</varname>,
+ скорее всего, вы должны оставить
+ <varname>DISTNAME</varname> как есть&mdash; лучше
+ переопределить <varname>DISTFILES</varname>, чем задавать
+ значения как <varname>DISTNAME</varname>, так и
+ <varname>WRKSRC</varname> (и, возможно, ещё и
+ <varname>EXTRACT_SUFX</varname>).</para>
+ </note>
+ </sect2>
+
+ <sect2>
+ <title><varname>MASTER_SITES</varname></title>
+
+ <para>Содержит часть с каталогом FTP/HTTP-URL, которая
+ указывает на оригинальный архив на сервере
+ <varname>MASTER_SITES</varname>. Не забудьте лидирующий слэш
+ (<filename>/</filename>)!</para>
+
+ <para>Макрос команды <command>make</command> будет пытаться
+ воспользоваться этой переменной для получения
+ дистрибутивного файла с помощью программы
+ <varname>FETCH</varname>, если он не будет найден в
+ системе.</para>
+
+ <para>Рекомендуется помещать в список много сайтов,
+ предпочтительно с разных континентов. Это поможет при
+ наличии проблем с мировой сетью. Мы даже планируем добавить
+ поддержку автоматического определения ближайшего сайта и
+ сгрузки файлов оттуда; наличие нескольких сайтов будет
+ способствовать этому начинанию.</para>
+
+ <para>Если оригинальный архив находится на одном из таких
+ популярных серверов, как SourceForge, GNU или Perl CPAN, то
+ указывайте эти сайты в простой форме при помощи
+ <varname>MASTER_SITE_<replaceable>*</replaceable></varname>
+ (к примеру, <varname>MASTER_SITE_SOURCEFORGE</varname>,
+ <varname>MASTER_SITE_GNU</varname> или
+ <varname>MASTER_SITE_PERL_CPAN</varname>. Просто укажите в
+ переменной <varname>MASTER_SITES</varname> одно из этих
+ значений, а в переменной
+ <varname>MASTER_SITE_SUBDIR</varname> задайте путь к архиву.
+ Вот пример:</para>
+
+ <programlisting>MASTER_SITES= ${MASTER_SITE_GNU}
+MASTER_SITE_SUBDIR= make</programlisting>
+
+ <para>Или можно использовать сокращенный формат:</para>
+
+ <programlisting>MASTER_SITES= GNU/make</programlisting>
+
+ <para>Эти переменные определены в файле
+ <filename>/usr/ports/Mk/bsd.sites.mk</filename>. Всё время
+ добавляются новые записи, так что обращайтесь к последней
+ версии этого файла перед тем, как послать нам свой
+ порт.</para>
+
+ <para>Для популярных сайтов существует несколько
+ <emphasis>магических</emphasis> макросов с заранее известной
+ структурой каталогов. Используйте для них сокращения, и
+ система попытается угадать для вас правильный
+ подкаталог.</para>
+
+ <programlisting>MASTER_SITES= SF</programlisting>
+
+ <para>Если попытка угадать не удалась, то это может быть
+ переписано следующим образом.</para>
+
+ <programlisting>MASTER_SITES= SF/stardict/WyabdcRealPeopleTTS/${PORTVERSION}</programlisting>
+
+ <para>Что также можно записать в таком виде:</para>
+
+ <programlisting>MASTER_SITES= SF
+MASTER_SITE_SUBDIR= stardict/WyabdcRealPeopleTTS/${PORTVERSION}</programlisting>
- <programlisting>MASTER_SITES= alpha</programlisting>
+ <table frame="none">
+ <title>Популярные магические макросы для
+ <varname>MASTER_SITES</varname></title>
+
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>Макрос</entry>
+ <entry>Предполагаемый подкаталог</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><varname>APACHE_JAKARTA</varname></entry>
+ <entry><varname>/dist/jakarta/${PORTNAME:S,-,,/,}/source</varname></entry>
+ </row>
+
+ <row>
+ <entry><varname>BERLIOS</varname></entry>
+ <entry><varname>/${PORTNAME:L}</varname></entry>
+ </row>
+
+ <row>
+ <entry><varname>CHEESESHOP</varname></entry>
+ <entry><varname>/packages/source/source/${DISTNAME:C/(.).*/\1/}/${DISTNAME:C/(.*)-[0-9].*/\1/}</varname></entry>
+ </row>
+
+ <row>
+ <entry><varname>DEBIAN</varname></entry>
+ <entry><varname>/debian/pool/main/${PORTNAME:C/^((lib)?.).*$/\1/}/${PORTNAME}</varname></entry>
+ </row>
+
+ <row>
+ <entry><varname>GCC</varname></entry>
+ <entry><varname>/pub/gcc/releases/${DISTNAME}</varname></entry>
+ </row>
+
+ <row>
+ <entry><varname>GNOME</varname></entry>
+ <entry><varname>/pub/GNOME/sources/${PORTNAME}/${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/}</varname></entry>
+ </row>
+
+ <row>
+ <entry><varname>GNU</varname></entry>
+ <entry><varname>/gnu/${PORTNAME}</varname></entry>
+ </row>
+
+ <row>
+ <entry><varname>MOZDEV</varname></entry>
+ <entry><varname>/pub/mozdev/${PORTNAME:L}</varname></entry>
+ </row>
+
+ <row>
+ <entry><varname>PERL_CPAN</varname></entry>
+ <entry><varname>/pub/CPAN/modules/by-module/${PORTNAME:C/-.*//}</varname></entry>
+ </row>
+
+ <row>
+ <entry><varname>PYTHON</varname></entry>
+ <entry><varname>/ftp/python/${PYTHON_PORTVERSION:C/rc[0-9]//}</varname></entry>
+ </row>
+
+ <row>
+ <entry><varname>RUBYFORGE</varname></entry>
+ <entry><varname>/${PORTNAME:L}</varname></entry>
+ </row>
+
+ <row>
+ <entry><varname>SAVANNAH</varname></entry>
+ <entry><varname>/${PORTNAME:L}</varname></entry>
+ </row>
+
+ <row>
+ <entry><varname>SF</varname></entry>
+ <entry><varname>/project/${PORTNAME:L}/${PORTNAME:L}/${PORTVERSION}</varname></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect2>
+
+ <sect2>
+ <title><varname>EXTRACT_SUFX</varname></title>
+
+ <para>Если у вас имеется один дистрибутивный файл, и в его
+ имени используется странное окончание для указания типа
+ сжатия, задайте переменную
+ <varname>EXTRACT_SUFX</varname>.</para>
+
+ <para>К примеру, если дистрибутивный файл носит имя
+ <filename>foo.tgz</filename>, а не более привычное
+ <filename>foo.tar.gz</filename>, вы должны написать:</para>
+
+ <programlisting>DISTNAME= foo
+EXTRACT_SUFX= .tgz</programlisting>
+
+ <para>Переменные <varname>USE_BZIP2</varname>,
+ <varname>USE_XZ</varname> и <varname>USE_ZIP</varname> при
+ необходимости автоматически устанавливают значение
+ <varname>EXTRACT_SUFX</varname> в
+ <literal>.tar.bz2</literal>, <literal>.tar.xz</literal> или
+ <literal>.zip</literal>. Если ни одна из этих переменных не
+ задана, то значение <varname>EXTRACT_SUFX</varname> по
+ умолчанию устанавливается в
+ <literal>.tar.gz</literal>.</para>
- <programlisting>MASTER_SITES= alpha:DEFAULT</programlisting>
- </listitem>
+ <note>
+ <para>Вам не нужно задавать значения
+ <varname>EXTRACT_SUFX</varname> и
+ <varname>DISTFILES</varname> одновременно.</para>
+ </note>
+ </sect2>
+
+ <sect2>
+ <title><varname>DISTFILES</varname></title>
+
+ <para>Иногда имена сгружаемых файлов не соответствуют имени
+ порта. К примеру, файл может называться
+ <filename>source.tar.gz</filename> или подобным образом. В
+ других случаях исходный код приложения может располагаться в
+ нескольких отличающихся архивах, и все они должны быть
+ сгружены.</para>
+
+ <para>Если это ваш случай, то задайте в переменной
+ <varname>DISTFILES</varname> список разделённых пробелами
+ имён файлов, которые нужно сгрузить.</para>
+
+ <programlisting>DISTFILES= source1.tar.gz source2.tar.gz</programlisting>
+
+ <para>Если переменная <varname>DISTFILES</varname> не задана
+ явно, то её значением по умолчанию будет
+ <literal>${DISTNAME}${EXTRACT_SUFX}</literal>.</para>
+ </sect2>
+
+ <sect2>
+ <title><varname>EXTRACT_ONLY</varname></title>
+
+ <para>Если только некоторые из <varname>DISTFILES</varname>
+ должны быть распакованы&mdash;к примеру, часть из них
+ является исходным кодом, а другие представляют собой
+ неупакованную документацию&mdash;перечислите имена файлов,
+ которые должны быть распакованы, в
+ <varname>EXTRACT_ONLY</varname>.</para>
+
+ <programlisting>DISTFILES= source.tar.gz manual.html
+EXTRACT_ONLY= source.tar.gz</programlisting>
+
+ <para>Если <emphasis>ни один</emphasis> из
+ <varname>DISTFILES</varname> не должен распаковываться, то
+ установите пустое значение переменной
+ <varname>EXTRACT_ONLY</varname>.</para>
+
+ <programlisting>EXTRACT_ONLY=</programlisting>
+ </sect2>
+
+ <sect2 xml:id="porting-patchfiles">
+ <title><varname>PATCHFILES</varname></title>
+
+ <para>Если вашему порту требуются некоторых дополнительные
+ патчи, которые доступны по FTP или HTTP, задайте имена этих
+ файлов в переменной <varname>PATCHFILES</varname>, а в
+ переменной <varname>PATCH_SITES</varname> укажите URL того
+ каталога, в котором они содержатся (формат такой же, как для
+ <varname>MASTER_SITES</varname>).</para>
+
+ <para>Если патч не относится к самому верху дерева исходных
+ текстов (то есть <varname>WRKSRC</varname>), потому что он
+ содержит некоторые дополнительные пути, установите
+ соответственно значение переменной
+ <varname>PATCH_DIST_STRIP</varname>. В частности, если все
+ имена путей в патче имеют дополнительный путь
+ <literal>foozolix-1.0/</literal> перед именем файла, то
+ задайте <literal>PATCH_DIST_STRIP=-p1</literal>.</para>
+
+ <para>Не волнуйтесь, если патчи упакованы; они будут
+ распакованы автоматически, если имена файлов оканчиваются на
+ <filename>.gz</filename> или <filename>.Z</filename>.</para>
+
+ <para>Если патч распространяется вместе с какими-то другими
+ файлами, такими, как документация, в виде tar-архива
+ <command>gzip</command>, вы не можете просто использовать
+ <varname>PATCHFILES</varname>. Если это ваш случай, добавьте
+ имя и местоположение архива с патчем к
+ <varname>DISTFILES</varname> и
+ <varname>MASTER_SITES</varname>. Затем воспользуйтесь
+ переменной <varname>EXTRA_PATCHES</varname> для указания этих
+ файлов, и <filename>bsd.port.mk</filename> автоматически
+ применит эти патчи. В частности,
+ <emphasis>не копируйте</emphasis> файлы с патчами в каталог
+ <varname>PATCHDIR</varname>&mdash;этот каталог может быть
+ недоступным для записи.</para>
- <listitem>
- <para>Группы не являются эксклюзивными, элемент может
- принадлежать к нескольким отличающимся группам одновременно, а
- группа может либо иметь несколько различных элементов, либо не
- иметь их вовсе. Повторяющиеся элементы в одной и той же группе
- будут являться просто повторяющимися элементами.</para>
- </listitem>
+ <note>
+ <para>Архив будет распакован вне исходного кода, как обычно,
+ и к тому же его не нужно явно распаковывать, если это
+ обычный архив <command>gzip</command> или
+ <command>compress</command>. Если вы сделаете последнее,
+ приложите дополнительные усилия для того, чтобы не
+ перезаписать что-либо, уже существующее в этом каталоге.
+ Также не забудьте добавить команду для удаления
+ скопированного патча в цели
+ <buildtarget>pre-clean</buildtarget>.</para>
+ </note>
+ </sect2>
+
+ <sect2 xml:id="porting-master-sites-n">
+ <title>Несколько дистрибутивных файлов или патчей с различных
+ серверов и подкаталогов
+ (<literal>MASTER_SITES:n</literal>)</title>
+
+ <para>(Этот раздел можно считать немного <quote>повышенной
+ трудности</quote>; те, кто впервые знакомятся с этим
+ текстом, могут пропустить этот раздел).</para>
+
+ <para>В этом разделе находится информация о механизме сгрузки,
+ известном как <literal>MASTER_SITES:n</literal> и
+ <literal>MASTER_SITES_NN</literal>. Далее мы будем называть
+ этот механизм <literal>MASTER_SITES:n</literal>.</para>
+
+ <para>Сначала немного общей информации. В OpenBSD имеется
+ полезная возможность, используемая в переменных
+ <varname>DISTFILES</varname> и <varname>PATCHFILES</varname>,
+ которая позволяет закреплять после имен файлов и патчей
+ идентификаторы типа <literal>:n</literal>. Здесь
+ <literal>n</literal> может быть из диапазона
+ <literal>[0-9]</literal> и обозначать закреплённую группу. К
+ примеру:</para>
+
+ <programlisting>DISTFILES= alpha:0 beta:1</programlisting>
+
+ <para>В OpenBSD дистрибутивный файл <filename>alpha</filename>
+ будет связан с переменной <varname>MASTER_SITES0</varname>,
+ но не с нашей общей переменной
+ <varname>MASTER_SITES</varname>, а файл
+ <filename>beta</filename> с переменной
+ <varname>MASTER_SITES1</varname>.</para>
+
+ <para>Этот очень интересная возможность, которая может
+ уменьшить этот бесконечный поиск работающего сайта для
+ сгрузки.</para>
+
+ <para>Просто представьте себе 2 файла в
+ <varname>DISTFILES</varname> и 20 сайтов в
+ <varname>MASTER_SITES</varname>; сайты очень медленные,
+ причём <filename>beta</filename> находится на всех сайтах из
+ <varname>MASTER_SITES</varname>, а <filename>alpha</filename>
+ может быть найден только на 20-м сайте. Будет неправильно
+ проверять их все, если создатель знает об этом, не правда ли?
+ Неподходящее начало для таких прекрасных выходных!</para>
+
+ <para>Теперь, когда вы получили общее представление, просто
+ представьте ещё большее количество
+ <varname>DISTFILES</varname> и
+ <varname>MASTER_SITES</varname>. Конечно, наш <quote>магистр
+ доступности дистрибутивов</quote> представляет масштабы
+ нагрузки на сеть, которую это даёт.</para>
+
+ <para>В последующих разделах информация будет даваться вместе с
+ реализацией этой идеи во &os;. Мы несколько улучшили
+ концепцию OpenBSD.</para>
+
+ <sect3>
+ <title>Упрощённая информация</title>
+
+ <para>В этом разделе рассказывается, как быстро подготовить
+ точную сгрузку нескольких дистрибутивных файлов и патчей с
+ разных сайтов и каталогов. Мы описываем здесь случай
+ упрощённого использования
+ <literal>MASTER_SITES:n</literal>. Для большинства
+ сценариев этого будет достаточно. Однако, если вам нужна
+ дополнительная информация, обратитесь к следующему
+ разделу.</para>
+
+ <para>Некоторые приложения состоят из многих дистрибутивных
+ файлов, которые должны быть сгружены с нескольких различных
+ сайтов. К примеру, <application>Ghostscript</application>
+ состоит из основной программы и большого числа файлов
+ драйверов, которые используются в зависимости от принтера
+ пользователя. Некоторые из этих файлов драйверов
+ поставляются с основной программой, но при этом многие
+ другие должны быть сгружены с множества различных
+ сайтов.</para>
+
+ <para>Чтобы это поддерживать, за каждой записью в
+ <varname>DISTFILES</varname> может следовать символ
+ двоеточия и <quote>имя метки</quote>. За каждым сайтом,
+ перечисленным в <varname>MASTER_SITES</varname>, тоже
+ следует двоеточие и метка, которая указывает, какие файлы
+ дистрибутива должны быть сгружены с этого сайта.</para>
+
+ <para>Например, рассмотрим приложение, исходный код которого
+ разделён на две части, <filename>source1.tar.gz</filename>
+ и <filename>source2.tar.gz</filename>, которые должны быть
+ сгружены с двух различных источников.
+ Файл <filename>Makefile</filename> порта будет содержать
+ строчки типа <xref
+ linkend="ports-master-sites-n-example-simple-use-one-file-per-site"/>.</para>
+
+ <example
+ xml:id="ports-master-sites-n-example-simple-use-one-file-per-site">
+
+ <title>Упрощённое использование
+ <literal>MASTER_SITES:n</literal> с 1 файлом на каждом
+ сайте</title>
+
+ <programlisting>MASTER_SITES= ftp://ftp.example1.com/:source1 \
+ ftp://ftp.example2.com/:source2
+DISTFILES= source1.tar.gz:source1 \
+ source2.tar.gz:source2</programlisting>
+ </example>
- <listitem xml:id="porting-master-sites-n-comma-operator">
- <para>Если в хотите, чтобы элемент принадлежал к нескольким
- группам одновременно, вы можете использовать
- запятую (<literal>,</literal>).</para>
+ <para>Несколько дистрибутивных файлов могут иметь одну и ту
+ же метку. Продолжая предыдущий пример, положим, что
+ имеется и третий дистрибутивный файл,
+ <filename>source3.tar.gz</filename>, который должен быть
+ сгружен с <systemitem>ftp.example2.com</systemitem>. Тогда
+ файл <filename>Makefile</filename> будет написан как <xref
+ linkend="ports-master-sites-n-example-simple-use-more-than-one-file-per-site"/>.</para>
+
+ <example
+ xml:id="ports-master-sites-n-example-simple-use-more-than-one-file-per-site">
+
+ <title>Упрощённое использование
+ <literal>MASTER_SITES:n</literal> с более чем 1 файлом на
+ каждом сервере</title>
+
+ <programlisting>MASTER_SITES= ftp://ftp.example1.com/:source1 \
+ ftp://ftp.example2.com/:source2
+DISTFILES= source1.tar.gz:source1 \
+ source2.tar.gz:source2 \
+ source3.tar.gz:source2</programlisting>
+ </example>
+ </sect3>
- <para>Вместо того, чтобы повторять их несколько раз, каждый раз с
- разным постфиксом, мы можем перечислить несколько групп за раз
- в одном постфиксе. Например, <literal>:m,n,o</literal>
- определяет элемент, принадлежащий группам <literal>m</literal>,
- <literal>n</literal> и <literal>o</literal>.</para>
+ <sect3>
+ <title>Подробная информация</title>
- <para>Все следующие примеры имеют один смысл, но последний
- является предпочтительным:</para>
+ <para>Прекрасно, но пример из предыдущего раздела не показал
+ вам всё, что вам нужно? В этом разделе мы подробно опишем,
+ как работает механизм <literal>MASTER_SITES:n</literal>
+ точной сгрузки и как вы можете изменить ваши порты, чтобы
+ это использовать.</para>
- <programlisting>MASTER_SITES= alpha alpha:SOME_SITE</programlisting>
+ <orderedlist>
+ <listitem>
+ <para>За элементами могут следовать символы
+ <literal>:n</literal>, где <replaceable>n</replaceable>
+ это <literal>[^:,]+</literal>, то есть
+ <replaceable>n</replaceable> может теоретически быть
+ любой алфавитно-цифровой строкой, но пока мы будем
+ ограничивать их
+ <literal>[a-zA-Z_][0-9a-zA-Z_]+</literal>.</para>
+
+ <para>Более того, совпадение строк чувствительно к
+ регистру; другими словами, <literal>n</literal>
+ отличается от <literal>N</literal>.</para>
+
+ <para>Однако следующие слова не могут использоваться для
+ этих нужд, так как они имеют особое значение:
+ <literal>default</literal>, <literal>all</literal> и
+ <literal>ALL</literal> (они используются для своих нужд
+ в <xref
+ linkend="porting-master-sites-n-what-changes-in-port-targets"/>).
+ Кроме того, <literal>DEFAULT</literal> является
+ специальным ключевым словом (посмотрите <xref
+ linkend="porting-master-sites-n-DEFAULT-group"/>).</para>
+ </listitem>
- <programlisting>MASTER_SITES= alpha:DEFAULT alpha:SOME_SITE</programlisting>
+ <listitem>
+ <para>Элементы, за которыми следуют
+ <literal>:n</literal>, принадлежат группе
+ <literal>n</literal>, <literal>:m</literal> относится к
+ группе <literal>m</literal> и так далее.</para>
+ </listitem>
- <programlisting>MASTER_SITES= alpha:SOME_SITE,DEFAULT</programlisting>
+ <listitem xml:id="porting-master-sites-n-DEFAULT-group">
+ <para>Элементы без таких суффиксов не относятся ни к
+ какой группе, то есть они принадлежат к особой группе
+ <literal>DEFAULT</literal>. Если вы укажете суффиксом
+ любого элемента <literal>DEFAULT</literal>, вы просто
+ выполните излишнюю работу, если только вы не хотите
+ отнесения элемента как к группе
+ <literal>DEFAULT</literal>, так и какой-то другой в
+ одно и то же время (посмотрите на пункт <xref
+ linkend="porting-master-sites-n-comma-operator"/>).</para>
- <programlisting>MASTER_SITES= alpha:DEFAULT,SOME_SITE</programlisting>
- </listitem>
+ <para>Следующие примеры равнозначны, но первый более
+ предпочтителен:</para>
- <listitem>
- <para>Все серверы внутри определённой группы сортируются в
- соответствии с <varname>MASTER_SORT_AWK</varname>. Все группы
- в <varname>MASTER_SITES</varname> и
- <varname>PATCH_SITES</varname> тоже сортируются.</para>
- </listitem>
+ <programlisting>MASTER_SITES= alpha</programlisting>
- <listitem xml:id="porting-master-sites-n-group-semantics">
- <para>Семантика групп может использоваться в любой из следующих
- переменных <varname>MASTER_SITES</varname>,
- <varname>PATCH_SITES</varname>,
- <varname>MASTER_SITE_SUBDIR</varname>,
- <varname>PATCH_SITE_SUBDIR</varname>,
- <varname>DISTFILES</varname> и
- <varname>PATCHFILES</varname> в соответствии со следующим
- синтаксисом:</para>
-
- <orderedlist>
- <listitem>
- <para>Все элементы <varname>MASTER_SITES</varname>,
- <varname>PATCH_SITES</varname>,
- <varname>MASTER_SITE_SUBDIR</varname> и
- <varname>PATCH_SITE_SUBDIR</varname> должны заканчиваться
- символом прямого слэша <literal>/</literal>. Если какие-то
- элементы принадлежат каким-то группам, постфикс группы
- <literal>:n</literal> должен
- следовать сразу после завершающего символа
- <literal>/</literal>. Механизм
- <literal>MASTER_SITES:n</literal> опирается на наличие
- завершающего символа <literal>/</literal> во избежание
- совпадающих элементов, где <literal>:n</literal> является
- корректной частью элемента с вхождениями, где
- <literal>:n</literal> обозначает группу
- <literal>n</literal>. Для целей совместимости, так как
- завершающий символ <literal>/</literal> ранее не
- требовался в элементах
- <varname>MASTER_SITE_SUBDIR</varname> и
- <varname>PATCH_SITE_SUBDIR</varname>, если символ, сразу
- предшествующий постфиксу, не является символом
- <literal>/</literal>, то <literal>:n</literal> будет
- считаться корректной частью элемента, а не постфиксом
- группы, даже если за элементом следует
- <literal>:n</literal>. Посмотрите <xref linkend="ports-master-sites-n-example-detailed-use-master-site-subdir"/>
- и <xref linkend="ports-master-sites-n-example-detailed-use-complete-example-master-sites"/>.</para>
-
- <example xml:id="ports-master-sites-n-example-detailed-use-master-site-subdir">
- <title>Подробное использование
- <literal>MASTER_SITES:n</literal> в
- <varname>MASTER_SITE_SUBDIR</varname></title>
-
- <programlisting>MASTER_SITE_SUBDIR= old:n new/:NEW</programlisting>
-
- <itemizedlist>
- <listitem>
- <para>Каталоги внутри группы
- <literal>DEFAULT</literal> -&gt; old:n</para>
- </listitem>
-
- <listitem>
- <para>Каталоги внутри группы
- <literal>NEW</literal> -&gt; new</para>
- </listitem>
- </itemizedlist>
- </example>
-
- <example xml:id="ports-master-sites-n-example-detailed-use-complete-example-master-sites">
- <title>Подробное использование
- <literal>MASTER_SITES:n</literal> с запятыми,
- несколькими файлами, несколькими серверами и
- несколькими подкаталогами</title>
-
- <programlisting>MASTER_SITES= http://site1/%SUBDIR%/ http://site2/:DEFAULT \
- http://site3/:group3 http://site4/:group4 \
- http://site5/:group5 http://site6/:group6 \
- http://site7/:DEFAULT,group6 \
- http://site8/%SUBDIR%/:group6,group7 \
- http://site9/:group8
-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</programlisting>
-
- <para>Предыдущий пример приводит к следующей точной
- сгрузке. Серверы перечислены в точном порядке их
- использования.</para>
-
- <itemizedlist>
- <listitem>
- <para><filename>file1</filename> будет сгружаться
- с</para>
-
- <itemizedlist>
- <listitem>
- <para><varname>MASTER_SITE_OVERRIDE</varname></para>
- </listitem>
-
- <listitem>
- <para>http://site1/directory-trial:1/</para>
- </listitem>
-
- <listitem>
- <para>http://site1/directory-one/</para>
- </listitem>
-
- <listitem>
- <para>http://site1/directory/</para>
- </listitem>
-
- <listitem>
- <para>http://site2/</para>
- </listitem>
-
- <listitem>
- <para>http://site7/</para>
- </listitem>
-
- <listitem>
- <para><varname>MASTER_SITE_BACKUP</varname></para>
- </listitem>
- </itemizedlist>
- </listitem>
-
- <listitem>
- <para><filename>file2</filename> будет сгружаться точно
- также, как <filename>file1</filename>, так как они
- оба относятся к одной и той же группе</para>
-
- <itemizedlist>
- <listitem>
- <para><varname>MASTER_SITE_OVERRIDE</varname></para>
- </listitem>
-
- <listitem>
- <para>http://site1/directory-trial:1/</para>
- </listitem>
-
- <listitem>
- <para>http://site1/directory-one/</para>
- </listitem>
-
- <listitem>
- <para>http://site1/directory/</para>
- </listitem>
-
- <listitem>
- <para>http://site2/</para>
- </listitem>
-
- <listitem>
- <para>http://site7/</para>
- </listitem>
-
- <listitem>
- <para><varname>MASTER_SITE_BACKUP</varname></para>
- </listitem>
- </itemizedlist>
- </listitem>
-
- <listitem>
- <para><filename>file3</filename> будет сгружен с</para>
-
- <itemizedlist>
- <listitem>
- <para><varname>MASTER_SITE_OVERRIDE</varname></para>
- </listitem>
-
- <listitem>
- <para>http://site3/</para>
- </listitem>
-
- <listitem>
- <para><varname>MASTER_SITE_BACKUP</varname></para>
- </listitem>
- </itemizedlist>
- </listitem>
-
- <listitem>
- <para><filename>file4</filename> будет сгружаться
- с</para>
-
- <itemizedlist>
- <listitem>
- <para><varname>MASTER_SITE_OVERRIDE</varname></para>
- </listitem>
-
- <listitem>
- <para>http://site4/</para>
- </listitem>
-
- <listitem>
- <para>http://site5/</para>
- </listitem>
-
- <listitem>
- <para>http://site6/</para>
- </listitem>
-
- <listitem>
- <para>http://site7/</para>
- </listitem>
-
- <listitem>
- <para>http://site8/directory-one/</para>
- </listitem>
-
- <listitem>
- <para><varname>MASTER_SITE_BACKUP</varname></para>
- </listitem>
- </itemizedlist>
- </listitem>
-
- <listitem>
- <para><filename>file5</filename> будет сгружен с</para>
-
- <itemizedlist>
- <listitem>
- <para><varname>MASTER_SITE_OVERRIDE</varname></para>
- </listitem>
-
- <listitem>
- <para><varname>MASTER_SITE_BACKUP</varname></para>
- </listitem>
- </itemizedlist>
- </listitem>
-
- <listitem>
- <para><filename>file6</filename> будет сгружаться
- с</para>
-
- <itemizedlist>
- <listitem>
- <para><varname>MASTER_SITE_OVERRIDE</varname></para>
- </listitem>
-
- <listitem>
- <para>http://site8/</para>
- </listitem>
-
- <listitem>
- <para><varname>MASTER_SITE_BACKUP</varname></para>
- </listitem>
- </itemizedlist>
- </listitem>
- </itemizedlist>
- </example>
- </listitem>
- </orderedlist>
- </listitem>
+ <programlisting>MASTER_SITES= alpha:DEFAULT</programlisting>
+ </listitem>
- <listitem>
- <para>Как мне сгруппировать одну из специальных переменных из
- <filename>bsd.sites.mk</filename>, например,
- <varname>MASTER_SITE_SOURCEFORGE</varname>?</para>
+ <listitem>
+ <para>Группы не являются эксклюзивными, элемент может
+ принадлежать к нескольким отличающимся группам
+ одновременно, а группа может либо иметь несколько
+ различных элементов, либо не иметь их вовсе.
+ Повторяющиеся элементы в одной и той же группе будут
+ являться просто повторяющимися элементами.</para>
+ </listitem>
- <para>Посмотрите <xref linkend="ports-master-sites-n-example-detailed-use-master-site-sourceforge"/>.</para>
+ <listitem xml:id="porting-master-sites-n-comma-operator">
+ <para>Если в хотите, чтобы элемент принадлежал к
+ нескольким группам одновременно, вы можете использовать
+ запятую (<literal>,</literal>).</para>
- <example xml:id="ports-master-sites-n-example-detailed-use-master-site-sourceforge">
- <title>Подробное использование
- <literal>MASTER_SITES:n</literal> с
- <varname>MASTER_SITE_SOURCEFORGE</varname></title>
+ <para>Вместо того, чтобы повторять их несколько раз,
+ каждый раз с разным постфиксом, мы можем перечислить
+ несколько групп за раз в одном постфиксе. Например,
+ <literal>:m,n,o</literal> определяет элемент,
+ принадлежащий группам <literal>m</literal>,
+ <literal>n</literal> и <literal>o</literal>.</para>
- <programlisting>MASTER_SITES= http://site1/ ${MASTER_SITE_SOURCEFORGE:S/$/:sourceforge,TEST/}
-DISTFILES= something.tar.gz:sourceforge</programlisting>
- </example>
+ <para>Все следующие примеры имеют один смысл, но
+ последний является предпочтительным:</para>
- <para><filename>something.tar.gz</filename> будет сгружаться со
- всех сайтов из
- <varname>MASTER_SITE_SOURCEFORGE</varname>.</para>
- </listitem>
+ <programlisting>MASTER_SITES= alpha alpha:SOME_SITE</programlisting>
- <listitem>
- <para>Как мне использовать это с переменными
- <varname>PATCH*</varname>?</para>
+ <programlisting>MASTER_SITES= alpha:DEFAULT alpha:SOME_SITE</programlisting>
- <para>Все примеры выполнялись с переменными
- <varname>MASTER*</varname>, и они работают точно также и для
- <varname>PATCH*</varname>, как это можно видеть в <xref linkend="ports-master-sites-n-example-detailed-use-patch-sites"/>.</para>
+ <programlisting>MASTER_SITES= alpha:SOME_SITE,DEFAULT</programlisting>
- <example xml:id="ports-master-sites-n-example-detailed-use-patch-sites">
- <title>Упрощённое использование
- <literal>MASTER_SITES:n</literal> с
- <varname>PATCH_SITES</varname>.</title>
+ <programlisting>MASTER_SITES= alpha:DEFAULT,SOME_SITE</programlisting>
+ </listitem>
- <programlisting>PATCH_SITES= http://site1/ http://site2/:test
-PATCHFILES= patch1:test</programlisting>
- </example>
- </listitem>
- </orderedlist>
- </sect3>
+ <listitem>
+ <para>Все серверы внутри определённой группы сортируются
+ в соответствии с <varname>MASTER_SORT_AWK</varname>.
+ Все группы в <varname>MASTER_SITES</varname> и
+ <varname>PATCH_SITES</varname> тоже сортируются.</para>
+ </listitem>
- <sect3>
- <title>Что изменится для портов? А что не изменится?</title>
+ <listitem xml:id="porting-master-sites-n-group-semantics">
+ <para>Семантика групп может использоваться в любой из
+ следующих переменных <varname>MASTER_SITES</varname>,
+ <varname>PATCH_SITES</varname>,
+ <varname>MASTER_SITE_SUBDIR</varname>,
+ <varname>PATCH_SITE_SUBDIR</varname>,
+ <varname>DISTFILES</varname> и
+ <varname>PATCHFILES</varname> в соответствии со
+ следующим синтаксисом:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Все элементы <varname>MASTER_SITES</varname>,
+ <varname>PATCH_SITES</varname>,
+ <varname>MASTER_SITE_SUBDIR</varname> и
+ <varname>PATCH_SITE_SUBDIR</varname> должны
+ заканчиваться символом прямого слэша
+ <literal>/</literal>. Если какие-то элементы
+ принадлежат каким-то группам, постфикс группы
+ <literal>:n</literal> должен следовать сразу после
+ завершающего символа <literal>/</literal>.
+ Механизм <literal>MASTER_SITES:n</literal>
+ опирается на наличие завершающего символа
+ <literal>/</literal> во избежание совпадающих
+ элементов, где <literal>:n</literal> является
+ корректной частью элемента с вхождениями, где
+ <literal>:n</literal> обозначает группу
+ <literal>n</literal>. Для целей совместимости, так
+ как завершающий символ <literal>/</literal> ранее
+ не требовался в элементах
+ <varname>MASTER_SITE_SUBDIR</varname> и
+ <varname>PATCH_SITE_SUBDIR</varname>, если символ,
+ сразу предшествующий постфиксу, не является
+ символом <literal>/</literal>, то
+ <literal>:n</literal> будет считаться корректной
+ частью элемента, а не постфиксом группы, даже если
+ за элементом следует <literal>:n</literal>.
+ Посмотрите <xref
+ linkend="ports-master-sites-n-example-detailed-use-master-site-subdir"/>
+ и <xref
+ linkend="ports-master-sites-n-example-detailed-use-complete-example-master-sites"/>.</para>
+
+ <example
+ xml:id="ports-master-sites-n-example-detailed-use-master-site-subdir">
+
+ <title>Подробное использование
+ <literal>MASTER_SITES:n</literal> в
+ <varname>MASTER_SITE_SUBDIR</varname></title>
+
+ <programlisting>MASTER_SITE_SUBDIR= old:n new/:NEW</programlisting>
+
+ <itemizedlist>
+ <listitem>
+ <para>Каталоги внутри группы
+ <literal>DEFAULT</literal> -&gt; old:n</para>
+ </listitem>
+
+ <listitem>
+ <para>Каталоги внутри группы
+ <literal>NEW</literal> -&gt; new</para>
+ </listitem>
+ </itemizedlist>
+ </example>
+
+ <example
+ xml:id="ports-master-sites-n-example-detailed-use-complete-example-master-sites">
+
+ <title>Подробное использование
+ <literal>MASTER_SITES:n</literal> с запятыми,
+ несколькими файлами, несколькими серверами и
+ несколькими подкаталогами</title>
+
+ <programlisting>MASTER_SITES= http://site1/%SUBDIR%/ http://site2/:DEFAULT \
+ http://site3/:group3 http://site4/:group4 \
+ http://site5/:group5 http://site6/:group6 \
+ http://site7/:DEFAULT,group6 \
+ http://site8/%SUBDIR%/:group6,group7 \
+ http://site9/:group8
+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</programlisting>
+
+ <para>Предыдущий пример приводит к следующей точной
+ сгрузке. Серверы перечислены в точном порядке их
+ использования.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><filename>file1</filename> будет
+ сгружаться с</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><varname>MASTER_SITE_OVERRIDE</varname></para>
+ </listitem>
+
+ <listitem>
+ <para>http://site1/directory-trial:1/</para>
+ </listitem>
+
+ <listitem>
+ <para>http://site1/directory-one/</para>
+ </listitem>
+
+ <listitem>
+ <para>http://site1/directory/</para>
+ </listitem>
+
+ <listitem>
+ <para>http://site2/</para>
+ </listitem>
+
+ <listitem>
+ <para>http://site7/</para>
+ </listitem>
+
+ <listitem>
+ <para><varname>MASTER_SITE_BACKUP</varname></para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para><filename>file2</filename> будет
+ сгружаться точно также, как
+ <filename>file1</filename>, так как они
+ оба относятся к одной и той же группе</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><varname>MASTER_SITE_OVERRIDE</varname></para>
+ </listitem>
+
+ <listitem>
+ <para>http://site1/directory-trial:1/</para>
+ </listitem>
+
+ <listitem>
+ <para>http://site1/directory-one/</para>
+ </listitem>
+
+ <listitem>
+ <para>http://site1/directory/</para>
+ </listitem>
+
+ <listitem>
+ <para>http://site2/</para>
+ </listitem>
+
+ <listitem>
+ <para>http://site7/</para>
+ </listitem>
+
+ <listitem>
+ <para><varname>MASTER_SITE_BACKUP</varname></para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para><filename>file3</filename> будет сгружен
+ с</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><varname>MASTER_SITE_OVERRIDE</varname></para>
+ </listitem>
+
+ <listitem>
+ <para>http://site3/</para>
+ </listitem>
+
+ <listitem>
+ <para><varname>MASTER_SITE_BACKUP</varname></para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para><filename>file4</filename> будет
+ сгружаться с</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><varname>MASTER_SITE_OVERRIDE</varname></para>
+ </listitem>
+
+ <listitem>
+ <para>http://site4/</para>
+ </listitem>
+
+ <listitem>
+ <para>http://site5/</para>
+ </listitem>
+
+ <listitem>
+ <para>http://site6/</para>
+ </listitem>
+
+ <listitem>
+ <para>http://site7/</para>
+ </listitem>
+
+ <listitem>
+ <para>http://site8/directory-one/</para>
+ </listitem>
+
+ <listitem>
+ <para><varname>MASTER_SITE_BACKUP</varname></para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para><filename>file5</filename> будет сгружен
+ с</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><varname>MASTER_SITE_OVERRIDE</varname></para>
+ </listitem>
+
+ <listitem>
+ <para><varname>MASTER_SITE_BACKUP</varname></para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para><filename>file6</filename> будет
+ сгружаться с</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><varname>MASTER_SITE_OVERRIDE</varname></para>
+ </listitem>
+
+ <listitem>
+ <para>http://site8/</para>
+ </listitem>
+
+ <listitem>
+ <para><varname>MASTER_SITE_BACKUP</varname></para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ </itemizedlist>
+ </example>
+ </listitem>
+ </orderedlist>
+ </listitem>
- <orderedlist numeration="lowerroman">
- <listitem>
- <para>Все имеющиеся порты остаются без изменений. Код для
- механизма <literal>MASTER_SITES:n</literal> активируется, если
- только есть элементы, которые заканчиваются на
- <literal>:n</literal>, как и
- элементы в соответствии с вышеописанным синтаксисом, особенно
- как это показано в пункте <xref linkend="porting-master-sites-n-group-semantics"/>.</para>
- </listitem>
+ <listitem>
+ <para>Как мне группировать одну из специальных переменных
+ из <filename>bsd.sites.mk</filename>, например,
+ <varname>MASTER_SITE_SOURCEFORGE</varname>?</para>
- <listitem xml:id="porting-master-sites-n-what-changes-in-port-targets">
- <para>Цели порт остаются теми же самыми:
- <buildtarget>checksum</buildtarget>,
- <buildtarget>makesum</buildtarget>,
- <buildtarget>patch</buildtarget>,
- <buildtarget>configure</buildtarget>,
- <buildtarget>build</buildtarget> и так далее. С обычными
- исключениями для <buildtarget>do-fetch</buildtarget>,
- <buildtarget>fetch-list</buildtarget>,
- <buildtarget>master-sites</buildtarget> и
- <buildtarget>patch-sites</buildtarget>.</para>
-
- <itemizedlist>
- <listitem>
- <para><buildtarget>do-fetch</buildtarget>: использует новую
- группировку с постфиксами в <varname>DISTFILES</varname> и
- <varname>PATCHFILES</varname> с соответствующими элементами
- групп в <varname>MASTER_SITES</varname> и
- <varname>PATCH_SITES</varname>, которые используют группы
- из <varname>MASTER_SITE_SUBDIR</varname> и
- <varname>PATCH_SITE_SUBDIR</varname>. Посмотрите <xref linkend="ports-master-sites-n-example-detailed-use-complete-example-master-sites"/>.</para>
- </listitem>
-
- <listitem>
- <para><buildtarget>fetch-list</buildtarget>: работает также,
- как старая цель <buildtarget>fetch-list</buildtarget> с тем
- исключением, что она группирует, как и
- <buildtarget>do-fetch</buildtarget>.</para>
- </listitem>
-
- <listitem>
- <para><buildtarget>master-sites</buildtarget> и
- <buildtarget>patch-sites</buildtarget>:
- (несовместимы со старыми версиями) только возвращают
- элементы группы <literal>DEFAULT</literal>; на самом деле
- они выполняют цели
- <buildtarget>master-sites-default</buildtarget> и
- <buildtarget>patch-sites-default</buildtarget>
- соответственно.</para>
-
- <para>Более того, использование целей
- <buildtarget>master-sites-all</buildtarget> или
- <buildtarget>patch-sites-all</buildtarget> предпочтительно
- для непосредственной проверки
- <buildtarget>MASTER_SITES</buildtarget> или
- <buildtarget>PATCH_SITES</buildtarget>. Также работа прямой
- проверки в последующих версиях не гарантируется.
- Посмотрите <xref linkend="porting-master-sites-n-new-port-targets-master-sites-all"/>
- для получения более дополнительной информации об этих новых
- целях.</para>
- </listitem>
- </itemizedlist>
- </listitem>
+ <para>Посмотрите <xref
+ linkend="ports-master-sites-n-example-detailed-use-master-site-sourceforge"/>.</para>
- <listitem>
- <para>Новые цели построения портов</para>
-
- <orderedlist>
- <listitem>
- <para>Имеются цели
- <buildtarget>master-sites-<replaceable>n</replaceable></buildtarget>
- и
- <buildtarget>patch-sites-<replaceable>n</replaceable></buildtarget>,
- которые будут перечислять элементы соответствующей группы
- <replaceable>n</replaceable> из
- <varname>MASTER_SITES</varname> и
- <varname>PATCH_SITES</varname> соответственно. К примеру,
- <buildtarget>master-sites-DEFAULT</buildtarget> и
- <buildtarget>patch-sites-DEFAULT</buildtarget> обе будут
- возвращать элементы группы <literal>DEFAULT</literal>,
- <buildtarget>master-sites-test</buildtarget> и
- <buildtarget>patch-sites-test</buildtarget> группы
- <literal>test</literal> и так далее.</para>
- </listitem>
-
- <listitem xml:id="porting-master-sites-n-new-port-targets-master-sites-all">
- <para>Имеются новые цели
- <buildtarget>master-sites-all</buildtarget> и
- <buildtarget>patch-sites-all</buildtarget>, которые выполняют
- работу старых <buildtarget>master-sites</buildtarget> и
- <buildtarget>patch-sites</buildtarget>. Они возвращают
- элементы всех групп, как если бы они все принадлежали одной
- и той же группе с тем, что она перечисляет ровно столько
- <varname>MASTER_SITE_BACKUP</varname> и
- <varname>MASTER_SITE_OVERRIDE</varname>, как и группы,
- определённые в <varname>DISTFILES</varname> или
- <varname>PATCHFILES</varname>; соответственно для
- <buildtarget>master-sites-all</buildtarget> и
- <buildtarget>patch-sites-all</buildtarget>.</para>
- </listitem>
- </orderedlist>
- </listitem>
- </orderedlist>
- </sect3>
- </sect2>
-
- <sect2>
- <title><varname>DIST_SUBDIR</varname></title>
-
- <para>Не позволяйте вашему порту засорять
- <filename>/usr/ports/distfiles</filename>. Если вашему порту
- требуется сгрузить много файлов, или он содержит имя файла,
- могущее вызвать конфликты с другими портами (например,
- <filename>Makefile</filename>), то укажите в переменной
- <varname>DIST_SUBDIR</varname> имя порта (должны подойти
- <literal>${PORTNAME}</literal> или
- <literal>${PKGNAMEPREFIX}${PORTNAME}</literal>). Это изменит
- значение переменной <varname>DISTDIR</varname> со значения по
- умолчанию <filename>/usr/ports/distfiles</filename> к значению
- <filename>/usr/ports/distfiles/DIST_SUBDIR</filename>,
- и в результате всё, что требуется для порта, будет помещено в этот
- подкаталог.</para>
-
- <para>Он заглянет также в подкаталог с тем же именем на
- основном резервном сервере <filename>ftp.FreeBSD.org</filename>.
- (Явное задание переменной <varname>DISTDIR</varname> в вашем файле
- <varname>Makefile</varname> этого не сделает, так что, пожалуйста,
- воспользуйтесь <varname>DIST_SUBDIR</varname>.)</para>
-
- <note>
- <para>Это не коснётся тех сайтов <varname>MASTER_SITES</varname>,
- которые вы указали в вашем файле
- <filename>Makefile</filename>.</para>
- </note>
- </sect2>
-
- <sect2>
- <title><varname>ALWAYS_KEEP_DISTFILES</varname></title>
-
- <para>Если ваш порт использует двоичные дистрибутивные файлы и
- обладает лицензией, требующей, чтобы исходный код предоставлялся
- вместе с пакетами, распространяемыми в двоичной форме, например
- GPL, то <varname>ALWAYS_KEEP_DISTFILES</varname> даст кластеру
- построения &os; указание сохранять копию файлов, указанных в
- <varname>DISTFILES</varname>. Пользователям таких портов эти
- файлы в основном не нужны, поэтому хорошей идеей является
- добавление в <varname>DISTFILES</varname> исходных
- дистрибутивных файлов, только когда определена переменная
- <varname>PACKAGE_BUILDING</varname>.</para>
-
- <example xml:id="ports-master-sites-n-example-always-keep-distfiles">
- <title>Использование <varname>ALWAYS_KEEP_DISTFILES</varname>.</title>
- <programlisting>.if defined(PACKAGE_BUILDING)
-DISTFILES+= <replaceable>foo.tar.gz</replaceable>
-ALWAYS_KEEP_DISTFILES= yes
-.endif</programlisting>
- </example>
+ <example
+ xml:id="ports-master-sites-n-example-detailed-use-master-site-sourceforge">
- <para>При добавлении дополнительных файлов в <varname>DISTFILES</varname>
- убедитесь, что вы их также добавляете в <filename>distinfo</filename>.
- Кроме того, дополнительные файлы обычно распаковываются также в
- <varname>WRKDIR</varname>, что для некоторых портов может вызывать
- нежелательные подобные эффекты и требовать особую обработку.</para>
- </sect2>
- </sect1>
-
- <sect1 xml:id="makefile-maintainer">
- <title><varname>MAINTAINER</varname></title>
-
- <para>Укажите здесь ваш адрес электронной почты. Пожалуйста.
- <!-- smiley --><emphasis>:-)</emphasis></para>
-
- <para>Заметьте, что в качестве значения для
- <varname>MAINTAINER</varname> допустимо использование только одного
- адреса без поля комментария. Должен использоваться формат
- <literal>user@hostname.domain</literal>. Пожалуйста, не включайте
- никакого описательного текста, например, вашего настоящего имени в
- эту строку&mdash;это несколько сбивает с толку
- <filename>bsd.port.mk</filename>.</para>
-
- <para>Сопровождающий ответственен за поддержание порта в актуальном
- состоянии и обеспечение правильной работы порта. За подробным
- описанием обязанностей сопровождающего порт обращайтесь к главе
- <link xlink:href="&url.articles.contributing-ports.en;/maintain-port.html">The
- challenge for port maintainers</link>.</para>
+ <title>Подробное использование
+ <literal>MASTER_SITES:n</literal> с
+ <varname>MASTER_SITE_SOURCEFORGE</varname></title>
- <para>Перед фиксацией в репозитории изменения в порте будут отправлены
- сопровождающему для просмотра и одобрения.
- Если сопровождающий порта не ответил на запрос пользователя об
- обновлении в течение двух недель (исключая большие праздники),
- то это можно считать тайм-аутом сопровождающего, и обновление может
- быть выполнено без явного подтверждения от сопровождающего. Если
- сопровождающий не отвечает в течение трёх месяцев, то считается, что
- он отсутствует, и как сопровождающий порта, о котором идёт речь, может
- быть заменён. Исключениями из этого правила является всё, что
- сопровождает &a.portmgr; или &a.security-officer;. Запрещено делать
- любые несанкционированные изменения в портах, которые ведут эти
- группы.</para>
-
- <para>Мы оставляем за собой право изменять сообщение сопровождающего
- для лучшего соответствия существующим политикам и стилю Коллекции
- Портов без явного одобрения со стороны отправителя. Также,
- крупные изменения в инфраструктуре могут повлечь изменения в порте
- без согласия сопровождающего. Такой вид изменений никогда не будет
- затрагивать функциональность порта.</para>
-
- <para>За &a.portmgr; оставляется право снять или назначить кого-либо
- сопровождающим по любой причине, а за the &a.security-officer;
- оставляется право лишать или назначать права на сопровождение порта
- по соображениям информационной безопасности.</para>
- </sect1>
-
- <sect1 xml:id="makefile-comment">
- <title><varname>COMMENT</varname></title>
-
- <para>Содержит однострочное описание порта. Пожалуйста, соблюдайте
- следующие правила:</para>
+ <programlisting>MASTER_SITES= http://site1/ ${MASTER_SITE_SOURCEFORGE:S/$/:sourceforge,TEST/}
+DISTFILES= something.tar.gz:sourceforge</programlisting>
+ </example>
- <orderedlist>
- <listitem>
- <para>Старайтесь делать строку COMMENT длиной не больше, чем 70
- символов, так как эта строка будет использована командой
- <command>pkg info</command> (см. &man.pkg-info.8;) для
- отображения однострочного описания порта;</para>
- </listitem>
+ <para><filename>something.tar.gz</filename> будет
+ сгружаться со всех сайтов из
+ <varname>MASTER_SITE_SOURCEFORGE</varname>.</para>
+ </listitem>
- <listitem>
- <para><emphasis>Не</emphasis> включайте сюда название пакета
- (или номер версии программного обеспечения);</para>
- </listitem>
+ <listitem>
+ <para>Как мне использовать это с переменными
+ <varname>PATCH*</varname>?</para>
- <listitem>
- <para>Комментарий должен начинаться с заглавной буквы и не
- заканчиваться точкой;</para>
- </listitem>
+ <para>Все примеры выполнялись с переменными
+ <varname>MASTER*</varname>, и они работают точно так же
+ и для <varname>PATCH*</varname>, как это можно видеть в
+ <xref
+ linkend="ports-master-sites-n-example-detailed-use-patch-sites"/>.</para>
- <listitem>
- <para>Не начинайте комментарий с неопределённого артикля (A
- или An);</para>
- </listitem>
+ <example
+ xml:id="ports-master-sites-n-example-detailed-use-patch-sites">
- <listitem>
- <para>Имена пишутся с заглавной буквы (например, Apache,
- JavaScript. Perl);</para>
- </listitem>
+ <title>Упрощённое использование
+ <literal>MASTER_SITES:n</literal> с
+ <varname>PATCH_SITES</varname>.</title>
- <listitem>
- <para>Для перечислений используйте английскую Оксфордскую
- запятую (англ. Oxford comma) (например, green,
- red<emphasis>,</emphasis> and blue);</para>
- </listitem>
+ <programlisting>PATCH_SITES= http://site1/ http://site2/:test
+PATCHFILES= patch1:test</programlisting>
+ </example>
+ </listitem>
+ </orderedlist>
+ </sect3>
- <listitem>
- <para>Используйте программу проверки орфографии.</para>
- </listitem>
- </orderedlist>
+ <sect3>
+ <title>Что изменится для портов? А что не изменится?</title>
- <para>Вот пример:</para>
+ <orderedlist numeration="lowerroman">
+ <listitem>
+ <para>Все имеющиеся порты остаются без изменений. Код
+ для механизма <literal>MASTER_SITES:n</literal>
+ активируется, если только есть элементы, которые
+ заканчиваются на <literal>:n</literal>, как и элементы
+ в соответствии с вышеописанным синтаксисом, особенно
+ как это показано в пункте <xref
+ linkend="porting-master-sites-n-group-semantics"/>.</para>
+ </listitem>
- <programlisting>Cat chasing a mouse all over the screen</programlisting>
+ <listitem
+ xml:id="porting-master-sites-n-what-changes-in-port-targets">
+ <para>Цели порт остаются теми же самыми:
+ <buildtarget>checksum</buildtarget>,
+ <buildtarget>makesum</buildtarget>,
+ <buildtarget>patch</buildtarget>,
+ <buildtarget>configure</buildtarget>,
+ <buildtarget>build</buildtarget> и так далее. С
+ обычными исключениями для
+ <buildtarget>do-fetch</buildtarget>,
+ <buildtarget>fetch-list</buildtarget>,
+ <buildtarget>master-sites</buildtarget> и
+ <buildtarget>patch-sites</buildtarget>.</para>
- <para>В файле <filename>Makefile</filename> переменная COMMENT должна
- следовать сразу за переменной MAINTAINER.</para>
- </sect1>
+ <itemizedlist>
+ <listitem>
+ <para><buildtarget>do-fetch</buildtarget>: использует
+ новую группировку с постфиксами в
+ <varname>DISTFILES</varname> и
+ <varname>PATCHFILES</varname> с соответствующими
+ элементами групп в <varname>MASTER_SITES</varname>
+ и <varname>PATCH_SITES</varname>, которые
+ используют группы из
+ <varname>MASTER_SITE_SUBDIR</varname> и
+ <varname>PATCH_SITE_SUBDIR</varname>. Посмотрите
+ <xref
+ linkend="ports-master-sites-n-example-detailed-use-complete-example-master-sites"/>.</para>
+ </listitem>
- <sect1 xml:id="makefile-portscout">
- <title><varname>PORTSCOUT</varname></title>
+ <listitem>
+ <para><buildtarget>fetch-list</buildtarget>: работает
+ так же, как старая цель
+ <buildtarget>fetch-list</buildtarget> с тем
+ исключением, что она группирует, как и
+ <buildtarget>do-fetch</buildtarget>.</para>
+ </listitem>
- <para><application>Portscout</application> являет собой
- автоматизированное средство проверки доступности дистрибутивных
- файлов для Коллекции Портов &os;, подробное описание которого
- предоставляет <xref linkend="distfile-survey"/>.</para>
+ <listitem>
+ <para><buildtarget>master-sites</buildtarget> и
+ <buildtarget>patch-sites</buildtarget>:
+ (несовместимы со старыми версиями) только
+ возвращают элементы группы
+ <literal>DEFAULT</literal>; на самом деле они
+ выполняют цели
+ <buildtarget>master-sites-default</buildtarget> и
+ <buildtarget>patch-sites-default</buildtarget>
+ соответственно.</para>
+
+ <para>Более того, использование целей
+ <buildtarget>master-sites-all</buildtarget> или
+ <buildtarget>patch-sites-all</buildtarget>
+ предпочтительно для непосредственной проверки
+ <buildtarget>MASTER_SITES</buildtarget> или
+ <buildtarget>PATCH_SITES</buildtarget>. Также
+ работа прямой проверки в последующих версиях не
+ гарантируется. Посмотрите <xref
+ linkend="porting-master-sites-n-new-port-targets-master-sites-all"/>
+ для получения более дополнительной информации об
+ этих новых целях.</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
- <para>Переменная <varname>PORTSCOUT</varname> задаёт специальные
- условия, ограничивающие работу <application>Portscout</application>
- - сканера дистрибутивных файлов.</para>
+ <listitem>
+ <para>Новые цели построения портов</para>
- <para>Ситуации, при которых следует указывать переменную
- <varname>PORTSCOUT</varname>:</para>
+ <orderedlist>
+ <listitem>
+ <para>Имеются цели
+ <buildtarget>master-sites-<replaceable>n</replaceable></buildtarget>
+ и
+ <buildtarget>patch-sites-<replaceable>n</replaceable></buildtarget>,
+ которые будут перечислять элементы соответствующей
+ группы <replaceable>n</replaceable> из
+ <varname>MASTER_SITES</varname> и
+ <varname>PATCH_SITES</varname> соответственно. К
+ примеру,
+ <buildtarget>master-sites-DEFAULT</buildtarget> и
+ <buildtarget>patch-sites-DEFAULT</buildtarget> обе
+ будут возвращать элементы группы
+ <literal>DEFAULT</literal>,
+ <buildtarget>master-sites-test</buildtarget> и
+ <buildtarget>patch-sites-test</buildtarget> группы
+ <literal>test</literal> и так далее.</para>
+ </listitem>
- <itemizedlist>
- <listitem>
- <para>Когда должны игнорироваться дистрибутивные файлы для
- конкретных версий или младших ревизий. Например, чтобы
- исключить из проверок новых версий дистрибутивных файлов
- версию <replaceable>8.2</replaceable> по причине того, что
- она является поломанной, добавьте следующее:</para>
+ <listitem
+ xml:id="porting-master-sites-n-new-port-targets-master-sites-all">
+ <para>Имеются новые цели
+ <buildtarget>master-sites-all</buildtarget> и
+ <buildtarget>patch-sites-all</buildtarget>, которые
+ выполняют работу старых
+ <buildtarget>master-sites</buildtarget> и
+ <buildtarget>patch-sites</buildtarget>. Они
+ возвращают элементы всех групп, как если бы они все
+ принадлежали одной и той же группе с тем, что она
+ перечисляет ровно столько
+ <varname>MASTER_SITE_BACKUP</varname> и
+ <varname>MASTER_SITE_OVERRIDE</varname>, как и
+ группы, определённые в <varname>DISTFILES</varname>
+ или <varname>PATCHFILES</varname>; соответственно
+ для <buildtarget>master-sites-all</buildtarget> и
+ <buildtarget>patch-sites-all</buildtarget>.</para>
+ </listitem>
+ </orderedlist>
+ </listitem>
+ </orderedlist>
+ </sect3>
+ </sect2>
+
+ <sect2>
+ <title><varname>DIST_SUBDIR</varname></title>
+
+ <para>Не позволяйте вашему порту засорять
+ <filename>/usr/ports/distfiles</filename>. Если вашему порту
+ требуется сгрузить много файлов, или он содержит имя файла,
+ могущее вызвать конфликты с другими портами (например,
+ <filename>Makefile</filename>), то укажите в переменной
+ <varname>DIST_SUBDIR</varname> имя порта (должны подойти
+ <literal>${PORTNAME}</literal> или
+ <literal>${PKGNAMEPREFIX}${PORTNAME}</literal>). Это изменит
+ значение переменной <varname>DISTDIR</varname> со значения по
+ умолчанию <filename>/usr/ports/distfiles</filename> к
+ значению
+ <filename>/usr/ports/distfiles/DIST_SUBDIR</filename>, и в
+ результате всё, что требуется для порта, будет помещено в
+ этот подкаталог.</para>
+
+ <para>Он заглянет также в подкаталог с тем же именем на
+ основном резервном сервере
+ <filename>ftp.FreeBSD.org</filename>. (Явное задание
+ переменной <varname>DISTDIR</varname> в вашем файле
+ <varname>Makefile</varname> этого не сделает, так что,
+ пожалуйста, воспользуйтесь
+ <varname>DIST_SUBDIR</varname>.)</para>
- <programlisting>PORTSCOUT= ignore:8.2</programlisting>
+ <note>
+ <para>Это не коснётся тех сайтов
+ <varname>MASTER_SITES</varname>, которые вы указали в вашем
+ файле <filename>Makefile</filename>.</para>
+ </note>
+ </sect2>
+
+ <sect2>
+ <title><varname>ALWAYS_KEEP_DISTFILES</varname></title>
+
+ <para>Если ваш порт использует двоичные дистрибутивные файлы и
+ обладает лицензией, требующей, чтобы исходный код
+ предоставлялся вместе с пакетами, распространяемыми в
+ двоичной форме, например GPL, то
+ <varname>ALWAYS_KEEP_DISTFILES</varname> даст кластеру
+ построения &os; указание сохранять копию файлов, указанных в
+ <varname>DISTFILES</varname>. Пользователям таких портов эти
+ файлы в основном не нужны, поэтому хорошей идеей является
+ добавление в <varname>DISTFILES</varname> исходных
+ дистрибутивных файлов, только когда определена переменная
+ <varname>PACKAGE_BUILDING</varname>.</para>
+
+ <example
+ xml:id="ports-master-sites-n-example-always-keep-distfiles">
+
+ <title>Использование
+ <varname>ALWAYS_KEEP_DISTFILES</varname>.</title>
+
+ <programlisting>.if defined(PACKAGE_BUILDING)
+DISTFILES+= <replaceable>foo.tar.gz</replaceable>
+ALWAYS_KEEP_DISTFILES= yes
+.endif</programlisting>
+ </example>
+
+ <para>При добавлении дополнительных файлов в
+ <varname>DISTFILES</varname> убедитесь, что вы их также
+ добавляете в <filename>distinfo</filename>. Кроме того,
+ дополнительные файлы обычно распаковываются также в
+ <varname>WRKDIR</varname>, что для некоторых портов может
+ вызывать нежелательные подобные эффекты и требовать особую
+ обработку.</para>
+ </sect2>
+ </sect1>
- </listitem>
- <listitem>
- <para>Когда должны проверяться конкретные версии или старшие
- и младшие ревизии дистрибутивных файлов. Например, если
- следует ограничиться проверкой версии
- <replaceable>0.6.4</replaceable>, потому что более новые
- версии имеют проблемы совместимости с &os;, добавьте:</para>
+ <sect1 xml:id="makefile-maintainer">
+ <title><varname>MAINTAINER</varname></title>
+
+ <para>Укажите здесь ваш адрес электронной почты. Пожалуйста.
+ <!-- smiley --><emphasis>:-)</emphasis></para>
+
+ <para>Заметьте, что в качестве значения для
+ <varname>MAINTAINER</varname> допустимо использование только
+ одного адреса без поля комментария. Должен использоваться
+ формат <literal>user@hostname.domain</literal>. Пожалуйста, не
+ включайте никакого описательного текста, например, вашего
+ настоящего имени в эту строку&mdash;это несколько сбивает с
+ толку <filename>bsd.port.mk</filename>.</para>
+
+ <para>Сопровождающий ответственен за поддержание порта в
+ актуальном состоянии и обеспечение правильной работы порта. За
+ подробным описанием обязанностей сопровождающего порт
+ обращайтесь к главе <link
+ xlink:href="&url.articles.contributing-ports.en;/maintain-port.html">The
+ challenge for port maintainers</link>.</para>
- <programlisting>PORTSCOUT= limit:^0\.6\.4</programlisting>
+ <para>Перед фиксацией в репозитории изменения в порте будут
+ отправлены сопровождающему для просмотра и одобрения. Если
+ сопровождающий порта не ответил на запрос пользователя об
+ обновлении в течение двух недель (исключая большие праздники),
+ то это можно считать тайм-аутом сопровождающего, и обновление
+ может быть выполнено без явного подтверждения от
+ сопровождающего. Если сопровождающий не отвечает в течение
+ трёх месяцев, то считается, что он отсутствует, и как
+ сопровождающий порта, о котором идёт речь, может быть заменён.
+ Исключениями из этого правила является всё, что сопровождает
+ &a.portmgr; или &a.security-officer;. Запрещено делать любые
+ несанкционированные изменения в портах, которые ведут эти
+ группы.</para>
+
+ <para>Мы оставляем за собой право изменять сообщение
+ сопровождающего для лучшего соответствия существующим политикам
+ и стилю Коллекции Портов без явного одобрения со стороны
+ отправителя. Также, крупные изменения в инфраструктуре могут
+ повлечь изменения в порте без согласия сопровождающего. Такой
+ вид изменений никогда не будет затрагивать функциональность
+ порта.</para>
+
+ <para>За &a.portmgr; оставляется право снять или назначить
+ кого-либо сопровождающим по любой причине, а за
+ &a.security-officer; оставляется право лишать или назначать
+ права на сопровождение порта по соображениям информационной
+ безопасности.</para>
+ </sect1>
- </listitem>
- <listitem>
- <para>Когда URL, в которых указаны доступные версии, отличаются
- от URL их загрузки. Например, чтобы привязать проверку новых
- версий дистрибутивных файлов к странице загрузки для порта
- <package role="port">databases/pgtune</package>,
- добавьте:</para>
+ <sect1 xml:id="makefile-comment">
+ <title><varname>COMMENT</varname></title>
+
+ <para>Содержит однострочное описание порта. Пожалуйста,
+ соблюдайте следующие правила:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Старайтесь делать строку COMMENT длиной не больше, чем
+ 70 символов, так как эта строка будет использована командой
+ <command>pkg info</command> (см. &man.pkg-info.8;) для
+ отображения однострочного описания порта;</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis>Не</emphasis> включайте сюда название пакета
+ (или номер версии программного обеспечения);</para>
+ </listitem>
+
+ <listitem>
+ <para>Комментарий должен начинаться с заглавной буквы и не
+ заканчиваться точкой;</para>
+ </listitem>
+
+ <listitem>
+ <para>Не начинайте комментарий с неопределённого артикля (A
+ или An);</para>
+ </listitem>
+
+ <listitem>
+ <para>Имена пишутся с заглавной буквы (например, Apache,
+ JavaScript, Perl);</para>
+ </listitem>
+
+ <listitem>
+ <para>Для перечислений используйте английскую Оксфордскую
+ запятую (англ. Oxford comma) (например, green,
+ red<emphasis>,</emphasis> and blue);</para>
+ </listitem>
+
+ <listitem>
+ <para>Используйте программу проверки орфографии.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>Вот пример:</para>
+
+ <programlisting>COMMENT= Cat chasing a mouse all over the screen</programlisting>
+
+ <para>В файле <filename>Makefile</filename> переменная COMMENT
+ должна следовать сразу за переменной MAINTAINER.</para>
+ </sect1>
- <programlisting>PORTSCOUT= site:http://pgfoundry.org/frs/?group_id=1000416</programlisting>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 xml:id="makefile-depend">
- <title>Зависимости</title>
-
- <para>Многие порты зависят от других портов. Это очень удобная
- замечательная особенность большинства Unix-подобных операционных
- систем, включая &os;. Множество портов могут использовать общую
- зависимость совместно, а не включать её в состав каждого порта или
- пакета, который в ней нуждается. Имеется семь переменных,
- которые вы можете использовать для обеспечения того, что всё
- требуемое находится на машине пользователя. Имеется также несколько
- предопределённых переменных, отражающих зависимости для общих
- случаев, плюс ещё несколько для управления поведением
- зависимостей.</para>
-
- <sect2>
- <title><varname>LIB_DEPENDS</varname></title>
-
- <para>Эта переменная указывает, от каких совместно используемых
- библиотек зависит порт. Это список пар
- <replaceable>lib</replaceable>:<replaceable>dir</replaceable>
- где <replaceable>lib</replaceable> - это имя библиотеки,
- <replaceable>dir</replaceable> - это каталог, в котором можно ее
- найти в случае, если ее нет на машине. Например,</para>
-
- <programlisting>LIB_DEPENDS= libjpeg.so:${PORTSDIR}/graphics/jpeg</programlisting>
-
- <para>проверит наличие библиотеки jpeg с любым номером версии и
- перейдет в подкаталог <filename>graphics/jpeg</filename> вашего
- дерева портов для ее построения и установки, если библиотека
- отсутствует.</para>
-
- <para>Зависимость проверяется дважды, один раз внутри цели
- <buildtarget>build</buildtarget>, а затем из цели
- <buildtarget>install</buildtarget>. Кроме того, имя зависимости
- помещается в пакет, так что <command>pkg install</command>
- (см. &man.pkg-install.8;) будет
- автоматически её устанавливать, если её нет на пользовательской
- системе.</para>
- </sect2>
-
- <sect2>
- <title><varname>RUN_DEPENDS</varname></title>
-
- <para>В этой переменной перечисляются выполнимые файлы или файлы, от
- которых зависит работа порта. Это список пар вида
- <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional>:target</optional>
- где <replaceable>path</replaceable> - это имя программы или файла,
- а <replaceable>dir</replaceable> - каталог, в котором можно найти
- порт в случае, если его нет в системе, и
- <replaceable>target</replaceable> - это цель, которую нужно вызвать
- в этом каталоге. Если <replaceable>path</replaceable> начинается
- со слэша (<literal>/</literal>), он воспринимается как файл и его
- существование проверяется командой <command>test -e</command>; в
- противном случае предполагается, что это выполнимый файл, и
- для определения того, имеется ли программа в пути поиска,
- используется команда <command>which -s</command>.</para>
-
- <para>Например,</para>
-
- <programlisting>RUN_DEPENDS= ${LOCALBASE}/news/bin/innd:${PORTSDIR}/news/inn \
- xmlcatmgr:${PORTSDIR}/textproc/xmlcatmgr</programlisting>
-
- <para>проверит существование файла или каталога
- <filename>/usr/local/news/bin/innd</filename>, и если ничего
- не будет найдено, то построит и установит порт из подкаталога
- <filename>news/inn</filename> дерева портов. Также будет
- выполнена проверка, присутствует ли в пути поиска исполняемый
- файл с именем <command>xmlcatmgr</command>, и перейдет в
- подкаталог <filename>textproc/xmlcatmgr</filename> вашего дерева
- портов для его построения и установки, если он не будет
- найден.</para>
+ <sect1 xml:id="makefile-portscout">
+ <title><varname>PORTSCOUT</varname></title>
+
+ <para><application>Portscout</application> являет собой
+ автоматизированное средство проверки доступности дистрибутивных
+ файлов для Коллекции Портов &os;, подробное описание которого
+ предоставляет <xref linkend="distfile-survey"/>.</para>
+
+ <para>Переменная <varname>PORTSCOUT</varname> задаёт специальные
+ условия, ограничивающие работу
+ <application>Portscout</application> - сканера дистрибутивных
+ файлов.</para>
+
+ <para>Ситуации, при которых следует указывать переменную
+ <varname>PORTSCOUT</varname>:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Когда должны игнорироваться дистрибутивные файлы для
+ конкретных версий или младших ревизий. Например, чтобы
+ исключить из проверок новых версий дистрибутивных файлов
+ версию <replaceable>8.2</replaceable> по причине того, что
+ она является поломанной, добавьте следующее:</para>
+
+ <programlisting>PORTSCOUT= ignore:8.2</programlisting>
+ </listitem>
+
+ <listitem>
+ <para>Когда должны проверяться конкретные версии или старшие
+ и младшие ревизии дистрибутивных файлов. Например, если
+ следует ограничиться проверкой версии
+ <replaceable>0.6.4</replaceable>, потому что более новые
+ версии имеют проблемы совместимости с &os;,
+ добавьте:</para>
+
+ <programlisting>PORTSCOUT= limit:^0\.6\.4</programlisting>
+ </listitem>
+
+ <listitem>
+ <para>Когда URL, в которых указаны доступные версии,
+ отличаются от URL их загрузки. Например, чтобы привязать
+ проверку новых версий дистрибутивных файлов к странице
+ загрузки для порта <package
+ role="port">databases/pgtune</package>, добавьте:</para>
+
+ <programlisting>PORTSCOUT= site:http://pgfoundry.org/frs/?group_id=1000416</programlisting>
+ </listitem>
+ </itemizedlist>
+ </sect1>
- <note>
- <para>В приведенном примере <command>innd</command> является
- выполнимым файлом; если выполнимый файл находится в месте,
- которое отсутствует в списке путей файлов, то вы должны указать
- полный путь к файлу.</para>
- </note>
+ <sect1 xml:id="makefile-depend">
+ <title>Зависимости</title>
+
+ <para>Многие порты зависят от других портов. Это очень удобная
+ замечательная особенность большинства Unix-подобных
+ операционных систем, включая &os;. Множество портов могут
+ использовать общую зависимость совместно, а не включать её в
+ состав каждого порта или пакета, который в ней нуждается.
+ Имеется семь переменных, которые вы можете использовать для
+ обеспечения того, что всё требуемое находится на машине
+ пользователя. Имеется также несколько предопределённых
+ переменных, отражающих зависимости для общих случаев, плюс ещё
+ несколько для управления поведением зависимостей.</para>
+
+ <sect2>
+ <title><varname>LIB_DEPENDS</varname></title>
+
+ <para>Эта переменная указывает, от каких совместно используемых
+ библиотек зависит порт. Это список пар
+ <replaceable>lib</replaceable>:<replaceable>dir</replaceable>,
+ где <replaceable>lib</replaceable> - это имя библиотеки,
+ <replaceable>dir</replaceable> - это каталог, в котором можно
+ ее найти в случае, если ее нет на машине. Например,</para>
+
+ <programlisting>LIB_DEPENDS= libjpeg.so:${PORTSDIR}/graphics/jpeg</programlisting>
+
+ <para>проверит наличие библиотеки jpeg с любым номером версии и
+ перейдет в подкаталог <filename>graphics/jpeg</filename>
+ вашего дерева портов для ее построения и установки, если
+ библиотека отсутствует.</para>
+
+ <para>Зависимость проверяется дважды, один раз внутри цели
+ <buildtarget>build</buildtarget>, а затем из цели
+ <buildtarget>install</buildtarget>. Кроме того, имя
+ зависимости помещается в пакет, так что
+ <command>pkg install</command> (см. &man.pkg-install.8;)
+ будет автоматически её устанавливать, если её нет на
+ пользовательской системе.</para>
+ </sect2>
+
+ <sect2>
+ <title><varname>RUN_DEPENDS</varname></title>
+
+ <para>В этой переменной перечисляются выполнимые файлы или
+ файлы, от которых зависит работа порта. Это список пар вида
+ <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional>:target</optional>,
+ где <replaceable>path</replaceable> - это имя программы или
+ файла, а <replaceable>dir</replaceable> - каталог, в котором
+ можно найти порт в случае, если его нет в системе, и
+ <replaceable>target</replaceable> - это цель, которую нужно
+ вызвать в этом каталоге. Если
+ <replaceable>path</replaceable> начинается со слэша
+ (<literal>/</literal>), он воспринимается как файл и его
+ существование проверяется командой
+ <command>test -e</command>; в противном случае
+ предполагается, что это выполнимый файл, и для определения
+ того, имеется ли программа в пути поиска, используется
+ команда <command>which -s</command>.</para>
+
+ <para>Например,</para>
+
+ <programlisting>RUN_DEPENDS= ${LOCALBASE}/news/bin/innd:${PORTSDIR}/news/inn \
+ xmlcatmgr:${PORTSDIR}/textproc/xmlcatmgr</programlisting>
+
+ <para>проверит существование файла или каталога
+ <filename>/usr/local/news/bin/innd</filename>, и если ничего
+ не будет найдено, то построит и установит порт из подкаталога
+ <filename>news/inn</filename> дерева портов. Также будет
+ выполнена проверка, присутствует ли в пути поиска исполняемый
+ файл с именем <command>xmlcatmgr</command>, и перейдет в
+ подкаталог <filename>textproc/xmlcatmgr</filename> вашего
+ дерева портов для его построения и установки, если он не
+ будет найден.</para>
- <note>
- <para>Официальным значением переменной поиска <envar>PATH</envar>,
- используемым в кластере построения портов является</para>
+ <note>
+ <para>В приведенном примере <command>innd</command> является
+ выполнимым файлом; если выполнимый файл находится в месте,
+ которое отсутствует в списке путей файлов, то вы должны
+ указать полный путь к файлу.</para>
+ </note>
- <programlisting>/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin</programlisting>
- </note>
+ <note>
+ <para>Официальным значением переменной поиска
+ <envar>PATH</envar>, используемым в кластере построения
+ портов является</para>
- <para>Зависимость проверяется внутри цели
- <buildtarget>install</buildtarget>. Кроме того, имя зависимости
- помещается в пакет, так что <command>pkg install</command>
- (см. &man.pkg-install.8;)
- будет автоматически его устанавливать, если он не будет найден
- в пользовательской системе. Часть
- <replaceable>target</replaceable> может быть опущена, если она
- совпадает с <varname>DEPENDS_TARGET</varname>.</para>
-
- <para>Довольно распространенной является ситуация, когда
- <varname>RUN_DEPENDS</varname> буквально такая же как
- <varname>BUILD_DEPENDS</varname>, особенно если переносимое
- программное обеспечение написано на языке сценариев, или если
- оно требует такое же окружение для исполнения, как и используемое
- во время построения. В этом случае, очень заманчивым или довольно
- естественным является присвоение одного другому:</para>
-
- <programlisting>RUN_DEPENDS= ${BUILD_DEPENDS}</programlisting>
-
- <para>Тем не менее, подобные присвоения могут загрязнять зависимости
- времени исполнения содержимым, не заданным в
- <varname>BUILD_DEPENDS</varname> исходного порта.
- Такое случается из-за ленивого вычисления в &man.make.1;
- присваиваемых переменных. Представьте <filename>Makefile</filename>
- с переменными <varname>USE_<replaceable>*</replaceable></varname>,
- которые обрабатываются в <filename>ports/Mk/bsd.*.mk</filename>
- для пополнения первоначальных зависимостей построения. Например,
- <literal>USES= gmake</literal> добавляет
- <package role="port">devel/gmake</package> в
- <varname>BUILD_DEPENDS</varname>. Для предотвращения загрязнения
- <varname>RUN_DEPENDS</varname> подобными дополнительными
- зависимостями проявляйте осторожность с присвоением с раскрытием,
- т.е. с раскрытием значения перед его присвоением переменной:</para>
-
- <programlisting>RUN_DEPENDS:= ${BUILD_DEPENDS}</programlisting>
- </sect2>
-
- <sect2>
- <title><varname>BUILD_DEPENDS</varname></title>
-
- <para>В этой переменной перечисляются выполнимые или обычные файлы,
- которые требуются порту для его построения. Как и
- <varname>RUN_DEPENDS</varname>, это список пар
- <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional>:target</optional>
- Например,</para>
-
- <programlisting>BUILD_DEPENDS= unzip:${PORTSDIR}/archivers/unzip</programlisting>
-
- <para>будет проверять
- наличие выполнимого фала с именем <command>unzip</command> и
- перейдет в подкаталог <filename>archivers/unzip</filename> вашего
- дерева портов для его построения и установки, если последний не
- будет найден.</para>
+ <programlisting>/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin</programlisting>
+ </note>
- <note>
- <para>Под <quote>построением</quote> здесь понимается всё, от
- распаковки до компиляции. Зависимость проверяется из цели
- <buildtarget>extract</buildtarget>. Часть
- <replaceable>target</replaceable> может быть опущена, если она
- совпадает с <varname>DEPENDS_TARGET</varname>.</para>
- </note>
- </sect2>
-
- <sect2>
- <title><varname>FETCH_DEPENDS</varname></title>
-
- <para>В этой переменной перечисляются выполняемые файлы или просто
- файлы, которые требуются порту для сгрузки. Как и предыдущие две
- переменные, это список пар
- <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional>:target</optional>
- Например,</para>
-
- <programlisting>FETCH_DEPENDS= ncftp2:${PORTSDIR}/net/ncftp2</programlisting>
-
- <para>будет проверять
- наличие выполняемого файла с именем <command>ncftp2</command> и
- перейдет в каталог <filename>net/ncftp2</filename> вашего дерева
- портов для его построения и установки, если тот не будет
- найден.</para>
-
- <para>Зависимость проверяется при выполнении цели
- <buildtarget>fetch</buildtarget>. Часть
- <replaceable>target</replaceable> может быть опущена, если она
- совпадает с <varname>DEPENDS_TARGET</varname>.</para>
- </sect2>
-
- <sect2>
- <title><varname>EXTRACT_DEPENDS</varname></title>
-
- <para>В этой переменной указываются программы или файлы, которые
- требуются для распаковки порта. Как и в предыдущих случаях, это
- список пар вида
- <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional>:target</optional>.
- Например,</para>
-
- <programlisting>EXTRACT_DEPENDS= unzip:${PORTSDIR}/archivers/unzip</programlisting>
-
- <para>будет проверять
- наличие программы с именем <command>unzip</command>, и перейдёт в
- подкаталог <filename>archivers/unzip</filename> вашего дерева
- портов для её построения и установки, если такой программы не будет
- найдено.</para>
-
- <para>Зависимость проверяется внутри цели
- <buildtarget>extract</buildtarget>. Часть
- <replaceable>target</replaceable> может быть опущена, если она
- совпадает с <varname>DEPENDS_TARGET</varname>.</para>
-
- <note>
- <para>Используйте эту переменную, только если распаковка не
- работает (по умолчанию предполагается использование
- <command>gzip</command>) и это не исправляется при помощи
- <varname>USE_ZIP</varname> или <varname>USE_BZIP2</varname>,
- которые описаны в <xref linkend="use-vars"/>.</para>
- </note>
- </sect2>
-
- <sect2>
- <title><varname>PATCH_DEPENDS</varname></title>
-
- <para>Эта переменная указывает на программы или файлы, которые нужны
- порту для применения патчей. Как и в предыдущих случаях, это
- список пар вида
- <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional>:target</optional>.
- Например,</para>
-
- <programlisting>PATCH_DEPENDS= ${NONEXISTENT}:${PORTSDIR}/java/jfc:extract</programlisting>
-
- <para>будет
- переходить в подкаталог <filename>java/jfc</filename> вашего дерева
- портов для распаковки.</para>
-
- <para>Зависимость проверяется внутри цели
- <buildtarget>patch</buildtarget>. Часть
- <replaceable>target</replaceable> может быть опущена, если она
- совпадает с <varname>DEPENDS_TARGET</varname>.</para>
- </sect2>
-
- <sect2 xml:id="uses">
- <title><varname>USES</varname></title>
-
- <para>Могут быть добавлены параметры для определения различных
- характерных особенностей и зависимостей, которыми
- обладает данный порт. Они указываются путём добавления
- в <filename>Makefile</filename> этой строки:</para>
-
- <programlisting>USES= feature[:arguments]</programlisting>
-
- <para>Для получения полного списка значений смотрите
- <xref linkend="uses-values"/>.</para>
-
- <warning>
- <para>Значение <varname>USES</varname> нельзя присваивать
- после подключения <filename>bsd.port.pre.mk</filename>.</para>
- </warning>
- </sect2>
-
- <sect2 xml:id="use-vars">
- <title><varname>USE_<replaceable>*</replaceable></varname></title>
-
- <para>Для определения общих зависимостей, совместно используемых
- многими портами, предназначено несколько переменных. Их
- использование является необязательным, но помогает упростить
- избыточность файлов <filename>Makefile</filename> порта.
- Каждый из них оформляется как
- <varname>USE_<replaceable>*</replaceable></varname>. Эти
- переменные можно использовать только в <filename>Makefile</filename>
- порта и <filename>ports/Mk/bsd.*.mk</filename>. Они не
- предназначены для установки пользователями параметров &mdash;
- используйте для этих целей <varname>PORT_OPTIONS</varname>.</para>
+ <para>Зависимость проверяется внутри цели
+ <buildtarget>install</buildtarget>. Кроме того, имя
+ зависимости помещается в пакет, так что
+ <command>pkg install</command> (см. &man.pkg-install.8;)
+ будет автоматически его устанавливать, если он не будет
+ найден в пользовательской системе. Часть
+ <replaceable>target</replaceable> может быть опущена, если
+ она совпадает с <varname>DEPENDS_TARGET</varname>.</para>
+
+ <para>Довольно распространенной является ситуация, когда
+ <varname>RUN_DEPENDS</varname> буквально такая же как
+ <varname>BUILD_DEPENDS</varname>, особенно если переносимое
+ программное обеспечение написано на языке сценариев, или если
+ оно требует такое же окружение для исполнения, как и
+ используемое во время построения. В этом случае, очень
+ заманчивым или довольно естественным является присвоение
+ одного другому:</para>
+
+ <programlisting>RUN_DEPENDS= ${BUILD_DEPENDS}</programlisting>
+
+ <para>Тем не менее, подобные присвоения могут загрязнять
+ зависимости времени исполнения содержимым, не заданным в
+ <varname>BUILD_DEPENDS</varname> исходного порта. Такое
+ случается из-за ленивого вычисления в &man.make.1;
+ присваиваемых переменных. Представьте
+ <filename>Makefile</filename> с переменными
+ <varname>USE_<replaceable>*</replaceable></varname>, которые
+ обрабатываются в <filename>ports/Mk/bsd.*.mk</filename> для
+ пополнения первоначальных зависимостей построения. Например,
+ <literal>USES= gmake</literal> добавляет <package
+ role="port">devel/gmake</package> в
+ <varname>BUILD_DEPENDS</varname>. Для предотвращения
+ загрязнения <varname>RUN_DEPENDS</varname> подобными
+ дополнительными зависимостями проявляйте осторожность с
+ присвоением с раскрытием, т.е. с раскрытием значения перед
+ его присвоением переменной:</para>
+
+ <programlisting>RUN_DEPENDS:= ${BUILD_DEPENDS}</programlisting>
+ </sect2>
+
+ <sect2>
+ <title><varname>BUILD_DEPENDS</varname></title>
+
+ <para>В этой переменной перечисляются выполнимые или обычные
+ файлы, которые требуются порту для его построения. Как и
+ <varname>RUN_DEPENDS</varname>, это список пар
+ <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional>:target</optional>.
+ Например,</para>
+
+ <programlisting>BUILD_DEPENDS= unzip:${PORTSDIR}/archivers/unzip</programlisting>
+
+ <para>будет проверять наличие выполнимого фала с именем
+ <command>unzip</command> и перейдет в подкаталог
+ <filename>archivers/unzip</filename> вашего дерева портов для
+ его построения и установки, если последний не будет
+ найден.</para>
- <note>
- <para>Установка любых <varname>USE_<replaceable>*</replaceable></varname>
- в <filename>/etc/make.conf</filename> <emphasis>всегда</emphasis>
- является ошибочным действием. В частности, установка</para>
+ <note>
+ <para>Под <quote>построением</quote> здесь понимается всё, от
+ распаковки до компиляции. Зависимость проверяется из цели
+ <buildtarget>extract</buildtarget>. Часть
+ <replaceable>target</replaceable> может быть опущена, если
+ она совпадает с <varname>DEPENDS_TARGET</varname>.</para>
+ </note>
+ </sect2>
- <programlisting>USE_GCC=X.Y</programlisting>
+ <sect2>
+ <title><varname>FETCH_DEPENDS</varname></title>
- <para>(где X.Y соответствует версии) добавит зависимость
- от gccXY к каждому порту, включая и сам
- <literal>lang/gccXY</literal>!</para>
- </note>
+ <para>В этой переменной перечисляются выполняемые файлы или
+ просто файлы, которые требуются порту для сгрузки. Как и
+ предыдущие две переменные, это список пар
+ <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional>:target</optional>.
+ Например,</para>
- <table frame="none">
- <title>Переменные
- <varname>USE_<replaceable>*</replaceable></varname></title>
+ <programlisting>FETCH_DEPENDS= ncftp2:${PORTSDIR}/net/ncftp2</programlisting>
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Переменная</entry>
+ <para>будет проверять наличие выполняемого файла с именем
+ <command>ncftp2</command> и перейдет в каталог
+ <filename>net/ncftp2</filename> вашего дерева портов для его
+ построения и установки, если тот не будет найден.</para>
- <entry>Значение</entry>
- </row>
- </thead>
+ <para>Зависимость проверяется при выполнении цели
+ <buildtarget>fetch</buildtarget>. Часть
+ <replaceable>target</replaceable> может быть опущена, если
+ она совпадает с <varname>DEPENDS_TARGET</varname>.</para>
+ </sect2>
- <tbody>
- <row>
- <entry><varname>USE_BZIP2</varname></entry>
+ <sect2>
+ <title><varname>EXTRACT_DEPENDS</varname></title>
- <entry>tar-архивы порта упакованы при помощи
- <command>bzip2</command>.</entry>
- </row>
+ <para>В этой переменной указываются программы или файлы,
+ которые требуются для распаковки порта. Как и в предыдущих
+ случаях, это список пар вида
+ <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional>:target</optional>.
+ Например,</para>
- <row>
- <entry><varname>USE_ZIP</varname></entry>
+ <programlisting>EXTRACT_DEPENDS= unzip:${PORTSDIR}/archivers/unzip</programlisting>
- <entry>tar-архивы порта упакованы при помощи
- <command>zip</command>.</entry>
- </row>
+ <para>будет проверять наличие программы с именем
+ <command>unzip</command>, и перейдёт в подкаталог
+ <filename>archivers/unzip</filename> вашего дерева портов для
+ её построения и установки, если такой программы не будет
+ найдено.</para>
- <row>
- <entry><varname>USE_GCC</varname></entry>
-
- <entry>Для сборки порта требуется GCC
- (<command>gcc</command> или <command>g++</command>).
- Некоторым портам подходит любая версия, для других
- требуются последние современные версии. Обычно
- используется со значением <literal>any</literal> (в
- этом случае используется встроенный GCC в тех
- версиях &os;, в состав которых он всё ещё входит,
- или устанавливается порт
- <literal>lang/gcc</literal>, когда Clang является
- компилятором C/C++ по умолчанию) или
- <literal>yes</literal> (всегда используется
- стабильная современная версия GCC из порта
- <literal>lang/gcc</literal>). Также в значении
- переменной можно указать точную версию, например
- <literal>4.7</literal>. Минимально допустимую
- версию можно указать как <literal>4.6+</literal>.
- GCC из основной системы используется в случае, если
- его версия удовлетворяет запрошенной, иначе
- собирается подходящая версии компилятора из порта с
- соответствующей коррекцией переменных
- <varname>CC</varname> и <varname>CXX</varname>.
- </entry>
- </row>
+ <para>Зависимость проверяется внутри цели
+ <buildtarget>extract</buildtarget>. Часть
+ <replaceable>target</replaceable> может быть опущена, если
+ она совпадает с <varname>DEPENDS_TARGET</varname>.</para>
- </tbody>
- </tgroup>
- </table>
+ <note>
+ <para>Используйте эту переменную, только если распаковка не
+ работает (по умолчанию предполагается использование
+ <command>gzip</command>) и это не исправляется при помощи
+ <varname>USE_ZIP</varname> или
+ <varname>USE_BZIP2</varname>, которые описаны в <xref
+ linkend="use-vars"/>.</para>
+ </note>
+ </sect2>
+
+ <sect2>
+ <title><varname>PATCH_DEPENDS</varname></title>
+
+ <para>Эта переменная указывает на программы или файлы, которые
+ нужны порту для применения патчей. Как и в предыдущих
+ случаях, это список пар вида
+ <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional>:target</optional>.
+ Например,</para>
+
+ <programlisting>PATCH_DEPENDS= ${NONEXISTENT}:${PORTSDIR}/java/jfc:extract</programlisting>
+
+ <para>будет переходить в подкаталог
+ <filename>java/jfc</filename> вашего дерева портов для
+ распаковки.</para>
+
+ <para>Зависимость проверяется внутри цели
+ <buildtarget>patch</buildtarget>. Часть
+ <replaceable>target</replaceable> может быть опущена, если
+ она совпадает с <varname>DEPENDS_TARGET</varname>.</para>
+ </sect2>
+
+ <sect2 xml:id="uses">
+ <title><varname>USES</varname></title>
+
+ <para>Могут быть добавлены параметры для определения различных
+ характерных особенностей и зависимостей, которыми обладает
+ данный порт. Они указываются путём добавления в
+ <filename>Makefile</filename> этой строки:</para>
+
+ <programlisting>USES= feature[:arguments]</programlisting>
+
+ <para>Для получения полного списка значений смотрите
+ <xref linkend="uses-values"/>.</para>
+
+ <warning>
+ <para>Значение <varname>USES</varname> нельзя присваивать
+ после подключения
+ <filename>bsd.port.pre.mk</filename>.</para>
+ </warning>
+ </sect2>
+
+ <sect2 xml:id="use-vars">
+ <title><varname>USE_<replaceable>*</replaceable></varname></title>
+
+ <para>Для определения общих зависимостей, совместно
+ используемых многими портами, предназначено несколько
+ переменных. Их использование является необязательным, но
+ помогает упростить избыточность файлов
+ <filename>Makefile</filename> порта. Каждый из них
+ оформляется как
+ <varname>USE_<replaceable>*</replaceable></varname>. Эти
+ переменные можно использовать только в
+ <filename>Makefile</filename> порта и
+ <filename>ports/Mk/bsd.*.mk</filename>. Они не предназначены
+ для установки пользователями параметров &mdash; используйте
+ для этих целей <varname>PORT_OPTIONS</varname>.</para>
+
+ <note>
+ <para>Установка любых
+ <varname>USE_<replaceable>*</replaceable></varname> в
+ <filename>/etc/make.conf</filename>
+ <emphasis>всегда</emphasis> является ошибочным действием.
+ В частности, установка</para>
+
+ <programlisting>USE_GCC=X.Y</programlisting>
+
+ <para>(где X.Y соответствует версии) добавит зависимость от
+ gccXY к каждому порту, включая и сам
+ <literal>lang/gccXY</literal>!</para>
+ </note>
- <para>Переменные, относящиеся к <application>gmake</application>
- и сценарию <filename>configure</filename>, описаны в
- <xref linkend="building"/>, а <application>autoconf</application>,
- <application>automake</application> и
- <application>libtool</application> описаны в
- <xref linkend="using-autotools"/>. Переменные, связанные с
- <application>Perl</application>, описаны в <xref linkend="using-perl"/>. Переменные X11 перечислены в <xref linkend="using-x11"/>. <xref linkend="using-gnome"/>
- работает с переменными GNOME и <xref linkend="using-kde"/> с KDE.
- <xref linkend="using-java"/> описывает переменные Java, а <xref linkend="using-php"/> содержит информацию об
- <application>Apache</application>, <application>PHP</application>
- и модулях PEAR. <application>Python</application> обсуждается в
- <xref linkend="using-python"/>, а <application>Ruby</application>
- в <xref linkend="using-ruby"/>. <xref linkend="using-sdl"/>
- предоставляет переменные, используемые для приложений
- <application>SDL</application>, и, наконец,
- <xref linkend="using-xfce"/> содержит информацию о приложении
- <application>Xfce</application>.</para>
- </sect2>
-
- <sect2>
- <title>Минимальная версия зависимости</title>
-
- <para>Минимальная версия зависимости может быть указана в любой
- переменной <varname>*_DEPENDS</varname>, за исключением
- <varname>LIB_DEPENDS</varname>, с использованием следующего
- синтаксиса:</para>
-
- <programlisting>p5-Spiffy&gt;=0.26:${PORTSDIR}/devel/p5-Spiffy</programlisting>
-
- <para>Первое поле содержит название зависимого пакета, которое
- обязано совпадать с записью в базе данные пакетов, знак сравнения
- и версию версию пакета. Зависимость удовлетворяется если на машине
- установлен p5-Spiffy-0.26 или новее.</para>
- </sect2>
-
- <sect2>
- <title>Замечания касательно зависимостей</title>
-
- <para>Как уже отмечено выше, целью, которая вызывается по умолчанию
- в случае, когда это требует зависимость, является
- <buildtarget>DEPENDS_TARGET</buildtarget>. Она по умолчанию есть
- <literal>install</literal>. Это пользовательская переменная; она
- нигде не определена в файле <filename>Makefile</filename> порта.
- Если вашему порту требуется особый метод обработки зависимости,
- воспользуйтесь частью <literal>:target</literal> переменной
- <varname>*_DEPENDS</varname> вместо того, чтобы переопределять
- <varname>DEPENDS_TARGET</varname>.</para>
-
- <para>Когда вы набираете команду <command>make clean</command>,
- эта операция также выполняется и над зависимостями этого порта.
- Если вы не хотите, чтобы это случилось, определите переменную
- <varname>NOCLEANDEPENDS</varname> в вашем окружении.
- Это может быть особенно нужным, если порт имеет нечто, что занимает
- много времени на построение, в своём списке зависимостей, например,
- KDE, GNOME или Mozilla.</para>
-
- <para>Чтобы безусловно зависеть от другого порта, укажите переменную
- <varname>${NONEXISTENT}</varname> в качестве первого поля
- переменной <varname>BUILD_DEPENDS</varname> или
- <varname>RUN_DEPENDS</varname>. Пользуйтесь этим, только когда вам
- нужно иметь исходный код другого порта. Вы можете сэкономить время
- на компиляции, указав также и цель. Например,</para>
-
- <programlisting>BUILD_DEPENDS= ${NONEXISTENT}:${PORTSDIR}/graphics/jpeg:extract</programlisting>
-
- <para>всегда будет переходить в каталог с портом
- <literal>jpeg</literal> и распаковывать его.</para>
- </sect2>
-
- <sect2>
- <title>Зацикленные зависимости фатальны</title>
-
- <important>
- <para>Не помещайте зацикливающиеся зависимости в дерево
- портов!</para>
- </important>
-
- <para>Технология построения портов не защищена от зацикленных
- зависимостей. Если вы создадите такую, то у кого-нибудь и
- где-нибудь установка &os; будет немедленно сломана, а у остальных
- сломается несколько позже. Это на самом деле очень трудно
- распознать; если вы сомневаетесь, то перед внесением изменений
- проверьте, что выполнили следующее: <command>cd /usr/ports; make
- index</command>. Этот процесс может быть достаточно медленным на
- старых машинах, хотя мы сможете спасти большое количество
- людей&mdash;включая себя&mdash;от грядущих бед.</para>
- </sect2>
-
- <sect2>
- <title>Автоматические зависимости и проблемы, которые они
- вызывают</title>
-
- <para>Зависимости должны быть указаны либо явно, либо с
- использованием <link linkend="makefile-options">фреймворка
+ <table frame="none">
+ <title>Переменные
+ <varname>USE_<replaceable>*</replaceable></varname></title>
+
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>Переменная</entry>
+ <entry>Значение</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><varname>USE_BZIP2</varname></entry>
+ <entry>tar-архивы порта упакованы при помощи
+ <command>bzip2</command>.</entry>
+ </row>
+
+ <row>
+ <entry><varname>USE_ZIP</varname></entry>
+ <entry>tar-архивы порта упакованы при помощи
+ <command>zip</command>.</entry>
+ </row>
+
+ <row>
+ <entry><varname>USE_GCC</varname></entry>
+ <entry>Для сборки порта требуется GCC
+ (<command>gcc</command> или <command>g++</command>).
+ Некоторым портам подходит любая версия, для других
+ требуются последние современные версии. Обычно
+ используется со значением <literal>any</literal> (в
+ этом случае используется встроенный GCC в тех версиях
+ &os;, в состав которых он всё ещё входит, или
+ устанавливается порт <literal>lang/gcc</literal>,
+ когда Clang является компилятором C/C++ по умолчанию)
+ или <literal>yes</literal> (всегда используется
+ стабильная современная версия GCC из порта
+ <literal>lang/gcc</literal>). Также в значении
+ переменной можно указать точную версию, например
+ <literal>4.7</literal>. Минимально допустимую версию
+ можно указать как <literal>4.6+</literal>.
+ GCC из основной системы используется в случае, если
+ его версия удовлетворяет запрошенной, иначе
+ собирается подходящая версии компилятора из порта с
+ соответствующей коррекцией переменных
+ <varname>CC</varname> и
+ <varname>CXX</varname>.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <para>Переменные, относящиеся к
+ <application>gmake</application> и сценарию
+ <filename>configure</filename>, описаны в <xref
+ linkend="building"/>, а
+ <application>autoconf</application>,
+ <application>automake</application> и
+ <application>libtool</application> описаны в <xref
+ linkend="using-autotools"/>. Переменные, связанные с
+ <application>Perl</application>, описаны в <xref
+ linkend="using-perl"/>. Переменные X11 перечислены в <xref
+ linkend="using-x11"/>. <xref linkend="using-gnome"/>
+ работает с переменными GNOME и <xref linkend="using-kde"/> с
+ KDE. <xref linkend="using-java"/> описывает переменные Java,
+ а <xref linkend="using-php"/> содержит информацию об
+ <application>Apache</application>,
+ <application>PHP</application> и модулях PEAR.
+ <application>Python</application> обсуждается в <xref
+ linkend="using-python"/>, а <application>Ruby</application>
+ в <xref linkend="using-ruby"/>. <xref linkend="using-sdl"/>
+ предоставляет переменные, используемые для приложений
+ <application>SDL</application>, и, наконец, <xref
+ linkend="using-xfce"/> содержит информацию о приложении
+ <application>Xfce</application>.</para>
+ </sect2>
+
+ <sect2>
+ <title>Минимальная версия зависимости</title>
+
+ <para>Минимальная версия зависимости может быть указана в любой
+ переменной <varname>*_DEPENDS</varname>, за исключением
+ <varname>LIB_DEPENDS</varname>, с использованием следующего
+ синтаксиса:</para>
+
+ <programlisting>p5-Spiffy&gt;=0.26:${PORTSDIR}/devel/p5-Spiffy</programlisting>
+
+ <para>Первое поле содержит название зависимого пакета, которое
+ обязано совпадать с записью в базе данные пакетов, знак
+ сравнения и версию пакета. Зависимость удовлетворяется, если
+ на машине установлен p5-Spiffy-0.26 или новее.</para>
+ </sect2>
+
+ <sect2>
+ <title>Замечания касательно зависимостей</title>
+
+ <para>Как уже отмечено выше, целью, которая вызывается по
+ умолчанию в случае, когда это требует зависимость, является
+ <buildtarget>DEPENDS_TARGET</buildtarget>. Она по умолчанию
+ есть <literal>install</literal>. Это пользовательская
+ переменная; она нигде не определена в файле
+ <filename>Makefile</filename> порта. Если вашему порту
+ требуется особый метод обработки зависимости, воспользуйтесь
+ частью <literal>:target</literal> переменной
+ <varname>*_DEPENDS</varname> вместо того, чтобы
+ переопределять <varname>DEPENDS_TARGET</varname>.</para>
+
+ <para>Когда вы набираете команду <command>make clean</command>,
+ эта операция также выполняется и над зависимостями этого
+ порта. Если вы не хотите, чтобы это случилось, определите
+ переменную <varname>NOCLEANDEPENDS</varname> в вашем
+ окружении. Это может быть особенно нужным, если порт имеет
+ нечто, что занимает много времени на построение, в своём
+ списке зависимостей, например, KDE, GNOME или Mozilla.</para>
+
+ <para>Чтобы безусловно зависеть от другого порта, укажите
+ переменную <varname>${NONEXISTENT}</varname> в качестве
+ первого поля переменной <varname>BUILD_DEPENDS</varname> или
+ <varname>RUN_DEPENDS</varname>. Пользуйтесь этим, только
+ когда вам нужно иметь исходный код другого порта. Вы можете
+ сэкономить время на компиляции, указав также и цель.
+ Например,</para>
+
+ <programlisting>BUILD_DEPENDS= ${NONEXISTENT}:${PORTSDIR}/graphics/jpeg:extract</programlisting>
+
+ <para>всегда будет переходить в каталог с портом
+ <literal>jpeg</literal> и распаковывать его.</para>
+ </sect2>
+
+ <sect2>
+ <title>Зацикленные зависимости фатальны</title>
+
+ <important>
+ <para>Не помещайте зацикливающиеся зависимости в дерево
+ портов!</para>
+ </important>
+
+ <para>Технология построения портов не защищена от зацикленных
+ зависимостей. Если вы создадите такую, то у кого-нибудь и
+ где-нибудь установка &os; будет немедленно сломана, а у
+ остальных сломается несколько позже. Это на самом деле очень
+ трудно распознать; если вы сомневаетесь, то перед внесением
+ изменений проверьте, что выполнили следующее:
+ <command>cd /usr/ports; make index</command>. Этот процесс
+ может быть достаточно медленным на старых машинах, хотя вы
+ сможете спасти большое количество людей&mdash;включая
+ себя&mdash;от грядущих бед.</para>
+ </sect2>
+
+ <sect2>
+ <title>Автоматические зависимости и проблемы, которые они
+ вызывают</title>
+
+ <para>Зависимости должны быть указаны либо явно, либо с
+ использованием <link linkend="makefile-options">фреймворка
OPTIONS</link>. Использование прочих методов, таких как
- автоматическое обнаружение зависимостей, усложняет индексирование,
- что вызывает проблемы в управлении портами и пакетами.</para>
+ автоматическое обнаружение зависимостей, усложняет
+ индексирование, что вызывает проблемы в управлении портами и
+ пакетами.</para>
- <example>
- <title>Некорректное объявление необязательной зависимости</title>
+ <example>
+ <title>Некорректное объявление необязательной
+ зависимости</title>
- <programlisting>.include &lt;bsd.port.pre.mk&gt;
+ <programlisting>.include &lt;bsd.port.pre.mk&gt;
.if exists(${LOCALBASE}/bin/foo)
LIB_DEPENDS= libbar.so:${PORTSDIR}/foo/bar
.endif</programlisting>
- </example>
-
- <para>Проблема автоматического добавления зависимостей
- заключается в том, что файлы и настройки за пределами порта
- могут произвольно меняться. Пример: после построения
- индекса устанавливается набор портов. При этом один из
- них устанавливает проверяемый файл. На этом этапе индекс
- будет неправильным, потому что установленный порт неожиданно
- получит новую зависимость. Индекс может быть по прежнему
- неправильным даже после его перестроения, в случае если
- другие порты также определят дополнительные зависимости,
- основываясь на существовании других файлов.</para>
-
- <example>
- <title>Корректное объявление необязательной зависимости</title>
-
- <programlisting>OPTIONS_DEFINE= BAR
+ </example>
+
+ <para>Проблема автоматического добавления зависимостей
+ заключается в том, что файлы и настройки за пределами порта
+ могут произвольно меняться. Пример: после построения индекса
+ устанавливается набор портов. При этом один из них
+ устанавливает проверяемый файл. На этом этапе индекс будет
+ неправильным, потому что установленный порт неожиданно
+ получит новую зависимость. Индекс может быть по прежнему
+ неправильным даже после его перестроения, в случае если
+ другие порты также определят дополнительные зависимости,
+ основываясь на существовании других файлов.</para>
+
+ <example>
+ <title>Корректное объявление необязательной
+ зависимости</title>
+
+ <programlisting>OPTIONS_DEFINE= BAR
BAR_DESC= Bar support
.include &lt;bsd.port.options.mk&gt;
@@ -3036,94 +3217,96 @@ BAR_DESC= Bar support
.if ${PORT_OPTIONS:MBAR}
LIB_DEPENDS= libbar.so:${PORTSDIR}/foo/bar
.endif</programlisting>
- </example>
+ </example>
- <para>Правильным способом является проверка переменных параметров.
- Этот способ не приводит к несоответствиям в индексе набора
- портов, поскольку параметры определены до построения индекса.
- При этом можно использовать простые скрипты для автоматизации
- построения, установки и обновления этих портов и соответствующих
- им пакетов.</para>
- </sect2>
+ <para>Правильным способом является проверка переменных
+ параметров. Этот способ не приводит к несоответствиям в
+ индексе набора портов, поскольку параметры определены до
+ построения индекса. При этом можно использовать простые
+ скрипты для автоматизации построения, установки и обновления
+ этих портов и соответствующих им пакетов.</para>
+ </sect2>
- <sect2 xml:id="use-want">
- <title><varname>USE_</varname> и
- <varname>WANT_</varname></title>
+ <sect2 xml:id="use-want">
+ <title><varname>USE_</varname> и
+ <varname>WANT_</varname></title>
- <para>Переменные <varname>USE_</varname> задаются мейнтейнером
- порта для определения программного обеспечения, от которого
- этот порт зависит. Порт, для которого нужен Firefox,
- укажет</para>
+ <para>Переменные <varname>USE_</varname> задаются мейнтейнером
+ порта для определения программного обеспечения, от которого
+ этот порт зависит. Порт, для которого нужен Firefox,
+ укажет</para>
- <programlisting>USE_FIREFOX= yes</programlisting>
+ <programlisting>USE_FIREFOX= yes</programlisting>
- <para>Некоторые переменные <varname>USE_</varname> могут
- принимать номера версий или другие параметры. Например,
- порт, который требует Apache 2.2, укажет</para>
+ <para>Некоторые переменные <varname>USE_</varname> могут
+ принимать номера версий или другие параметры. Например,
+ порт, который требует Apache 2.2, укажет</para>
- <programlisting>USE_APACHE= 22</programlisting>
+ <programlisting>USE_APACHE= 22</programlisting>
- <para>В некоторых случаях для большего контроля над
- зависимостями используются переменные <varname>WANT_</varname>,
- которые позволяют указывать требования в более точной форме.
- Например, взгляните на порт
- <package role="port">mail/squirrelmail</package>. Этому порту
- нужны несколько модулей PHP, которые перечислены в переменной
- <varname>USE_PHP</varname>:</para>
+ <para>В некоторых случаях для большего контроля над
+ зависимостями используются переменные
+ <varname>WANT_</varname>, которые позволяют указывать
+ требования в более точной форме. Например, взгляните на порт
+ <package role="port">mail/squirrelmail</package>. Этому
+ порту нужны несколько модулей PHP, которые перечислены в
+ переменной <varname>USE_PHP</varname>:</para>
- <programlisting>USE_PHP= session mhash gettext mbstring pcre openssl xml</programlisting>
+ <programlisting>USE_PHP= session mhash gettext mbstring pcre openssl xml</programlisting>
- <para>Эти модули доступны в версиях CLI и web, поэтому версия
- web выбрана с переменной <varname>WANT_</varname>:</para>
+ <para>Эти модули доступны в версиях CLI и web, поэтому версия
+ web выбрана с переменной <varname>WANT_</varname>:</para>
- <programlisting>WANT_PHP_WEB= yes</programlisting>
+ <programlisting>WANT_PHP_WEB= yes</programlisting>
- <para>Имеющиеся переменные <varname>USE_</varname> и
- <varname>WANT_</varname> определены в файлах в
- <filename class="directory">/usr/ports/Mk</filename>.</para>
- </sect2>
- </sect1>
+ <para>Имеющиеся переменные <varname>USE_</varname> и
+ <varname>WANT_</varname> определены в файлах в
+ <filename class="directory">/usr/ports/Mk</filename>.</para>
+ </sect2>
+ </sect1>
<sect1 xml:id="makefile-masterdir">
<title><varname>MASTERDIR</varname></title>
- <para>Если вашему порту требуется построение довольно различающихся
- версий пакетов через переменную (задающую, например, разрешение,
- или размер бумаги), которая принимает различные значения, создайте для
- каждого пакета отдельный подкаталог, чтобы пользователям было легче
- определить, каким пакетом воспользоваться, но попробуйте использовать
- совместно между портами как можно больше файлов. В типичном случае вам
- потребуются только очень короткие файлы <filename>Makefile</filename>
- во всех каталогах, кроме одного, если вы будете использовать переменные
- с умом. В отдельных файлах <filename>Makefile</filename> вы можете
- использовать переменную <varname>MASTERDIR</varname> для указания
- каталога, в котором находятся все остальные файлы. Также используйте
- переменную как часть <link linkend="porting-pkgname"><varname>PKGNAMESUFFIX</varname></link>, чтобы
- пакеты имели разные имена.</para>
+ <para>Если вашему порту требуется построение довольно
+ различающихся версий пакетов через переменную (задающую,
+ например, разрешение, или размер бумаги), которая принимает
+ различные значения, создайте для каждого пакета отдельный
+ подкаталог, чтобы пользователям было легче определить, каким
+ пакетом воспользоваться, но попробуйте использовать совместно
+ между портами как можно больше файлов. В типичном случае вам
+ потребуются только очень короткие файлы
+ <filename>Makefile</filename> во всех каталогах, кроме одного,
+ если вы будете использовать переменные с умом. В отдельных
+ файлах <filename>Makefile</filename> вы можете использовать
+ переменную <varname>MASTERDIR</varname> для указания каталога,
+ в котором находятся все остальные файлы. Также используйте
+ переменную как часть <link
+ linkend="porting-pkgname"><varname>PKGNAMESUFFIX</varname></link>,
+ чтобы пакеты имели разные имена.</para>
<para>Продемонстрируем это на примере. Вот часть файла
<filename>japanese/xdvi300/Makefile</filename>:</para>
- <programlisting>
-PORTNAME= xdvi
-PORTVERSION= 17
-PKGNAMEPREFIX= ja-
-PKGNAMESUFFIX= ${RESOLUTION}
+ <programlisting>PORTNAME= xdvi
+PORTVERSION= 17
+PKGNAMEPREFIX= ja-
+PKGNAMESUFFIX= ${RESOLUTION}
:
# default
-RESOLUTION?= 300
+RESOLUTION?= 300
.if ${RESOLUTION} != 118 &amp;&amp; ${RESOLUTION} != 240 &amp;&amp; \
- ${RESOLUTION} != 300 &amp;&amp; ${RESOLUTION} != 400
- @${ECHO_MSG} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\""
- @${ECHO_MSG} "Possible values are: 118, 240, 300 (default) and 400."
- @${FALSE}
-.endif
- </programlisting>
+ ${RESOLUTION} != 300 &amp;&amp; ${RESOLUTION} != 400
+ @${ECHO_MSG} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\""
+ @${ECHO_MSG} "Possible values are: 118, 240, 300 (default) and 400."
+ @${FALSE}
+.endif</programlisting>
- <para>Порт <package role="port">japanese/xdvi300</package> содержит
- также все обычные патчи, файлы для пакета и так далее. Если вы введете
- здесь команду <command>make</command>, она возьмет в качестве разрешения
- значение по умолчанию (300) и построит порт обычным образом.</para>
+ <para>Порт <package role="port">japanese/xdvi300</package>
+ содержит также все обычные патчи, файлы для пакета и так далее.
+ Если вы введете здесь команду <command>make</command>, она
+ возьмет в качестве разрешения значение по умолчанию (300) и
+ построит порт обычным образом.</para>
<para>Для другого разрешения приведем <emphasis>полный</emphasis>
<filename>xdvi118/Makefile</filename>:</para>
@@ -3135,8 +3318,9 @@ MASTERDIR= ${.CURDIR}/../xdvi300
<para>(<filename>xdvi240/Makefile</filename> и
<filename>xdvi400/Makefile</filename> похожи). Задание
- <varname>MASTERDIR</varname> говорит <filename>bsd.port.mk</filename>,
- что обычный набор подкаталогов типа <varname>FILESDIR</varname> и
+ <varname>MASTERDIR</varname> говорит
+ <filename>bsd.port.mk</filename>, что обычный набор
+ подкаталогов типа <varname>FILESDIR</varname> и
<varname>SCRIPTDIR</varname> находится в каталоге
<filename>xdvi300</filename>. Строчка
<literal>RESOLUTION=118</literal> переопределят строку
@@ -3148,263 +3332,270 @@ MASTERDIR= ${.CURDIR}/../xdvi300
<sect1 xml:id="makefile-manpages">
<title>Страницы Справочника</title>
- <para>Если ваш порт определяет корнем для файлов Справочника каталог,
- отличный от <varname>PREFIX</varname>, вы можете использовать
- переменную <varname>MANDIRS</varname>, чтобы указать эти каталоги.
- Обратите внимание, что файлы страниц справочника следует размещать
- в <filename>pkg-plist</filename> наряду с остальными файлами.
- <varname>MANDIRS</varname> предназначена для автоматического
- сжатия страниц справочника, так чтобы имена файлов оканчивались
- на <filename>.gz</filename>.</para>
+ <para>Если ваш порт определяет корнем для файлов Справочника
+ каталог, отличный от <varname>PREFIX</varname>, вы можете
+ использовать переменную <varname>MANDIRS</varname>, чтобы
+ указать эти каталоги. Обратите внимание, что файлы страниц
+ справочника следует размещать в <filename>pkg-plist</filename>
+ наряду с остальными файлами. <varname>MANDIRS</varname>
+ предназначена для автоматического сжатия страниц справочника,
+ так чтобы имена файлов оканчивались на
+ <filename>.gz</filename>.</para>
</sect1>
<sect1 xml:id="makefile-info">
<title>Файлы в формате info</title>
- <para>Если в вашем пакете нужна установка файлов GNU info, они должны
- быть перечислены в переменной <varname>INFO</varname> (без окончания
- <literal>.info</literal>), по записи на документ. Предполагается,
- что эти файлы устанавливаются в
- <filename>PREFIX/INFO_PATH</filename>.
- Вы можете изменить <varname>INFO_PATH</varname>, если ваш пакет
- использует другое место для размещения. Однако, это не рекомендуется
- делать. Эти записи всего лишь содержат путь относительно
- <filename>PREFIX/INFO_PATH</filename>.
- Например, <package role="port">lang/gcc34</package> устанавливает
- файлы info в
- <filename>PREFIX/INFO_PATH/gcc34</filename>,
- и в <varname>INFO</varname> будет что-то вроде этого:</para>
-
- <programlisting>INFO= gcc34/cpp gcc34/cppinternals gcc34/g77 ...</programlisting>
-
- <para>Перед регистрацией пакета соответствующий код установки/удаления будет
- автоматически добавлен во временный <filename>pkg-plist</filename>.</para>
+ <para>Если в вашем пакете нужна установка файлов GNU info, они
+ должны быть перечислены в переменной <varname>INFO</varname>
+ (без окончания <literal>.info</literal>), по записи на
+ документ. Предполагается, что эти файлы устанавливаются в
+ <filename>PREFIX/INFO_PATH</filename>. Вы можете изменить
+ <varname>INFO_PATH</varname>, если ваш пакет использует другое
+ место для размещения. Однако, это не рекомендуется делать.
+ Эти записи всего лишь содержат путь относительно
+ <filename>PREFIX/INFO_PATH</filename>. Например, <package
+ role="port">lang/gcc34</package> устанавливает файлы info в
+ <filename>PREFIX/INFO_PATH/gcc34</filename>, и в
+ <varname>INFO</varname> будет что-то вроде этого:</para>
+
+ <programlisting>INFO= gcc34/cpp gcc34/cppinternals gcc34/g77 ...</programlisting>
+
+ <para>Перед регистрацией пакета соответствующий код
+ установки/удаления будет автоматически добавлен во временный
+ <filename>pkg-plist</filename>.</para>
</sect1>
- <sect1 xml:id="makefile-options">
- <title>Опции для Makefile</title>
-
- <para>Многие приложения могут быть построены в различных
- конфигурациях и с дополнительной функциональностью. Например,
- выбор естественного (человеческого) языка, GUI против командной
- строки или типа используемой базы данных. Пользователи могут
- нуждаться в различных конфигурациях, отличных от используемой по
- умолчанию, поэтому в системе портов предусмотрен механизм,
- позволяющий автору порта управлять сборкой того или иного
- варианта конфигурации.
- Правильная поддержка этих необязательных параметров облегчает
- пользователям жизнь и даёт два или более порта по цене одного.</para>
-
- <sect2>
- <title>Knobs</title>
-
- <sect3>
- <title><varname>WITH_<replaceable>*</replaceable></varname>
- и
+ <sect1 xml:id="makefile-options">
+ <title>Опции для Makefile</title>
+
+ <para>Многие приложения могут быть построены в различных
+ конфигурациях и с дополнительной функциональностью. Например,
+ выбор естественного (человеческого) языка, GUI против командной
+ строки или типа используемой базы данных. Пользователи могут
+ нуждаться в различных конфигурациях, отличных от используемой
+ по умолчанию, поэтому в системе портов предусмотрен механизм,
+ позволяющий автору порта управлять сборкой того или иного
+ варианта конфигурации. Правильная поддержка этих
+ необязательных параметров облегчает пользователям жизнь и даёт
+ два или более порта по цене одного.</para>
+
+ <sect2>
+ <title>Knobs</title>
+
+ <sect3>
+ <title><varname>WITH_<replaceable>*</replaceable></varname>
+ и
+ <varname>WITHOUT_<replaceable>*</replaceable></varname></title>
+
+ <para>Эти переменные предназначены для установки системным
+ администратором. Многие из них стандартизованы в файле
+ <link
+ xlink:href="http://svnweb.FreeBSD.org/ports/head/KNOBS?view=markup"><filename>ports/KNOBS</filename></link>.</para>
+
+ <para>При создании порта не давайте имя для knob, специфичное
+ для данного приложения. На примере порта Avahi,
+ используйте <varname>WITHOUT_MDNS</varname> вместо
+ <varname>WITHOUT_AVAHI_MDNS</varname>.</para>
+
+ <note>
+ <para>Не стоит рассчитывать, что
+ <varname>WITH_<replaceable>*</replaceable></varname>
+ обязательно имеет соответствующую переменную
+ <varname>WITHOUT_<replaceable>*</replaceable></varname>,
+ и наоборот. В общем случае, предполагается значение по
+ умолчанию.</para>
+ </note>
+
+ <note>
+ <para>Если обратное не указано, то проверяется только факт
+ установки самих переменных, но не их конкретное значение
+ типа <literal>YES</literal> или
+ <literal>NO</literal>.</para>
+ </note>
+
+ <table frame="none">
+ <title>Основные переменные
+ <varname>WITH_<replaceable>*</replaceable></varname> и
<varname>WITHOUT_<replaceable>*</replaceable></varname></title>
- <para>Эти переменные предназначены для установки системным
- администратором. Многие из них стандартизованы в файле
- <link xlink:href="http://svnweb.FreeBSD.org/ports/head/KNOBS?view=markup"><filename>ports/KNOBS</filename></link>.</para>
-
- <para>При создании порта не давайте имя для knob, специфичное
- для данного приложения. На примере порта Avahi, используйте
- <varname>WITHOUT_MDNS</varname> вместо
- <varname>WITHOUT_AVAHI_MDNS</varname>.</para>
-
- <note>
- <para>Не стоит рассчитывать, что
- <varname>WITH_<replaceable>*</replaceable></varname>
- обязательно имеет соответствующую переменную
- <varname>WITHOUT_<replaceable>*</replaceable></varname>,
- и наоборот. В общем случае, предполагается значение по
- умолчанию.</para>
- </note>
-
- <note>
- <para>Если обратное не указано, то проверяется только факт
- установки самих переменных, но не их конкретное значение типа
- <literal>YES</literal> или <literal>NO</literal>.</para>
- </note>
-
- <table frame="none">
- <title>Основные переменные
- <varname>WITH_<replaceable>*</replaceable></varname>
- и <varname>WITHOUT_<replaceable>*</replaceable></varname></title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Переменная</entry>
-
- <entry>Значение</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>WITH_OPENSSL_BASE</varname></entry>
-
- <entry>Использовать версию OpenSSL из базовой системы.</entry>
- </row>
-
- <row>
- <entry><varname>WITH_OPENSSL_PORT</varname></entry>
-
- <entry>Устанавливает версию OpenSSL из
- <package role="port">security/openssl</package>,
- даже если в базовой системе последняя версия.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- </sect3>
-
- <sect3>
- <title>Наименование KNOBS</title>
- <para>Портеры должны использовать так называемые
- knobs для помощи конечным пользователям и для поддержания
- количества наименований knobs в небольшом количестве.
- Список популярных названий knobs можно найти в файле <link xlink:href="http://svnweb.FreeBSD.org/ports/head/KNOBS?view=markup"><filename>KNOBS</filename></link>
- </para>
-
- <para>Названия knobs должны отражать, что это такое и что
- выполняет. Если у порта имеется библиотечный префикс в
- <varname>PORTNAME</varname>, то он должен присутствовать в
- названии knobs.</para>
- </sect3>
- </sect2>
-
- <sect2>
- <title><varname>OPTIONS</varname></title>
-
- <sect3>
- <title>Описание</title>
- <para>При установке порта переменные <varname>OPTIONS_*</varname>
- предоставляют пользователю окно диалога с отображением
- доступных параметров, с записью выбранных параметров в файл
- <filename>/var/db/ports/${UNIQUENAME}/options</filename>.
- Эти опции повторно используются при следующем построении
- порта.</para>
-
- <para>Когда пользователь запускает <command>make config</command>
- (или запускает впервые <command>make build</command>),
- инфраструктура выполняет проверку существования файла
- <filename>/var/db/ports/${UNIQUENAME}/options</filename>.
- Если этот файл не существует, то используются значения
- <varname>OPTIONS_*</varname> и отображается диалоговое окно,
- в котором эти параметры можно включить или выключить.
- Затем сохраняется файл опций <filename>options</filename>,
- и выбранные переменные используются при построении порта.</para>
-
- <para>Если новая версия порта добавляет новые значения
- <varname>OPTIONS</varname>, то пользователю будет представлено
- окно диалога с сохраненными заполненными значениями старых
- <varname>OPTIONS.</varname></para>
-
- <para><command>make showconfig</command> отображает
- сохраненную конфигурацию. Для удаления
- сохраненной конфигурации используйте
- <command>make rmconfig</command>.</para>
- </sect3>
-
- <sect3>
- <title>Синтаксис</title>
-
- <para><varname>OPTIONS_DEFINE</varname> содержит список
- используемых <varname>OPTIONS</varname>. Они независимы
- друг от друга и не сгруппированы:</para>
-
- <programlisting>OPTIONS_DEFINE= OPT1 OPT2</programlisting>
-
- <para>Далее после определения следует описание
- <varname>OPTIONS</varname> (не является обязательным,
- но настоятельно рекомендуется):</para>
-
- <programlisting>OPT1_DESC= Describe OPT1
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>Переменная</entry>
+ <entry>Значение</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><varname>WITH_OPENSSL_BASE</varname></entry>
+ <entry>Использовать версию OpenSSL из базовой
+ системы.</entry>
+ </row>
+
+ <row>
+ <entry><varname>WITH_OPENSSL_PORT</varname></entry>
+
+ <entry>Устанавливает версию OpenSSL из <package
+ role="port">security/openssl</package>, даже если в
+ базовой системе последняя версия.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect3>
+
+ <sect3>
+ <title>Наименование KNOBS</title>
+
+ <para>Портеры должны использовать так называемые knobs для
+ помощи конечным пользователям и для поддержания количества
+ наименований knobs в небольшом количестве. Список
+ популярных названий knobs можно найти в файле <link
+ xlink:href="http://svnweb.FreeBSD.org/ports/head/KNOBS?view=markup"><filename>KNOBS</filename></link></para>
+
+ <para>Названия knobs должны отражать, что это такое и что
+ выполняет. Если у порта имеется библиотечный префикс в
+ <varname>PORTNAME</varname>, то он должен присутствовать в
+ названии knobs.</para>
+ </sect3>
+ </sect2>
+
+ <sect2>
+ <title><varname>OPTIONS</varname></title>
+
+ <sect3>
+ <title>Описание</title>
+
+ <para>При установке порта переменные
+ <varname>OPTIONS_*</varname> предоставляют пользователю
+ окно диалога с отображением доступных параметров, с записью
+ выбранных параметров в файл
+ <filename>/var/db/ports/${UNIQUENAME}/options</filename>.
+ Эти опции повторно используются при следующем построении
+ порта.</para>
+
+ <para>Когда пользователь запускает
+ <command>make config</command> (или запускает впервые
+ <command>make build</command>), инфраструктура выполняет
+ проверку существования файла
+ <filename>/var/db/ports/${UNIQUENAME}/options</filename>.
+ Если этот файл не существует, то используются значения
+ <varname>OPTIONS_*</varname> и отображается диалоговое
+ окно, в котором эти параметры можно включить или выключить.
+ Затем сохраняется файл опций <filename>options</filename>,
+ и выбранные переменные используются при построении
+ порта.</para>
+
+ <para>Если новая версия порта добавляет новые значения
+ <varname>OPTIONS</varname>, то пользователю будет
+ представлено окно диалога с сохраненными заполненными
+ значениями старых <varname>OPTIONS.</varname></para>
+
+ <para><command>make showconfig</command> отображает
+ сохраненную конфигурацию. Для удаления сохраненной
+ конфигурации используйте
+ <command>make rmconfig</command>.</para>
+ </sect3>
+
+ <sect3>
+ <title>Синтаксис</title>
+
+ <para><varname>OPTIONS_DEFINE</varname> содержит список
+ используемых <varname>OPTIONS</varname>. Они независимы
+ друг от друга и не сгруппированы:</para>
+
+ <programlisting>OPTIONS_DEFINE= OPT1 OPT2</programlisting>
+
+ <para>Далее после определения следует описание
+ <varname>OPTIONS</varname> (не является обязательным, но
+ настоятельно рекомендуется):</para>
+
+ <programlisting>OPT1_DESC= Describe OPT1
OPT2_DESC= Describe OPT2
OPT3_DESC= Describe OPT3
OPT4_DESC= Describe OPT4
OPT5_DESC= Describe OPT5
OPT6_DESC= Describe OPT6</programlisting>
- <tip>
- <para><filename>ports/Mk/bsd.options.desc.mk</filename>
- содержит описание множества наиболее используемых
- <varname>OPTIONS</varname>; переопределять их, как
- правило, не нужно.</para>
- </tip>
-
- <tip>
- <para>При описании параметров старайтесь представить себя
- на месте пользователя: <quote>Что это делает?</quote>
- и <quote>Для чего бы я захотел включить это?</quote>
- Не делайте простое повторение названия. Например,
- описание параметра <literal>NLS</literal> как
- <quote>include NLS support</quote> (<quote>включить
- поддержку NLS</quote>) не поможет пользователю, который
- уже видит название параметра, но может не знать, что
- это означает. Описав его как <quote>Native Language
- Support via gettext utilities</quote> (<quote>Поддержка
- национального языка через утилиты gettext</quote>),
- вы поможете пользователю гораздо больше.</para>
- </tip>
-
- <para><varname>OPTIONS</varname> можно группировать в виде
- переключателей, для которых разрешен выбор единственного
- варианта в каждой группе:</para>
-
- <programlisting>OPTIONS_SINGLE= SG1
+ <tip>
+ <para><filename>ports/Mk/bsd.options.desc.mk</filename>
+ содержит описание множества наиболее используемых
+ <varname>OPTIONS</varname>; переопределять их, как
+ правило, не нужно.</para>
+ </tip>
+
+ <tip>
+ <para>При описании параметров старайтесь представить себя
+ на месте пользователя: <quote>Что это делает?</quote> и
+ <quote>Для чего бы я захотел включить это?</quote> Не
+ делайте простое повторение названия. Например, описание
+ параметра <literal>NLS</literal> как <quote>include NLS
+ support</quote> (<quote>включить поддержку NLS</quote>)
+ не поможет пользователю, который уже видит название
+ параметра, но может не знать, что это означает. Описав
+ его как <quote>Native Language Support via gettext
+ utilities</quote> (<quote>Поддержка национального языка
+ через утилиты gettext</quote>), вы поможете пользователю
+ гораздо больше.</para>
+ </tip>
+
+ <para><varname>OPTIONS</varname> можно группировать в виде
+ переключателей, для которых разрешен выбор единственного
+ варианта в каждой группе:</para>
+
+ <programlisting>OPTIONS_SINGLE= SG1
OPTIONS_SINGLE_SG1= OPT3 OPT4</programlisting>
- <para><varname>OPTIONS</varname> можно группировать в виде
- переключателей, для которых разрешен выбор единственного
- варианта (или ни одного) в каждой группе:</para>
+ <para><varname>OPTIONS</varname> можно группировать в виде
+ переключателей, для которых разрешен выбор единственного
+ варианта (или ни одного) в каждой группе:</para>
- <programlisting>OPTIONS_RADIO= RG1
+ <programlisting>OPTIONS_RADIO= RG1
OPTIONS_RADIO_RG1= OPT7 OPT8</programlisting>
- <para><varname>OPTIONS</varname> также можно группировать
- в виде списков со множественным выбором, для которых
- обязан быть включен <emphasis>по крайней мере
- один</emphasis> из параметров:</para>
+ <para><varname>OPTIONS</varname> также можно группировать в
+ виде списков со множественным выбором, для которых обязан
+ быть включен <emphasis>по крайней мере один</emphasis> из
+ параметров:</para>
- <programlisting>OPTIONS_MULTI= MG1
+ <programlisting>OPTIONS_MULTI= MG1
OPTIONS_MULTI_MG1= OPT5 OPT6</programlisting>
- <para><varname>OPTIONS</varname> также можно группировать
- в виде списков со множественным выбором, для которых
- могут быть включены любые параметры, включая отсутствие
- выбора:</para>
+ <para><varname>OPTIONS</varname> также можно группировать в
+ виде списков со множественным выбором, для которых могут
+ быть включены любые параметры, включая отсутствие
+ выбора:</para>
- <programlisting>OPTIONS_GROUP= GG1
+ <programlisting>OPTIONS_GROUP= GG1
OPTIONS_GROUP_GG1= OPT9 OPT10</programlisting>
- <para>По умолчанию <varname>OPTIONS</varname> находится в
- выключенном положении, если при этом оно также отсутствует
- в списке <varname>OPTIONS_DEFAULT</varname>:</para>
-
- <programlisting>OPTIONS_DEFAULT= OPT1 OPT3 OPT6</programlisting>
-
- <para>Определения <varname>OPTIONS</varname> обязаны появиться
- до подключения <filename>bsd.port.options.mk</filename>.
- Переменные <varname>PORT_OPTIONS</varname>
- могут быть проверены только после
- подключения <filename>bsd.port.options.mk</filename>.
- Вместо этого также можно использовать подключение
- <filename>bsd.port.pre.mk</filename>, что все еще широко
- используется в портах, написанных до появления
- <filename>bsd.port.options.mk</filename>. Но имейте в виду,
- что некоторые переменные, обычно, это некоторые флаги
- <varname>USE_*</varname>,
- после подключения <filename>bsd.port.pre.mk</filename> будут
- работать не так, как этого от них ожидают.</para>
-
- <example xml:id="ports-options-simple-use">
- <title>Простое использование <varname>OPTIONS</varname></title>
-
- <programlisting>OPTIONS_DEFINE= FOO BAR
+ <para>По умолчанию <varname>OPTIONS</varname> находится в
+ выключенном положении, если при этом оно также отсутствует
+ в списке <varname>OPTIONS_DEFAULT</varname>:</para>
+
+ <programlisting>OPTIONS_DEFAULT= OPT1 OPT3 OPT6</programlisting>
+
+ <para>Определения <varname>OPTIONS</varname> обязаны быть
+ до подключения <filename>bsd.port.options.mk</filename>.
+ Переменные <varname>PORT_OPTIONS</varname> могут быть
+ проверены только после подключения
+ <filename>bsd.port.options.mk</filename>. Вместо этого
+ также можно использовать подключение
+ <filename>bsd.port.pre.mk</filename>, что все еще широко
+ используется в портах, написанных до появления
+ <filename>bsd.port.options.mk</filename>. Но имейте в
+ виду, что некоторые переменные, обычно, это некоторые флаги
+ <varname>USE_*</varname>, после подключения
+ <filename>bsd.port.pre.mk</filename> будут работать не так,
+ как этого от них ожидают.</para>
+
+ <example xml:id="ports-options-simple-use">
+ <title>Простое использование
+ <varname>OPTIONS</varname></title>
+
+ <programlisting>OPTIONS_DEFINE= FOO BAR
FOO_DESC= Enable option foo
BAR_DESC= Support feature bar
@@ -3421,22 +3612,22 @@ RUN_DEPENDS+= bar:${PORTSDIR}/bar/bar
.endif
.include &lt;bsd.port.mk&gt;</programlisting>
- </example>
+ </example>
- <example xml:id="ports-options-check-unset">
- <title>Проверка незаданных значений
- <varname>OPTIONS</varname></title>
+ <example xml:id="ports-options-check-unset">
+ <title>Проверка незаданных значений
+ <varname>OPTIONS</varname></title>
- <programlisting>.if ! ${PORT_OPTIONS:MEXAMPLES}
+ <programlisting>.if ! ${PORT_OPTIONS:MEXAMPLES}
CONFIGURE_ARGS+=--without-examples
.endif</programlisting>
- </example>
+ </example>
- <example xml:id="ports-options-practical-use">
- <title>Пример реального использования
- <varname>OPTIONS</varname></title>
+ <example xml:id="ports-options-practical-use">
+ <title>Пример реального использования
+ <varname>OPTIONS</varname></title>
- <programlisting>OPTIONS_DEFINE= EXAMPLES
+ <programlisting>OPTIONS_DEFINE= EXAMPLES
OPTIONS_SINGLE= BACKEND
OPTIONS_SINGLE_BACKEND= MYSQL PGSQL BDB
@@ -3474,114 +3665,126 @@ CONFIGURE_ARGS+= --without-examples
# Проверка других параметров OPTIONS
.include &lt;bsd.port.mk&gt;</programlisting>
- </example>
- </sect3>
-
- <sect3>
- <title>Параметры по умолчанию</title>
- <para>Следующие параметры по умолчанию всегда включены.</para>
- <itemizedlist>
- <listitem>
- <para><literal>DOCS</literal> &mdash; построение и установка
- документации.</para>
- </listitem>
- <listitem>
- <para><literal>NLS</literal> &mdash; интернационализация.</para>
- </listitem>
- <listitem>
- <para><literal>EXAMPLES</literal> &mdash; построение и
- установка примеров использования.</para>
- </listitem>
- <listitem>
- <para><literal>IPV6</literal> &mdash; поддержка протокола
- IPv6.</para>
- </listitem>
- </itemizedlist>
- <note>
- <para>Нет необходимости добавлять эти параметры в
- <varname>OPTIONS_DEFAULT</varname>. Тем не менее, чтобы
- отобразить их в окне диалога выбора параметров, они должны
- быть добавлены в <varname>OPTIONS_DEFINE</varname>.</para>
- </note>
- </sect3>
- </sect2>
-
- <sect2>
- <title>Функция автоматической активации</title>
-
- <para>При использовании сценария GNU configure, следите за тем,
- какие необязательные функции задействуются посредством
- автоматической активации. Отключайте явным образом те
- необязательные функции, которые вы не хотели бы использовать,
- через передачу соответствующих <literal>--without-xxx</literal>
- или <literal>--disable-xxx</literal> в переменной
- <varname>CONFIGURE_ARGS</varname>.</para>
-
- <example>
- <title>Неправильное управление опцией</title>
-
- <programlisting>.if ${PORT_OPTIONS:MFOO}
-LIB_DEPENDS+= libfoo.so:${PORTSDIR}/devel/foo
-CONFIGURE_ARGS+= --enable-foo
-.endif</programlisting>
</example>
+ </sect3>
+
+ <sect3>
+ <title>Параметры по умолчанию</title>
+
+ <para>Следующие параметры по умолчанию всегда
+ включены.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><literal>DOCS</literal> &mdash; построение и
+ установка документации.</para>
+ </listitem>
+
+ <listitem>
+ <para><literal>NLS</literal> &mdash;
+ интернационализация.</para>
+ </listitem>
+
+ <listitem>
+ <para><literal>EXAMPLES</literal> &mdash; построение и
+ установка примеров использования.</para>
+ </listitem>
+
+ <listitem>
+ <para><literal>IPV6</literal> &mdash; поддержка протокола
+ IPv6.</para>
+ </listitem>
+ </itemizedlist>
- <para>В приведенном выше примере представьте себе библиотеку libfoo,
- установленную в системе. Пользователь не желает, чтобы приложение
- использовало libfoo, и поэтому он выключает соответствующую опцию
- в диалоге <literal>make config</literal>. Но сценарий configure
- приложения определяет наличие библиотеки в системе и включает ее
- поддержку в итоговый исполняемый файл. Теперь, когда пользователь
- решит удалить libfoo из системы, система портов позволит это
- сделать (т.к. зависимость от libfoo не была записана), но
- приложение перестанет работать.</para>
+ <note>
+ <para>Нет необходимости добавлять эти параметры в
+ <varname>OPTIONS_DEFAULT</varname>. Тем не менее, чтобы
+ отобразить их в окне диалога выбора параметров, они
+ должны быть добавлены в
+ <varname>OPTIONS_DEFINE</varname>.</para>
+ </note>
+ </sect3>
+ </sect2>
+
+ <sect2>
+ <title>Функция автоматической активации</title>
+
+ <para>При использовании сценария GNU configure, следите за тем,
+ какие необязательные функции задействуются посредством
+ автоматической активации. Отключайте явным образом те
+ необязательные функции, которые вы не хотели бы использовать,
+ через передачу соответствующих
+ <literal>--without-xxx</literal> или
+ <literal>--disable-xxx</literal> в переменной
+ <varname>CONFIGURE_ARGS</varname>.</para>
- <example>
- <title>Правильное управление опцией</title>
+ <example>
+ <title>Неправильное управление опцией</title>
- <programlisting>.if ${PORT_OPTIONS:MFOO}
+ <programlisting>.if ${PORT_OPTIONS:MFOO}
+LIB_DEPENDS+= libfoo.so:${PORTSDIR}/devel/foo
+CONFIGURE_ARGS+= --enable-foo
+.endif</programlisting>
+ </example>
+
+ <para>В приведенном выше примере представьте себе библиотеку
+ libfoo, установленную в системе. Пользователь не желает,
+ чтобы приложение использовало libfoo, и поэтому он выключает
+ соответствующую опцию в диалоге <literal>make
+ config</literal>. Но сценарий configure приложения
+ определяет наличие библиотеки в системе и включает ее
+ поддержку в итоговый исполняемый файл. Теперь, когда
+ пользователь решит удалить libfoo из системы, система портов
+ позволит это сделать (т.к. зависимость от libfoo не была
+ записана), но приложение перестанет работать.</para>
+
+ <example>
+ <title>Правильное управление опцией</title>
+
+ <programlisting>.if ${PORT_OPTIONS:MFOO}
LIB_DEPENDS+= libfoo.so:${PORTSDIR}/devel/foo
CONFIGURE_ARGS+= --enable-foo
.else
CONFIGURE_ARGS+= --disable-foo
.endif</programlisting>
- </example>
+ </example>
- <para>Во втором примере библиотека libfoo отключена явным образом.
- Сценарий configure не включает соответствующие функции в приложении,
- несмотря на присутствие библиотеки в системе.</para>
+ <para>Во втором примере библиотека libfoo отключена явным
+ образом. Сценарий configure не включает соответствующие
+ функции в приложении, несмотря на присутствие библиотеки в
+ системе.</para>
- <note>
- <para>При определенных условиях сокращенный синтаксис записи
- условий может вызывать проблемы со сложными конструкциями.
- Если вы получаете ошибки, такие как <literal>Malformed
- conditional</literal>, то может быть использован
- альтернативный синтаксис.</para>
+ <note>
+ <para>При определенных условиях сокращенный синтаксис записи
+ условий может вызывать проблемы со сложными конструкциями.
+ Если вы получаете ошибки, такие как <literal>Malformed
+ conditional</literal>, то может быть использован
+ альтернативный синтаксис.</para>
- <programlisting>.if !empty(VARIABLE:MVALUE)
+ <programlisting>.if !empty(VARIABLE:MVALUE)
# as an alternative to
.if ${VARIABLE:MVALUE}</programlisting>
- </note>
- </sect2>
+ </note>
+ </sect2>
- <sect2>
- <title>Вспомогательные макросы</title>
+ <sect2>
+ <title>Вспомогательные макросы</title>
- <para>Существует несколько макросов, упрощающих запись условных
- значений, которые отличаются в зависимости от набора
- параметров.</para>
+ <para>Существует несколько макросов, упрощающих запись условных
+ значений, которые отличаются в зависимости от набора
+ параметров.</para>
- <para>Если переменная <varname>OPTIONS_SUB</varname> имеет
- значение <literal>yes</literal>, то каждый из указанных в
- <varname>OPTIONS_DEFINE</varname> параметров будет добавлен
- в <varname>PLIST_SUB</varname>. Следующая запись:</para>
+ <para>Если переменная <varname>OPTIONS_SUB</varname> имеет
+ значение <literal>yes</literal>, то каждый из указанных в
+ <varname>OPTIONS_DEFINE</varname> параметров будет добавлен в
+ <varname>PLIST_SUB</varname>. Следующая запись:</para>
- <programlisting>OPTIONS_DEFINE= OPT1
+ <programlisting>OPTIONS_DEFINE= OPT1
OPTIONS_SUB= yes</programlisting>
- <para>соответствует:</para>
+ <para>соответствует:</para>
- <programlisting>OPTIONS_DEFINE= OPT1
+ <programlisting>OPTIONS_DEFINE= OPT1
.include &lt;bsd.port.options.mk&gt;
@@ -3591,19 +3794,19 @@ PLIST_SUB+= OPT1=""
PLIST_SUB+= OPT1="@comment "
.endif</programlisting>
- <para><varname>X_CONFIGURE_ENABLE</varname> дописывает в
- <varname>CONFIGURE_ARGS</varname> строку
- <literal>--enable-${X_CONFIGURE_ENABLE}</literal> или
- <literal>--disable-${X_CONFIGURE_ENABLE}</literal> в
- соответствии с состоянием <varname>X</varname>. Следующая
- запись:</para>
+ <para><varname>X_CONFIGURE_ENABLE</varname> дописывает в
+ <varname>CONFIGURE_ARGS</varname> строку
+ <literal>--enable-${X_CONFIGURE_ENABLE}</literal> или
+ <literal>--disable-${X_CONFIGURE_ENABLE}</literal> в
+ соответствии с состоянием <varname>X</varname>. Следующая
+ запись:</para>
- <programlisting>OPTIONS_DEFINE= OPT1
+ <programlisting>OPTIONS_DEFINE= OPT1
OPT1_CONFIGURE_ENABLE= test</programlisting>
- <para>соответствует:</para>
+ <para>соответствует:</para>
- <programlisting>OPTIONS_DEFINE= OPT1
+ <programlisting>OPTIONS_DEFINE= OPT1
.include &lt;bsd.port.options.mk&gt;
@@ -3613,19 +3816,19 @@ CONFIGURE_ARGS+= --enable-test
CONFIGURE_ARGS+= --disable-test
.endif</programlisting>
- <para><varname>X_CONFIGURE_WITH</varname> дописывает в
- <varname>CONFIGURE_ARGS</varname> строку
- <literal>--with-${X_CONFIGURE_WITH}</literal> или
- <literal>--without-${X_CONFIGURE_WITH}</literal> в
- соответствии с состоянием <varname>X</varname>. Следующая
- запись:</para>
+ <para><varname>X_CONFIGURE_WITH</varname> дописывает в
+ <varname>CONFIGURE_ARGS</varname> строку
+ <literal>--with-${X_CONFIGURE_WITH}</literal> или
+ <literal>--without-${X_CONFIGURE_WITH}</literal> в
+ соответствии с состоянием <varname>X</varname>. Следующая
+ запись:</para>
- <programlisting>OPTIONS_DEFINE= OPT1
+ <programlisting>OPTIONS_DEFINE= OPT1
OPT1_CONFIGURE_WITH= test</programlisting>
- <para>соответствует:</para>
+ <para>соответствует:</para>
- <programlisting>OPTIONS_DEFINE= OPT1
+ <programlisting>OPTIONS_DEFINE= OPT1
.include &lt;bsd.port.options.mk&gt;
@@ -3635,17 +3838,17 @@ CONFIGURE_ARGS+= --with-test
CONFIGURE_ARGS+= --without-test
.endif</programlisting>
- <para>Значение переменной <varname>X_CONFIGURE_ON</varname>
- будет дописано в <varname>CONFIGURE_ARGS</varname> в
- соответствии с состоянием <varname>X</varname>. Следующая
- запись:</para>
+ <para>Значение переменной <varname>X_CONFIGURE_ON</varname>
+ будет дописано в <varname>CONFIGURE_ARGS</varname> в
+ соответствии с состоянием <varname>X</varname>. Следующая
+ запись:</para>
- <programlisting>OPTIONS_DEFINE= OPT1
+ <programlisting>OPTIONS_DEFINE= OPT1
OPT1_CONFIGURE_ON= --add-test</programlisting>
- <para>соответствует:</para>
+ <para>соответствует:</para>
- <programlisting>OPTIONS_DEFINE= OPT1
+ <programlisting>OPTIONS_DEFINE= OPT1
.include &lt;bsd.port.options.mk&gt;
@@ -3653,32 +3856,32 @@ OPT1_CONFIGURE_ON= --add-test</programlisting>
CONFIGURE_ARGS+= --add-test
.endif</programlisting>
- <para>Значение переменной <varname>X_CONFIGURE_OFF</varname>
- будет дописано в <varname>CONFIGURE_ARGS</varname> в
- соответствии с состоянием <varname>X</varname>. Следующая
- запись:</para>
+ <para>Значение переменной <varname>X_CONFIGURE_OFF</varname>
+ будет дописано в <varname>CONFIGURE_ARGS</varname> в
+ соответствии с состоянием <varname>X</varname>. Следующая
+ запись:</para>
- <programlisting>OPTIONS_DEFINE= OPT1
+ <programlisting>OPTIONS_DEFINE= OPT1
OPT1_CONFIGURE_OFF= --no-test</programlisting>
- <para>соответствует:</para>
+ <para>соответствует:</para>
- <programlisting>OPTIONS_DEFINE= OPT1
+ <programlisting>OPTIONS_DEFINE= OPT1
.include &lt;bsd.port.options.mk&gt;
.if ! ${PORT_OPTIONS:MOPT1}
CONFIGURE_ARGS+= --no-test
.endif</programlisting>
- <para>Значение переменной <varname>X_CMAKE_ON</varname> будет
- дописано в <varname>CMAKE_ARGS</varname> в соответствии с
- состоянием <varname>X</varname>. Следующая запись:</para>
+ <para>Значение переменной <varname>X_CMAKE_ON</varname> будет
+ дописано в <varname>CMAKE_ARGS</varname> в соответствии с
+ состоянием <varname>X</varname>. Следующая запись:</para>
- <programlisting>OPTIONS_DEFINE= OPT1
+ <programlisting>OPTIONS_DEFINE= OPT1
OPT1_CMAKE_ON= -DTEST:BOOL=true</programlisting>
- <para>соответствует:</para>
+ <para>соответствует:</para>
- <programlisting>OPTIONS_DEFINE= OPT1
+ <programlisting>OPTIONS_DEFINE= OPT1
.include &lt;bsd.port.options.mk&gt;
@@ -3686,16 +3889,16 @@ OPT1_CMAKE_ON= -DTEST:BOOL=true</programlisting>
CMAKE_ARGS+= -DTEST:BOOL=true
.endif</programlisting>
- <para>Значение переменной <varname>X_CMAKE_OFF</varname> будет
- дописано в <varname>CMAKE_ARGS</varname> в соответствии с
- состоянием <varname>X</varname>. Следующая запись:</para>
+ <para>Значение переменной <varname>X_CMAKE_OFF</varname> будет
+ дописано в <varname>CMAKE_ARGS</varname> в соответствии с
+ состоянием <varname>X</varname>. Следующая запись:</para>
- <programlisting>OPTIONS_DEFINE= OPT1
+ <programlisting>OPTIONS_DEFINE= OPT1
OPT1_CMAKE_OFF= -DTEST:BOOL=false</programlisting>
- <para>соответствует:</para>
+ <para>соответствует:</para>
- <programlisting>OPTIONS_DEFINE= OPT1
+ <programlisting>OPTIONS_DEFINE= OPT1
.include &lt;bsd.port.options.mk&gt;
@@ -3703,94 +3906,94 @@ OPT1_CMAKE_OFF= -DTEST:BOOL=false</programlisting>
CMAKE_ARGS+= -DTEST:BOOL=false
.endif</programlisting>
- <para>Для любой из следующих переменных:</para>
+ <para>Для любой из следующих переменных:</para>
- <itemizedlist>
- <listitem>
- <para><varname>ALL_TARGET</varname></para>
- </listitem>
+ <itemizedlist>
+ <listitem>
+ <para><varname>ALL_TARGET</varname></para>
+ </listitem>
- <listitem>
- <para><varname>CATEGORIES</varname></para>
- </listitem>
+ <listitem>
+ <para><varname>CATEGORIES</varname></para>
+ </listitem>
- <listitem>
- <para><varname>CFLAGS</varname></para>
- </listitem>
+ <listitem>
+ <para><varname>CFLAGS</varname></para>
+ </listitem>
- <listitem>
- <para><varname>CPPFLAGS</varname></para>
- </listitem>
+ <listitem>
+ <para><varname>CPPFLAGS</varname></para>
+ </listitem>
- <listitem>
- <para><varname>CXXFLAGS</varname></para>
- </listitem>
+ <listitem>
+ <para><varname>CXXFLAGS</varname></para>
+ </listitem>
- <listitem>
- <para><varname>CONFIGURE_ENV</varname></para>
- </listitem>
+ <listitem>
+ <para><varname>CONFIGURE_ENV</varname></para>
+ </listitem>
- <listitem>
- <para><varname>DISTFILES</varname></para>
- </listitem>
+ <listitem>
+ <para><varname>DISTFILES</varname></para>
+ </listitem>
- <listitem>
- <para><varname>EXTRA_PATCHES</varname></para>
- </listitem>
+ <listitem>
+ <para><varname>EXTRA_PATCHES</varname></para>
+ </listitem>
- <listitem>
- <para><varname>INSTALL_TARGET</varname></para>
- </listitem>
+ <listitem>
+ <para><varname>INSTALL_TARGET</varname></para>
+ </listitem>
- <listitem>
- <para><varname>LDFLAGS</varname></para>
- </listitem>
+ <listitem>
+ <para><varname>LDFLAGS</varname></para>
+ </listitem>
- <listitem>
- <para><varname>MAKE_ARGS</varname></para>
- </listitem>
+ <listitem>
+ <para><varname>MAKE_ARGS</varname></para>
+ </listitem>
- <listitem>
- <para><varname>MAKE_ENV</varname></para>
- </listitem>
+ <listitem>
+ <para><varname>MAKE_ENV</varname></para>
+ </listitem>
- <listitem>
- <para><varname>PATCH_SITES</varname></para>
- </listitem>
+ <listitem>
+ <para><varname>PATCH_SITES</varname></para>
+ </listitem>
- <listitem>
- <para><varname>PATCHFILES</varname></para>
- </listitem>
+ <listitem>
+ <para><varname>PATCHFILES</varname></para>
+ </listitem>
- <listitem>
- <para><varname>PLIST_FILES</varname></para>
- </listitem>
+ <listitem>
+ <para><varname>PLIST_FILES</varname></para>
+ </listitem>
- <listitem>
- <para><varname>PLIST_DIRS</varname></para>
- </listitem>
+ <listitem>
+ <para><varname>PLIST_DIRS</varname></para>
+ </listitem>
- <listitem>
- <para><varname>PLIST_DIRSTRY</varname></para>
- </listitem>
+ <listitem>
+ <para><varname>PLIST_DIRSTRY</varname></para>
+ </listitem>
- <listitem>
- <para><varname>USES</varname></para>
- </listitem>
- </itemizedlist>
+ <listitem>
+ <para><varname>USES</varname></para>
+ </listitem>
+ </itemizedlist>
- <para>Значение переменной <varname>X_ABOVEVARIABLE</varname>
- будет дописано в <varname>ABOVEVARIABLE</varname> в
- соответствии с состоянием <varname>X</varname>. Следующая
- запись:</para>
+ <para>Значение переменной <varname>X_ABOVEVARIABLE</varname>
+ будет дописано в <varname>ABOVEVARIABLE</varname> в
+ соответствии с состоянием <varname>X</varname>. Следующая
+ запись:</para>
- <programlisting>OPTIONS_DEFINE= OPT1
+ <programlisting>OPTIONS_DEFINE= OPT1
OPT1_USES= gmake
OPT1_CFLAGS= -DTEST</programlisting>
- <para>соответствует:</para>
+ <para>соответствует:</para>
- <programlisting>OPTIONS_DEFINE= OPT1
+ <programlisting>OPTIONS_DEFINE= OPT1
.include &lt;bsd.port.options.mk&gt;
@@ -3799,17 +4002,17 @@ USES+= gmake
CFLAGS+= -DTEST
.endif</programlisting>
- <para>Если установлена <varname>X_ABOVEVARIABLE_OFF</varname>,
- то флаг <literal>ABOVEVARIABLE</literal> будет автоматически
- выставлен при выключенном параметре <literal>X</literal>.
- Например:</para>
+ <para>Если установлена <varname>X_ABOVEVARIABLE_OFF</varname>,
+ то флаг <literal>ABOVEVARIABLE</literal> будет автоматически
+ выставлен при выключенном параметре <literal>X</literal>.
+ Например:</para>
- <programlisting>OPTIONS_DEFINE= OPT1
+ <programlisting>OPTIONS_DEFINE= OPT1
OPT1_USES_OFF=gmake</programlisting>
- <para>соответствует:</para>
+ <para>соответствует:</para>
- <programlisting>OPTIONS_DEFINE= OPT1
+ <programlisting>OPTIONS_DEFINE= OPT1
.include &lt;bsd.port.options.mk&gt;
@@ -3817,49 +4020,49 @@ OPT1_USES_OFF=gmake</programlisting>
USES+= gmake
.endif</programlisting>
- <para>Для любого из следующих типов зависимости:</para>
+ <para>Для любого из следующих типов зависимости:</para>
- <itemizedlist>
- <listitem>
- <para><varname>PKG_DEPENDS</varname></para>
- </listitem>
+ <itemizedlist>
+ <listitem>
+ <para><varname>PKG_DEPENDS</varname></para>
+ </listitem>
- <listitem>
- <para><varname>EXTRACT_DEPENDS</varname></para>
- </listitem>
+ <listitem>
+ <para><varname>EXTRACT_DEPENDS</varname></para>
+ </listitem>
- <listitem>
- <para><varname>PATCH_DEPENDS</varname></para>
- </listitem>
+ <listitem>
+ <para><varname>PATCH_DEPENDS</varname></para>
+ </listitem>
- <listitem>
- <para><varname>FETCH_DEPENDS</varname></para>
- </listitem>
+ <listitem>
+ <para><varname>FETCH_DEPENDS</varname></para>
+ </listitem>
- <listitem>
- <para><varname>BUILD_DEPENDS</varname></para>
- </listitem>
+ <listitem>
+ <para><varname>BUILD_DEPENDS</varname></para>
+ </listitem>
- <listitem>
- <para><varname>LIB_DEPENDS</varname></para>
- </listitem>
+ <listitem>
+ <para><varname>LIB_DEPENDS</varname></para>
+ </listitem>
- <listitem>
- <para><varname>RUN_DEPENDS</varname></para>
- </listitem>
- </itemizedlist>
+ <listitem>
+ <para><varname>RUN_DEPENDS</varname></para>
+ </listitem>
+ </itemizedlist>
- <para>Значение переменной <varname>X_ABOVEVARIABLE</varname>
- будет дописано в <varname>ABOVEVARIABLE</varname> в
- соответствии с состоянием <varname>X</varname>. Следующая
- запись:</para>
+ <para>Значение переменной <varname>X_ABOVEVARIABLE</varname>
+ будет дописано в <varname>ABOVEVARIABLE</varname> в
+ соответствии с состоянием <varname>X</varname>. Следующая
+ запись:</para>
- <programlisting>OPTIONS_DEFINE= OPT1
+ <programlisting>OPTIONS_DEFINE= OPT1
OPT1_LIB_DEPENDS= liba.so:${PORTSDIR}/devel/a</programlisting>
- <para>соответствует:</para>
+ <para>соответствует:</para>
- <programlisting>OPTIONS_DEFINE= OPT1
+ <programlisting>OPTIONS_DEFINE= OPT1
.include &lt;bsd.port.options.mk&gt;
@@ -3867,449 +4070,467 @@ OPT1_LIB_DEPENDS= liba.so:${PORTSDIR}/devel/a</programlisting>
LIB_DEPENDS+= liba.so:${PORTSDIR}/devel/a
.endif</programlisting>
- <para>Если установлена <varname>X_ABOVEVARIABLE_OFF</varname>,
- то зависимость типа <literal>ABOVEVARIABLE</literal> будет
- добавлена при выключенном параметре <literal>X</literal>.
- Например:</para>
+ <para>Если установлена <varname>X_ABOVEVARIABLE_OFF</varname>,
+ то зависимость типа <literal>ABOVEVARIABLE</literal> будет
+ добавлена при выключенном параметре <literal>X</literal>.
+ Например:</para>
- <programlisting>OPTIONS_DEFINE= OPT1
+ <programlisting>OPTIONS_DEFINE= OPT1
OPT1_LIB_DEPENDS_OFF= liba.so:${PORTSDIR}/devel/a</programlisting>
- <para>соответствует:</para>
+ <para>соответствует:</para>
- <programlisting>OPTIONS_DEFINE= OPT1
+ <programlisting>OPTIONS_DEFINE= OPT1
.include &lt;bsd.port.options.mk&gt;
. if ! ${PORT_OPTIONS:MOPT1}
LIB_DEPENDS+= liba.so:${PORTSDIR}/devel/a
.endif</programlisting>
- </sect2>
- </sect1>
+ </sect2>
+ </sect1>
- <sect1 xml:id="makefile-wrkdir">
- <title>Задание рабочего каталога</title>
+ <sect1 xml:id="makefile-wrkdir">
+ <title>Задание рабочего каталога</title>
- <para>Каждый порт распаковывается в рабочий каталог, который должен быть
- доступным для записи. В системе портов по умолчанию
- <varname>DISTFILES</varname> распаковываются в каталог с именем
- <literal>${DISTNAME}</literal>. Другими словами, если вы
- задали:</para>
+ <para>Каждый порт распаковывается в рабочий каталог, который
+ должен быть доступным для записи. В системе портов по
+ умолчанию <varname>DISTFILES</varname> распаковываются в
+ каталог с именем <literal>${DISTNAME}</literal>. Другими
+ словами, если вы задали:</para>
- <programlisting>PORTNAME= foo
-PORTVERSION= 1.0</programlisting>
+ <programlisting>PORTNAME= foo
+PORTVERSION= 1.0</programlisting>
- <para>то дистрибутивные файлы порта содержат каталог верхнего уровня,
- <filename>foo-1.0</filename>, и все файлы расположены в этом
- каталоге.</para>
+ <para>то дистрибутивные файлы порта содержат каталог верхнего
+ уровня, <filename>foo-1.0</filename>, и все файлы расположены
+ в этом каталоге.</para>
- <para>Если это не ваш случай, то имеется несколько переменных, которые
- вы можете переопределить.</para>
+ <para>Если это не ваш случай, то имеется несколько переменных,
+ которые вы можете переопределить.</para>
- <sect2>
- <title><varname>WRKSRC</varname></title>
+ <sect2>
+ <title><varname>WRKSRC</varname></title>
- <para>Эта переменная задаёт имя каталога, который создаётся при
- распаковке исходных файлов приложения. В нашем предыдущем
- примере если бы распаковка происходила в каталог с именем
- <filename>foo</filename> (а не
- <filename>foo-1.0</filename>), то вы должны написать:</para>
+ <para>Эта переменная задаёт имя каталога, который создаётся при
+ распаковке исходных файлов приложения. В нашем предыдущем
+ примере если бы распаковка происходила в каталог с именем
+ <filename>foo</filename> (а не <filename>foo-1.0</filename>),
+ то вы должны написать:</para>
- <programlisting>WRKSRC= ${WRKDIR}/foo</programlisting>
+ <programlisting>WRKSRC= ${WRKDIR}/foo</programlisting>
- <para>или, как вариант</para>
+ <para>или, как вариант</para>
- <programlisting>WRKSRC= ${WRKDIR}/${PORTNAME}</programlisting>
- </sect2>
+ <programlisting>WRKSRC= ${WRKDIR}/${PORTNAME}</programlisting>
+ </sect2>
- <sect2>
- <title><varname>NO_WRKSUBDIR</varname></title>
+ <sect2>
+ <title><varname>NO_WRKSUBDIR</varname></title>
- <para>Если порт вообще не распаковывается ни в какой каталог, то вы
- должны задать переменную <varname>NO_WRKSUBDIR</varname> для указания
- на этот факт.</para>
+ <para>Если порт вообще не распаковывается ни в какой каталог,
+ то вы должны задать для этого переменную
+ <varname>NO_WRKSUBDIR</varname>.</para>
- <programlisting>NO_WRKSUBDIR= yes</programlisting>
- </sect2>
- </sect1>
+ <programlisting>NO_WRKSUBDIR= yes</programlisting>
+ </sect2>
+ </sect1>
- <sect1 xml:id="conflicts">
- <title>Разрешение конфликтов</title>
+ <sect1 xml:id="conflicts">
+ <title>Разрешение конфликтов</title>
+
+ <para>Для регистрации конфликта между пакетами и портами
+ используются три различные переменные:
+ <varname>CONFLICTS</varname>,
+ <varname>CONFLICTS_INSTALL</varname> и
+ <varname>CONFLICTS_BUILD</varname>.</para>
+
+ <note>
+ <para>Переменные регистрации конфликта автоматически определяют
+ переменную <varname>IGNORE</varname>, которая более подробно
+ описана в <xref linkend="dads-noinstall"/>.</para>
+ </note>
+
+ <para>При удалении одного из конфликтующих портов целесообразно
+ сохранить записи <varname>CONFLICTS</varname> в тех других
+ портах в течении нескольких месяцев, чтобы позаботиться о тех
+ пользователей, которые обновляются от случая к случаю.</para>
+
+ <sect2>
+ <title><varname>CONFLICTS_INSTALL</varname></title>
+
+ <para>Если ваш пакет не может существовать вместе с другими
+ (из-за конфликта файлов, несовместимости времени выполнения и
+ так далее), перечислите имена остальных пакетов в переменной
+ <varname>CONFLICTS_INSTALL</varname>. Здесь вы можете
+ использовать шаблоны командного интерпретатора, такие как
+ <literal>*</literal> и <literal>?</literal>. Имена пакетов
+ должны выглядеть так же, как в
+ <filename>/var/db/pkg</filename>. Пожалуйста, убедитесь, что
+ <varname>CONFLICTS_INSTALL</varname> не содержит пакет самого
+ этого порта. В противном случае не будет работать установка
+ с использованием переменной
+ <varname>FORCE_PKG_REGISTER</varname>. Проверка
+ CONFLICTS_INSTALL выполняется после процесса сборки и до
+ процесса установки.</para>
+ </sect2>
+
+ <sect2>
+ <title><varname>CONFLICTS_BUILD</varname></title>
+
+ <para>Если ваш порт не может быть собран, когда уже установлен
+ другой, перечислите имена остальных портов в переменной
+ <varname>CONFLICTS_BUILD</varname>. Здесь вы можете
+ использовать шаблоны командного интерпретатора, такие как
+ <literal>*</literal> и <literal>?</literal>. Имена пакетов
+ должны выглядеть так же, как в
+ <filename>/var/db/pkg</filename>. Проверка CONFLICTS_BUILD
+ выполняется до процесса сборки. Конфликты сборки в
+ получаемом пакете не записываются.</para>
+ </sect2>
+
+ <sect2>
+ <title><varname>CONFLICTS</varname></title>
+
+ <para>Если ваш порт не может быть собран, когда уже установлен
+ другой, а получаемый пакет не может существовать вместе с
+ другими, перечислите имена остальных пакетов в переменной
+ <varname>CONFLICTS</varname>. Здесь вы можете использовать
+ шаблоны командного интерпретатора, такие как
+ <literal>*</literal> и <literal>?</literal>. Имена пакетов
+ должны выглядеть так же, как в
+ <filename>/var/db/pkg</filename>. Пожалуйста, убедитесь, что
+ <varname>CONFLICTS</varname> не содержит пакет самого этого
+ порта. В противном случае не будет работать установка с
+ использованием переменной
+ <varname>FORCE_PKG_REGISTER</varname>. Проверка CONFLICTS
+ выполняется до процессов сборки и установки.</para>
+ </sect2>
+ </sect1>
- <para>Для регистрации конфликта между пакетами и портами используются
- три различные переменные: <varname>CONFLICTS</varname>,
- <varname>CONFLICTS_INSTALL</varname> и
- <varname>CONFLICTS_BUILD</varname>.</para>
+ <sect1 xml:id="install">
+ <title>Установка файлов</title>
- <note>
- <para>Переменные регистрации конфликта автоматически определяют
- переменную <varname>IGNORE</varname>, которая более подробно
- описана в <xref linkend="dads-noinstall"/>.</para>
- </note>
+ <sect2 xml:id="install-macros">
+ <title>Макросы <varname>INSTALL_*</varname></title>
- <para>При удалении одного из конфликтующих портов целесообразно
- сохранить записи <varname>CONFLICTS</varname> в тех других портах
- в течении нескольких месяцев, чтобы позаботиться о тех пользователей,
- которые обновляются от случая к случаю.</para>
-
- <sect2>
- <title><varname>CONFLICTS_INSTALL</varname></title>
-
- <para>Если ваш пакет не может существовать вместе с другими
- (из-за конфликта файлов, несовместимости времени выполнения и так
- далее), перечислите имена остальных пакетов в переменной
- <varname>CONFLICTS_INSTALL</varname>. Здесь вы можете использовать
- шаблоны командного интерпретатора, такие как <literal>*</literal>
- и <literal>?</literal>. Имена пакетов должны выглядеть так же,
- как в <filename>/var/db/pkg</filename>. Пожалуйста, убедитесь,
- что <varname>CONFLICTS_INSTALL</varname> не содержит пакет самого
- этого порта. В противном случае не будет работать установка с
- использованием переменной <varname>FORCE_PKG_REGISTER</varname>.
- Проверка CONFLICTS_INSTALL выполняется после процесса сборки и
- до процесса установки.</para>
- </sect2>
-
- <sect2>
- <title><varname>CONFLICTS_BUILD</varname></title>
-
- <para>Если ваш порт не может быть собран, когда уже установлен
- другой, перечислите имена остальных портов в переменной
- <varname>CONFLICTS_BUILD</varname>. Здесь вы можете использовать
- шаблоны командного интерпретатора, такие как <literal>*</literal>
- и <literal>?</literal>. Имена пакетов должны выглядеть так же,
- как в <filename>/var/db/pkg</filename>. Проверка CONFLICTS_BUILD
- выполняется до процесса сборки. Конфликты сборки в получаемом
- пакете не записываются.</para>
- </sect2>
-
- <sect2>
- <title><varname>CONFLICTS</varname></title>
-
- <para>Если ваш порт не может быть собран, когда уже установлен
- другой, а получаемый пакет не может существовать вместе с другими,
- перечислите имена остальных пакетов в переменной
- <varname>CONFLICTS</varname>. Здесь вы можете использовать шаблоны
- командного интерпретатора, такие как <literal>*</literal> и
- <literal>?</literal>. Имена пакетов должны выглядеть так же, как
- в <filename>/var/db/pkg</filename>. Пожалуйста, убедитесь, что
- <varname>CONFLICTS</varname> не содержит пакет самого этого порта.
- В противном случае не будет работать установка с использованием
- переменной <varname>FORCE_PKG_REGISTER</varname>. Проверка
- CONFLICTS выполняется до процессов сборки и установки.</para>
- </sect2>
- </sect1>
-
- <sect1 xml:id="install">
- <title>Установка файлов</title>
-
- <sect2 xml:id="install-macros">
- <title>Макросы INSTALL_*</title>
-
- <para>Используйте макросы, которые есть в файле
- <filename>bsd.port.mk</filename> для обеспечения правильных прав
- доступа файлов в целях <buildtarget>*-install</buildtarget>
- порта. Устанавливайте права владения напрямую в
- <filename>pkg-plist</filename> через соответствующие записи
- <literal>@owner owner</literal> и
- <literal>@group group</literal>. Эти операторы работают до
- момента их переопределения или до конца
- <filename>pkg-plist</filename>, поэтому не забывайте их
- сбрасывать, когда они больше не нужны. По умолчанию владение
- устанавливается для <literal>root:wheel</literal>.</para>
+ <para>Используйте макросы, которые есть в файле
+ <filename>bsd.port.mk</filename> для обеспечения правильных
+ прав доступа файлов в целях
+ <buildtarget>*-install</buildtarget> порта. Устанавливайте
+ права владения напрямую в <filename>pkg-plist</filename>
+ через соответствующие записи <literal>@owner owner</literal>
+ и <literal>@group group</literal>. Эти операторы работают до
+ момента их переопределения или до конца
+ <filename>pkg-plist</filename>, поэтому не забывайте их
+ сбрасывать, когда они больше не нужны. По умолчанию владение
+ устанавливается для <literal>root:wheel</literal>.</para>
- <itemizedlist>
- <listitem>
- <para><varname>INSTALL_PROGRAM</varname> - это команда для
- установки бинарных выполнимых файлов.</para>
- </listitem>
+ <itemizedlist>
+ <listitem>
+ <para><varname>INSTALL_PROGRAM</varname> - это команда для
+ установки бинарных выполнимых файлов.</para>
+ </listitem>
- <listitem>
- <para><varname>INSTALL_SCRIPT</varname> - это команда для установки
- выполнимых скриптов.</para>
- </listitem>
+ <listitem>
+ <para><varname>INSTALL_SCRIPT</varname> - это команда для
+ установки выполнимых скриптов.</para>
+ </listitem>
- <listitem>
- <para><varname>INSTALL_LIB</varname> - это команда для установки
- динамических библиотек.</para>
- </listitem>
+ <listitem>
+ <para><varname>INSTALL_LIB</varname> - это команда для
+ установки динамических библиотек.</para>
+ </listitem>
- <listitem>
- <para><varname>INSTALL_KLD</varname> - это команда для установки
- загружаемых модулей ядра. Некоторые архитектуры предпочитают,
- чтобы для модулей сохранялись отладочные сведения, по этой
- причине используйте эту команду вместо
- <varname>INSTALL_PROGRAM</varname>.</para>
- </listitem>
+ <listitem>
+ <para><varname>INSTALL_KLD</varname> - это команда для
+ установки загружаемых модулей ядра. Некоторые
+ архитектуры предпочитают, чтобы для модулей сохранялись
+ отладочные сведения, по этой причине используйте эту
+ команду вместо <varname>INSTALL_PROGRAM</varname>.</para>
+ </listitem>
- <listitem>
- <para><varname>INSTALL_DATA</varname> - это команда для установки
- совместно используемых файлов данных.</para>
- </listitem>
+ <listitem>
+ <para><varname>INSTALL_DATA</varname> - это команда для
+ установки совместно используемых файлов данных.</para>
+ </listitem>
- <listitem>
- <para><varname>INSTALL_MAN</varname> - это команда для установки
- страниц Справочника и другой документации (никаких файлов она не
- сжимает).</para>
- </listitem>
- </itemizedlist>
+ <listitem>
+ <para><varname>INSTALL_MAN</varname> - это команда для
+ установки страниц Справочника и другой документации
+ (никаких файлов она не сжимает).</para>
+ </listitem>
+ </itemizedlist>
- <para>В основе работы этих макросов лежит команда
- <command>install</command> со всеми соответствующими флагами.
- Смотрите пример их использования ниже.</para>
- </sect2>
-
- <sect2 xml:id="install-strip">
- <title>Удаление отладочной информации в бинарных файлах и
- динамических библиотеках</title>
-
- <para>Не удаляйте отладочную информацию из бинарных файлов вручную,
- если вы это делали. Во всех двоичных файлах отладочная информация
- должна быть удалена, и макрос <varname>INSTALL_PROGRAM</varname>
- выполнит установку и удаление отладочной информации одновременно
- (обратитесь к следующему разделу). Макрос
- <varname>INSTALL_LIB</varname> делает то же самое для
- динамических библиотек.</para>
-
- <para>Если вам нужно удалить отладочную информацию из файла без
- использования макросов <varname>INSTALL_PROGRAM</varname> и
- <varname>INSTALL_LIB</varname>, то это можно сделать при помощи
- <varname>${STRIP_CMD}</varname>. Обычно это делается внутри цели
- <literal>post-install</literal>. К примеру:</para>
-
- <programlisting>post-install:
+ <para>В основе работы этих макросов лежит команда
+ <command>install</command> со всеми соответствующими флагами.
+ Смотрите пример их использования ниже.</para>
+ </sect2>
+
+ <sect2 xml:id="install-strip">
+ <title>Удаление отладочной информации в бинарных файлах и
+ динамических библиотеках</title>
+
+ <para>Не удаляйте отладочную информацию из бинарных файлов
+ вручную, если вы это делали. Во всех двоичных файлах
+ отладочная информация должна быть удалена, и макрос
+ <varname>INSTALL_PROGRAM</varname> выполнит установку и
+ удаление отладочной информации одновременно (обратитесь к
+ следующему разделу). Макрос <varname>INSTALL_LIB</varname>
+ делает то же самое для динамических библиотек.</para>
+
+ <para>Если вам нужно удалить отладочную информацию из файла без
+ использования макросов <varname>INSTALL_PROGRAM</varname> и
+ <varname>INSTALL_LIB</varname>, то это можно сделать при
+ помощи <varname>${STRIP_CMD}</varname>. Обычно это делается
+ внутри цели <literal>post-install</literal>. К
+ примеру:</para>
+
+ <programlisting>post-install:
${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/xdl</programlisting>
- <para>Удаление отладочной информации из нескольких
- файлов:</para>
-
- <programlisting>post-install:
- .for l in geometry media body track world
- ${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/lib${PORTNAME}-${l}.so.0
- .endfor</programlisting>
-
- <para>Для проверки того, удалена ли отладочная информация из
- файла, используйте &man.file.1;. Для двоичных файлов
- &man.file.1; печатает <literal>stripped</literal> или
- <literal>not stripped</literal>. Кроме того, &man.strip.1;
- определяет, была ли уже удалена из программы отладочная
- информация, и в этом случае просто завершает свою работу.</para>
- </sect2>
-
- <sect2 xml:id="install-copytree">
- <title>Установка целого дерева файлов</title>
-
- <para>Иногда должно быть установлено большое количество файлов
- с сохранением их иерархической организации. Например, копирование
- дерева каталогов целиком из <varname>WRKSRC</varname> в целевой
- каталог внутри <varname>PREFIX</varname>. Обратите внимание,
- что <varname>PREFIX</varname>, <varname>EXAMPLESDIR</varname>,
- <varname>DATADIR</varname> и другие переменные пути всегда
- должны предваряться <varname>STAGEDIR</varname>, чтобы не
- ломать staging (смотрите <xref linkend="staging"/>).</para>
-
- <para>Для этой ситуации существует два макроса. Преимущество от
- использования этих макросов вместо команды <command>cp</command>
- в том, что они гарантируют установку правильного владельца и прав
- на конечные файлы. Первый макрос, <varname>COPYTREE_BIN</varname>,
- делает все устанавливаемые файлы исполняемыми, что подходит для
- установки в <filename>PREFIX/bin</filename>.
- Второй макрос, <varname>COPYTREE_SHARE</varname>, не устанавливает
- на файлы права исполнения, и, таким образом, подходит для установки
- файлов внутри каталога
- <filename>PREFIX/share</filename>.</para>
-
- <programlisting>post-install:
+ <para>Удаление отладочной информации из нескольких
+ файлов:</para>
+
+ <programlisting>post-install:
+ .for l in geometry media body track world
+ ${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/lib${PORTNAME}-${l}.so.0
+ .endfor</programlisting>
+
+ <para>Для проверки того, удалена ли отладочная информация из
+ файла, используйте &man.file.1;. Для двоичных файлов
+ &man.file.1; печатает <literal>stripped</literal> или
+ <literal>not stripped</literal>. Кроме того, &man.strip.1;
+ определяет, была ли уже удалена из программы отладочная
+ информация, и в этом случае просто завершает свою
+ работу.</para>
+ </sect2>
+
+ <sect2 xml:id="install-copytree">
+ <title>Установка целого дерева файлов</title>
+
+ <para>Иногда должно быть установлено большое количество файлов
+ с сохранением их иерархической организации. Например,
+ копирование дерева каталогов целиком из
+ <varname>WRKSRC</varname> в целевой каталог внутри
+ <varname>PREFIX</varname>. Обратите внимание, что
+ <varname>PREFIX</varname>, <varname>EXAMPLESDIR</varname>,
+ <varname>DATADIR</varname> и другие переменные пути всегда
+ должны предваряться <varname>STAGEDIR</varname>, чтобы не
+ ломать staging (смотрите <xref linkend="staging"/>).</para>
+
+ <para>Для этой ситуации существует два макроса. Преимущество
+ от использования этих макросов вместо команды
+ <command>cp</command> в том, что они гарантируют установку
+ правильного владельца и прав на конечные файлы. Первый
+ макрос, <varname>COPYTREE_BIN</varname>, делает все
+ устанавливаемые файлы исполняемыми, что подходит для
+ установки в <filename>PREFIX/bin</filename>. Второй макрос,
+ <varname>COPYTREE_SHARE</varname>, не устанавливает на файлы
+ права исполнения, и, таким образом, подходит для установки
+ файлов внутри каталога
+ <filename>PREFIX/share</filename>.</para>
+
+ <programlisting>post-install:
${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
(cd ${WRKSRC}/examples &amp;&amp; ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR})</programlisting>
- <para>В этом примере устанавливается содержимое каталога
- <filename>examples</filename> из установочных файлов производителя
- в надлежащее место для примеров вашего порта.</para>
+ <para>В этом примере устанавливается содержимое каталога
+ <filename>examples</filename> из установочных файлов
+ производителя в надлежащее место для примеров вашего
+ порта.</para>
- <programlisting>post-install:
+ <programlisting>post-install:
${MKDIR} ${STAGEDIR}${DATADIR}/summer
(cd ${WRKSRC}/temperatures &amp;&amp; ${COPYTREE_SHARE} "June July August" ${STAGEDIR}${DATADIR}/summer)</programlisting>
- <para>А в этом примере будут установлены данные летних месяцев в
- подкаталог <filename>summer</filename> каталога
- <filename>DATADIR</filename>.</para>
+ <para>А в этом примере будут установлены данные летних месяцев
+ в подкаталог <filename>summer</filename> каталога
+ <filename>DATADIR</filename>.</para>
- <para>В качестве третьего параметра в макросе
- <varname>COPYTREE_*</varname> можно передать дополнительные
- параметры <command>find</command>. Например, чтобы в первом
- примере установить все файлы кроме файлов Makefile, можно
- использовать следующую команду.</para>
+ <para>В качестве третьего параметра в макросе
+ <varname>COPYTREE_*</varname> можно передать дополнительные
+ параметры <command>find</command>. Например, чтобы в первом
+ примере установить все файлы кроме файлов Makefile, можно
+ использовать следующую команду.</para>
- <programlisting>post-install:
+ <programlisting>post-install:
${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
(cd ${WRKSRC}/examples &amp;&amp; \
${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR} "! -name Makefile")</programlisting>
- <para>Эти макросы не производят добавление устанавливаемых
- файлов в <filename>pkg-plist</filename>. Они должны быть
- добавлены туда вручную. Необязательные файлы документации
- (<varname>PORTDOCS</varname>, смотрите
- <xref linkend="install-documentation"/>) и примеров
- (<varname>PORTEXAMPLES</varname>) всегда должны предваряться
- в <filename>pkg-plist</filename> префиксами
- <literal>%%PORTDOCS%%</literal> или
- <literal>%%PORTEXAMPLES%%</literal>.</para>
- </sect2>
-
- <sect2 xml:id="install-documentation">
- <title>Установка дополнительной документации</title>
-
- <para>Если с вашим программным обеспечением поставляется некоторая
- документация, отличающаяся от стандартных страниц Справочника и
- файлов info, которая, как вы думаете, будет полезна пользователям,
- установите ее в каталог
- <filename>PREFIX/share/doc</filename>. Это может
- быть сделано, как и в предыдущем разделе, в цели
- <buildtarget>post-install</buildtarget>.</para>
-
- <para>Создайте для вашего порта новый каталог. Имя каталога должно
- соответствовать тому, что представляет из себя порт. Обычно это
- означает <varname>PORTNAME</varname>. Однако, если
- вы думаете, что пользователь захочет иметь разные версии порта,
- установленные одновременно, то вы можете использовать полное имя
- <varname>PKGNAME</varname>.</para>
-
- <para>Поскольку устанавливаются только файлы, перечисленные в
- <filename>pkg-plist</filename>, безопасным способом будет
- устанавливать документацию в <varname>STAGEDIR</varname>
- всегда (смотрите <xref linkend="staging"/>). Следовательно,
- блоки <literal>.if</literal> нужны только для файлов
- достаточно большого размера, установка которых влечёт
- значительные накладные расходы на операции ввода/вывода.</para>
-
- <programlisting>post-install:
- ${MKDIR} ${STAGEDIR}${DOCSDIR}
- ${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${STAGEDIR}${DOCSDIR}</programlisting>
-
- <para>Вот несколько полезных переменных и то, как они преобразуются по
- умолчанию при использовании в <filename>Makefile</filename>:</para>
-
- <itemizedlist>
- <listitem>
- <para><varname>DATADIR</varname> преобразуется в
- <filename>PREFIX/share/PORTNAME</filename>.</para>
- </listitem>
-
- <listitem>
- <para><varname>DATADIR_REL</varname> преобразуется в
- <filename>share/PORTNAME</filename>.</para>
- </listitem>
+ <para>Эти макросы не производят добавление устанавливаемых
+ файлов в <filename>pkg-plist</filename>. Они должны быть
+ добавлены туда вручную. Необязательные файлы документации
+ (<varname>PORTDOCS</varname>, смотрите <xref
+ linkend="install-documentation"/>) и примеров
+ (<varname>PORTEXAMPLES</varname>) всегда должны предваряться
+ в <filename>pkg-plist</filename> префиксами
+ <literal>%%PORTDOCS%%</literal> или
+ <literal>%%PORTEXAMPLES%%</literal>.</para>
+ </sect2>
+
+ <sect2 xml:id="install-documentation">
+ <title>Установка дополнительной документации</title>
+
+ <para>Если с вашим программным обеспечением поставляется
+ некоторая документация, отличающаяся от стандартных страниц
+ Справочника и файлов info, которая, как вы думаете, будет
+ полезна пользователям, установите ее в каталог
+ <filename>PREFIX/share/doc</filename>. Это может быть
+ сделано, как и в предыдущем разделе, в цели
+ <buildtarget>post-install</buildtarget>.</para>
+
+ <para>Создайте для вашего порта новый каталог. Имя каталога
+ должно соответствовать тому, что представляет из себя порт.
+ Обычно это означает <varname>PORTNAME</varname>. Однако,
+ если вы думаете, что пользователь захочет иметь разные версии
+ порта, установленные одновременно, то вы можете использовать
+ полное имя <varname>PKGNAME</varname>.</para>
+
+ <para>Поскольку устанавливаются только файлы, перечисленные в
+ <filename>pkg-plist</filename>, безопасным способом будет
+ устанавливать документацию в <varname>STAGEDIR</varname>
+ всегда (смотрите <xref linkend="staging"/>). Следовательно,
+ блоки <literal>.if</literal> нужны только для файлов
+ достаточно большого размера, установка которых влечёт
+ значительные накладные расходы на операции
+ ввода/вывода.</para>
+
+ <programlisting>post-install:
+ ${MKDIR} ${STAGEDIR}${DOCSDIR}
+ ${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${STAGEDIR}${DOCSDIR}</programlisting>
+
+ <para>Вот несколько полезных переменных и то, как они
+ преобразуются по умолчанию при использовании в
+ <filename>Makefile</filename>:</para>
- <listitem>
- <para><varname>DOCSDIR</varname> преобразуется в
- <filename>PREFIX/share/doc/PORTNAME</filename>.</para>
- </listitem>
+ <itemizedlist>
+ <listitem>
+ <para><varname>DATADIR</varname> преобразуется в
+ <filename>PREFIX/share/PORTNAME</filename>.</para>
+ </listitem>
- <listitem>
- <para><varname>DOCSDIR_REL</varname> преобразуется в
- <filename>share/doc/PORTNAME</filename>.</para>
- </listitem>
+ <listitem>
+ <para><varname>DATADIR_REL</varname> преобразуется в
+ <filename>share/PORTNAME</filename>.</para>
+ </listitem>
- <listitem>
- <para><varname>EXAMPLESDIR</varname> преобразуется в
- <filename>PREFIX/share/examples/PORTNAME</filename>.</para>
- </listitem>
+ <listitem>
+ <para><varname>DOCSDIR</varname> преобразуется в
+ <filename>PREFIX/share/doc/PORTNAME</filename>.</para>
+ </listitem>
- <listitem>
- <para><varname>EXAMPLESDIR_REL</varname> преобразуется в
- <filename>share/examples/PORTNAME</filename>.</para>
- </listitem>
- </itemizedlist>
+ <listitem>
+ <para><varname>DOCSDIR_REL</varname> преобразуется в
+ <filename>share/doc/PORTNAME</filename>.</para>
+ </listitem>
- <note>
- <para>Параметр <literal>DOCS</literal> управляет установкой
- дополнительной документации в <varname>DOCSDIR</varname>. Это
- не относится к стандартным страницам справочника и страницам info.
- Все, что устанавливается в <varname>DATADIR</varname> и
- <varname>EXAMPLESDIR</varname>, соответственно управляется
- через параметры <literal>DATA</literal> и
- <literal>EXAMPLES</literal>.</para>
- </note>
+ <listitem>
+ <para><varname>EXAMPLESDIR</varname> преобразуется в
+ <filename>PREFIX/share/examples/PORTNAME</filename>.</para>
+ </listitem>
- <para>Эти переменные экспортируются в <varname>PLIST_SUB</varname>.
- Их значения появятся там в виде имён путей относительно
- <filename>PREFIX</filename>, если это возможно.
- То есть <filename>share/doc/PORTNAME</filename>
- в списке сборки по умолчанию будет заменен на
- <literal>%%DOCSDIR%%</literal>, и так далее. (Дополнительную
- информацию о подстановке в <filename>pkg-plist</filename> можно
- найти <link linkend="plist-sub">здесь</link>.)</para>
+ <listitem>
+ <para><varname>EXAMPLESDIR_REL</varname> преобразуется в
+ <filename>share/examples/PORTNAME</filename>.</para>
+ </listitem>
+ </itemizedlist>
- <para>Все условно устанавливаемые файлы и каталоги с документацией
- должны быть перечислены в файле <filename>pkg-plist</filename> с
- префиксом <literal>%%PORTDOCS%%</literal>, например:</para>
+ <note>
+ <para>Параметр <literal>DOCS</literal> управляет установкой
+ дополнительной документации в <varname>DOCSDIR</varname>.
+ Это не относится к стандартным страницам справочника и
+ страницам info. Все, что устанавливается в
+ <varname>DATADIR</varname> и
+ <varname>EXAMPLESDIR</varname>, соответственно управляется
+ через параметры <literal>DATA</literal> и
+ <literal>EXAMPLES</literal>.</para>
+ </note>
- <programlisting>%%PORTDOCS%%%%DOCSDIR%%/AUTHORS
+ <para>Эти переменные экспортируются в
+ <varname>PLIST_SUB</varname>. Их значения появятся там в
+ виде имён путей относительно <filename>PREFIX</filename>,
+ если это возможно. То есть
+ <filename>share/doc/PORTNAME</filename> в списке сборки по
+ умолчанию будет заменен на <literal>%%DOCSDIR%%</literal>, и
+ так далее. (Дополнительную информацию о подстановке в
+ <filename>pkg-plist</filename> можно найти <link
+ linkend="plist-sub">здесь</link>.)</para>
+
+ <para>Все условно устанавливаемые файлы и каталоги с
+ документацией должны быть перечислены в файле
+ <filename>pkg-plist</filename> с префиксом
+ <literal>%%PORTDOCS%%</literal>, например:</para>
+
+ <programlisting>%%PORTDOCS%%%%DOCSDIR%%/AUTHORS
%%PORTDOCS%%%%DOCSDIR%%/CONTACT
%%PORTDOCS%%@dirrm %%DOCSDIR%%</programlisting>
- <para>В качестве альтернативы перечислению файлов документации в файле
- <filename>pkg-plist</filename>, порт может указать в переменной
- <varname>PORTDOCS</varname> список имён файлов и глобальных шаблонов
- командного процессора для добавления в окончательный список сборки.
- Имена будут задаваться относительно <varname>DOCSDIR</varname>.
- Таким образом, порт, использующий <varname>PORTDOCS</varname> и
- нестандартное местоположение документации, должен задавать
- соответствующим образом и <varname>DOCSDIR</varname>. Если каталог
- указан в <varname>PORTDOCS</varname> или соответствует шаблону для
- этой переменной, то полное поддерево с входящими в него файлами и
- каталогами будет регистрироваться в окончательном списке сборки.
- Если параметр <literal>DOCS</literal> не задан, то файлы и каталоги,
- перечисленные в <varname>PORTDOCS</varname>, не будут установлены и
- добавлены в список сборки порта. Установка документации в
- <varname>PORTDOCS</varname>, как это показано выше, остаётся за
- самим портом. Типичный пример использования
- <varname>PORTDOCS</varname> выглядит следующим образом:</para>
-
- <programlisting>PORTDOCS= README.* ChangeLog docs/*</programlisting>
-
- <note>
- <para>Эквивалентами <varname>PORTDOCS</varname> для файлов,
- устанавливаемых в <varname>DATADIR</varname> и
- <varname>EXAMPLESDIR</varname> являются <varname>PORTDATA</varname>
- и <varname>PORTEXAMPLES</varname> соответственно.</para>
-
- <para>Во время установки выводится содержимое
- <filename>pkg-message</filename>. За подробной информацией
- обратитесь к <link linkend="porting-message">разделу об
- использовании <filename>pkg-message</filename></link>.
- Файл <filename>pkg-message</filename> не нужно добавлять в
- <filename>pkg-plist</filename>.</para>
- </note>
- </sect2>
-
- <sect2 xml:id="install-subdirs">
- <title>Подкаталоги внутри PREFIX</title>
-
- <para>Попробуйте поместить все файлы порта в правильных подкаталогах
- каталога <varname>PREFIX</varname>. Некоторые порты игнорируют все
- установки и помещают все в подкаталог с именем порта, что
- неправильно. Также многие порты помещают все, кроме бинарных файлов,
- файлов заголовков и страниц Справочника, в подкаталог каталога
- <filename>lib</filename>, что не очень хорошо работает с подходом
- BSD. Многие файлы должны быть перемещены в одно из следующих
- местоположений: <filename>etc</filename>
- (настроечные/конфигурационные файлы), <filename>libexec</filename>
- (выполнимые файлы, запускаемые из других программ),
- <filename>sbin</filename> (исполнимые файлы для
- администраторов/менеджеров системы), <filename>info</filename>
- (документация в формате info для просмотрщика info) или
- <filename>share</filename> (независимые от архитектуры файлы).
- Обратитесь к &man.hier.7; для прояснения деталей; правила,
- покрывающие <filename>/usr</filename>, достаточно хорошо подходят
- также и к <filename>/usr/local</filename>. Исключением являются
- порты, имеющие дело с <quote>новостями</quote> USENET. Они могут
- использовать каталог
- <filename>PREFIX/news</filename> для установки
- своих файлов.</para>
- </sect2>
-
- </sect1>
-
- </chapter>
+ <para>В качестве альтернативы перечислению файлов документации
+ в файле <filename>pkg-plist</filename>, порт может указать в
+ переменной <varname>PORTDOCS</varname> список имён файлов и
+ глобальных шаблонов командного процессора для добавления в
+ окончательный список сборки. Имена будут задаваться
+ относительно <varname>DOCSDIR</varname>. Таким образом,
+ порт, использующий <varname>PORTDOCS</varname> и
+ нестандартное местоположение документации, должен задавать
+ соответствующим образом и <varname>DOCSDIR</varname>. Если
+ каталог указан в <varname>PORTDOCS</varname> или
+ соответствует шаблону для этой переменной, то полное
+ поддерево с входящими в него файлами и каталогами будет
+ регистрироваться в окончательном списке сборки. Если
+ параметр <literal>DOCS</literal> не задан, то файлы и
+ каталоги, перечисленные в <varname>PORTDOCS</varname>, не
+ будут установлены и добавлены в список сборки порта.
+ Установка документации в <varname>PORTDOCS</varname>, как это
+ показано выше, остаётся за самим портом. Типичный пример
+ использования <varname>PORTDOCS</varname> выглядит следующим
+ образом:</para>
+
+ <programlisting>PORTDOCS= README.* ChangeLog docs/*</programlisting>
+ <note>
+ <para>Эквивалентами <varname>PORTDOCS</varname> для файлов,
+ устанавливаемых в <varname>DATADIR</varname> и
+ <varname>EXAMPLESDIR</varname> являются
+ <varname>PORTDATA</varname> и
+ <varname>PORTEXAMPLES</varname> соответственно.</para>
+
+ <para>Во время установки выводится содержимое
+ <filename>pkg-message</filename>. За подробной информацией
+ обратитесь к <link linkend="porting-message">разделу об
+ использовании <filename>pkg-message</filename></link>.
+ Файл <filename>pkg-message</filename> не нужно добавлять в
+ <filename>pkg-plist</filename>.</para>
+ </note>
+ </sect2>
+
+ <sect2 xml:id="install-subdirs">
+ <title>Подкаталоги внутри PREFIX</title>
+
+ <para>Попробуйте поместить все файлы порта в правильных
+ подкаталогах каталога <varname>PREFIX</varname>. Некоторые
+ порты игнорируют все установки и помещают все в подкаталог с
+ именем порта, что неправильно. Также многие порты помещают
+ все, кроме бинарных файлов, файлов заголовков и страниц
+ Справочника, в подкаталог каталога <filename>lib</filename>,
+ что не очень хорошо работает с подходом BSD. Многие файлы
+ должны быть перемещены в одно из следующих местоположений:
+ <filename>etc</filename>
+ (настроечные/конфигурационные файлы),
+ <filename>libexec</filename> (выполнимые файлы, запускаемые
+ из других программ), <filename>sbin</filename> (исполнимые
+ файлы для администраторов/менеджеров системы),
+ <filename>info</filename> (документация в формате info для
+ просмотрщика info) или <filename>share</filename>
+ (независимые от архитектуры файлы). Обратитесь к
+ &man.hier.7; для прояснения деталей; правила, покрывающие
+ <filename>/usr</filename>, достаточно хорошо подходят также и
+ к <filename>/usr/local</filename>. Исключением являются
+ порты, имеющие дело с <quote>новостями</quote> USENET. Они
+ могут использовать каталог <filename>PREFIX/news</filename>
+ для установки своих файлов.</para>
+ </sect2>
+ </sect1>
+</chapter>
diff --git a/ru_RU.KOI8-R/books/porters-handbook/new-port/chapter.xml b/ru_RU.KOI8-R/books/porters-handbook/new-port/chapter.xml
index 4229dce1e3..f8e432801d 100644
--- a/ru_RU.KOI8-R/books/porters-handbook/new-port/chapter.xml
+++ b/ru_RU.KOI8-R/books/porters-handbook/new-port/chapter.xml
@@ -7,41 +7,46 @@
Original revision: r43840
-->
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="own-port">
-
- <title>Как самому сделать новый порт</title>
-
- <para>Итак, вы интересуетесь, как создать собственный порт или
- обновить существующий? Великолепно!</para>
-
- <para>Ниже находятся некоторые указания по созданию нового порта для
- &os;. Если вы хотите обновить существующий порт, вы должны
- прочесть их, а затем <xref linkend="port-upgrading"/>.</para>
-
- <para>Если этот документ недостаточно подробен, вы должны обратиться к
- файлу <filename>/usr/ports/Mk/bsd.port.mk</filename>, который
- включается в make-файл каждого порта. Он хорошо прокомментирован, и
- даже если вы не занимаетесь хакингом make-файлов каждодневно, из него
- вы сможете узнать много нового. Кроме того, конкретные вопросы можно
- задать, послав письмо на адрес &a.ports;.</para>
-
- <note>
- <para>Только часть переменных
- (<varname><replaceable>VAR</replaceable></varname>), которые могут быть
- переопределены, описаны в этом документе. Большинство (если не все)
- описаны в начале файла <filename>/usr/ports/Mk/bsd.port.mk</filename>;
- остальные, скорее всего, тоже там описаны. Заметьте, что
- в этом файле используется нестандартная настройка шага табуляции:
- <application>Emacs</application> и <application>Vim</application>
- должны распознать это при загрузке файла. Как &man.vi.1;,
- так и &man.ex.1; могут быть настроены на использование
- правильного значения выдачей команды <command>:set tabstop=4</command>
- после загрузки файла.</para>
- </note>
-
- <para>
- Ищете, с чего бы начать попроще? Посмотрите на <link xlink:href="http://wiki.freebsd.org/WantedPorts">перечень запрошенных
- портов</link>, есть ли там такие, над которыми вы можете работать.
- </para>
- </chapter>
-
+<chapter xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
+ xml:id="own-port">
+
+ <title>Как самому сделать новый порт</title>
+
+ <para>Итак, вы интересуетесь, как создать собственный порт или
+ обновить существующий? Великолепно!</para>
+
+ <para>Ниже находятся некоторые указания по созданию нового порта
+ для &os;. Если вы хотите обновить существующий порт, вы должны
+ прочесть их, а затем <xref linkend="port-upgrading"/>.</para>
+
+ <para>Если этот документ недостаточно подробен, вы должны
+ обратиться к файлу
+ <filename>/usr/ports/Mk/bsd.port.mk</filename>, который
+ включается в make-файл каждого порта. Он хорошо
+ прокомментирован, и даже если вы не занимаетесь хакингом
+ make-файлов каждодневно, из него вы сможете узнать много нового.
+ Кроме того, конкретные вопросы можно задать, послав письмо на
+ адрес &a.ports;.</para>
+
+ <note>
+ <para>Только часть переменных
+ (<varname><replaceable>VAR</replaceable></varname>), которые
+ могут быть переопределены, описаны в этом документе.
+ Большинство (если не все) описаны в начале файла
+ <filename>/usr/ports/Mk/bsd.port.mk</filename>; остальные,
+ скорее всего, тоже там описаны. Заметьте, что в этом файле
+ используется нестандартная настройка шага табуляции:
+ <application>Emacs</application> и
+ <application>Vim</application> должны распознать это при
+ загрузке файла. Как &man.vi.1;, так и &man.ex.1; могут быть
+ настроены на использование правильного значения выдачей команды
+ <command>:set tabstop=4</command> после загрузки файла.</para>
+ </note>
+
+ <para>
+ Ищете, с чего бы начать попроще? Посмотрите на <link
+ xlink:href="http://wiki.freebsd.org/WantedPorts">перечень
+ запрошенных портов</link>, есть ли там такие, над которыми вы
+ можете работать.</para>
+</chapter>
diff --git a/ru_RU.KOI8-R/books/porters-handbook/pkg-files/chapter.xml b/ru_RU.KOI8-R/books/porters-handbook/pkg-files/chapter.xml
index 78b5378cff..18d78bc50a 100644
--- a/ru_RU.KOI8-R/books/porters-handbook/pkg-files/chapter.xml
+++ b/ru_RU.KOI8-R/books/porters-handbook/pkg-files/chapter.xml
@@ -7,198 +7,207 @@
Original revision: r43840
-->
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="pkg-files">
+<chapter xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
+ xml:id="pkg-files">
- <title>Файлы <filename>pkg-*</filename></title>
+ <title>Файлы <filename>pkg-*</filename></title>
<para>Есть несколько приёмов работы с файлами
- <filename>pkg-*</filename>, которые мы ещё не
- описали, но они иногда могут быть очень кстати.</para>
-
- <sect1 xml:id="porting-message">
- <title><filename>pkg-message</filename></title>
-
- <para>Если вам нужно вывести сообщение для человека, устанавливающего
- приложение, то вы можете поместить сообщение в файл
- <filename>pkg-message</filename>. Эта возможность часто оказывается
- полезной для вывода дополнительных шагов установки, которые нужно
- предпринять после выполнения команды <command>pkg install</command>,
- или для вывода информации о лицензировании.</para>
-
- <para>Если должны выводиться некоторые строки о knobs времени построения
- или предупреждения, используйте <varname>ECHO_MSG</varname>. Файл
- <filename>pkg-message</filename> только для послеустановочных шагов.
- Также следует иметь в виду различие между <varname>ECHO_MSG</varname>
- и <varname>ECHO_CMD</varname>. Первое предназначено для вывода на
- экран информационного текста, а второе для конвейера команд:</para>
-
- <programlisting>update-etc-shells:
+ <filename>pkg-*</filename>, которые мы ещё не описали, но они
+ иногда могут быть очень кстати.</para>
+
+ <sect1 xml:id="porting-message">
+ <title><filename>pkg-message</filename></title>
+
+ <para>Если вам нужно вывести сообщение для человека,
+ устанавливающего приложение, то вы можете поместить сообщение в
+ файл <filename>pkg-message</filename>. Эта возможность часто
+ оказывается полезной для вывода дополнительных шагов установки,
+ которые нужно предпринять после выполнения команды
+ <command>pkg install</command>, или для вывода информации о
+ лицензировании.</para>
+
+ <para>Если должны выводиться некоторые строки о knobs времени
+ построения или предупреждения, используйте
+ <varname>ECHO_MSG</varname>. Файл
+ <filename>pkg-message</filename> только для послеустановочных
+ шагов. Также следует иметь в виду различие между
+ <varname>ECHO_MSG</varname> и <varname>ECHO_CMD</varname>.
+ Первое предназначено для вывода на экран информационного
+ текста, а второе для конвейера команд:</para>
+
+ <programlisting>update-etc-shells:
@${ECHO_MSG} "updating /etc/shells"
@${CP} /etc/shells /etc/shells.bak
@( ${GREP} -v ${PREFIX}/bin/bash /etc/shells.bak; \
${ECHO_CMD} ${PREFIX}/bin/bash) &gt;/etc/shells
@${RM} /etc/shells.bak</programlisting>
- <note>
- <para>Файл <filename>pkg-message</filename> не нужно добавлять в
- <filename>pkg-plist</filename>.</para>
- </note>
- </sect1>
-
- <sect1 xml:id="pkg-install">
- <title><filename>pkg-install</filename></title>
-
- <para>Если при установке бинарного пакета по команде
- <command>pkg add</command> или <command>pkg install</command>
- вашему порту нужно выполнить какие-то команды, то вы можете
- это сделать с помощью скрипта <filename>pkg-install</filename>.
- Этот скрипт будет автоматически добавлен к пакету и будет
- дважды запускаться командой <command>pkg</command>: первый раз
- в виде <literal>&dollar;{SH} pkg-install &dollar;{PKGNAME}
- PRE-INSTALL</literal>, а второй раз как
- <literal>&dollar;{SH} {PKGNAME} POST-INSTALL</literal>.
- Для распознавания того, в каком режиме запущен скрипт, можно
- использовать параметр <literal>&dollar;2</literal>. Переменная
- окружения <envar>PKG_PREFIX</envar> будет принимать значение,
- соответствующее каталогу, в который устанавливается пакет.</para>
-
- <note>
- <para>Этот скрипт не запускается автоматически, если вы
- устанавливаете порт командой <command>make install</command>.
- Если же вам действительно необходимо его запустить, то запустите
- его явно из файла <filename>Makefile</filename> порта строкой
- вида <literal>PKG_PREFIX=&dollar;{PREFIX} &dollar;{SH} &dollar;
- {PKGINSTALL}&dollar;{PKGNAME} PRE-INSTALL</literal>.</para>
- </note>
- </sect1>
-
- <sect1 xml:id="pkg-deinstall">
- <title><filename>pkg-deinstall</filename></title>
-
- <para>Этот скрипт вызывается при удалении пакета.</para>
-
- <para>Этот скрипт будет дважды запускаться командой
- <command>pkg delete</command>.
- Первый раз как <literal>&dollar;{SH} pkg-deinstall
- &dollar;{PKGNAME} DEINSTALL</literal>, а второй раз как
- <literal>&dollar;{SH} pkg-deinstall &dollar;{PKGNAME}
- POST-DEINSTALL</literal>.</para>
- </sect1>
-
- <sect1 xml:id="pkg-names">
- <title xml:id="porting-pkgfiles">Изменение имён файлов
- <filename>pkg-*</filename></title>
-
- <para>Все имена файлов
- <filename>pkg-*</filename>
- определяются с помощью переменных, так что вы можете изменить их,
- если это нужно, в вашем файле <filename>Makefile</filename>. Это
- особенно полезно, если вы используете одни и те же файлы
- <filename>pkg-*</filename>
- совместно между несколькими портами или
- пишете в один из вышеперечисленных файлов (в главе о <link linkend="porting-wrkdir">записи в каталоги, отличные от
- <varname>WRKDIR</varname></link> объяснено, почему не рекомендуется
- осуществлять запись непосредственно в файлы
- <filename>pkg-*</filename>.</para>
-
- <para>Вот список имён переменных и их значений по умолчанию. (Значение
- <varname>PKGDIR</varname> по умолчанию равно
- <varname>${MASTERDIR}</varname>.)</para>
-
- <informaltable frame="none" pgwide="0">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Переменная</entry>
-
- <entry>Значение по умолчанию</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>DESCR</varname></entry>
- <entry><literal>${PKGDIR}/pkg-descr</literal></entry>
- </row>
-
- <row>
- <entry><varname>PLIST</varname></entry>
- <entry><literal>${PKGDIR}/pkg-plist</literal></entry>
- </row>
-
- <row>
- <entry><varname>PKGINSTALL</varname></entry>
- <entry><literal>${PKGDIR}/pkg-install</literal></entry>
- </row>
-
- <row>
- <entry><varname>PKGMESSAGE</varname></entry>
- <entry><literal>${PKGDIR}/pkg-message</literal></entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>Пожалуйста, изменяйте значения этих переменных, а не
- переопределяйте <varname>PKG_ARGS</varname>. Если вы измените
- значение переменных <varname>PKG_ARGS</varname>, то эти файлы при
- установке из порта будут установлены в каталог
- <filename>/var/db/pkg</filename> некорректно.</para>
- </sect1>
-
- <sect1 xml:id="using-sub-files">
- <title>Использование <varname>SUB_FILES</varname> и
- <varname>SUB_LIST</varname></title>
-
- <para>Переменные <varname>SUB_FILES</varname> и
- <varname>SUB_LIST</varname> подходят для задания в файлах порта
- динамических значений, таких как <varname>PREFIX</varname> установки
- в <filename>pkg-message</filename>.</para>
-
- <para>В переменной <varname>SUB_FILES</varname> указывается перечень
- файлов для автоматического изменения. Каждый
- <replaceable>file</replaceable> из перечня <varname>SUB_FILES</varname>
- обязан иметь соответствующий
- <filename>file.in</filename>,
- присутствующий в <varname>FILESDIR</varname>. Измененная версия
- будет создана в <varname>WRKDIR</varname>. Файлы, определенные в
- качестве значения <varname>USE_RC_SUBR</varname> (или устаревшего
- <varname>USE_RCORDER</varname>), автоматически добавляются в
- <varname>SUB_FILES</varname>. Для файлов
- <filename>pkg-message</filename>, <filename>pkg-install</filename>
- и <filename>pkg-deinstall</filename>
- устанавливается соответствующая переменная Makefile, указывающая на
- обработанную версию.</para>
-
- <para>Переменная <varname>SUB_LIST</varname> содержит перечень пар
- <literal>VAR=VALUE</literal>. В каждом файле из
- <varname>SUB_FILES</varname> для каждой пары будет произведена
- замена <literal>%%VAR%%</literal> на <literal>VALUE</literal>.
- Некоторые общие пары определяются автоматически:
- <varname>PREFIX</varname>, <varname>LOCALBASE</varname>,
- <varname>DATADIR</varname>,
- <varname>DOCSDIR</varname>, <varname>EXAMPLESDIR</varname>,
- <varname>WWWDIR</varname> и <varname>ETCDIR</varname>.
- Любая строка, начинающаяся с <literal>@comment</literal>, будет
- удалена из конечного файла после подстановки переменной.</para>
-
- <para>В следующем примере в <filename>pkg-message</filename>
- будет сделана замена <literal>%%ARCH%%</literal> на системную
- архитектуру:</para>
-
- <programlisting>SUB_FILES= pkg-message
-SUB_LIST= ARCH=${ARCH}</programlisting>
-
- <para>Обратите внимание, что в этом примере в <varname>FILESDIR</varname>
- обязательно существование файла <filename>pkg-message.in</filename>.
- </para>
-
- <para>Пример хорошего <filename>pkg-message.in</filename>:</para>
-
- <programlisting>Now it's time to configure this package.
+ <note>
+ <para>Файл <filename>pkg-message</filename> не нужно добавлять в
+ <filename>pkg-plist</filename>.</para>
+ </note>
+ </sect1>
+
+ <sect1 xml:id="pkg-install">
+ <title><filename>pkg-install</filename></title>
+
+ <para>Если при установке бинарного пакета по команде
+ <command>pkg add</command> или <command>pkg install</command>
+ вашему порту нужно выполнить какие-то команды, то вы можете это
+ сделать с помощью скрипта <filename>pkg-install</filename>.
+ Этот скрипт будет автоматически добавлен к пакету и будет
+ дважды запускаться командой <command>pkg</command>: первый раз
+ в виде <literal>&dollar;{SH} pkg-install &dollar;{PKGNAME}
+ PRE-INSTALL</literal>, а второй раз как
+ <literal>&dollar;{SH} {PKGNAME} POST-INSTALL</literal>. Для
+ распознавания того, в каком режиме запущен скрипт, можно
+ использовать параметр <literal>&dollar;2</literal>. Переменная
+ окружения <envar>PKG_PREFIX</envar> будет принимать значение,
+ соответствующее каталогу, в который устанавливается
+ пакет.</para>
+
+ <note>
+ <para>Этот скрипт не запускается автоматически, если вы
+ устанавливаете порт командой <command>make install</command>.
+ Если же вам действительно необходимо его запустить, то
+ запустите его явно из файла <filename>Makefile</filename>
+ порта строкой вида <literal>PKG_PREFIX=&dollar;{PREFIX}
+ &dollar;{SH} &dollar; {PKGINSTALL}&dollar;{PKGNAME}
+ PRE-INSTALL</literal>.</para>
+ </note>
+ </sect1>
+
+ <sect1 xml:id="pkg-deinstall">
+ <title><filename>pkg-deinstall</filename></title>
+
+ <para>Этот скрипт вызывается при удалении пакета.</para>
+
+ <para>Этот скрипт будет дважды запускаться командой
+ <command>pkg delete</command>. Первый раз как
+ <literal>&dollar;{SH} pkg-deinstall &dollar;{PKGNAME}
+ DEINSTALL</literal>, а второй раз как <literal>&dollar;{SH}
+ pkg-deinstall &dollar;{PKGNAME}
+ POST-DEINSTALL</literal>.</para>
+ </sect1>
+
+ <sect1 xml:id="pkg-names">
+ <title xml:id="porting-pkgfiles">Изменение имён файлов
+ <filename>pkg-*</filename></title>
+
+ <para>Все имена файлов <filename>pkg-*</filename> определяются с
+ помощью переменных, так что вы можете изменить их, если это
+ нужно, в вашем файле <filename>Makefile</filename>. Это
+ особенно полезно, если вы используете одни и те же файлы
+ <filename>pkg-*</filename> совместно между несколькими портами
+ или пишете в один из вышеперечисленных файлов (в главе о <link
+ linkend="porting-wrkdir">записи в каталоги, отличные от
+ <varname>WRKDIR</varname></link> объяснено, почему не
+ рекомендуется осуществлять запись непосредственно в файлы
+ <filename>pkg-*</filename>.</para>
+
+ <para>Вот список имён переменных и их значений по умолчанию.
+ (Значение <varname>PKGDIR</varname> по умолчанию равно
+ <varname>${MASTERDIR}</varname>.)</para>
+
+ <informaltable frame="none" pgwide="0">
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>Переменная</entry>
+ <entry>Значение по умолчанию</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><varname>DESCR</varname></entry>
+ <entry><literal>${PKGDIR}/pkg-descr</literal></entry>
+ </row>
+
+ <row>
+ <entry><varname>PLIST</varname></entry>
+ <entry><literal>${PKGDIR}/pkg-plist</literal></entry>
+ </row>
+
+ <row>
+ <entry><varname>PKGINSTALL</varname></entry>
+ <entry><literal>${PKGDIR}/pkg-install</literal></entry>
+ </row>
+
+ <row>
+ <entry><varname>PKGDEINSTALL</varname></entry>
+ <entry><literal>${PKGDIR}/pkg-deinstall</literal></entry>
+ </row>
+
+ <row>
+ <entry><varname>PKGMESSAGE</varname></entry>
+ <entry><literal>${PKGDIR}/pkg-message</literal></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ <para>Пожалуйста, изменяйте значения этих переменных, а не
+ переопределяйте <varname>PKG_ARGS</varname>. Если вы измените
+ значение переменных <varname>PKG_ARGS</varname>, то эти файлы
+ при установке из порта будут установлены в каталог
+ <filename>/var/db/pkg</filename> некорректно.</para>
+ </sect1>
+
+ <sect1 xml:id="using-sub-files">
+ <title>Использование <varname>SUB_FILES</varname> и
+ <varname>SUB_LIST</varname></title>
+
+ <para>Переменные <varname>SUB_FILES</varname> и
+ <varname>SUB_LIST</varname> подходят для задания в файлах порта
+ динамических значений, таких как <varname>PREFIX</varname>
+ установки в <filename>pkg-message</filename>.</para>
+
+ <para>В переменной <varname>SUB_FILES</varname> указывается
+ перечень файлов для автоматического изменения. Каждый
+ <replaceable>file</replaceable> из перечня
+ <varname>SUB_FILES</varname> обязан иметь соответствующий
+ <filename>file.in</filename>, присутствующий в
+ <varname>FILESDIR</varname>. Измененная версия будет создана в
+ <varname>WRKDIR</varname>. Файлы, определенные в качестве
+ значения <varname>USE_RC_SUBR</varname> (или устаревшего
+ <varname>USE_RCORDER</varname>), автоматически добавляются в
+ <varname>SUB_FILES</varname>. Для файлов
+ <filename>pkg-message</filename>,
+ <filename>pkg-install</filename> и
+ <filename>pkg-deinstall</filename> устанавливается
+ соответствующая переменная Makefile, указывающая на
+ обработанную версию.</para>
+
+ <para>Переменная <varname>SUB_LIST</varname> содержит перечень
+ пар <literal>VAR=VALUE</literal>. В каждом файле из
+ <varname>SUB_FILES</varname> для каждой пары будет произведена
+ замена <literal>%%VAR%%</literal> на <literal>VALUE</literal>.
+ Некоторые общие пары определяются автоматически:
+ <varname>PREFIX</varname>, <varname>LOCALBASE</varname>,
+ <varname>DATADIR</varname>, <varname>DOCSDIR</varname>,
+ <varname>EXAMPLESDIR</varname>, <varname>WWWDIR</varname> и
+ <varname>ETCDIR</varname>. Любая строка, начинающаяся с
+ <literal>@comment</literal>, будет удалена из конечного файла
+ после подстановки переменной.</para>
+
+ <para>В следующем примере в <filename>pkg-message</filename>
+ будет сделана замена <literal>%%ARCH%%</literal> на системную
+ архитектуру:</para>
+
+ <programlisting>SUB_FILES= pkg-message
+SUB_LIST= ARCH=${ARCH}</programlisting>
+
+ <para>Обратите внимание, что в этом примере в
+ <varname>FILESDIR</varname> обязательно существование файла
+ <filename>pkg-message.in</filename>.</para>
+
+ <para>Пример хорошего <filename>pkg-message.in</filename>:</para>
+
+ <programlisting>Now it is time to configure this package.
Copy %%PREFIX%%/share/examples/putsy/%%ARCH%%.conf into your home directory
as .putsy.conf and edit it.</programlisting>
-
- </sect1>
- </chapter>
-
+ </sect1>
+</chapter>
diff --git a/ru_RU.KOI8-R/books/porters-handbook/plist/chapter.xml b/ru_RU.KOI8-R/books/porters-handbook/plist/chapter.xml
index bd6e088c04..ffc701f7d6 100644
--- a/ru_RU.KOI8-R/books/porters-handbook/plist/chapter.xml
+++ b/ru_RU.KOI8-R/books/porters-handbook/plist/chapter.xml
@@ -7,278 +7,292 @@
Original revision: r43840
-->
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="plist">
-
- <title>Продвинутые практики <filename>pkg-plist</filename></title>
- <sect1 xml:id="plist-sub">
- <title>Изменение содержимого <filename>pkg-plist</filename> в зависимости
- от make-переменных</title>
-
- <para>Некоторые порты, в частности, порты <literal>p5-</literal>, должны
- менять содержимое своих файлов <filename>pkg-plist</filename> в
- зависимости от того, с какими параметрами они были отконфигурированы
- (или в зависимости от версии языка <literal>perl</literal> в случае
- портов <literal>p5-</literal>). Чтобы облегчить этот
- процесс, любые вхождения ключевых слов <literal>%%OSREL%%</literal>,
- <literal>%%PERL_VER%%</literal> и <literal>%%PERL_VERSION%%</literal>
- в файле <filename>pkg-plist</filename> будут заменяться соответствующими
- значениями. Значением <literal>%%OSREL%%</literal> является номер
- версии операционной системы (например, <literal>4.9</literal>).
- <literal>%%PERL_VERSION%%</literal> и <literal>%%PERL_VER%%</literal>
- обозначают полный номер версии <command>perl</command> (например,
- <literal>5.8.9</literal>). Некоторые
- другие <literal>%%VARS%%</literal>, имеющие
- отношение к файлам документации порта, описаны в <link linkend="install-documentation">соответствующем разделе</link>.</para>
-
- <para>Если вам нужно сделать другие подстановки, вы можете указать в
- переменной <varname>PLIST_SUB</varname> список пар
- <literal>VAR=VALUE</literal>,
- и все вхождения <literal>%%VAR%%</literal>
- в файле <filename>pkg-plist</filename> будут заменяться на значение
- <replaceable>VALUE</replaceable>.</para>
-
- <para>Например, если у вас имеется порт, который устанавливает много
- файлов в каталог, зависящий от версии, вы можете задать нечто
- типа</para>
-
- <programlisting>OCTAVE_VERSION= 2.0.13
+<chapter xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
+ xml:id="plist">
+
+ <title>Продвинутые практики <filename>pkg-plist</filename></title>
+
+ <sect1 xml:id="plist-sub">
+ <title>Изменение содержимого <filename>pkg-plist</filename> в
+ зависимости от make-переменных</title>
+
+ <para>Некоторые порты, в частности, порты <literal>p5-</literal>,
+ должны менять содержимое своих файлов
+ <filename>pkg-plist</filename> в зависимости от того, с какими
+ параметрами они были отконфигурированы (или в зависимости от
+ версии языка <literal>perl</literal> в случае портов
+ <literal>p5-</literal>). Чтобы облегчить этот процесс, любые
+ вхождения ключевых слов <literal>%%OSREL%%</literal>,
+ <literal>%%PERL_VER%%</literal> и
+ <literal>%%PERL_VERSION%%</literal> в файле
+ <filename>pkg-plist</filename> будут заменяться
+ соответствующими значениями. Значением
+ <literal>%%OSREL%%</literal> является номер версии операционной
+ системы (например, <literal>4.9</literal>).
+ <literal>%%PERL_VERSION%%</literal> и
+ <literal>%%PERL_VER%%</literal> обозначают полный номер версии
+ <command>perl</command> (например, <literal>5.8.9</literal>).
+ Некоторые другие <literal>%%VARS%%</literal>, имеющие отношение
+ к файлам документации порта, описаны в <link
+ linkend="install-documentation">соответствующем
+ разделе</link>.</para>
+
+ <para>Если вам нужно сделать другие подстановки, вы можете
+ указать в переменной <varname>PLIST_SUB</varname> список пар
+ <literal>VAR=VALUE</literal>, и все вхождения
+ <literal>%%VAR%%</literal> в файле
+ <filename>pkg-plist</filename> будут заменяться на значение
+ <replaceable>VALUE</replaceable>.</para>
+
+ <para>Например, если у вас имеется порт, который устанавливает
+ много файлов в каталог, зависящий от версии, вы можете задать
+ нечто типа</para>
+
+ <programlisting>OCTAVE_VERSION= 2.0.13
PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION}</programlisting>
- <para>в файле <filename>Makefile</filename> и использовать
- <literal>%%OCTAVE_VERSION%%</literal> везде, где нужно указать
- номер версии в файле <filename>pkg-plist</filename>. Таким образом,
- при обновлении порта вам не нужно будет менять десятки (а в некоторых
- случаях и сотни) строк в файле <filename>pkg-plist</filename>.</para>
-
- <para>Если ваш порт устанавливает файлы в соответствии с установленными
- в порту опциями, то обычным способом управления является добавление
- префиксов <literal>%%TAG%%</literal> для строк
- <filename>pkg-plist</filename> с добавлением этого
- <literal>TAG</literal> в переменную <varname>PLIST_SUB</varname>
- внутри <filename>Makefile</filename> со специальным значением
- <literal>@comment</literal>, которое указывает пакетным инструментам
- игнорировать эти строки:</para>
-
- <programlisting>.if defined(WITH_X11)
+ <para>в файле <filename>Makefile</filename> и использовать
+ <literal>%%OCTAVE_VERSION%%</literal> везде, где нужно указать
+ номер версии в файле <filename>pkg-plist</filename>. Таким
+ образом, при обновлении порта вам не нужно будет менять десятки
+ (а в некоторых случаях и сотни) строк в файле
+ <filename>pkg-plist</filename>.</para>
+
+ <para>Если ваш порт устанавливает файлы в соответствии с
+ установленными в порту опциями, то обычным способом управления
+ является добавление префиксов <literal>%%TAG%%</literal> для
+ строк <filename>pkg-plist</filename> с добавлением этого
+ <literal>TAG</literal> в переменную
+ <varname>PLIST_SUB</varname> внутри
+ <filename>Makefile</filename> со специальным значением
+ <literal>@comment</literal>, которое указывает пакетным
+ инструментам игнорировать эти строки:</para>
+
+ <programlisting>.if defined(WITH_X11)
PLIST_SUB+= X11=""
.else
PLIST_SUB+= X11="@comment "
.endif</programlisting>
- <para>и в самом <filename>pkg-plist</filename>:</para>
-
- <programlisting>%%X11%%bin/foo-gui</programlisting>
-
- <para>Эта подстановка будет сделана
- между выполнением целей <buildtarget>pre-install</buildtarget> и
- <buildtarget>do-install</buildtarget>, посредством чтения файла
- <filename>PLIST</filename> и записью в файл
- <filename>TMPPLIST</filename>
- (по умолчанию это файл
- <filename>WRKDIR/.PLIST.mktmp</filename>). Так
- что если ваш порт строит <filename>PLIST</filename> на лету, делайте
- это во время или до выполнения цели
- <buildtarget>pre-install</buildtarget>. Кроме того, если вашему порту
- требуется отредактировать получающийся файл, делайте это в цели
- <buildtarget>post-install</buildtarget> изменением файла
- <filename>TMPPLIST</filename>.</para>
-
- <para>Другой способ изменения списка сборки порта основан на
- определении значений переменных <varname>PLIST_FILES</varname>,
- <varname>PLIST_DIRS</varname> и <varname>PLIST_DIRSTRY</varname>.
- Каждое из них рассматривается как перечень путей для записи в
- <filename>TMPPLIST</filename> содержимого
- <filename>PLIST</filename>. Имена, перечисленные
- в <varname>PLIST_FILES</varname>, <varname>PLIST_DIRS</varname>
- и <varname>PLIST_DIRSTRY</varname> подвергаются подстановке
- <literal>%%VAR%%</literal>, как описано
- выше. За исключением этого, имена из <varname>PLIST_FILES</varname>
- будут появляться в окончательном варианте перечня сборки без
- изменений, тогда как <literal>@dirrm</literal> и
- <literal>@dirrmtry</literal> будут соответственно предшествовать
- именам из <varname>PLIST_DIRS</varname> и
- <varname>PLIST_DIRSTRY</varname>. Для того чтобы изменения
- вступили в силу, <varname>PLIST_FILES</varname>,
- <varname>PLIST_DIRS</varname> и <varname>PLIST_DIRSTRY</varname>
- должны задаваться до того, как будет
- записываться <filename>TMPPLIST</filename>, то
- есть в цели <buildtarget>pre-install</buildtarget> или ещё
- раньше.</para>
- </sect1>
-
- <sect1 xml:id="plist-cleaning">
- <title>Пустые каталоги</title>
-
- <sect2 xml:id="plist-dir-cleaning">
- <title>Очистка пустых каталогов</title>
-
- <para>Заставьте ваш порты удалять пустые каталоги при удалении. Обычно это
- достигается добавлением строк <literal>@dirrm</literal> для всех
- каталогов, которые создаются этим портом. Вам нужно удалить
- подкаталоги до того, как вы сможете удалить родительские
- каталоги.</para>
-
- <programlisting>
- :
+ <para>и в самом <filename>pkg-plist</filename>:</para>
+
+ <programlisting>%%X11%%bin/foo-gui</programlisting>
+
+ <para>Эта подстановка будет сделана между выполнением целей
+ <buildtarget>pre-install</buildtarget> и
+ <buildtarget>do-install</buildtarget>, посредством чтения файла
+ <filename>PLIST</filename> и записью в файл
+ <filename>TMPPLIST</filename> (по умолчанию это файл
+ <filename>WRKDIR/.PLIST.mktmp</filename>). Так что если ваш
+ порт строит <filename>PLIST</filename> на лету, делайте это во
+ время или до выполнения цели
+ <buildtarget>pre-install</buildtarget>. Кроме того, если
+ вашему порту требуется отредактировать получающийся файл,
+ делайте это в цели <buildtarget>post-install</buildtarget>
+ изменением файла <filename>TMPPLIST</filename>.</para>
+
+ <para>Другой способ изменения списка сборки порта основан на
+ определении значений переменных <varname>PLIST_FILES</varname>,
+ <varname>PLIST_DIRS</varname> и
+ <varname>PLIST_DIRSTRY</varname>. Каждое из них
+ рассматривается как перечень путей для записи в
+ <filename>TMPPLIST</filename> содержимого
+ <filename>PLIST</filename>. Имена, перечисленные в
+ <varname>PLIST_FILES</varname>, <varname>PLIST_DIRS</varname> и
+ <varname>PLIST_DIRSTRY</varname> подвергаются подстановке
+ <literal>%%VAR%%</literal>, как описано выше. За исключением
+ этого, имена из <varname>PLIST_FILES</varname> будут появляться
+ в окончательном варианте перечня сборки без изменений, тогда
+ как <literal>@dirrm</literal> и <literal>@dirrmtry</literal>
+ будут соответственно предшествовать именам из
+ <varname>PLIST_DIRS</varname> и
+ <varname>PLIST_DIRSTRY</varname>. Для того чтобы изменения
+ вступили в силу, <varname>PLIST_FILES</varname>,
+ <varname>PLIST_DIRS</varname> и
+ <varname>PLIST_DIRSTRY</varname> должны задаваться до того, как
+ будет записываться <filename>TMPPLIST</filename>, то есть в
+ цели <buildtarget>pre-install</buildtarget> или ещё
+ раньше.</para>
+ </sect1>
+
+ <sect1 xml:id="plist-cleaning">
+ <title>Пустые каталоги</title>
+
+ <sect2 xml:id="plist-dir-cleaning">
+ <title>Очистка пустых каталогов</title>
+
+ <para>Заставьте ваш порты удалять пустые каталоги при удалении.
+ Обычно это достигается добавлением строк
+ <literal>@dirrm</literal> для всех каталогов, которые
+ создаются этим портом. Вам нужно удалить подкаталоги до
+ того, как вы сможете удалить родительские каталоги.</para>
+
+ <programlisting> :
lib/X11/oneko/pixmaps/cat.xpm
lib/X11/oneko/sounds/cat.au
:
@dirrm lib/X11/oneko/pixmaps
@dirrm lib/X11/oneko/sounds
-@dirrm lib/X11/oneko
- </programlisting>
+@dirrm lib/X11/oneko</programlisting>
- <para>Однако, иногда <literal>@dirrm</literal> будет выдавать ошибки,
- потому что другие порты используют тот же самый подкаталог. Вы
- можете использовать <literal>@dirrmtry</literal> для удаления
- только пустых каталогов без выдачи предупреждений.</para>
+ <para>Однако, иногда <literal>@dirrm</literal> будет выдавать
+ ошибки, потому что другие порты используют тот же самый
+ подкаталог. Вы можете использовать
+ <literal>@dirrmtry</literal> для удаления только пустых
+ каталогов без выдачи предупреждений.</para>
<programlisting>@dirrmtry share/doc/gimp</programlisting>
- <para>Эта команда не выведет никаких сообщений об ошибках и не вызовет
- аварийного завершения работы <command>pkg delete</command>
- (см. &man.pkg-delete.8;), даже если
- каталог <filename>${PREFIX}/share/doc/gimp</filename>
+ <para>Эта команда не выведет никаких сообщений об ошибках и не
+ вызовет аварийного завершения работы
+ <command>pkg delete</command> (см. &man.pkg-delete.8;), даже
+ если каталог <filename>${PREFIX}/share/doc/gimp</filename>
не пуст из-за того, что другие порты установили сюда какие-то
файлы.</para>
- </sect2>
-
- <sect2 xml:id="plist-dir-empty">
- <title>Создание пустых каталогов</title>
-
- <para>Пустым каталогам, создаваемым во время установки порта, нужно
- особое внимание. Они не будут созданы при установке пакета, потому
- что пакеты содержат только файлы, а <command>pkg add</command>
- и <command>pkg install</command> создают для них
- каталоги по мере надобности. Чтобы убедиться, что пустой каталог
- создается при установке пакета, добавьте эту строку в
- <filename>pkg-plist</filename> перед соответствующей строкой
- <literal>@dirrm</literal>:</para>
-
- <programlisting>@exec mkdir -p %D/share/foo/templates</programlisting>
- </sect2>
-
- </sect1>
-
- <sect1 xml:id="plist-config">
- <title>Конфигурационные файлы</title>
-
- <para>Если ваш порт устанавливает конфигурационные файлы в каталог
- <filename>PREFIX/etc</filename> (или куда-то еще),
- <emphasis>не</emphasis> делайте их простого перечисления в файле
- <filename>pkg-plist</filename>. Это приведёт к тому, что по команде
- <command>pkg delete</command> или при новой установке файлы,
- тщательно отредактированные и настроенные пользователем, будут
- уничтожены.</para>
-
- <para>Вместо этого установите файл(ы) с примерами с расширением
- <filename>filename.sample</filename>.
- Затем скопируйте файл с примером на место настоящего файла
- конфигурации, если таковой ещё не существует. При деинсталляции
- удаляйте файл конфигурации только в том случае, если он идентичен
- файлу с расширением <filename>.sample</filename>. Вам
- нужно управлять этим в <filename>Makefile</filename> и в
- <filename>pkg-plist</filename> (для установки из пакета).</para>
-
- <para>Пример части <filename>Makefile</filename>:</para>
-
- <programlisting>post-install:
+ </sect2>
+
+ <sect2 xml:id="plist-dir-empty">
+ <title>Создание пустых каталогов</title>
+
+ <para>Пустым каталогам, создаваемым во время установки порта,
+ нужно особое внимание. Они не будут созданы при установке
+ пакета, потому что пакеты содержат только файлы, а
+ <command>pkg add</command> и <command>pkg install</command>
+ создают для них каталоги по мере надобности. Чтобы
+ убедиться, что пустой каталог создается при установке пакета,
+ добавьте эту строку в <filename>pkg-plist</filename> перед
+ соответствующей строкой <literal>@dirrm</literal>:</para>
+
+ <programlisting>@exec mkdir -p %D/share/foo/templates</programlisting>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="plist-config">
+ <title>Конфигурационные файлы</title>
+
+ <para>Если ваш порт устанавливает конфигурационные файлы в
+ каталог <filename>PREFIX/etc</filename> (или куда-то еще),
+ <emphasis>не</emphasis> делайте их простого перечисления в
+ файле <filename>pkg-plist</filename>. Это приведёт к тому, что
+ по команде <command>pkg delete</command> или при новой
+ установке файлы, тщательно отредактированные и настроенные
+ пользователем, будут уничтожены.</para>
+
+ <para>Вместо этого установите файл(ы) с примерами с расширением
+ <filename>filename.sample</filename>. Затем скопируйте файл с
+ примером на место настоящего файла конфигурации, если таковой
+ ещё не существует. При деинсталляции удаляйте файл
+ конфигурации только в том случае, если он идентичен файлу с
+ расширением <filename>.sample</filename>. Вам нужно управлять
+ этим в <filename>Makefile</filename> и в
+ <filename>pkg-plist</filename> (для установки из
+ пакета).</para>
+
+ <para>Пример части <filename>Makefile</filename>:</para>
+
+ <programlisting>post-install:
@if [ ! -f ${PREFIX}/etc/orbit.conf ]; then \
${CP} -p ${PREFIX}/etc/orbit.conf.sample ${STAGEDIR}${PREFIX}/etc/orbit.conf ; \
fi</programlisting>
- <para>Добавьте по три строки в <filename>pkg-plist</filename> для
- каждого конфигурационного файла, как показано ниже:</para>
+ <para>Добавьте по три строки в <filename>pkg-plist</filename> для
+ каждого конфигурационного файла, как показано ниже:</para>
- <programlisting>@unexec if cmp -s %D/etc/orbit.conf.sample %D/etc/orbit.conf; then rm -f %D/etc/orbit.conf; fi
+ <programlisting>@unexec if cmp -s %D/etc/orbit.conf.sample %D/etc/orbit.conf; then rm -f %D/etc/orbit.conf; fi
etc/orbit.conf.sample
@exec if [ ! -f %D/etc/orbit.conf ] ; then cp -p %D/%F %B/orbit.conf; fi</programlisting>
- <para>Данные строки являются упорядоченными. На этапе удаления
- файл с примером сравнивается с рабочим конфигурационным файлом.
- Полное совпадение означает отсутствие каких-либо изменений в
- рабочем файле со стороны пользователя, и следовательно этот файл
- может быть безопасно удалён. Так как файл с примером всё ещё
- должен существовать для сравнения, строка <literal>@unexec</literal>
- следует перед именем файла с примером конфигурации. На этапе
- установки, если рабочий файл конфигурации отсутствует, он
- копируется из файла с примером. Файл с примером обязательно
- должен быть установлен до операции копирования, поэтому строка
- <literal>@exec</literal> следует после имени файла с примером
- конфигурации.</para>
-
- <para>Для получения дополнительного отладочного вывода на экран
- можно временно удалить параметр <literal>-s</literal> из команды
- &man.cmp.1;.</para>
-
- <para>Для получения дополнительной инфорации по использованию
- <literal>%D</literal> и прочих маркеров подстановки обратитесь
- к странице Справочника &man.pkg-create.8;.</para>
-
- <para>Если существует действительно стоящая причина не устанавливать
- рабочий файл конфигурации по умолчанию, уберите строку
- <literal>@exec</literal> из <filename>pkg-plist</filename> и
- добавьте <link linkend="porting-message">сообщение</link>,
- указывающее на то, что пользователь обязан скопировать и
- отредактировать этот файл перед тем, как программное обеспечение
- начнёт работать.</para>
- </sect1>
-
- <sect1 xml:id="plist-dynamic">
- <title>Динамический или статический список упаковки</title>
-
- <para><emphasis>Статический список упаковки</emphasis> &mdash; это список
- упаковки, который доступен в Коллекции Портов или как файл
- <filename>pkg-plist</filename> (с подстановкой переменных или без
- неё), или как встроенный в <filename>Makefile</filename> посредством
- <varname>PLIST_FILES</varname>, <varname>PLIST_DIRS</varname>
- и <varname>PLIST_DIRSTRY</varname>.
- Даже если содержимое является автоматически порождаемым при помощи
- инструмента или в результате выполнения цели в Makefile
- <emphasis>до</emphasis> включения в Коллекцию Портов коммиттером,
- то список всё ещё будет считаться статическим, поскольку его
- можно узнать без необходимости скачивания или компиляции
- дистрибутива.</para>
-
- <para><emphasis>Динамический список упаковки</emphasis> это список
- упаковки, который получается во время компиляции порта и строится
- на основе устанавливаемых файлов и каталогов. Узнать такой список
- невозможно до того, как исходный код портируемого приложения
- будет скачен и скомпилирован, или после запуска
- <literal>make clean</literal>.</para>
-
- <para>Хотя использование динамических список упаковки не запрещено,
- сопровождающие должны использовать статические списки упаковки
- везде, где это возможно, поскольку это позволяет пользователям
- выполнять &man.grep.1; по доступным портам для обнаружения, например,
- который порт устанавливает определенный файл. Динамические списки
- должны быть использованы в основном для сложных портов, для которых
- изменения в списке упаковки кардинальным образом основаны на
- необязательных возможностях порта (и, таким образом, делая
- сопровождение статических списков упаковки невозможным), или портов,
- которые изменяют список упаковки на основе версии используемого
- им программного обеспечения (например, порты, которые порождают
- документы при помощи <application>Javadoc</application>).</para>
- </sect1>
+ <para>Данные строки являются упорядоченными. На этапе удаления
+ файл с примером сравнивается с рабочим конфигурационным файлом.
+ Полное совпадение означает отсутствие каких-либо изменений в
+ рабочем файле со стороны пользователя, и следовательно этот
+ файл может быть безопасно удалён. Так как файл с примером всё
+ ещё должен существовать для сравнения, строка
+ <literal>@unexec</literal> следует перед именем файла с
+ примером конфигурации. На этапе установки, если рабочий файл
+ конфигурации отсутствует, он копируется из файла с примером.
+ Файл с примером обязательно должен быть установлен до операции
+ копирования, поэтому строка <literal>@exec</literal> следует
+ после имени файла с примером конфигурации.</para>
+
+ <para>Для получения дополнительного отладочного вывода на экран
+ можно временно удалить параметр <literal>-s</literal> из
+ команды &man.cmp.1;.</para>
+
+ <para>Для получения дополнительной инфорации по использованию
+ <literal>%D</literal> и прочих маркеров подстановки обратитесь
+ к странице Справочника &man.pkg-create.8;.</para>
+
+ <para>Если существует действительно стоящая причина не
+ устанавливать рабочий файл конфигурации по умолчанию, уберите
+ строку <literal>@exec</literal> из
+ <filename>pkg-plist</filename> и добавьте <link
+ linkend="porting-message">сообщение</link>, указывающее на
+ то, что пользователь обязан скопировать и отредактировать этот
+ файл перед тем, как программное обеспечение начнёт
+ работать.</para>
+ </sect1>
+
+ <sect1 xml:id="plist-dynamic">
+ <title>Динамический или статический список упаковки</title>
+
+ <para><emphasis>Статический список упаковки</emphasis> &mdash;
+ это список упаковки, который доступен в Коллекции Портов или
+ как файл <filename>pkg-plist</filename> (с подстановкой
+ переменных или без неё), или как встроенный в
+ <filename>Makefile</filename> посредством
+ <varname>PLIST_FILES</varname>, <varname>PLIST_DIRS</varname> и
+ <varname>PLIST_DIRSTRY</varname>. Даже если содержимое
+ является автоматически порождаемым при помощи инструмента или в
+ результате выполнения цели в Makefile <emphasis>до</emphasis>
+ включения в Коллекцию Портов коммиттером, то список всё ещё
+ будет считаться статическим, поскольку его можно узнать без
+ необходимости скачивания или компиляции дистрибутива.</para>
+
+ <para><emphasis>Динамический список упаковки</emphasis> это
+ список упаковки, который получается во время компиляции порта и
+ строится на основе устанавливаемых файлов и каталогов. Узнать
+ такой список невозможно до того, как исходный код портируемого
+ приложения будет скачен и скомпилирован, или после запуска
+ <literal>make clean</literal>.</para>
+
+ <para>Хотя использование динамических список упаковки не
+ запрещено, сопровождающие должны использовать статические
+ списки упаковки везде, где это возможно, поскольку это
+ позволяет пользователям выполнять &man.grep.1; по доступным
+ портам для обнаружения, например, который порт устанавливает
+ определенный файл. Динамические списки должны быть
+ использованы в основном для сложных портов, для которых
+ изменения в списке упаковки кардинальным образом основаны на
+ необязательных возможностях порта (и, таким образом, делая
+ сопровождение статических списков упаковки невозможным), или
+ портов, которые изменяют список упаковки на основе версии
+ используемого им программного обеспечения (например, порты,
+ которые порождают документы при помощи
+ <application>Javadoc</application>).</para>
+ </sect1>
<sect1 xml:id="plist-autoplist">
<title>Автоматическое создание списка упаковки</title>
<para>Первым делом убедитесь, что ваш порт практически полностью
- завершён и осталось создать только <filename>pkg-plist</filename>.
- После этого вы можете запустить <command>make makeplist</command>
- для автоматического создания <filename>pkg-plist</filename>.
- Содержимое этого файла должно быть дважды перепроверено.</para>
+ завершён и осталось создать только
+ <filename>pkg-plist</filename>. После этого вы можете
+ запустить <command>make makeplist</command> для автоматического
+ создания <filename>pkg-plist</filename>. Содержимое этого
+ файла должно быть дважды перепроверено.</para>
<para>Пользовательские конфигурационные файлы должны быть удалены
- или быть установлены как
- <filename>filename.sample</filename>.
- Файл <filename>info/dir</filename> включать в список не нужно, но
- должны быть добавлены соответствующие строчки
- <filename>install-info</filename>, так, как это описано в разделе о <link linkend="makefile-info">файлах в формате info</link>. Все
- библиотеки, устанавливаемые портом, должны быть перечислены так, как
- это описано в разделе о <link linkend="porting-shlibs">динамических библиотеках</link>.</para>
+ или быть установлены как <filename>filename.sample</filename>.
+ Файл <filename>info/dir</filename> включать в список не нужно,
+ но должны быть добавлены соответствующие строчки
+ <filename>install-info</filename>, так, как это описано в
+ разделе о <link
+ linkend="makefile-info">файлах в формате info</link>. Все
+ библиотеки, устанавливаемые портом, должны быть перечислены
+ так, как это описано в разделе о <link
+ linkend="porting-shlibs">динамических
+ библиотеках</link>.</para>
</sect1>
-
- </chapter>
-
+</chapter>
diff --git a/ru_RU.KOI8-R/books/porters-handbook/porting-dads/chapter.xml b/ru_RU.KOI8-R/books/porters-handbook/porting-dads/chapter.xml
index c932281198..87e93e663b 100644
--- a/ru_RU.KOI8-R/books/porters-handbook/porting-dads/chapter.xml
+++ b/ru_RU.KOI8-R/books/porters-handbook/porting-dads/chapter.xml
@@ -7,396 +7,404 @@
Original revision: r43840
-->
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="porting-dads">
-
- <title>Что делать нужно, и что делать нельзя</title>
-
- <sect1 xml:id="dads-intro">
- <title>Введение</title>
-
- <para>Вот список часто встречающихся действий, которые нужно и которые
- нельзя делать во время процесса портирования. Проверьте
- порт по этому списку, и также проверьте порты в
- <link xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query">базе
- сообщений PR</link>, которые присланы другими людьми. Присылайте
- любые комментарии о портах, которые вы проверили, так, как это описано
- в статье о <link xlink:href="&url.articles.contributing;/contrib-how.html#CONTRIB-GENERAL">
- Сообщениях об ошибках и общих замечаниях</link>. Проверка портов в
- базе сообщений PR позволит нам быстрее коммиттить их и удостовериться,
- что вы знаете, что делаете.</para>
- </sect1>
-
- <sect1 xml:id="porting-wrkdir">
- <title><varname>WRKDIR</varname></title>
-
- <para>Не пишите ничего в файлы вне каталога <varname>WRKDIR</varname>.
- Каталог <varname>WRKDIR</varname> является единственным местом,
- которое гарантированно будет доступно для записи во время построения
- порта (обратитесь к главе о <link xlink:href="&url.books.handbook;/ports-using.html#PORTS-CD">установке портов с
- CDROM</link> за
- примером построения портов из дерева, доступного только для чтения).
- Если вам нужно изменить какой-либо из файлов
- <filename>pkg-*</filename>, сделайте это,
- <link linkend="porting-pkgfiles">переопределив переменную</link>, но не
- перезаписывая их.</para>
- </sect1>
-
- <sect1 xml:id="porting-wrkdirprefix">
- <title><varname>WRKDIRPREFIX</varname></title>
-
- <para>Добейтесь того, чтобы ваш порт принимал во внимание значение
- переменной <varname>WRKDIRPREFIX</varname>. Большинство портов об
- этом не заботятся. В частности, если вы обращаетесь к каталогу
- <varname>WRKDIR</varname> другого порта, заметьте, что его правильным
- местоположением является
- <filename>WRKDIRPREFIXPORTSDIR/subdir/name/work</filename> not <filename>PORTSDIR/subdir/work</filename>
- или <filename>.CURDIR/../../subdir/name/work</filename>
- или что-то подобное.</para>
-
- <para>Кроме того, если вы сами задаете <varname>WRKDIR</varname>, то
- должны поставить перед ним знак
- <literal>&dollar;{WRKDIRPREFIX}&dollar;{.CURDIR}</literal>.</para>
- </sect1>
-
- <sect1 xml:id="porting-versions">
- <title>Различение операционных систем и версий ОС</title>
-
- <para>Вы можете встретиться с кодом, который требует модификаций
- или условной компиляции в зависимости от того, с какой версией &os;
- Unix он работает. Предпочтительным способом отделения кода для
- версий &os; является использование макросов
- <literal>__FreeBSD_version</literal> и
- <literal>__FreeBSD__</literal>, определённых в <link
- xlink:href="http://svnweb.freebsd.org/base/head/sys/sys/param.h?view=markup">sys/param.h</link>.
- Если этот файл не подключен, добавьте код</para>
-
- <programlisting>#include &lt;sys/param.h&gt;</programlisting>
-
- <para>в соответствующем месте файла <filename>.c</filename>.
- <literal>__FreeBSD__</literal> определён во всех версиях &os;
- в качестве старшего номера версии системы. Например, в &os;
- 9.x <literal>__FreeBSD__</literal> определён со значением
- <literal>9</literal>.</para>
-
- <programlisting>#if __FreeBSD__ &gt;= 9
+<chapter xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
+ xml:id="porting-dads">
+
+ <title>Что делать нужно, и что делать нельзя</title>
+
+ <sect1 xml:id="dads-intro">
+ <title>Введение</title>
+
+ <para>Вот список часто встречающихся действий, которые нужно и
+ которые нельзя делать во время процесса портирования.
+ Проверьте порт по этому списку, и также проверьте порты в <link
+ xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query">базе
+ сообщений PR</link>, которые присланы другими людьми.
+ Присылайте любые комментарии о портах, которые вы проверили,
+ так, как это описано в статье о <link
+ xlink:href="&url.articles.contributing;/contrib-how.html#CONTRIB-GENERAL">
+ Сообщениях об ошибках и общих замечаниях</link>. Проверка
+ портов в базе сообщений PR позволит нам быстрее коммиттить их и
+ удостовериться, что вы знаете, что делаете.</para>
+ </sect1>
+
+ <sect1 xml:id="porting-wrkdir">
+ <title><varname>WRKDIR</varname></title>
+
+ <para>Не пишите ничего в файлы вне каталога
+ <varname>WRKDIR</varname>. Каталог <varname>WRKDIR</varname>
+ является единственным местом, которое гарантированно будет
+ доступно для записи во время построения порта (обратитесь к
+ главе об <link
+ xlink:href="&url.books.handbook;/ports-using.html#PORTS-CD">установке
+ портов с CDROM</link> за примером построения портов из
+ дерева, доступного только для чтения). Если вам нужно изменить
+ какой-либо из файлов <filename>pkg-*</filename>, сделайте это,
+ <link linkend="porting-pkgfiles">переопределив
+ переменную</link>, но не перезаписывая их.</para>
+ </sect1>
+
+ <sect1 xml:id="porting-wrkdirprefix">
+ <title><varname>WRKDIRPREFIX</varname></title>
+
+ <para>Добейтесь того, чтобы ваш порт принимал во внимание
+ значение переменной <varname>WRKDIRPREFIX</varname>.
+ Большинство портов об этом не заботятся. В частности, если вы
+ обращаетесь к каталогу <varname>WRKDIR</varname> другого порта,
+ заметьте, что его правильным местоположением является
+ <filename>WRKDIRPREFIXPORTSDIR/subdir/name/work</filename>, а
+ не <filename>PORTSDIR/subdir/work</filename> или
+ <filename>.CURDIR/../../subdir/name/work</filename> мли что-то
+ подобное.</para>
+
+ <para>Кроме того, если вы сами задаете <varname>WRKDIR</varname>,
+ то должны поставить перед ним знак
+ <literal>&dollar;{WRKDIRPREFIX}&dollar;{.CURDIR}</literal>.</para>
+ </sect1>
+
+ <sect1 xml:id="porting-versions">
+ <title>Различение операционных систем и версий ОС</title>
+
+ <para>Вы можете встретиться с кодом, который требует модификаций
+ или условной компиляции в зависимости от того, с какой версией
+ &os; Unix он работает. Предпочтительным способом отделения
+ кода для версий &os; является использование макросов
+ <literal>__FreeBSD_version</literal> и
+ <literal>__FreeBSD__</literal>, определённых в <link
+ xlink:href="http://svnweb.freebsd.org/base/head/sys/sys/param.h?view=markup">sys/param.h</link>.
+ Если этот файл не подключен, добавьте код</para>
+
+ <programlisting>#include &lt;sys/param.h&gt;</programlisting>
+
+ <para>в нужном месте файла <filename>.c</filename>.</para>
+
+ <para><literal>__FreeBSD__</literal> определён во всех версиях
+ &os; в качестве старшего номера версии системы. Например, в
+ &os; 9.x <literal>__FreeBSD__</literal> определён со значением
+ <literal>9</literal>.</para>
+
+ <programlisting>#if __FreeBSD__ &gt;= 9
# if __FreeBSD_version &gt;= 901000
/* здесь особый код для версий 9.1+ */
# endif
#endif</programlisting>
- </sect1>
-
- <sect1 xml:id="dads-after-port-mk">
- <title>Написание чего-либо после
- <filename>bsd.port.mk</filename></title>
-
- <para>Не пишите ничего после строки
- <literal>.include &lt;bsd.port.mk&gt;</literal>. Этой строки можно
- избежать, включив в где-то в середину вашего файла
- <filename>Makefile</filename> файл
- <filename>bsd.port.pre.mk</filename>, и
- файл <filename>bsd.port.post.mk</filename> в конец.</para>
-
- <note>
- <para>Вам нужно включить либо пару файлов
- <filename>bsd.port.pre.mk</filename>/<filename>bsd.port.post.mk</filename>,
- либо только <filename>bsd.port.mk</filename>; не используйте оба этих
- метода одновременно.</para>
- </note>
-
- <para>В файле <filename>bsd.port.pre.mk</filename> определяются лишь
- несколько переменных, которые могут быть использованы в тестах из
- файла <filename>Makefile</filename>, в файле
- <filename>bsd.port.post.mk</filename> заданы остальные.</para>
-
- <para>Вот некоторые важные переменные, определенные в файле
- <filename>bsd.port.pre.mk</filename> (это не полный список, для
- выяснения полного списка прочтите, пожалуйста, сам файл
- <filename>bsd.port.mk</filename>).</para>
-
- <informaltable frame="none" pgwide="0">
+ </sect1>
+
+ <sect1 xml:id="dads-after-port-mk">
+ <title>Написание чего-либо после
+ <filename>bsd.port.mk</filename></title>
+
+ <para>Не пишите ничего после строки
+ <literal>.include &lt;bsd.port.mk&gt;</literal>. Этой строки
+ можно избежать, включив в где-то в середину вашего файла
+ <filename>Makefile</filename> файл
+ <filename>bsd.port.pre.mk</filename>, и файл
+ <filename>bsd.port.post.mk</filename> в конец.</para>
+
+ <note>
+ <para>Вам нужно включить либо пару файлов
+ <filename>bsd.port.pre.mk</filename>/<filename>bsd.port.post.mk</filename>,
+ либо только <filename>bsd.port.mk</filename>; не используйте
+ оба этих метода одновременно.</para>
+ </note>
+
+ <para>В файле <filename>bsd.port.pre.mk</filename> определяются
+ лишь несколько переменных, которые могут быть использованы в
+ тестах из файла <filename>Makefile</filename>, в файле
+ <filename>bsd.port.post.mk</filename> заданы остальные.</para>
+
+ <para>Вот некоторые важные переменные, определенные в файле
+ <filename>bsd.port.pre.mk</filename> (это не полный список, для
+ выяснения полного списка прочтите, пожалуйста, сам файл
+ <filename>bsd.port.mk</filename>).</para>
+
+ <informaltable frame="none" pgwide="0">
<tgroup cols="2">
- <thead>
- <row>
- <entry>Переменная</entry>
- <entry>Описание</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>ARCH</varname></entry>
- <entry>Архитектура машины в виде, получаемом по команде
- <command>uname -m</command> (например,
- <literal>i386</literal>)</entry>
- </row>
-
- <row>
- <entry><varname>OPSYS</varname></entry>
- <entry>Тип операционной системы, получаемый по команде
- <command>uname -s</command> (например,
- <literal>FreeBSD</literal>)</entry>
- </row>
-
- <row>
- <entry><varname>OSREL</varname></entry>
- <entry>Версия релиза операционной системы (например,
- <literal>2.1.5</literal> или <literal>2.2.7</literal>)</entry>
- </row>
-
- <row>
- <entry><varname>OSVERSION</varname></entry>
-
- <entry>Версия операционной системы в виде числа, та же, что и <link linkend="freebsd-versions">
- <literal>__FreeBSD_version</literal></link>.</entry>
- </row>
-
- <row>
- <entry><varname>LOCALBASE</varname></entry>
- <entry>Корень дерева <quote>local</quote> (например,
- <literal>/usr/local</literal>)</entry>
- </row>
-
- <row>
- <entry><varname>PREFIX</varname></entry>
- <entry>Куда, собственно, устанавливается порт (обратитесь к <link linkend="porting-prefix">
- подробной информации о <varname>PREFIX</varname></link>).</entry>
- </row>
- </tbody>
+ <thead>
+ <row>
+ <entry>Переменная</entry>
+ <entry>Описание</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><varname>ARCH</varname></entry>
+ <entry>Архитектура машины в виде, получаемом по команде
+ <command>uname -m</command> (например,
+ <literal>i386</literal>)</entry>
+ </row>
+
+ <row>
+ <entry><varname>OPSYS</varname></entry>
+ <entry>Тип операционной системы, получаемый по команде
+ <command>uname -s</command> (например,
+ <literal>FreeBSD</literal>)</entry>
+ </row>
+
+ <row>
+ <entry><varname>OSREL</varname></entry>
+ <entry>Версия релиза операционной системы (например,
+ <literal>2.1.5</literal> или
+ <literal>2.2.7</literal>)</entry>
+ </row>
+
+ <row>
+ <entry><varname>OSVERSION</varname></entry>
+ <entry>Версия операционной системы в виде числа, та же,
+ что и <link linkend="freebsd-versions">
+ <literal>__FreeBSD_version</literal></link>.</entry>
+ </row>
+
+ <row>
+ <entry><varname>LOCALBASE</varname></entry>
+ <entry>Корень дерева <quote>local</quote> (например,
+ <literal>/usr/local</literal>)</entry>
+ </row>
+
+ <row>
+ <entry><varname>PREFIX</varname></entry>
+ <entry>Куда, собственно, устанавливается порт (обратитесь
+ к <link linkend="porting-prefix">подробной информации о
+ <varname>PREFIX</varname></link>).</entry>
+ </row>
+ </tbody>
</tgroup>
- </informaltable>
+ </informaltable>
- <note>
- <para>Если вы задаете переменную
- <varname>MASTERDIR</varname>, делайте это до
- подключения <filename>bsd.port.pre.mk</filename>.</para>
- </note>
+ <note>
+ <para>Если вы задаете переменную <varname>MASTERDIR</varname>,
+ делайте это до подключения
+ <filename>bsd.port.pre.mk</filename>.</para>
+ </note>
- <para>Вот несколько примеров того, что вы можете написать после
- <filename>bsd.port.pre.mk</filename>:</para>
+ <para>Вот несколько примеров того, что вы можете написать после
+ <filename>bsd.port.pre.mk</filename>:</para>
- <programlisting># no need to compile lang/perl5 if perl5 is already in system
+ <programlisting># no need to compile lang/perl5 if perl5 is already in system
.if ${OSVERSION} &gt; 300003
-BROKEN= perl is in system
+BROKEN= perl is in system
.endif</programlisting>
- <para>Вы не забываете об использовании табуляции вместо пробелов
- после <literal>BROKEN=</literal>,
- не так ли? <!-- улыбка -->:-).</para>
- </sect1>
+ <para>Вы не забываете об использовании табуляции вместо пробелов
+ после <literal>BROKEN=</literal><!-- улыбка -->:-).</para>
+ </sect1>
- <sect1 xml:id="dads-sh-exec">
- <title>Использование выражения <function>exec</function>
- в сценариях обёртках</title>
+ <sect1 xml:id="dads-sh-exec">
+ <title>Использование выражения <function>exec</function>
+ в сценариях обёртках</title>
- <para>Если порт устанавливает сценарий на языке shell, который служит
- для запуска другой программы, и если запуск этой программы является
- последним действием сценария, убедитесь, что запуск программы
- производится с использованием выражения <function>exec</function>,
- например:</para>
+ <para>Если порт устанавливает сценарий на языке shell, который
+ служит для запуска другой программы, и если запуск этой
+ программы является последним действием сценария, убедитесь, что
+ запуск программы производится с использованием выражения
+ <function>exec</function>, например:</para>
- <programlisting>#!/bin/sh
+ <programlisting>#!/bin/sh
exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting>
- <para>Выражение <function>exec</function> заменяет процесс сценария
- на указанную программу. Если <function>exec</function> опущен,
- то процесс сценария во время работы программы остается в памяти,
- без бесполезно потребляя системные ресурсы.</para>
-
- </sect1>
-
- <sect1 xml:id="dads-rational">
- <title>Поступайте разумно</title>
-
- <para>Файл <filename>Makefile</filename> должен выполнять действия
- просто и небеспричинно. Если вы можете сделать что-то на несколько
- строк короче или более читабельно, сделайте это. В качестве примеров
- можно привести использование конструкций <literal>.if</literal>
- утилиты make вместо соответствующей конструкции <literal>if</literal>
- командного процессора, ненужность переопределения цели
- <buildtarget>do-extract</buildtarget> при возможности переопределения
- <varname>EXTRACT*</varname> и использование
- <varname>GNU_CONFIGURE</varname> вместо
- <literal>CONFIGURE_ARGS+= --prefix=&dollar;{PREFIX}</literal>.</para>
-
- <para>Если вы обнаружите, что для выполнения чего-то приходится писать
- много нового кода, то, пожалуйста, просмотрите файл
- <filename>bsd.port.mk</filename> на предмет того, не содержит ли он
- реализацию именно вашей проблемы. Хотя его трудно читать, имеется
- много проблем, выглядящих сложными, для которых файл
- <filename>bsd.port.mk</filename> уже содержит быстрое решение.</para>
- </sect1>
-
- <sect1 xml:id="dads-cc">
- <title>Работа как с <varname>CC</varname>, так и
- <varname>CXX</varname></title>
-
- <para>Порт должен принимать во внимание как переменную
- <varname>CC</varname>, так и <varname>CXX</varname>.
- Под этим мы подразумеваем, что порт ни в коем случае не должен
- устанавливать значения этих переменных, переопределяя имеющиеся
- значения; вместо этого можно добавлять нужные значения к уже
- имеющимся. Это связано с тем, что параметры построения,
- относящиеся ко всем портам, могут быть заданы глобально.</para>
-
- <para>Если порты не учитывают значения этих переменных, добавьте
- строку <literal>NO_PACKAGE=ignores either cc or cxx</literal>
- в файл <filename>Makefile</filename>.</para>
-
- <para>Далее следует пример файла <filename>Makefile</filename>,
- использующего как переменную <varname>CC</varname>, так и
- <varname>CXX</varname>. Обратите внимание на использование символов
- <varname>?=</varname>:</para>
-
- <programlisting>CC?= gcc</programlisting>
-
- <programlisting>CXX?= g++</programlisting>
-
- <para>Вот пример, в котором не принимаются во внимание ни переменная
- <varname>CC</varname>, ни <varname>CXX</varname>:</para>
-
- <programlisting>CC= gcc</programlisting>
-
- <programlisting>CXX= g++</programlisting>
-
- <para>В системах &os; обе переменные <varname>CC</varname> и
- <varname>CXX</varname> могут быть определены в файле
- <filename>/etc/make.conf</filename>. В первом примере задаётся
- значение, если оно ранее не было определено в
- <filename>/etc/make.conf</filename>, что сохраняет любые определения,
- данные на уровне системы в целом. Второй пример переопределяет всё,
- что было задано ранее.</para>
- </sect1>
-
- <sect1 xml:id="dads-cflags">
- <title>Использование <varname>CFLAGS</varname></title>
-
- <para>Порт должен принимать во внимание переменную
- <varname>CFLAGS</varname>.
- Под этим мы подразумеваем, что порт ни в коем случае не должен
- устанавливать значения этих переменных, переопределяя имеющиеся
- значения; вместо этого можно добавлять нужные значения к уже
- имеющимся. Это связано с тем, что параметры построения,
- относящиеся ко всем портам, могут быть заданы глобально.</para>
-
- <para>Если порты не учитывают значения этой переменной, добавьте
- строку <literal>NO_PACKAGE=ignores cflags</literal> в файл
- <filename>Makefile</filename>.</para>
-
- <para>Далее следует пример файла <filename>Makefile</filename>,
- использующего переменную <varname>CFLAGS</varname>. Обратите
- внимание на использование символов <varname>+=</varname>:</para>
-
- <programlisting>
-CFLAGS+= -Wall -Werror
- </programlisting>
-
- <para>А вот пример, в котором не учитывается значение переменной
- <varname>CFLAGS</varname>:</para>
-
- <programlisting>
-CFLAGS= -Wall -Werror
- </programlisting>
-
- <para>В системе &os; переменная <varname>CFLAGS</varname> определена
- в файле <filename>/etc/make.conf</filename>. В первом примере к
- переменной <varname>CFLAGS</varname> добавляются дополнительные флаги,
- при этом сохраняются все определения, данные ранее на уровне системы.
- Во втором примере всё, что было задано ранее, игнорируется.</para>
-
- <para>Из сторонних файлов <filename>Makefile</filename> следует удалить
- флаги оптимизации. Общесистемные флаги оптимизации находятся в
- системной переменной <varname>CFLAGS</varname>. Пример из
- немодифицированного <filename>Makefile</filename>:</para>
-
- <programlisting>CFLAGS= -O3 -funroll-loops -DHAVE_SOUND</programlisting>
-
- <para>При использовании системных флагов оптимизации
- <filename>Makefile</filename> станет похожим на следующий пример:</para>
-
- <programlisting>CFLAGS+= -DHAVE_SOUND</programlisting>
-
- </sect1>
-
- <sect1 xml:id="dads-pthread">
- <title>Библиотеки потоков</title>
-
- <para>Во &os; библиотека потоков обязана быть скомпонована с
- исполняемыми файлами с использованием специального флага
- <literal>-pthread</literal>. Если порт настаивает
- на прямой компоновке с <literal>-lpthread</literal>,
- создайте патч для использования <literal>-pthread</literal>
- </para>
-
- <note>
- <para>Если построение порта заканчивается ошибкой
- <literal>unrecognized option '-pthread'</literal>,
- то может быть желательно использование <command>cc</command>
- в качестве компоновщика через установку
- <varname>CONFIGURE_ENV</varname> в <literal>LD=${CC}</literal>.
- Параметр <literal>-pthread</literal> напрямую командой
- <command>ld</command> не поддерживается.</para>
- </note>
-
- </sect1>
-
- <sect1 xml:id="dads-feedback">
- <title>Пожелания</title>
-
- <para>Посылайте подходящие изменения/патчи авторам/сопровождающему
- для включения в следующий релиз. Это только сделает вашу работу
- гораздо легче при выходе следующего релиза.</para>
- </sect1>
-
- <sect1 xml:id="dads-readme">
- <title><filename>README.html</filename></title>
-
- <para><filename>README.html</filename> не является частью порта
- и генерируется при помощи <command>make readme</command>.
- Не включайте этот файл в патчи или коммиты.</para>
-
- <note>
- <para>Если не удается выполнить <command>make readme</command>,
- убедитесь, что значение по умолчанию <varname>ECHO_MSG</varname>
- не было изменено внутри порта.</para>
- </note>
- </sect1>
-
- <sect1 xml:id="dads-noinstall">
- <title>Пометка неустанавливаемого порта как <varname>BROKEN</varname>,
- <varname>FORBIDDEN</varname> или <varname>IGNORE</varname></title>
-
- <para>В некоторых случаях пользователи не должны допускаться к
- установке порта. Для того, чтобы сообщить пользователю, что порт
- не следует устанавливать, имеется несколько
- <command>make</command>-переменных, которые могут быть использованы
- в файле <filename>Makefile</filename> порта. Значения следующих
- <command>make</command>-переменных будут причиной, возвращаемой
- пользователям, по которой порт отказывает в установке.
- Пожалуйста, используйте корректные <command>make</command>-переменные,
- так как каждая переменная make передает абсолютно различный смысл
- как для пользователей, так и для автоматизированных систем, которые
- полагаются на файлы <filename>Makefile</filename>, таких как
- <link linkend="build-cluster">кластер построения портов</link>,
- <link linkend="freshports">FreshPorts</link> и
- <link linkend="portsmon">portsmon</link>.</para>
-
- <sect2 xml:id="dads-noinstall-variables">
- <title>Переменные</title>
+ <para>Выражение <function>exec</function> заменяет процесс
+ сценария на указанную программу. Если
+ <function>exec</function> опущен, то процесс сценария во время
+ работы программы остается в памяти, бесполезно потребляя
+ системные ресурсы.</para>
+ </sect1>
+
+ <sect1 xml:id="dads-rational">
+ <title>Поступайте разумно</title>
+
+ <para>Файл <filename>Makefile</filename> должен выполнять
+ действия просто и небеспричинно. Если вы можете сделать что-то
+ на несколько строк короче или более читабельно, сделайте это.
+ В качестве примеров можно привести использование конструкций
+ <literal>.if</literal> утилиты make вместо соответствующей
+ конструкции <literal>if</literal> командного процессора,
+ ненужность переопределения цели
+ <buildtarget>do-extract</buildtarget> при возможности
+ переопределения <varname>EXTRACT*</varname> и использование
+ <varname>GNU_CONFIGURE</varname> вместо
+ <literal>CONFIGURE_ARGS
+ += --prefix=&dollar;{PREFIX}</literal>.</para>
+
+ <para>Если вы обнаружите, что для выполнения чего-то приходится
+ писать много нового кода, то, пожалуйста, просмотрите файл
+ <filename>bsd.port.mk</filename> на предмет того, не содержит
+ ли он решение именно вашей проблемы. Хотя его трудно читать,
+ имеется много проблем, выглядящих сложными, для которых файл
+ <filename>bsd.port.mk</filename> уже содержит быстрое
+ решение.</para>
+ </sect1>
+
+ <sect1 xml:id="dads-cc">
+ <title>Работа как с <varname>CC</varname>, так и
+ <varname>CXX</varname></title>
+
+ <para>Порт должен принимать во внимание как переменную
+ <varname>CC</varname>, так и <varname>CXX</varname>. Под этим
+ мы подразумеваем, что порт ни в коем случае не должен
+ устанавливать значения этих переменных, переопределяя имеющиеся
+ значения; вместо этого можно добавлять нужные значения к уже
+ имеющимся. Это связано с тем, что параметры построения,
+ относящиеся ко всем портам, могут быть заданы глобально.</para>
+
+ <para>Если порты не учитывают значения этих переменных, добавьте
+ строку <literal>NO_PACKAGE=ignores either cc or cxx</literal>
+ в файл <filename>Makefile</filename>.</para>
+
+ <para>Далее следует пример файла <filename>Makefile</filename>,
+ использующего как переменную <varname>CC</varname>, так и
+ <varname>CXX</varname>. Обратите внимание на использование
+ символов <varname>?=</varname>:</para>
+
+ <programlisting>CC?= gcc</programlisting>
+
+ <programlisting>CXX?= g++</programlisting>
+
+ <para>Вот пример, в котором не принимаются во внимание ни
+ <varname>CC</varname>, ни <varname>CXX</varname>:</para>
+
+ <programlisting>CC= gcc</programlisting>
+
+ <programlisting>CXX= g++</programlisting>
+
+ <para>В системах &os; обе переменные <varname>CC</varname> и
+ <varname>CXX</varname> могут быть определены в файле
+ <filename>/etc/make.conf</filename>. В первом примере задаётся
+ значение, если оно ранее не было определено в
+ <filename>/etc/make.conf</filename>, что сохраняет любые
+ определения, данные на уровне системы в целом. Второй пример
+ переопределяет всё, что было задано ранее.</para>
+ </sect1>
+
+ <sect1 xml:id="dads-cflags">
+ <title>Использование <varname>CFLAGS</varname></title>
+
+ <para>Порт должен учитывать переменную <varname>CFLAGS</varname>.
+ Под этим мы подразумеваем, что порт ни в коем случае не должен
+ устанавливать значения этой переменной, переопределяя имеющиеся
+ значения; вместо этого можно добавлять нужные значения к уже
+ имеющимся. Это связано с тем, что параметры построения,
+ относящиеся ко всем портам, могут быть заданы глобально.</para>
+
+ <para>Если порты не учитывают значения этой переменной, добавьте
+ строку <literal>NO_PACKAGE=ignores cflags</literal> в файл
+ <filename>Makefile</filename>.</para>
+
+ <para>Далее следует пример файла <filename>Makefile</filename>,
+ использующего переменную <varname>CFLAGS</varname>. Обратите
+ внимание на использование символов <varname>+=</varname>:</para>
+
+ <programlisting>CFLAGS+= -Wall -Werror</programlisting>
+
+ <para>А вот пример, в котором не учитывается значение переменной
+ <varname>CFLAGS</varname>:</para>
+
+ <programlisting>CFLAGS= -Wall -Werror</programlisting>
+
+ <para>В системе &os; переменная <varname>CFLAGS</varname>
+ определена в файле <filename>/etc/make.conf</filename>. В
+ первом примере к переменной <varname>CFLAGS</varname>
+ добавляются дополнительные флаги, при этом сохраняются все
+ определения, данные ранее на уровне системы. Во втором примере
+ всё, что было задано ранее, игнорируется.</para>
+
+ <para>Из сторонних файлов <filename>Makefile</filename> следует
+ удалить флаги оптимизации. Общесистемные флаги оптимизации
+ находятся в системной переменной <varname>CFLAGS</varname>.
+ Пример из немодифицированного
+ <filename>Makefile</filename>:</para>
+
+ <programlisting>CFLAGS= -O3 -funroll-loops -DHAVE_SOUND</programlisting>
+
+ <para>При использовании системных флагов оптимизации
+ <filename>Makefile</filename> станет похожим на следующий
+ пример:</para>
+
+ <programlisting>CFLAGS+= -DHAVE_SOUND</programlisting>
+ </sect1>
+
+ <sect1 xml:id="dads-pthread">
+ <title>Библиотеки потоков</title>
+
+ <para>Во &os; библиотека потоков обязана быть скомпонована с
+ исполняемыми файлами с использованием специального флага
+ <literal>-pthread</literal>. Если порт настаивает на прямой
+ компоновке с <literal>-lpthread</literal>, создайте патч для
+ использования <literal>-pthread</literal>.</para>
+
+ <note>
+ <para>Если построение порта заканчивается ошибкой
+ <literal>unrecognized option '-pthread'</literal>, то может
+ быть желательно использование <command>cc</command> в
+ качестве компоновщика через установку
+ <varname>CONFIGURE_ENV</varname> в
+ <literal>LD=${CC}</literal>. Параметр
+ <literal>-pthread</literal> напрямую командой
+ <command>ld</command> не поддерживается.</para>
+ </note>
+ </sect1>
+
+ <sect1 xml:id="dads-feedback">
+ <title>Пожелания</title>
+
+ <para>Посылайте подходящие изменения/патчи автору/сопровождающему
+ для включения в следующий релиз. Это только сделает вашу
+ работу гораздо легче при выходе следующего релиза.</para>
+ </sect1>
+
+ <sect1 xml:id="dads-readme">
+ <title><filename>README.html</filename></title>
+
+ <para><filename>README.html</filename> не является частью порта
+ и генерируется при помощи <command>make readme</command>.
+ Не включайте этот файл в патчи или коммиты.</para>
+
+ <note>
+ <para>Если не удается выполнить <command>make readme</command>,
+ убедитесь, что значение по умолчанию
+ <varname>ECHO_MSG</varname> не изменено внутри порта.</para>
+ </note>
+ </sect1>
+
+ <sect1 xml:id="dads-noinstall">
+ <title>Пометка неустанавливаемого порта как
+ <varname>BROKEN</varname>, <varname>FORBIDDEN</varname> или
+ <varname>IGNORE</varname></title>
+
+ <para>В некоторых случаях пользователи не должны допускаться к
+ установке порта. Для того, чтобы сообщить пользователю, что
+ порт не следует устанавливать, имеется несколько
+ <command>make</command>-переменных, которые могут быть
+ использованы в файле <filename>Makefile</filename> порта.
+ Значения следующих <command>make</command>-переменных будут
+ причиной, возвращаемой пользователям, по которой порт
+ отказывает в установке. Пожалуйста, используйте корректные
+ <command>make</command>-переменные, так как каждая переменная
+ make передает абсолютно различный смысл как для пользователей,
+ так и для автоматизированных систем, которые полагаются на
+ файлы <filename>Makefile</filename>, таких как <link
+ linkend="build-cluster">кластер построения портов</link>,
+ <link linkend="freshports">FreshPorts</link> и <link
+ linkend="portsmon">portsmon</link>.</para>
+
+ <sect2 xml:id="dads-noinstall-variables">
+ <title>Переменные</title>
<itemizedlist>
<listitem>
- <para><varname>BROKEN</varname> предназначена для портов, которые
- в настоящее время не компилируются, не устанавливаются или не
- удаляются правильно. Следует использовать для портов,
- когда проблема считается временной.</para>
+ <para><varname>BROKEN</varname> предназначена для портов,
+ которые в настоящее время не компилируются, не
+ устанавливаются или не удаляются правильно. Следует
+ использовать, когда проблема считается временной.</para>
- <para>В особых случаях кластер
- построения будет продолжать попытки собрать их, чтобы показать,
- решена ли основная проблема. (Однако, как правило, кластер
- запускается без этой возможности.)</para>
+ <para>В особых случаях кластер построения будет продолжать
+ попытки собрать их, чтобы показать, решена ли основная
+ проблема. (Однако, как правило, кластер запускается без
+ этой возможности.)</para>
- <para>В частности, используйте
- <varname>BROKEN</varname>, когда порт:</para>
+ <para>В частности, используйте <varname>BROKEN</varname>,
+ когда порт:</para>
<itemizedlist>
<listitem>
@@ -414,40 +422,41 @@ CFLAGS= -Wall -Werror
</listitem>
<listitem>
- <para>не удаляет полностью все свои файлы при деинсталляции
- (тем не менее, это может быть допустимо, и подходит
- для портов, оставляющих после себя файлы, измененные
- пользователем)</para>
+ <para>не удаляет полностью все свои файлы при
+ деинсталляции (тем не менее, это может быть
+ допустимо, и подходит для портов, оставляющих после
+ себя файлы, измененные пользователем)</para>
</listitem>
</itemizedlist>
-
</listitem>
- <listitem>
- <para><varname>FORBIDDEN</varname> используется для портов, которые
- содержат уязвимости в информационной безопасности или
- являются потенциально вредными в плане обеспечения информационной
- безопасности системы &os; при установке данного порта
- (например: заведомо небезопасная программа или программа, которая
- предоставляет легко взламываемые сервисы). Порты должны
- помечаться как <varname>FORBIDDEN</varname>, как только в
- конкретном программном обеспечении обнаружилась уязвимость, но
- обновление выпущено не было. В идеальном случае порты должны
- обновляться максимально быстро после обнаружения уязвимости,
- чтобы уменьшить число уязвимых хостов &os; (нам нравится иметь
- репутацию безопасной системы), однако иногда случается
- значительный временной разрыв между обнаружением уязвимости и
- выходом обновлённого релиза уязвимого программного обеспечения.
- Не помечайте порт как <varname>FORBIDDEN</varname>, если причина
- не вызвана соображениями информационной безопасности.</para>
+ <listitem>
+ <para><varname>FORBIDDEN</varname> используется для портов,
+ которые содержат уязвимости в информационной безопасности
+ или являются потенциально вредными в плане обеспечения
+ информационной безопасности системы &os; при установке
+ данного порта (например: заведомо небезопасная программа
+ или программа, которая предоставляет легко взламываемые
+ сервисы). Порты должны помечаться как
+ <varname>FORBIDDEN</varname>, как только в конкретном
+ программном обеспечении обнаружилась уязвимость, но
+ обновление выпущено не было. В идеальном случае порты
+ должны обновляться максимально быстро после обнаружения
+ уязвимости, чтобы уменьшить число уязвимых хостов &os;
+ (нам нравится иметь репутацию безопасной системы), однако
+ иногда случается значительный временной разрыв между
+ обнаружением уязвимости и выходом обновлённого релиза
+ уязвимого программного обеспечения. Не помечайте порт
+ как <varname>FORBIDDEN</varname>, если причина не вызвана
+ соображениями информационной безопасности.</para>
</listitem>
<listitem>
- <para><varname>IGNORE</varname> предназначена для портов, которые
- не должны строиться по какой-либо другой причине. Следует
- использовать для портов, в случае когда проблема считает
- конструктивной. Кластер построения
- ни при каких условиях не будет строить порты, помеченные как
+ <para><varname>IGNORE</varname> предназначена для портов,
+ которые не должны строиться по какой-либо другой причине.
+ Следует использовать для портов, в случае когда проблема
+ считается структурной. Кластер построения ни при каких
+ условиях не будет строить порты, помеченные как
<varname>IGNORE</varname>. В частности, используйте
<varname>IGNORE</varname>, когда порт:</para>
@@ -461,260 +470,274 @@ CFLAGS= -Wall -Werror
</listitem>
<listitem>
- <para>имеет distfile, который не может быть автоматически
- извлечен из-за лицензионных ограничений</para>
+ <para>имеет дистрибутивный файл, который не может быть
+ автоматически извлечен из-за лицензионных
+ ограничений</para>
</listitem>
<listitem>
- <para>не работает с каким-либо другим портом, установленным
- в настоящее время (например, порт зависит от
- <package role="port">www/apache20</package>, но установлен
- <package role="port">www/apache22</package>)
- </para>
+ <para>не работает с каким-либо другим портом,
+ установленным в настоящее время (например, порт
+ зависит от <package
+ role="port">www/apache20</package>, но установлен
+ <package role="port">www/apache22</package>)</para>
</listitem>
</itemizedlist>
<note>
- <para>Если порт будет конфликтовать с уже установленным портом,
- (например, если они устанавливают файл в то же место, но
- с иным функциональным назначением), то
- <link linkend="conflicts">используйте
- вместо этого <varname>CONFLICTS</varname></link>.
+ <para>Если порт будет конфликтовать с уже установленным
+ портом (например, если они устанавливают файл в то же
+ место, но с иным функциональным назначением), то <link
+ linkend="conflicts">используйте вместо этого
+ <varname>CONFLICTS</varname></link>.
<varname>CONFLICTS</varname> сам установит значение
<varname>IGNORE</varname>.</para>
</note>
</listitem>
<listitem>
- <para>Если порт нужно пометить как <varname>IGNORE</varname>
- только на некоторых архитектурах, для этого есть две другие
- удобные переменные, которые автоматически установят для вас
+ <para>Если порт нужно пометить как
+ <varname>IGNORE</varname> только на некоторых
+ архитектурах, для этого есть две другие удобные
+ переменные, которые автоматически установят для вас
значения: <varname>ONLY_FOR_ARCHS</varname> и
<varname>NOT_FOR_ARCHS</varname>. Примеры:</para>
- <programlisting>ONLY_FOR_ARCHS= i386 amd64</programlisting>
+ <programlisting>ONLY_FOR_ARCHS= i386 amd64</programlisting>
- <programlisting>NOT_FOR_ARCHS= ia64 sparc64</programlisting>
+ <programlisting>NOT_FOR_ARCHS= ia64 sparc64</programlisting>
- <para>Собственное сообщение <varname>IGNORE</varname> можно задать
- с использованием <varname>ONLY_FOR_ARCHS_REASON</varname> и
- <varname>NOT_FOR_ARCHS_REASON</varname>. Отдельно для каждой
- архитектуры это возможно с использованием
+ <para>Собственное сообщение <varname>IGNORE</varname> можно
+ задать с использованием
+ <varname>ONLY_FOR_ARCHS_REASON</varname> и
+ <varname>NOT_FOR_ARCHS_REASON</varname>. Отдельно для
+ каждой архитектуры это возможно с использованием
<varname>ONLY_FOR_ARCHS_REASON_<replaceable>ARCH</replaceable></varname>
и
<varname>NOT_FOR_ARCHS_REASON_<replaceable>ARCH</replaceable></varname>.</para>
</listitem>
<listitem>
- <para>Если порт загружает и устанавливает исполняемые файлы i386,
- то следует установить <varname>IA32_BINARY_PORT</varname>.
- Если эта переменная установлена, будет выполнена проверка
- доступности каталога <filename>/usr/lib32</filename> для
- библиотек версии IA32 и поддержки IA32 в ядре. При невыполнении
+ <para>Если порт загружает и устанавливает исполняемые файлы
+ i386, то следует установить
+ <varname>IA32_BINARY_PORT</varname>. Если эта переменная
+ установлена, будет выполнена проверка доступности
+ каталога <filename>/usr/lib32</filename> для библиотек
+ версии IA32 и поддержки IA32 в ядре. При невыполнении
любого из этих условий будет автоматически установлена
переменная <varname>IGNORE</varname>.</para>
</listitem>
-
</itemizedlist>
-
- </sect2>
- <sect2 xml:id="dads-noinstall-notes">
- <title>Замечания по реализации</title>
-
- <para>Строки не следует брать в кавычки.
- Также построение строки должно несколько различаться из-за
- способа отображения информации пользователю. Примеры:</para>
-
- <programlisting>BROKEN= fails to link with base -lcrypto</programlisting>
-
- <programlisting>IGNORE= unsupported on recent versions</programlisting>
-
- <para>получаемые в результате следующего вывода
- <command>make describe</command>:</para>
-
- <programlisting>===&gt; foobar-0.1 is marked as broken: fails to link with base -lcrypto.</programlisting>
-
- <programlisting>===&gt; foobar-0.1 is unsupported on recent versions.</programlisting>
- </sect2>
- </sect1>
-
- <sect1 xml:id="dads-deprecated">
- <title>Пометка порта на удаление с <varname>DEPRECATED</varname>
- или <varname>EXPIRATION_DATE</varname></title>
-
- <para>Помните, что <varname>BROKEN</varname> и
- <varname>FORBIDDEN</varname> будут использованы как временное
- средство, если порт не является работающим. Постоянно
- неработоспособные порты должны полностью удаляться из дерева.</para>
-
- <para>В подходящих ситуациях пользователи могут быть оповещены о
- предстоящем удалении через переменные <varname>DEPRECATED</varname>
- и <varname>EXPIRATION_DATE</varname>. Первое - это просто строка,
- сообщающая причину запланированного удаления порта; вторая является
- строкой в формате ISO 8601 (YYYY-MM-DD). Обе будут показаны
- пользователю.</para>
-
- <para>Переменную <varname>DEPRECATED</varname> можно установить без
- использования <varname>EXPIRATION_DATE</varname> (в частности, при
- рекомендации новой версии порта), но обратный порядок не имеет
- никакого смысла.</para>
-
- <para>Не существует устоявшейся политики, как долго следует продолжать
- уведомления. Текущая практика дает около месяца для решения проблем
- безопасности и два месяца для проблем построения. Это также дает
- немного времени на исправление проблем любым заинтересованным
- коммиттерам.</para>
- </sect1>
-
- <sect1 xml:id="dads-dot-error">
- <title>Избегайте использования конструкции
+ </sect2>
+
+ <sect2 xml:id="dads-noinstall-notes">
+ <title>Замечания по реализации</title>
+
+ <para>Строки не следует брать в кавычки. Также построение
+ строки должно несколько различаться из-за способа отображения
+ информации пользователю. Примеры:</para>
+
+ <programlisting>BROKEN= fails to link with base -lcrypto</programlisting>
+
+ <programlisting>IGNORE= unsupported on recent versions</programlisting>
+
+ <para>получаемые в результате следующего вывода
+ <command>make describe</command>:</para>
+
+ <programlisting>===&gt; foobar-0.1 is marked as broken: fails to link with base -lcrypto.</programlisting>
+
+ <programlisting>===&gt; foobar-0.1 is unsupported on recent versions.</programlisting>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="dads-deprecated">
+ <title>Пометка порта на удаление с <varname>DEPRECATED</varname>
+ или <varname>EXPIRATION_DATE</varname></title>
+
+ <para>Помните, что <varname>BROKEN</varname> и
+ <varname>FORBIDDEN</varname> будут использованы как временное
+ средство, если порт не является работающим. Постоянно
+ неработоспособные порты должны полностью удаляться из
+ дерева.</para>
+
+ <para>В подходящих ситуациях пользователи могут быть оповещены о
+ предстоящем удалении через переменные
+ <varname>DEPRECATED</varname> и
+ <varname>EXPIRATION_DATE</varname>. Первое - это просто
+ строка, сообщающая причину запланированного удаления порта;
+ вторая является строкой в формате ISO 8601 (YYYY-MM-DD). Обе
+ будут показаны пользователю.</para>
+
+ <para>Переменную <varname>DEPRECATED</varname> можно установить
+ без использования <varname>EXPIRATION_DATE</varname> (в
+ частности, при рекомендации новой версии порта), но обратный
+ порядок не имеет никакого смысла.</para>
+
+ <para>Не существует устоявшейся политики, как долго следует
+ продолжать уведомления. Текущая практика дает около месяца для
+ решения проблем безопасности и два месяца для проблем
+ построения. Это также дает немного времени на исправление
+ проблем любым заинтересованным коммиттерам.</para>
+ </sect1>
+
+ <sect1 xml:id="dads-dot-error">
+ <title>Избегайте использования конструкции
+ <literal>.error</literal></title>
+
+ <para>Правильным способом подать сигнал для
+ <filename>Makefile</filename> о том, что порт не может быть
+ установлен из-за какого-то внешнего фактора (например,
+ пользователь указал недопустимую комбинацию опций построения),
+ является установка непустого значения для
+ <varname>IGNORE</varname>. Это значение будет сформатировано и
+ показано пользователю во время
+ <command>make install</command>.</para>
+
+ <para>Использование для этих целей <literal>.error</literal>
+ является распространенной ошибкой. Проблема в том, что в этой
+ ситуации будут повреждены многие инструменты автоматизации,
+ работающие с деревом портов. Наибольшим образом это
+ распространено при попытке построить
+ <filename>/usr/ports/INDEX</filename> (смотрите <xref
+ linkend="make-describe"/>). Тем не менее, даже более простые
+ команды, такие как <command>make maintainer</command>, в этом
+ случае также вернут ошибку. Это не является приемлемым.</para>
+
+ <example xml:id="dot-error-breaks-index">
+ <title>Как избегать использования
<literal>.error</literal></title>
- <para>Правильным способом подать сигнал для <filename>Makefile</filename>
- о том, что порт не может быть установлен из-за какого-то внешнего
- фактора (например, пользователь указал недопустимую комбинацию
- опций построения), является установка непустого значения для
- <varname>IGNORE</varname>. Это значение будет сформатировано и
- показано пользователю во время <command>make install</command>.</para>
-
- <para>Использование для этих целей <literal>.error</literal> является
- распространенной ошибкой. Проблема в том, что в этой ситуации
- будут повреждены многие инструменты автоматизации, работающие с
- деревом портов. Наибольшим образом это распространено при попытке
- построить <filename>/usr/ports/INDEX</filename> (смотрите <xref linkend="make-describe"/>). Тем не менее, даже более простые команды,
- такие как <command>make maintainer</command>, в этом случае также
- вернут ошибку. Это не является приемлемым.</para>
-
- <example xml:id="dot-error-breaks-index">
- <title>Как избегать использование <literal>.error</literal></title>
-
- <para>Из следующих двух вариантов строки файла
- <filename>Makefile</filename> первый приведёт к неудачному
- завершению работы <command>make index</command>, а второй -
- нет:</para>
-
- <programlisting>.error "option is not supported"</programlisting>
-
- <programlisting>IGNORE=option is not supported</programlisting>
- </example>
- </sect1>
-
- <sect1 xml:id="dads-sysctl">
- <title>Использование <filename>sysctl</filename></title>
-
- <para>Использование <filename>sysctl</filename> не рекомендуется,
- кроме как при выполнении целей. Это вызвано тем, что вычисление
- любых <literal>makevar</literal>, таких как во время команды
- <command>make index</command>, с необходимостью запуска этой
- команды, еще больше замедляет весь процесс.</para>
-
- <para>&man.sysctl.8; следует всегда использовать через переменную
- <varname>SYSCTL</varname>, поскольку она содержит полностью заданный
- путь, и при необходимости может быть переопределена.</para>
- </sect1>
-
- <sect1 xml:id="dads-rerolling-distfiles">
- <title>Меняющиеся дистрибутивные файлы</title>
-
- <para>Иногда авторы программного обеспечения меняют содержимое
- выпущенных дистрибутивных файлов без смены названия. Вы должны
- проверять, что изменения являются официальными и произведены
- автором. В прошлом бывало, что дистрибутивный файл молча изменялся
- на сайтах загрузки с намерением нанести вред или скомпрометировать
- безопасность конечного пользователя.</para>
-
- <para>Отложите старый файл с дистрибутивом в сторону, загрузите новый,
- распакуйте его и сравните содержимое при помощи &man.diff.1;.
- Если вы не видите ничего подозрительного, то можете обновить файл
- <filename>distinfo</filename>. Убедитесь, что вы подытожили различия
- в вашем PR или описании коммита, чтобы другие люди были в курсе, что
- вы позаботились о том, что ничего плохого не случилось.</para>
-
- <para>Возможно вы также захотите связаться с автором этого программного
- обеспечения для подтверждения изменений.</para>
- </sect1>
-
- <sect1 xml:id="dads-avoiding-linuxisms">
- <title>Избегание линуксизмов</title>
-
- <para>Не используйте <filename>/proc</filename>, если доступны
- любые другие источники получения информации, например,
- <function>setprogname(argv[0])</function> в
- <function>main()</function> и &man.getprogname.3;, в случае
- если вы хотите <quote>знать своё имя</quote>.</para>
-
- <para>Не полагайтесь на поведение, не регламентированное
- <acronym>POSIX</acronym>.</para>
-
- <para>Не выполняйте запись временных меток в критических путях
- выполнения приложения, если можно обойтись без этого. Получение
- временных меток может быть медленным, в зависимости от степени
- точности используемых часов в операционной системе. Если
- временные метки действительно нужны, определите степень
- требуемой точности и используйте тот <acronym>API</acronym>,
- в котором документируется получение достаточной точности.</para>
-
- <para>Ряд простых системных вызовов (например, &man.gettimeofday.2;,
- &man.getpid.2;) работают намного быстрее в &linux; по сравнению
- с любой другой операционной системой из-за кеширования и
- используемой оптимизации vsyscall. Не полагайтесь на их
- дешевизну в критичных к производительности приложениях. В
- целом, старайтесь избегать системных вызовов там, где это
- возможно.</para>
-
- <para>Не полагайтесь на специфичное для &linux; поведение сокета.
- В частности, отличаются размеры буфера сокета по умолчанию
- (выполните вызов &man.setsockopt.2; с <literal>SO_SNDBUF</literal>
- и <literal>SO_RCVBUF</literal>, и в то время как в &linux;
- при заполнении буфера сокета &man.send.2; блокируется, &os;
- возвращает ошибку и устанавливает <literal>ENOBUFS</literal>
- в качестве значения errno.</para>
-
- <para>Если требуется рассчитывать на нестандартное поведение,
- инкапсулируйте это должным образом в общий для всех
- <acronym>API</acronym> с проверкой поведения на этапе
- конфигурации, и если требуемое поведение не найдено,
- прекращайте выполнение.</para>
-
- <para>Используйте <link xlink:href="http://www.freebsd.org/cgi/man.cgi">страницы
- справочника</link> для проверки, относится ли функция к
- интерфейсу <acronym>POSIX</acronym> (ищите раздел
- <quote>STANDARDS</quote> на странице справочника).</para>
-
- <para>Не рассчитывайте на то, что в качестве
- <filename>/bin/sh</filename> используется
- <application>bash</application>. Убедитесь, что командная
- строка, переданная в &man.system.3;, будет работать в
- <acronym>POSIX</acronym>-совместимой оболочке.</para>
-
- <para>Список основных <application>bash</application>-измов
- расположен <link xlink:href="https://wiki.ubuntu.com/DashAsBinSh">здесь</link>.</para>
-
- <para>Проверьте, что используемые заголовочные файлы включены в
- <acronym>POSIX</acronym> или список, рекомендуемый страницей
- справочника, т.к. например, забыть подключить
- <filename>sys/types.h</filename> &mdash; не такая уж проблема
- в &linux;, однако это не так во &os;.</para>
-
- <para>Компилируйте многопоточные приложения с ключом
- <quote>-pthread</quote>, а не <quote>-lpthread</quote> или
- как-либо ещё.</para>
- </sect1>
-
- <sect1 xml:id="dads-misc">
- <title>Разное</title>
-
- <para>Файлы <filename>pkg-descr</filename> и
- <filename>pkg-plist</filename> должны проверяться дважды. Если вы
- пересматриваете порт и думаете, что его можно описать иначе,
- сделайте это.</para>
-
- <para>Пожалуйста, не создавайте дополнительных копий лицензии GNU
- General Public License в нашей системе.</para>
-
- <para>Будьте внимательны с юридическими вопросами! Не делайте из нас
- нелегальных распространителей ПО!</para>
- </sect1>
-
- </chapter>
-
+ <para>Из следующих двух вариантов строки файла
+ <filename>Makefile</filename> первый приведёт к неудачному
+ завершению работы <command>make index</command>, а второй -
+ нет:</para>
+
+ <programlisting>.error "option is not supported"</programlisting>
+
+ <programlisting>IGNORE=option is not supported</programlisting>
+ </example>
+ </sect1>
+
+ <sect1 xml:id="dads-sysctl">
+ <title>Использование <filename>sysctl</filename></title>
+
+ <para>Использование <filename>sysctl</filename> не рекомендуется,
+ кроме как при выполнении целей. Это вызвано тем, что
+ вычисление любых <literal>makevar</literal>, таких как во время
+ команды <command>make index</command>, с необходимостью запуска
+ этой команды, еще больше замедляет весь процесс.</para>
+
+ <para>&man.sysctl.8; следует всегда использовать через переменную
+ <varname>SYSCTL</varname>, поскольку она содержит полностью
+ заданный путь, и при необходимости может быть
+ переопределена.</para>
+ </sect1>
+
+ <sect1 xml:id="dads-rerolling-distfiles">
+ <title>Меняющиеся дистрибутивные файлы</title>
+
+ <para>Иногда авторы программного обеспечения меняют содержимое
+ выпущенных дистрибутивных файлов без смены названия. Вы должны
+ проверять, что изменения являются официальными и произведены
+ автором. В прошлом бывало, что дистрибутивный файл молча
+ изменялся на сайтах загрузки с намерением нанести вред или
+ скомпрометировать безопасность конечного пользователя.</para>
+
+ <para>Отложите старый файл с дистрибутивом в сторону, загрузите
+ новый, распакуйте его и сравните содержимое при помощи
+ &man.diff.1;. Если вы не видите ничего подозрительного, то
+ можете обновить файл <filename>distinfo</filename>. Убедитесь,
+ что вы подытожили различия в вашем PR или описании коммита,
+ чтобы другие люди были в курсе, что вы позаботились о том, что
+ ничего плохого не случилось.</para>
+
+ <para>Возможно вы также захотите связаться с автором этого
+ программного обеспечения для подтверждения изменений.</para>
+ </sect1>
+
+ <sect1 xml:id="dads-avoiding-linuxisms">
+ <title>Избегание линуксизмов</title>
+
+ <para>Не используйте <filename>/proc</filename>, если доступны
+ любые другие источники получения информации, например,
+ <function>setprogname(argv[0])</function> в
+ <function>main()</function> и &man.getprogname.3;, в случае
+ если вы хотите <quote>знать своё имя</quote>.</para>
+
+ <para>Не полагайтесь на поведение, не регламентированное
+ <acronym>POSIX</acronym>.</para>
+
+ <para>Не выполняйте запись временных меток в критических путях
+ выполнения приложения, если можно обойтись без этого.
+ Получение временных меток может быть медленным, в зависимости
+ от степени точности используемых часов в операционной системе.
+ Если временные метки действительно нужны, определите степень
+ требуемой точности и используйте тот <acronym>API</acronym>,
+ в котором документируется получение достаточной
+ точности.</para>
+
+ <para>Ряд простых системных вызовов (например,
+ &man.gettimeofday.2;, &man.getpid.2;) работают намного быстрее
+ в &linux; по сравнению с любой другой операционной системой
+ из-за кеширования и используемой оптимизации vsyscall. Не
+ полагайтесь на их дешевизну в критичных к производительности
+ приложениях. В целом, старайтесь избегать системных вызовов
+ там, где это возможно.</para>
+
+ <para>Не полагайтесь на специфичное для &linux; поведение сокета.
+ В частности, отличаются размеры буфера сокета по умолчанию
+ (выполните вызов &man.setsockopt.2; с
+ <literal>SO_SNDBUF</literal> и <literal>SO_RCVBUF</literal>, и
+ в то время как в &linux; при заполнении буфера сокета
+ &man.send.2; блокируется, &os; возвращает ошибку и
+ устанавливает <literal>ENOBUFS</literal> в качестве значения
+ errno.</para>
+
+ <para>Если требуется рассчитывать на нестандартное поведение,
+ инкапсулируйте это должным образом в общий для всех
+ <acronym>API</acronym> с проверкой поведения на этапе
+ конфигурации, и если требуемое поведение не найдено,
+ прекращайте выполнение.</para>
+
+ <para>Используйте <link
+ xlink:href="http://www.freebsd.org/cgi/man.cgi">страницы
+ справочника</link> для проверки, относится ли функция к
+ интерфейсу <acronym>POSIX</acronym> (ищите раздел
+ <quote>STANDARDS</quote> на странице справочника).</para>
+
+ <para>Не рассчитывайте на то, что в качестве
+ <filename>/bin/sh</filename> используется
+ <application>bash</application>. Убедитесь, что командная
+ строка, переданная в &man.system.3;, будет работать в
+ <acronym>POSIX</acronym>-совместимой оболочке.</para>
+
+ <para>Список основных <application>bash</application>-измов
+ расположен <link
+ xlink:href="https://wiki.ubuntu.com/DashAsBinSh">здесь</link>.</para>
+
+ <para>Проверьте, что используемые заголовочные файлы включены в
+ <acronym>POSIX</acronym> или список, рекомендуемый страницей
+ справочника, т.к. например, забыть подключить
+ <filename>sys/types.h</filename> &mdash; не такая уж проблема в
+ &linux;, однако это не так во &os;.</para>
+
+ <para>Компилируйте многопоточные приложения с ключом
+ <quote>-pthread</quote>, а не <quote>-lpthread</quote> или
+ как-либо ещё.</para>
+ </sect1>
+
+ <sect1 xml:id="dads-misc">
+ <title>Разное</title>
+
+ <para>Файлы <filename>pkg-descr</filename> и
+ <filename>pkg-plist</filename> должны проверяться дважды. Если
+ вы пересматриваете порт и думаете, что его можно описать иначе,
+ сделайте это.</para>
+
+ <para>Пожалуйста, не создавайте дополнительных копий лицензии GNU
+ General Public License в нашей системе.</para>
+
+ <para>Будьте внимательны с юридическими вопросами! Не делайте из
+ нас нелегальных распространителей ПО!</para>
+ </sect1>
+</chapter>
diff --git a/ru_RU.KOI8-R/books/porters-handbook/porting-samplem/chapter.xml b/ru_RU.KOI8-R/books/porters-handbook/porting-samplem/chapter.xml
index c0c1656a6a..6a88c9eab9 100644
--- a/ru_RU.KOI8-R/books/porters-handbook/porting-samplem/chapter.xml
+++ b/ru_RU.KOI8-R/books/porters-handbook/porting-samplem/chapter.xml
@@ -7,21 +7,24 @@
Original revision: r43840
-->
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="porting-samplem">
+<chapter xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
+ xml:id="porting-samplem">
- <title>Примерный <filename>Makefile</filename></title>
+ <title>Примерный <filename>Makefile</filename></title>
- <para>Вот примерный <filename>Makefile</filename>, который можно
- использовать при создании нового порта. Обязательно удалите все
- дополнительные комментарии (те, которые в скобках)!</para>
+ <para>Вот примерный <filename>Makefile</filename>, который можно
+ использовать при создании нового порта. Обязательно удалите все
+ дополнительные комментарии (те, которые в скобках)!</para>
- <para>Вам рекомендуется следовать этому формату (соблюдая порядок
- следования переменных, пустые строки между разделами, и так далее).
- Этот формат разработан для того, чтобы важная информация была легко
- найдена. Мы рекомендуем вам воспользоваться утилитой <link linkend="porting-portlint">portlint</link> для проверки файла
- <filename>Makefile</filename>.</para>
+ <para>Вам рекомендуется следовать этому формату (соблюдая порядок
+ следования переменных, пустые строки между разделами, и так
+ далее). Этот формат разработан для того, чтобы важная информация
+ была легко найдена. Мы рекомендуем вам воспользоваться утилитой
+ <link linkend="porting-portlint">portlint</link> для проверки
+ файла <filename>Makefile</filename>.</para>
- <programlisting>[заголовок...просто чтобы нам было легче идентифицировать порт.]
+ <programlisting>[заголовок...просто чтобы нам было легче идентифицировать порт.]
# Created by: Satoshi Asami &lt;asami@FreeBSD.org&gt;
[Необязательная строка <emphasis>Created by:</emphasis> содержит имя
человека, создавшего первоначальную версию порта. Следует отметить,
@@ -41,56 +44,56 @@
PKGNAMEPREFIX и PKGNAMESUFFIX, если они нужны, следуют за ними.
Затем следует DISTNAME, EXTRACT_SUFX и/или DISTFILES, а потом, если это нужно,
EXTRACT_ONLY.]
-PORTNAME= xdvi
-PORTVERSION= 18.2
-CATEGORIES= print
+PORTNAME= xdvi
+PORTVERSION= 18.2
+CATEGORIES= print
[не забывайте про завершающую косую черту ("/")!
если вы не используете макросы MASTER_SITE_*]
-MASTER_SITES= ${MASTER_SITE_XCONTRIB}
+MASTER_SITES= ${MASTER_SITE_XCONTRIB}
MASTER_SITE_SUBDIR= applications
-PKGNAMEPREFIX= ja-
-DISTNAME= xdvi-pl18
+PKGNAMEPREFIX= ja-
+DISTNAME= xdvi-pl18
[задайте это, если исходный код поставляется не в виде
стандартного файла ".tar.gz"]
-EXTRACT_SUFX= .tar.Z
+EXTRACT_SUFX= .tar.Z
[секция патчей -- может быть пустой]
-PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/
-PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz
+PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/
+PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz
[сопровождающий; *обязательное поле*! Это человек, который добровольно
занимается обновлениями порта и неисправностями при построении, и которому
пользователь может направлять вопросы и сообщения об ошибках. Для
сохранения как можно более высокого качества Коллекции Портов мы больше
не принимаем новые порты, назначенные на "ports@FreeBSD.org".]
-MAINTAINER= asami@FreeBSD.org
-COMMENT= DVI Previewer for the X Window System
+MAINTAINER= asami@FreeBSD.org
+COMMENT= DVI Previewer for the X Window System
[зависимости -- могут быть пустыми]
-RUN_DEPENDS= gs:${PORTSDIR}/print/ghostscript
+RUN_DEPENDS= gs:${PORTSDIR}/print/ghostscript
[этот раздел для остальных стандартных переменных из bsd.port.mk, кроме
тех, что перечислены выше]
[Если порт задает вопросы во время этапов настройки, построения,
установки...]
-IS_INTERACTIVE= yes
+IS_INTERACTIVE= yes
[Если распаковка происходит в каталог, отличных от ${DISTNAME}...]
-WRKSRC= ${WRKDIR}/xdvi-new
+WRKSRC= ${WRKDIR}/xdvi-new
[Если патчи делались не относительно ${WRKSRC}, вам, может быть, не
придется изменять эту переменную]
-PATCH_DIST_STRIP= -p1
+PATCH_DIST_STRIP= -p1
[Если порт требует скрипта "configure", генерируемого GNU-версией программы
autoconf]
-GNU_CONFIGURE= yes
+GNU_CONFIGURE= yes
[Если для построения порту требуется GNU-версия утилиты make, а не
/usr/bin/make...]
-USES= gmake
+USES= gmake
[Если это приложение X и требует запуска "xmkmf -a"...]
-USES= imake
+USES= imake
[и так далее]
[В правилах ниже используются нестандартные переменные]
-MY_FAVORITE_RESPONSE= "yeah, right"
+MY_FAVORITE_RESPONSE= "yeah, right"
[теперь специальные правила, в порядке их вызова]
pre-fetch:
@@ -104,7 +107,5 @@ pre-install:
[и, наконец, эпилог]
-.include &lt;bsd.port.mk&gt;
- </programlisting>
- </chapter>
-
+.include &lt;bsd.port.mk&gt;</programlisting>
+</chapter>
diff --git a/ru_RU.KOI8-R/books/porters-handbook/porting-why/chapter.xml b/ru_RU.KOI8-R/books/porters-handbook/porting-why/chapter.xml
index 42ae60f1cf..e57a947951 100644
--- a/ru_RU.KOI8-R/books/porters-handbook/porting-why/chapter.xml
+++ b/ru_RU.KOI8-R/books/porters-handbook/porting-why/chapter.xml
@@ -7,19 +7,20 @@
Original revision: r43840
-->
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="why-port">
+<chapter xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
+ xml:id="why-port">
- <title>Введение</title>
+ <title>Введение</title>
- <para>Коллекция портов &os; является способом, используемым
- практически каждым для установки приложений ("портов") на &os;.
- Как и почти всё остальное во &os;, эта система в основном является
- добровольно поддерживаемым начинанием. Важно иметь это в виду при
- чтении данного документа.</para>
-
- <para>Во &os; каждый может прислать новый порт либо изъявить желание
- поддерживать существующий порт, если его никто ещё никто не
- поддерживает&mdash;вам не нужно иметь никаких особых привилегий на
- внесение изменений, чтобы это делать.</para>
- </chapter>
+ <para>Коллекция портов &os; является способом, используемым
+ практически каждым для установки приложений ("портов") на &os;.
+ Как и почти всё остальное во &os;, эта система в основном
+ является добровольно поддерживаемым начинанием. Важно иметь это
+ в виду при чтении данного документа.</para>
+ <para>Во &os; каждый может прислать новый порт либо изъявить
+ желание поддерживать существующий порт, если его никто ещё никто
+ не поддерживает&mdash;вам не нужно иметь никаких особых
+ привилегий на внесение изменений, чтобы это делать.</para>
+</chapter>
diff --git a/ru_RU.KOI8-R/books/porters-handbook/quick-porting/chapter.xml b/ru_RU.KOI8-R/books/porters-handbook/quick-porting/chapter.xml
index 8b6b0b498e..c5357a8b18 100644
--- a/ru_RU.KOI8-R/books/porters-handbook/quick-porting/chapter.xml
+++ b/ru_RU.KOI8-R/books/porters-handbook/quick-porting/chapter.xml
@@ -7,150 +7,155 @@
Original revision: r43840
-->
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="quick-porting">
+<chapter xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
+ xml:id="quick-porting">
- <title>Быстрое портирование</title>
+ <title>Быстрое портирование</title>
- <para>В этом разделе описано, как создать новый порт на скорую руку.
- Во многих случаях этого бывает не достаточно, так что вам нужно будет
- прочитать документ дальше.</para>
+ <para>В этом разделе описано, как создать новый порт на скорую
+ руку. Во многих случаях этого бывает не достаточно, так что вам
+ нужно будет прочитать документ дальше.</para>
- <para>Во-первых, скачайте оригинальный tar-файл и поместите его в каталог
- <varname>DISTDIR</varname>, который по умолчанию есть не что иное, как
- <filename>/usr/ports/distfiles</filename>.</para>
+ <para>Во-первых, скачайте оригинальный tar-файл и поместите его в
+ каталог <varname>DISTDIR</varname>, который по умолчанию есть не
+ что иное, как <filename>/usr/ports/distfiles</filename>.</para>
- <note>
- <para>Здесь предполагается, что программное обеспечение компилируется
- без проблем как есть, то есть для работы приложения на вашей системе
- &os; не потребовалось абсолютно никаких изменений. Если
- требовалось что-то изменить, то вам придется обратиться также и к
- следующему разделу.</para>
- </note>
+ <note>
+ <para>Здесь предполагается, что программное обеспечение
+ компилируется без проблем как есть, то есть для работы
+ приложения на вашей системе &os; не потребовалось абсолютно
+ никаких изменений. Если требовалось что-то изменить, то вам
+ придется обратиться также и к следующему разделу.</para>
+ </note>
- <note>
- <para>Перед началом портирования рекомендуется установить
- переменную &man.make.1; <varname>DEVELOPER</varname> в
- <filename>/etc/make.conf</filename>.</para>
+ <note>
+ <para>Перед началом портирования рекомендуется установить
+ переменную &man.make.1; <varname>DEVELOPER</varname> в
+ <filename>/etc/make.conf</filename>.</para>
- <screen>&prompt.root; <userinput>echo DEVELOPER=yes >> /etc/make.conf</userinput></screen>
+ <screen>&prompt.root; <userinput>echo DEVELOPER=yes >> /etc/make.conf</userinput></screen>
- <para>Эта настройка включает <quote>режим разработчика</quote>,
- в котором отображаются предупреждения при использовании
- устаревших конструкций и задействуются некоторые дополнительные
- проверки при вызове команды <command>make</command>.</para>
- </note>
+ <para>Эта настройка включает <quote>режим разработчика</quote>, в
+ котором отображаются предупреждения при использовании
+ устаревших конструкций и задействуются некоторые дополнительные
+ проверки при вызове команды <command>make</command>.</para>
+ </note>
- <sect1 xml:id="porting-makefile">
- <title>Создание файла <filename>Makefile</filename></title>
+ <sect1 xml:id="porting-makefile">
+ <title>Создание файла <filename>Makefile</filename></title>
- <para>Минимальный <filename>Makefile</filename> будет выглядеть
- примерно так:</para>
+ <para>Минимальный <filename>Makefile</filename> будет выглядеть
+ примерно так:</para>
- <programlisting># &dollar;FreeBSD&dollar;
+ <programlisting># &dollar;FreeBSD&dollar;
-PORTNAME= oneko
-PORTVERSION= 1.1b
-CATEGORIES= games
-MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/
+PORTNAME= oneko
+PORTVERSION= 1.1b
+CATEGORIES= games
+MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/
-MAINTAINER= youremail@example.com
-COMMENT= Cat chasing a mouse all over the screen
+MAINTAINER= youremail@example.com
+COMMENT= Cat chasing a mouse all over the screen
.include &lt;bsd.port.mk&gt;</programlisting>
+ <note>
+ <para>В некоторых случаях в заголовке
+ <filename>Makefile</filename> существующего порта могут
+ содержаться дополнительные строки, такие как название порта и
+ дата его создания. Эта дополнительная информация была
+ объявлена устаревшей и находится в процессе удаления.</para>
+ </note>
+
+ <para>Посмотрим, сможете ли вы его понять. Не обращайте внимание
+ на содержимое строчки
+ <literal>&dollar;FreeBSD&dollar;</literal>, она будет заполнена
+ автоматически системой <application>Subversion</application>,
+ когда порт будет импортирован в наше дерево портов. Вы можете
+ найти более подробный пример в разделе <link
+ linkend="porting-samplem">пример Makefile</link>.</para>
+ </sect1>
+
+ <sect1 xml:id="porting-desc">
+ <title>Создание информационных файлов</title>
+
+ <para>Имеется два информационных файла, которые требуются для
+ любого порта, вне зависимости от того, является ли он пакетом
+ или нет. Это <filename>pkg-descr</filename> и
+ <filename>pkg-plist</filename>. Префикс
+ <filename>pkg-</filename> отличает их от других файлов.</para>
+
+ <sect2>
+ <title><filename>pkg-descr</filename></title>
+
+ <para>Это более подробное краткое описание порта. От одного до
+ нескольких абзацев, кратко описывающих, что представляет
+ собой порт, будет достаточно.</para>
+
+ <note>
+ <para>Это <emphasis>не</emphasis> руководство и не
+ подробнейшее описание того, как использовать или
+ компилировать порт! <emphasis>Пожалуйста, будьте
+ внимательны при копировании текста из
+ <filename>README</filename> или страниц справочника
+ </emphasis>; слишком часто они не являются кратким
+ описанием порта или имеют неудобный формат (например,
+ страницы справочника выровнены пробелами, что особенно
+ плохо смотрится с моноширинными шрифтами).</para>
+ </note>
+
+ <para>Хорошо составленный <filename>pkg-descr</filename>
+ описывает порт достаточно полно, чтобы пользователю не
+ приходилось сверяться с документацией или посещать вебсайт
+ для понимания того, что делает данное программное
+ обеспечение, чем оно может быть полезно или какие хорошие
+ функции у него имеются. Упоминание про определённые
+ требования, такие как используемый графический
+ инструментарий, тяжёлые зависимости, окружение для запуска
+ или используемый язык программирования помогут пользователям
+ определиться, будет ли этот порт для них работать.</para>
+
+ <para>Включите сюда URL официальной домашней страницы Интернет.
+ Перед <emphasis>одним</emphasis> из сайтов (выберите
+ основной) добавьте <literal>WWW:</literal> (с последующим
+ единичным пробелом) для того, чтобы вспомогательные утилиты
+ работали правильно. Если URI является корнем сайта или
+ каталогом, то значение должно быть дополнено косой
+ чертой.</para>
+
<note>
- <para>В некоторых случаях в заголовке <filename>Makefile</filename>
- существующего порта могут содержаться дополнительные строки,
- такие как название порта и дата его создания.
- Эта дополнительная информация была объявлена устаревшей
- и находится в процессе удаления.</para>
+ <para>Если указанная для порта веб-страница не доступна,
+ попытайтесь сперва поискать, был ли официальный сайт
+ перемещён, переименован или размещён в другом месте.</para>
</note>
- <para>Посмотрим, сможете ли вы его понять. Не обращайте внимание на
- содержимое строчки <literal>&dollar;FreeBSD&dollar;</literal>, она
- будет заполнена автоматически системой
- <application>Subversion</application>, когда порт будет
- импортирован в наше дерево портов. Вы можете найти более подробный
- пример в разделе <link linkend="porting-samplem">пример
- Makefile</link>.</para>
- </sect1>
-
- <sect1 xml:id="porting-desc">
- <title>Создание информационных файлов</title>
-
- <para>Имеется два информационных файла, которые требуются для любого
- порта, вне зависимости от того, является ли он пакетом или нет. Это
- <filename>pkg-descr</filename> и <filename>pkg-plist</filename>.
- Префикс <filename>pkg-</filename> отличает их от других файлов.</para>
-
- <sect2>
- <title><filename>pkg-descr</filename></title>
-
- <para>Это более подробное краткое описание порта. От одного до
- нескольких абзацев, кратко описывающих, что представляет собой
- порт, будет достаточно.</para>
-
- <note>
- <para>Это <emphasis>не</emphasis> руководство и не подробнейшее
- описание того, как использовать или компилировать порт!
- <emphasis>Пожалуйста, будьте внимательны при копировании текста
- из <filename>README</filename> или страниц
- справочника</emphasis>; слишком часто они не являются кратким
- описанием порта или имеют неудобный формат (например, страницы
- справочника выровнены пробелами, что особенно плохо
- смотрится с моноширинными шрифтами).</para>
- </note>
-
- <para>Хорошо составленный <filename>pkg-descr</filename>
- описывает порт достаточно полно, чтобы пользователю не
- приходилось сверяться с документацией или посещать вебсайт
- для понимания того, что делает данное программное обеспечение,
- чем оно может быть полезно или какие хорошие функции у него
- имеются. Упоминание про определённые требования, такие как
- используемый графический инструментарий, тяжёлые зависимости,
- окружение для запуска или используемый язык программирования
- помогут пользователям определиться, будет ли этот порт для
- них работать.</para>
-
- <para>Включите сюда URL официальной домашней страницы Интернет.
- Перед <emphasis>одним</emphasis> из сайтов (выберите основной)
- добавьте <literal>WWW:</literal> (с последующим единичным
- пробелом) для того, чтобы вспомогательные утилиты работали
- правильно. Если URI является корнем сайта или каталогом,
- то значение должно быть дополнено косой чертой.</para>
-
- <note>
- <para>Если указанная для порта веб-страница не доступна,
- попытайтесь сперва поискать, был ли официальный сайт
- перемещён, переименован или размещён в другом месте.</para>
- </note>
-
- <para>Следующий пример показывает, как должен выглядеть ваш
- <filename>pkg-descr</filename>:</para>
-
- <programlisting>This is a port of oneko, in which a cat chases a poor mouse all over
+ <para>Следующий пример показывает, как должен выглядеть ваш
+ <filename>pkg-descr</filename>:</para>
+
+ <programlisting>This is a port of oneko, in which a cat chases a poor mouse all over
the screen.
:
(etc.)
WWW: http://www.oneko.org/</programlisting>
- </sect2>
+ </sect2>
- <sect2>
- <title><filename>pkg-plist</filename></title>
+ <sect2>
+ <title><filename>pkg-plist</filename></title>
- <para>Здесь перечисляются все файлы, устанавливаемые портом. Его
- также называют <quote>списком для упаковки</quote>, потому что
- пакет генерируется упаковкой файлов, которые здесь указаны.
- Имена путей указываются относительно установочного префикса
- (обычно <filename>/usr/local</filename>).
- Если порт во время установки создает каталоги, убедитесь,
- что добавлены строки <literal>@dirrm</literal> для удаления
- каталогов при удалении пакета.</para>
+ <para>Здесь перечисляются все файлы, устанавливаемые портом.
+ Его также называют <quote>списком для упаковки</quote>,
+ потому что пакет генерируется упаковкой файлов, которые здесь
+ указаны. Имена путей указываются относительно установочного
+ префикса (обычно <filename>/usr/local</filename>). Если порт
+ во время установки создает каталоги, убедитесь, что добавлены
+ строки <literal>@dirrm</literal> для удаления каталогов при
+ удалении пакета.</para>
- <para>Вот маленький пример:</para>
+ <para>Вот маленький пример:</para>
- <programlisting>bin/oneko
+ <programlisting>bin/oneko
man/man1/oneko.1.gz
lib/X11/app-defaults/Oneko
lib/X11/oneko/cat1.xpm
@@ -158,250 +163,258 @@ lib/X11/oneko/cat2.xpm
lib/X11/oneko/mouse.xpm
@dirrm lib/X11/oneko</programlisting>
- <para>Обратитесь к странице справочной системы по команде
- &man.pkg-create.8; с подробным описанием формата списка
- упаковки.</para>
-
- <note>
- <para>Рекомендуется, чтобы имена файлов в этом списке были
- отсортированы в алфавитном порядке. Это позволит значительно
- облегчить сверку изменений при обновлении порта.</para>
- </note>
-
- <note>
- <para>Создание списка упаковки вручную может оказаться весьма
- трудоёмкой задачей. Если порт устанавливает большое количество
- файлов, раздел об <link linkend="plist-autoplist">автоматическом построении списка
- упаковки</link> может помочь сэкономить время.</para>
- </note>
-
- <para>Существует только одно исключение, когда у порта может
- отсутствовать <filename>pkg-plist</filename>. Если порт
- устанавливает лишь несколько файлов, а возможно, и каталогов, то
- они могут быть перечислены в переменных
- <varname>PLIST_FILES</varname> и <varname>PLIST_DIRS</varname>,
- соответственно, внутри файла <filename>Makefile</filename> порта.
- К примеру, мы можем обойтись без файла
- <filename>pkg-plist</filename> у приведённого выше порта
- <filename>oneko</filename>, добавив следующие строки в
- <filename>Makefile</filename>:</para>
-
- <programlisting>PLIST_FILES= bin/oneko \
- man/man1/oneko.1.gz \
- lib/X11/app-defaults/Oneko \
- lib/X11/oneko/cat1.xpm \
- lib/X11/oneko/cat2.xpm \
- lib/X11/oneko/mouse.xpm
-PLIST_DIRS= lib/X11/oneko</programlisting>
-
- <para>Конечно, переменная <varname>PLIST_DIRS</varname> не должна
- задаваться, если порт не устанавливает никаких каталогов.</para>
-
- <note>
- <para>Несколько портов могут совместно использовать общий
- каталог. В этом случае <varname>PLIST_DIRS</varname>
- следует заменить на <varname>PLIST_DIRSTRY</varname>, так
- чтобы каталог удалялся только если он пуст, а иначе
- игнорировался. Использование <varname>PLIST_DIRS</varname>
- и <varname>PLIST_DIRSTRY</varname> аналогично
- <literal>@dirrm</literal> и <literal>@dirrmtry</literal>
- в <filename>pkg-plist</filename>, описание которых
- входит в <xref linkend="plist-dir-cleaning"/>.</para>
- </note>
-
- <para>Обратной стороной такого способа перечисления файлов и
- каталогов порта является невозможность использования
- последовательностей команд, описанных в &man.pkg-create.8;.
- Поэтому он подходит для простых портов, что делает их ещё более
- простыми. Одновременно с этим положительным моментом является
- уменьшение количества файлов в коллекции портов. Пожалуйста,
- подумайте над использованием этой техники, прежде чем создавать
- <filename>pkg-plist</filename>.</para>
-
- <para>Далее мы увидим, как можно использовать файлы
- <filename>pkg-plist</filename> и <varname>PLIST_FILES</varname>
- выполнения <link linkend="plist">более сложных
- задач</link>.</para>
- </sect2>
- </sect1>
-
- <sect1 xml:id="porting-checksum">
- <title>Создание файла с контрольной суммой</title>
-
- <para>Просто введите команду <command>make makesum</command>.
- Правила утилиты make автоматически сгенерируют файл
- <filename>distinfo</filename>.</para>
-
- <para>Если у извлекаемого файла регулярно меняется контрольная
- сумма и вы не сомневаетесь в надежности источника (т.е. он получен
- из CD производителя, либо ежедневно обновляется документация), то вы
- должны указать эти файлы в переменной <varname>IGNOREFILES</varname>.
- Тогда контрольная сумма при выполнении <command>make makesum</command>
- для этого файла создаваться не будет, а вместо этого для него будет
- установлено значение <literal>IGNORE</literal>.</para>
- </sect1>
-
- <sect1 xml:id="porting-testing">
- <title>Тестирование порта</title>
-
- <para>Вы должны удостовериться, что правила построения порта выполняют
- именно то, что вы хотите, включая создание пакета для порта. Вот
- те важные вещи, которые вы должны проверить.</para>
-
- <itemizedlist>
- <listitem>
- <para><filename>pkg-plist</filename> не содержит ничего сверх того,
- что устанавливается портом</para>
- </listitem>
-
- <listitem>
- <para><filename>pkg-plist</filename> содержит абсолютно все, что
- устанавливается портом</para>
- </listitem>
-
- <listitem>
- <para>Порт может быть установлен с помощью
- указания цели <buildtarget>install</buildtarget>. Это
- позволяет убедиться в правильной работе сценария
- установки.</para>
- </listitem>
-
- <listitem>
- <para>Порт может быть правильным образом удалён с помощью
- указания цели <buildtarget>deinstall</buildtarget>. Это
- позволяет убедиться в правильной работе сценария
- удаления.</para>
- </listitem>
-
- <listitem>
- <para>Следует убедиться, что <command>make package</command>
- можно запустить из-под обычного пользователя (то есть,
- не из-под <systemitem class="username">root</systemitem>).
- Если это не так, в <filename>Makefile</filename> порта
- должно быть добавлено <literal>NEED_ROOT=yes</literal>.</para>
- </listitem>
- </itemizedlist>
-
- <procedure>
- <title>Рекомендуемый порядок проверки</title>
-
- <step>
- <para><command>make stage</command></para>
- </step>
-
- <step>
- <para><command>make check-orphans</command></para>
- </step>
-
- <step>
- <para><command>make package</command></para>
- </step>
-
- <step>
- <para><command>make install</command></para>
- </step>
-
- <step>
- <para><command>make deinstall</command></para>
- </step>
-
- <step>
- <para><command>pkg add package-filename</command></para>
- </step>
-
- <step>
- <para><command>make package</command> (из-под
- пользователя)</para>
- </step>
- </procedure>
-
- <para>Убедитесь, что на любом из этапов не выдается никаких
- предупреждений.</para>
-
- <para>Основательное автоматизированное тестирование может быть
- выполнено при помощи
- <package role="port">ports-mgmt/tinderbox</package> или
- <package role="port">ports-mgmt/poudriere</package> из Коллекции
- Портов. Эти приложения используют <literal>jails</literal>,
- в которых проверяются все перечисленные выше этапы без
- изменения состояния основной системы.</para>
- </sect1>
-
- <sect1 xml:id="porting-portlint">
- <title>Проверка вашего порта утилитой
- <command>portlint</command></title>
-
- <para>Будьте добры, пользуйтесь утилитой <command>portlint</command>
- для проверки того, что ваш порт соответствует нашим рекомендациям.
- Программа <package role="port">ports-mgmt/portlint</package>
- является частью Коллекции
- Портов. В частности, вы можете захотеть проверить, правильно ли
- сформирован файл <link linkend="porting-samplem">Makefile</link> и
- соответствующим ли образом именован <link linkend="porting-pkgname">пакет</link>.</para>
- </sect1>
-
- <sect1 xml:id="porting-submitting">
- <title>Посылка нового порта</title>
-
- <para>Перед посылкой нового порта прочитайте раздел о том, что
- <link linkend="porting-dads">можно и нельзя</link> делать.</para>
-
- <para>Когда вы наконец довольны своим первым портом, единственное,
- что осталось сделать, это включить его в основное дерево портов
- &os; и осчастливить этим всех остальных. Нам не нужен ни
- каталог <filename>work</filename>, ни пакет
- <filename>pkgname.tgz</filename>, так что удалите их прямо
- сейчас.</para>
-
- <para>Затем получите файл &man.shar.1;. Предполагая, что порт
- называется oneko, перейдите в каталог выше, где находится
- каталог <literal>oneko</literal>, и наберите:
- <command>shar `find oneko` &gt; oneko.shar</command></para>
-
- <para>Включите <filename>oneko.shar</filename> в сообщение об
- ошибке и пошлите его с помощью &man.send-pr.1;. Обратитесь к
- разделу <link
- xlink:href="&url.articles.contributing;/contrib-how.html#CONTRIB-GENERAL">
- Сообщения об ошибках и общие замечания</link> для получения
- подробной информации о &man.send-pr.1;).</para>
-
- <para>Укажите в сообщении категорию <literal>ports</literal> и
- класс <literal>change-request</literal>.
- <emphasis>Не</emphasis> указывайте, что сообщение имеет статус
- <literal>confidential</literal>! Добавьте краткое описание
- программы в поле <quote>Description</quote> отправляемого PR
- (например, содержимое <varname>COMMENT</varname> в сокращённом
- варианте) и сам файл в виде архива <filename>.shar</filename>
- в поле <quote>Fix</quote>.</para>
+ <para>Обратитесь к странице справочной системы по команде
+ &man.pkg-create.8; с подробным описанием формата списка
+ упаковки.</para>
<note>
- <para>Хорошее описание в заголовке сообщения о проблеме
- значительно облегчает работу коммиттеров портов. Для новых
- портов мы предпочитаем нечто вроде <quote>New port:
- &lt;категория&gt;/&lt;название порта&gt; &lt;краткое
- описание порта&gt;</quote>. Следование этой схеме
- упрощает и ускоряет начало работы по добавлению нового
+ <para>Рекомендуется, чтобы имена файлов в этом списке были
+ отсортированы в алфавитном порядке. Это позволит
+ значительно облегчить сверку изменений при обновлении
порта.</para>
</note>
- <para>Повторим ещё раз, что <emphasis>не нужно включать ни оригинальный
- файл с дистрибутивом, ни каталог <filename>work</filename>,
- ни пакет, построенный вами командой
- <command>make package</command></emphasis>; для новых портов
- используйте &man.shar.1;, но не &man.diff.1;.</para>
-
- <para>После отправки порта, пожалуйста, потерпите. Время,
- необходимое для включения нового порта во &os;, может занимать
- от нескольких дней до нескольких месяцев. <link
- xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?category=ports">
- Здесь</link> можно увидеть список ожидающих PR для портов.</para>
-
- <para>После рассмотрения нового порта мы при необходимости вам
- ответим, а затем включим порт в наше дерево. Ваше имя также
- будет добавлено в список <link
- xlink:href="&url.articles.contributors;/contrib-additional.html">
- Дополнительных контрибуторов проекта &os;</link> и другие
- файлы.</para>
- </sect1>
- </chapter>
+ <note>
+ <para>Создание списка упаковки вручную может оказаться весьма
+ трудоёмкой задачей. Если порт устанавливает большое
+ количество файлов, раздел об <link
+ linkend="plist-autoplist">автоматическом построении
+ списка упаковки</link> может помочь сэкономить
+ время.</para>
+ </note>
+
+ <para>Существует только одно исключение, когда у порта может
+ отсутствовать <filename>pkg-plist</filename>. Если порт
+ устанавливает лишь несколько файлов, а возможно, и каталогов,
+ то они могут быть перечислены в переменных
+ <varname>PLIST_FILES</varname> и
+ <varname>PLIST_DIRS</varname>, соответственно, внутри файла
+ <filename>Makefile</filename> порта. К примеру, мы можем
+ обойтись без файла <filename>pkg-plist</filename> у
+ приведённого выше порта <filename>oneko</filename>, добавив
+ следующие строки в <filename>Makefile</filename>:</para>
+
+ <programlisting>PLIST_FILES= bin/oneko \
+ man/man1/oneko.1.gz \
+ lib/X11/app-defaults/Oneko \
+ lib/X11/oneko/cat1.xpm \
+ lib/X11/oneko/cat2.xpm \
+ lib/X11/oneko/mouse.xpm
+PLIST_DIRS= lib/X11/oneko</programlisting>
+
+ <para>Конечно, переменная <varname>PLIST_DIRS</varname> не
+ должна задаваться, если порт не устанавливает никаких
+ каталогов.</para>
+
+ <note>
+ <para>Несколько портов могут совместно использовать общий
+ каталог. В этом случае <varname>PLIST_DIRS</varname>
+ следует заменить на <varname>PLIST_DIRSTRY</varname>, так
+ чтобы каталог удалялся только если он пуст, а иначе
+ игнорировался. Использование <varname>PLIST_DIRS</varname>
+ и <varname>PLIST_DIRSTRY</varname> аналогично
+ <literal>@dirrm</literal> и <literal>@dirrmtry</literal> в
+ <filename>pkg-plist</filename>, описание которых входит в
+ <xref linkend="plist-dir-cleaning"/>.</para>
+ </note>
+
+ <para>Обратной стороной такого способа перечисления файлов и
+ каталогов порта является невозможность использования
+ последовательностей команд, описанных в &man.pkg-create.8;.
+ Поэтому он подходит для простых портов, что делает их ещё
+ более простыми. Одновременно с этим положительным моментом
+ является уменьшение количества файлов в коллекции портов.
+ Пожалуйста, подумайте над использованием этой техники, прежде
+ чем создавать <filename>pkg-plist</filename>.</para>
+
+ <para>Далее мы увидим, как можно использовать файлы
+ <filename>pkg-plist</filename> и
+ <varname>PLIST_FILES</varname> выполнения <link
+ linkend="plist">более сложных задач</link>.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="porting-checksum">
+ <title>Создание файла с контрольной суммой</title>
+
+ <para>Просто введите команду <command>make makesum</command>.
+ Правила утилиты make автоматически сгенерируют файл
+ <filename>distinfo</filename>.</para>
+
+ <para>Если у извлекаемого файла регулярно меняется контрольная
+ сумма и вы не сомневаетесь в надежности источника (т.е. он
+ получен из CD производителя, либо ежедневно обновляется
+ документация), то вы должны указать эти файлы в переменной
+ <varname>IGNOREFILES</varname>. Тогда контрольная сумма при
+ выполнении <command>make makesum</command> для этого файла
+ создаваться не будет, а вместо этого для него будет установлено
+ значение <literal>IGNORE</literal>.</para>
+ </sect1>
+
+ <sect1 xml:id="porting-testing">
+ <title>Тестирование порта</title>
+
+ <para>Вы должны удостовериться, что правила построения порта
+ выполняют именно то, что вы хотите, включая создание пакета для
+ порта. Вот те важные вещи, которые вы должны проверить.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><filename>pkg-plist</filename> не содержит ничего сверх
+ того, что устанавливается портом</para>
+ </listitem>
+
+ <listitem>
+ <para><filename>pkg-plist</filename> содержит абсолютно все,
+ что устанавливается портом</para>
+ </listitem>
+
+ <listitem>
+ <para>Порт может быть установлен с помощью указания цели
+ <buildtarget>install</buildtarget>. Это позволяет
+ убедиться в правильной работе сценария установки.</para>
+ </listitem>
+
+ <listitem>
+ <para>Порт может быть правильным образом удалён с помощью
+ указания цели <buildtarget>deinstall</buildtarget>. Это
+ позволяет убедиться в правильной работе сценария
+ удаления.</para>
+ </listitem>
+
+ <listitem>
+ <para>Следует убедиться, что <command>make package</command>
+ можно запустить из-под обычного пользователя (то есть, не
+ из-под <systemitem class="username">root</systemitem>).
+ Если это не так, в <filename>Makefile</filename> порта
+ должно быть добавлено
+ <literal>NEED_ROOT=yes</literal>.</para>
+ </listitem>
+ </itemizedlist>
+
+ <procedure>
+ <title>Рекомендуемый порядок проверки</title>
+
+ <step>
+ <para><command>make stage</command></para>
+ </step>
+
+ <step>
+ <para><command>make check-orphans</command></para>
+ </step>
+
+ <step>
+ <para><command>make package</command></para>
+ </step>
+
+ <step>
+ <para><command>make install</command></para>
+ </step>
+
+ <step>
+ <para><command>make deinstall</command></para>
+ </step>
+
+ <step>
+ <para><command>pkg add package-filename</command></para>
+ </step>
+
+ <step>
+ <para><command>make package</command> (из-под
+ пользователя)</para>
+ </step>
+ </procedure>
+
+ <para>Убедитесь, что на любом из этапов не выдается никаких
+ предупреждений.</para>
+
+ <para>Основательное автоматизированное тестирование может быть
+ выполнено при помощи <package
+ role="port">ports-mgmt/tinderbox</package> или <package
+ role="port">ports-mgmt/poudriere</package> из Коллекции
+ Портов. Эти приложения используют <literal>jails</literal>,
+ в которых проверяются все перечисленные выше этапы без
+ изменения состояния основной системы.</para>
+ </sect1>
+
+ <sect1 xml:id="porting-portlint">
+ <title>Проверка вашего порта утилитой
+ <command>portlint</command></title>
+
+ <para>Будьте добры, пользуйтесь утилитой
+ <command>portlint</command> для проверки того, что ваш порт
+ соответствует нашим рекомендациям. Программа <package
+ role="port">ports-mgmt/portlint</package> является частью
+ Коллекции Портов. В частности, вы можете захотеть проверить,
+ правильно ли сформирован файл <link
+ linkend="porting-samplem">Makefile</link> и соответствующим
+ ли образом именован <link
+ linkend="porting-pkgname">пакет</link>.</para>
+ </sect1>
+
+ <sect1 xml:id="porting-submitting">
+ <title>Посылка нового порта</title>
+
+ <para>Перед посылкой нового порта прочитайте раздел о том, что
+ <link linkend="porting-dads">можно и нельзя</link>
+ делать.</para>
+
+ <para>Когда вы наконец довольны своим первым портом,
+ единственное, что осталось сделать, это включить его в основное
+ дерево портов &os; и осчастливить этим всех остальных. Нам не
+ нужен ни каталог <filename>work</filename>, ни пакет
+ <filename>pkgname.tgz</filename>, так что удалите их прямо
+ сейчас.</para>
+
+ <para>Затем получите файл &man.shar.1;. Предполагая, что порт
+ называется oneko, перейдите в каталог выше, где находится
+ каталог <literal>oneko</literal>, и наберите:
+ <command>shar `find oneko` &gt; oneko.shar</command></para>
+
+ <para>Включите <filename>oneko.shar</filename> в сообщение об
+ ошибке и пошлите его с помощью &man.send-pr.1;. Обратитесь к
+ разделу <link
+ xlink:href="&url.articles.contributing;/contrib-how.html#CONTRIB-GENERAL">Сообщения
+ об ошибках и общие замечания</link> для получения подробной
+ информации о &man.send-pr.1;).</para>
+
+ <para>Укажите в сообщении категорию <literal>ports</literal> и
+ класс <literal>change-request</literal>.
+ <emphasis>Не</emphasis> указывайте, что сообщение имеет статус
+ <literal>confidential</literal>! Добавьте краткое описание
+ программы в поле <quote>Description</quote> отправляемого PR
+ (например, содержимое <varname>COMMENT</varname> в сокращённом
+ варианте) и сам файл в виде архива <filename>.shar</filename> в
+ поле <quote>Fix</quote>.</para>
+
+ <note>
+ <para>Хорошее описание в заголовке сообщения о проблеме
+ значительно облегчает работу коммиттеров портов. Для новых
+ портов мы предпочитаем нечто вроде <quote>New port:
+ &lt;категория&gt;/&lt;название порта&gt; &lt;краткое
+ описание порта&gt;</quote>. Следование этой схеме упрощает
+ и ускоряет начало работы по добавлению нового порта.</para>
+ </note>
+ <para>Повторим ещё раз, что <emphasis>не нужно включать ни
+ оригинальный файл с дистрибутивом, ни каталог
+ <filename>work</filename>, ни пакет, построенный вами
+ командой <command>make package</command></emphasis>; для
+ новых портов используйте &man.shar.1;, но не
+ &man.diff.1;.</para>
+
+ <para>После отправки порта, пожалуйста, потерпите. Время,
+ необходимое для включения нового порта во &os;, может занимать
+ от нескольких дней до нескольких месяцев. <link
+ xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?category=ports">
+ Здесь</link> можно увидеть список ожидающих PR для
+ портов.</para>
+
+ <para>После рассмотрения нового порта мы при необходимости вам
+ ответим, а затем включим порт в наше дерево. Ваше имя также
+ будет добавлено в список <link
+ xlink:href="&url.articles.contributors;/contrib-additional.html">
+ Дополнительных контрибуторов проекта &os;</link> и другие
+ файлы.</para>
+ </sect1>
+</chapter>
diff --git a/ru_RU.KOI8-R/books/porters-handbook/security/chapter.xml b/ru_RU.KOI8-R/books/porters-handbook/security/chapter.xml
index aedf010f93..afa76db02a 100644
--- a/ru_RU.KOI8-R/books/porters-handbook/security/chapter.xml
+++ b/ru_RU.KOI8-R/books/porters-handbook/security/chapter.xml
@@ -7,157 +7,165 @@
Original revision: r43840
-->
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="security">
-
- <title>Безопасность портов</title>
-
- <sect1 xml:id="security-intro">
- <title>Почему безопасность так важна</title>
-
- <para>Ошибки в программном обеспечении появляются случайно. Возможно,
- самые опасные из них те, что создают уязвимости безопасности. С
- технической точки зрения подобные уязвимости должны быть закрыты
- путем исправления вызывающих их ошибок. Тем не менее, политики
- обработки несущественных ошибок и уязвимостей очень различаются.
- </para>
-
- <para>Обычная небольшая ошибка затрагивает только тех пользователей,
- которые задействуют некоторые комбинации настроек, активирующие эту
- ошибку. Разработчик в конечном счете выпустит патч, а зачтем новую
- версию программного обеспечения, свободного от ошибки, но большинство
- пользователей не посчитают нужным сразу же произвести обновление,
- поскольку эта ошибка никогда у них не проявлялась. Критическая
- ошибка, которая может приводить к потере данных, представляет
- серьезную проблему. Тем не менее, предусмотрительные пользователи
- знают, что большинство возможных происшествий, и среди них программные
- ошибки, скорее всего приводят к потере данных, поэтому они выполняют
- резервное копирование важных данных; дополнительно, критическая
- ошибка будет обнаружена очень скоро.</para>
-
- <para>С уязвимостью безопасности всё иначе. Во-первых, она может
- сохраняться необнаруженной целые годы, потому что чаще всего не
- вызывает ошибок в работе. Во-вторых, компания злоумышленников
- может использовать ее для получения неавторизованного доступа к
- уязвимой системе, уничтожить или подменить важные данные; в худшем
- случае пользователь даже не заметит нанесенный урон. В-третьих,
- взлом уязвимой системы часто упрощает задачу проникновения атакующих
- в другие системы, которые не могут быть скомпрометированы иначе.
- Таким образом, устранение уязвимости как таковой недостаточно:
- следует разослать всем заинтересованным уведомления в наиболее
- понятной и исчерпывающей форме, что позволит оценить риск и
- предпринять подходящие меры.</para>
- </sect1>
-
- <sect1 xml:id="security-fix">
- <title>Исправление уязвимостей безопасности</title>
-
- <para>Что касается портов и пакетов, уязвимость безопасности
- изначально может появиться в исходном дистрибутиве или файлах
- порта. В первом случае, разработчик исходного программного
- обеспечения скорее всего сразу же выпустит патч или новую версию,
- и вам лишь понадобится сразу обновить порт в соответствии с
- исправлением автора. Если исправление по какой-то причине
- задерживается, вам следует либо <link linkend="dads-noinstall">пометить
- порт как <varname>FORBIDDEN</varname></link>, либо добавить в порт
- ваш собственный патч. В случае уязвимости порта просто исправьте
- этот порт как можно скорее. В любом случае нужно следовать
- <link linkend="port-upgrading">стандартной процедуре отправки вашего
- изменения</link>, если вы не обладаете правами на коммит изменения
- непосредственно в дерево портов.</para>
-
- <important>
- <para>Быть коммиттером портов недостаточно для коммита произвольного
- порта. Помните, что обычно у портов есть сопровождающие, мнение
- которых вы должны учитывать.</para>
- </important>
-
- <para>Пожалуйста, убедитесь, что ревизия порта после закрытия
- уязвимости увеличена. Вот как пользователи, обновляющие
- установленные пакеты на постоянной основе, увидят, что им нужно
- запустить обновление. Кроме того, новый пакет будет собран и
- распространен через FTP и WWW зеркала, замещая уязвимый.
- Если в процессе исправления уязвимости не было изменено значение
- <varname>PORTVERSION</varname>, то должно быть увеличено значение
- <varname>PORTREVISION</varname>. Вам следует увеличить значение
- <varname>PORTREVISION</varname> после добавления в порт файла с
- патчем, но не когда вы обновили порт до последней версии
- программного обеспечения, попутно затронув при этом
- <varname>PORTVERSION</varname>. За дальнейшей информацией
- обращайтесь к
- <link linkend="makefile-naming-revepoch">соответствующему
+<chapter xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
+ xml:id="security">
+
+ <title>Безопасность портов</title>
+
+ <sect1 xml:id="security-intro">
+ <title>Почему безопасность так важна</title>
+
+ <para>Ошибки в программном обеспечении появляются случайно.
+ Возможно, самые опасные из них те, что создают уязвимости
+ безопасности. С технической точки зрения подобные уязвимости
+ должны быть закрыты путем исправления вызывающих их ошибок.
+ Тем не менее, политики обработки несущественных ошибок и
+ уязвимостей очень различаются.</para>
+
+ <para>Обычная небольшая ошибка затрагивает только тех
+ пользователей, которые задействуют некоторые комбинации
+ настроек, активирующие эту ошибку. Разработчик в конечном
+ счете выпустит патч, а зачтем новую версию программного
+ обеспечения, свободного от ошибки, но большинство пользователей
+ не посчитают нужным сразу же произвести обновление, поскольку
+ эта ошибка никогда у них не проявлялась. Критическая ошибка,
+ которая может приводить к потере данных, представляет серьезную
+ проблему. Тем не менее, предусмотрительные пользователи знают,
+ что большинство возможных происшествий, и среди них программные
+ ошибки, скорее всего приводят к потере данных, поэтому они
+ выполняют резервное копирование важных данных; дополнительно,
+ критическая ошибка будет обнаружена очень скоро.</para>
+
+ <para>С уязвимостью безопасности всё иначе. Во-первых, она может
+ сохраняться необнаруженной целые годы, потому что чаще всего не
+ вызывает ошибок в работе. Во-вторых, компания злоумышленников
+ может использовать ее для получения неавторизованного доступа к
+ уязвимой системе, уничтожить или подменить важные данные; в
+ худшем случае пользователь даже не заметит нанесенный урон.
+ В-третьих, взлом уязвимой системы часто упрощает задачу
+ проникновения атакующих в другие системы, которые не могут быть
+ скомпрометированы иначе. Таким образом, устранение уязвимости
+ как таковой недостаточно: следует разослать всем
+ заинтересованным уведомления в наиболее понятной и
+ исчерпывающей форме, что позволит оценить риск и предпринять
+ подходящие меры.</para>
+ </sect1>
+
+ <sect1 xml:id="security-fix">
+ <title>Исправление уязвимостей безопасности</title>
+
+ <para>Что касается портов и пакетов, уязвимость безопасности
+ изначально может появиться в исходном дистрибутиве или файлах
+ порта. В первом случае, разработчик исходного программного
+ обеспечения скорее всего сразу же выпустит патч или новую
+ версию, и вам лишь понадобится сразу обновить порт в
+ соответствии с исправлением автора. Если исправление по
+ какой-то причине задерживается, вам следует либо <link
+ linkend="dads-noinstall">пометить порт как
+ <varname>FORBIDDEN</varname></link>, либо добавить в порт ваш
+ собственный патч. В случае уязвимости порта просто исправьте
+ этот порт как можно скорее. В любом случае нужно следовать
+ <link linkend="port-upgrading">стандартной процедуре отправки
+ вашего изменения</link>, если вы не обладаете правами на
+ коммит изменения непосредственно в дерево портов.</para>
+
+ <important>
+ <para>Быть коммиттером портов недостаточно для коммита
+ произвольного порта. Помните, что обычно у портов есть
+ сопровождающие, мнение которых вы должны учитывать.</para>
+ </important>
+
+ <para>Пожалуйста, убедитесь, что ревизия порта после закрытия
+ уязвимости увеличена. Вот как пользователи, обновляющие
+ установленные пакеты на постоянной основе, увидят, что им нужно
+ запустить обновление. Кроме того, новый пакет будет собран и
+ распространен через FTP и WWW зеркала, замещая уязвимый. Если
+ в процессе исправления уязвимости не было изменено значение
+ <varname>PORTVERSION</varname>, то должно быть увеличено
+ значение <varname>PORTREVISION</varname>. Вам следует
+ увеличить значение <varname>PORTREVISION</varname> после
+ добавления в порт файла с патчем, но не когда вы обновили порт
+ до последней версии программного обеспечения, попутно затронув
+ при этом <varname>PORTVERSION</varname>. За дальнейшей
+ информацией обращайтесь к <link
+ linkend="makefile-naming-revepoch">соответствующему
разделу</link>.</para>
- </sect1>
-
- <sect1 xml:id="security-notify">
- <title>Обеспечение сообщества информацией</title>
-
- <sect2 xml:id="security-notify-vuxml-db">
- <title>База данных VuXML</title>
-
- <para>Очень важным и первостепенным шагом при действии как можно
- раньше после раскрытия уязвимости является уведомление сообщества
- пользователей порта об опасности. Такие уведомления служат двум
- целям. Во-первых, в случае действительно серьезной угрозы, будет
- посоветовано применить мгновенное воздействие. Например, остановить
- затрагиваемый сетевой сервис или даже удалить порт целиком,
- пока уязвимость не будет устранена. Во-вторых, масса
- пользователей имеет тенденцию обновлять установленные пакеты только от
- случая к случаю. Из уведомления они узнают, что
- <emphasis>должны</emphasis> обновить пакет без промедления сразу
- же после появления исправленной версии.</para>
-
- <para>Учитывая огромное число портов в дереве, невозможно по
- каждому случаю выпускать бюллетень безопасности без создания
- флуда и потери внимания сообщества к моменту появления
- действительно серьезных причин. Поэтому уязвимости безопасности,
- обнаруженные в портах, записываются в
- <link xlink:href="http://vuxml.freebsd.org/">базу данных
- &os; VuXML</link>.
- Члены Команды Офицеров Безопасности также отслеживают её на
- предмет появления вопросов, требующих их вмешательства.</para>
-
- <para>Если вы обладаете правами коммиттера, вы можете сам обновить
- базу данных VuXML. Так вы поможете Команде Офицеров Безопасности
- и своевременно пошлете ценную информацию сообществу. Тем не
- менее, если вы не являетесь коммиттером или верите, что нашли
- исключительно серьезную уязвимость, то не
- задумываясь свяжитесь с Командой Офицеров Безопасности напрямую
- как это описано на странице
- <link xlink:href="http://www.freebsd.org/security/#how">информационной
+ </sect1>
+
+ <sect1 xml:id="security-notify">
+ <title>Обеспечение сообщества информацией</title>
+
+ <sect2 xml:id="security-notify-vuxml-db">
+ <title>База данных VuXML</title>
+
+ <para>Очень важным и первостепенным шагом при действии как
+ можно раньше после раскрытия уязвимости является уведомление
+ сообщества пользователей порта об опасности. Такие
+ уведомления служат двум целям. Во-первых, в случае
+ действительно серьезной угрозы, будет посоветовано применить
+ мгновенное воздействие. Например, остановить затрагиваемый
+ сетевой сервис или даже удалить порт целиком, пока уязвимость
+ не будет устранена. Во-вторых, масса пользователей имеет
+ тенденцию обновлять установленные пакеты только от случая к
+ случаю. Из уведомления они узнают, что
+ <emphasis>должны</emphasis> обновить пакет без промедления
+ сразу же после появления исправленной версии.</para>
+
+ <para>Учитывая огромное число портов в дереве, невозможно по
+ каждому случаю выпускать бюллетень безопасности без создания
+ флуда и потери внимания сообщества к моменту появления
+ действительно серьезных причин. Поэтому уязвимости
+ безопасности, обнаруженные в портах, записываются в <link
+ xlink:href="http://vuxml.freebsd.org/">базу данных &os;
+ VuXML</link>. Члены Команды Офицеров Безопасности также
+ отслеживают её на предмет появления вопросов, требующих их
+ вмешательства.</para>
+
+ <para>Если вы обладаете правами коммиттера, вы можете сам
+ обновить базу данных VuXML. Так вы поможете Команде Офицеров
+ Безопасности и своевременно пошлете ценную информацию
+ сообществу. Тем не менее, если вы не являетесь коммиттером
+ или верите, что нашли исключительно серьезную уязвимость, то
+ не задумываясь свяжитесь с Командой Офицеров Безопасности
+ напрямую как это описано на странице <link
+ xlink:href="http://www.freebsd.org/security/#how">информационной
безопасности &os;</link>.</para>
- <para>База данных VuXML является документом <acronym>XML</acronym>.
- Его исходный файл <filename>vuln.xml</filename> содержится
- прямо внутри порта <package role="port">security/vuxml</package>.
- Следовательно, полное имя пути к файлу будет
- <filename>PORTSDIR/security/vuxml/vuln.xml</filename>.
- Каждый раз, при обнаружении вами в порте уязвимости безопасности
- добавьте об этом запись в этот файл. Пока вы не знакомы с VuXML,
- лучшее, что вы можете сделать, это найти существующую запись,
- подпадающую под ваш случай, затем скопировать ее и использовать
- в качестве шаблона.</para>
- </sect2>
-
- <sect2 xml:id="security-notify-vuxml-intro">
- <title>Короткое вступление в VuXML</title>
-
- <para>В совокупности <acronym>XML</acronym> является очень
- сложным форматом, и его описание выходит далеко за рамки
- этой книги. Тем не менее, для достижения основного понимания
- структуры записи VuXML вам понадобится всего лишь понять теги.
- Имена тегов XML обрамляются в угловые скобки. Каждый открывающий
- &lt;tag&gt; должен иметь совпадающий закрывающий &lt;/tag&gt;.
- Теги могут быть вложенными. При вложенности внутренние теги
- должны быть закрыты до закрытия внешних. Существует иерархия
- тегов, т.е. более сложные правила вкладывания тегов. Это
- похоже на HTML. Основное отличие в расширяемости XML,
- т.е. в определении собственных тегов. Из-за своей характерной
- структуры XML придает форму разрозненным данным. В частности,
- XML подходит для разметки описаний уязвимостей безопасности.</para>
-
- <para>Теперь рассмотрим настоящую запись VuXML:</para>
-
- <programlisting>&lt;vuln vid="f4bc80f4-da62-11d8-90ea-0004ac98a7b9"&gt; <co xml:id="co-vx-vid"/>
+ <para>База данных VuXML является документом
+ <acronym>XML</acronym>. Его исходный файл
+ <filename>vuln.xml</filename> содержится прямо внутри порта
+ <package role="port">security/vuxml</package>.
+ Следовательно, полное имя пути к файлу будет
+ <filename>PORTSDIR/security/vuxml/vuln.xml</filename>.
+ Каждый раз, при обнаружении вами в порте уязвимости
+ безопасности добавьте об этом запись в этот файл. Пока вы не
+ знакомы с VuXML, лучшее, что вы можете сделать, это найти
+ существующую запись, подпадающую под ваш случай, затем
+ скопировать ее и использовать в качестве шаблона.</para>
+ </sect2>
+
+ <sect2 xml:id="security-notify-vuxml-intro">
+ <title>Короткое вступление в VuXML</title>
+
+ <para>В совокупности <acronym>XML</acronym> является очень
+ сложным форматом, и его описание выходит далеко за рамки этой
+ книги. Тем не менее, для достижения основного понимания
+ структуры записи VuXML вам понадобится всего лишь понять
+ теги. Имена тегов XML обрамляются в угловые скобки. Каждый
+ открывающий &lt;tag&gt; должен иметь совпадающий закрывающий
+ &lt;/tag&gt;. Теги могут быть вложенными. При вложенности
+ внутренние теги должны быть закрыты до закрытия внешних.
+ Существует иерархия тегов, т.е. более сложные правила
+ вкладывания тегов. Это похоже на HTML. Основное отличие в
+ расширяемости XML, т.е. в определении собственных тегов.
+ Из-за своей характерной структуры XML придает форму
+ разрозненным данным. В частности, XML подходит для разметки
+ описаний уязвимостей безопасности.</para>
+
+ <para>Теперь рассмотрим настоящую запись VuXML:</para>
+
+ <programlisting>&lt;vuln vid="f4bc80f4-da62-11d8-90ea-0004ac98a7b9"&gt; <co xml:id="co-vx-vid"/>
&lt;topic&gt;Several vulnerabilities found in Foo&lt;/topic&gt; <co xml:id="co-vx-top"/>
&lt;affects&gt;
&lt;package&gt;
@@ -206,281 +214,296 @@
&lt;/dates&gt;
&lt;/vuln&gt;</programlisting>
- <para>Имена тегов должны быть самодокументируемыми, чтобы мы
- сфокусировались только на полях, нужных нам для заполнения:</para>
-
- <calloutlist>
- <callout arearefs="co-vx-vid">
- <para>Это тег верхнего уровня записи VuXML. У него есть
- обязательный атрибут <literal>vid</literal>, указывающий на
- универсальный уникальный идентификатор (UUID) для этой записи
- (в кавычках). Вы должны формировать UUID для каждой новой
- записи VuXML (и не забудьте заменить ее для шаблона UUID,
- если вы не пишете запись с нуля). Для получения VuXML UUID
- вы можете использовать &man.uuidgen.1;.</para>
- </callout>
-
- <callout arearefs="co-vx-top">
- <para>Однострочное описание найденной проблемы.</para>
- </callout>
-
- <callout arearefs="co-vx-nam">
- <para>Здесь перечислены имена затронутых пакетов.
- Может быть дано несколько имен, поскольку некоторые пакеты
- могут быть основаны на одном главном порте или программном
- продукте. Сюда можно включить стабильную ветвь и ветвь
- разработки, локализованные версии и подчиненные порты,
- зависящие от различного выбора важных вариантов конфигурации,
- указанных на этапе построения.</para>
-
- <important>
- <para>Поиск всех подобных пакетов при написании записи VuXML
- входит в зону вашей ответственности. Имейте в виду, что
- <literal>make search name=foo</literal> это ваш друг.
- Первичные точки для поиска следующие:</para>
-
- <itemizedlist>
- <listitem>
- <para>вариант <filename>foo-devel</filename> для порта
- <filename>foo</filename>;</para>
- </listitem>
-
- <listitem>
- <para>другие варианты с суффиксами вида
- <literal>-a4</literal> (для пакетов, связанных с печатью),
- <literal>-without-gui</literal> (для пакетов с
- отключенной поддержкой X), или подобных;</para>
- </listitem>
-
- <listitem>
- <para><literal>jp-</literal>, <literal>ru-</literal>,
- <literal>zh-</literal> и другие возможные локализованные
- варианты в соответствующих национальных категориях
- коллекции портов.</para>
- </listitem>
- </itemizedlist>
- </important>
- </callout>
-
- <callout arearefs="co-vx-rng">
- <para>Здесь указаны затронутые версии пакета(-ов) как один или
- более диапазонов с использованием комбинации элементов
- <literal>&lt;lt&gt;</literal>, <literal>&lt;le&gt;</literal>,
- <literal>&lt;eq&gt;</literal>, <literal>&lt;ge&gt;</literal>,
- и <literal>&lt;gt&gt;</literal>. Диапазоны внесённых версий
- не должны пересекаться.</para>
-
- <para>В спецификации диапазонов <literal>*</literal> (звёздочка)
- означает наименьший номер версии. В частности,
- <literal>2.*</literal> меньше, чем <literal>2.a</literal>.
- Поэтому звездочка может быть использована в диапазоне для
- совпадения со всеми возможными <literal>alpha</literal>,
- <literal>beta</literal> и <literal>RC</literal> версиями.
- Как вариант,
- <literal>&lt;ge&gt;2.*&lt;/ge&gt;&lt;lt&gt;3.*&lt;/lt&gt;</literal>
- выборочно совпадет с версией <literal>2.x</literal>, а
- <literal>&lt;ge&gt;2.0&lt;/ge&gt;&lt;lt&gt;3.0&lt;/lt&gt;</literal>
- - нет, поскольку последнее не включает
- <literal>2.r3</literal> и совпадает с <literal>3.b</literal>.
- </para>
-
- <para>Пример выше указывает, что к затронутым относятся версии с
- <literal>1.6</literal> до <literal>1.9</literal> включительно,
- версии <literal>2.x</literal> до <literal>2.4_1</literal> и
- версия <literal>3.0b1</literal>.</para>
- </callout>
-
- <callout arearefs="co-vx-nm2">
- <para>Некоторые связанные группы пакетов (в конечном счете, порты)
- могут быть указаны в разделе <literal>&lt;affected&gt;</literal>.
- Это можно использовать, если некоторые программные продукты
- (скажем, FooBar, FreeBar and OpenBar) являются производными
- от общей кодовой базы и всё еще совместно используют её ошибки
- и уязвимости. Имейте в виду отличие от перечисления
- множественных имён в одном разделе &lt;package&gt;.</para>
- </callout>
-
- <callout arearefs="co-vx-epo">
- <para>Диапазоны версий должны учитывать
- <varname>PORTEPOCH</varname> и <varname>PORTREVISION</varname>,
- если это применимо. Пожалуйста, помните, что в соответствии
- с правилами сравнения строк версия с ненулевым значением
- <varname>PORTEPOCH</varname> выше, чем любая версия без
- <varname>PORTEPOCH</varname>, например, <literal>3.0,1</literal>
- выше, чем <literal>3.1</literal> или даже <literal>8.9</literal>.
- </para>
- </callout>
-
- <callout arearefs="co-vx-bdy">
- <para>Сводная информация о проблеме. В этом поле
- используется XHTML. По крайней мере, должны быть обрамляющие
- <literal>&lt;p&gt;</literal> и <literal>&lt;/p&gt;</literal>.
- Может быть использована более сложная разметка, но только в
- целях аккуратности и ясности: без эстетства, пожалуйста.
- </para>
- </callout>
-
- <callout arearefs="co-vx-ref">
- <para>Этот раздел содержит ссылки на имеющие отношение документы.
- Приветствуется как можно большее количество ссылок.</para>
- </callout>
-
- <callout arearefs="co-vx-fsa">
- <para>Это
- <link xlink:href="http://www.freebsd.org/security/#adv">бюллетень
+ <para>Имена тегов должны быть самодокументируемыми, чтобы мы
+ сфокусировались только на полях, нужных нам для
+ заполнения:</para>
+
+ <calloutlist>
+ <callout arearefs="co-vx-vid">
+ <para>Это тег верхнего уровня записи VuXML. У него есть
+ обязательный атрибут <literal>vid</literal>, указывающий
+ на универсальный уникальный идентификатор (UUID) для этой
+ записи (в кавычках). Вы должны формировать UUID для
+ каждой новой записи VuXML (и не забудьте заменить ее для
+ шаблона UUID, если вы не пишете запись с нуля). Для
+ получения VuXML UUID вы можете использовать
+ &man.uuidgen.1;.</para>
+ </callout>
+
+ <callout arearefs="co-vx-top">
+ <para>Однострочное описание найденной проблемы.</para>
+ </callout>
+
+ <callout arearefs="co-vx-nam">
+ <para>Здесь перечислены имена затронутых пакетов. Может
+ быть дано несколько имен, поскольку некоторые пакеты
+ могут быть основаны на одном главном порте или
+ программном продукте. Сюда можно включить стабильную
+ ветвь и ветвь разработки, локализованные версии и
+ подчиненные порты, зависящие от различного выбора важных
+ вариантов конфигурации, указанных на этапе
+ построения.</para>
+
+ <important>
+ <para>Поиск всех подобных пакетов при написании записи
+ VuXML входит в зону вашей ответственности. Имейте в
+ виду, что <literal>make search name=foo</literal> это
+ ваш друг. Первичные точки для поиска следующие:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>вариант <filename>foo-devel</filename> для
+ порта <filename>foo</filename>;</para>
+ </listitem>
+
+ <listitem>
+ <para>другие варианты с суффиксами вида
+ <literal>-a4</literal> (для пакетов, связанных с
+ печатью), <literal>-without-gui</literal> (для
+ пакетов с отключенной поддержкой X), или
+ подобных;</para>
+ </listitem>
+
+ <listitem>
+ <para><literal>jp-</literal>, <literal>ru-</literal>,
+ <literal>zh-</literal> и другие возможные
+ локализованные варианты в соответствующих
+ национальных категориях коллекции портов.</para>
+ </listitem>
+ </itemizedlist>
+ </important>
+ </callout>
+
+ <callout arearefs="co-vx-rng">
+ <para>Здесь указаны затронутые версии пакета(-ов) как один
+ или более диапазонов с использованием комбинации
+ элементов <literal>&lt;lt&gt;</literal>,
+ <literal>&lt;le&gt;</literal>,
+ <literal>&lt;eq&gt;</literal>,
+ <literal>&lt;ge&gt;</literal>, и
+ <literal>&lt;gt&gt;</literal>. Диапазоны внесённых
+ версий не должны пересекаться.</para>
+
+ <para>В спецификации диапазонов <literal>*</literal>
+ (звёздочка) означает наименьший номер версии. В
+ частности, <literal>2.*</literal> меньше, чем
+ <literal>2.a</literal>. Поэтому звездочка может быть
+ использована в диапазоне для совпадения со всеми
+ возможными <literal>alpha</literal>,
+ <literal>beta</literal> и <literal>RC</literal> версиями.
+ Как вариант,
+ <literal>&lt;ge&gt;2.*&lt;/ge&gt;&lt;lt&gt;3.*&lt;/lt&gt;</literal>
+ выборочно совпадет с версией <literal>2.x</literal>, а
+ <literal>&lt;ge&gt;2.0&lt;/ge&gt;&lt;lt&gt;3.0&lt;/lt&gt;</literal>
+ - нет, поскольку последнее не включает
+ <literal>2.r3</literal> и совпадает с
+ <literal>3.b</literal>.</para>
+
+ <para>Пример выше указывает, что к затронутым относятся
+ версии с <literal>1.6</literal> до <literal>1.9</literal>
+ включительно, версии <literal>2.x</literal> до
+ <literal>2.4_1</literal> и версия
+ <literal>3.0b1</literal>.</para>
+ </callout>
+
+ <callout arearefs="co-vx-nm2">
+ <para>Некоторые связанные группы пакетов (в конечном счете,
+ порты) могут быть указаны в разделе
+ <literal>&lt;affected&gt;</literal>. Это можно
+ использовать, если некоторые программные продукты
+ (скажем, FooBar, FreeBar and OpenBar) являются
+ производными от общей кодовой базы и всё еще совместно
+ используют её ошибки и уязвимости. Имейте в виду отличие
+ от перечисления множественных имён в одном разделе
+ &lt;package&gt;.</para>
+ </callout>
+
+ <callout arearefs="co-vx-epo">
+ <para>Диапазоны версий должны учитывать
+ <varname>PORTEPOCH</varname> и
+ <varname>PORTREVISION</varname>, если это применимо.
+ Пожалуйста, помните, что в соответствии с правилами
+ сравнения строк версия с ненулевым значением
+ <varname>PORTEPOCH</varname> выше, чем любая версия без
+ <varname>PORTEPOCH</varname>, например,
+ <literal>3.0,1</literal> выше, чем <literal>3.1</literal>
+ или даже <literal>8.9</literal>.</para>
+ </callout>
+
+ <callout arearefs="co-vx-bdy">
+ <para>Сводная информация о проблеме. В этом поле
+ используется XHTML. По крайней мере, должны быть
+ обрамляющие <literal>&lt;p&gt;</literal> и
+ <literal>&lt;/p&gt;</literal>. Может быть использована
+ более сложная разметка, но только в целях аккуратности и
+ ясности: без эстетства, пожалуйста.</para>
+ </callout>
+
+ <callout arearefs="co-vx-ref">
+ <para>Этот раздел содержит ссылки на имеющие отношение
+ документы. Приветствуется как можно большее количество
+ ссылок.</para>
+ </callout>
+
+ <callout arearefs="co-vx-fsa">
+ <para>Это <link
+ xlink:href="http://www.freebsd.org/security/#adv">бюллетень
безопасности &os;</link>.</para>
- </callout>
+ </callout>
- <callout arearefs="co-vx-fpr">
- <para>Это
- <link xlink:href="http://www.freebsd.org/support.html#gnats">сообщение
+ <callout arearefs="co-vx-fpr">
+ <para>Это <link
+ xlink:href="http://www.freebsd.org/support.html#gnats">сообщение
об ошибке &os;</link>.</para>
- </callout>
+ </callout>
- <callout arearefs="co-vx-cve">
- <para>Идентификатор
- <link xlink:href="http://www.cve.mitre.org/">MITRE
+ <callout arearefs="co-vx-cve">
+ <para>Идентификатор <link
+ xlink:href="http://www.cve.mitre.org/">MITRE
CVE</link>.</para>
- </callout>
+ </callout>
- <callout arearefs="co-vx-bid">
- <para>Это
- <link xlink:href="http://www.securityfocus.com/bid">SecurityFocus
+ <callout arearefs="co-vx-bid">
+ <para>Это <link
+ xlink:href="http://www.securityfocus.com/bid">SecurityFocus
Bug ID</link>.</para>
- </callout>
-
- <callout arearefs="co-vx-cts">
- <para>Бюллетень безопасности
- <link xlink:href="http://www.cert.org/">US-CERT</link>.</para>
- </callout>
-
- <callout arearefs="co-vx-ctv">
- <para>Примечание к уязвимости
- <link xlink:href="http://www.cert.org/">US-CERT</link>.</para>
- </callout>
-
- <callout arearefs="co-vx-ucs">
- <para>Уведомление системы Cyber Security Alert
- <link xlink:href="http://www.cert.org/">US-CERT</link>.</para>
- </callout>
-
- <callout arearefs="co-vx-uct">
- <para>Уведомление системы Technical Cyber Security Alert
- <link xlink:href="http://www.cert.org/">US-CERT</link>.</para>
- </callout>
-
- <callout arearefs="co-vx-mls">
- <para>URL к архивному сообщению в списке рассылки.
- Атрибут <literal>msgid</literal> является необязательным
- и может указывать на message ID сообщения.</para>
- </callout>
-
- <callout arearefs="co-vx-url">
- <para>Основной URL. Должен быть использован в случае, если
- не подходит ни одна из категорий источника.</para>
- </callout>
-
- <callout arearefs="co-vx-dsc">
- <para>Дата последнего изменения любой информации данной записи
- (<replaceable>YYYY-MM-DD</replaceable>). Новые записи не
- должны включать это поле. Поле должно быть добавлено после
- редактирования существующей записи.</para>
- </callout>
- </calloutlist>
- </sect2>
-
- <sect2 xml:id="security-notify-vuxml-testing">
- <title>Тестирование ваших изменений в базе данных VuXML</title>
-
- <para>Предположим, что вы только что написали или заполнили запись
- об уязвимости в пакете <literal>clamav</literal>, которая была
- исправлена в версии <literal>0.65_7</literal>.</para>
-
- <para>Прежде всего, вам нужно <emphasis>установить</emphasis>
- последние версии портов
- <package role="port">ports-mgmt/portaudit</package>,
- <package role="port">ports-mgmt/portaudit-db</package> и
- <package role="port">security/vuxml</package>.</para>
-
- <note>
- <para>Для запуска <command>packaudit</command> вы должны обладать
- правами на запись в
- <filename>DATABASEDIR</filename>; как правило,
- это <filename>/var/db/portaudit</filename>.</para>
-
- <para>Для использования другого каталога присвойте переменной
- окружения <filename>DATABASEDIR</filename>
- другой путь.</para>
-
- <para>Если вы работаете в каталоге, отличном от
- <filename>${PORTSDIR}/security/vuxml</filename>, присвойте
- переменной окружения
- <filename>VUXMLDIR</filename> путь к каталогу,
- в котором находится <filename>vuln.xml</filename>.</para>
- </note>
-
- <para>Во-первых, проверьте, нет ли уже записи об этой уязвимости.
- Если такая запись есть, она совпадёт с предыдущей версией
- пакета <literal>0.65_6</literal>:</para>
-
- <screen>&prompt.user; <userinput>packaudit</userinput>
+ </callout>
+
+ <callout arearefs="co-vx-cts">
+ <para>Бюллетень безопасности <link
+ xlink:href="http://www.cert.org/">US-CERT</link>.</para>
+ </callout>
+
+ <callout arearefs="co-vx-ctv">
+ <para>Примечание к уязвимости <link
+ xlink:href="http://www.cert.org/">US-CERT</link>.</para>
+ </callout>
+
+ <callout arearefs="co-vx-ucs">
+ <para>Уведомление системы Cyber Security Alert <link
+ xlink:href="http://www.cert.org/">US-CERT</link>.</para>
+ </callout>
+
+ <callout arearefs="co-vx-uct">
+ <para>Уведомление системы Technical Cyber Security Alert
+ <link
+ xlink:href="http://www.cert.org/">US-CERT</link>.</para>
+ </callout>
+
+ <callout arearefs="co-vx-mls">
+ <para>URL к архивному сообщению в списке рассылки. Атрибут
+ <literal>msgid</literal> является необязательным и может
+ указывать на message ID сообщения.</para>
+ </callout>
+
+ <callout arearefs="co-vx-url">
+ <para>Основной URL. Должен быть использован в случае, если
+ не подходит ни одна из категорий источника.</para>
+ </callout>
+
+ <callout arearefs="co-vx-dsc">
+ <para>Дата последнего изменения любой информации данной
+ записи (<replaceable>YYYY-MM-DD</replaceable>). Новые
+ записи не должны включать это поле. Поле должно быть
+ добавлено после редактирования существующей
+ записи.</para>
+ </callout>
+ </calloutlist>
+ </sect2>
+
+ <sect2 xml:id="security-notify-vuxml-testing">
+ <title>Тестирование ваших изменений в базе данных VuXML</title>
+
+ <para>Предположим, что вы только что написали или заполнили
+ запись об уязвимости в пакете <literal>clamav</literal>,
+ которая была исправлена в версии
+ <literal>0.65_7</literal>.</para>
+
+ <para>Прежде всего, вам нужно <emphasis>установить</emphasis>
+ последние версии портов
+ <package role="port">ports-mgmt/portaudit</package>,
+ <package role="port">ports-mgmt/portaudit-db</package> и
+ <package role="port">security/vuxml</package>.</para>
+
+ <note>
+ <para>Для запуска <command>packaudit</command> вы должны
+ обладать правами на запись в
+ <filename>DATABASEDIR</filename>; как правило, это
+ <filename>/var/db/portaudit</filename>.</para>
+
+ <para>Для использования другого каталога присвойте переменной
+ окружения <filename>DATABASEDIR</filename> другой
+ путь.</para>
+
+ <para>Если вы работаете в каталоге, отличном от
+ <filename>${PORTSDIR}/security/vuxml</filename>, присвойте
+ переменной окружения <filename>VUXMLDIR</filename> путь к
+ каталогу, в котором находится
+ <filename>vuln.xml</filename>.</para>
+ </note>
+
+ <para>Во-первых, проверьте, нет ли уже записи об этой
+ уязвимости. Если такая запись есть, она совпадёт с
+ предыдущей версией пакета <literal>0.65_6</literal>:</para>
+
+ <screen>&prompt.user; <userinput>packaudit</userinput>
&prompt.user; <userinput>portaudit clamav-0.65_6</userinput></screen>
- <para>Если ничего не найдено, значит вы получили зеленый свет для
- добавления новой записи для этой уязвимости.</para>
+ <para>Если ничего не найдено, значит вы получили зеленый свет
+ для добавления новой записи для этой уязвимости.</para>
- <screen>&prompt.user; <userinput>cd ${PORTSDIR}/security/vuxml</userinput>
+ <screen>&prompt.user; <userinput>cd ${PORTSDIR}/security/vuxml</userinput>
&prompt.user; <userinput>make newentry</userinput></screen>
- <para>Когда вы закончите, проверьте синтаксис и форматирование.</para>
+ <para>Когда вы закончите, проверьте синтаксис и
+ форматирование.</para>
- <screen>&prompt.user; <userinput>make validate</userinput></screen>
+ <screen>&prompt.user; <userinput>make validate</userinput></screen>
- <note>
- <para>Вам понадобится установить по крайней мере один из следующих
- пакетов: <package role="port">textproc/libxml2</package>,
- <package role="port">textproc/jade</package>.</para>
- </note>
+ <note>
+ <para>Вам понадобится установить по крайней мере один из
+ следующих пакетов:
+ <package role="port">textproc/libxml2</package>,
+ <package role="port">textproc/jade</package>.</para>
+ </note>
- <para>Теперь выполните перепостроение базы данных
- <command>portaudit</command> из файла VuXML:</para>
+ <para>Теперь выполните перепостроение базы данных
+ <command>portaudit</command> из файла VuXML:</para>
- <screen>&prompt.user; <userinput>packaudit</userinput></screen>
+ <screen>&prompt.user; <userinput>packaudit</userinput></screen>
- <para>Чтобы убедиться, что раздел <literal>&lt;affected&gt;</literal>
- в вашей записи совпадает с правильными пакетами, выполните
- следующую команду:</para>
+ <para>Чтобы убедиться, что раздел
+ <literal>&lt;affected&gt;</literal> в вашей записи совпадает
+ с правильными пакетами, выполните следующую команду:</para>
- <screen>&prompt.user; <userinput>portaudit -f /usr/ports/INDEX -r uuid</userinput></screen>
+ <screen>&prompt.user; <userinput>portaudit -f /usr/ports/INDEX -r uuid</userinput></screen>
- <note>
- <para>Для лучшего понимания синтаксиса этой команды обращайтесь
- к &man.portaudit.1;.</para>
- </note>
+ <note>
+ <para>Для лучшего понимания синтаксиса этой команды
+ обращайтесь к &man.portaudit.1;.</para>
+ </note>
- <para>Убедитесь, что ваша запись не производит ложных совпадений
- в выводе.</para>
+ <para>Убедитесь, что ваша запись не производит ложных
+ совпадений в выводе.</para>
- <para>Теперь проверьте, совпадает ли ваша запись с нужными версиями
- пакета:</para>
+ <para>Теперь проверьте, совпадает ли ваша запись с нужными
+ версиями пакета:</para>
- <screen>&prompt.user; <userinput>portaudit clamav-0.65_6 clamav-0.65_7</userinput>
+ <screen>&prompt.user; <userinput>portaudit clamav-0.65_6 clamav-0.65_7</userinput>
Affected package: clamav-0.65_6 (matched by clamav&lt;0.65_7)
Type of problem: clamav remote denial-of-service.
Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-0020ed76ef5a.html&gt;
1 problem(s) found.</screen>
- <para>Первая версия должна совпасть, а последняя
- нет.</para>
+ <para>Первая версия должна совпасть, а последняя нет.</para>
- <para>В заключение проверьте, что веб-страница, сформированная из
- базы данных VuXML, выглядит как положено:</para>
+ <para>В заключение проверьте, что веб-страница, сформированная
+ из базы данных VuXML, выглядит как положено:</para>
- <screen>&prompt.user; <userinput>mkdir -p ~/public_html/portaudit</userinput>
+ <screen>&prompt.user; <userinput>mkdir -p ~/public_html/portaudit</userinput>
&prompt.user; <userinput>packaudit</userinput>
&prompt.user; <userinput>lynx ~/public_html/portaudit/74a9541d-5d6c-11d8-80e3-0020ed76ef5a.html</userinput></screen>
- </sect2>
- </sect1>
- </chapter>
-
+ </sect2>
+ </sect1>
+</chapter>
diff --git a/ru_RU.KOI8-R/books/porters-handbook/slow-porting/chapter.xml b/ru_RU.KOI8-R/books/porters-handbook/slow-porting/chapter.xml
index 38bbeb8ea7..1ad5b5ccea 100644
--- a/ru_RU.KOI8-R/books/porters-handbook/slow-porting/chapter.xml
+++ b/ru_RU.KOI8-R/books/porters-handbook/slow-porting/chapter.xml
@@ -7,428 +7,441 @@
Original revision: r43840
-->
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="slow-porting">
-
- <title>Медленное портирование</title>
-
- <para>Итак, все оказалось не так уж и просто, и порт потребовал
- некоторых модификаций для того, чтобы заставить его работать. В этом
- разделе мы расскажем, шаг за шагом, как его модифицировать, чтобы он
- работал с нашей системой портов.</para>
-
- <sect1 xml:id="slow-work">
- <title>Как всё это работает</title>
-
- <para>Во-первых, когда пользователь дает в своем каталоге с портом
- команду <command>make</command>, происходит целая череда событий.
- Во время чтения этого текста может оказаться полезным иметь файл
- <filename>bsd.port.mk</filename> открытым в другом окне, что сильно
- поможет в их понимании.</para>
-
- <para>Но не волнуйтесь сильно, если вы не до конца понимаете, что
- делается в <filename>bsd.port.mk</filename>, не так уж много людей
- его понимает... <!-- smiley --><emphasis>:-&gt;</emphasis></para>
-
- <procedure>
- <step>
- <para>Запускается цель <buildtarget>fetch</buildtarget>. Цель
- <buildtarget>fetch</buildtarget> отвечает за то, что архив исходных
- текстов имеется в наличии локально в каталоге
- <varname>DISTDIR</varname>. Если цель
- <buildtarget>fetch</buildtarget> не может найти требуемые файлы в
- каталоге <varname>DISTDIR</varname>, то они будут искаться по
- указателю URL <varname>MASTER_SITES</varname>, который
- устанавливается в Makefile, а также на наших FTP зеркалах,
- куда мы по возможности помещаем дистрибутивные файлы для архива.
- Затем она попытается сгрузить указанный файл с помощью
- <varname>FETCH</varname>, полагая, что запрашивающая машина имеет
- прямое подключение к Интернет. Если файл скачается удачно, то
- он будет помещен в каталог <varname>DISTDIR</varname> для
- последующего использования и обработки.</para>
- </step>
-
- <step>
- <para>Выполняется цель <buildtarget>extract</buildtarget>. Она ищет
- дистрибутивный файл порта (как правило, tar-архив
- <command>gzip</command>) в
- каталоге <varname>DISTDIR</varname> и распаковывает его во
- временный каталог, задаваемый переменной
- <varname>WRKDIR</varname> (по умолчанию
- <filename>work</filename>).</para>
- </step>
-
- <step>
- <para>Выполняется цель <buildtarget>patch</buildtarget>. Во-первых,
- применяются все патчи, заданные переменной
- <varname>PATCHFILES</varname>. Во-вторых, если какие-либо файлы с
- патчами, носящие имена
- <filename>patch-*</filename>, имеются в
- подкаталоге <varname>PATCHDIR</varname> (по умолчанию это каталог
- <filename>files</filename>), то они применяются в этот момент в
- алфавитном порядке.</para>
- </step>
-
- <step>
- <para>Запускается цель <buildtarget>configure</buildtarget>. Здесь
- может выполняться любая из многих различных вещей.</para>
-
- <orderedlist>
- <listitem>
- <para>Если существует скрипт
- <filename>scripts/configure</filename>, то он запускается.
- </para>
- </listitem>
-
- <listitem>
- <para>Если задана переменная <varname>HAS_CONFIGURE</varname>
- или <varname>GNU_CONFIGURE</varname>, то запускается скрипт
- <filename>WRKSRC/configure</filename>.
- </para>
- </listitem>
- </orderedlist>
- </step>
-
- <step>
- <para>Выполняется цель <buildtarget>build</buildtarget>. Она
- отвечает за переход в собственный рабочий каталог порта
- (<varname>WRKSRC</varname>) и его построение.</para>
- </step>
-
- <step>
- <para>Выполняется цель <buildtarget>stage</buildtarget>.
- Конечный набор построенных файлов помещается во временный
- каталог (<varname>STAGEDIR</varname>, смотрите
- <xref linkend="staging"/>). Иерархия этого
- каталога отражает иерархию каталогов системы, в которую
- данный пакет будет устанавливаться.</para>
- </step>
-
- <step>
- <para>Выполняется цель <buildtarget>install</buildtarget>.
- В систему копируются файлы, перечисленные в pkg-plist
- порта.</para>
- </step>
- </procedure>
-
- <para>Выше перечислены стандартные действия. Кроме того, вы сами
- можете определить цели
- <buildtarget>pre-<replaceable>что-то</replaceable></buildtarget> или
- <buildtarget>post-<replaceable>что-то</replaceable></buildtarget>,
- или создать скрипты с такими именами в подкаталоге
- <filename>scripts</filename>, и они будут запущены до или после
- выполнения действий по умолчанию.</para>
-
- <para>Например, если у вас есть цель
- <buildtarget>post-extract</buildtarget>, определённая в вашем файле
- <filename>Makefile</filename> и файл <filename>pre-build</filename> в
- подкаталоге
- <filename>scripts</filename>, то после выполнения обычных действий по
- распаковке, будет вызвана цель <buildtarget>post-extract</buildtarget>
- а скрипт <filename>pre-build</filename> будет выполнен перед
- запуском стандартных правил построения. Рекомендуется использовать
- цели из <filename>Makefile</filename>, если действия достаточно
- просты, потому что в дальнейшем будет проще определить, какие
- нестандартные действия требует порт.</para>
-
- <para>Действия по умолчанию выполняются целями
- <buildtarget>do-<replaceable>что-то</replaceable></buildtarget> из
- <filename>bsd.port.mk</filename>. Например, команды для
- распаковки порта находятся в цели
- <buildtarget>do-extract</buildtarget>. Если вам не хватает цели по
- умолчанию, вы можете ее исправить, переопределив цель
- <buildtarget>do-<replaceable>something</replaceable></buildtarget>
- в вашем файле <filename>Makefile</filename>.</para>
-
- <note>
- <para><quote>Основные</quote> цели (к примеру,
- <buildtarget>extract</buildtarget>, <buildtarget>configure</buildtarget>
- и так далее) не делают ничего больше,
- чем проверяют успешность завершения всех предыдущих шагов и
- вызывают настоящие цели или скрипты, и их не нужно менять. Если
- вам нужно изменить распаковку, исправляйте
- <buildtarget>do-extract</buildtarget>, но никогда не меняйте способ
- работы <buildtarget>extract</buildtarget>! Кроме того, цель
- <buildtarget>post-deinstall</buildtarget> является недействительной
- и не выполняется инфраструктурой портов.</para>
- </note>
-
- <para>Теперь, когда вы представляете, что происходит, когда
- пользователь набирает команду <command>make install</command>,
- давайте пройдемся
- через шаги, рекомендуемые для создания настоящего порта.</para>
- </sect1>
-
- <sect1 xml:id="slow-sources">
- <title>Получение исходного кода</title>
-
- <para>Получите оригинальные исходные тексты (обычно) в виде
- упакованного tar-архива
- (<filename>foo.tar.gz</filename> или
- <filename>foo.tar.bz2</filename>)
- и скопируйте его в каталог <varname>DISTDIR</varname>. Всегда
- используйте исходные тексты <emphasis>основной ветки
- разработки</emphasis> везде, где это возможно.</para>
-
- <para>Вам потребуется задать значение переменной
- <varname>MASTER_SITES</varname> так, чтобы оно указывало на
- местоположение оригинального tar-архива. В файле
- <filename>bsd.sites.mk</filename> вы найдёте краткие обозначения
- для большинства популярных сайтов. Пожалуйста, используйте эти
- сайты&mdash;и соответствующие определения&mdash;везде, где это
- возможно, чтобы избежать проблем повторения одной и той же информации
- в базе источников. Так как эти сайты со временем меняются, для
- всех причастных поддержка становится настоящим кошмаром.</para>
-
- <para>Если вы не можете найти FTP/HTTP сайт с хорошим подключением к
- сети, или находите только сайты, которые имеют раздражающе
- нестандартные форматы, то можете захотеть поместить копию на надежный
- сервер FTP или HTTP, который вам доступен (например, ваша домашняя
- страница).</para>
-
- <para>Если вы не можете найти доступного и надёжного места для
- помещения дистрибутивного файла, то мы сами сможем разместить его на
- сервере <systemitem>ftp.FreeBSD.org</systemitem>; однако это наименее
- рекомендуемое решение. Дистрибутивный файл должен
- быть помещён в каталог <filename>~/public_distfiles/</filename>
- одного из пользователей машины <systemitem>freefall</systemitem>. Попросите
- того, кто коммиттил ваш порт, сделать это. Этот человек также задаст
- переменной <varname>MASTER_SITES</varname> значение
- <varname>MASTER_SITE_LOCAL</varname>, а в переменной
- <varname>MASTER_SITE_SUBDIR</varname> укажет своё имя пользователя
- с машины <systemitem>freefall</systemitem>.</para>
-
- <para>Если дистрибутивные файлы вашего порта постоянно меняются по
- неизвестным причинам без изменения версий со стороны автора, остаётся
- только поместить дистрибутив на вашу домашнюю Web-страницу и указать
- её первой в списке <varname>MASTER_SITES</varname>. Если можете,
- попытайтесь договориться с автором порта об этом; это действительно
- помогает в достижении некоторого управления исходным кодом.
- Размещение собственной версии поможет избежать появления ошибок у
- пользователей типа <errorname>checksum mismatch</errorname>, а
- также уменьшит нагрузку на людей, сопровождающих наш FTP-сервер.
- Также, если у порта имеется только один основной сервер, то
- рекомендуется поместить архивную копию на свой сайт и указать его в
- списке <varname>MASTER_SITES</varname> вторым.</para>
-
- <para>Если вашему порту требуются дополнительные `патчи', доступные
- в Интернет, скачайте также и их, поместив в каталог
- <varname>DISTDIR</varname>. Не волнуйтесь, если они находятся не
- на том же сайте, откуда взят дистрибутивный архив, мы умеем
- обрабатывать такие ситуации (смотрите описание <link linkend="porting-patchfiles">PATCHFILES</link> ниже).</para>
- </sect1>
-
- <sect1 xml:id="slow-modifying">
- <title>Модификация порта</title>
-
- <para>Распакуйте копию дистрибутивного файла в отдельный каталог и
- внесите изменения, которые необходимы для того, чтобы порт
- компилировался нормально в текущей версии &os;.
- <emphasis>Тщательно отслеживайте</emphasis> все, что вы делаете,
- этот процесс вам предстоит автоматизировать. Все, включая удаление,
- добавление или модификацию в файлах должны будут выполняться
- автоматически с помощью скриптов или файлов патчей, когда вы
- завершите работу над портом.</para>
-
- <para>Если вашему порту во время компиляции, установки и настройки
- требуется довольно много взаимодействовать с пользователем, то
- посмотрите на один из классических скриптов
- <application>Configure</application> Лэрри Уолла (Larry Wall) и
- сделайте сами что-либо подобное. Предназначение новой коллекции
- портов - это сделать каждое приложение в стиле
- <quote>plug-and-play</quote> настолько, насколько это вообще возможно
- для конечного пользователя при минимальном использовании дискового
- пространства.</para>
-
- <note>
- <para>Если явно не указано обратное, то патчи, скрипты и другие
- файлы, которые вы создали и предоставили для Коллекции Портов
- &os;, неявно подпадают под стандартные условия лицензии
- BSD.</para>
- </note>
- </sect1>
-
- <sect1 xml:id="slow-patch">
- <title>Создание патчей</title>
-
- <para>Файлы, которые добавлялись или изменялись в процессе создания
- порта, могут быть выявлены программой &man.diff.1;,
- а результат работы этой программы может быть в дальнейшем передан
- программе &man.patch.1;. Такое действие с обычным файлом
- подразумевает сохранение копии файла с первоначальным содержимым
- перед внесением каких-либо изменений.</para>
-
- <screen>&prompt.user; <userinput>cp <replaceable>file</replaceable> <replaceable>file</replaceable>.orig</userinput></screen>
-
- <para>Патчи сохраняются в виде файлов с именем
- <filename>patch-*</filename>, где
- <replaceable>*</replaceable> обозначает путь к файлу,
- к которому применяется патч, такой как
- <filename>patch-Imakefile</filename> или
- <filename>patch-src-config.h</filename>.</para>
-
- <para>После того как файл был изменён, используется &man.diff.1;
- для получения разницы между первоначальной и изменённой
- версиями. Параметр <option>-u</option> указывает &man.diff.1;
- выводить разницу в <quote>унифицированном</quote> формате,
- который также является предпочтительным.</para>
-
- <screen>&prompt.user; <userinput>diff -u <replaceable>file</replaceable>.orig <replaceable>file</replaceable> &gt; patch-<replaceable>pathname-file</replaceable></userinput></screen>
-
- <para>Для порождении патчей для новых добавляемых файлов
- используется параметр <option>-N</option>, который заставляет
- &man.diff.1; трактовать несуществующие прежде файлы как если
- бы они существовали, но имели пустое содержимое:</para>
-
- <screen>&prompt.user; <userinput>diff -u -N <replaceable>newfile</replaceable>.orig <replaceable>newfile</replaceable> &gt; patch-<replaceable>pathname-newfile</replaceable></userinput></screen>
-
- <para>Файлы с патчами помещаются в
- каталоге <varname>PATCHDIR</varname>
- (как правило, это <filename class="directory">files/</filename>),
- откуда они будут взяты автоматически. Все патчи обязаны быть сделаны
- относительно каталога <varname>WRKSRC</varname> (как правило,
- это каталог, в который распаковывается исходный архив и где будет
- выполняться построение). Для упрощения внесения изменений и
- обновлений избегайте наличия более чем одного патча для
- одного и того же файла (например, патчей
- <filename>patch-file</filename> и <filename>patch-file2</filename>,
- оба меняющих файл <filename>WRKSRC/foobar.c</filename>).
- Обратите внимание, что если путь к изменяемому файлу содержит символ
- подчеркивания (<literal>_</literal>), то патч должен содержать в своем
- имени два подчеркивания вместо одного. Например, для применения патча
- на файл с именем <filename>src/freeglut_joystick.c</filename>
- соответствующий патч следует назвать
- <filename>patch-src-freeglut__joystick.c</filename>.</para>
-
- <para>Пожалуйста, используйте для именования патчей только символы
- <literal>[-+._a-zA-Z0-9]</literal>. Не используйте любые другие
- символы, кроме этих. Не называйте патчи как
- <filename>patch-aa</filename> или <filename>patch-ab</filename>,
- всегда ссылайтесь на путь и название файла в названиях самих
- патчей.</para>
-
- <para>Существует альтернативный упрощённый способ создания
- патчей для существующих файлов. Первые шаги те же самые:
- создание копии неизменённого файла с расширением
- <filename>.orig</filename> и внесение изменений. После этого
- используйте <command>make makepatch</command>, чтобы обновить
- файлы с патчами в каталоге <filename>files</filename> данного
- порта.</para>
-
- <para>Не помещайте строки RCS в патчи.
- <application>Subversion</application> будет изменять их при
- помещении файлов в дерево портов, и когда мы будем их оттуда
- извлекать, они будут уже другие, поэтому применение патчей
- окончится неудачей. Строчки RCS предваряются знаком доллара
- (<literal>&dollar;</literal>), и обычно начинаются с
- <literal>&dollar;Id</literal> или
- <literal>&dollar;RCS</literal>.</para>
-
- <para>Использование параметра рекурсии (<option>-r</option>) с командой
- &man.diff.1; для генерации патчей - это хорошо, но всё же,
- пожалуйста, смотрите на получающиеся патчи, чтобы убедиться в
- отсутствии ненужного мусора. В частности, diff-разниц между двумя
- резервными копиями файлов, файлы <filename>Makefile</filename>, когда
- как порт использует <command>Imake</command> или
- GNU-версию программы <command>configure</command>, и так далее,
- не нужны, и должны быть удалены. Если было необходимо
- отредактировать файл <filename>configure.in</filename> и
- запустить <command>autoconf</command> для перегенерации
- <command>configure</command>, не нужно включать файлы diff для
- <command>configure</command> (они частенько вырастают до нескольких
- тысяч строк!). Вместо этого задайте
- <literal>USE_AUTOTOOLS=autoconf:261</literal> и
- включите diff-файл для <filename>configure.in</filename>.</para>
-
- <para>Старайтесь минимизировать в патчах объём
- нефункциональных изменений с пустыми символами. В мире Открытого
- Исходного Кода является распространенным совместное использование
- проектами больших объемов кодовой базы, но с различными стилями
- и правилами отступов. При копировании работающей функциональной
- части из одного проекта для исправления похожей области в другом,
- будьте аккуратны, пожалуйста: получаемый однострочный патч
- может указаться полон нефункциональных изменений. Это не только
- увеличивает размер репозитория <application>Subversion</application>,
- но также усложняет поиск того,
- что конкретно вызвало проблему и что вообще поменялось.</para>
-
- <para>Если нужно удалить файл, сделайте это при выполнении цели
- <buildtarget>post-extract</buildtarget>, вместо того чтобы
- оформлять это как часть патча.</para>
-
- <para>Простые перемещения могут быть выполнены непосредственно из
- <filename>Makefile</filename> порта с использованием &man.sed.1; в
- режиме in-place. Это удобно, когда при изменении используется
- значение переменной:</para>
-
- <programlisting>post-patch:
+<chapter xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
+ xml:id="slow-porting">
+
+ <title>Медленное портирование</title>
+
+ <para>Итак, все оказалось не так уж и просто, и порт потребовал
+ некоторых модификаций для того, чтобы заставить его работать. В
+ этом разделе мы расскажем, шаг за шагом, как его модифицировать,
+ чтобы он работал с нашей системой портов.</para>
+
+ <sect1 xml:id="slow-work">
+ <title>Как всё это работает</title>
+
+ <para>Во-первых, когда пользователь дает в своем каталоге с
+ портом команду <command>make</command>, происходит целая череда
+ событий. Во время чтения этого текста может оказаться полезным
+ иметь файл <filename>bsd.port.mk</filename> открытым в другом
+ окне, что сильно поможет в их понимании.</para>
+
+ <para>Но не волнуйтесь сильно, если вы не до конца понимаете, что
+ делается в <filename>bsd.port.mk</filename>, не так уж много
+ людей его понимает... <emphasis>:-&gt;</emphasis></para>
+
+ <procedure>
+ <step>
+ <para>Запускается цель <buildtarget>fetch</buildtarget>.
+ Цель <buildtarget>fetch</buildtarget> отвечает за то, что
+ архив исходных текстов имеется в наличии локально в
+ каталоге <varname>DISTDIR</varname>. Если цель
+ <buildtarget>fetch</buildtarget> не может найти требуемые
+ файлы в каталоге <varname>DISTDIR</varname>, то они будут
+ искаться по указателю URL <varname>MASTER_SITES</varname>,
+ который устанавливается в Makefile, а также на наших FTP
+ зеркалах, куда мы по возможности помещаем дистрибутивные
+ файлы для архива. Затем она попытается сгрузить указанный
+ файл с помощью <varname>FETCH</varname>, полагая, что
+ запрашивающая машина имеет прямое подключение к Интернет.
+ Если файл скачается удачно, то он будет помещен в каталог
+ <varname>DISTDIR</varname> для последующего использования и
+ обработки.</para>
+ </step>
+
+ <step>
+ <para>Выполняется цель <buildtarget>extract</buildtarget>.
+ Она ищет дистрибутивный файл порта (как правило, tar-архив
+ <command>gzip</command>) в каталоге
+ <varname>DISTDIR</varname> и распаковывает его во временный
+ каталог, задаваемый переменной <varname>WRKDIR</varname>
+ (по умолчанию <filename>work</filename>).</para>
+ </step>
+
+ <step>
+ <para>Выполняется цель <buildtarget>patch</buildtarget>.
+ Во-первых, применяются все патчи, заданные переменной
+ <varname>PATCHFILES</varname>. Во-вторых, если какие-либо
+ файлы с патчами, носящие имена
+ <filename>patch-*</filename>, имеются в подкаталоге
+ <varname>PATCHDIR</varname> (по умолчанию это каталог
+ <filename>files</filename>), то они применяются в этот
+ момент в алфавитном порядке.</para>
+ </step>
+
+ <step>
+ <para>Запускается цель <buildtarget>configure</buildtarget>.
+ Здесь может выполняться любая из многих различных
+ вещей.</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Если существует скрипт
+ <filename>scripts/configure</filename>, то он
+ запускается.</para>
+ </listitem>
+
+ <listitem>
+ <para>Если задана переменная
+ <varname>HAS_CONFIGURE</varname> или
+ <varname>GNU_CONFIGURE</varname>, то запускается скрипт
+ <filename>WRKSRC/configure</filename>.</para>
+ </listitem>
+ </orderedlist>
+ </step>
+
+ <step>
+ <para>Выполняется цель <buildtarget>build</buildtarget>. Она
+ отвечает за переход в собственный рабочий каталог порта
+ (<varname>WRKSRC</varname>) и его построение.</para>
+ </step>
+
+ <step>
+ <para>Выполняется цель <buildtarget>stage</buildtarget>.
+ Конечный набор построенных файлов помещается во временный
+ каталог (<varname>STAGEDIR</varname>, смотрите <xref
+ linkend="staging"/>). Иерархия этого каталога отражает
+ иерархию каталогов системы, в которую данный пакет будет
+ устанавливаться.</para>
+ </step>
+
+ <step>
+ <para>Выполняется цель <buildtarget>install</buildtarget>.
+ В систему копируются файлы, перечисленные в pkg-plist
+ порта.</para>
+ </step>
+ </procedure>
+
+ <para>Выше перечислены стандартные действия. Кроме того, вы сами
+ можете определить цели
+ <buildtarget>pre-<replaceable>что-то</replaceable></buildtarget>
+ или
+ <buildtarget>post-<replaceable>что-то</replaceable></buildtarget>,
+ или создать скрипты с такими именами в подкаталоге
+ <filename>scripts</filename>, и они будут запущены до или после
+ выполнения действий по умолчанию.</para>
+
+ <para>Например, если у вас есть цель
+ <buildtarget>post-extract</buildtarget>, определённая в вашем
+ файле <filename>Makefile</filename> и файл
+ <filename>pre-build</filename> в подкаталоге
+ <filename>scripts</filename>, то после выполнения обычных
+ действий по распаковке, будет вызвана цель
+ <buildtarget>post-extract</buildtarget> а скрипт
+ <filename>pre-build</filename> будет выполнен перед запуском
+ стандартных правил построения. Рекомендуется использовать цели
+ из <filename>Makefile</filename>, если действия достаточно
+ просты, потому что в дальнейшем будет проще определить, какие
+ нестандартные действия требует порт.</para>
+
+ <para>Действия по умолчанию выполняются целями
+ <buildtarget>do-<replaceable>что-то</replaceable></buildtarget>
+ из <filename>bsd.port.mk</filename>. Например, команды для
+ распаковки порта находятся в цели
+ <buildtarget>do-extract</buildtarget>. Если вам не хватает
+ цели по умолчанию, вы можете ее исправить, переопределив цель
+ <buildtarget>do-<replaceable>something</replaceable></buildtarget>
+ в вашем файле <filename>Makefile</filename>.</para>
+
+ <note>
+ <para><quote>Основные</quote> цели (к примеру,
+ <buildtarget>extract</buildtarget>,
+ <buildtarget>configure</buildtarget> и так далее) не делают
+ ничего больше, чем проверяют успешность завершения всех
+ предыдущих шагов и вызывают настоящие цели или скрипты, и их
+ не нужно менять. Если вам нужно изменить распаковку,
+ исправляйте <buildtarget>do-extract</buildtarget>, но никогда
+ не меняйте способ работы <buildtarget>extract</buildtarget>!
+ Кроме того, цель <buildtarget>post-deinstall</buildtarget>
+ является недействительной и не выполняется инфраструктурой
+ портов.</para>
+ </note>
+
+ <para>Теперь, когда вы представляете, что происходит, когда
+ пользователь набирает команду <command>make install</command>,
+ давайте пройдемся через шаги, рекомендуемые для создания
+ настоящего порта.</para>
+ </sect1>
+
+ <sect1 xml:id="slow-sources">
+ <title>Получение исходного кода</title>
+
+ <para>Получите оригинальные исходные тексты (обычно) в виде
+ упакованного tar-архива (<filename>foo.tar.gz</filename> или
+ <filename>foo.tar.bz2</filename>) и скопируйте его в каталог
+ <varname>DISTDIR</varname>. Всегда используйте исходные тексты
+ <emphasis>основной ветки разработки</emphasis> везде, где это
+ возможно.</para>
+
+ <para>Вам потребуется задать значение переменной
+ <varname>MASTER_SITES</varname> так, чтобы оно указывало на
+ местоположение оригинального tar-архива. В файле
+ <filename>bsd.sites.mk</filename> вы найдёте краткие
+ обозначения для большинства популярных сайтов. Пожалуйста,
+ используйте эти сайты&mdash;и соответствующие
+ определения&mdash;везде, где это возможно, чтобы избежать
+ проблем повторения одной и той же информации в базе источников.
+ Так как эти сайты со временем меняются, для всех причастных
+ поддержка становится настоящим кошмаром.</para>
+
+ <para>Если вы не можете найти FTP/HTTP сайт с хорошим
+ подключением к сети, или находите только сайты, которые имеют
+ раздражающе нестандартные форматы, то можете захотеть поместить
+ копию на надежный сервер FTP или HTTP, который вам доступен
+ (например, ваша домашняя страница).</para>
+
+ <para>Если вы не можете найти доступного и надёжного места для
+ помещения дистрибутивного файла, то мы сами сможем разместить
+ его на сервере <systemitem>ftp.FreeBSD.org</systemitem>; однако
+ это наименее рекомендуемое решение. Дистрибутивный файл должен
+ быть помещён в каталог <filename>~/public_distfiles/</filename>
+ одного из пользователей машины
+ <systemitem>freefall</systemitem>. Попросите того, кто
+ коммиттил ваш порт, сделать это. Этот человек также задаст
+ переменной <varname>MASTER_SITES</varname> значение
+ <varname>MASTER_SITE_LOCAL</varname>, а в переменной
+ <varname>MASTER_SITE_SUBDIR</varname> укажет своё имя
+ пользователя с машины <systemitem>freefall</systemitem>.</para>
+
+ <para>Если дистрибутивные файлы вашего порта постоянно меняются
+ по неизвестным причинам без изменения версий со стороны автора,
+ остаётся только поместить дистрибутив на вашу домашнюю
+ Web-страницу и указать её первой в списке
+ <varname>MASTER_SITES</varname>. Если можете, попытайтесь
+ договориться с автором порта об этом; это действительно
+ помогает в достижении некоторого управления исходным кодом.
+ Размещение собственной версии поможет избежать появления ошибок
+ у пользователей типа <errorname>checksum mismatch</errorname>,
+ а также уменьшит нагрузку на людей, сопровождающих наш
+ FTP-сервер. Также, если у порта имеется только один основной
+ сервер, то рекомендуется поместить архивную копию на свой сайт
+ и указать его в списке <varname>MASTER_SITES</varname>
+ вторым.</para>
+
+ <para>Если вашему порту требуются дополнительные `патчи',
+ доступные в Интернет, скачайте также и их, поместив в каталог
+ <varname>DISTDIR</varname>. Не волнуйтесь, если они находятся
+ не на том же сайте, откуда взят дистрибутивный архив, мы умеем
+ обрабатывать такие ситуации (смотрите описание <link
+ linkend="porting-patchfiles">PATCHFILES</link> ниже).</para>
+ </sect1>
+
+ <sect1 xml:id="slow-modifying">
+ <title>Модификация порта</title>
+
+ <para>Распакуйте копию дистрибутивного файла в отдельный каталог
+ и внесите изменения, которые необходимы для того, чтобы порт
+ компилировался нормально в текущей версии &os;.
+ <emphasis>Тщательно отслеживайте</emphasis> все, что вы
+ делаете, этот процесс вам предстоит автоматизировать. Все,
+ включая удаление, добавление или модификацию в файлах должны
+ будут выполняться автоматически с помощью скриптов или файлов
+ патчей, когда вы завершите работу над портом.</para>
+
+ <para>Если вашему порту во время компиляции, установки и
+ настройки требуется довольно много взаимодействовать с
+ пользователем, то посмотрите на один из классических скриптов
+ <application>Configure</application> Лэрри Уолла (Larry Wall) и
+ сделайте сами что-либо подобное. Предназначение новой
+ коллекции портов - это сделать каждое приложение в стиле
+ <quote>plug-and-play</quote> настолько, насколько это вообще
+ возможно для конечного пользователя при минимальном
+ использовании дискового пространства.</para>
+
+ <note>
+ <para>Если явно не указано обратное, то патчи, скрипты и другие
+ файлы, которые вы создали и предоставили для Коллекции Портов
+ &os;, неявно подпадают под стандартные условия лицензии
+ BSD.</para>
+ </note>
+ </sect1>
+
+ <sect1 xml:id="slow-patch">
+ <title>Создание патчей</title>
+
+ <para>Файлы, которые добавлялись или изменялись в процессе
+ создания порта, могут быть выявлены программой &man.diff.1;, а
+ результат работы этой программы может быть в дальнейшем передан
+ программе &man.patch.1;. Такое действие с обычным файлом
+ подразумевает сохранение копии файла с первоначальным
+ содержимым перед внесением каких-либо изменений.</para>
+
+ <screen>&prompt.user; <userinput>cp <replaceable>file</replaceable> <replaceable>file</replaceable>.orig</userinput></screen>
+
+ <para>Патчи сохраняются в виде файлов с именем
+ <filename>patch-*</filename>, где <replaceable>*</replaceable>
+ обозначает путь к файлу, к которому применяется патч, такой как
+ <filename>patch-Imakefile</filename> или
+ <filename>patch-src-config.h</filename>.</para>
+
+ <para>После того как файл был изменён, используется &man.diff.1;
+ для получения разницы между первоначальной и изменённой
+ версиями. Параметр <option>-u</option> указывает &man.diff.1;
+ выводить разницу в <quote>унифицированном</quote> формате,
+ который также является предпочтительным.</para>
+
+ <screen>&prompt.user; <userinput>diff -u <replaceable>file</replaceable>.orig <replaceable>file</replaceable> &gt; patch-<replaceable>pathname-file</replaceable></userinput></screen>
+
+ <para>Для порождении патчей для новых добавляемых файлов
+ используется параметр <option>-N</option>, который заставляет
+ &man.diff.1; трактовать несуществующие прежде файлы как если бы
+ они существовали, но имели пустое содержимое:</para>
+
+ <screen>&prompt.user; <userinput>diff -u -N <replaceable>newfile</replaceable>.orig <replaceable>newfile</replaceable> &gt; patch-<replaceable>pathname-newfile</replaceable></userinput></screen>
+
+ <para>Файлы с патчами помещаются в каталоге
+ <varname>PATCHDIR</varname> (как правило, это <filename
+ class="directory">files/</filename>), откуда они будут взяты
+ автоматически. Все патчи обязаны быть сделаны относительно
+ каталога <varname>WRKSRC</varname> (как правило, это каталог, в
+ который распаковывается исходный архив и где будет выполняться
+ построение). Для упрощения внесения изменений и обновлений
+ избегайте наличия более чем одного патча для одного и того же
+ файла (например, патчей <filename>patch-file</filename> и
+ <filename>patch-file2</filename>, оба меняющих файл
+ <filename>WRKSRC/foobar.c</filename>). Обратите внимание, что
+ если путь к изменяемому файлу содержит символ подчеркивания
+ (<literal>_</literal>), то патч должен содержать в своем имени
+ два подчеркивания вместо одного. Например, для применения
+ патча на файл с именем
+ <filename>src/freeglut_joystick.c</filename> соответствующий
+ патч следует назвать
+ <filename>patch-src-freeglut__joystick.c</filename>.</para>
+
+ <para>Пожалуйста, используйте для именования патчей только
+ символы <literal>[-+._a-zA-Z0-9]</literal>. Не используйте
+ любые другие символы, кроме этих. Не называйте патчи как
+ <filename>patch-aa</filename> или
+ <filename>patch-ab</filename>, всегда ссылайтесь на путь и
+ название файла в названиях самих патчей.</para>
+
+ <para>Существует альтернативный упрощённый способ создания патчей
+ для существующих файлов. Первые шаги те же самые: создание
+ копии неизменённого файла с расширением
+ <filename>.orig</filename> и внесение изменений. После этого
+ используйте <command>make makepatch</command>, чтобы обновить
+ файлы с патчами в каталоге <filename>files</filename> данного
+ порта.</para>
+
+ <para>Не помещайте строки RCS в патчи.
+ <application>Subversion</application> будет изменять их при
+ помещении файлов в дерево портов, и когда мы будем их оттуда
+ извлекать, они будут уже другие, поэтому применение патчей
+ окончится неудачей. Строчки RCS предваряются знаком доллара
+ (<literal>&dollar;</literal>), и обычно начинаются с
+ <literal>&dollar;Id</literal> или
+ <literal>&dollar;RCS</literal>.</para>
+
+ <para>Использование параметра рекурсии (<option>-r</option>) с
+ командой &man.diff.1; для генерации патчей - это хорошо, но всё
+ же, пожалуйста, смотрите на получающиеся патчи, чтобы убедиться
+ в отсутствии ненужного мусора. В частности, diff-разниц между
+ двумя резервными копиями файлов, файлы
+ <filename>Makefile</filename>, когда как порт использует
+ <command>Imake</command> или GNU-версию программы
+ <command>configure</command>, и так далее, не нужны, и должны
+ быть удалены. Если было необходимо отредактировать файл
+ <filename>configure.in</filename> и запустить
+ <command>autoconf</command> для перегенерации
+ <command>configure</command>, не нужно включать файлы diff для
+ <command>configure</command> (они частенько вырастают до
+ нескольких тысяч строк!). Вместо этого задайте
+ <literal>USE_AUTOTOOLS=autoconf:261</literal> и включите
+ diff-файл для <filename>configure.in</filename>.</para>
+
+ <para>Старайтесь минимизировать в патчах объём нефункциональных
+ изменений с пустыми символами. В мире Открытого Исходного Кода
+ является распространенным совместное использование проектами
+ больших объемов кодовой базы, но с различными стилями и
+ правилами отступов. При копировании работающей функциональной
+ части из одного проекта для исправления похожей области в
+ другом, будьте аккуратны, пожалуйста: получаемый однострочный
+ патч может указаться полон нефункциональных изменений. Это не
+ только увеличивает размер репозитория
+ <application>Subversion</application>, но также усложняет поиск
+ того, что конкретно вызвало проблему и что вообще
+ поменялось.</para>
+
+ <para>Если нужно удалить файл, сделайте это при выполнении цели
+ <buildtarget>post-extract</buildtarget>, вместо того чтобы
+ оформлять это как часть патча.</para>
+
+ <para>Простые перемещения могут быть выполнены непосредственно из
+ <filename>Makefile</filename> порта с использованием
+ &man.sed.1; в режиме in-place. Это удобно, когда при изменении
+ используется значение переменной:</para>
+
+ <programlisting>post-patch:
@${REINPLACE_CMD} -e 's|for Linux|for FreeBSD|g' ${WRKSRC}/README</programlisting>
- <para>Довольно часто в исходных файлах портируемого программного
- обеспечения используется конвенция CR/LF. Это может стать
- причиной проблем с дальнейшей упаковкой, предупреждениями
- компилятора или выполнением скриптов (таких как
- <literal>/bin/sh^M not found</literal>). Для быстрого
- преобразования всех файлов из CR/LF просто в LF добавьте
- в <filename>Makefile</filename> порта эту запись:</para>
+ <para>Довольно часто в исходных файлах портируемого программного
+ обеспечения используется конвенция CR/LF. Это может стать
+ причиной проблем с дальнейшей упаковкой, предупреждениями
+ компилятора или выполнением скриптов (таких как
+ <literal>/bin/sh^M not found</literal>). Для быстрого
+ преобразования всех файлов из CR/LF просто в LF добавьте в
+ <filename>Makefile</filename> порта эту запись:</para>
- <programlisting>USES= dos2unix</programlisting>
+ <programlisting>USES= dos2unix</programlisting>
- <para>Может быть задан точный список преобразуемых файлов:</para>
+ <para>Может быть задан точный список преобразуемых файлов:</para>
- <programlisting>USES= dos2unix
+ <programlisting>USES= dos2unix
DOS2UNIX_FILES= util.c util.h</programlisting>
- <para>Используйте <varname>DOS2UNIX_REGEX</varname>, чтобы
- преобразовать группу файлов в разных подкаталогах.
- Его параметром является регулярное выражение, совместимое с
- &man.find.1;. Подробнее о формате в &man.re.format.7;.
- Такой вариант удобен для преобразования всех файлов заданного
- расширения. Для примера, преобразуем все исходные файлы,
- не затрагивая двоичные файлы:</para>
+ <para>Используйте <varname>DOS2UNIX_REGEX</varname>, чтобы
+ преобразовать группу файлов в разных подкаталогах. Его
+ параметром является регулярное выражение, совместимое с
+ &man.find.1;. Подробнее о формате в &man.re.format.7;. Такой
+ вариант удобен для преобразования всех файлов заданного
+ расширения. Для примера, преобразуем все исходные файлы, не
+ затрагивая двоичные файлы:</para>
- <programlisting>USES= dos2unix
+ <programlisting>USES= dos2unix
DOS2UNIX_REGEX= .*\.([ch]|cpp)</programlisting>
- <para>Другим вариантом является использование
- <varname>DOS2UNIX_GLOB</varname>, который вызывает
- <command>find</command> для каждого из перечисленных в нём
- элементов.</para>
+ <para>Другим вариантом является использование
+ <varname>DOS2UNIX_GLOB</varname>, который вызывает
+ <command>find</command> для каждого из перечисленных в нём
+ элементов.</para>
- <programlisting>USES= dos2unix
+ <programlisting>USES= dos2unix
DOS2UNIX_GLOB= *.c *.cpp *.h</programlisting>
- </sect1>
-
- <sect1 xml:id="slow-configure">
- <title>Конфигурирование</title>
-
- <para>Поместите все дополнительные команды, требуемые для настройки,
- в ваш скрипт <filename>configure</filename> и сохраните его в
- подкаталоге <filename>scripts</filename>. Как отмечено выше, вы
- можете сделать это целями в файле <filename>Makefile</filename>
- и/или скриптами с именами <filename>pre-configure</filename> или
- <filename>post-configure</filename>.</para>
- </sect1>
-
- <sect1 xml:id="slow-user-input">
- <title>Обработка пользовательского ввода</title>
-
- <para>Если для построения, конфигурации или установки вашего порта
- требуется некоторый ввод со стороны пользователя, то вы должны задать
- переменную <varname>IS_INTERACTIVE</varname> в вашем файле
- <filename>Makefile</filename>. В случае <quote>ночного
- построения</quote> это позволит пропустить
- ваш порт, если пользователь в своем окружении задал переменную
- <envar>BATCH</envar> (и если пользователь установил переменную
- <envar>INTERACTIVE</envar>, то будут строиться
- <emphasis>только</emphasis> порты, которые требуют взаимодействия
- с пользователем. Это сэкономит значительное количество времени на
- части машин, которые постоянно строят порты (смотрите ниже).</para>
-
- <para>При наличии разумных ответов на задаваемые вопросы, подходящих по
- умолчанию, также рекомендуется проверять переменную
- <varname>PACKAGE_BUILDING</varname> и выключать интерактивный скрипт,
- если он есть. Это позволит нам строить пакеты для помещения на
- компакт-диски и FTP-серверы.</para>
- </sect1>
- </chapter>
-
+ </sect1>
+
+ <sect1 xml:id="slow-configure">
+ <title>Конфигурирование</title>
+
+ <para>Поместите все дополнительные команды, требуемые для
+ настройки, в ваш скрипт <filename>configure</filename> и
+ сохраните его в подкаталоге <filename>scripts</filename>. Как
+ отмечено выше, вы можете сделать это целями в файле
+ <filename>Makefile</filename> и/или скриптами с именами
+ <filename>pre-configure</filename> или
+ <filename>post-configure</filename>.</para>
+ </sect1>
+
+ <sect1 xml:id="slow-user-input">
+ <title>Обработка пользовательского ввода</title>
+
+ <para>Если для построения, конфигурации или установки вашего
+ порта требуется некоторый ввод со стороны пользователя, то вы
+ должны задать переменную <varname>IS_INTERACTIVE</varname> в
+ вашем файле <filename>Makefile</filename>. В случае
+ <quote>ночного построения</quote> это позволит пропустить ваш
+ порт, если пользователь в своем окружении задал переменную
+ <envar>BATCH</envar> (и если пользователь установил переменную
+ <envar>INTERACTIVE</envar>, то будут строиться
+ <emphasis>только</emphasis> порты, которые требуют
+ взаимодействия с пользователем. Это сэкономит значительное
+ количество времени на части машин, которые постоянно строят
+ порты (смотрите ниже).</para>
+
+ <para>При наличии разумных ответов на задаваемые вопросы,
+ подходящих по умолчанию, также рекомендуется проверять
+ переменную <varname>PACKAGE_BUILDING</varname> и выключать
+ интерактивный скрипт, если он есть. Это позволит нам строить
+ пакеты для помещения на компакт-диски и FTP-серверы.</para>
+ </sect1>
+</chapter>
diff --git a/ru_RU.KOI8-R/books/porters-handbook/special/chapter.xml b/ru_RU.KOI8-R/books/porters-handbook/special/chapter.xml
index 5e1ce3a36f..db94a53010 100644
--- a/ru_RU.KOI8-R/books/porters-handbook/special/chapter.xml
+++ b/ru_RU.KOI8-R/books/porters-handbook/special/chapter.xml
@@ -7,1141 +7,1166 @@
Original revision: r43840
-->
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="special">
-
- <title>Особые соглашения</title>
-
- <para>Имеется ещё несколько вещей, которые вы должны иметь в виду при
- создании порта. Этот раздел описывает наиболее часто встречающиеся из
- них.</para>
-
- <sect1 xml:id="staging">
- <title>Staging</title>
-
- <para><filename>bsd.port.mk</filename> ожидает от портов работу
- с <quote>каталогом сборки</quote>. Это означает, что порт
- должен устанавливать файлы не напрямую в назначенные каталоги
- (то есть, например, под <varname>PREFIX</varname>), а в
- отдельный каталог, из которого затем собирается пакет.
- Во многих случаях привилегии root для этого не требуются,
- что делает возможным сборку пакетов из-под непривилегированного
- пользователя. В режиме staging порт собирается и устанавливается
- в каталог сборки <varname>STAGEDIR</varname>. Пакет создается
- из каталога сборки и затем устанавливается в систему.
- В инструментарии automake такая концепция именуется
- <varname>DESTDIR</varname>; в прочем, в &os;
- <varname>DESTDIR</varname> имеет собственное значение
- (смотрите <xref linkend="porting-prefix"/>).</para>
-
- <para>Если для порта всё ещё требуются системные привилегии при
- выполнении цели <buildtarget>package</buildtarget>, то в
- <filename>Makefile</filename> должна быть добавлена следующая
- строка:</para>
-
- <programlisting>NEED_ROOT= yes</programlisting>
-
- <para>Метапорты, то есть порты, которые не устанавливают файлы
- непосредственно, а только зависят от других портов, должны
- по возможности избегать распаковки &man.mtree.8; в каталог
- сборки. Это основная иерархия каталогов пакета, и эти пустые
- каталоги будут выглядеть лишними. Для предотвращения
- распаковки &man.mtree.8; добавьте эту строку:</para>
-
- <programlisting>NO_MTREE= yes</programlisting>
-
- <para>Staging задействуется посредством добавления переменной
- <varname>STAGEDIR</varname> слева от путей, которые используются
- в целях <buildtarget>pre-install</buildtarget>,
- <buildtarget>do-install</buildtarget> и
- <buildtarget>post-install</buildtarget> (смотрите примеры
- в книге). Обычно сюда относятся
- <varname>PREFIX</varname>, <varname>ETCDIR</varname>,
- <varname>DATADIR</varname>, <varname>EXAMPLESDIR</varname>,
- <varname>MANPREFIX</varname>, <varname>DOCSDIR</varname> и
- так далее. Каталоги должны создаваться при выполнении цели
- <buildtarget>post-install</buildtarget>. Избегайте
- использования абсолютных путей, когда это возможно.</para>
-
- <para>При создании символический ссылки <varname>STAGEDIR</varname>
- должен ставиться только для пути назначения. Например:</para>
-
- <programlisting>${LN} -sf libfoo.so.42 ${STAGEDIR}${PREFIX}/lib/libfoo.so</programlisting>
-
- <para>Первоначальный путь
- <filename>${PREFIX}/lib/libfoo.so.42</filename> выглядит
- нормально, но по факту может быть неправильным. Абсолютные
- пути могут указывать на неподходящее место, например, когда
- удалённая файловая система смонтирована по
- <acronym>NFS</acronym> как непривилегированная точка
- монтирования. Относительные пути реже подвержены проблемам
- и часто намного короче.</para>
-
- <para>Порты, устанавливающие модули ядра, должны предварять путь
- установки (по умолчанию <filename>/boot/modules</filename>)
- переменной <varname>STAGEDIR</varname>.</para>
- </sect1>
-
- <sect1 xml:id="porting-shlibs">
- <title>Динамические библиотеки</title>
-
- <para>Если ваш порт устанавливает одну или несколько динамических
- библиотек, определите переменную <varname>USE_LDCONFIG</varname>,
- которая приведёт к запуску из <filename>bsd.port.mk</filename> команды
- <literal>&dollar;{LDCONFIG} -m</literal> относительно каталога, в
- который устанавливается новая библиотека (как правило, это
- <filename>PREFIX/lib</filename>), во время
- выполнения цели <buildtarget>post-install</buildtarget> для её
- регистрации в кэше динамических библиотек. Эта переменная, если она
- определена, также приведёт к добавлению соответствующей пары команд
- <literal>@exec /sbin/ldconfig -m</literal> и
- <literal>@unexec /sbin/ldconfig -R</literal> в ваш файл
- <filename>pkg-plist</filename>, так что пользователь, устанавливающий
- пакет, сможет сразу же использовать динамическую библиотеку, а
- удаление пакета не приведёт к тому, что система будет предполагать,
- что библиотека всё ещё имеется в наличии.</para>
-
- <programlisting>USE_LDCONFIG= yes</programlisting>
-
- <para>Если нужно, вы можете переопределить каталог по умолчанию,
- задав значение
- <varname>USE_LDCONFIG</varname>, в котором должны быть перечислены
- каталоги, в которые устанавливаются динамические библиотеки. Например,
- если ваш порт устанавливает динамические библиотеки в каталоги
- <filename>PREFIX/lib/foo</filename> и
- <filename>PREFIX/lib/bar</filename>, то вы можете в
- файле <filename>Makefile</filename> указать следующее:</para>
-
- <programlisting>USE_LDCONFIG= ${PREFIX}/lib/foo ${PREFIX}/lib/bar</programlisting>
-
- <para>Будьте
- добры перепроверить, т.к. часто это вовсе не является необходимым
- и может быть решено иначе с помощью <literal>-rpath</literal>
- или установки <envar>LD_RUN_PATH</envar> во время компоновки (для
- примера смотрите <package role="port">lang/moscow_ml</package>),
- или с помощью сценария-обёртки, который выставляет
- <varname>LD_LIBRARY_PATH</varname> перед запуском исполняемого файла
- как это делает <package role="port">www/seamonkey</package>.</para>
-
- <para>При установке 32-разрядных библиотек на 64-разрядной системе
- используйте вместо этого <varname>USE_LDCONFIG32</varname>.</para>
-
- <para>Постарайтесь сохранять номера версий динамических библиотек
- в формате <filename>libfoo.so.0</filename>. Наш компоновщик
- позаботится только о старшем (первом) номере.</para>
-
- <para>Если при обновлении порта увеличивается старший номер версии
- библиотеки, то для всех портов, компонуемых с затронутой библиотекой,
- следует увеличить значение <varname>PORTREVISION</varname> для
- форсирования перекомпиляции с новой версией библиотеки.</para>
-
- </sect1>
-
- <sect1 xml:id="porting-restrictions">
- <title>Порты с ограничениями на распространение или с
- правовым обременением</title>
-
- <para>Лицензии бывают разных видов, и некоторые накладывают ограничение
- на то, как приложение может быть оформлено в виде пакета, может ли
- оно продаваться для извлечения коммерческой выгоды, и так далее.</para>
-
- <important>
- <para>На вас, как на человека, портирующего приложение, ложится
- обязанность прочесть лицензионные соглашения на программное
- обеспечение и удостовериться, что проект &os; не будет являться
- их нарушителем, если будет заниматься распространением исходного
- кода или в бинарном виде по FTP/HTTP или на CD-ROM. Если
- у вас возникли сомнения, то, пожалуйста, обратитесь в
- &a.ports;.</para>
- </important>
-
- <para>В подобных ситуациях можно использовать переменные, описываемые в
- последующих разделах.</para>
-
- <sect2>
- <title><varname>NO_PACKAGE</varname></title>
-
- <para>Эта переменная указывает, что мы не можем создавать для
- приложения двоичный пакет. К примеру, лицензия не позволяет
- бинарное распространение или она может запрещать распространение
- пакетов, созданных из изменённых исходников.</para>
-
- <para>Однако файлы <varname>DISTFILES</varname> могут свободно
- зеркалироваться по FTP/HTTP. Они также могут распространяться,
- используя CD-ROM (или на похожих носителях), если не установлена
- переменная <varname>NO_CDROM</varname>.</para>
-
- <para><varname>NO_PACKAGE</varname> должна также использоваться, если
- двоичный пакет, как правило, бесполезен, а приложение должно всегда
- компилироваться из исходного кода. К примеру, если в приложение
- во время компиляции жёстко включается конфигурационная информация,
- привязанная к конкретной системе, то задайте переменную
- <varname>NO_PACKAGE</varname>.</para>
-
- <para>Значением переменной <varname>NO_PACKAGE</varname> должна быть
- строка, описывающая причину, по которой пакет не должен
- создаваться.</para>
- </sect2>
-
- <sect2>
- <title><varname>NO_CDROM</varname></title>
-
- <para>Эта переменная указывает на то, что, хотя мы имеем право
- создавать бинарные пакеты, мы не можем помещать эти пакеты или
- файлы <varname>DISTFILES</varname> порта на CD-ROM (или на похожие носители) для
- перепродажи. Однако бинарные пакеты и файлы
- <varname>DISTFILES</varname> порта будут оставаться
- доступными посредством FTP/HTTP.</para>
-
- <para>Если эта переменная устанавливается вместе с
- <varname>NO_PACKAGE</varname>, то только файлы порта
- <varname>DISTFILES</varname> будут доступны, и только посредством
- FTP/HTTP.</para>
-
- <para>В качестве значения <varname>NO_CDROM</varname> должна
- указываться строка, описывающая причины, по которым порт не может
- распространяться на CD-ROM. К примеру, это применяется, если
- лицензионное соглашение приложения предполагает только его
- <quote>некоммерческое</quote> использование.</para>
- </sect2>
-
- <sect2>
- <title><varname>NOFETCHFILES</varname></title>
-
- <para>Файлы, определенные в переменной <varname>NOFETCHFILES</varname>,
- не будут извлекаться ни из одного из <varname>MASTER_SITES</varname>.
- Примером такого файла является файл, поставляемый на CD-ROM.</para>
-
- <para>Инструменты, проверяющие доступность этих файлов на
- <varname>MASTER_SITES</varname>, должны игнорировать эти файлы и
- не сообщать о них.</para>
- </sect2>
-
- <sect2>
- <title><varname>RESTRICTED</varname></title>
-
- <para>Задайте эту переменную, если лицензия на приложение не позволяет
- ни зеркалировать файлы <varname>DISTFILES</varname>, ни распространять
- бинарный пакет через FTP/HTTP или на CD-ROM.</para>
-
- <para>Ни <varname>NO_CDROM</varname>, ни <varname>NO_PACKAGE</varname>
- не стоит устанавливать вместе с <varname>RESTRICTED</varname>, так
- как последняя переменная подразумевает первые две.</para>
-
- <para>В качестве значения <varname>RESTRICTED</varname> должна
- указываться строка, описывающая причины, по которым порт нельзя
- распространять. Обычно это означает, что порт использует закрытое
- программное обеспечение, а пользователь должен вручную сгрузить файлы
- <varname>DISTFILES</varname>, возможно, после заполнения
- регистрационной формы или подтверждения соглашения с условиями
- <acronym>EULA</acronym>.</para>
- </sect2>
-
- <sect2>
- <title><varname>RESTRICTED_FILES</varname></title>
-
- <para>Если заданы <varname>RESTRICTED</varname> или
- <varname>NO_CDROM</varname>, то значение этой переменной по умолчанию
- соответствует <literal>${DISTFILES} ${PATCHFILES}</literal>, в
- противном случае она пуста. Если ограничены в распространении лишь
- некоторые из дистрибутивных файлов, то в этой переменной задаётся их
- список.</para>
- </sect2>
-
- <sect2>
- <title><varname>LEGAL_TEXT</varname></title>
-
- <para>Если порт имеет правовое обременение, которое не
- покрывается перечисленными выше переменными, то переменной
- <varname>LEGAL_TEXT</varname> следует присвоить строку с
- описанием данного обременения. Например, если было получено
- особое разрешение для &os; на распространение двоичного
- файла, то эта переменная должна содержать соответствующее
- указание.</para>
- </sect2>
-
- <sect2>
- <title><filename>/usr/ports/LEGAL</filename> и
- <varname>LEGAL</varname></title>
-
- <para>Порт, содержащий любую из перечисленных выше переменных,
- также должен быть добавлен в <filename>/usr/ports/LEGAL</filename>.
- Первый столбец содержит шаблон совпадения с дистрибутивными
- файлами, имеющими ограничения на распространение. Второй
- столбец содержит корень порта. Третий столбец содержит
- вывод <command>make -VLEGAL</command>.</para>
- </sect2>
-
- <sect2>
- <title>Примеры использования</title>
-
- <para>Предпочтительным способом реализации утверждения "архивы
- исходных текстов для этого порта должны загружаться самостоятельно"
- является следующее:</para>
-
- <programlisting>.if !exists(${DISTDIR}/${DISTNAME}${EXTRACT_SUFX})
-IGNORE= may not be redistributed because of licensing reasons. Please visit <replaceable>some-website</replaceable> to accept their license and download ${DISTFILES} into ${DISTDIR}
+<chapter xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
+ xml:id="special">
+
+ <title>Особые соглашения</title>
+
+ <para>Имеется ещё несколько вещей, которые вы должны иметь в виду
+ при создании порта. Этот раздел описывает наиболее часто
+ встречающиеся из них.</para>
+
+ <sect1 xml:id="staging">
+ <title>Staging</title>
+
+ <para><filename>bsd.port.mk</filename> ожидает от портов работу с
+ <quote>каталогом сборки</quote>. Это означает, что порт должен
+ устанавливать файлы не напрямую в назначенные каталоги (то
+ есть, например, под <varname>PREFIX</varname>), а в отдельный
+ каталог, из которого затем собирается пакет. Во многих случаях
+ привилегии root для этого не требуются, что делает возможным
+ сборку пакетов из-под непривилегированного пользователя. В
+ режиме staging порт собирается и устанавливается в каталог
+ сборки <varname>STAGEDIR</varname>. Пакет создается из
+ каталога сборки и затем устанавливается в систему. В
+ инструментарии automake такая концепция именуется
+ <varname>DESTDIR</varname>; в прочем, в &os;
+ <varname>DESTDIR</varname> имеет собственное значение (смотрите
+ <xref linkend="porting-prefix"/>).</para>
+
+ <para>Если для порта всё ещё требуются системные привилегии при
+ выполнении цели <buildtarget>package</buildtarget>, то в
+ <filename>Makefile</filename> должна быть добавлена следующая
+ строка:</para>
+
+ <programlisting>NEED_ROOT= yes</programlisting>
+
+ <para>Метапорты, то есть порты, которые не устанавливают файлы
+ непосредственно, а только зависят от других портов, должны по
+ возможности избегать распаковки &man.mtree.8; в каталог сборки.
+ Это основная иерархия каталогов пакета, и эти пустые каталоги
+ будут выглядеть лишними. Для предотвращения распаковки
+ &man.mtree.8; добавьте эту строку:</para>
+
+ <programlisting>NO_MTREE= yes</programlisting>
+
+ <para>Staging задействуется посредством добавления переменной
+ <varname>STAGEDIR</varname> слева от путей, которые
+ используются в целях <buildtarget>pre-install</buildtarget>,
+ <buildtarget>do-install</buildtarget> и
+ <buildtarget>post-install</buildtarget> (смотрите примеры в
+ книге). Обычно сюда относятся <varname>PREFIX</varname>,
+ <varname>ETCDIR</varname>, <varname>DATADIR</varname>,
+ <varname>EXAMPLESDIR</varname>, <varname>MANPREFIX</varname>,
+ <varname>DOCSDIR</varname> и так далее. Каталоги должны
+ создаваться при выполнении цели
+ <buildtarget>post-install</buildtarget>. Избегайте
+ использования абсолютных путей, когда это возможно.</para>
+
+ <para>При создании символический ссылки
+ <varname>STAGEDIR</varname> должен ставиться только для пути
+ назначения. Например:</para>
+
+ <programlisting>${LN} -sf libfoo.so.42 ${STAGEDIR}${PREFIX}/lib/libfoo.so</programlisting>
+
+ <para>Первоначальный путь
+ <filename>${PREFIX}/lib/libfoo.so.42</filename> выглядит
+ нормально, но по факту может быть неправильным. Абсолютные
+ пути могут указывать на неподходящее место, например, когда
+ удалённая файловая система смонтирована по
+ <acronym>NFS</acronym> как непривилегированная точка
+ монтирования. Относительные пути реже подвержены проблемам и
+ часто намного короче.</para>
+
+ <para>Порты, устанавливающие модули ядра, должны предварять путь
+ установки (по умолчанию <filename>/boot/modules</filename>)
+ переменной <varname>STAGEDIR</varname>.</para>
+ </sect1>
+
+ <sect1 xml:id="porting-shlibs">
+ <title>Динамические библиотеки</title>
+
+ <para>Если ваш порт устанавливает одну или несколько динамических
+ библиотек, определите переменную
+ <varname>USE_LDCONFIG</varname>, которая приведёт к запуску из
+ <filename>bsd.port.mk</filename> команды
+ <literal>&dollar;{LDCONFIG} -m</literal> относительно каталога,
+ в который устанавливается новая библиотека (как правило, это
+ <filename>PREFIX/lib</filename>), во время выполнения цели
+ <buildtarget>post-install</buildtarget> для её регистрации в
+ кэше динамических библиотек. Эта переменная, если она
+ определена, также приведёт к добавлению соответствующей пары
+ команд <literal>@exec /sbin/ldconfig -m</literal> и
+ <literal>@unexec /sbin/ldconfig -R</literal> в ваш файл
+ <filename>pkg-plist</filename>, так что пользователь,
+ устанавливающий пакет, сможет сразу же использовать
+ динамическую библиотеку, а удаление пакета не приведёт к тому,
+ что система будет предполагать, что библиотека всё ещё имеется
+ в наличии.</para>
+
+ <programlisting>USE_LDCONFIG= yes</programlisting>
+
+ <para>Если нужно, вы можете переопределить каталог по умолчанию,
+ задав значение <varname>USE_LDCONFIG</varname>, в котором
+ должны быть перечислены каталоги, в которые устанавливаются
+ динамические библиотеки. Например, если ваш порт устанавливает
+ динамические библиотеки в каталоги
+ <filename>PREFIX/lib/foo</filename> и
+ <filename>PREFIX/lib/bar</filename>, то вы можете в файле
+ <filename>Makefile</filename> указать следующее:</para>
+
+ <programlisting>USE_LDCONFIG= ${PREFIX}/lib/foo ${PREFIX}/lib/bar</programlisting>
+
+ <para>Будьте добры перепроверить, т.к. часто это вовсе не
+ является необходимым и может быть решено иначе с помощью
+ <literal>-rpath</literal> или установки
+ <envar>LD_RUN_PATH</envar> во время компоновки (для примера
+ смотрите <package role="port">lang/moscow_ml</package>), или с
+ помощью сценария-обёртки, который выставляет
+ <varname>LD_LIBRARY_PATH</varname> перед запуском исполняемого
+ файла как это делает <package
+ role="port">www/seamonkey</package>.</para>
+
+ <para>При установке 32-разрядных библиотек на 64-разрядной
+ системе используйте вместо этого
+ <varname>USE_LDCONFIG32</varname>.</para>
+
+ <para>Постарайтесь сохранять номера версий динамических библиотек
+ в формате <filename>libfoo.so.0</filename>. Наш компоновщик
+ позаботится только о старшем (первом) номере.</para>
+
+ <para>Если при обновлении порта увеличивается старший номер
+ версии библиотеки, то для всех портов, компонуемых с затронутой
+ библиотекой, следует увеличить значение
+ <varname>PORTREVISION</varname> для форсирования перекомпиляции
+ с новой версией библиотеки.</para>
+ </sect1>
+
+ <sect1 xml:id="porting-restrictions">
+ <title>Порты с ограничениями на распространение или с правовым
+ обременением</title>
+
+ <para>Лицензии бывают разных видов, и некоторые накладывают
+ ограничение на то, как приложение может быть оформлено в виде
+ пакета, может ли оно продаваться для извлечения коммерческой
+ выгоды, и так далее.</para>
+
+ <important>
+ <para>На вас, как на человека, портирующего приложение, ложится
+ обязанность прочесть лицензионные соглашения на программное
+ обеспечение и удостовериться, что проект &os; не будет
+ являться их нарушителем, если будет заниматься
+ распространением исходного кода или в бинарном виде по
+ FTP/HTTP или на CD-ROM. Если у вас возникли сомнения, то,
+ пожалуйста, обратитесь в &a.ports;.</para>
+ </important>
+
+ <para>В подобных ситуациях можно использовать переменные,
+ описываемые в последующих разделах.</para>
+
+ <sect2>
+ <title><varname>NO_PACKAGE</varname></title>
+
+ <para>Эта переменная указывает, что мы не можем создавать для
+ приложения двоичный пакет. К примеру, лицензия не позволяет
+ бинарное распространение или она может запрещать
+ распространение пакетов, созданных из изменённых
+ исходников.</para>
+
+ <para>Однако файлы <varname>DISTFILES</varname> могут свободно
+ зеркалироваться по FTP/HTTP. Они также могут
+ распространяться, используя CD-ROM (или на похожих
+ носителях), если не установлена переменная
+ <varname>NO_CDROM</varname>.</para>
+
+ <para><varname>NO_PACKAGE</varname> должна также
+ использоваться, если двоичный пакет, как правило, бесполезен,
+ а приложение должно всегда компилироваться из исходного кода.
+ К примеру, если в приложение во время компиляции жёстко
+ включается конфигурационная информация, привязанная к
+ конкретной системе, то задайте переменную
+ <varname>NO_PACKAGE</varname>.</para>
+
+ <para>Значением переменной <varname>NO_PACKAGE</varname> должна
+ быть строка, описывающая причину, по которой пакет не должен
+ создаваться.</para>
+ </sect2>
+
+ <sect2>
+ <title><varname>NO_CDROM</varname></title>
+
+ <para>Эта переменная указывает на то, что, хотя мы имеем право
+ создавать бинарные пакеты, мы не можем помещать эти пакеты
+ или файлы <varname>DISTFILES</varname> порта на CD-ROM (или
+ на похожие носители) для перепродажи. Однако бинарные пакеты
+ и файлы <varname>DISTFILES</varname> порта будут оставаться
+ доступными посредством FTP/HTTP.</para>
+
+ <para>Если эта переменная устанавливается вместе с
+ <varname>NO_PACKAGE</varname>, то только файлы порта
+ <varname>DISTFILES</varname> будут доступны, и только
+ посредством FTP/HTTP.</para>
+
+ <para>В качестве значения <varname>NO_CDROM</varname> должна
+ указываться строка, описывающая причины, по которым порт не
+ может распространяться на CD-ROM. К примеру, это
+ применяется, если лицензионное соглашение приложения
+ предполагает только его <quote>некоммерческое</quote>
+ использование.</para>
+ </sect2>
+
+ <sect2>
+ <title><varname>NOFETCHFILES</varname></title>
+
+ <para>Файлы, определенные в переменной
+ <varname>NOFETCHFILES</varname>, не будут извлекаться ни из
+ одного из <varname>MASTER_SITES</varname>. Примером такого
+ файла является файл, поставляемый на CD-ROM.</para>
+
+ <para>Инструменты, проверяющие доступность этих файлов на
+ <varname>MASTER_SITES</varname>, должны игнорировать эти
+ файлы и не сообщать о них.</para>
+ </sect2>
+
+ <sect2>
+ <title><varname>RESTRICTED</varname></title>
+
+ <para>Задайте эту переменную, если лицензия на приложение не
+ позволяет ни зеркалировать файлы
+ <varname>DISTFILES</varname>, ни распространять бинарный
+ пакет через FTP/HTTP или на CD-ROM.</para>
+
+ <para>Ни <varname>NO_CDROM</varname>, ни
+ <varname>NO_PACKAGE</varname> не стоит устанавливать вместе с
+ <varname>RESTRICTED</varname>, так как последняя переменная
+ подразумевает первые две.</para>
+
+ <para>В качестве значения <varname>RESTRICTED</varname> должна
+ указываться строка, описывающая причины, по которым порт
+ нельзя распространять. Обычно это означает, что порт
+ использует закрытое программное обеспечение, а пользователь
+ должен вручную сгрузить файлы <varname>DISTFILES</varname>,
+ возможно, после заполнения регистрационной формы или
+ подтверждения соглашения с условиями
+ <acronym>EULA</acronym>.</para>
+ </sect2>
+
+ <sect2>
+ <title><varname>RESTRICTED_FILES</varname></title>
+
+ <para>Если заданы <varname>RESTRICTED</varname> или
+ <varname>NO_CDROM</varname>, то значение этой переменной по
+ умолчанию соответствует <literal>${DISTFILES}
+ ${PATCHFILES}</literal>, в противном случае она пуста.
+ Если ограничены в распространении лишь некоторые из
+ дистрибутивных файлов, то в этой переменной задаётся их
+ список.</para>
+ </sect2>
+
+ <sect2>
+ <title><varname>LEGAL_TEXT</varname></title>
+
+ <para>Если порт имеет правовое обременение, которое не
+ покрывается перечисленными выше переменными, то переменной
+ <varname>LEGAL_TEXT</varname> следует присвоить строку с
+ описанием данного обременения. Например, если было получено
+ особое разрешение для &os; на распространение двоичного
+ файла, то эта переменная должна содержать соответствующее
+ указание.</para>
+ </sect2>
+
+ <sect2>
+ <title><filename>/usr/ports/LEGAL</filename> и
+ <varname>LEGAL</varname></title>
+
+ <para>Порт, содержащий любую из перечисленных выше переменных,
+ также должен быть добавлен в
+ <filename>/usr/ports/LEGAL</filename>. Первый столбец
+ содержит шаблон совпадения с дистрибутивными файлами,
+ имеющими ограничения на распространение. Второй столбец
+ содержит корень порта. Третий столбец содержит вывод
+ <command>make -VLEGAL</command>.</para>
+ </sect2>
+
+ <sect2>
+ <title>Примеры использования</title>
+
+ <para>Предпочтительным способом реализации утверждения "архивы
+ исходных текстов для этого порта должны загружаться
+ самостоятельно" является следующее:</para>
+
+ <programlisting>.if !exists(${DISTDIR}/${DISTNAME}${EXTRACT_SUFX})
+IGNORE= may not be redistributed because of licensing reasons. Please visit <replaceable>some-website</replaceable> to accept their license and download ${DISTFILES} into ${DISTDIR}
.endif</programlisting>
- <para>Это одновременно и информирует пользователя, и устанавливает
- нужные метаданные на пользовательской машине для использования
- автоматическими программами.</para>
-
- <para>Обратите внимание, что данная кляуза должна предшествовать
- подключению файла <filename>bsd.port.pre.mk</filename>.</para>
- </sect2>
- </sect1>
-
- <sect1 xml:id="building">
- <title>Механизмы построения</title>
-
- <sect2 xml:id="parallel-builds">
- <title>Параллельное построение портов</title>
-
- <para>Инфраструктура портов &os; поддерживает параллельное
- построение с использованием множественных подпроцессов
- <command>make</command>, что позволяет системам
- <acronym>SMP</acronym> задействовать всю доступную мощность
- <acronym>CPU</acronym>, тем самым делая построение портов более
- быстрым и эффективным.</para>
-
- <para>Это достигается путём передачи флага <varname>-jX</varname>
- команде &man.make.1;. Такое построение портов является
- поведением по умолчанию. К сожалению, не все порты поддерживают
- параллельную сборку достаточно хорошо, и поэтому может
- потребоваться выключить этот механизм явным образом путём
- добавления переменной <literal>MAKE_JOBS_UNSAFE=yes</literal>.
- Эта переменная используется в случае, когда известно, что порт
- ломается с <varname>-jX</varname>.</para>
- </sect2>
-
- <sect2 xml:id="using-make">
- <title><command>make</command>, <command>gmake</command> и
- <command>imake</command></title>
-
- <para>Если ваш порт использует <application>GNU make</application>,
- то установите <literal>USES= gmake</literal>.</para>
-
- <table frame="none">
- <title>Переменные для портов, использующих
- <application>gmake</application></title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Переменная</entry>
-
- <entry>Значение</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>USES= gmake</varname></entry>
-
- <entry>Для сборки порта требуется
- <command>gmake</command>.</entry>
- </row>
-
- <row>
- <entry><varname>GMAKE</varname></entry>
-
- <entry>Полный путь к команде <command>gmake</command>, если
- отсутствует в <envar>PATH</envar>.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Если ваш порт является приложением X, которое создает файлы
- <filename>Makefile</filename> из <filename>Imakefile</filename>,
- используя <application>imake</application>, то установите
- <literal>USES= imake</literal>. Это заставит стадию
- конфигурирования автоматически выполнить <command>xmkmf -a</command>.
- Если флаг <option>-a</option> представляет для вашего порта
- проблему, то установите <literal>XMKMF=xmkmf</literal>. Если
- порт использует <application>imake</application>, но не понимает
- цель <buildtarget>install.man</buildtarget>, то следует установить
- <literal>NO_INSTALL_MANPAGES=yes</literal>.</para>
-
- <para>Если исходный <filename>Makefile</filename> вашего порта
- имеет что-нибудь помимо <buildtarget>all</buildtarget> в качестве
- основной цели построения, то задайте соответствующее значение
- <varname>ALL_TARGET</varname>. То же касается
- <buildtarget>install</buildtarget> и
- <varname>INSTALL_TARGET</varname>.</para>
-
- </sect2>
-
- <sect2 xml:id="using-configure">
- <title>Сценарий <command>configure</command></title>
-
- <para>Если ваш порт использует сценарий <command>configure</command>
- для получения файлов <filename>Makefile</filename> из файлов
- <filename>Makefile.in</filename>, то установите
- <literal>GNU_CONFIGURE=yes</literal>. Если вы хотите дать
- дополнительные параметры сценарию <command>configure</command>
- (аргументом по умолчанию является <literal>--prefix=&dollar;{PREFIX}
- --infodir=&dollar;{PREFIX}/&dollar;{INFO_PATH}
- --mandir=&dollar;{MANPREFIX}/man
- --build=&dollar;{CONFIGURE_TARGET}</literal>), установите эти параметры
- в <varname>CONFIGURE_ARGS</varname>. Дополнительные переменные
- окружения можно передать, используя переменную
- <varname>CONFIGURE_ENV</varname>.</para>
-
- <table frame="none">
- <title>Переменные для портов, использующих
- <command>configure</command></title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Переменная</entry>
-
- <entry>Значение</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>GNU_CONFIGURE</varname></entry>
-
- <entry>Порт использует сценарий <command>configure</command>
- для подготовки построения.</entry>
- </row>
-
- <row>
- <entry><varname>HAS_CONFIGURE</varname></entry>
-
- <entry>То же, что и <varname>GNU_CONFIGURE</varname>, кроме
- того, что цель configure по умолчанию не добавляется в
- <varname>CONFIGURE_ARGS</varname>.</entry>
- </row>
-
- <row>
- <entry><varname>CONFIGURE_ARGS</varname></entry>
-
- <entry>Дополнительные параметры, передаваемые сценарию
- <command>configure</command>.</entry>
- </row>
-
- <row>
- <entry><varname>CONFIGURE_ENV</varname></entry>
-
- <entry>Дополнительные переменные окружения, задаваемые для
- запуска сценария <command>configure</command>.</entry>
- </row>
-
- <row>
- <entry><varname>CONFIGURE_TARGET</varname></entry>
-
- <entry>Переопределить цель configure по умолчанию. Значением
- по умолчанию является
- <literal>&dollar;{MACHINE_ARCH}-portbld-freebsd&dollar;{OSREL}</literal>.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect2>
-
- <sect2 xml:id="using-cmake">
- <title>Использование <command>cmake</command></title>
-
- <para>Если ваш порт использует <application>CMake</application>,
- определите <literal>USES= cmake</literal> или
- <literal>USES= cmake:outsource</literal> для построения
- во внешнем каталоге (см. ниже).</para>
-
- <table frame="none">
- <title>Переменные для портов, использующих
- <command>cmake</command></title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Переменная</entry>
- <entry>Значение</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>CMAKE_ARGS</varname></entry>
- <entry>Специфичные для порта флаги
- <application>CMake</application>, передаваемые
- <command>cmake</command>.</entry>
- </row>
-
- <row>
- <entry><varname>CMAKE_BUILD_TYPE</varname></entry>
- <entry>Тип построения (предопределённые профили
- построения <application>CMake</application>). По
- умолчанию <literal>Release</literal>,
- <literal>Debug</literal> при использовании
- <varname>WITH_DEBUG</varname>.</entry>
- </row>
-
- <row>
- <entry><varname>CMAKE_ENV</varname></entry>
- <entry>Переменные окружения для передачи
- <command>cmake</command>. По умолчанию
- <literal>&dollar;{CONFIGURE_ENV}</literal>.</entry>
- </row>
-
- <row>
- <entry><varname>CMAKE_SOURCE_PATH</varname></entry>
- <entry>Путь к каталогу с исходным кодом. По умолчанию
- <literal>&dollar;{WRKSRC}</literal>.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <table frame="none">
- <title>Переменные построения <command>cmake</command>,
- устанавливаемые пользователем</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Переменная</entry>
- <entry>Значение</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>CMAKE_VERBOSE</varname></entry>
- <entry>Разрешает подробный вывод сообщений при
- построении. Значение по умолчанию не задано,
- если не заданы <varname>BATCH</varname> или
- <varname>PACKAGE_BUILDING</varname>.</entry>
- </row>
-
- <row>
- <entry><varname>CMAKE_NOCOLOR</varname></entry>
- <entry>Запрещает цветной вывод сообщений при
- построении. Значение по умолчанию не задано,
- если не заданы <varname>BATCH</varname> или
- <varname>PACKAGE_BUILDING</varname>.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para><application>CMake</application> поддерживает следующие
- профили построения: <literal>Debug</literal>,
- <literal>Release</literal>,
- <literal>RelWithDebInfo</literal> и
- <literal>MinSizeRel</literal>. Профили
- <literal>Debug</literal> и <literal>Release</literal>
- учитывают системные флаги <literal>*FLAGS</literal>;
- <literal>RelWithDebInfo</literal> и
- <literal>MinSizeRel</literal> соответственно определяют
- <varname>CFLAGS</varname> со значением
- <literal>-O2 -g</literal> и <literal>-Os -DNDEBUG</literal>.
- Значение <varname>CMAKE_BUILD_TYPE</varname> экспортируется
- в нижнем регистре в <varname>PLIST_SUB</varname> и должно
- использоваться, если порт устанавливает файлы
- <literal>*.cmake</literal> в зависимости от типа построения
- (для примера посмотрите на
- <package role="port">deskutils/strigi</package>). Следует
- учитывать, что некоторые проекты могут определять собственные
- профили построения и/или форсировать конкретный тип построения
- через установку <literal>CMAKE_BUILD_TYPE</literal> в файлах
- <filename>CMakeLists.txt </filename> . Для того чтобы порт
- для такого проекта учитывал <varname>CFLAGS</varname> и
- <varname>WITH_DEBUG</varname>, из этих файлов должны быть
- удалены значения <literal>CMAKE_BUILD_TYPE</literal>.</para>
-
- <para>Большинство проектов, основанных на
- <application>CMake</application>, поддерживают метод внешнего
- (out-of-source) построения. Для порта внешнее построение
- можно запросить с использованием суффикса
- <literal>:outsource</literal>. В этом случае
- <varname>CONFIGURE_WRKSRC</varname>,
- <varname>BUILD_WRKSRC</varname> и
- <varname>INSTALL_WRKSRC</varname> будут иметь значение
- <literal>&dollar;{WRKDIR}/.build</literal> для каталога,
- содержащего файлы, получаемые на этапах конфигурации и
- построения; при этом каталог с исходным кодом будет
- оставаться без изменений.</para>
-
- <example xml:id="using-cmake-example">
- <title>Пример использования
- <literal>USES= cmake</literal></title>
-
- <para>Следующий отрывок демонстрирует использование
- <application>CMake</application> для порта.
- <varname>CMAKE_SOURCE_PATH</varname> обычно не требуется,
- но может быть установлен, когда исходный код не находится
- в верхнем каталоге или если порт используется для
- построения части проекта.</para>
-
- <programlisting>USES= cmake:outsource
-CMAKE_SOURCE_PATH= &dollar;{WRKSRC}/subproject</programlisting>
- </example>
- </sect2>
+ <para>Это одновременно и информирует пользователя, и
+ устанавливает нужные метаданные на пользовательской машине
+ для использования автоматическими программами.</para>
+
+ <para>Обратите внимание, что данная кляуза должна
+ предшествовать подключению