Date: Tue, 24 Jul 2012 09:13:54 +0000 (UTC) From: Sergey Kandaurov <pluknet@FreeBSD.org> To: doc-committers@freebsd.org, svn-doc-all@freebsd.org, svn-doc-head@freebsd.org Subject: svn commit: r39258 - head/ru_RU.KOI8-R/books/porters-handbook Message-ID: <201207240913.q6O9Ds66010131@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: pluknet Date: Tue Jul 24 09:13:54 2012 New Revision: 39258 URL: http://svn.freebsd.org/changeset/doc/39258 Log: MFen r38283 -> r39245 PR: docs/169710 (MFen r38759 part) Submitted by: ohauer Modified: head/ru_RU.KOI8-R/books/porters-handbook/book.sgml Modified: head/ru_RU.KOI8-R/books/porters-handbook/book.sgml ============================================================================== --- head/ru_RU.KOI8-R/books/porters-handbook/book.sgml Tue Jul 24 09:11:44 2012 (r39257) +++ head/ru_RU.KOI8-R/books/porters-handbook/book.sgml Tue Jul 24 09:13:54 2012 (r39258) @@ -4,7 +4,7 @@ $FreeBSD$ $FreeBSDru: frdp/doc/ru_RU.KOI8-R/books/porters-handbook/book.sgml,v 1.136 2006/10/20 09:25:00 marck Exp $ - Original revision: r38283 + Original revision: r39245 --> <!DOCTYPE BOOK PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [ @@ -145,7 +145,7 @@ USE_IMAKE= yes <para>Посмотрим, сможете ли вы его понять. Не обращайте внимание на содержимое строчки <literal>$FreeBSD$</literal>, она - будет заполнена автоматически системой CVS, когда порт будет + будет заполнена автоматически системой SVN, когда порт будет импортирован в наше дерево портов. Вы можете найти более подробный пример в разделе <link linkend="porting-samplem">пример Makefile</link>.</para> @@ -198,8 +198,8 @@ WWW: http://www.oneko.org/</programlisti также называют <quote>списком для упаковки</quote>, потому что пакет генерируется упаковкой файлов, которые здесь указаны. Имена путей указываются относительно установочного префикса - (обычно <filename>/usr/local</filename> или - <filename>/usr/X11R6</filename>). Если вы используете переменные + (обычно <filename>/usr/local</filename>). + Если вы используете переменные <makevar>MAN<replaceable>n</replaceable></makevar> (а вы должны это делать), то указывать страницы справочника здесь не нужно. Если порт во время установки создает каталоги, убедитесь, @@ -346,6 +346,10 @@ PLIST_DIRS= lib/X11/oneko</programli <step> <para><command>make package</command></para> </step> + + <step> + <para><command>make readme</command></para> + </step> </procedure> <para>Проверьте, что ни на шаге <maketarget>package</maketarget>, ни на @@ -573,7 +577,9 @@ PLIST_DIRS= lib/X11/oneko</programli вызывают настоящие цели или скрипты, и их не нужно менять. Если вам нужно изменить распаковку, исправляйте <maketarget>do-extract</maketarget>, но никогда не меняйте способ - работы <maketarget>extract</maketarget>!</para> + работы <maketarget>extract</maketarget>! Кроме того, цель + <maketarget>post-deinstall</maketarget> является недействительной + и не выполняется инфраструктурой портов.</para> </note> <para>Теперь вы представляете, что происходит, когда пользователь @@ -587,7 +593,7 @@ PLIST_DIRS= lib/X11/oneko</programli <para>Получите оригинальные исходные тексты (обычно) в виде упакованного tar-архива (<filename><replaceable>foo</replaceable>.tar.gz</filename> или - <filename><replaceable>foo</replaceable>.tar.Z</filename>) + <filename><replaceable>foo</replaceable>.tar.bz2</filename>) и скопируйте его в каталог <makevar>DISTDIR</makevar>. Всегда используйте исходные тексты <emphasis>основной ветки разработки</emphasis> везде, где это возможно.</para> @@ -708,7 +714,7 @@ PLIST_DIRS= lib/X11/oneko</programli так далее, всегда ссылайтесь на путь и название файла в названиях патчей.</para> - <para>Не помещайте строки RCS в патчи. CVS будет изменять их при + <para>Не помещайте строки RCS в патчи. SVN будет изменять их при помещении файлов в дерево портов, и когда мы будем их оттуда извлекать, они будут уже другие, поэтому применение патчей окончится неудачей. Строчки RCS предваряются знаком доллара @@ -739,7 +745,7 @@ PLIST_DIRS= lib/X11/oneko</programli часть из одного проекта для исправления похожей области в другом, то будьте аккуратны, пожалуйста: получаемый однострочный патч может быть полон нефункциональных изменений. Это не только - увеличивает размер репозитория CVS, но также усложняет поиск того, + увеличивает размер репозитория SVN, но также усложняет поиск того, что конкретно вызвало проблему и что вы вообще изменили.</para> <para>Если вам нужно удалить файл, то вы можете сделать это при @@ -846,11 +852,8 @@ DOS2UNIX_REGEX= .*\.(c|cpp|h)</programl <makevar>EXTRACT_BEFORE_ARGS</makevar>, <makevar>EXTRACT_AFTER_ARGS</makevar>, <makevar>EXTRACT_SUFX</makevar> или <makevar>DISTFILES</makevar> в - зависимости от того, насколько необычен формат дистрибутивного файла. - (Самый распространённый случай - это - <literal>EXTRACT_SUFX=.tar.Z</literal>, когда tar-файл упакован - обычной утилитой <command>compress</command>, а не архиватором - <command>gzip</command>.)</para> + зависимости от того, насколько необычен формат дистрибутивного + файла.</para> <para>В худшем случае вы можете просто определить свою собственную цель <maketarget>do-extract</maketarget> для переопределения действий по @@ -1706,8 +1709,8 @@ PORTEPOCH= 1</programlisting> <entry><filename>java</filename></entry> <entry>Программное обеспечение, связанное с языком Java™.</entry> - <entry>Категория <filename>java</filename> не должна быть - единственной для порта. Оставьте для портов, + <entry>Категория <filename>java</filename> ни в коем случае + не должна быть единственной для порта. Оставьте для портов, непосредственно имеющих отношение к языку Java, портерам также рекомендуется не использовать <filename>java</filename> как основную категорию @@ -1716,8 +1719,8 @@ PORTEPOCH= 1</programlisting> <row> <entry><filename>kde*</filename></entry> - <entry>Порты проекта <ulink url="http://www.kde.org">K Desktop - Environment (KDE)</ulink>.</entry> + <entry>Порты проекта + <ulink url="http://www.kde.org">KDE</ulink>.</entry> <entry></entry> </row> @@ -2405,11 +2408,15 @@ MASTER_SITE_SUBDIR= make</programlisti <programlisting>MASTER_SITES= SF</programlisting> - <para>Если попытка угадать не удалась, что это может быть переписано + <para>Если попытка угадать не удалась, то это может быть переписано следующим образом.</para> - <programlisting>MASTER_SITES= SF/stardict/WyabdcRealPeopleTTS/${PORTVE -RSION}</programlisting> + <programlisting>MASTER_SITES= SF/stardict/WyabdcRealPeopleTTS/${PORTVERSION}</programlisting> + + <para>Что также можно записать в таком виде:</para> + + <programlisting>MASTER_SITES= SF +MASTER_SITE_SUBDIR= stardict/WyabdcRealPeopleTTS/${PORTVERSION}</programlisting> <table frame="none"> <title>Популярные магические макросы для @@ -2515,11 +2522,12 @@ RSION}</programlisting> <programlisting>DISTNAME= foo EXTRACT_SUFX= .tgz</programlisting> - <para>Переменные <makevar>USE_BZIP2</makevar> и + <para>Переменные <makevar>USE_BZIP2</makevar>, + <makevar>USE_XZ</makevar> и <makevar>USE_ZIP</makevar> при необходимости автоматически устанавливают значение <makevar>EXTRACT_SUFX</makevar> в - <literal>.tar.bz2</literal> или <literal>.zip</literal>. - Если ни одна из этих + <literal>.tar.bz2</literal>, <literal>.tar.xz</literal> или + <literal>.zip</literal>. Если ни одна из этих переменных не задана, то значение <makevar>EXTRACT_SUFX</makevar> по умолчанию устанавливается в <literal>.tar.gz</literal>.</para> @@ -3376,9 +3384,9 @@ ALWAYS_KEEP_DISTFILES= yes <replaceable>target</replaceable> - это цель, которую нужно вызвать в этом каталоге. Например,</para> - <programlisting>LIB_DEPENDS= jpeg.9:${PORTSDIR}/graphics/jpeg</programlisting> + <programlisting>LIB_DEPENDS= jpeg:${PORTSDIR}/graphics/jpeg</programlisting> - <para>проверит наличие библиотеки jpeg со старшим номером версии 9 и + <para>проверит наличие библиотеки jpeg с любым номером версии и перейдет в подкаталог <filename>graphics/jpeg</filename> вашего дерева портов для ее построения и установки, если библиотека отсутствует. Часть <replaceable>target</replaceable> может быть @@ -3389,11 +3397,11 @@ ALWAYS_KEEP_DISTFILES= yes <para>Часть <replaceable>lib</replaceable> является регулярным выражением, которое вызывается для вывода, полученного из <command>ldconfig -r</command>. Разрешаются такие значения, как - <literal>intl.[5-7]</literal> и <literal>intl</literal>. - Первые шаблон, <literal>intl.[5-7]</literal>, совпадет с любым - из: <literal>intl.5</literal>, <literal>intl.6</literal> или - <literal>intl.7</literal>. Второй шаблон, <literal>intl</literal>, - совпадет с любой версией библиотеки <literal>intl</literal>.</para> + <literal>intl.9</literal> и <literal>intl.[5-7]</literal>. + Первый шаблон, <literal>intl.9</literal>, совпадает только с + intl версии 9, в то время как <literal>intl.[5-7]</literal> + совпадает с любым из: <literal>intl.5</literal>, + <literal>intl.6</literal> и <literal>intl.7</literal>.</para> </note> <para>Зависимость проверяется дважды, один раз внутри цели @@ -3423,14 +3431,15 @@ ALWAYS_KEEP_DISTFILES= yes <para>Например,</para> - <programlisting>RUN_DEPENDS= ${LOCALBASE}/etc/innd:${PORTSDIR}/news/inn \ + <programlisting>RUN_DEPENDS= ${LOCALBASE}/news/bin/innd:${PORTSDIR}/news/inn \ xmlcatmgr:${PORTSDIR}/textproc/xmlcatmgr</programlisting> - <para>проверит, существует ли файл или каталог - <filename>/usr/local/etc/innd</filename> и построит и установит его - из подкаталога <filename>news/inn</filename> дерева портов, если он - не будет найден. Он также проверит, имеется ли выполнимый файл с - именем <command>xmlcatmgr</command> в пути поиска, и перейдет в + <para>проверит существование файла или каталога + <filename>/usr/local/news/bin/innd</filename>, и если ничего + не будет найдено, то построит и установит порт из подкаталога + <filename>news/inn</filename> дерева портов. Также будет + выполнена проверка, присутствует ли в пути поиска исполняемый + файл с именем <command>xmlcatmgr</command>, и перейдет в подкаталог <filename>textproc/xmlcatmgr</filename> вашего дерева портов для его построения и установки, если он не будет найден.</para> @@ -3446,7 +3455,7 @@ ALWAYS_KEEP_DISTFILES= yes <para>Официальным значением переменной поиска <envar>PATH</envar>, используемым в кластере построения портов является</para> - <programlisting>/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin</programlisting> + <programlisting>/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin</programlisting> </note> <para>Зависимость проверяется внутри цели @@ -3589,16 +3598,16 @@ ALWAYS_KEEP_DISTFILES= yes <sect2 id="use-vars"> <title><makevar>USE_<replaceable>*</replaceable></makevar></title> - <para>Для объединения нескольких зависимостей, которые есть во многих - портах, предназначено несколько переменных. Хотя их использование - является необязательным, они могут упростить избыточность файлов - <filename>Makefile</filename> порта. Каждый из них оформляется как - <makevar>USE_<replaceable>*</replaceable></makevar>. Использование - этих переменных ограничено <filename>Makefile</filename>'ом порта - и <filename>ports/Mk/bsd.*.mk</filename> и не рассчитано на - вложенность указываемых пользователями опция — используйте - для этих целей <makevar>WITH_<replaceable>*</replaceable></makevar> - и <makevar>WITHOUT_<replaceable>*</replaceable></makevar>.</para> + <para>Для определения общих зависимостей, совместно используемых + многими портами, предназначено несколько переменных. Их + использование является необязательным, но помогает упростить + избыточность файлов <filename>Makefile</filename> порта. + Каждый из них оформляется как + <makevar>USE_<replaceable>*</replaceable></makevar>. Эти + переменные можно использовать только в <filename>Makefile</filename> + порта и <filename>ports/Mk/bsd.*.mk</filename>. Они не + предназначены для установки пользователями параметров — + используйте для этих целей <makevar>PORT_OPTIONS</makevar>.</para> <note> <para>Установка любых <makevar>USE_<replaceable>*</replaceable></makevar> @@ -3766,7 +3775,95 @@ ALWAYS_KEEP_DISTFILES= yes людей—включая себя—от грядущих бед.</para> </sect2> - </sect1> + <sect2> + <title>Автоматические зависимости и проблемы, которые они + вызывают</title> + + <para>Зависимости должны быть указаны либо явно, либо с + использованием <link linkend="makefile-options">фреймворка + OPTIONS</link>. Использование прочих методов, таких как + автоматическое обнаружение зависимостей, усложняет индексирование, + что вызывает проблемы в управлении портами и пакетами.</para> + + <example> + <title>Некорректное объявление необязательной зависимости</title> + + <programlisting>.include <bsd.port.pre.mk> + +.if exists(${LOCALBASE}/bin/foo) +LIB_DEPENDS= bar:${PORTSDIR}/foo/bar +.endif</programlisting> + </example> + + <para>Проблема автоматического добавления зависимостей + заключается в том, что файлы и настройки за пределами порта + могут произвольно меняться. Пример: после построения + индекса устанавливается набор портов. При этом один из + них устанавливает проверяемый файл. На этом этапе индекс + будет неправильным, потому что установленный порт неожиданно + получит новую зависимость. Индекс может быть по прежнему + неправильным даже после его перестроения, в случае если + другие порты также определят дополнительные зависимости, + основываясь на существовании других файлов.</para> + + <example> + <title>Корректное объявление необязательной зависимости</title> + + <programlisting>OPTIONS_DEFINE= BAR +BAR_DESC= Enable bar support + +.include <bsd.port.options.mk> + +.if ${PORTOPTIONS:MBAR} +LIB_DEPENDS= bar:${PORTSDIR}/foo/bar +.endif</programlisting> + </example> + + <para>Правильным способом является проверка переменных параметров. + Этот способ не приводит к несоответствиям в индексе набора + портов, поскольку параметры определены до построения индекса. + При этом можно использовать простые скрипты для автоматизации + построения, установки и обновления этих портов и соответствующих + им пакетов.</para> + </sect2> + + <sect2 id="use-want"> + <title><makevar>USE_</makevar> и + <makevar>WANT_</makevar></title> + + <para>Переменные <makevar>USE_</makevar> задаются мейнтейнером + порта для определения программного обеспечения, от которого + этот порт зависит. Порт, для которого нужен Firefox, + укажет</para> + + <programlisting>USE_FIREFOX= yes</programlisting> + + <para>Некоторые переменные <makevar>USE_</makevar> могут + принимать номера версий или другие параметры. Например, + порт, который требует Apache 2.2, укажет</para> + + <programlisting>USE_APACHE= 22</programlisting> + + <para>В некоторых случаях для большего контроля над + зависимостями используются переменные <makevar>WANT_</makevar>, + которые позволяют указывать требования в более точной форме. + Например, взгляните на порт <filename + role="package">mail/squirrelmail</filename>. Этому порту + нужны несколько модулей PHP, которые перечислены в переменной + <makevar>USE_PHP</makevar>:</para> + + <programlisting>USE_PHP= session mhash gettext mbstring pcre openssl xml</programlisting> + + <para>Эти модули доступны в версиях CLI и web, поэтому версия + web выбрана с переменной <makevar>WANT_</makevar>:</para> + + <programlisting>WANT_PHP_WEB= yes</programlisting> + + <para>Имеющиеся переменные <makevar>USE_</makevar> и + <makevar>WANT_</makevar> определены в файлах + <filename>/usr/ports/Mk</filename>.</para> + </sect2> + </sect1> <sect1 id="makefile-masterdir"> <title><makevar>MASTERDIR</makevar></title> @@ -3960,27 +4057,28 @@ ${MANPREFIX}/man/de/man3/baz.3.gz</progr <sect1 id="makefile-options"> <title>Опции для Makefile</title> - <para>Некоторые большие приложения могут быть построены в различных - конфигурациях, с дополнительной функциональностью, зависящей от - наличия в системе определённых библиотек или приложений. Например, + <para>Многие приложения могут быть построены в различных + конфигурациях и с дополнительной функциональностью. Например, выбор естественного (человеческого) языка, GUI против командной - строки или типа используемой базы данных. Так как не - всем пользователям требуются эти библиотеки или приложения, то в - системе портов предусмотрен механизм, позволяющий автору порта - принимать решение о конфигурации, которая будет строиться. Полная - поддержка этого механизма облегчает пользователям жизнь и даёт два - или более порта ценой создания одного.</para> + строки или типа используемой базы данных. Пользователи могут + нуждаться в различных конфигурациях, отличных от используемой по + умолчанию, поэтому в системе портов предусмотрен механизм, + позволяющий автору порта управлять сборкой того или иного + варианта конфигурации. + Правильная поддержка этих необязательных параметров облегчает + пользователям жизнь и даёт два или более порта по цене одного.</para> <sect2> - <title>Knobs</title> + <title>Knobs</title> <sect3> - <title><makevar>WITH_<replaceable>*</replaceable></makevar> и + <title><makevar>WITH_<replaceable>*</replaceable></makevar> + и <makevar>WITHOUT_<replaceable>*</replaceable></makevar></title> <para>Эти переменные предназначены для установки системным администратором. Многие из них стандартизованы в файле - <ulink url="http://www.freebsd.org/cgi/cvsweb.cgi/ports/KNOBS?rev=HEAD&content-type=text/x-cvsweb-markup"><filename>ports/KNOBS</filename></ulink>.</para> + <ulink url="http://svn.FreeBSD.org/ports/head/KNOBS?view=markup"><filename>ports/KNOBS</filename></ulink>.</para> <para>При создании порта не давайте имя для knob, специфичное для данного приложения. На примере порта Avahi, используйте @@ -3998,7 +4096,7 @@ ${MANPREFIX}/man/de/man3/baz.3.gz</progr <note> <para>Если обратное не указано, то проверяется только факт - установки самих переменных, но не их значение типа + установки самих переменных, но не их конкретное значение типа <literal>YES</literal> или <literal>NO</literal>.</para> </note> @@ -4042,10 +4140,10 @@ ${MANPREFIX}/man/de/man3/baz.3.gz</progr <row> <entry><makevar>WITHOUT_X11</makevar></entry> - <entry>Если порт может быть собран с поддержкой или без - поддержки X, то, как правило, обычно порт собирается - с поддержкой X. Если эта переменная определена, то - будет собрана версия без поддержки X.</entry> + <entry>Порты, которые могут быть собраны с поддержкой + или без поддержки X, обычно собираются с поддержкой + X. Если эта переменная определена, то будет собрана + версия без поддержки X.</entry> </row> </tbody> </tgroup> @@ -4055,11 +4153,11 @@ ${MANPREFIX}/man/de/man3/baz.3.gz</progr <sect3> <title>Наименование KNOBS</title> - <para>Рекомендуется, чтобы портеры использовали так называемые + <para>Портеры должны использовать так называемые knobs для помощи конечным пользователям и для поддержания количества наименований knobs в небольшом количестве. Список популярных названий knobs можно найти в файле <ulink - url="http://www.freebsd.org/cgi/cvsweb.cgi/ports/KNOBS?rev=HEAD&content-type=text/x-cvsweb-markup">KNOBS</ulink> + url="http://svn.FreeBSD.org/ports/head/KNOBS?view=markup"><filename>KNOBS</filename></ulink> </para> <para>Названия knobs должны отражать, что это такое и что @@ -4074,81 +4172,188 @@ ${MANPREFIX}/man/de/man3/baz.3.gz</progr <sect3> <title>Описание</title> - <para>При установке порта переменная <makevar>OPTIONS</makevar> - предоставляет пользователю окно диалога с доступными - параметрами и сохраняет их в файл - <filename>/var/db/ports/<replaceable>portname</replaceable>/options</filename>. - Эти опции будут повторно использованы при следующем - перестроении порта. Вам больше никогда не понадобится - запоминать все двадцать опций - <makevar>WITH_<replaceable>*</replaceable></makevar> и - <makevar>WITHOUT_<replaceable>*</replaceable></makevar>, - используемых вами при построении этого порта!</para> + <para>При установке порта переменные <makevar>OPTIONS_*</makevar> + предоставляют пользователю окно диалога с отображением + доступных параметров, с записью выбранных параметров в файл + <filename>/var/db/ports/<makevar>${UNIQUENAME}</makevar>/options</filename>. + Эти опции повторно используются при следующем построении + порта.</para> <para>Когда пользователь запускает <command>make config</command> (или запускает впервые <command>make build</command>), - инфраструктура выполнит проверку существования файла - <filename>/var/db/ports/<replaceable>portname</replaceable> - /options</filename>. Если этот файл не существует, то при - создании диалогового окна будут использованы значения - <makevar>OPTIONS</makevar>, в котором их можно переключить. - Затем сохраняется файл опций, и выбранные переменные - используются при построении порта.</para> + инфраструктура выполняет проверку существования файла + <filename>/var/db/ports/<makevar>${UNIQUENAME}</makevar>/options</filename>. + Если этот файл не существует, то используются значения + <makevar>OPTIONS_*</makevar> и отображается диалоговое окно, + в котором эти параметры можно включить или выключить. + Затем сохраняется файл опций <filename>options</filename>, + и выбранные переменные используются при построении порта.</para> <para>Если новая версия порта добавляет новые значения <makevar>OPTIONS</makevar>, то пользователю будет представлено окно диалога с сохраненными заполненными значениями старых <makevar>OPTIONS.</makevar></para> - <para>Для просмотра сохраненной конфигурации используйте - <command>make showconfig</command>. Для удаления + <para><command>make showconfig</command> отображает + сохраненную конфигурацию. Для удаления сохраненной конфигурации используйте <command>make rmconfig</command>.</para> </sect3> <sect3> <title>Синтаксис</title> - <para>Синтаксис переменной <makevar>OPTIONS</makevar>:</para> - <programlisting>OPTIONS= OPTION "descriptive text" default ...</programlisting> + <para><makevar>OPTIONS_DEFINE</makevar> содержит список + используемых <makevar>OPTIONS</makevar>. Они независимы + друг от друга и не сгруппированы:</para> + + <programlisting>OPTIONS_DEFINE= OPT1 OPT2</programlisting> + + <para>Далее после определения следует описание + <makevar>OPTIONS</makevar> (не является обязательным, + но настоятельно рекомендуется):</para> + + <programlisting>OPT1_DESC= Describe OPT1 +OPT2_DESC= Describe OPT2 +OPT3_DESC= Describe OPT3 +OPT4_DESC= Describe OPT4 +OPT5_DESC= Describe OPT5 +OPT6_DESC= Describe OPT6</programlisting> + + <tip> + <para><filename>ports/Mk/bsd.options.desc.mk</filename> + содержит описание множества наиболее используемых + <makevar>OPTIONS</makevar>; переопределять их, как + правило, не нужно.</para> + </tip> + + <tip> + <para>При описании параметров старайтесь представить себя + на месте пользователя: <quote>Что это делает?</quote> + и <quote>Для чего бы я захотел включить это?</quote> + Не делайте простое повторение названия. Например, + описание параметра <literal>NLS</literal> как + <quote>include NLS support</quote> (<quote>включить + поддержку NLS</quote>) не поможет пользователю, который + уже видит название параметра, но может не знать, что + это означает. Описав его как <quote>Native Language + Support via gettext utilities</quote> (<quote>Поддержка + национального языка через утилиты gettext</quote>), + вы поможете пользователю гораздо больше.</para> + </tip> + + <para><makevar>OPTIONS</makevar> можно группировать в виде + переключателей, для которых разрешен выбор единственного + варианта в каждой группе:</para> + + <programlisting>OPTIONS_SINGLE= SG1 +OPTIONS_SINGLE_SG1= OPT3 OPT4</programlisting> + + <para><makevar>OPTIONS</makevar> также можно группировать + в виде списков со множественным выбором, для которых + обязан быть включен <emphasis>по крайней мере + один</emphasis> из параметров:</para> + + <programlisting>OPTIONS_MULTI= MG1 +OPTIONS_MULTI_MG1= OPT5 OPT6</programlisting> + + <para><makevar>OPTIONS_MULTI</makevar> и + <makevar>OPTIONS_SINGLE</makevar> также допускают + отсутствие выбора путём включения группы в + <makevar>OPTIONS_DEFINE</makevar>:</para> + + <programlisting>OPTIONS_DEFINE= MG1 +OPTIONS_MULTI= MG1 +OPTIONS_MULTI_MG1= OPT5 OPT6</programlisting> + + <para>После этого группа требует по крайней мере один + <makevar>OPTION</makevar> из <makevar>MG1</makevar>, + только если выбран новый <makevar>MG1</makevar> + <makevar>OPTION</makevar>. Рекомендуется + поэкспериментировать, чтобы улучшить понимание.</para> + + <para>По умолчанию <makevar>OPTIONS</makevar> находится в + выключенном положении, если при этом оно также отсутствует + в списке <makevar>OPTIONS_DEFAULT</makevar>:</para> - <para>Значением по умолчанию является или <literal>ON</literal>, - или <literal>OFF</literal>. Разрешаются множественные - повторы всех трех полей.</para> + <programlisting>OPTIONS_DEFAULT= OPT1 OPT3 OPT6</programlisting> - <para>Определение <makevar>OPTIONS</makevar> обязано появиться + <para>Определения <makevar>OPTIONS</makevar> обязаны появиться до подключения <filename>bsd.port.options.mk</filename>. - Переменные <makevar>WITH_*</makevar> и - <makevar>WITHOUT_*</makevar> могут быть проверены только после + Переменные <makevar>PORT_OPTIONS</makevar> + могут быть проверены только после подключения <filename>bsd.port.options.mk</filename>. Вместо этого также можно использовать подключение <filename>bsd.port.pre.mk</filename>, что все еще широко используется в портах, написанных до появления <filename>bsd.port.options.mk</filename>. Но имейте в виду, - что некоторые переменные, обычно флаги <makevar>USE_*</makevar>, + что некоторые переменные, обычно, это некоторые флаги + <makevar>USE_*</makevar>, после подключения <filename>bsd.port.pre.mk</filename> будут - работать не так, как это от них ожидается.</para> + работать не так, как этого от них ожидают.</para> <example id="ports-options-simple-use"> <title>Простое использование <makevar>OPTIONS</makevar></title> - <programlisting>OPTIONS= FOO "Enable option foo" On \ - BAR "Support feature bar" Off + + <programlisting>OPTIONS_DEFINE= FOO BAR +FOO_DESC= Enable option foo +BAR_DESC= Support feature bar .include <bsd.port.options.mk> -.if defined(WITHOUT_FOO) -CONFIGURE_ARGS+= --without-foo +.if ${PORT_OPTIONS:MFOO} +CONFIGURE_ARGS+=--with-foo .else -CONFIGURE_ARGS+= --witht-foo +CONFIGURE_ARGS+=--without-foo .endif -.if defined(WITH_BAR) +.if ${PORT_OPTIONS:MBAR} RUN_DEPENDS+= bar:${PORTSDIR}/bar/bar .endif .include <bsd.port.mk></programlisting> </example> + <example id="ports-options-practical-use"> + <title>Пример реального использования + <makevar>OPTIONS</makevar></title> + + <programlisting>OPTIONS_DEFINE= EXAMPLES + +OPTIONS_SINGLE= BACKEND +OPTIONS_SINGLE_BACKEND= MYSQL PGSQL BDB + +OPTIONS_MULTI= AUTH +OPTIONS_MULTI_AUTH= LDAP PAM SSL + +EXAMPLES_DESC= Install extra examples +MYSQL_DESC= Use MySQL as backend +PGSQL_DESC= Use PostgreSQL as backend +BDB_DESC= Use Berkeley DB as backend +LDAP_DESC= Build with LDAP authentication support +PAM_DESC= Build with PAM support +SSL_DESC= Build with OpenSSL support + +OPTIONS_DEFAULT= PGSQL LDAP SSL + +.include <bsd.port.options.mk> + +.if ${PORT_OPTIONS:MPGSQL} +USE_PGSQL= yes +CONFIGURE_ARGS+= --with-postgres +.else +CONFIGURE_ARGS+= --without-postgres +.endif + +.if ${PORT_OPTIONS:MICU} +LIB_DEPENDS+= icuuc:${PORTSDIR}/devel/icu +.endif + +# Check other OPTIONS + +.include <bsd.port.mk></programlisting> + </example> + <example id="ports-options-old-style-use"> <title>Использование <makevar>OPTIONS</makevar> в старом стиле</title> @@ -4164,6 +4369,12 @@ CONFIGURE_ARGS+= --with-foo .include <bsd.port.post.mk></programlisting> </example> + + <important> + <para>Такой способ использования <makevar>OPTIONS</makevar> + является устаревшим, и в будущем его поддержка будет + удалёна. Не используйте этот способ для новых портов.</para> + </important> </sect3> </sect2> @@ -4180,8 +4391,9 @@ CONFIGURE_ARGS+= --with-foo <example> <title>Неправильное управление опцией</title> - <programlisting>.if defined(WITH_FOO) -LIB_DEPENDS+= foo.0:${PORTSDIR}/devel/foo + + <programlisting>.if ${PORT_OPTIONS:MFOO} +LIB_DEPENDS+= foo:${PORTSDIR}/devel/foo CONFIGURE_ARGS+= --enable-foo .endif</programlisting> </example> @@ -4198,8 +4410,9 @@ CONFIGURE_ARGS+= --enable-foo <example> <title>Правильное управление опцией</title> - <programlisting>.if defined(WITH_FOO) -LIB_DEPENDS+= foo.0:${PORTSDIR}/devel/foo + + <programlisting>.if ${PORT_OPTIONS:MFOO} +LIB_DEPENDS+= foo:${PORTSDIR}/devel/foo CONFIGURE_ARGS+= --enable-foo .else CONFIGURE_ARGS+= --disable-foo @@ -5317,7 +5530,7 @@ PLIST_SUB+= NLS="@comment " </sect1> <sect1 id="using-perl"> - <title>Использование <literal>perl</literal></title> + <title>Использование <application>Perl</application></title> <para>Если <makevar>MASTER_SITES</makevar> установлена в значение <makevar>MASTER_SITE_PERL_CPAN</makevar>, то предпочтительным @@ -5334,12 +5547,12 @@ PLIST_SUB+= NLS="@comment " в качестве <makevar>MASTER_SITE_SUBDIR</makevar> разрешается использовать id автора.</para> - <para>Все из настраиваемых knobs ниже принимают и <literal>YES</literal>, - и строку с версией, вида <literal>5.8.0+</literal>. Использование + <para>Все из настраиваемых knobs ниже принимают либо <literal>YES</literal>, + либо строку с версией вида <literal>5.8.0+</literal>. <literal>YES</literal> означает, что данный порт можно использовать - со всеми поддерживаемыми версиями <application>Perl</application>. + с любой из поддерживаемых версий Perl. Если порт работает только с некоторыми версиями - <application>Perl</application>, то это можно обозначить при помощи + Perl, то это можно обозначить при помощи строки с версией, указывающей на минимальную версию (пример: <literal>5.7.3+</literal>), максимальную версию (пример: <literal>5.8.0-</literal>) или точную версию (пример: @@ -5347,14 +5560,14 @@ PLIST_SUB+= NLS="@comment " <table frame="none"> <title>Переменные для портов, использующих - <literal>perl</literal></title> + <application>Perl</application></title> <tgroup cols="2"> <thead> <row> <entry>Переменная</entry> - <entry>Смысл</entry> + <entry>Значение</entry> </row> </thead> @@ -5362,29 +5575,26 @@ PLIST_SUB+= NLS="@comment " <row> <entry><makevar>USE_PERL5</makevar></entry> - <entry>Указывает на то, что порт использует <literal>perl - 5</literal> для своего построения и работы.</entry> + <entry>Perl 5 используется для построения и работы.</entry> </row> <row> <entry><makevar>USE_PERL5_BUILD</makevar></entry> - <entry>Указывает на то, что для построения порт - использует <literal>perl 5</literal>.</entry> + <entry>Perl 5 используется для построения.</entry> </row> <row> <entry><makevar>USE_PERL5_RUN</makevar></entry> - <entry>Указывает на то, что для работы порт использует - <literal>perl 5</literal>.</entry> + <entry>Perl 5 используется во время работы.</entry> </row> <row> <entry><makevar>PERL</makevar></entry> - <entry>Полный маршрут к <literal>perl 5</literal>, либо в - системе, либо установленного из портов, но без номера версии. + <entry>Полный путь к интерпретатору Perl 5, либо в + системе, либо установленному из портов, но без номера версии. Используйте это, если вам нужно заменить строки <quote><literal>#!</literal></quote> в скриптах.</entry> </row> @@ -5417,14 +5627,14 @@ PLIST_SUB+= NLS="@comment " <row> <entry><makevar>PERL_VERSION</makevar></entry> - <entry>Полная версия установленного <literal>perl</literal> + <entry>Полная версия установленного Perl (например, <literal>5.8.9</literal>).</entry> </row> <row> <entry><makevar>PERL_LEVEL</makevar></entry> - <entry>Версия установленного <literal>perl</literal> в форме + <entry>Установленная версия Perl в форме целого числа вида <literal>MNNNPP</literal> (например, <literal>500809</literal>).</entry> </row> @@ -5432,7 +5642,7 @@ PLIST_SUB+= NLS="@comment " <row> <entry><makevar>PERL_ARCH</makevar></entry> - <entry>Место, где <literal>perl</literal> хранит + <entry>Место, в котором Perl хранит архитектурно-зависимые библиотеки. По умолчанию это <literal>${ARCH}-freebsd</literal>.</entry> </row> @@ -5440,7 +5650,7 @@ PLIST_SUB+= NLS="@comment " <row> <entry><makevar>PERL_PORT</makevar></entry> - <entry>Название установленного порта <literal>perl</literal>, + <entry>Название установленного порта Perl, (к примеру, <literal>perl5</literal>).</entry> </row> @@ -5448,8 +5658,8 @@ PLIST_SUB+= NLS="@comment " <entry><makevar>SITE_PERL</makevar></entry> <entry>Имя каталога, куда помещаются специфичные для сайта - пакеты <literal>perl</literal>. Это значение добавляется к - PLIST_SUB.</entry> + пакеты Perl. Это значение добавляется к + <makevar>PLIST_SUB</makevar>.</entry> </row> </tbody> </tgroup> @@ -5462,6 +5672,23 @@ PLIST_SUB+= NLS="@comment " <literal>http://search.cpan.org/dist/Module-Name/</literal> (включая завершающий слэш).</para> </note> + + <note> + <para>Не используйте <literal>${SITE_PERL}</literal> в объявлении + зависимостей. Использование этой конструкции подразумевает + наличие подключенного <filename>bsd.perl.mk</filename>, что + не всегда так. Порты, зависимые от этого порта, получат + неправильные зависимости, если файлы этого порта будут + перемещены при последующем обновлении. Правильный способ + объявления зависимостей для модулей Perl показан в примере + ниже.</para> + </note> + + <example id="use-perl-dependency-example"> + <title>Пример зависимости Perl</title> + + <programlisting>p5-IO-Tee>=0.64:${PORTSDIR}/devel/p5-IO-Tee</programlisting> + </example> </sect1> <sect1 id="using-x11"> @@ -5476,17 +5703,19 @@ PLIST_SUB+= NLS="@comment " компонентов. К настоящему времени доступными компонентами являются:</para> - <para><literal>bigreqsproto compositeproto damageproto dmx dmxproto - evieproto fixesproto fontcacheproto fontenc fontsproto fontutil - glproto ice inputproto kbproto libfs oldx printproto randrproto - recordproto renderproto resourceproto scrnsaverproto sm trapproto - videoproto x11 xau xaw xaw6 xaw7 xaw8 xbitmaps xcmiscproto xcomposite - xcursor xdamage xdmcp xevie xext xextproto xf86bigfontproto - xf86dgaproto xf86driproto xf86miscproto xf86rushproto - xf86vidmodeproto xfixes xfont xfontcache xft xi xinerama - xineramaproto xkbfile xkbui xmu xmuu xorg-server xp xpm xprintapputil - xprintutil xpr oto xproxymngproto xrandr xrender xres xscrnsaver xt - xtrans xtrap xtst xv xvmc xxf86dga xxf86misc xxf86vm</literal>.</para> + <para><literal>bigreqsproto compositeproto damageproto dmx + dmxproto dri2proto evieproto fixesproto fontcacheproto + fontenc fontsproto fontutil glproto ice inputproto kbproto + libfs oldx pciaccess pixman printproto randrproto + recordproto renderproto resourceproto scrnsaverproto sm + trapproto videoproto x11 xau xaw xaw6 xaw7 xbitmaps + xcmiscproto xcomposite xcursor xdamage xdmcp xevie xext + xextproto xf86bigfontproto xf86dgaproto xf86driproto + xf86miscproto xf86rushproto xf86vidmodeproto xfixes xfont + xfontcache xft xi xinerama xineramaproto xkbfile xkbui + xmu xmuu xorg-server xp xpm xprintapputil xprintutil + xproto xproxymngproto xrandr xrender xres xscrnsaver xt + xtrans xtrap xtst xv xvmc xxf86dga xxf86misc xxf86vm</literal>.</para> <para>Всегда актуальный перечень можно найти в <filename>/usr/ports/Mk/bsd.xorg.mk</filename>.</para> @@ -5504,7 +5733,7 @@ PLIST_SUB+= NLS="@comment " USE_GL= glu</programlisting> </example> - <para>Многие порты определяют <makevar>USE_XLIB</makevar>, которая + <para>Некоторые порты определяют <makevar>USE_XLIB</makevar>, которая делает порт зависимым ото всех 50 или около того библиотек. Эта переменная существует для обратной совместимости, т.к. предшествует модульному X.Org, и не должна использоваться в новых портах.</para> @@ -5529,14 +5758,6 @@ USE_GL= glu</programlisting> </row> <row> - <entry><makevar>USE_X_PREFIX</makevar></entry> - - <entry>Является устаревшим. Сейчас это эквивалентно - <makevar>USE_XLIB</makevar> и может быть свободно им - заменено.</entry> - </row> - - <row> <entry><makevar>XMKMF</makevar></entry> <entry>Задаётся маршрут до <command>xmkmf</command>, если он @@ -5706,8 +5927,8 @@ USE_XORG= x11 xpm</programlisting> </itemizedlist> <para>Заметьте, что переменная <makevar>MOTIFLIB</makevar> (как - правило) раскрывается в <literal>-L/usr/X11R6/lib -lXm</literal> или - <literal>/usr/X11R6/lib/libXm.a</literal>, так что нет нужды впереди + правило) раскрывается в <literal>-L/usr/local/lib -lXm</literal> или + <literal>/usr/local/lib/libXm.a</literal>, так что нет нужды впереди добавлять <literal>-L</literal> или <literal>-l</literal>.</para> </sect2> @@ -5877,7 +6098,8 @@ USE_XORG= x11 xpm</programlisting> <entry><makevar>QTNONSTANDARD</makevar></entry> <entry>Подавляет изменение <makevar>CONFIGURE_ENV</makevar>, - <makevar>CONFIGURE_ARGS</makevar> и + <makevar>CONFIGURE_ARGS</makevar>, + <makevar>CPPFLAGS</makevar> и <makevar>MAKE_ENV</makevar>.</entry> </row> @@ -5895,36 +6117,29 @@ USE_XORG= x11 xpm</programlisting> <entry><makevar>QT_COMPONENTS</makevar></entry> <entry>Указывает инструменты и библиотеки в качестве - зависимостей для Qt4. Смотрите подробнее ниже.</entry> + зависимостей для Qt 4. Смотрите подробнее ниже.</entry> </row> <row> <entry><makevar>UIC</makevar></entry> <entry>Устанавливает путь к <command>uic</command> - (переменная только для чтения). По умолчанию - устанавливается в соответствии с переменной - <makevar>USE_QT_VER</makevar>.</entry> + (переменная только для чтения).</entry> </row> <row> <entry><makevar>QMAKE</makevar></entry> <entry>Устанавливает путь к <command>qmake</command> - (переменная только для чтения). По умолчанию - устанавливается в соответствии с переменной - <makevar>USE_QT_VER</makevar>.</entry> + (переменная только для чтения).</entry> </row> <row> <entry><makevar>QMAKESPEC</makevar></entry> <entry>Устанавливает путь к конфигурационному файлу для - <command>qmake</command> (переменная только для чтения). - По умолчанию устанавливается в соответствии с переменной - <makevar>USE_QT_VER</makevar>.</entry> + <command>qmake</command> (переменная только для чтения).</entry> </row> - </tbody> </tgroup> </table> @@ -5937,8 +6152,9 @@ USE_XORG= x11 xpm</programlisting> --with-qt-libraries=${QT_PREFIX}/lib \ --with-extra-libs=${LOCALBASE}/lib \ --with-extra-includes=${LOCALBASE}/include -CONFIGURE_ENV+= MOC="${MOC}" CPPFLAGS="${CPPFLAGS} ${QTCPPFLAGS}" LIBS="${QTCFGLIBS}" \ - QTDIR="${QT_PREFIX}" KDEDIR="${KDE_PREFIX}"</programlisting> +CONFIGURE_ENV+= MOC="${MOC}" LIBS="${QTCFGLIBS}" \ + QTDIR="${QT_PREFIX}" KDEDIR="${KDE_PREFIX}" +CPPFLAGS+= ${QTCPPFLAGS}</programlisting> <para>Если переменная <makevar>USE_QT_VER</makevar> установлена в значение <literal>4</literal>, то также разворачиваются следующие @@ -5952,9 +6168,10 @@ MAKE_ENV+= QMAKESPEC="${QMAKESPEC}" <sect2 id="qt4-components"> <title>Выбор компонентов (только для Qt 4.x)</title> - <para>Если <makevar>USE_QT_VER</makevar> установлена в 4, то в + <para>Если <makevar>USE_QT_VER</makevar> установлена в + значение <literal>4</literal>, то в переменной <makevar>QT_COMPONENTS</makevar> можно указать - зависимость от отдельных инструментов и библиотек Qt4. К каждому + зависимость от отдельных инструментов и библиотек Qt 4. К каждому компоненту можно добавить суффикс, <literal>_build</literal> или <literal>_run</literal>, отражающий, когда должна быть применена зависимость, во время сборки или выполнения, соответственно. Если @@ -5968,7 +6185,7 @@ MAKE_ENV+= QMAKESPEC="${QMAKESPEC}" <filename>/usr/ports/Mk/bsd.qt.mk</filename>):</para> <table frame="none"> - <title>Доступные библиотечные компоненты Qt4</title> + <title>Доступные библиотечные компоненты Qt 4</title> <tgroup cols="2"> <thead> @@ -6003,7 +6220,7 @@ MAKE_ENV+= QMAKESPEC="${QMAKESPEC}" <row> <entry><literal>qt3support</literal></entry> - <entry>библиотека совместимости с Qt3</entry> + <entry>библиотека совместимости с Qt 3</entry> </row> <row> @@ -6035,7 +6252,7 @@ MAKE_ENV+= QMAKESPEC="${QMAKESPEC}" после успешной компиляции.</para> <table frame="none"> - <title>Доступные компоненты инструментов Qt4</title> + <title>Доступные компоненты инструментов Qt 4</title> <tgroup cols="2"> <thead> @@ -6077,7 +6294,7 @@ MAKE_ENV+= QMAKESPEC="${QMAKESPEC}" </table> <table frame="none"> - <title>Доступные компоненты плагинов Qt4</title> + <title>Доступные компоненты плагинов Qt 4</title> <tgroup cols="2"> *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201207240913.q6O9Ds66010131>