aboutsummaryrefslogtreecommitdiff
path: root/ru_RU.KOI8-R/books/porters-handbook/book.xml
diff options
context:
space:
mode:
Diffstat (limited to 'ru_RU.KOI8-R/books/porters-handbook/book.xml')
-rw-r--r--ru_RU.KOI8-R/books/porters-handbook/book.xml1860
1 files changed, 1103 insertions, 757 deletions
diff --git a/ru_RU.KOI8-R/books/porters-handbook/book.xml b/ru_RU.KOI8-R/books/porters-handbook/book.xml
index 444be85ed9..50339b5cbf 100644
--- a/ru_RU.KOI8-R/books/porters-handbook/book.xml
+++ b/ru_RU.KOI8-R/books/porters-handbook/book.xml
@@ -10,14 +10,20 @@
$FreeBSD$
$FreeBSDru: frdp/doc/ru_RU.KOI8-R/books/porters-handbook/book.xml,v 1.136 2006/10/20 09:25:00 marck Exp $
- Original revision: r42833
+ Original revision: r43827
-->
-<book xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="ru">
- <info><title>Руководство FreeBSD по созданию портов</title>
-
+
+<book xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
+ xml:lang="ru">
+
+ <info>
+ <title>Руководство &os; по созданию портов</title>
<authorgroup>
- <author><orgname>The FreeBSD Documentation Project</orgname></author>
+ <author>
+ <orgname>The &os; Documentation Project</orgname>
+ </author>
</authorgroup>
<pubdate>$FreeBSD$</pubdate>
@@ -37,27 +43,32 @@
<year>2011</year>
<year>2012</year>
<year>2013</year>
- <holder role="mailto:doc@FreeBSD.org">
- The FreeBSD Documentation Project</holder>
+ <holder role="mailto:doc@FreeBSD.org">The &os; Documentation
+ Project</holder>
</copyright>
- &trademarks;
-
&legalnotice;
+ <legalnotice xml:id="trademarks" role="trademarks">
+ &tm-attrib.freebsd;
+ &tm-attrib.unix;
+ &tm-attrib.sun;
+ &tm-attrib.general;
+ </legalnotice>
+
<releaseinfo>$FreeBSD$</releaseinfo>
</info>
<chapter xml:id="why-port">
<title>Введение</title>
- <para>Коллекция портов FreeBSD является способом, используемым
- практически каждым для установки приложений ("портов") на FreeBSD.
- Как и почти всё остальное во FreeBSD, эта система в основном является
+ <para>Коллекция портов &os; является способом, используемым
+ практически каждым для установки приложений ("портов") на &os;.
+ Как и почти всё остальное во &os;, эта система в основном является
добровольно поддерживаемым начинанием. Важно иметь это в виду при
чтении данного документа.</para>
- <para>Во FreeBSD любой может прислать новый порт либо изъявить желание
+ <para>Во &os; каждый может прислать новый порт либо изъявить желание
поддерживать существующий порт, если его никто ещё никто не
поддерживает&mdash;вам не нужно иметь никаких особых привилегий на
внесение изменений, чтобы это делать.</para>
@@ -70,7 +81,7 @@
обновить существующий? Великолепно!</para>
<para>Ниже находятся некоторые указания по созданию нового порта для
- FreeBSD. Если вы хотите обновить существующий порт, вы должны
+ &os;. Если вы хотите обновить существующий порт, вы должны
прочесть их, а затем <xref linkend="port-upgrading"/>.</para>
<para>Если этот документ недостаточно подробен, вы должны обратиться к
@@ -114,11 +125,24 @@
<note>
<para>Здесь предполагается, что программное обеспечение компилируется
без проблем как есть, то есть для работы приложения на вашей системе
- FreeBSD не потребовалось абсолютно никаких изменений. Если
+ &os; не потребовалось абсолютно никаких изменений. Если
требовалось что-то изменить, то вам придется обратиться также и к
следующему разделу.</para>
</note>
+ <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>
+
+ <para>Эта настройка включает <quote>режим разработчика</quote>,
+ в котором отображаются предупреждения при использовании
+ устаревших конструкций и задействуются некоторые дополнительные
+ проверки при вызове команды <command>make</command>.</para>
+ </note>
+
<sect1 xml:id="porting-makefile">
<title>Создание файла <filename>Makefile</filename></title>
@@ -132,12 +156,9 @@ PORTVERSION= 1.1b
CATEGORIES= games
MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/
-MAINTAINER= asami@FreeBSD.org
+MAINTAINER= youremail@example.com
COMMENT= Cat chasing a mouse all over the screen
-MAN1= oneko.1
-MANCOMPRESSED= yes
-
.include &lt;bsd.port.mk&gt;</programlisting>
<note>
@@ -150,7 +171,8 @@ MANCOMPRESSED= yes
<para>Посмотрим, сможете ли вы его понять. Не обращайте внимание на
содержимое строчки <literal>&dollar;FreeBSD&dollar;</literal>, она
- будет заполнена автоматически системой SVN, когда порт будет
+ будет заполнена автоматически системой
+ <application>Subversion</application>, когда порт будет
импортирован в наше дерево портов. Вы можете найти более подробный
пример в разделе <link linkend="porting-samplem">пример
Makefile</link>.</para>
@@ -178,8 +200,8 @@ MANCOMPRESSED= yes
из <filename>README</filename> или страниц
справочника</emphasis>; слишком часто они не являются кратким
описанием порта или имеют неудобный формат (например, страницы
- справочника выровнены пробелами, поскольку это выглядит в
- особенности плохо с моноширинными шрифтами).</para>
+ справочника выровнены пробелами, что особенно плохо
+ смотрится с моноширинными шрифтами).</para>
</note>
<para>Хорошо составленный <filename>pkg-descr</filename>
@@ -225,16 +247,14 @@ WWW: http://www.oneko.org/</programlisting>
пакет генерируется упаковкой файлов, которые здесь указаны.
Имена путей указываются относительно установочного префикса
(обычно <filename>/usr/local</filename>).
- Если вы используете переменные
- <varname>MAN<replaceable>n</replaceable></varname> (а вы должны
- это делать), то указывать страницы справочника здесь не
- нужно. Если порт во время установки создает каталоги, убедитесь,
- что добавили строку <literal>@dirrm</literal> для удаления
+ Если порт во время установки создает каталоги, убедитесь,
+ что добавлены строки <literal>@dirrm</literal> для удаления
каталогов при удалении пакета.</para>
<para>Вот маленький пример:</para>
<programlisting>bin/oneko
+man/man1/oneko.1.gz
lib/X11/app-defaults/Oneko
lib/X11/oneko/cat1.xpm
lib/X11/oneko/cat2.xpm
@@ -242,7 +262,7 @@ lib/X11/oneko/mouse.xpm
@dirrm lib/X11/oneko</programlisting>
<para>Обратитесь к странице справочной системы по команде
- &man.pkg.create.1; с подробным описанием формата списка
+ &man.pkg-create.8; с подробным описанием формата списка
упаковки.</para>
<note>
@@ -270,6 +290,7 @@ lib/X11/oneko/mouse.xpm
<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 \
@@ -293,7 +314,7 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
<para>Обратной стороной такого способа перечисления файлов и
каталогов порта является невозможность использования
- последовательностей команд, описанных в &man.pkg.create.1;.
+ последовательностей команд, описанных в &man.pkg-create.8;.
Поэтому он подходит для простых портов, что делает их ещё более
простыми. Одновременно с этим положительным моментом является
уменьшение количества файлов в коллекции портов. Пожалуйста,
@@ -333,22 +354,34 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
<itemizedlist>
<listitem>
<para><filename>pkg-plist</filename> не содержит ничего сверх того,
- что устанавливается вашим портом</para>
+ что устанавливается портом</para>
</listitem>
<listitem>
<para><filename>pkg-plist</filename> содержит абсолютно все, что
- устанавливается вашим портом</para>
+ устанавливается портом</para>
</listitem>
<listitem>
- <para>Ваш порт может быть переустановлен множество раз с помощью
- указания цели <buildtarget>reinstall</buildtarget></para>
+ <para>Порт может быть установлен с помощью
+ указания цели <buildtarget>install</buildtarget>. Это
+ позволяет убедиться в правильной работе сценария
+ установки.</para>
</listitem>
<listitem>
- <para>Ваш порт <link linkend="plist-cleaning">подчищает</link>
- за собой после своего удаления</para>
+ <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>
@@ -356,20 +389,19 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
<title>Рекомендуемый порядок проверки</title>
<step>
- <para><command>make install</command></para>
+ <para><command>make stage</command></para>
</step>
<step>
- <para><command>make package</command></para>
+ <para><command>make check-orphans</command></para>
</step>
<step>
- <para><command>make deinstall</command></para>
+ <para><command>make package</command></para>
</step>
<step>
- <para><command>pkg_add package-name
- </command></para>
+ <para><command>make install</command></para>
</step>
<step>
@@ -377,31 +409,25 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
</step>
<step>
- <para><command>make reinstall</command></para>
+ <para><command>pkg add package-filename</command></para>
</step>
<step>
- <para><command>make package</command></para>
- </step>
-
- <step>
- <para><command>make readme</command></para>
+ <para><command>make package</command> (из-под
+ пользователя)</para>
</step>
</procedure>
- <para>Проверьте, что ни на шаге <buildtarget>package</buildtarget>, ни на
- шаге <buildtarget>deinstall</buildtarget> не выдается никаких
- предупреждений. После выполнения шага 3 проверьте, что все новые
- каталоги были успешно удалены. Также попробуйте запустить
- программное обеспечение после выполнения шага 4, чтобы убедиться, что
- оно работает правильно при установке из пакета.</para>
-
- <para>Наиболее основательным способом автоматизации этих шагов является
- установка <application>ports tinderbox</application>. Это
- обеспечивает <literal>jails</literal>, в которых вы можете проверять
- все вышеуказанные шаги без изменения состояния в вашей основной
- системе. Для получения дополнительной информации смотрите
- <filename>ports/ports-mgmt/tinderbox</filename>.</para>
+ <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">
@@ -410,7 +436,7 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
<para>Будьте добры, пользуйтесь утилитой <command>portlint</command>
для проверки того, что ваш порт соответствует нашим рекомендациям.
- Программа <package>ports-mgmt/portlint</package>
+ Программа <package role="port">ports-mgmt/portlint</package>
является частью Коллекции
Портов. В частности, вы можете захотеть проверить, правильно ли
сформирован файл <link linkend="porting-samplem">Makefile</link> и
@@ -420,38 +446,45 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
<sect1 xml:id="porting-submitting">
<title>Посылка нового порта</title>
- <para>Перед посылкой нового порта удостоверьтесь, что вы прочитали
- раздел о том, что <link linkend="porting-dads">можно и нельзя</link> делать.</para>
+ <para>Перед посылкой нового порта прочитайте раздел о том, что
+ <link linkend="porting-dads">можно и нельзя</link> делать.</para>
- <para>Теперь, когда вы счастливы от своего первого порта, единственное,
+ <para>Когда вы наконец довольны своим первым портом, единственное,
что осталось сделать, это включить его в основное дерево портов
- &os; и осчастливить этим всех остальных. Нам не нужен ни ваш
+ &os; и осчастливить этим всех остальных. Нам не нужен ни
каталог <filename>work</filename>, ни пакет
- <filename>pkgname.tgz</filename>, так что удалите их прямо сейчас.
- Затем (предположим, что ваш порт зовут oneko) перейдите в каталог
- выше, там, где находится каталог <literal>oneko</literal>, и наберите
- следующее: <command>shar `find oneko` &gt; oneko.shar</command></para>
-
- <para>Включите ваш файл <literal>oneko.shar</literal>
- в сообщение об ошибке и пошлите
- его с помощью программы &man.send-pr.1; (обратитесь к разделу <link xlink:href="&url.articles.contributing;/contrib-how.html#CONTRIB-GENERAL">
- Сообщения об ошибках и общие замечания</link> для получения подробной
- информации о программе &man.send-pr.1;). Не забудьте
- указать в сообщении категорию <literal>ports</literal> и класс
- <literal>change-request</literal> (Не указывайте, что сообщение
- имеет статус <literal>confidential</literal>!). Добавьте также
- краткое описание программы, порт которой вы создали, в раздел
- <quote>Description</quote> отправляемого PR (например, содержимое
- <varname>COMMENT</varname> в сокращенном виде) и сам файл в виде архива
- shar, поместив его в раздел <quote>Fix</quote>.</para>
+ <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> для новых портов.
- Если вы следуете этой схеме, то шансы на то, что на ваше PR вскоре
- кто-то взглянет, гораздо выше.</para>
+ <para>Хорошее описание в заголовке сообщения о проблеме
+ значительно облегчает работу коммиттеров портов. Для новых
+ портов мы предпочитаем нечто вроде <quote>New port:
+ &lt;категория&gt;/&lt;название порта&gt; &lt;краткое
+ описание порта&gt;</quote>. Следование этой схеме
+ упрощает и ускоряет начало работы по добавлению нового
+ порта.</para>
</note>
<para>Повторим ещё раз, что <emphasis>не нужно включать ни оригинальный
@@ -460,16 +493,17 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
<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 для портов ожидающих своей
- очереди для включения во &os;.</para>
-
- <para>Мы рассмотрим ваш порт, при необходимости вернём его обратно, а
- затем включим порт в наше дерево. Ваше имя также будет добавлено
- в список <link xlink:href="&url.articles.contributors;/contrib-additional.html">
- Дополнительных контрибуторов проекта FreeBSD</link> и другие
+ <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>
@@ -502,10 +536,9 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
текстов имеется в наличии локально в каталоге
<varname>DISTDIR</varname>. Если цель
<buildtarget>fetch</buildtarget> не может найти требуемые файлы в
- каталоге <varname>DISTDIR</varname>, то он будет искаться по
+ каталоге <varname>DISTDIR</varname>, то они будут искаться по
указателю URL <varname>MASTER_SITES</varname>, который
- устанавливается в Makefile, а также на нашем основном FTP-сервере
- по адресу <uri xlink:href="ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/">ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/</uri>,
+ устанавливается в Makefile, а также на наших FTP зеркалах,
куда мы по возможности помещаем дистрибутивные файлы для архива.
Затем она попытается сгрузить указанный файл с помощью
<varname>FETCH</varname>, полагая, что запрашивающая машина имеет
@@ -558,11 +591,22 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
<step>
<para>Выполняется цель <buildtarget>build</buildtarget>. Она
отвечает за переход в собственный рабочий каталог порта
- (<varname>WRKSRC</varname>) и его построение. Если задана
- переменная <varname>USES= gmake</varname>, будет использоваться
- GNU-версия утилиты <command>make</command>, в противном случае
- будет использована системная утилита
- <command>make</command>.</para>
+ (<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>
@@ -608,8 +652,9 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
и не выполняется инфраструктурой портов.</para>
</note>
- <para>Теперь вы представляете, что происходит, когда пользователь
- набирает команду <command>make</command>, теперь давайте пройдемся
+ <para>Теперь, когда вы представляете, что происходит, когда
+ пользователь набирает команду <command>make install</command>,
+ давайте пройдемся
через шаги, рекомендуемые для создания настоящего порта.</para>
</sect1>
@@ -706,22 +751,44 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
<title>Создание патчей</title>
<para>Файлы, которые добавлялись или изменялись в процессе создания
- порта, могут быть выявлены вызовом программы &man.diff.1;,
+ порта, могут быть выявлены программой &man.diff.1;,
а результат работы этой программы может быть в дальнейшем передан
- программе &man.patch.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> обозначает путь к файлу, к которому
- применяется патч, такой как
+ <replaceable>*</replaceable> обозначает путь к файлу,
+ к которому применяется патч, такой как
<filename>patch-Imakefile</filename> или
- <filename>patch-src-config.h</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>files/</filename>),
+ (как правило, это <filename class="directory">files/</filename>),
откуда они будут взяты автоматически. Все патчи обязаны быть сделаны
относительно каталога <varname>WRKSRC</varname> (как правило,
это каталог, в который распаковывается исходный архив и где будет
выполняться построение). Для упрощения внесения изменений и
- обновлений вы должны избегать наличия более чем одного патча для
+ обновлений избегайте наличия более чем одного патча для
одного и того же файла (например, патчей
<filename>patch-file</filename> и <filename>patch-file2</filename>,
оба меняющих файл <filename>WRKSRC/foobar.c</filename>).
@@ -732,14 +799,23 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
соответствующий патч следует назвать
<filename>patch-src-freeglut__joystick.c</filename>.</para>
- <para>Пожалуйста, используйте для именования ваших патчей только символы
+ <para>Пожалуйста, используйте для именования патчей только символы
<literal>[-+._a-zA-Z0-9]</literal>. Не используйте любые другие
- символы, кроме этих. Не называйте ваши патчи как
- <filename>patch-aa</filename> или <filename>patch-ab</filename> и
- так далее, всегда ссылайтесь на путь и название файла в названиях
+ символы, кроме этих. Не называйте патчи как
+ <filename>patch-aa</filename> или <filename>patch-ab</filename>,
+ всегда ссылайтесь на путь и название файла в названиях самих
патчей.</para>
- <para>Не помещайте строки RCS в патчи. SVN будет изменять их при
+ <para>Существует альтернативный упрощённый способ создания
+ патчей для существующих файлов. Первые шаги те же самые:
+ создание копии неизменённого файла с расширением
+ <filename>.orig</filename> и внесение изменений. После этого
+ используйте <command>make makepatch</command>, чтобы обновить
+ файлы с патчами в каталоге <filename>files</filename> данного
+ порта.</para>
+
+ <para>Не помещайте строки RCS в патчи.
+ <application>Subversion</application> будет изменять их при
помещении файлов в дерево портов, и когда мы будем их оттуда
извлекать, они будут уже другие, поэтому применение патчей
окончится неудачей. Строчки RCS предваряются знаком доллара
@@ -754,65 +830,72 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
резервными копиями файлов, файлы <filename>Makefile</filename>, когда
как порт использует <command>Imake</command> или
GNU-версию программы <command>configure</command>, и так далее,
- не нужны, и должны быть удалены. Если вы отредактировали файл
- <filename>configure.in</filename> и запустили
- <command>autoconf</command> для перегенерации
+ не нужны, и должны быть удалены. Если было необходимо
+ отредактировать файл <filename>configure.in</filename> и
+ запустить <command>autoconf</command> для перегенерации
<command>configure</command>, не нужно включать файлы diff для
<command>configure</command> (они частенько вырастают до нескольких
- тысяч строк!); задайте <literal>USE_AUTOTOOLS=autoconf:261</literal> и
+ тысяч строк!). Вместо этого задайте
+ <literal>USE_AUTOTOOLS=autoconf:261</literal> и
включите diff-файл для <filename>configure.in</filename>.</para>
- <para>Также постарайтесь минимизировать в ваших патчах объем
+ <para>Старайтесь минимизировать в патчах объём
нефункциональных изменений с пустыми символами. В мире Открытого
Исходного Кода является распространенным совместное использование
проектами больших объемов кодовой базы, но с различными стилями
- и правилами отступов. Если вы берете работающую функциональную
- часть из одного проекта для исправления похожей области в другом,
- то будьте аккуратны, пожалуйста: получаемый однострочный патч
- может быть полон нефункциональных изменений. Это не только
- увеличивает размер репозитория SVN, но также усложняет поиск того,
- что конкретно вызвало проблему и что вы вообще изменили.</para>
-
- <para>Если вам нужно удалить файл, то вы можете сделать это при
- выполнении цели <buildtarget>post-extract</buildtarget> вместо того,
- чтобы оформлять это как часть патча.</para>
+ и правилами отступов. При копировании работающей функциональной
+ части из одного проекта для исправления похожей области в другом,
+ будьте аккуратны, пожалуйста: получаемый однострочный патч
+ может указаться полон нефункциональных изменений. Это не только
+ увеличивает размер репозитория <application>Subversion</application>,
+ но также усложняет поиск того,
+ что конкретно вызвало проблему и что вообще поменялось.</para>
+
+ <para>Если нужно удалить файл, сделайте это при выполнении цели
+ <buildtarget>post-extract</buildtarget>, вместо того чтобы
+ оформлять это как часть патча.</para>
<para>Простые перемещения могут быть выполнены непосредственно из
<filename>Makefile</filename> порта с использованием &man.sed.1; в
- режиме in-place. Это очень удобно, когда вам нужно применить патч
- на значение переменной. Пример:</para>
+ режиме in-place. Это удобно, когда при изменении используется
+ значение переменной:</para>
<programlisting>post-patch:
@${REINPLACE_CMD} -e 's|for Linux|for FreeBSD|g' ${WRKSRC}/README</programlisting>
- <para>Довольно часто бывают ситуации, когда портируемое программное
- обеспечение, особенно если основной платформой разработки является
- &windows;, использует конвенцию CR/LF для большинства своих исходных
- файлов. Это может быть причиной проблем с дальнейшей упаковкой,
- предупреждениями компилятора, выполнением скриптов
- (<command>/bin/sh^M</command> not found) и так далее. Для быстрой
+ <para>Довольно часто в исходных файлах портируемого программного
+ обеспечения используется конвенция CR/LF. Это может стать
+ причиной проблем с дальнейшей упаковкой, предупреждениями
+ компилятора или выполнением скриптов (таких как
+ <literal>/bin/sh^M not found</literal>). Для быстрого
преобразования всех файлов из CR/LF просто в LF добавьте
- <literal>USE_DOS2UNIX=yes</literal> в <filename>Makefile</filename>
- порта. Может быть указан перечень преобразуемых файлов:</para>
+ в <filename>Makefile</filename> порта эту запись:</para>
+
+ <programlisting>USES= dos2unix</programlisting>
+
+ <para>Может быть задан точный список преобразуемых файлов:</para>
- <programlisting>USE_DOS2UNIX= util.c util.h</programlisting>
+ <programlisting>USES= dos2unix
+DOS2UNIX_FILES= util.c util.h</programlisting>
- <para>Если вы хотите преобразовать группу файлов в разных подкаталогах,
- то для этого можно использовать <varname>DOS2UNIX_REGEX</varname>.
+ <para>Используйте <varname>DOS2UNIX_REGEX</varname>, чтобы
+ преобразовать группу файлов в разных подкаталогах.
Его параметром является регулярное выражение, совместимое с
- <command>find</command>. Подробнее о формате в &man.re.format.7;.
- Эта опция используется для преобразования всех файлов заданного
- расширения, к примеру всех исходных файлов, не затрагивая двоичные
- файлы:</para>
-
- <programlisting>USE_DOS2UNIX= yes
-DOS2UNIX_REGEX= .*\.(c|cpp|h)</programlisting>
-
- <para>Если вы хотите создать патч на основе существующего файла, то вы
- можете его скопировать с расширением <filename>.orig</filename>, а
- затем изменить исходный. Цель<buildtarget>makepatch</buildtarget>
- запишет соответствующий файл с патчем в каталог
- <filename>files</filename> данного порта.</para>
+ &man.find.1;. Подробнее о формате в &man.re.format.7;.
+ Такой вариант удобен для преобразования всех файлов заданного
+ расширения. Для примера, преобразуем все исходные файлы,
+ не затрагивая двоичные файлы:</para>
+
+ <programlisting>USES= dos2unix
+DOS2UNIX_REGEX= .*\.([ch]|cpp)</programlisting>
+
+ <para>Другим вариантом является использование
+ <varname>DOS2UNIX_GLOB</varname>, который вызывает
+ <command>find</command> для каждого из перечисленных в нём
+ элементов.</para>
+
+ <programlisting>USES= dos2unix
+DOS2UNIX_GLOB= *.c *.cpp *.h</programlisting>
</sect1>
<sect1 xml:id="slow-configure">
@@ -913,13 +996,16 @@ DOS2UNIX_REGEX= .*\.(c|cpp|h)</programlisting>
есть каждый раз, когда создателями выпускается новый официальный
релиз), и добавляется к имени пакета, если оно не равно нулю.
Изменения в <varname>PORTREVISION</varname> используются
- автоматизированными инструментами (например, &man.pkg.version.1;)
+ автоматизированными инструментами (например,
+ <command>pkg version</command>, см. &man.pkg-version.8;)
для определения факта появления нового пакета.</para>
<para>Значение <varname>PORTREVISION</varname> должно увеличиваться
каждый раз, когда в порте FreeBSD делаются изменения, которые
- достаточно сильно затрагивают содержимое или структуру
- соответствующего пакета.</para>
+ как-либо меняют получаемый пакет. Сюда относятся только
+ изменения, затрагивающие построение пакета с <link
+ linkend="makefile-options">параметрами</link> по
+ умолчанию.</para>
<para>Примеры случаев, когда значение <varname>PORTREVISION</varname>
должно быть увеличено:</para>
@@ -1009,7 +1095,7 @@ DOS2UNIX_REGEX= .*\.(c|cpp|h)</programlisting>
<title><varname>PORTEPOCH</varname></title>
<para>Время от времени разработчик программного обеспечения или
- создатель порта FreeBSD делают что-то не так и выпускают версию
+ создатель порта &os; делают что-то не так и выпускают версию
программы, номер которой меньше предыдущей версии. Примером этого
является порт, название которого меняется с foo-20000801 на foo-1.0
(изначально это не считалось бы более новой версией, так как
@@ -1018,9 +1104,8 @@ DOS2UNIX_REGEX= .*\.(c|cpp|h)</programlisting>
<tip>
<para>Результат сравнения номера версии не всегда очевиден.
Для выполнения сравнения двух строк с номером версии можно
- использовать &man.pkg.version.1;. Эквивалентом в
- <application>pkgng</application> является
- <command>pkg version -t</command>. Например:</para>
+ использовать <command>pkg version</command>
+ (см. &man.pkg-version.8;). Например:</para>
<screen>&prompt.user; <userinput>pkg_version -t 0.031 0.29</userinput>
&gt;</screen>
@@ -1060,7 +1145,7 @@ DOS2UNIX_REGEX= .*\.(c|cpp|h)</programlisting>
корректном использовании <varname>PORTVERSION</varname> может
появиться необходимость её иметь, если в будущих релизах
программное обеспечение должно изменить структуру номера версии.
- Однако создателям портов нужно быть внимательными, когда
+ Однако создателям портов для &os; нужно быть внимательными, когда
разработчик выпускает релиз без официального номера версии &mdash;
эдакие <quote>промежуточные</quote> релизы. Имеется соблазн
пометить релиз датой его выхода, что может вызвать проблемы, как и
@@ -1091,7 +1176,7 @@ PORTVERSION= 0.10</programlisting>
<para>Обнаружена брешь в безопасности, исправление которой
потребовало создания
- локального патча для FreeBSD. Соответственно было увеличено
+ локального патча для &os;. Соответственно было увеличено
значение переменной <varname>PORTREVISION</varname>.</para>
<programlisting>PORTNAME= gtkmumble
@@ -1165,40 +1250,6 @@ PORTEPOCH= 1</programlisting>
частью значения переменной <varname>PORTNAME</varname>.</para>
</sect2>
- <sect2>
- <title><varname>LATEST_LINK</varname></title>
-
- <para><varname>LATEST_LINK</varname> задает в процессе построения
- пакета короткое имя ссылки, которые могут использоваться при
- выполнении команды <command>pkg_add -r</command>. Это позволяет,
- к примеру, установить последнюю версию perl, используя
- <command>pkg_add -r perl</command>, без знания точного номера
- версии. Такое имя должно быть уникальным и очевидным для
- пользователей.</para>
-
- <para>В некоторых случаях в коллекции портов может присутствовать
- несколько версий программы одновременно. Обе системы, построения
- индексов и построения пакетов, нуждаются в способности их видеть
- как разные, независимые порты, хотя все они могут иметь схожее
- значение для <varname>PORTNAME</varname>,
- <varname>PKGNAMEPREFIX</varname> и даже
- <varname>PKGNAMESUFFIX</varname>. В этих случаях для всех портов
- кроме <quote>главного</quote> следует присвоить различные значения для
- необязательной переменной <varname>LATEST_LINK</varname> &mdash;
- чтобы получить пример ее использования, смотрите порты
- <filename>lang/gcc46</filename> и <filename>lang/gcc</filename>,
- а также семейство <filename>www/apache*</filename>. При установке
- <varname>NO_LATEST_LINK</varname> ссылки не создаются; эта
- необязательная переменная может быть указана во всех версиях,
- кроме <quote>главной</quote>. Обратите
- внимание, как выбирать <quote>главную</quote> версию &mdash;
- <quote>самую популярную</quote>, <quote>самую поддерживаемую</quote>,
- <quote>с наименьшими изменениями</quote> и так далее &mdash; это
- выходит за рамки рекомендаций этого руководства; мы всего лишь
- сообщаем вам, как указывать версии других портов после того, как
- вы выбрали <quote>главный</quote>.</para>
- </sect2>
-
<sect2 xml:id="porting-pkgname">
<title>Соглашения по именованию пакетов</title>
@@ -1218,7 +1269,7 @@ PORTEPOCH= 1</programlisting>
<orderedlist>
<listitem>
- <para>FreeBSD пытается поддерживать языки, на которых разговаривают
+ <para>&os; пытается поддерживать языки, на которых разговаривают
её пользователи. Часть <replaceable>language-</replaceable>
должна быть двухсимвольным сокращением от названия языка по
стандарту ISO-639, если порт специфичен для конкретного языка.
@@ -1262,9 +1313,8 @@ PORTEPOCH= 1</programlisting>
имеют одинаковый <varname>PORTNAME</varname>, является вполне
нормальным, как для портов <filename>www/apache*</filename>;
в этом случае различные версии (и различные записи в индексе)
- отличаются по значениям <varname>PKGNAMEPREFIX</varname>,
- <varname>PKGNAMESUFFIX</varname> и
- <varname>LATEST_LINK</varname>.</para>
+ отличаются по значениям <varname>PKGNAMEPREFIX</varname>
+ и <varname>PKGNAMESUFFIX</varname>.</para>
</listitem>
<listitem>
@@ -1613,7 +1663,7 @@ PORTEPOCH= 1</programlisting>
<row>
<entry><filename>docs*</filename></entry>
- <entry>Мета-порты для документации FreeBSD.</entry>
+ <entry>Мета-порты для документации &os;.</entry>
<entry/>
</row>
@@ -1902,7 +1952,7 @@ PORTEPOCH= 1</programlisting>
<row>
<entry><filename>ports-mgmt</filename></entry>
<entry>Порты для управления, установки и разработки
- портов и пакетов FreeBSD.</entry>
+ портов и пакетов &os;.</entry>
<entry/>
</row>
@@ -2158,7 +2208,9 @@ PORTEPOCH= 1</programlisting>
<listitem>
<para>Порты, устанавливающие загружаемые модули ядра, должны
содержать виртуальную категорию <filename>kld</filename> в
- строке <varname>CATEGORIES</varname>.
+ строке <varname>CATEGORIES</varname>. Это одно из действий,
+ выполняемых автоматически с добавлением
+ <literal>kmod</literal> в строке <varname>USES</varname>.
</para>
</listitem>
@@ -2694,7 +2746,7 @@ EXTRACT_ONLY= source.tar.gz</programlisting>
на сеть, которую это даёт.</para>
<para>В последующих разделах информация будет даваться вместе с
- реализацией этой идеи во FreeBSD. Мы несколько улучшили концепцию
+ реализацией этой идеи во &os;. Мы несколько улучшили концепцию
OpenBSD.</para>
<sect3>
@@ -3358,9 +3410,9 @@ ALWAYS_KEEP_DISTFILES= yes
<orderedlist>
<listitem>
<para>Старайтесь делать строку COMMENT длиной не больше, чем 70
- символов, так как эта строка будет использована программой
- &man.pkg.info.1; для отображения однострочного описания
- порта;</para>
+ символов, так как эта строка будет использована командой
+ <command>pkg info</command> (см. &man.pkg-info.8;) для
+ отображения однострочного описания порта;</para>
</listitem>
<listitem>
@@ -3442,7 +3494,7 @@ ALWAYS_KEEP_DISTFILES= yes
<para>Когда URL, в которых указаны доступные версии, отличаются
от URL их загрузки. Например, чтобы привязать проверку новых
версий дистрибутивных файлов к странице загрузки для порта
- <package>databases/pgtune</package>,
+ <package role="port">databases/pgtune</package>,
добавьте:</para>
<programlisting>PORTSCOUT= site:http://pgfoundry.org/frs/?group_id=1000416</programlisting>
@@ -3482,9 +3534,10 @@ ALWAYS_KEEP_DISTFILES= yes
отсутствует.</para>
<para>Зависимость проверяется дважды, один раз внутри цели
- <buildtarget>extract</buildtarget>, а затем из цели
+ <buildtarget>build</buildtarget>, а затем из цели
<buildtarget>install</buildtarget>. Кроме того, имя зависимости
- помещается в пакет, так что &man.pkg.add.1; будет
+ помещается в пакет, так что <command>pkg install</command>
+ (см. &man.pkg-install.8;) будет
автоматически её устанавливать, если её нет на пользовательской
системе.</para>
</sect2>
@@ -3537,7 +3590,8 @@ ALWAYS_KEEP_DISTFILES= yes
<para>Зависимость проверяется внутри цели
<buildtarget>install</buildtarget>. Кроме того, имя зависимости
- помещается в пакет, так что программа &man.pkg.add.1;
+ помещается в пакет, так что <command>pkg install</command>
+ (см. &man.pkg-install.8;)
будет автоматически его устанавливать, если он не будет найден
в пользовательской системе. Часть
<replaceable>target</replaceable> может быть опущена, если она
@@ -3562,7 +3616,7 @@ ALWAYS_KEEP_DISTFILES= yes
которые обрабатываются в <filename>ports/Mk/bsd.*.mk</filename>
для пополнения первоначальных зависимостей построения. Например,
<literal>USES= gmake</literal> добавляет
- <package>devel/gmake</package> в
+ <package role="port">devel/gmake</package> в
<varname>BUILD_DEPENDS</varname>. Для предотвращения загрязнения
<varname>RUN_DEPENDS</varname> подобными дополнительными
зависимостями проявляйте осторожность с присвоением с раскрытием,
@@ -3675,15 +3729,15 @@ ALWAYS_KEEP_DISTFILES= yes
<sect2 xml:id="uses">
<title><varname>USES</varname></title>
- <para>Существует несколько параметров для определения различных
- видов характерных особенностей и зависимостей, которыми
- обладает рассматриваемый порт. Они могут быть указаны путём
- добавления следующей строки в <filename>Makefile</filename>
- порта:</para>
+ <para>Могут быть добавлены параметры для определения различных
+ характерных особенностей и зависимостей, которыми
+ обладает данный порт. Они указываются путём добавления
+ в <filename>Makefile</filename> этой строки:</para>
<programlisting>USES= feature[:arguments]</programlisting>
- <para>Для получения полного списка значений смотрите <xref linkend="uses-values"/>.</para>
+ <para>Для получения полного списка значений смотрите
+ <xref linkend="uses-values"/>.</para>
<warning>
<para>Значение <varname>USES</varname> нельзя присваивать
@@ -3855,7 +3909,7 @@ ALWAYS_KEEP_DISTFILES= yes
<para>Технология построения портов не защищена от зацикленных
зависимостей. Если вы создадите такую, то у кого-нибудь и
- где-нибудь установка FreeBSD будет немедленно сломана, а у остальных
+ где-нибудь установка &os; будет немедленно сломана, а у остальных
сломается несколько позже. Это на самом деле очень трудно
распознать; если вы сомневаетесь, то перед внесением изменений
проверьте, что выполнили следующее: <command>cd /usr/ports; make
@@ -3880,7 +3934,7 @@ ALWAYS_KEEP_DISTFILES= yes
<programlisting>.include &lt;bsd.port.pre.mk&gt;
.if exists(${LOCALBASE}/bin/foo)
-LIB_DEPENDS= bar:${PORTSDIR}/foo/bar
+LIB_DEPENDS= libbar.so:${PORTSDIR}/foo/bar
.endif</programlisting>
</example>
@@ -3904,7 +3958,7 @@ BAR_DESC= Bar support
.include &lt;bsd.port.options.mk&gt;
.if ${PORT_OPTIONS:MBAR}
-LIB_DEPENDS= bar:${PORTSDIR}/foo/bar
+LIB_DEPENDS= libbar.so:${PORTSDIR}/foo/bar
.endif</programlisting>
</example>
@@ -3936,7 +3990,8 @@ LIB_DEPENDS= bar:${PORTSDIR}/foo/bar
<para>В некоторых случаях для большего контроля над
зависимостями используются переменные <varname>WANT_</varname>,
которые позволяют указывать требования в более точной форме.
- Например, взгляните на порт <package>mail/squirrelmail</package>. Этому порту
+ Например, взгляните на порт
+ <package role="port">mail/squirrelmail</package>. Этому порту
нужны несколько модулей PHP, которые перечислены в переменной
<varname>USE_PHP</varname>:</para>
@@ -3948,8 +4003,8 @@ LIB_DEPENDS= bar:${PORTSDIR}/foo/bar
<programlisting>WANT_PHP_WEB= yes</programlisting>
<para>Имеющиеся переменные <varname>USE_</varname> и
- <varname>WANT_</varname> определены в файлах
- <filename>/usr/ports/Mk</filename>.</para>
+ <varname>WANT_</varname> определены в файлах в
+ <filename class="directory">/usr/ports/Mk</filename>.</para>
</sect2>
</sect1>
@@ -3989,7 +4044,7 @@ RESOLUTION?= 300
.endif
</programlisting>
- <para>Порт <package>japanese/xdvi300</package> содержит
+ <para>Порт <package role="port">japanese/xdvi300</package> содержит
также все обычные патчи, файлы для пакета и так далее. Если вы введете
здесь команду <command>make</command>, она возьмет в качестве разрешения
значение по умолчанию (300) и построит порт обычным образом.</para>
@@ -4017,98 +4072,14 @@ MASTERDIR= ${.CURDIR}/../xdvi300
<sect1 xml:id="makefile-manpages">
<title>Страницы Справочника</title>
- <para>Переменные <varname>MAN[1-9LN]</varname> автоматически добавят любые
- страницы Справочника к файлу <filename>pkg-plist</filename> (это
- означает, что вам <emphasis>не нужно</emphasis> указывать страницы
- Справочника в файле <filename>pkg-plist</filename>&mdash;обратитесь к
- главе о <link linkend="plist-sub">генерации файла PLIST</link> для
- получения более подробной информации). Это также позволяет на этапе
- установки автоматически упаковывать и распаковывать страницы
- Справочника в зависимости от значения переменной
- <varname>NO_MANCOMPRESS</varname> в файле
- <filename>/etc/make.conf</filename>.</para>
-
- <para>Если ваш порт пытается задать несколько имен для страниц
- Справочника при помощи символических или жестких ссылок, то вы должны
- использовать переменную <varname>MLINKS</varname>, чтобы указать на
- это. Ссылка, установленная вашим портом, будет уничтожена и создана
- заново сценарием <filename>bsd.port.mk</filename> для проверки того,
- что она указывает на правильный файл. Любые страницы Справочника,
- перечисленные в переменной MLINKS, не должны фигурировать в файле
- <filename>pkg-plist</filename>.</para>
-
- <para>Для указания того, что страницы Справочника нужно сжимать во
- время установки, используйте переменную
- <varname>MANCOMPRESSED</varname>. Эта переменная может принимать три
- значения - <literal>yes</literal>, <literal>no</literal> и
- <literal>maybe</literal>. <literal>yes</literal> означает, что
- страницы Справочника устанавливаются уже сжатыми, <literal>no</literal>
- означает, что они не сжимаются и <literal>maybe</literal> означает, что
- программное обеспечение принимает во внимание значение переменной
- <varname>NO_MANCOMPRESS</varname>, так что сценарию
- <filename>bsd.port.mk</filename> ничего дополнительно делать не
- нужно.</para>
-
<para>Если ваш порт определяет корнем для файлов Справочника каталог,
отличный от <varname>PREFIX</varname>, вы можете использовать
- переменную <varname>MANPREFIX</varname>, чтобы задать его явно. Кроме
- того, если страницы только некоторых разделов помещаются в
- нестандартное место, например, в случае портов модулей языка
- <literal>perl</literal> Perl, вы можете установить маршруты к справочным
- страницам индивидуально, при помощи
- <varname>MAN<replaceable>sect</replaceable>PREFIX</varname> (где
- <replaceable>sect</replaceable> принимает значения
- <literal>1-9</literal>, <literal>L</literal> или
- <literal>N</literal>).</para>
-
- <para>Если страницы Справочника помещаются в подкаталоги, соответствующие
- некоторому языку, то задайте название языка языка в переменной
- <varname>MANLANG</varname>. Значение этой переменной по умолчанию
- равно <literal>""</literal> (то есть только английский язык).</para>
-
- <para>Вот пример, в котором приводятся все случаи.</para>
-
- <programlisting>
-MAN1= foo.1
-MAN3= bar.3
-MAN4= baz.4
-MLINKS= foo.1 alt-name.8
-MANLANG= "" ja
-MAN3PREFIX= ${PREFIX}/share/foobar
-MANCOMPRESSED= yes
- </programlisting>
-
- <para>Здесь указано, что этот порт устанавливает 6 файлов:</para>
-
- <programlisting>${MANPREFIX}/man/man1/foo.1.gz
-${MANPREFIX}/man/ja/man1/foo.1.gz
-${PREFIX}/share/foobar/man/man3/bar.3.gz
-${PREFIX}/share/foobar/man/ja/man3/bar.3.gz
-${MANPREFIX}/man/man4/baz.4.gz
-${MANPREFIX}/man/ja/man4/baz.4.gz</programlisting>
-
- <para>Кроме того, файл
- <filename>${MANPREFIX}/man/man8/alt-name.8.gz</filename> может быть, а
- может и не быть установлен вашим портом. В любом случае будет создана
- символическая ссылка для объединения страниц Справочника foo(1) и
- alt-name(8).</para>
-
- <para>Если переведена только часть страниц справочника, вы можете
- использовать некоторые переменные, созданные динамически из
- содержимого <varname>MANLANG</varname>:</para>
-
- <programlisting>MANLANG= "" de ja
-MAN1= foo.1
-MAN1_EN= bar.1
-MAN3_DE= baz.3</programlisting>
-
- <para>Что переводится в такой список файлов:</para>
-
- <programlisting>${MANPREFIX}/man/man1/foo.1.gz
-${MANPREFIX}/man/de/man1/foo.1.gz
-${MANPREFIX}/man/ja/man1/foo.1.gz
-${MANPREFIX}/man/man1/bar.1.gz
-${MANPREFIX}/man/de/man3/baz.3.gz</programlisting>
+ переменную <varname>MANDIRS</varname>, чтобы указать эти каталоги.
+ Обратите внимание, что файлы страниц справочника следует размещать
+ в <filename>pkg-plist</filename> наряду с остальными файлами.
+ <varname>MANDIRS</varname> предназначена для автоматического
+ сжатия страниц справочника, так чтобы имена файлов оканчивались
+ на <filename>.gz</filename>.</para>
</sect1>
<sect1 xml:id="makefile-info">
@@ -4123,7 +4094,7 @@ ${MANPREFIX}/man/de/man3/baz.3.gz</programlisting>
использует другое место для размещения. Однако, это не рекомендуется
делать. Эти записи всего лишь содержат путь относительно
<filename>PREFIX/INFO_PATH</filename>.
- Например, <package>lang/gcc34</package> устанавливает
+ Например, <package role="port">lang/gcc34</package> устанавливает
файлы info в
<filename>PREFIX/INFO_PATH/gcc34</filename>,
и в <varname>INFO</varname> будет что-то вроде этого:</para>
@@ -4205,7 +4176,7 @@ ${MANPREFIX}/man/de/man3/baz.3.gz</programlisting>
<entry><varname>WITH_OPENSSL_PORT</varname></entry>
<entry>Устанавливает версию OpenSSL из
- <package>security/openssl</package>,
+ <package role="port">security/openssl</package>,
даже если в базовой системе последняя версия.</entry>
</row>
</tbody>
@@ -4417,7 +4388,7 @@ CONFIGURE_ARGS+= --without-postgres
.endif
.if ${PORT_OPTIONS:MICU}
-LIB_DEPENDS+= icuuc:${PORTSDIR}/devel/icu
+LIB_DEPENDS+= libicuuc.so:${PORTSDIR}/devel/icu
.endif
.if ! ${PORT_OPTIONS:MEXAMPLES}
@@ -4752,6 +4723,24 @@ USES+= gmake
CFLAGS+= -DTEST
.endif</programlisting>
+ <para>Если установлена <varname>X_ABOVEVARIABLE_OFF</varname>,
+ то флаг <literal>ABOVEVARIABLE</literal> будет автоматически
+ выставлен при выключенном параметре <literal>X</literal>.
+ Например:</para>
+
+ <programlisting>OPTIONS_DEFINE= OPT1
+OPT1_USES_OFF=gmake</programlisting>
+
+ <para>соответствует:</para>
+
+ <programlisting>OPTIONS_DEFINE= OPT1
+
+.include &lt;bsd.port.options.mk&gt;
+
+.if ! ${PORT_OPTIONS:MOPT1}
+USES+= gmake
+.endif</programlisting>
+
<para>Для любого из следующих типов зависимости:</para>
<itemizedlist>
@@ -4801,6 +4790,24 @@ OPT1_LIB_DEPENDS= liba.so:${PORTSDIR}/devel/a</programlisting>
.if ${PORT_OPTIONS:MOPT1}
LIB_DEPENDS+= liba.so:${PORTSDIR}/devel/a
.endif</programlisting>
+
+ <para>Если установлена <varname>X_ABOVEVARIABLE_OFF</varname>,
+ то зависимость типа <literal>ABOVEVARIABLE</literal> будет
+ добавлена при выключенном параметре <literal>X</literal>.
+ Например:</para>
+
+ <programlisting>OPTIONS_DEFINE= OPT1
+OPT1_LIB_DEPENDS_OFF= liba.so:${PORTSDIR}/devel/a</programlisting>
+
+ <para>соответствует:</para>
+
+ <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>
@@ -4924,8 +4931,15 @@ PORTVERSION= 1.0</programlisting>
<para>Используйте макросы, которые есть в файле
<filename>bsd.port.mk</filename> для обеспечения правильных прав
- доступа и владения файлов в своих целях
- <buildtarget>*-install</buildtarget>.</para>
+ доступа файлов в целях <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>
@@ -4987,23 +5001,35 @@ PORTVERSION= 1.0</programlisting>
<literal>post-install</literal>. К примеру:</para>
<programlisting>post-install:
- ${STRIP_CMD} ${PREFIX}/bin/xdl</programlisting>
+ ${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;.
- Если утилита не выдаст строку <literal>not stripped</literal>, то
- файл уже обработан. Кроме того, &man.strip.1; не будет обрабатывать
- программу, отладочная информация из которой уже удалена; вместо этого
- утилита просто завершит свою работу.</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>Иногда существует необходимость в установке большого количества
- файлов с сохранением их иерархической организации, т.е. в копировании
+ <para>Иногда должно быть установлено большое количество файлов
+ с сохранением их иерархической организации. Например, копирование
дерева каталогов целиком из <varname>WRKSRC</varname> в целевой
- каталог внутри <varname>PREFIX</varname>.</para>
+ каталог внутри <varname>PREFIX</varname>. Обратите внимание,
+ что <varname>PREFIX</varname>, <varname>EXAMPLESDIR</varname>,
+ <varname>DATADIR</varname> и другие переменные пути всегда
+ должны предваряться <varname>STAGEDIR</varname>, чтобы не
+ ломать staging (смотрите <xref linkend="staging"/>).</para>
<para>Для этой ситуации существует два макроса. Преимущество от
использования этих макросов вместо команды <command>cp</command>
@@ -5017,16 +5043,16 @@ PORTVERSION= 1.0</programlisting>
<filename>PREFIX/share</filename>.</para>
<programlisting>post-install:
- ${MKDIR} ${EXAMPLESDIR}
- (cd ${WRKSRC}/examples &amp;&amp; ${COPYTREE_SHARE} . ${EXAMPLESDIR})</programlisting>
+ ${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
+ (cd ${WRKSRC}/examples &amp;&amp; ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR})</programlisting>
<para>В этом примере устанавливается содержимое каталога
<filename>examples</filename> из установочных файлов производителя
в надлежащее место для примеров вашего порта.</para>
<programlisting>post-install:
- ${MKDIR} ${DATADIR}/summer
- (cd ${WRKSRC}/temperatures &amp;&amp; ${COPYTREE_SHARE} "June July August" ${DATADIR}/summer)</programlisting>
+ ${MKDIR} ${STAGEDIR}${DATADIR}/summer
+ (cd ${WRKSRC}/temperatures &amp;&amp; ${COPYTREE_SHARE} "June July August" ${STAGEDIR}${DATADIR}/summer)</programlisting>
<para>А в этом примере будут установлены данные летних месяцев в
подкаталог <filename>summer</filename> каталога
@@ -5039,14 +5065,19 @@ PORTVERSION= 1.0</programlisting>
использовать следующую команду.</para>
<programlisting>post-install:
- ${MKDIR} ${EXAMPLESDIR}
+ ${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
(cd ${WRKSRC}/examples &amp;&amp; \
- ${COPYTREE_SHARE} . ${EXAMPLESDIR} "! -name Makefile")</programlisting>
-
- <para>Обратите внимание, что эти макросы не производят добавление
- устанавливаемых файлов в <filename>pkg-plist</filename>. Вам все
- еще нужно их перечислить.</para>
-
+ ${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">
@@ -5067,16 +5098,17 @@ PORTVERSION= 1.0</programlisting>
установленные одновременно, то вы можете использовать полное имя
<varname>PKGNAME</varname>.</para>
- <para>Сделайте установку документации зависящей от параметра
- <literal>DOCS</literal> для того, чтобы пользователи могли
- выключить это в файле <filename>/etc/make.conf</filename>, как
- здесь:</para>
+ <para>Поскольку устанавливаются только файлы, перечисленные в
+ <filename>pkg-plist</filename>, безопасным способом будет
+ устанавливать документацию в <varname>STAGEDIR</varname>
+ всегда (смотрите <xref linkend="staging"/>). Следовательно,
+ блоки <literal>.if</literal> нужны только для файлов
+ достаточно большого размера, установка которых влечёт
+ значительные накладные расходы на операции ввода/вывода.</para>
<programlisting>post-install:
-.if ${PORT_OPTIONS:MDOCS}
- ${MKDIR} ${DOCSDIR}
- ${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${DOCSDIR}
- .endif</programlisting>
+ ${MKDIR} ${STAGEDIR}${DOCSDIR}
+ ${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${STAGEDIR}${DOCSDIR}</programlisting>
<para>Вот несколько полезных переменных и то, как они преобразуются по
умолчанию при использовании в <filename>Makefile</filename>:</para>
@@ -5166,10 +5198,10 @@ PORTVERSION= 1.0</programlisting>
<varname>EXAMPLESDIR</varname> являются <varname>PORTDATA</varname>
и <varname>PORTEXAMPLES</varname> соответственно.</para>
- <para>Кроме того, вы можете использовать файл
- <filename>pkg-message</filename> для вывода сообщений во
- время установки. За подробной информацией обратитесь к <link linkend="porting-message">разделу об использовании
- <filename>pkg-message</filename></link>.
+ <para>Во время установки выводится содержимое
+ <filename>pkg-message</filename>. За подробной информацией
+ обратитесь к <link linkend="porting-message">разделу об
+ использовании <filename>pkg-message</filename></link>.
Файл <filename>pkg-message</filename> не нужно добавлять в
<filename>pkg-plist</filename>.</para>
</note>
@@ -5212,6 +5244,72 @@ PORTVERSION= 1.0</programlisting>
создании порта. Этот раздел описывает наиболее часто встречающиеся из
них.</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>
@@ -5248,10 +5346,10 @@ PORTVERSION= 1.0</programlisting>
добры перепроверить, т.к. часто это вовсе не является необходимым
и может быть решено иначе с помощью <literal>-rpath</literal>
или установки <envar>LD_RUN_PATH</envar> во время компоновки (для
- примера смотрите <package>lang/moscow_ml</package>),
+ примера смотрите <package role="port">lang/moscow_ml</package>),
или с помощью сценария-обёртки, который выставляет
<varname>LD_LIBRARY_PATH</varname> перед запуском исполняемого файла
- как это делает <package>www/seamonkey</package>.</para>
+ как это делает <package role="port">www/seamonkey</package>.</para>
<para>При установке 32-разрядных библиотек на 64-разрядной системе
используйте вместо этого <varname>USE_LDCONFIG32</varname>.</para>
@@ -5268,7 +5366,8 @@ PORTVERSION= 1.0</programlisting>
</sect1>
<sect1 xml:id="porting-restrictions">
- <title>Порты с ограничениями на распространение</title>
+ <title>Порты с ограничениями на распространение или с
+ правовым обременением</title>
<para>Лицензии бывают разных видов, и некоторые накладывают ограничение
на то, как приложение может быть оформлено в виде пакета, может ли
@@ -5277,7 +5376,7 @@ PORTVERSION= 1.0</programlisting>
<important>
<para>На вас, как на человека, портирующего приложение, ложится
обязанность прочесть лицензионные соглашения на программное
- обеспечение и удостовериться, что проект FreeBSD не будет являться
+ обеспечение и удостовериться, что проект &os; не будет являться
их нарушителем, если будет заниматься распространением исходного
кода или в бинарном виде по FTP/HTTP или на CD-ROM. Если
у вас возникли сомнения, то, пожалуйста, обратитесь в
@@ -5375,14 +5474,33 @@ PORTVERSION= 1.0</programlisting>
противном случае она пуста. Если ограничены в распространении лишь
некоторые из дистрибутивных файлов, то в этой переменной задаётся их
список.</para>
+ </sect2>
- <para>Обратите внимание, что при включении порта в дерево исходных
- текстов системы коммиттер должен добавить запись в файл
- <filename>/usr/ports/LEGAL</filename> для каждого из перечисленных
- файлов, в точности описав, что подразумевают ограничения.</para>
+ <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>Предпочтительным способом реализации утверждения "архивы
@@ -5415,20 +5533,14 @@ IGNORE= may not be redistributed because of licensing reasons. Please vi
<acronym>CPU</acronym>, тем самым делая построение портов более
быстрым и эффективным.</para>
- <para>Это достигается путем передачи флага <varname>-jX</varname>
- команде &man.make.1;. К сожалению, не все порты поддерживают
- параллельную сборку достаточно хорошо. Поэтому требуется включать
- этот механизм явным образом путем добавления строки
- <literal>MAKE_JOBS_SAFE=yes</literal> в <filename>Makefile</filename>
- где-нибудь после раздела с объявлениями зависимостей.</para>
-
- <para>Другой опцией управления этим механизмом с точки зрения
- сопровождающего является <varname>MAKE_JOBS_UNSAFE=yes</varname>.
+ <para>Это достигается путём передачи флага <varname>-jX</varname>
+ команде &man.make.1;. Такое построение портов является
+ поведением по умолчанию. К сожалению, не все порты поддерживают
+ параллельную сборку достаточно хорошо, и поэтому может
+ потребоваться выключить этот механизм явным образом путём
+ добавления переменной <literal>MAKE_JOBS_UNSAFE=yes</literal>.
Эта переменная используется в случае, когда известно, что порт
- ломается с <varname>-jX</varname>, и пользователь форсирует
- использование многопроцессорной компиляции для всех портов с
- переменной <literal>FORCE_MAKE_JOBS=yes</literal> в
- <filename>/etc/make.conf</filename>.</para>
+ ломается с <varname>-jX</varname>.</para>
</sect2>
<sect2 xml:id="using-make">
@@ -5613,6 +5725,38 @@ IGNORE= may not be redistributed because of licensing reasons. Please vi
</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>,
@@ -5628,7 +5772,8 @@ IGNORE= may not be redistributed because of licensing reasons. Please vi
в нижнем регистре в <varname>PLIST_SUB</varname> и должно
использоваться, если порт устанавливает файлы
<literal>*.cmake</literal> в зависимости от типа построения
- (для примера посмотрите на <package>deskutils/strigi</package>). Следует
+ (для примера посмотрите на
+ <package role="port">deskutils/strigi</package>). Следует
учитывать, что некоторые проекты могут определять собственные
профили построения и/или форсировать конкретный тип построения
через установку <literal>CMAKE_BUILD_TYPE</literal> в файлах
@@ -5917,7 +6062,7 @@ CMAKE_SOURCE_PATH= &dollar;{WRKSRC}/subproject</programlisting>
<para>Если для вашего порта требуется <literal>gettext</literal>,
добавьте <literal>USES= gettext</literal>, и ваш порт
- унаследует зависимость от <package>devel/gettext</package>.
+ унаследует зависимость от <package role="port">devel/gettext</package>.
<xref linkend="uses-values"/> содержит перечень других
значений для использования <literal>gettext</literal>.</para>
@@ -6002,7 +6147,8 @@ PLIST_SUB+= NLS="@comment "
перечисленные в
<filename>PORTSDIR/Templates/BSD.local.dist</filename>.
Каталоги для
- множества других языков управляются с помощью порта <package>devel/gettext</package>. Обратите внимание
+ множества других языков управляются с помощью порта
+ <package role="port">devel/gettext</package>. Обратите внимание
на его <filename>pkg-plist</filename> и посмотрите, куда данный
порт собирается установить файлы каталогов сообщений для
единственного в своем роде языка.</para>
@@ -6170,6 +6316,18 @@ PLIST_SUB+= NLS="@comment "
<programlisting>p5-IO-Tee&gt;=0.64:${PORTSDIR}/devel/p5-IO-Tee</programlisting>
</example>
+
+ <para>Для портов Perl, которые устанавливают страницы справочника,
+ в <filename>pkg-plist</filename> можно использовать макрос
+ <varname>PERL5_MAN<replaceable>x</replaceable></varname> (где
+ <replaceable>x</replaceable> принимает значение от
+ <literal>1</literal> до <literal>9</literal>). Например,</para>
+
+ <programlisting>lib/perl5/5.14/man/man3/AnyEvent::I3.3.gz</programlisting>
+
+ <para>можно заменить на</para>
+
+ <programlisting>%%PERL5_MAN3%%/AnyEvent::I3.3.gz</programlisting>
</sect1>
<sect1 xml:id="using-x11">
@@ -6250,9 +6408,9 @@ USE_XORG= x11 xpm</programlisting>
<para>Если вашему порту требуется Motif, задайте переменную
<varname>USES= motif</varname> в файле <filename>Makefile</filename>.
Реализация Motif, используемая по умолчанию, находится в
- <package>x11-toolkits/open-motif</package>.
+ <package role="port">x11-toolkits/open-motif</package>.
Пользователи вместо этого могут выбрать
- <package>x11-toolkits/lesstif</package> через
+ <package role="port">x11-toolkits/lesstif</package> через
установку переменной <varname>WANT_LESSTIF</varname>.</para>
<para>Переменная <varname>MOTIFLIB</varname> будет установлена в
@@ -6392,9 +6550,9 @@ USE_XORG= x11 xpm</programlisting>
<title>Использование GNOME</title>
<para>Для задания того, какие компоненты GNOME использует конкретный
- порт, проект FreeBSD/GNOME использует собственный набор переменных.
- На странице проекта FreeBSD/GNOME
- размещён <link xlink:href="http://www.FreeBSD.org/gnome/docs/porting.html">
+ порт, проект &os;/GNOME использует собственный набор переменных.
+ На странице проекта &os;/GNOME размещён
+ <link xlink:href="http://www.FreeBSD.org/gnome/docs/porting.html">
исчерпывающий список этих переменных</link>.</para>
</sect1>
@@ -6411,16 +6569,6 @@ USE_XORG= x11 xpm</programlisting>
<tgroup cols="2">
<tbody>
<row>
- <entry><varname>USE_QT_VER</varname></entry>
-
- <entry>Порт использует инструментальный пакет Qt.
- Единственным возможным значением является
- <literal>3</literal>. Соответствующие
- параметры передаются в сценарий <command>configure</command>
- и <command>make</command>.</entry>
- </row>
-
- <row>
<entry><varname>USE_QT4</varname></entry>
<entry>Указывает инструменты и библиотеки в качестве
@@ -6536,19 +6684,6 @@ USE_XORG= x11 xpm</programlisting>
</tgroup>
</table>
- <para>Когда переменная <varname>USE_QT_VER</varname> определена
- со значением <literal>3</literal>,
- сценарию <command>configure</command> можно передавать некоторые
- полезные настройки:</para>
-
- <programlisting>CONFIGURE_ARGS+= --with-qt-includes=${QT_PREFIX}/include \
- --with-qt-libraries=${QT_PREFIX}/lib \
- --with-extra-libs=${LOCALBASE}/lib \
- --with-extra-includes=${LOCALBASE}/include
-CONFIGURE_ENV+= MOC="${MOC}" LIBS="${QTCFGLIBS}" \
- QTDIR="${QT_PREFIX}" KDEDIR="${KDE_PREFIX}"
-CPPFLAGS+= ${QTCPPFLAGS}</programlisting>
-
<para>При заданной переменной <varname>USE_QT4</varname>
применяются следующие настройки:</para>
@@ -6566,7 +6701,7 @@ PLIST_SUB+= QT_INCDIR_REL=${QT_INCDIR_REL} \
</sect2>
<sect2 xml:id="qt4-components">
- <title>Выбор компонентов (только для Qt 4.x)</title>
+ <title>Выбор компонентов</title>
<para>В переменной <varname>USE_QT4</varname> должны указываться
зависимости от отдельных инструментов и библиотек Qt 4. К каждому
@@ -6737,27 +6872,61 @@ PLIST_SUB+= QT_INCDIR_REL=${QT_INCDIR_REL} \
</example>
</sect2>
- <sect2 xml:id="qt-additional">
- <title>Прочие соображения</title>
+ <sect2 xml:id="using-qmake">
+ <title>Использование <command>qmake</command></title>
+
+ <table frame="none">
+ <title>Переменные для портов, использующих
+ <command>qmake</command></title>
+
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>Название</entry>
+ <entry>Описание</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><varname>QMAKE_ARGS</varname></entry>
+ <entry>Спефицичные для порта флаги
+ <application>QMake</application> для передачи
+ программе <command>qmake</command>.</entry>
+ </row>
- <para>Если вместе с приложением вместо <filename>configure</filename>
+ <row>
+ <entry><varname>QMAKE_ENV</varname></entry>
+ <entry>Переменные окружения, устанавливаемые для
+ программы <command>qmake</command>. По умолчанию
+ соответствует значению
+ <literal>&dollar;{CONFIGURE_ENV}</literal>.</entry>
+ </row>
+
+ <row>
+ <entry><varname>QMAKE_PRO</varname></entry>
+ <entry>Название файла проекта <filename>.pro</filename>.
+ По умолчанию принимает пустое значение (с
+ использованием автоопределения).</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <para>Если вместе с приложением вместо <filename>configure</filename>
поставляется файл <filename>.pro</filename>, вы можете использовать
следующее:</para>
- <programlisting>HAS_CONFIGURE= yes
+ <programlisting>USES= qmake
+USE_QT4= qmake_build</programlisting>
-do-configure:
- @cd ${WRKSRC} &amp;&amp; ${SETENV} ${CONFIGURE_ENV} \
- ${QMAKE} ${QMAKEFLAGS} PREFIX=${PREFIX} texmaker.pro</programlisting>
-
- <para>Обратите внимание на сходство со строкой <command>qmake</command>
- из прилагаемого сценария <filename>BUILD.sh</filename>. Передача
- <varname>CONFIGURE_ENV</varname> обеспечивает видимость переменной
- <varname>QMAKESPEC</varname> для <command>qmake</command>, без
- которой команда не может работать. <command>qmake</command>
- порождает стандартные Makefile, и, таким образом, отпадает
- необходимость в написании своих собственных целей
- <buildtarget>build</buildtarget>.</para>
+ <para><literal>USES=qmake</literal> указывает порту на
+ использование <command>qmake</command> в процессе
+ конфигурации. Обратите внимание, что
+ <literal>USES=qmake</literal> не подразумевает зависимость
+ от Qt 4 <command>qmake</command>. Для этого в значении
+ <literal>USE_QT4</literal> должен присутствовать компонент
+ <literal>qmake_build</literal>.</para>
<para>Приложения Qt часто пишутся в кроссплатформенной манере, и
X11/Unix часто не является для них платформой разработки, что в
@@ -6774,8 +6943,8 @@ do-configure:
добавила каталоги в пути поиска заголовочных файлов и библиотек
через командную строку. К примеру:</para>
- <programlisting>${QMAKE} ${QMAKEFLAGS} PREFIX=${PREFIX} INCLUDEPATH+=${LOCALBASE}/include \
- LIBS+=-L${LOCALBASE}/lib sillyapp.pro</programlisting>
+ <programlisting>QMAKE_ARGS+= INCLUDEPATH+=${LOCALBASE}/include \
+ LIBS+=-L${LOCALBASE}/lib</programlisting>
</listitem>
<listitem>
@@ -6783,7 +6952,7 @@ do-configure:
Иногда данные, такие как иконки и файлы .desktop,
устанавливаются по умолчанию в каталоги, которые не
просматриваются XDG-совместимыми приложениями. Примером
- является <package>editors/texmaker</package> -
+ является <package role="port">editors/texmaker</package> -
взгляните на <filename>patch-texmaker.pro</filename> из каталога
<filename>files</filename> этого порта, который можно взять
в качестве шаблона исправления этого непосредственно в файле
@@ -6951,7 +7120,7 @@ do-configure:
</row>
<row>
- <entry>smokekde<literal/></entry>
+ <entry><literal>smokekde</literal></entry>
<entry>Библиотеки KDE SMOKE</entry>
</row>
@@ -7006,7 +7175,8 @@ USE_QT4= moc_build qmake_build rcc_build uic_build</programlisting>
<para>В Коллекции Портов присутствуют несколько JDK различных
разработчиков и разных версий. Если ваш порт должен использовать
одну из этих версий, то вы должны указать, какую именно. Самой
- последней версией и версией по умолчанию является <package>java/openjdk6</package>.</para>
+ последней версией и версией по умолчанию является
+ <package role="port">java/openjdk6</package>.</para>
<table frame="none">
<title>Переменные, которые которые могут задаваться портами,
@@ -7321,8 +7491,35 @@ USE_QT4= moc_build qmake_build rcc_build uic_build</programlisting>
использовать уже установленные (из каталога
<filename>${JAVAJARDIR}</filename>).</para>
+ <para>При портировании приложения &java;, для запуска сервиса
+ которого требуется сервер приложений, такой как
+ <package role="port">www/tomcat7</package>, для производителя
+ в порядке вещей является распространение файла
+ <filename>.war</filename>. Файл <filename>.war</filename>
+ &mdash; это Веб-приложение АРхивированное и оно распаковывается
+ при вызове данным приложением. Избегайте добавлять файлы
+ <filename>.war</filename> в <filename>pkg-plist</filename>.
+ Это не является наилучшим решением. Сервер приложений
+ производит расширение архива <filename>war</filename> без
+ должной его очистки при удалении порта. Более подходящим
+ способом работы с этим файлом будет распаковать архив,
+ установить файлы и добавить их в
+ <filename>pkg-plist</filename>.</para>
+
+ <programlisting>TOMCATDIR= ${LOCALBASE}/apache-tomcat-7.0
+WEBAPPDIR= myapplication
+
+post-extract:
+ @${MKDIR} ${WRKDIR}/${PORTDIRNAME}
+ @${TAR} xf ${WRKDIR}/myapplication.war -C ${WRKDIR}/${PORTDIRNAME}
+
+do-install:
+ cd ${WRKDIR} &amp;&amp; \
+ ${INSTALL} -d -o ${WWWOWN} -g ${WWWGRP} ${TOMCATDIR}/webapps/${PORTDIRNAME}
+ @cd ${WRKDIR}/${PORTDIRNAME} &amp;&amp; ${COPYTREE_SHARE} \* ${WEBAPPDIR}/${PORTDIRNAME}</programlisting>
+
<para>Вне зависимости от типа вашего порта (библиотека это или
- приложение), дополнительная документация должна быть устанавливаться
+ приложение), дополнительная документация должна устанавливаться
<link linkend="install-documentation">в тоже самое место</link>, что
и для других портов. Известно, что в зависимости от используемой
версии JDK утилита JavaDoc генерирует различные наборы файлов. Для
@@ -7357,7 +7554,8 @@ USE_QT4= moc_build qmake_build rcc_build uic_build</programlisting>
в файле <filename>bsd.java.mk</filename>. Если вы предположите, что
вашему порту требуется менее тривиальная поддержка Java, пожалуйста,
взгляните сначала на <link xlink:href="http://svnweb.FreeBSD.org/ports/head/Mk/bsd.java.mk?view=markup">журнал
- изменений bsd.java.mk в SVN</link>, так как для
+ изменений bsd.java.mk в
+ <application>Subversion</application></link>, так как для
документирования последних изменений требуется какое-то время.
Затем, если вы думаете, что не хватающая вам поддержка окажется
полезной для многих других портов Java, обсудите ваш вопрос в
@@ -7784,23 +7982,6 @@ _DOCSDIR= .
</entry>
</row>
- <row>
- <entry><varname>USE_TWISTED</varname></entry>
-
- <entry>Добавить зависимость от twistedCore. Перечень требуемых
- компонентов может быть указан как значение этой переменной.
- Пример: <literal>web lore pair flow</literal></entry>
- </row>
-
- <row>
- <entry><varname>USE_ZOPE</varname></entry>
-
- <entry>Добавить зависимость от Zope, платформы веб приложений.
- Изменяет зависимость от Python на Python 2.7. Переменная
- <varname>ZOPEBASEDIR</varname> содержит директорию с
- установленным Zope.</entry>
- </row>
-
</tbody>
</tgroup>
</table>
@@ -7808,6 +7989,32 @@ _DOCSDIR= .
<para>Полный перечень доступных переменных можно найти в
<filename>/usr/ports/Mk/bsd.python.mk</filename>.</para>
+ <para>Некоторые приложения на Python заявляют о поддержке
+ <varname>DESTDIR</varname> (требуется для staging), которая
+ не работает (в частности, у Mailman до версии 2.1.16).
+ Ограничение можно обойти путём перекомпиляции сценариев.
+ Например, это можно выполнить в цели
+ <buildtarget>post-build</buildtarget>. С учётом того, что после
+ установки предполагаемое место размещения сценариев Python
+ будет находиться в <varname>PYTHONPREFIX_SITELIBDIR</varname>,
+ можно применить следующее решение:</para>
+
+ <programlisting>(cd ${STAGEDIR}${PREFIX} \
+ &amp;&amp; ${PYTHON_CMD} ${PYTHON_LIBDIR}/compileall.py \
+ -d ${PREFIX} -f ${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;})</programlisting>
+
+ <para>Эта команда перекомпилирует исходный текст с заменой путей
+ на относительные к каталогу сборки, а также дописывает значение
+ <varname>PREFIX</varname> перед именем файла, записанного в
+ выходном файле с промежуточным представлением, с использованием
+ <literal>-d</literal>. <literal>-f</literal> требуется для
+ безусловной перекомпиляции, а <literal>:S;${PREFIX}/;;</literal>
+ удаляет префиксы из значения переменной
+ <varname>PYTHONPREFIX_SITELIBDIR</varname>, чтобы сделать его
+ относительным к <varname>PREFIX</varname>.</para>
+
+ <para>Для этого требуется Python&nbsp;2.7 или выше. Это не
+ работает с Python&nbsp;2.6.</para>
</sect1>
<sect1 xml:id="using-tcl">
@@ -8051,65 +8258,113 @@ _DOCSDIR= .
<para>Переменная <varname>USE_SDL</varname> используется для
автоматической настройки зависимостей для портов, использующих
библиотеки на основе SDL, такие как
- <package>devel/sdl12</package> или
- <package>x11-toolkits/sdl_gui</package>.</para>
+ <package role="port">devel/sdl12</package> или
+ <package role="port">graphics/sdl_image</package>.</para>
- <para>На данный момент распознаются следующие SDL-библиотеки:</para>
+ <para>Для версии 1.2
+ на данный момент распознаются следующие SDL-библиотеки:</para>
<itemizedlist>
- <listitem>
- <para>sdl: <package>devel/sdl12</package></para>
- </listitem>
+ <listitem>
+ <para>sdl: <package
+ role="port">devel/sdl12</package></para>
+ </listitem>
- <listitem>
- <para>gfx: <package>graphics/sdl_gfx</package></para>
- </listitem>
+ <listitem>
+ <para>console: <package
+ role="port">devel/sdl_console</package></para>
+ </listitem>
- <listitem>
- <para>gui: <package>x11-toolkits/sdl_gui</package></para>
- </listitem>
+ <listitem>
+ <para>gfx: <package
+ role="port">graphics/sdl_gfx</package></para>
+ </listitem>
- <listitem>
- <para>image: <package>graphics/sdl_image</package></para>
- </listitem>
+ <listitem>
+ <para>image: <package
+ role="port">graphics/sdl_image</package></para>
+ </listitem>
- <listitem>
- <para>ldbad: <package>devel/sdl_ldbad</package></para>
- </listitem>
+ <listitem>
+ <para>mixer: <package
+ role="port">audio/sdl_mixer</package></para>
+ </listitem>
- <listitem>
- <para>mixer: <package>audio/sdl_mixer</package></para>
- </listitem>
+ <listitem>
+ <para>mm: <package
+ role="port">devel/sdlmm</package></para>
+ </listitem>
- <listitem>
- <para>mm: <package>devel/sdlmm</package></para>
- </listitem>
+ <listitem>
+ <para>net: <package
+ role="port">net/sdl_net</package></para>
+ </listitem>
- <listitem>
- <para>net: <package>net/sdl_net</package></para>
- </listitem>
+ <listitem>
+ <para>pango: <package
+ role="port">x11-toolkits/sdl_pango</package></para>
+ </listitem>
- <listitem>
- <para>sound: <package>audio/sdl_sound</package></para>
- </listitem>
+ <listitem>
+ <para>sound: <package
+ role="port">audio/sdl_sound</package></para>
+ </listitem>
- <listitem>
- <para>ttf: <package>graphics/sdl_ttf</package></para>
- </listitem>
+ <listitem>
+ <para>ttf: <package
+ role="port">graphics/sdl_ttf</package></para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Для версии 2.0
+ на данный момент распознаются следующие SDL-библиотеки:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>sdl: <package
+ role="port">devel/sdl20</package></para>
+ </listitem>
+
+ <listitem>
+ <para>gfx: <package
+ role="port">graphics/sdl2_gfx</package></para>
+ </listitem>
+
+ <listitem>
+ <para>image: <package
+ role="port">graphics/sdl2_image</package></para>
+ </listitem>
+
+ <listitem>
+ <para>mixer: <package
+ role="port">audio/sdl2_mixer</package></para>
+ </listitem>
+
+ <listitem>
+ <para>net: <package
+ role="port">net/sdl2_net</package></para>
+ </listitem>
+
+ <listitem>
+ <para>ttf: <package
+ role="port">graphics/sdl2_ttf</package></para>
+ </listitem>
</itemizedlist>
<para>Таким образом, если порт имеет зависимость от
- <package>net/sdl_net</package> и
- <package>audio/sdl_mixer</package>, то строка будет
+ <package role="port">net/sdl_net</package> и
+ <package role="port">audio/sdl_mixer</package>, то строка будет
следующей:</para>
<programlisting>USE_SDL= net mixer</programlisting>
- <para>Зависимость от порта <package>devel/sdl12</package>, который требуется для <package>net/sdl_net</package> и <package>audio/sdl_mixer</package> будет также автоматически
- добавлен.</para>
+ <para>Зависимость от порта <package role="port">devel/sdl12</package>,
+ который требуется для <package role="port">net/sdl_net</package>
+ и <package role="port">audio/sdl_mixer</package>, будет также
+ автоматически добавлен.</para>
- <para>Если вы используете <varname>USE_SDL</varname>, то
- он автоматически:</para>
+ <para>Если вы используете <varname>USE_SDL</varname> с элементами
+ SDL 1.2, то он автоматически:</para>
<itemizedlist>
<listitem>
@@ -8129,6 +8384,27 @@ _DOCSDIR= .
</listitem>
</itemizedlist>
+ <para>Если вы используете <varname>USE_SDL</varname> с элементами
+ SDL 2.0, то он автоматически:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Добавляет зависимость от
+ <application>sdl2-config</application> к
+ <varname>BUILD_DEPENDS</varname></para>
+ </listitem>
+
+ <listitem>
+ <para>Добавляет переменную <varname>SDL2_CONFIG</varname> к
+ <varname>CONFIGURE_ENV</varname></para>
+ </listitem>
+
+ <listitem>
+ <para>Добавляет зависимости от указанных библиотек к
+ <varname>LIB_DEPENDS</varname></para>
+ </listitem>
+ </itemizedlist>
+
<para>Для проверки наличия библиотеки SDL вы можете делать это при
помощи переменной <varname>WANT_SDL</varname>:</para>
@@ -8233,19 +8509,22 @@ USE_SDL+= mixer
<row>
<entry><literal>2.4</literal></entry>
- <entry><package>x11-toolkits/wxgtk24</package></entry>
+ <entry><package
+ role="port">x11-toolkits/wxgtk24</package></entry>
</row>
<row>
<entry><literal>2.6</literal></entry>
- <entry><package>x11-toolkits/wxgtk26</package></entry>
+ <entry><package
+ role="port">x11-toolkits/wxgtk26</package></entry>
</row>
<row>
<entry><literal>2.8</literal></entry>
- <entry><package>x11-toolkits/wxgtk28</package></entry>
+ <entry><package
+ role="port">x11-toolkits/wxgtk28</package></entry>
</row>
</tbody>
</tgroup>
@@ -8845,19 +9124,22 @@ PLIST_SUB+= VERSION="${VER_STR}"
<row>
<entry><literal>4.0</literal></entry>
- <entry><package>lang/lua4</package></entry>
+ <entry><package
+ role="port">lang/lua4</package></entry>
</row>
<row>
<entry><literal>5.0</literal></entry>
- <entry><package>lang/lua50</package></entry>
+ <entry><package
+ role="port">lang/lua50</package></entry>
</row>
<row>
<entry><literal>5.1</literal></entry>
- <entry><package>lang/lua</package></entry>
+ <entry><package
+ role="port">lang/lua</package></entry>
</row>
</tbody>
</tgroup>
@@ -9335,55 +9617,205 @@ CFLAGS+= -DLUA_VERSION_STRING="${VER_STR}"
</sect2>
</sect1>
+ <sect1 xml:id="using-iconv">
+ <title>Использование <command>iconv</command></title>
+
+ <para>После 10-08-2013 (<revnumber>254273</revnumber>)
+ в составе &os;&nbsp; 10-CURRENT и более новых версий имеется
+ собственный <command role="port">iconv</command>. В более
+ ранних версиях дополнительной зависимостью выступал
+ <package role="port">converters/libiconv</package>.</para>
+
+ <para>Для программного обеспечения, которому нужен
+ <command>iconv</command>, определите
+ <literal>USES=iconv</literal>. Версии &os; до
+ 10-CURRENT от 13-08-2013 (<revnumber>254273</revnumber>) не
+ имеют собственного <command>iconv</command>. На этих более
+ ранных версиях будет автоматически добавлена зависимость от
+ <package role="port">converters/libiconv</package>.</para>
+
+ <para>Когда порт задаёт <literal>USES=iconv</literal>, становятся
+ доступными следующие переменные:</para>
+
+ <informaltable frame="none" pgwide="0">
+ <tgroup cols="4">
+ <thead>
+ <row>
+ <entry>Имя переменной</entry>
+ <entry>Назначение</entry>
+ <entry>Значение до &os;&nbsp;10-CURRENT
+ <revnumber>254273</revnumber> (13-08-2013)</entry>
+ <entry>Значение после &os;&nbsp;10-CURRENT
+ <revnumber>254273</revnumber> (13-08-2013)</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><varname>ICONV_CMD</varname></entry>
+ <entry>Каталог размещения двоичного файла
+ <command>iconv</command></entry>
+ <entry><literal>${LOCALBASE}/bin/iconv</literal></entry>
+ <entry><filename>/usr/bin/iconv</filename></entry>
+ </row>
+
+ <row>
+ <entry><varname>ICONV_LIB</varname></entry>
+ <entry>Аргумент <command>ld</command> для компоновки с
+ <filename>libiconv</filename> (если нужно)</entry>
+ <entry><literal>-liconv</literal></entry>
+ <entry>(пусто)</entry>
+ </row>
+
+ <row>
+ <entry><varname>ICONV_PREFIX</varname></entry>
+ <entry>Каталог размещения реализации
+ <command>iconv</command> (используется для сценариев
+ конфигурации)</entry>
+ <entry><literal>${LOCALBASE}</literal></entry>
+ <entry><filename>/usr</filename></entry>
+ </row>
+
+ <row>
+ <entry><varname>ICONV_CONFIGURE_ARG</varname></entry>
+ <entry>Параметр предварительно собранной конфигурации
+ для сценариев конфигурации</entry>
+ <entry><literal>--with-libiconv-prefix=${LOCALBASE}</literal></entry>
+ <entry>(пусто)</entry>
+ </row>
+
+ <row>
+ <entry><varname>ICONV_CONFIGURE_BASE</varname></entry>
+ <entry>Параметр предварительно собранной конфигурации
+ для сценариев конфигурации</entry>
+ <entry><literal>--with-libiconv=${LOCALBASE}</literal></entry>
+ <entry>(пусто)</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ <para>В следующих двух примерах демонстрируется автоматическое
+ присвоение переменным правильных значений для систем,
+ использующих <package role="port">converters/libiconv</package>
+ или собственный <command>iconv</command>.</para>
+
+ <example xml:id="iconv-simple-use">
+ <title>Простое использование <command>iconv</command></title>
+
+ <programlisting>USES= iconv
+LDFLAGS+= -L${LOCALBASE}/lib ${ICONV_LIB}</programlisting>
+ </example>
+
+ <example xml:id="iconv-configure-use">
+ <title>Использование <command>iconv</command> с
+ <command>configure</command></title>
+
+ <programlisting>USES= iconv
+CONFIGURE_ARGS+=${ICONV_CONFIGURE_ARG}</programlisting>
+ </example>
+
+ <para>Как показано выше, <varname>ICONV_LIB</varname> имеет
+ пустое значение с собственным <command>iconv</command>. Эту
+ особенность можно использовать для обнаружения собственного
+ <command>iconv</command> с соответствующими действиями.</para>
+
+ <para>Иногда в программе параметр <command>ld</command> или путь
+ поиска жёстко заданы в <filename>Makefile</filename> или
+ сценарии конфигурации. Для решения этой проблемы можно
+ использовать следующий подход:</para>
+
+ <example xml:id="iconv-reinplace">
+ <title>Исправление жёстко заданного
+ <literal>-liconv</literal></title>
+
+ <programlisting>USES= iconv
+
+post-patch:
+ @${REINPLACE_CMD} -e 's/-liconv/${ICONV_LIB}/' ${WRKSRC}/Makefile</programlisting>
+ </example>
+
+ <para>В некоторых случаях необходимо установить альтернативные
+ значения или выполнить операции в случае использования
+ собственного <command>iconv</command>. Перед проверкой
+ значения <varname>ICONV_LIB</varname> обязан быть подключён
+ <filename>bsd.port.pre.mk</filename>:</para>
+
+ <example xml:id="iconv-conditional">
+ <title>Проверка доступности собственного
+ <command>iconv</command></title>
+
+ <programlisting>USES= iconv
+
+.include &lt;bsd.port.pre.mk&gt;
+
+post-patch:
+.if empty(ICONV_LIB)
+ # обнаружен собственный iconv
+ @${REINPLACE_CMD} -e 's|iconv||' ${WRKSRC}/Config.sh
+.endif
+
+.include &lt;bsd.port.post.mk&gt;</programlisting>
+ </example>
+ </sect1>
+
<sect1 xml:id="using-xfce">
<title>Использование Xfce</title>
<para>Переменная <varname>USE_XFCE</varname> используется для
автоматической конфигурации зависимостей для портов, использующих
библиотеки или приложения на основе Xfce, такие как
- <package>x11-toolkits/libxfce4gui</package> и
- <package>x11-wm/xfce4-panel</package>.</para>
+ <package role="port">x11-toolkits/libxfce4gui</package> и
+ <package role="port">x11-wm/xfce4-panel</package>.</para>
<para>В настоящее время распознаются следующие библиотеки и приложения
Xfce:</para>
<itemizedlist>
<listitem>
- <para>libexo: <package>x11/libexo</package></para>
+ <para>libexo: <package
+ role="port">x11/libexo</package></para>
</listitem>
<listitem>
- <para>libgui: <package>x11-toolkits/libxfce4gui</package></para>
+ <para>libgui: <package
+ role="port">x11-toolkits/libxfce4gui</package></para>
</listitem>
<listitem>
- <para>libutil: <package>x11/libxfce4util</package></para>
+ <para>libutil: <package
+ role="port">x11/libxfce4util</package></para>
</listitem>
<listitem>
- <para>libmcs: <package>x11/libxfce4mcs</package></para>
+ <para>libmcs: <package
+ role="port">x11/libxfce4mcs</package></para>
</listitem>
<listitem>
- <para>mcsmanager: <package>sysutils/xfce4-mcs-manager</package></para>
+ <para>mcsmanager: <package
+ role="port">sysutils/xfce4-mcs-manager</package></para>
</listitem>
<listitem>
- <para>panel: <package>x11-wm/xfce4-panel</package></para>
+ <para>panel: <package
+ role="port">x11-wm/xfce4-panel</package></para>
</listitem>
<listitem>
- <para>thunar: <package>x11-fm/thunar</package></para>
+ <para>thunar: <package
+ role="port">x11-fm/thunar</package></para>
</listitem>
<listitem>
- <para>wm: <package>x11-wm/xfce4-wm</package></para>
+ <para>wm: <package
+ role="port">x11-wm/xfce4-wm</package></para>
</listitem>
<listitem>
- <para>xfdev: <package>dev/xfce4-dev-tools</package></para>
+ <para>xfdev: <package
+ role="port">dev/xfce4-dev-tools</package></para>
</listitem>
-
</itemizedlist>
<para>Распознаются следующие дополнительные параметры:</para>
@@ -9401,7 +9833,7 @@ CFLAGS+= -DLUA_VERSION_STRING="${VER_STR}"
</itemizedlist>
<para>Следовательно, если у порта имеется зависимость от
- <package>sysutils/xfce4-mcs-manager</package>, и
+ <package role="port">sysutils/xfce4-mcs-manager</package>, и
порт требует специальных CPPFLAGS в своем окружении configure,
то синтаксис будет следующим:</para>
@@ -9512,7 +9944,7 @@ CFLAGS+= -DLUA_VERSION_STRING="${VER_STR}"
<entry>Если переменная установлена в <literal>yes</literal>,
добавляет зависимость от порта
- <package>databases/db41</package>.
+ <package role="port">databases/db41</package>.
Также переменной можно присвоить значения: 2, 3, 40, 41,
42, 43, 44, 46, 47, 48 или 51. Вы можете объявить диапазон
принимаемых значений, <varname>USE_BDB</varname>=42+
@@ -9525,7 +9957,7 @@ CFLAGS+= -DLUA_VERSION_STRING="${VER_STR}"
<entry>Если переменная установлена в <literal>yes</literal>,
добавляет зависимость от порта
- <package>databases/mysql55-client</package>.
+ <package role="port">databases/mysql55-client</package>.
Как связанная переменная,
<varname>WANT_MYSQL_VER</varname> может быть установлена
в значение 323, 40, 41, 50, 51, 52, 55 или 60.</entry>
@@ -9535,7 +9967,7 @@ CFLAGS+= -DLUA_VERSION_STRING="${VER_STR}"
<entry><varname>USE_PGSQL</varname></entry>
<entry>Если установлена в <literal>yes</literal>, добавляет
- зависимость от порта <package>databases/postgresql90-client</package>.
+ зависимость от порта <package role="port">databases/postgresql90-client</package>.
Как связанная переменная,
<varname>WANT_PGSQL_VER</varname> может быть установлена
в значение 83, 84, 90, 91 или 92. Вы можете указать
@@ -9549,7 +9981,7 @@ CFLAGS+= -DLUA_VERSION_STRING="${VER_STR}"
<entry><varname>USE_SQLITE</varname></entry>
<entry>Если переменная имеет значение <literal>yes</literal>,
- добавляет зависимость от порта <package>databases/sqlite3</package>.
+ добавляет зависимость от порта <package role="port">databases/sqlite3</package>.
Переменная может принимать значения: 3, 2.</entry>
</row>
</tbody>
@@ -9584,14 +10016,6 @@ CFLAGS+= -DLUA_VERSION_STRING="${VER_STR}"
<literal>%%PREFIX%%</literal> и <literal>%%LOCALBASE%%</literal>.
Подробнее о <varname>SUB_LIST</varname> в <link linkend="using-sub-files">соответствующей главе</link>.</para>
- <para>До &os;&nbsp;6.1-RELEASE интеграция с &man.rcorder.8; доступна
- через использование <varname>USE_RCORDER</varname> вместо
- <varname>USE_RC_SUBR</varname>. Однако, использовать этот метод
- не нужно, если ваш порт не включает опцию по своей установке в
- основную систему или службе не нужно запускаться до выполнения
- сценария <filename>FILESYSTEMS</filename> из <filename>rc.d</filename>
- основной системы.</para>
-
<para>Начиная с &os;&nbsp;6.1-RELEASE локальные сценарии
<filename>rc.d</filename> (включая установленные из портов) включены
в общий &man.rcorder.8; основной системы.</para>
@@ -9672,11 +10096,6 @@ run_rc_command "$1"</programlisting>
<literal>_enable</literal> является обязательной; значением
по умолчанию должно быть &quot;:&quot;.</para>
- <note>
- <para>Новые сценарии следует добавлять без окончания
- <filename>.sh</filename>.</para>
- </note>
-
<sect2>
<title>Контрольный список перед внесением изменений</title>
@@ -9685,12 +10104,16 @@ run_rc_command "$1"</programlisting>
сверьтесь со следующим контрольным списком, чтобы убедиться,
что порт для этого готов.</para>
+ <para>Большинство из этих проверок умеет выполнять порт
+ <package role="port">devel/rclint</package>, но это не
+ является заменой надлежащему просмотру.</para>
+
<procedure>
<step>
<para>Если это новый файл, заканчивается ли он на
<filename>.sh</filename>? Если это так, то имя файла должно
быть изменено на <filename>file.in</filename>, поскольку
- новые файлы <filename>rc.d</filename> не могут оканчиваться
+ файлы <filename>rc.d</filename> не могут оканчиваться
на такое расширение.</para>
</step>
@@ -9717,7 +10140,7 @@ run_rc_command "$1"</programlisting>
<step>
<para>Содержит ли строка <literal>REQUIRE</literal> значение
LOGIN? Это условие обязательно для сценариев, работающих не
- из под суперпользователя. Если сценарий запускается из-под
+ из-под суперпользователя. Если сценарий запускается из-под
суперпользователя, то стоит ли его запускать до
<literal>LOGIN</literal>? Если нет, то его следует запускать
после, так чтобы мы могли свободно сгруппировать локальные
@@ -9732,7 +10155,7 @@ run_rc_command "$1"</programlisting>
<step>
<para>Убедитесь в том, что в сценарии отсутствует
- <literal>KEYWORD: FreeBSD</literal>. Это перестало быть
+ <literal>KEYWORD: &os;</literal>. Это перестало быть
нужным и нежелательно уже много лет. Это также служит
индикатором того, что новый сценарий был скопирован со
старого, поэтому особое внимание должно быть уделено при
@@ -9855,9 +10278,11 @@ run_rc_command "$1"</programlisting>
компиляции нужны файлы с исходными текстами ядра. Ниже указан
корректный способ определения, установлены ли они пользователем:</para>
- <programlisting>.if !exists(${SRC_BASE}/sys/Makefile)
-IGNORE= requires kernel sources to be installed
-.endif</programlisting>
+ <programlisting>USES= kmod</programlisting>
+
+ <para>Кроме этой проверки, <literal>kmod</literal> заботится о
+ большинстве пунктов, которые должны учитываться в этих
+ портах.</para>
</sect1>
</chapter>
@@ -9923,7 +10348,7 @@ PLIST_SUB+= X11="@comment "
<programlisting>%%X11%%bin/foo-gui</programlisting>
- <para>Эта подстановка (также, как и добавление любых <link linkend="makefile-manpages">справочных страниц</link>) будет сделана
+ <para>Эта подстановка будет сделана
между выполнением целей <buildtarget>pre-install</buildtarget> и
<buildtarget>do-install</buildtarget>, посредством чтения файла
<filename>PLIST</filename> и записью в файл
@@ -9990,7 +10415,8 @@ lib/X11/oneko/sounds/cat.au
<programlisting>@dirrmtry share/doc/gimp</programlisting>
<para>Эта команда не выведет никаких сообщений об ошибках и не вызовет
- аварийного завершения работы &man.pkg.delete.1;, даже если
+ аварийного завершения работы <command>pkg delete</command>
+ (см. &man.pkg-delete.8;), даже если
каталог <filename>${PREFIX}/share/doc/gimp</filename>
не пуст из-за того, что другие порты установили сюда какие-то
файлы.</para>
@@ -10001,7 +10427,8 @@ lib/X11/oneko/sounds/cat.au
<para>Пустым каталогам, создаваемым во время установки порта, нужно
особое внимание. Они не будут созданы при установке пакета, потому
- что пакеты содержат только файлы, а &man.pkg.add.1; создает для них
+ что пакеты содержат только файлы, а <command>pkg add</command>
+ и <command>pkg install</command> создают для них
каталоги по мере надобности. Чтобы убедиться, что пустой каталог
создается при установке пакета, добавьте эту строку в
<filename>pkg-plist</filename> перед соответствующей строкой
@@ -10019,7 +10446,7 @@ lib/X11/oneko/sounds/cat.au
<filename>PREFIX/etc</filename> (или куда-то еще),
<emphasis>не</emphasis> делайте их простого перечисления в файле
<filename>pkg-plist</filename>. Это приведёт к тому, что по команде
- &man.pkg.delete.1; или при новой установке файлы,
+ <command>pkg delete</command> или при новой установке файлы,
тщательно отредактированные и настроенные пользователем, будут
уничтожены.</para>
@@ -10036,7 +10463,7 @@ lib/X11/oneko/sounds/cat.au
<programlisting>post-install:
@if [ ! -f ${PREFIX}/etc/orbit.conf ]; then \
- ${CP} -p ${PREFIX}/etc/orbit.conf.sample ${PREFIX}/etc/orbit.conf ; \
+ ${CP} -p ${PREFIX}/etc/orbit.conf.sample ${STAGEDIR}${PREFIX}/etc/orbit.conf ; \
fi</programlisting>
<para>Добавьте по три строки в <filename>pkg-plist</filename> для
@@ -10065,7 +10492,7 @@ etc/orbit.conf.sample
<para>Для получения дополнительной инфорации по использованию
<literal>%D</literal> и прочих маркеров подстановки обратитесь
- к странице Справочника &man.pkg.create.1;.</para>
+ к странице Справочника &man.pkg-create.8;.</para>
<para>Если существует действительно стоящая причина не устанавливать
рабочий файл конфигурации по умолчанию, уберите строку
@@ -10111,53 +10538,18 @@ etc/orbit.conf.sample
которые изменяют список упаковки на основе версии используемого
им программного обеспечения (например, порты, которые порождают
документы при помощи <application>Javadoc</application>).</para>
-
- <para>Сопровождающим, которые предпочитают динамические списки
- упаковки, рекомендуется добавлять в свои порты новую цель,
- которая производит файл <filename>pkg-plist</filename>, чтобы
- пользователи могли изучать содержимое.</para>
-
</sect1>
<sect1 xml:id="plist-autoplist">
<title>Автоматическое создание списка упаковки</title>
<para>Первым делом убедитесь, что ваш порт практически полностью
- завершён и осталось создать только <filename>pkg-plist</filename>.</para>
-
- <para>Далее создайте временное дерево каталогов, куда может быть
- установлен ваш порт, и установите все зависимости.</para>
+ завершён и осталось создать только <filename>pkg-plist</filename>.
+ После этого вы можете запустить <command>make makeplist</command>
+ для автоматического создания <filename>pkg-plist</filename>.
+ Содержимое этого файла должно быть дважды перепроверено.</para>
- <screen>&prompt.root; <userinput>mkdir /var/tmp/`make -V PORTNAME`</userinput>
-&prompt.root; <userinput>mtree -U -f `make -V MTREE_FILE` -d -e -p /var/tmp/`make -V PORTNAME`</userinput>
-&prompt.root; <userinput>make depends PREFIX=/var/tmp/`make -V PORTNAME`</userinput></screen>
-
- <para>Сохраните структуру каталогов в новом файле.</para>
-
- <screen>&prompt.root; <userinput>(cd /var/tmp/`make -V PORTNAME` &amp;&amp; find -d * -type d) | sort &gt; OLD-DIRS</userinput></screen>
-
- <para>Создайте пустой файл <filename>pkg-plist</filename>:</para>
-
- <screen>&prompt.root; <userinput>:&gt;pkg-plist</userinput></screen>
-
- <para>Если ваш порт принимает во внимание <varname>PREFIX</varname> (а он
- должен это делать), то тогда вы можете установить порт и создать список
- упаковки.</para>
-
- <screen>&prompt.root; <userinput>make install PREFIX=/var/tmp/`make -V PORTNAME`</userinput>
-&prompt.root; <userinput>(cd /var/tmp/`make -V PORTNAME` &amp;&amp; find -d * \! -type d) | sort &gt; pkg-plist</userinput></screen>
-
- <para>Кроме того, в список упаковки вы должны добавить все вновь
- созданные каталоги.</para>
-
- <screen>&prompt.root; <userinput>(cd /var/tmp/`make -V PORTNAME` &amp;&amp; find -d * -type d) | sort | comm -13 OLD-DIRS - | sort -r | sed -e 's#^#@dirrm #' &gt;&gt; pkg-plist</userinput></screen>
-
- <para>И наконец, вам нужно вручную отшлифовать список упаковки; его
- создание автоматизировано <emphasis>не полностью</emphasis>. Страницы
- справочной системы должны быть перечислены в файле
- <filename>Makefile</filename> порта в переменных
- <varname>MAN<replaceable>n</replaceable></varname>, а не в списке
- упаковки. Пользовательские конфигурационные файлы должны быть удалены
+ <para>Пользовательские конфигурационные файлы должны быть удалены
или быть установлены как
<filename>filename.sample</filename>.
Файл <filename>info/dir</filename> включать в список не нужно, но
@@ -10165,33 +10557,6 @@ etc/orbit.conf.sample
<filename>install-info</filename>, так, как это описано в разделе о <link linkend="makefile-info">файлах в формате info</link>. Все
библиотеки, устанавливаемые портом, должны быть перечислены так, как
это описано в разделе о <link linkend="porting-shlibs">динамических библиотеках</link>.</para>
-
- <para>Как альтернативу, можно использовать скрипт <command>plist</command>
- из <filename>/usr/ports/Tools/scripts/</filename> для автоматического
- построения списка упаковки. Скрипт <filename>plist</filename> - это
- сценарий на <application>Ruby</application>, который автоматизирует
- большинство ручных операций, изложенных в предыдущем параграфе.</para>
-
- <para>Первый шаг такой же как выше: взять
- первые три строки,
- <command>mkdir</command>, <command>mtree</command> и
- <command>make depends</command>. Затем собрать и установить
- порт:</para>
-
- <screen>&prompt.root; <userinput>make install PREFIX=/var/tmp/`make -V PORTNAME`</userinput></screen>
-
- <para>И позволить <command>plist</command> создать файл
- <filename>pkg-plist</filename>:</para>
-
- <screen>&prompt.root; <userinput>/usr/ports/Tools/scripts/plist -Md -m `make -V MTREE_FILE` /var/tmp/`make -V PORTNAME` &gt; pkg-plist</userinput></screen>
-
- <para>Список упаковки всё ещё должен быть подчищен вручную как описано
- выше.</para>
-
- <para>Для первоначального создания <filename>pkg-plist</filename> можно
- использовать другой инструмент <package>ports-mgmt/genplist</package>. Как и с прочими
- автоматизированными инструментами, получаемый <filename>pkg-plist</filename>
- следует проверить и при необходимости отредактировать вручную.</para>
</sect1>
</chapter>
@@ -10210,8 +10575,8 @@ etc/orbit.conf.sample
приложение, то вы можете поместить сообщение в файл
<filename>pkg-message</filename>. Эта возможность часто оказывается
полезной для вывода дополнительных шагов установки, которые нужно
- предпринять после выполнения команды &man.pkg.add.1;, или
- для вывода информации о лицензировании.</para>
+ предпринять после выполнения команды <command>pkg install</command>,
+ или для вывода информации о лицензировании.</para>
<para>Если должны выводиться некоторые строки о knobs времени построения
или предупреждения, используйте <varname>ECHO_MSG</varname>. Файл
@@ -10229,10 +10594,7 @@ etc/orbit.conf.sample
<note>
<para>Файл <filename>pkg-message</filename> не нужно добавлять в
- <filename>pkg-plist</filename>. И он не будет автоматически
- выводиться, если пользователь использует порт, а не пакет, так что
- вы должны будете сами выводить его при выполнении цели
- <buildtarget>post-install</buildtarget>.</para>
+ <filename>pkg-plist</filename>.</para>
</note>
</sect1>
@@ -10240,20 +10602,18 @@ etc/orbit.conf.sample
<title><filename>pkg-install</filename></title>
<para>Если при установке бинарного пакета по команде
- &man.pkg.add.1; вашему порту нужно выполнить какие-то
- дополнительные действия или команды, то вы можете сделать это с
- помощью скрипта <filename>pkg-install</filename>. Этот скрипт будет
- автоматически добавлен к пакету, и будет дважды запускаться по
- команде &man.pkg.add.1;: первый раз в виде
- <literal>&dollar;{SH} pkg-install &dollar;{PKGNAME}
- PRE-INSTALL</literal>, а второй раз как <literal>&dollar;{SH} {PKGNAME}
- POST-INSTALL</literal>.
+ <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> будет принимать значение,
- соответствующее каталогу, в который устанавливается пакет.
- Дополнительная информация находится на странице Справочника о
- команде &man.pkg.add.1;.</para>
+ соответствующее каталогу, в который устанавливается пакет.</para>
<note>
<para>Этот скрипт не запускается автоматически, если вы
@@ -10270,30 +10630,14 @@ etc/orbit.conf.sample
<para>Этот скрипт вызывается при удалении пакета.</para>
- <para>Этот скрипт утилитой &man.pkg.delete.1; будет запускаться
- дважды. Первый раз как <literal>&dollar;{SH} pkg-deinstall
+ <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-req">
- <title><filename>pkg-req</filename></title>
-
- <para>Если вашему порту нужно определять, должен ли он устанавливаться
- или нет, то вы можете создать скрипт <quote>необходимости</quote>
- <filename>pkg-req</filename>. Он будет вызван автоматически
- в момент установки/удаления для определения того, должны ли они
- реально выполняться.</para>
-
- <para>Скрипт будет запущен в процессе установки командой
- &man.pkg.add.1;, как <literal>pkg-req
- &dollar;{PKGNAME} INSTALL</literal>. В процессе удаления он
- будет запущен командой &man.pkg.delete.1; как
- <literal>pkg-req &dollar;{PKGNAME} DEINSTALL</literal>.</para>
- </sect1>
-
-
<sect1 xml:id="pkg-names">
<title xml:id="porting-pkgfiles">Изменение имён файлов
<filename>pkg-*</filename></title>
@@ -10341,11 +10685,6 @@ etc/orbit.conf.sample
</row>
<row>
- <entry><varname>PKGREQ</varname></entry>
- <entry><literal>${PKGDIR}/pkg-req</literal></entry>
- </row>
-
- <row>
<entry><varname>PKGMESSAGE</varname></entry>
<entry><literal>${PKGDIR}/pkg-message</literal></entry>
</row>
@@ -10379,8 +10718,8 @@ etc/orbit.conf.sample
качестве значения <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> и <filename>pkg-req</filename>
+ <filename>pkg-message</filename>, <filename>pkg-install</filename>
+ и <filename>pkg-deinstall</filename>
устанавливается соответствующая переменная Makefile, указывающая на
обработанную версию.</para>
@@ -10479,7 +10818,7 @@ as .putsy.conf and edit it.</programlisting>
<sect1 xml:id="testing-porttools">
<title>Port Tools</title>
- <para>Программа <package>ports-mgmt/porttools</package>
+ <para>Программа <package role="port">ports-mgmt/porttools</package>
входит в состав Коллекции Портов.</para>
<para><command>port</command> является сценарием переднего плана,
@@ -10541,8 +10880,13 @@ as .putsy.conf and edit it.</programlisting>
<varname>PREFIX</varname>, то процесс создания пакета сообщит об
отсутствии файлов.</para>
- <para>Этот тест не найдет явно указанных путей внутри файлов порта
- и не проверит корректность использования <varname>LOCALBASE</varname>
+ <para>Это также стоит проверить с использованием поддержки
+ каталога сборки (смотрите <xref linkend="staging"/>):</para>
+
+ <screen>&prompt.root; <userinput>make stage &amp;&amp; make check-orphans &amp;&amp; make package</userinput></screen>
+
+ <para>Эти проверки не найдут явно указанных путей внутри файлов порта
+ и не проверят корректность использования <varname>LOCALBASE</varname>
в качестве ссылки на файлы из других портов. Порт, временно
установленный в <filename>/var/tmp/`make -V PORTNAME`</filename>,
следует проверять на работоспособность, чтобы убедиться в отсутствии
@@ -10573,15 +10917,28 @@ as .putsy.conf and edit it.</programlisting>
<para>Если вы алчный контрибутор портов, то вы можете захотеть
взглянуть на <application>Tinderbox</application>. Это мощная
- система построения и тестирования портов, основанная на сценариях,
- используемых в <link linkend="build-cluster">Pointyhat</link>.
+ система построения и тестирования портов.
<application>Tinderbox</application> можно установить, используя
- порт <package>ports-mgmt/tinderbox</package>.
+ порт <package role="port">ports-mgmt/tinderbox</package>.
Обязательно прочитайте поставляемую документацию, поскольку
конфигурация не является тривиальной.</para>
- <para>Для получения подробностей посетите <link xlink:href="http://tinderbox.marcuscom.com/">вебсайт Tinderbox</link>.</para>
+ <para>Для получения подробностей посетите
+ <link xlink:href="http://tinderbox.marcuscom.com/">вебсайт Tinderbox</link>.</para>
+ </sect1>
+
+ <sect1 xml:id="testing-poudriere">
+ <title>Poudriere</title>
+
+ <para>Если вы контрибутор портов, подумайте об установке
+ <application>poudriere</application>. Это мощная система
+ для построения и тестирования портов.
+ <application>Poudriere</application> можно установить из
+ <package role="port">ports-mgmt/poudriere</package>.</para>
+ <para>Для получения подробной информации посетите <link
+ xlink:href="http://fossil.etoilebsd.net/poudriere">вебсайт
+ Poudriere</link>.</para>
</sect1>
</chapter>
@@ -10610,8 +10967,8 @@ as .putsy.conf and edit it.</programlisting>
<para>Однако иногда люди забывают поместить название порта в поле
Synopsis в точном виде. В таком случае вы можете воспользоваться
- <link linkend="portsmon">Системой мониторинга портов
- FreeBSD</link> (которая известна также как
+ <link linkend="portsmon">Системой мониторинга портов &os;</link>
+ (которая известна также как
<literal>portsmon</literal>). В рамках этой системы делается попытка
классифицировать PR, касающиеся портов, по имени порта. Для поиска
PR, относящихся к определённому порту, используйте механизм <link xlink:href="http://portsmon.FreeBSD.org/portoverview.py">Просмотра
@@ -10688,20 +11045,21 @@ as .putsy.conf and edit it.</programlisting>
утилитой uuencode; в противном случае просто включите его как есть
в PR.</para>
- <para>Прежде чем пользоваться &man.send-pr.1; вы должны просмотреть раздел
+ <para>Прежде чем пользоваться &man.send-pr.1; просмотрите раздел
о <link xlink:href="&url.articles.problem-reports;/pr-writing.html">Написании
- сообщений о проблемах</link> в статье о Сообщениях об ошибках; он
+ сообщений о проблемах</link> в статье о Сообщениях об ошибках. Он
содержит гораздо больше информации о том, как писать полезные сообщения
о проблемах.</para>
<important>
- <para>Если ваше обновление вызвано соображениями информационной
+ <para>Если обновление вызвано соображениями информационной
безопасности или наличием серьёзных ошибок в имеющемся порте,
пожалуйста, оповестите &a.portmgr; о необходимости немедленного
- перепостроения и повторного распространения пакета вашего порта.
- В противном случае ничего не подозревающие пользователи &man.pkg.add.1;
- будут продолжать устанавливать старую версию по команде
- <command>pkg_add -r</command> в течение ещё нескольких недель.</para>
+ перепостроения и повторного распространения пакета данного порта.
+ В противном случае ничего не подозревающие пользователи
+ <command>pkg</command> будут продолжать устанавливать старую
+ версию по команде <command>pkg install</command> в течение
+ ещё нескольких недель.</para>
</important>
<note>
@@ -10710,19 +11068,19 @@ as .putsy.conf and edit it.</programlisting>
понять коммиттерам портов, что именно было изменено.</para>
</note>
- <para>Теперь, когда вы проделали всё это, вам может понадобиться
- прочесть о том, как поддерживать актуальное состояние, в <xref linkend="keeping-up"/>.</para>
+ <para>Теперь, когда вы проделали всё это, прочитайте о том, как
+ поддерживать актуальное состояние, в <xref linkend="keeping-up"/>.</para>
<sect1 xml:id="svn-diff">
- <title>Использование <literal>SVN</literal> для создания патчей</title>
+ <title>Использование <application>Subversion</application> для
+ создания патчей</title>
- <para>По возможности присылайте исправления в формате &man.svn.1; diff;
- &mdash; в таком виде их проще использовать по сравнению с разницей между
- <quote>старым и новым</quote> каталогами. К тому же, вам проще
- увидеть ваши изменения и обновить их в случае, если что-нибудь
- изменилось в Коллекции Портов с тех пор, как вы начали работу, пока вы
- не отправите ваши изменения, либо если коммиттер попросит вас
- исправить что-то еще.</para>
+ <para>По возможности присылайте исправления в формате &man.svn.1; diff.
+ В таком виде их проще использовать по сравнению с разницей между
+ <quote>старым и новым</quote> каталогами. Так проще
+ увидеть изменения и обновить их в случае, если что-нибудь
+ изменилось в Коллекции Портов с тех пор, как вы начали работу,
+ либо если коммиттер просит что-то исправить.</para>
<screen>&prompt.user; <userinput>cd ~/my_wrkdir</userinput> <co xml:id="my-wrkdir"/>
&prompt.user; <userinput>svn co https://svn0.us-west.FreeBSD.org/ports/head/dns/pdnsd</userinput> <co xml:id="svn-FreeBSD-org"/>
@@ -10737,7 +11095,8 @@ as .putsy.conf and edit it.</programlisting>
<callout arearefs="svn-FreeBSD-org">
<para><link xlink:href="https://svn0.us-west.FreeBSD.org/">svn0.us-west.FreeBSD.org</link>
- &mdash; это общедоступный <literal>SVN</literal> сервер.
+ &mdash; это общедоступный сервер
+ <application>Subversion</application>.
Выберите ближайшее зеркало и проверьте сертификат
зеркалирующего сервера на наличие в перечне <link xlink:href="&url.books.handbook;/svn-mirrors.html">зеркалирующих
сайтов Subversion</link>.</para>
@@ -10762,7 +11121,7 @@ as .putsy.conf and edit it.</programlisting>
<calloutlist>
<callout arearefs="svn-update">
<para>Эта команда попытается выполнить слияние различий между
- вашим патчем и текущим содержимым в SVN; внимательно проверьте
+ вашим патчем и текущей версией репозитория; внимательно проверьте
полученный вывод. Буква перед названием каждого файла означает
тип изменения, сделанного с этим файлом. Для получения полного
списка смотрите <xref linkend="table-svn-up"/>.</para>
@@ -10770,7 +11129,8 @@ as .putsy.conf and edit it.</programlisting>
</calloutlist>
<table pgwide="1" frame="none" xml:id="table-svn-up">
- <title>Префиксы файлов для <literal>SVN</literal> update</title>
+ <title>Префиксы файлов для <application>Subversion</application>
+ update</title>
<tgroup cols="2">
<tbody>
@@ -10805,16 +11165,17 @@ as .putsy.conf and edit it.</programlisting>
</table>
<para>Если в результате выполнения <literal>svn update</literal>
- вы получили <literal>C</literal>, то это означает, что что-то
- изменилось в репозитории SVN и &man.svn.1; не смогла выполнить
- слияние ваших локальных изменений с полученными из репозитория.
+ отображается <literal>C</literal>, то это означает, что что-то
+ изменилось в репозитории <application>Subversion</application>
+ и &man.svn.1; не смогла выполнить
+ слияние локальных изменений с полученными из репозитория.
В любом случае никогда не помешает просмотреть изменения,
поскольку &man.svn.1; ничего не знает о том, каким должен быть
порт, поэтому эта команда может (и, вероятно, будет) делать
слияние тех изменений, которые не имеют смысла.</para>
<para>Последним шагом является создание унифицированного &man.diff.1;
- для файлов относительно SVN:</para>
+ для полученных изменений:</para>
<screen>&prompt.user; <userinput>svn diff &gt; ../`basename ${PWD}`.diff</userinput></screen>
@@ -10973,7 +11334,9 @@ as .putsy.conf and edit it.</programlisting>
каждому случаю выпускать бюллетень безопасности без создания
флуда и потери внимания сообщества к моменту появления
действительно серьезных причин. Поэтому уязвимости безопасности,
- обнаруженные в портах, записываются в <link xlink:href="http://vuxml.freebsd.org/">базу данных FreeBSD VuXML</link>.
+ обнаруженные в портах, записываются в
+ <link xlink:href="http://vuxml.freebsd.org/">базу данных
+ &os; VuXML</link>.
Члены Команды Офицеров Безопасности также отслеживают её на
предмет появления вопросов, требующих их вмешательства.</para>
@@ -10983,13 +11346,14 @@ as .putsy.conf and edit it.</programlisting>
менее, если вы не являетесь коммиттером или верите, что нашли
исключительно серьезную уязвимость, то не
задумываясь свяжитесь с Командой Офицеров Безопасности напрямую
- как это описано на странице <link xlink:href="http://www.freebsd.org/security/#how">информационной
- безопасности FreeBSD</link>.</para>
-
- <para>База данных VuXML является
- документом XML. Его исходный файл <filename>vuln.xml</filename>
- содержится прямо внутри порта <package>security/vuxml</package>. Поэтому полное имя
- пути к файлу будет
+ как это описано на странице
+ <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,
@@ -11001,8 +11365,8 @@ as .putsy.conf and edit it.</programlisting>
<sect2 xml:id="security-notify-vuxml-intro">
<title>Короткое вступление в VuXML</title>
- <para>В совокупности XML является очень сложным форматом, и его
- описание выходит далеко за рамки
+ <para>В совокупности <acronym>XML</acronym> является очень
+ сложным форматом, и его описание выходит далеко за рамки
этой книги. Тем не менее, для достижения основного понимания
структуры записи VuXML вам понадобится всего лишь понять теги.
Имена тегов XML обрамляются в угловые скобки. Каждый открывающий
@@ -11188,13 +11552,13 @@ as .putsy.conf and edit it.</programlisting>
<callout arearefs="co-vx-fsa">
<para>Это
<link xlink:href="http://www.freebsd.org/security/#adv">бюллетень
- безопасности FreeBSD</link>.</para>
+ безопасности &os;</link>.</para>
</callout>
<callout arearefs="co-vx-fpr">
<para>Это
<link xlink:href="http://www.freebsd.org/support.html#gnats">сообщение
- об ошибке FreeBSD</link>.</para>
+ об ошибке &os;</link>.</para>
</callout>
<callout arearefs="co-vx-cve">
@@ -11258,9 +11622,9 @@ as .putsy.conf and edit it.</programlisting>
<para>Прежде всего, вам нужно <emphasis>установить</emphasis>
последние версии портов
- <package>ports-mgmt/portaudit</package>,
- <package>ports-mgmt/portaudit-db</package> и
- <package>security/vuxml</package>.</para>
+ <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> вы должны обладать
@@ -11298,8 +11662,8 @@ as .putsy.conf and edit it.</programlisting>
<note>
<para>Вам понадобится установить по крайней мере один из следующих
- пакетов: <package>textproc/libxml2</package>,
- <package>textproc/jade</package>.</para>
+ пакетов: <package role="port">textproc/libxml2</package>,
+ <package role="port">textproc/jade</package>.</para>
</note>
<para>Теперь выполните перепостроение базы данных
@@ -11351,8 +11715,9 @@ Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00
<title>Введение</title>
<para>Вот список часто встречающихся действий, которые нужно и которые
- нельзя делать во время процесса портирования. Вы должны проверять ваш
- порт по этому списку, и вы также можете проверять порты в <link xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query">базе
+ нельзя делать во время процесса портирования. Проверьте
+ порт по этому списку, и также проверьте порты в
+ <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">
@@ -11401,7 +11766,8 @@ Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00
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>.
+ <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>
@@ -11412,13 +11778,11 @@ Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00
9.x <literal>__FreeBSD__</literal> определён со значением
<literal>9</literal>.</para>
- <para>
- <programlisting>#if __FreeBSD__ &gt;= 9
+ <programlisting>#if __FreeBSD__ &gt;= 9
# if __FreeBSD_version &gt;= 901000
/* здесь особый код для версий 9.1+ */
# endif
#endif</programlisting>
- </para>
</sect1>
<sect1 xml:id="dads-after-port-mk">
@@ -11594,8 +11958,8 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting>
<programlisting>CXX= g++</programlisting>
- <para>Обе переменные <varname>CC</varname> и <varname>CXX</varname>
- могут быть определены в системах FreeBSD в файле
+ <para>В системах &os; обе переменные <varname>CC</varname> и
+ <varname>CXX</varname> могут быть определены в файле
<filename>/etc/make.conf</filename>. В первом примере задаётся
значение, если оно ранее не было определено в
<filename>/etc/make.conf</filename>, что сохраняет любые определения,
@@ -11633,7 +11997,7 @@ CFLAGS+= -Wall -Werror
CFLAGS= -Wall -Werror
</programlisting>
- <para>В системе FreeBSD переменная <varname>CFLAGS</varname> определена
+ <para>В системе &os; переменная <varname>CFLAGS</varname> определена
в файле <filename>/etc/make.conf</filename>. В первом примере к
переменной <varname>CFLAGS</varname> добавляются дополнительные флаги,
при этом сохраняются все определения, данные ранее на уровне системы.
@@ -11675,7 +12039,7 @@ CFLAGS= -Wall -Werror
</sect1>
- <sect1 xml:id="dads-freedback">
+ <sect1 xml:id="dads-feedback">
<title>Пожелания</title>
<para>Посылайте подходящие изменения/патчи авторам/сопровождающему
@@ -11686,9 +12050,9 @@ CFLAGS= -Wall -Werror
<sect1 xml:id="dads-readme">
<title><filename>README.html</filename></title>
- <para>Не включайте сюда файл <filename>README.html</filename>. Этот файл
- не является частью дерева SVN, и он генерируется при помощи команды
- <command>make readme</command>.</para>
+ <para><filename>README.html</filename> не является частью порта
+ и генерируется при помощи <command>make readme</command>.
+ Не включайте этот файл в патчи или коммиты.</para>
<note>
<para>Если не удается выполнить <command>make readme</command>,
@@ -11763,14 +12127,14 @@ CFLAGS= -Wall -Werror
<para><varname>FORBIDDEN</varname> используется для портов, которые
содержат уязвимости в информационной безопасности или
являются потенциально вредными в плане обеспечения информационной
- безопасности системы FreeBSD при установке данного порта
+ безопасности системы &os; при установке данного порта
(например: заведомо небезопасная программа или программа, которая
предоставляет легко взламываемые сервисы). Порты должны
помечаться как <varname>FORBIDDEN</varname>, как только в
конкретном программном обеспечении обнаружилась уязвимость, но
обновление выпущено не было. В идеальном случае порты должны
обновляться максимально быстро после обнаружения уязвимости,
- чтобы уменьшить число уязвимых хостов FreeBSD (нам нравится иметь
+ чтобы уменьшить число уязвимых хостов &os; (нам нравится иметь
репутацию безопасной системы), однако иногда случается
значительный временной разрыв между обнаружением уязвимости и
выходом обновлённого релиза уязвимого программного обеспечения.
@@ -11797,19 +12161,15 @@ CFLAGS= -Wall -Werror
</listitem>
<listitem>
- <para>требует для построения исходные тексты ядра &os;, но
- у пользователя в установленном виде они отсутствуют</para>
- </listitem>
-
- <listitem>
<para>имеет distfile, который не может быть автоматически
извлечен из-за лицензионных ограничений</para>
</listitem>
<listitem>
<para>не работает с каким-либо другим портом, установленным
- в настоящее время (например, порт зависит от <package>www/apache20</package>, но установлен
- <package>www/apache22</package>)
+ в настоящее время (например, порт зависит от
+ <package role="port">www/apache20</package>, но установлен
+ <package role="port">www/apache22</package>)
</para>
</listitem>
</itemizedlist>
@@ -11865,16 +12225,16 @@ CFLAGS= -Wall -Werror
Также построение строки должно несколько различаться из-за
способа отображения информации пользователю. Примеры:</para>
- <programlisting>BROKEN= this port is unsupported on FreeBSD 5.x</programlisting>
+ <programlisting>BROKEN= fails to link with base -lcrypto</programlisting>
- <programlisting>IGNORE= is unsupported on FreeBSD 5.x</programlisting>
+ <programlisting>IGNORE= unsupported on recent versions</programlisting>
<para>получаемые в результате следующего вывода
<command>make describe</command>:</para>
- <programlisting>===&gt; foobar-0.1 is marked as broken: this port is unsupported on FreeBSD 5.x.</programlisting>
+ <programlisting>===&gt; foobar-0.1 is marked as broken: fails to link with base -lcrypto.</programlisting>
- <programlisting>===&gt; foobar-0.1 is unsupported on FreeBSD 5.x.</programlisting>
+ <programlisting>===&gt; foobar-0.1 is unsupported on recent versions.</programlisting>
</sect2>
</sect1>
@@ -11927,23 +12287,16 @@ CFLAGS= -Wall -Werror
<example xml:id="dot-error-breaks-index">
<title>Как избегать использование <literal>.error</literal></title>
- <para>Предположим, что кто-то поместил строку</para>
- <programlisting>USE_POINTYHAT=yes</programlisting>
+ <para>Из следующих двух вариантов строки файла
+ <filename>Makefile</filename> первый приведёт к неудачному
+ завершению работы <command>make index</command>, а второй -
+ нет:</para>
- <para>в <filename>make.conf</filename>. Первый из последующих двух
- вариантов строк файла <filename>Makefile</filename> приведёт к
- неудачному завершению работы <command>make index</command>, а
- второй - нет:</para>
- <programlisting>.if USE_POINTYHAT
-.error "POINTYHAT is not supported"
-.endif</programlisting>
+ <programlisting>.error "option is not supported"</programlisting>
- <programlisting>.if USE_POINTYHAT
-IGNORE=POINTYHAT is not supported
-.endif</programlisting>
+ <programlisting>IGNORE=option is not supported</programlisting>
</example>
-
</sect1>
<sect1 xml:id="dads-sysctl">
@@ -12037,12 +12390,6 @@ IGNORE=POINTYHAT is not supported
<para>Список основных <application>bash</application>-измов
расположен <link xlink:href="https://wiki.ubuntu.com/DashAsBinSh">здесь</link>.</para>
- <para>Не используйте <literal>#include
- &lt;stdint.h&gt;</literal>, если
- достаточно подключить <filename>inttypes.h</filename>. Это
- позволит убедиться, что программное обеспечение собирается на
- более старых версиях &os;.</para>
-
<para>Проверьте, что используемые заголовочные файлы включены в
<acronym>POSIX</acronym> или список, рекомендуемый страницей
справочника, т.к. например, забыть подключить
@@ -12127,7 +12474,7 @@ PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz
сохранения как можно более высокого качества Коллекции Портов мы больше
не принимаем новые порты, назначенные на "ports@FreeBSD.org".]
MAINTAINER= asami@FreeBSD.org
-COMMENT= A DVI Previewer for the X Window System
+COMMENT= DVI Previewer for the X Window System
[зависимости -- могут быть пустыми]
RUN_DEPENDS= gs:${PORTSDIR}/print/ghostscript
@@ -12166,6 +12513,7 @@ pre-install:
и потом еще кое-что перед установкой, ого
[и, наконец, эпилог]
+
.include &lt;bsd.port.mk&gt;
</programlisting>
</chapter>
@@ -12206,7 +12554,7 @@ pre-install:
<para>Во FreshPorts имеется также функция проверки правильности,
которая автоматически проверяет каждое изменение, внесённое в дерево
- портов FreeBSD. Если вы подпишетесь на эту услугу, то будете
+ портов &os;. Если вы подпишетесь на эту услугу, то будете
оповещаться обо всех ошибках, обнаруженных FreshPorts при проверке
внесённых вами изменений.</para>
</sect1>
@@ -12224,7 +12572,7 @@ pre-install:
и связанных с ним файлов.</para>
</sect1>
- <sect1 xml:id="ports-mailling-list">
+ <sect1 xml:id="ports-mailing-list">
<title>Список рассылки &os;, посвящённый портам</title>
<para>Если вы поддерживаете порты, то должны следить за &a.ports;.
@@ -12237,15 +12585,12 @@ pre-install:
</sect1>
<sect1 xml:id="build-cluster">
- <title>Кластер построения портов &os; на
- <systemitem class="fqdomainname">pointyhat.FreeBSD.org</systemitem></title>
+ <title>Кластер построения портов &os;</title>
<para>Одной из наименее известных сильных сторон &os; является тот
факт, что для непрерывного построения Коллекции Портов для каждого
из основных релизов ОС для каждой архитектуры уровня поддержки
- Tier-1 выделен целый кластер машин. Вы можете увидеть результаты
- этих построений в <link xlink:href="http://pointyhat.FreeBSD.org/">протоколах
- построения пакетов и обнаруженных ошибок</link>.</para>
+ Tier-1 выделен целый кластер машин.</para>
<para>Отдельные порты собираются, если они специально не помечены как
<varname>IGNORE</varname>. Для портов, помеченных как
@@ -12294,8 +12639,9 @@ pre-install:
<sect1 xml:id="portsmon">
<title>Система мониторинга портов &os;</title>
- <para>Другим полезным ресурсом является <link xlink:href="http://portsmon.FreeBSD.org">Система мониторинга портов
- FreeBSD</link> (известная также как <literal>portsmon</literal>).
+ <para>Другим полезным ресурсом является
+ <link xlink:href="http://portsmon.FreeBSD.org">Система мониторинга
+ портов &os;</link> (известная также как <literal>portsmon</literal>).
Система представляет собой базу данных, обрабатывающую информацию из
нескольких источников и позволяющую просматривать их при помощи
Web-интерфейса. На данный момент задействованы база сообщений об
@@ -12324,7 +12670,7 @@ pre-install:
<sect1 xml:id="uses-values">
<title>Значения <varname>USES</varname></title>
- <table frame="none">
+ <table>
<title>Значения <varname>USES</varname></title>
<tgroup cols="3">
@@ -12335,7 +12681,7 @@ pre-install:
<entry>Описание</entry>
</row>
</thead>
- <tbody>
+ <tbody valign="top">
&values.uses;
</tbody>
</tgroup>