Date: Wed, 23 Oct 2013 21:02:20 +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: r43032 - head/ru_RU.KOI8-R/books/porters-handbook Message-ID: <201310232102.r9NL2KLD046460@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: pluknet Date: Wed Oct 23 21:02:20 2013 New Revision: 43032 URL: http://svnweb.freebsd.org/changeset/doc/43032 Log: MFen r39245 -> r42833. Set proper svn properties. Added: head/ru_RU.KOI8-R/books/porters-handbook/uses.xml (contents, props changed) head/ru_RU.KOI8-R/books/porters-handbook/versions.xml (contents, props changed) Modified: head/ru_RU.KOI8-R/books/porters-handbook/Makefile head/ru_RU.KOI8-R/books/porters-handbook/book.xml (contents, props changed) Modified: head/ru_RU.KOI8-R/books/porters-handbook/Makefile ============================================================================== --- head/ru_RU.KOI8-R/books/porters-handbook/Makefile Wed Oct 23 17:44:01 2013 (r43031) +++ head/ru_RU.KOI8-R/books/porters-handbook/Makefile Wed Oct 23 21:02:20 2013 (r43032) @@ -27,6 +27,8 @@ INSTALL_ONLY_COMPRESSED?= # XML content SRCS= book.xml +SRCS+= uses.xml +SRCS+= versions.xml # Entities #SRCS+= ../../../en_US.ISO8859-1/books/handbook/authors.ent Modified: head/ru_RU.KOI8-R/books/porters-handbook/book.xml ============================================================================== --- head/ru_RU.KOI8-R/books/porters-handbook/book.xml Wed Oct 23 17:44:01 2013 (r43031) +++ head/ru_RU.KOI8-R/books/porters-handbook/book.xml Wed Oct 23 21:02:20 2013 (r43032) @@ -1,6 +1,9 @@ <?xml version="1.0" encoding="koi8-r"?> <!DOCTYPE book PUBLIC "-//FreeBSD//DTD DocBook XML V4.5-Based Extension//EN" - "../../../share/xml/freebsd45.dtd"> + "../../../share/xml/freebsd45.dtd" [ +<!ENTITY values.uses SYSTEM "uses.xml"> +<!ENTITY values.versions SYSTEM "versions.xml"> +]> <!-- The FreeBSD Russian Documentation Project @@ -8,7 +11,7 @@ $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: r39245 + Original revision: r42833 --> <book lang="ru"> @@ -19,7 +22,7 @@ <corpauthor>The FreeBSD Documentation Project</corpauthor> </authorgroup> - <pubdate>Апрель 2000</pubdate> + <pubdate>$FreeBSD$</pubdate> <copyright> <year>2000</year> @@ -35,6 +38,7 @@ <year>2010</year> <year>2011</year> <year>2012</year> + <year>2013</year> <holder role="mailto:doc@FreeBSD.org"> The FreeBSD Documentation Project</holder> </copyright> @@ -124,12 +128,7 @@ <para>Минимальный <filename>Makefile</filename> будет выглядеть примерно так:</para> - <programlisting># New ports collection makefile for: oneko -# Date created: 5 December 1994 -# Whom: asami -# -# $FreeBSD$ -# + <programlisting># $FreeBSD$ PORTNAME= oneko PORTVERSION= 1.1b @@ -137,13 +136,21 @@ CATEGORIES= games MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/ MAINTAINER= asami@FreeBSD.org +COMMENT= Cat chasing a mouse all over the screen MAN1= oneko.1 MANCOMPRESSED= yes -USE_IMAKE= yes .include <bsd.port.mk></programlisting> + <note> + <para>В некоторых случаях в заголовке <filename>Makefile</filename> + существующего порта могут содержаться дополнительные строки, + такие как название порта и дата его создания. + Эта дополнительная информация была объявлена устаревшей + и находится в процессе удаления.</para> + </note> + <para>Посмотрим, сможете ли вы его понять. Не обращайте внимание на содержимое строчки <literal>$FreeBSD$</literal>, она будет заполнена автоматически системой SVN, когда порт будет @@ -174,12 +181,33 @@ USE_IMAKE= yes из <filename>README</filename> или страниц справочника</emphasis>; слишком часто они не являются кратким описанием порта или имеют неудобный формат (например, страницы - справочника выровнены пробелами). Если портируемое приложение - имеет официальную страничку Интернет, укажите ее здесь. - Перед <emphasis>одним</emphasis> из сайтов добавьте слово - <literal>WWW:</literal> для того, чтобы вспомогательные утилиты - работали правильно.</para> - </note> + справочника выровнены пробелами, поскольку это выглядит в + особенности плохо с моноширинными шрифтами).</para> + </note> + + <para>Хорошо составленный <filename>pkg-descr</filename> + описывает порт достаточно полно, чтобы пользователю не + приходилось сверяться с документацией или посещать вебсайт + для понимания того, что делает данное программное обеспечение, + чем оно может быть полезно или какие хорошие функции у него + имеются. Упоминание про определённые требования, такие как + используемый графический инструментарий, тяжёлые зависимости, + окружение для запуска или используемый язык программирования + помогут пользователям определиться, будет ли этот порт для + них работать.</para> + + <para>Включите сюда URL официальной домашней страницы Интернет. + Перед <emphasis>одним</emphasis> из сайтов (выберите основной) + добавьте <literal>WWW:</literal> (с последующим единичным + пробелом) для того, чтобы вспомогательные утилиты работали + правильно. Если URI является корнем сайта или каталогом, + то значение должно быть дополнено косой чертой.</para> + + <note> + <para>Если указанная для порта веб-страница не доступна, + попытайтесь сперва поискать, был ли официальный сайт + перемещён, переименован или размещён в другом месте.</para> + </note> <para>Следующий пример показывает, как должен выглядеть ваш <filename>pkg-descr</filename>:</para> @@ -255,6 +283,18 @@ PLIST_DIRS= lib/X11/oneko</programli <para>Конечно, переменная <makevar>PLIST_DIRS</makevar> не должна задаваться, если порт не устанавливает никаких каталогов.</para> + <note> + <para>Несколько портов могут совместно использовать общий + каталог. В этом случае <makevar>PLIST_DIRS</makevar> + следует заменить на <makevar>PLIST_DIRSTRY</makevar>, так + чтобы каталог удалялся только если он пуст, а иначе + игнорировался. Использование <makevar>PLIST_DIRS</makevar> + и <makevar>PLIST_DIRSTRY</makevar> аналогично + <literal>@dirrm</literal> и <literal>@dirrmtry</literal> + в <filename>pkg-plist</filename>, описание которых + входит в <xref linkend="plist-dir-cleaning"/>.</para> + </note> + <para>Обратной стороной такого способа перечисления файлов и каталогов порта является невозможность использования последовательностей команд, описанных в &man.pkg.create.1;. @@ -435,10 +475,11 @@ PLIST_DIRS= lib/X11/oneko</programli очереди для включения во &os;.</para> <para>Мы рассмотрим ваш порт, при необходимости вернём его обратно, а - затем включим порт в наше дерево. Ваше имя также появится в списке - <ulink url="&url.articles.contributors;/contrib-additional.html"> - Дополнительных контрибуторов проекта FreeBSD</ulink> и других - файлах. Разве это не великолепно?!? <!-- smiley -->:-)</para> + затем включим порт в наше дерево. Ваше имя также будет добавлено + в список <ulink + url="&url.articles.contributors;/contrib-additional.html"> + Дополнительных контрибуторов проекта FreeBSD</ulink> и другие + файлы.</para> </sect1> </chapter> @@ -521,12 +562,6 @@ PLIST_DIRS= lib/X11/oneko</programli <filename><makevar>WRKSRC</makevar>/configure</filename>. </para> </listitem> - - <listitem> - <para>Если задана переменная <makevar>USE_IMAKE</makevar>, - то запускается команда <makevar>XMKMF</makevar> (по умолчанию - это <command>xmkmf -a</command>).</para> - </listitem> </orderedlist> </step> @@ -534,7 +569,7 @@ PLIST_DIRS= lib/X11/oneko</programli <para>Выполняется цель <maketarget>build</maketarget>. Она отвечает за переход в собственный рабочий каталог порта (<makevar>WRKSRC</makevar>) и его построение. Если задана - переменная <makevar>USE_GMAKE</makevar>, будет использоваться + переменная <makevar>USES= gmake</makevar>, будет использоваться GNU-версия утилиты <command>make</command>, в противном случае будет использована системная утилита <command>make</command>.</para> @@ -759,8 +794,7 @@ PLIST_DIRS= lib/X11/oneko</programli на значение переменной. Пример:</para> <programlisting>post-patch: - @${REINPLACE_CMD} -e 's|for Linux|for FreeBSD|g' ${WRKSRC}/README - @${REINPLACE_CMD} -e 's|-pthread|${PTHREAD_LIBS}|' ${WRKSRC}/configure</programlisting> + @${REINPLACE_CMD} -e 's|for Linux|for FreeBSD|g' ${WRKSRC}/README</programlisting> <para>Довольно часто бывают ситуации, когда портируемое программное обеспечение, особенно если основной платформой разработки является @@ -993,6 +1027,26 @@ DOS2UNIX_REGEX= .*\.(c|cpp|h)</programl (изначально это не считалось бы более новой версией, так как 20000801 численно больше, чем 1).</para> + <tip> + <para>Результат сравнения номера версии не всегда очевиден. + Для выполнения сравнения двух строк с номером версии можно + использовать &man.pkg.version.1;. Эквивалентом в + <application>pkgng</application> является + <command>pkg version -t</command>. Например:</para> + + <screen>&prompt.user; <userinput>pkg_version -t 0.031 0.29</userinput> +></screen> + + <para>Для пользователей <application>pkgng</application>:</para> + + <screen>&prompt.user; <userinput>pkg version -t 0.031 0.29</userinput> +></screen> + + <para>Строка <literal>></literal> в выводе команды означает, + что версия 0.031 считается выше, чем версия 0.29, что может + быть не очевидно для того, кто выполняет портирование.</para> + </tip> + <para>В ситуациях, подобных этой, должно быть увеличено значение <makevar>PORTEPOCH</makevar>. Если значение <makevar>PORTEPOCH</makevar> не равно нулю, то оно добавляется к @@ -2003,11 +2057,7 @@ PORTEPOCH= 1</programlisting> поддерживает саму оконную систему. Не помещайте сюда обычные приложения для X: большинство из них должны быть перенесены в другие категории <filename>x11-*</filename> - (смотрите ниже). Если ваш порт <emphasis>является</emphasis> - приложением для X, задайте <makevar>USE_XLIB</makevar> (что - подразумевается при использовании - <makevar>USE_IMAKE</makevar>) и укажите подходящую - категорию.</entry> + (смотрите ниже).</entry> </row> <row> @@ -3343,19 +3393,102 @@ ALWAYS_KEEP_DISTFILES= yes <sect1 id="makefile-comment"> <title><makevar>COMMENT</makevar></title> - <para>Это однострочное описание порта. <emphasis>Пожалуйста</emphasis>, - не включайте сюда название пакета (или номер версии программного - обеспечения). Комментарий должен начинаться с заглавной буквы и не - заканчиваться точкой. Вот пример:</para> + <para>Содержит однострочное описание порта. Пожалуйста, соблюдайте + следующие правила:</para> + + <orderedlist> + <listitem> + <para>Старайтесь делать строку COMMENT длиной не больше, чем 70 + символов, так как эта строка будет использована программой + &man.pkg.info.1; для отображения однострочного описания + порта;</para> + </listitem> + + <listitem> + <para><emphasis>Не</emphasis> включайте сюда название пакета + (или номер версии программного обеспечения);</para> + </listitem> + + <listitem> + <para>Комментарий должен начинаться с заглавной буквы и не + заканчиваться точкой;</para> + </listitem> + + <listitem> + <para>Не начинайте комментарий с неопределённого артикля (A + или An);</para> + </listitem> + + <listitem> + <para>Имена пишутся с заглавной буквы (например, Apache, + JavaScript. Perl);</para> + </listitem> + + <listitem> + <para>Для перечислений используйте английскую Оксфордскую + запятую (англ. Oxford comma) (например, green, + red<emphasis>,</emphasis> and blue);</para> + </listitem> + + <listitem> + <para>Используйте программу проверки орфографии.</para> + </listitem> + </orderedlist> + + <para>Вот пример:</para> - <programlisting>A cat chasing a mouse all over the screen</programlisting> + <programlisting>Cat chasing a mouse all over the screen</programlisting> <para>В файле <filename>Makefile</filename> переменная COMMENT должна следовать сразу за переменной MAINTAINER.</para> + </sect1> + + <sect1 id="makefile-portscout"> + <title><makevar>PORTSCOUT</makevar></title> + + <para><application>Portscout</application> являет собой + автоматизированное средство проверки доступности дистрибутивных + файлов для Коллекции Портов &os;, подробное описание которого + предоставляет <xref linkend="distfile-survey"/>.</para> + + <para>Переменная <makevar>PORTSCOUT</makevar> задаёт специальные + условия, ограничивающие работу <application>Portscout</application> + - сканера дистрибутивных файлов.</para> + + <para>Ситуации, при которых следует указывать переменную + <makevar>PORTSCOUT</makevar>:</para> + + <itemizedlist> + <listitem> + <para>Когда должны игнорироваться дистрибутивные файлы для + конкретных версий или младших ревизий. Например, чтобы + исключить из проверок новых версий дистрибутивных файлов + версию <replaceable>8.2</replaceable> по причине того, что + она является поломанной, добавьте следующее:</para> + + <programlisting>PORTSCOUT= ignore:8.2</programlisting> + + </listitem> + <listitem> + <para>Когда должны проверяться конкретные версии или старшие + и младшие ревизии дистрибутивных файлов. Например, если + следует ограничиться проверкой версии + <replaceable>0.6.4</replaceable>, потому что более новые + версии имеют проблемы совместимости с &os;, добавьте:</para> + + <programlisting>PORTSCOUT= limit:^0\.6\.4</programlisting> + + </listitem> + <listitem> + <para>Когда URL, в которых указаны доступные версии, отличаются + от URL их загрузки. Например, чтобы привязать проверку новых + версий дистрибутивных файлов к странице загрузки для порта + <filename role="package">databases/pgtune</filename>, + добавьте:</para> - <para>Пожалуйста, постарайтесь делать строку COMMENT длиной не больше, - чем 70 символов, так как эта строка будет использована программой - &man.pkg.info.1; для отображения однострочного описания порта.</para> + <programlisting>PORTSCOUT= site:http://pgfoundry.org/frs/?group_id=1000416</programlisting> + </listitem> + </itemizedlist> </sect1> <sect1 id="makefile-depend"> @@ -3377,38 +3510,23 @@ ALWAYS_KEEP_DISTFILES= yes <para>Эта переменная указывает, от каких совместно используемых библиотек зависит порт. Это список пар - <replaceable>lib</replaceable>:<replaceable>dir</replaceable><optional><replaceable>:target</replaceable></optional> + <replaceable>lib</replaceable>:<replaceable>dir</replaceable> где <replaceable>lib</replaceable> - это имя библиотеки, <replaceable>dir</replaceable> - это каталог, в котором можно ее - найти в случае, если ее нет на машине, и - <replaceable>target</replaceable> - это цель, которую нужно вызвать - в этом каталоге. Например,</para> + найти в случае, если ее нет на машине. Например,</para> - <programlisting>LIB_DEPENDS= jpeg:${PORTSDIR}/graphics/jpeg</programlisting> + <programlisting>LIB_DEPENDS= libjpeg.so:${PORTSDIR}/graphics/jpeg</programlisting> <para>проверит наличие библиотеки jpeg с любым номером версии и перейдет в подкаталог <filename>graphics/jpeg</filename> вашего дерева портов для ее построения и установки, если библиотека - отсутствует. Часть <replaceable>target</replaceable> может быть - опущена, если она равна <makevar>DEPENDS_TARGET</makevar> - (по умолчанию <literal>install</literal>).</para> - - <note> - <para>Часть <replaceable>lib</replaceable> является регулярным - выражением, которое вызывается для вывода, полученного из - <command>ldconfig -r</command>. Разрешаются такие значения, как - <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> <para>Зависимость проверяется дважды, один раз внутри цели <maketarget>extract</maketarget>, а затем из цели <maketarget>install</maketarget>. Кроме того, имя зависимости помещается в пакет, так что &man.pkg.add.1; будет - автоматически его устанавливать, если его нет на пользовательской + автоматически её устанавливать, если её нет на пользовательской системе.</para> </sect2> @@ -3484,7 +3602,7 @@ ALWAYS_KEEP_DISTFILES= yes с переменными <makevar>USE_<replaceable>*</replaceable></makevar>, которые обрабатываются в <filename>ports/Mk/bsd.*.mk</filename> для пополнения первоначальных зависимостей построения. Например, - <literal>USE_GMAKE=yes</literal> добавляет + <literal>USES= gmake</literal> добавляет <filename role="package">devel/gmake</filename> в <makevar>BUILD_DEPENDS</makevar>. Для предотвращения загрязнения <makevar>RUN_DEPENDS</makevar> подобными дополнительными @@ -3595,6 +3713,26 @@ ALWAYS_KEEP_DISTFILES= yes совпадает с <makevar>DEPENDS_TARGET</makevar>.</para> </sect2> + <sect2 id="uses"> + <title><makevar>USES</makevar></title> + + <para>Существует несколько параметров для определения различных + видов характерных особенностей и зависимостей, которыми + обладает рассматриваемый порт. Они могут быть указаны путём + добавления следующей строки в <filename>Makefile</filename> + порта:</para> + + <programlisting>USES= feature[:arguments]</programlisting> + + <para>Для получения полного списка значений смотрите <xref + linkend="uses-values"/>.</para> + + <warning> + <para>Значение <makevar>USES</makevar> нельзя присваивать + после подключения <filename>bsd.port.pre.mk</filename>.</para> + </warning> + </sect2> + <sect2 id="use-vars"> <title><makevar>USE_<replaceable>*</replaceable></makevar></title> @@ -3614,10 +3752,11 @@ ALWAYS_KEEP_DISTFILES= yes в <filename>/etc/make.conf</filename> <emphasis>всегда</emphasis> является ошибочным действием. В частности, установка</para> - <programlisting>USE_GCC= 3.4</programlisting> + <programlisting>USE_GCC=X.Y</programlisting> - <para>добавит зависимость - от gcc34 к каждому порту, включая сам gcc34!</para> + <para>(где X.Y соответствует версии) добавит зависимость + от gccXY к каждому порту, включая и сам + <literal>lang/gccXY</literal>!</para> </note> <table frame="none"> @@ -3629,7 +3768,7 @@ ALWAYS_KEEP_DISTFILES= yes <row> <entry>Переменная</entry> - <entry>Смысл</entry> + <entry>Значение</entry> </row> </thead> @@ -3649,35 +3788,30 @@ ALWAYS_KEEP_DISTFILES= yes </row> <row> - <entry><makevar>USE_BISON</makevar></entry> - - <entry>Для построения порт использует - <command>bison</command>.</entry> - </row> - - <row> - <entry><makevar>USE_CDRTOOLS</makevar></entry> - - <entry>Порт требует <application>cdrecord</application> - из <filename - role="package">sysutils/cdrtools</filename> или <filename - role="package">sysutils/cdrtools-cjk</filename> в - зависимости от предпочтений пользователя.</entry> - </row> - - <row> <entry><makevar>USE_GCC</makevar></entry> - <entry>Порт требует для сборки специальную версию - <command>gcc</command>. Точная версия может быть указана - в значении переменной, например <literal>3.4</literal>. - Минимально необходимую версию можно указать как - <literal>3.4+</literal>. <command>gcc</command> из - основной системы используется в случае, если он - удовлетворяет запрошенной версии, иначе производится - компиляция подходящей версии <command>gcc</command> из - портов с коррекций переменных <makevar>CC</makevar> и - <makevar>CXX</makevar>.</entry> + <entry>Для сборки порта требуется GCC + (<command>gcc</command> или <command>g++</command>). + Некоторым портам подходит любая версия, для других + требуются последние современные версии. Обычно + используется со значением <literal>any</literal> (в + этом случае используется встроенный GCC в тех + версиях &os;, в состав которых он всё ещё входит, + или устанавливается порт + <literal>lang/gcc</literal>, когда Clang является + компилятором C/C++ по умолчанию) или + <literal>yes</literal> (всегда используется + стабильная современная версия GCC из порта + <literal>lang/gcc</literal>). Также в значении + переменной можно указать точную версию, например + <literal>4.7</literal>. Минимально допустимую + версию можно указать как <literal>4.6+</literal>. + GCC из основной системы используется в случае, если + его версия удовлетворяет запрошенной, иначе + собирается подходящая версии компилятора из порта с + соответствующей коррекцией переменных + <makevar>CC</makevar> и <makevar>CXX</makevar>. + </entry> </row> </tbody> @@ -3810,11 +3944,11 @@ LIB_DEPENDS= bar:${PORTSDIR}/foo/bar <title>Корректное объявление необязательной зависимости</title> <programlisting>OPTIONS_DEFINE= BAR -BAR_DESC= Enable bar support +BAR_DESC= Bar support .include <bsd.port.options.mk> -.if ${PORTOPTIONS:MBAR} +.if ${PORT_OPTIONS:MBAR} LIB_DEPENDS= bar:${PORTSDIR}/foo/bar .endif</programlisting> </example> @@ -3962,13 +4096,6 @@ MASTERDIR= ${.CURDIR}/../xdvi300 <filename>bsd.port.mk</filename> ничего дополнительно делать не нужно.</para> - <para>Значение переменной <makevar>MANCOMPRESSED</makevar> автоматически - устанавливается в <literal>yes</literal>, если переменная - <makevar>USE_IMAKE</makevar> задана, а - <makevar>NO_INSTALL_MANPAGES</makevar> нет, и в значение - <literal>no</literal> в противном случае. Вам не нужно задавать ее - явно, если значение по умолчанию подходит вашему порту.</para> - <para>Если ваш порт определяет корнем для файлов Справочника каталог, отличный от <makevar>PREFIX</makevar>, вы можете использовать переменную <makevar>MANPREFIX</makevar>, чтобы задать его явно. Кроме @@ -4078,7 +4205,7 @@ ${MANPREFIX}/man/de/man3/baz.3.gz</progr <para>Эти переменные предназначены для установки системным администратором. Многие из них стандартизованы в файле - <ulink url="http://svn.FreeBSD.org/ports/head/KNOBS?view=markup"><filename>ports/KNOBS</filename></ulink>.</para> + <ulink url="http://svnweb.FreeBSD.org/ports/head/KNOBS?view=markup"><filename>ports/KNOBS</filename></ulink>.</para> <para>При создании порта не давайте имя для knob, специфичное для данного приложения. На примере порта Avahi, используйте @@ -4110,19 +4237,11 @@ ${MANPREFIX}/man/de/man3/baz.3.gz</progr <row> <entry>Переменная</entry> - <entry>Значения</entry> + <entry>Значение</entry> </row> </thead> <tbody> - <row id="knobs-without-nls"> - <entry><makevar>WITHOUT_NLS</makevar></entry> - - <entry>Если установлена, указывает не задействовать - интернационализацию, что может ускорить компиляцию. - По умолчанию, интернационализация используется.</entry> - </row> - <row> <entry><makevar>WITH_OPENSSL_BASE</makevar></entry> @@ -4136,15 +4255,6 @@ ${MANPREFIX}/man/de/man3/baz.3.gz</progr <filename role="package">security/openssl</filename>, даже если в базовой системе последняя версия.</entry> </row> - - <row> - <entry><makevar>WITHOUT_X11</makevar></entry> - - <entry>Порты, которые могут быть собраны с поддержкой - или без поддержки X, обычно собираются с поддержкой - X. Если эта переменная определена, то будет собрана - версия без поддержки X.</entry> - </row> </tbody> </tgroup> </table> @@ -4157,7 +4267,7 @@ ${MANPREFIX}/man/de/man3/baz.3.gz</progr knobs для помощи конечным пользователям и для поддержания количества наименований knobs в небольшом количестве. Список популярных названий knobs можно найти в файле <ulink - url="http://svn.FreeBSD.org/ports/head/KNOBS?view=markup"><filename>KNOBS</filename></ulink> + url="http://svnweb.FreeBSD.org/ports/head/KNOBS?view=markup"><filename>KNOBS</filename></ulink> </para> <para>Названия knobs должны отражать, что это такое и что @@ -4249,6 +4359,13 @@ OPT6_DESC= Describe OPT6</programlisting <programlisting>OPTIONS_SINGLE= SG1 OPTIONS_SINGLE_SG1= OPT3 OPT4</programlisting> + <para><makevar>OPTIONS</makevar> можно группировать в виде + переключателей, для которых разрешен выбор единственного + варианта (или ни одного) в каждой группе:</para> + + <programlisting>OPTIONS_RADIO= RG1 +OPTIONS_RADIO_RG1= OPT7 OPT8</programlisting> + <para><makevar>OPTIONS</makevar> также можно группировать в виде списков со множественным выбором, для которых обязан быть включен <emphasis>по крайней мере @@ -4257,20 +4374,13 @@ OPTIONS_SINGLE_SG1= OPT3 OPT4</programli <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>OPTIONS</makevar> также можно группировать + в виде списков со множественным выбором, для которых + могут быть включены любые параметры, включая отсутствие + выбора:</para> - <para>После этого группа требует по крайней мере один - <makevar>OPTION</makevar> из <makevar>MG1</makevar>, - только если выбран новый <makevar>MG1</makevar> - <makevar>OPTION</makevar>. Рекомендуется - поэкспериментировать, чтобы улучшить понимание.</para> + <programlisting>OPTIONS_GROUP= GG1 +OPTIONS_GROUP_GG1= OPT9 OPT10</programlisting> <para>По умолчанию <makevar>OPTIONS</makevar> находится в выключенном положении, если при этом оно также отсутствует @@ -4314,6 +4424,15 @@ RUN_DEPENDS+= bar:${PORTSDIR}/bar/bar .include <bsd.port.mk></programlisting> </example> + <example id ="ports-options-check-unset"> + <title>Проверка незаданных значений + <makevar>OPTIONS</makevar></title> + + <programlisting>.if ! ${PORT_OPTIONS:MEXAMPLES} +CONFIGURE_ARGS+=--without-examples +.endif</programlisting> + </example> + <example id="ports-options-practical-use"> <title>Пример реального использования <makevar>OPTIONS</makevar></title> @@ -4349,32 +4468,42 @@ CONFIGURE_ARGS+= --without-postgres 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> - <programlisting>OPTIONS= FOO "Enable option foo" On - -.include <bsd.port.pre.mk> - -.if defined(WITHOUT_FOO) -CONFIGURE_ARGS+= --without-foo -.else -CONFIGURE_ARGS+= --with-foo +.if ! ${PORT_OPTIONS:MEXAMPLES} +CONFIGURE_ARGS+= --without-examples .endif -.include <bsd.port.post.mk></programlisting> +# Проверка других параметров OPTIONS + +.include <bsd.port.mk></programlisting> </example> + </sect3> - <important> - <para>Такой способ использования <makevar>OPTIONS</makevar> - является устаревшим, и в будущем его поддержка будет - удалёна. Не используйте этот способ для новых портов.</para> - </important> + <sect3> + <title>Параметры по умолчанию</title> + <para>Следующие параметры по умолчанию всегда включены.</para> + <itemizedlist> + <listitem> + <para><literal>DOCS</literal> — построение и установка + документации.</para> + </listitem> + <listitem> + <para><literal>NLS</literal> — интернационализация.</para> + </listitem> + <listitem> + <para><literal>EXAMPLES</literal> — построение и + установка примеров использования.</para> + </listitem> + <listitem> + <para><literal>IPV6</literal> — поддержка протокола + IPv6.</para> + </listitem> + </itemizedlist> + <note> + <para>Нет необходимости добавлять эти параметры в + <makevar>OPTIONS_DEFAULT</makevar>. Тем не менее, чтобы + отобразить их в окне диалога выбора параметров, они должны + быть добавлены в <makevar>OPTIONS_DEFINE</makevar>.</para> + </note> </sect3> </sect2> @@ -4393,7 +4522,7 @@ CONFIGURE_ARGS+= --with-foo <title>Неправильное управление опцией</title> <programlisting>.if ${PORT_OPTIONS:MFOO} -LIB_DEPENDS+= foo:${PORTSDIR}/devel/foo +LIB_DEPENDS+= libfoo.so:${PORTSDIR}/devel/foo CONFIGURE_ARGS+= --enable-foo .endif</programlisting> </example> @@ -4412,7 +4541,7 @@ CONFIGURE_ARGS+= --enable-foo <title>Правильное управление опцией</title> <programlisting>.if ${PORT_OPTIONS:MFOO} -LIB_DEPENDS+= foo:${PORTSDIR}/devel/foo +LIB_DEPENDS+= libfoo.so:${PORTSDIR}/devel/foo CONFIGURE_ARGS+= --enable-foo .else CONFIGURE_ARGS+= --disable-foo @@ -4422,148 +4551,445 @@ CONFIGURE_ARGS+= --disable-foo <para>Во втором примере библиотека libfoo отключена явным образом. Сценарий configure не включает соответствующие функции в приложении, несмотря на присутствие библиотеки в системе.</para> - </sect2> - </sect1> + <note> + <para>При определенных условиях сокращенный синтаксис записи + условий может вызывать проблемы со сложными конструкциями. + Если вы получаете ошибки, такие как <literal>Malformed + conditional</literal>, то может быть использован + альтернативный синтаксис.</para> + + <programlisting>.if !empty(VARIABLE:MVALUE) +# as an alternative to +.if ${VARIABLE:MVALUE}</programlisting> + </note> + </sect2> - <sect1 id="makefile-wrkdir"> - <title>Задание рабочего каталога</title> + <sect2> + <title>Вспомогательные макросы</title> - <para>Каждый порт распаковывается в рабочий каталог, который должен быть - доступным для записи. В системе портов по умолчанию - <makevar>DISTFILES</makevar> распаковываются в каталог с именем - <literal>${DISTNAME}</literal>. Другими словами, если вы - задали:</para> + <para>Существует несколько макросов, упрощающих запись условных + значений, которые отличаются в зависимости от набора + параметров.</para> - <programlisting>PORTNAME= foo -PORTVERSION= 1.0</programlisting> + <para>Если переменная <makevar>OPTIONS_SUB</makevar> имеет + значение <literal>yes</literal>, то каждый из указанных в + <makevar>OPTIONS_DEFINE</makevar> параметров будет добавлен + в <makevar>PLIST_SUB</makevar>. Следующая запись:</para> - <para>то дистрибутивные файлы порта содержат каталог верхнего уровня, - <filename>foo-1.0</filename>, и все файлы расположены в этом - каталоге.</para> + <programlisting>OPTIONS_DEFINE= OPT1 +OPTIONS_SUB= yes</programlisting> - <para>Если это не ваш случай, то имеется несколько переменных, которые - вы можете переопределить.</para> + <para>соответствует:</para> - <sect2> - <title><makevar>WRKSRC</makevar></title> + <programlisting>OPTIONS_DEFINE= OPT1 - <para>Эта переменная задаёт имя каталога, который создаётся при - распаковке исходных файлов приложения. В нашем предыдущем - примере если бы распаковка происходила в каталог с именем - <filename>foo</filename> (а не - <filename>foo-1.0</filename>), то вы должны написать:</para> +.include <bsd.port.options.mk> - <programlisting>WRKSRC= ${WRKDIR}/foo</programlisting> +.if ${PORT_OPTIONS:MOPT1} +PLIST_SUB+= OPT1="" +.else +PLIST_SUB+= OPT1="@comment " +.endif</programlisting> - <para>или, как вариант</para> + <para><makevar>X_CONFIGURE_ENABLE</makevar> дописывает в + <makevar>CONFIGURE_ARGS</makevar> строку + <literal>--enable-${X_CONFIGURE_ENABLE}</literal> или + <literal>--disable-${X_CONFIGURE_ENABLE}</literal> в + соответствии с состоянием <makevar>X</makevar>. Следующая + запись:</para> - <programlisting>WRKSRC= ${WRKDIR}/${PORTNAME}</programlisting> - </sect2> + <programlisting>OPTIONS_DEFINE= OPT1 +OPT1_CONFIGURE_ENABLE= test</programlisting> - <sect2> - <title><makevar>NO_WRKSUBDIR</makevar></title> + <para>соответствует:</para> - <para>Если порт вообще не распаковывается ни в какой каталог, то вы - должны задать переменную <makevar>NO_WRKSUBDIR</makevar> для указания - на этот факт.</para> + <programlisting>OPTIONS_DEFINE= OPT1 - <programlisting>NO_WRKSUBDIR= yes</programlisting> - </sect2> - </sect1> +.include <bsd.port.options.mk> - <sect1 id="conflicts"> - <title>Разрешение конфликтов</title> +.if ${PORT_OPTIONS:MOPT1} +CONFIGURE_ARGS+= --enable-test +.else +CONFIGURE_ARGS+= --disable-test +.endif</programlisting> - <para>Для регистрации конфликта между пакетами и портами используются - три различные переменные: <makevar>CONFLICTS</makevar>, - <makevar>CONFLICTS_INSTALL</makevar> и - <makevar>CONFLICTS_BUILD</makevar>.</para> + <para><makevar>X_CONFIGURE_WITH</makevar> дописывает в + <makevar>CONFIGURE_ARGS</makevar> строку + <literal>--with-${X_CONFIGURE_WITH}</literal> или + <literal>--without-${X_CONFIGURE_WITH}</literal> в + соответствии с состоянием <makevar>X</makevar>. Следующая + запись:</para> - <note> - <para>Переменные регистрации конфликта автоматически определяют - переменную <makevar>IGNORE</makevar>, которая более подробно - описана в <xref linkend="dads-noinstall"/>.</para> - </note> + <programlisting>OPTIONS_DEFINE= OPT1 +OPT1_CONFIGURE_WITH= test</programlisting> - <para>При удалении одного из конфликтующих портов целесообразно - сохранить записи <makevar>CONFLICTS</makevar> в тех других портах - в течении нескольких месяцев, чтобы позаботиться о тех пользователей, - которые обновляются от случая к случаю.</para> + <para>соответствует:</para> - <sect2> - <title><makevar>CONFLICTS_INSTALL</makevar></title> + <programlisting>OPTIONS_DEFINE= OPT1 - <para>Если ваш пакет не может существовать вместе с другими - (из-за конфликта файлов, несовместимости времени выполнения и так - далее), перечислите имена остальных пакетов в переменной - <makevar>CONFLICTS_INSTALL</makevar>. Здесь вы можете использовать - шаблоны командного интерпретатора, такие как <literal>*</literal> - и <literal>?</literal>. Имена пакетов должны выглядеть так же, - как в <filename>/var/db/pkg</filename>. Пожалуйста, убедитесь, - что <makevar>CONFLICTS_INSTALL</makevar> не содержит пакет самого - этого порта. В противном случае не будет работать установка с - использованием переменной <makevar>FORCE_PKG_REGISTER</makevar>. - Проверка CONFLICTS_INSTALL выполняется после процесса сборки и - до процесса установки.</para> - </sect2> +.include <bsd.port.options.mk> - <sect2> - <title><makevar>CONFLICTS_BUILD</makevar></title> +.if ${PORT_OPTIONS:MOPT1} +CONFIGURE_ARGS+= --with-test +.else +CONFIGURE_ARGS+= --without-test +.endif</programlisting> - <para>Если ваш порт не может быть собран, когда уже установлен - другой, перечислите имена остальных портов в переменной - <makevar>CONFLICTS_BUILD</makevar>. Здесь вы можете использовать - шаблоны командного интерпретатора, такие как <literal>*</literal> - и <literal>?</literal>. Имена пакетов должны выглядеть так же, - как в <filename>/var/db/pkg</filename>. Проверка CONFLICTS_BUILD - выполняется до процесса сборки. Конфликты сборки в получаемом - пакете не записываются.</para> - </sect2> + <para>Значение переменной <makevar>X_CONFIGURE_ON</makevar> + будет дописано в <makevar>CONFIGURE_ARGS</makevar> в + соответствии с состоянием <makevar>X</makevar>. Следующая + запись:</para> - <sect2> - <title><makevar>CONFLICTS</makevar></title> + <programlisting>OPTIONS_DEFINE= OPT1 +OPT1_CONFIGURE_ON= --add-test</programlisting> - <para>Если ваш порт не может быть собран, когда уже установлен - другой, а получаемый пакет не может существовать вместе с другими, - перечислите имена остальных пакетов в переменной - <makevar>CONFLICTS</makevar>. Здесь вы можете использовать шаблоны - командного интерпретатора, такие как <literal>*</literal> и - <literal>?</literal>. Имена пакетов должны выглядеть так же, как - в <filename>/var/db/pkg</filename>. Пожалуйста, убедитесь, что - <makevar>CONFLICTS</makevar> не содержит пакет самого этого порта. - В противном случае не будет работать установка с использованием - переменной <makevar>FORCE_PKG_REGISTER</makevar>. Проверка - CONFLICTS выполняется до процессов сборки и установки.</para> - </sect2> - </sect1> + <para>соответствует:</para> - <sect1 id="install"> - <title>Установка файлов</title> + <programlisting>OPTIONS_DEFINE= OPT1 - <sect2 id="install-macros"> - <title>Макросы INSTALL_*</title> +.include <bsd.port.options.mk> - <para>Используйте макросы, которые есть в файле - <filename>bsd.port.mk</filename> для обеспечения правильных прав - доступа и владения файлов в своих целях - <maketarget>*-install</maketarget>.</para> +.if ${PORT_OPTIONS:MOPT1} +CONFIGURE_ARGS+= --add-test +.endif</programlisting> - <itemizedlist> - <listitem> - <para><makevar>INSTALL_PROGRAM</makevar> - это команда для - установки бинарных выполнимых файлов.</para> - </listitem> + <para>Значение переменной <makevar>X_CONFIGURE_OFF</makevar> + будет дописано в <makevar>CONFIGURE_ARGS</makevar> в + соответствии с состоянием <makevar>X</makevar>. Следующая + запись:</para> - <listitem> - <para><makevar>INSTALL_SCRIPT</makevar> - это команда для установки - выполнимых скриптов.</para> - </listitem> + <programlisting>OPTIONS_DEFINE= OPT1 +OPT1_CONFIGURE_OFF= --no-test</programlisting> - <listitem> - <para><makevar>INSTALL_LIB</makevar> - это команда для установки - динамических библиотек.</para> - </listitem> + <para>соответствует:</para> + + <programlisting>OPTIONS_DEFINE= OPT1 +.include <bsd.port.options.mk> +.if ! ${PORT_OPTIONS:MOPT1} +CONFIGURE_ARGS+= --no-test +.endif</programlisting> + + <para>Значение переменной <makevar>X_CMAKE_ON</makevar> будет + дописано в <makevar>CMAKE_ARGS</makevar> в соответствии с + состоянием <makevar>X</makevar>. Следующая запись:</para> + + <programlisting>OPTIONS_DEFINE= OPT1 +OPT1_CMAKE_ON= -DTEST:BOOL=true</programlisting> + + <para>соответствует:</para> + + <programlisting>OPTIONS_DEFINE= OPT1 + +.include <bsd.port.options.mk> + +.if ${PORT_OPTIONS:MOPT1} +CMAKE_ARGS+= -DTEST:BOOL=true +.endif</programlisting> + + <para>Значение переменной <makevar>X_CMAKE_OFF</makevar> будет + дописано в <makevar>CMAKE_ARGS</makevar> в соответствии с + состоянием <makevar>X</makevar>. Следующая запись:</para> + + <programlisting>OPTIONS_DEFINE= OPT1 +OPT1_CMAKE_OFF= -DTEST:BOOL=false</programlisting> + + <para>соответствует:</para> + + <programlisting>OPTIONS_DEFINE= OPT1 + +.include <bsd.port.options.mk> + +.if ! ${PORT_OPTIONS:MOPT1} +CMAKE_ARGS+= -DTEST:BOOL=false +.endif</programlisting> + + <para>Для любой из следующих переменных:</para> *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201310232102.r9NL2KLD046460>