aboutsummaryrefslogtreecommitdiff
path: root/ru_RU.KOI8-R/books/fdp-primer/doc-build/chapter.xml
diff options
context:
space:
mode:
Diffstat (limited to 'ru_RU.KOI8-R/books/fdp-primer/doc-build/chapter.xml')
-rw-r--r--ru_RU.KOI8-R/books/fdp-primer/doc-build/chapter.xml491
1 files changed, 491 insertions, 0 deletions
diff --git a/ru_RU.KOI8-R/books/fdp-primer/doc-build/chapter.xml b/ru_RU.KOI8-R/books/fdp-primer/doc-build/chapter.xml
new file mode 100644
index 0000000000..4e2f5cb036
--- /dev/null
+++ b/ru_RU.KOI8-R/books/fdp-primer/doc-build/chapter.xml
@@ -0,0 +1,491 @@
+<?xml version="1.0" encoding="koi8-r" standalone="no"?>
+<!--
+ The FreeBSD Russian Documentation Project
+
+ $FreeBSD$
+ $FreeBSDru: frdp/doc/ru_RU.KOI8-R/books/fdp-primer/doc-build/chapter.xml,v 1.4 2004/03/22 01:47:32 phantom Exp $
+
+ Original revision: r19547
+-->
+
+<!-- Copyright (c) 1999 Neil Blakey-Milner, All rights reserved.
+
+ Redistribution and use in source (SGML DocBook) and 'compiled' forms
+ (SGML HTML, PDF, PostScript, RTF and so forth) with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code (SGML DocBook) must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer as the first lines of this file unmodified.
+
+ 2. Redistributions in compiled form (transformed to other DTDs,
+ converted to PDF, PostScript, RTF and other formats) must reproduce
+ the above copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ THIS DOCUMENTATION IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<chapter id="doc-build">
+ <title>Процесс построения документации</title>
+
+ <para>Главная цель этой главы заключается в четком описании того,
+ <emphasis>как организован процесс построения документации</emphasis>, а
+ также <emphasis>как внести изменения в этот процесс</emphasis>.</para>
+
+ <para>После чтения этой главы вы должны:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Знать, что нужно для построения документации FDP, кроме того, что
+ описано в <link linkend="tools">главе об инструментах для работы с
+ SGML</link>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Уметь читать и понимать <application>make</application>-инструкции,
+ которые присутствуют в файлах <filename>Makefile</filename> каждого
+ документа, а также иметь представление о включаемых операциях из
+ <filename>doc.project.mk</filename>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Уметь настраивать процесс построения при помощи
+ <application>make</application>-переменных и целей
+ <application>make</application>.</para>
+ </listitem>
+ </itemizedlist>
+
+ <sect1 id="doc-build-toolset">
+ <title>Набор инструментов для построения документации FreeBSD</title>
+
+ <para>Вот ваши инструменты. Используйте их любым доступным вам
+ способом.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Основным инструментом построения, который вам понадобится,
+ является <application>make</application>, и конкретно
+ <application>Berkeley Make</application>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Построение пакаджа выполняется утилитой FreeBSD
+ <application>pkg_create</application>. Если вы не используете
+ FreeBSD, вы либо обходитесь без пакаджей, либо компилируете исходные
+ тексты самостоятельно.</para>
+ </listitem>
+
+ <listitem>
+ <para><application>gzip</application> нужен для создания
+ компрессированных версий документа. Компрессия
+ <application>bzip2</application> и архивы
+ <application>zip</application> также поддерживаются.
+ <application>tar</application> поддерживается, но он требуется при
+ построении пакаджа.</para>
+ </listitem>
+
+ <listitem>
+ <para><application>install</application> является методом, используемым
+ по умолчанию для установки документации. Однако есть и
+ альтернативы.</para>
+ </listitem>
+ </itemizedlist>
+
+ <note>
+ <para>Сомнительно, что вы не сможете найти последние утилиты, они
+ отмечены для полноты.</para>
+ </note>
+ </sect1>
+
+ <sect1 id="doc-build-makefiles">
+ <title>Понимание make-файлов в дереве документации</title>
+
+ <para>В дереве Проекта Документирования FreeBSD имеется три основных типа
+ файлов <filename>Makefile</filename>.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><link linkend="sub-make"><filename>Makefile</filename> в
+ подкаталоге</link> просто передает команды во вложенные каталоги.</para>
+ </listitem>
+
+ <listitem>
+ <para><link linkend="doc-make"><filename>Makefile</filename> для
+ документации</link> описывает документ или документы, которые должны быть
+ получены из этого каталога.</para>
+ </listitem>
+
+ <listitem>
+ <para><link linkend="make-includes">Включаемые
+ <application>make</application>-файлы</link> являются тем клеем, что
+ выполняет построение документации, и обычно представлены в виде
+ файлов
+ <filename>doc.<replaceable>xxx</replaceable>.mk</filename>.</para>
+ </listitem>
+ </itemizedlist>
+
+ <sect2 id="sub-make">
+ <title>Make-файлы в подкаталоге</title>
+
+ <para>Эти <filename>Makefile</filename> обычно имеют такой вид:</para>
+
+ <programlisting>SUBDIR =articles
+SUBDIR+=books
+
+COMPAT_SYMLINK = en
+
+DOC_PREFIX?= ${.CURDIR}/..
+.include "${DOC_PREFIX}/share/mk/doc.project.mk"</programlisting>
+
+ <para>Обзорно, первые четыре непустые строчки задают
+ <application>make</application>-переменные, <makevar>SUBDIR</makevar>,
+ <makevar>COMPAT_SYMLINK</makevar> и
+ <makevar>DOC_PREFIX</makevar>.</para>
+
+ <para>Первая декларация <makevar>SUBDIR</makevar>, как и
+ <makevar>COMPAT_SYMLINK</makevar>, показывает, как присваивать значение
+ переменной, переопределяя все ранее определенные значения.</para>
+
+ <para>Вторая инструкция <makevar>SUBDIR</makevar> показывает, как
+ значение добавляется к текущему значению переменной. Значение
+ переменной <makevar>SUBDIR</makevar> теперь соответствует
+ <literal>articles books</literal>.</para>
+
+ <para>Присвоение <makevar>DOC_PREFIX</makevar> показывает, как значение
+ присваивается переменной, но только если оно еще не определено. Это
+ полезно, если <makevar>DOC_PREFIX</makevar> не соответствует тому, что
+ полагает об этом <filename>Makefile</filename> - пользователь может
+ переопределить это значение и дать правильное значение.</para>
+
+ <para>Так что все это значит? <makevar>SUBDIR</makevar> определяет,
+ в какие вложенные подкаталоги должна быть передана работа по
+ построению.</para>
+
+ <para><makevar>COMPAT_SYMLINK</makevar> касается исключительно
+ символических ссылок для достижения совместимости (достаточно
+ удивительно) языков с их официальной кодировкой
+ (<filename>doc/en</filename> должна указывать на
+ <filename>en_US.ISO-8859-1</filename>).</para>
+
+ <para><makevar>DOC_PREFIX</makevar> является маршрутом к корню дерева
+ Проекта Документирования FreeBSD. Его не всегда легко найти и легко
+ переопределить для достижения гибкости. <makevar>.CURDIR</makevar>
+ является встроенной <application>make</application>-переменной,
+ хранящей путь к текущему каталогу.</para>
+
+ <para>В последней строке включается системный
+ <application>make</application>-файл
+ <filename>doc.project.mk</filename> Проекта Документирования FreeBSD,
+ доступный всем проектам, который является связующим звеном,
+ преобразующим эти переменные во встроенные инструкции.</para>
+ </sect2>
+
+ <sect2 id="doc-make">
+ <title>Make-файлы для документации</title>
+
+ <para>Эти <filename>make</filename>-файлы задают набор
+ <application>make</application>-переменных, которые описывают, как
+ построить документацию, расположенную в этом каталоге.</para>
+
+ <para>Вот пример:</para>
+
+ <programlisting>MAINTAINER=nik@FreeBSD.org
+
+DOC?= book
+
+FORMATS?= html-split html
+
+INSTALL_COMPRESSED?= gz
+INSTALL_ONLY_COMPRESSED?=
+
+# SGML content
+SRCS= book.xml
+
+DOC_PREFIX?= ${.CURDIR}/../../..
+
+.include "$(DOC_PREFIX)/share/mk/docproj.docbook.mk"</programlisting>
+
+ <para>Переменная <makevar>MAINTAINER</makevar> очень важна. Эта
+ переменная дает возможность указать владельца документа в Проекте
+ Документирования FreeBSD, когда вы становитесь ответственным за его
+ поддержку.</para>
+
+ <para><makevar>DOC</makevar> является именем (предполагается расширение
+ <filename>.xml</filename>) главного документа, создаваемого в этом
+ каталоге. В <makevar>SRCS</makevar> перечисляются все отдельные файлы,
+ которые составляют документ. Сюда также должны быть включены важные
+ файлы, изменение которых должно приводить к перестроению.</para>
+
+ <para><makevar>FORMATS</makevar> указывает используемые по умолчанию
+ форматы, которые применяются при построении этого документа.
+ <makevar>INSTALL_COMPRESSED</makevar> является списком методов
+ компрессии, которые должны использоваться при построении документа.
+ <makevar>INSTALL_ONLY_COMPRESS</makevar>, пустая по умолчанию, должна
+ быть непустой, если требуется построить только скомпрессированные
+ документы.</para>
+
+ <note>
+ <para>Назначение опциональных переменных обсуждается в
+ <link linkend="sub-make">предыдущем разделе</link>.</para>
+ </note>
+
+ <para>Переменная <makevar>DOC_PREFIX</makevar> у включающие директивы
+ должны быть вам уже известны.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="make-includes">
+ <title>Включаемые make-файлы Проекта Документирования FreeBSD</title>
+
+ <para>Лучше всего это описывается при обсуждении кода. Вот системные
+ включаемые файлы:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><filename>doc.project.mk</filename> является главным включаемым
+ файлом проекта, который включает все остальные включаемые файлы, по
+ мере необходимости.</para>
+ </listitem>
+
+ <listitem>
+ <para><filename>doc.subdir.mk</filename> обрабатывает прохождение по
+ дереву документов в процессе построения и установки.</para>
+ </listitem>
+
+ <listitem>
+ <para><filename>doc.install.mk</filename> содержит переменные, которые
+ отражаются на правах доступа и установке документов.</para>
+ </listitem>
+
+ <listitem>
+ <para><filename>doc.docbook.mk</filename> включается, если значением
+ переменной <makevar>DOCFORMAT</makevar> является
+ <literal>docbook</literal> и установлена переменная
+ <makevar>DOC</makevar>.</para>
+ </listitem>
+ </itemizedlist>
+
+ <sect2>
+ <title>doc.project.mk</title>
+
+ <para>Рассмотрим пример:</para>
+
+ <programlisting>DOCFORMAT?= docbook
+MAINTAINER?= doc@FreeBSD.org
+
+PREFIX?= /usr/local
+PRI_LANG?= en_US.ISO8859-1
+
+.if defined(DOC)
+.if ${DOCFORMAT} == "docbook"
+.include "doc.docbook.mk"
+.endif
+.endif
+
+.include "doc.subdir.mk"
+.include "doc.install.mk"</programlisting>
+
+ <sect3>
+ <title>Переменные</title>
+
+ <para>Переменным <makevar>DOCFORMAT</makevar> и
+ <makevar>MAINTAINER</makevar> заданы значения по умолчанию, если они
+ не установлены в make-файле документа.</para>
+
+ <para><makevar>PREFIX</makevar> является каталогом, под которым
+ установлены <link linkend="tools">инструменты для построения
+ документации</link>. При обычной установке портов и пакаджей это
+ <filename>/usr/local</filename>.</para>
+
+ <para><makevar>PRI_LANG</makevar> должна быть установлена в значение,
+ соответствующее языку и кодировке, являющейся естественной для тех
+ пользователей, кому предназначена документация. По умолчанию это
+ US English.</para>
+
+ <note>
+ <para><makevar>PRI_LANG</makevar> не влияет на то, какие документы
+ могут или будут строиться. Ее основное назначение - создание
+ ссылок на часто упоминаемые документы в корне установки
+ документации FreeBSD.</para>
+ </note>
+ </sect3>
+
+ <sect3>
+ <title>Условия</title>
+
+ <para>Строка <literal>.if defined(DOC)</literal> является примером
+ <application>make</application>-условия, которое, как и в других
+ программах, определяет дальнейшие действия, если какое-то условие
+ выполняется или нет. <literal>defined</literal> является функцией,
+ которая возвращает информацию о том, определена данная переменная или
+ нет.</para>
+
+ <para>Затем <literal>.if ${DOCFORMAT} == "docbook"</literal> проверяет,
+ является ли значением переменной <makevar>DOCFORMAT</makevar>
+ <literal>"docbook"</literal>, и в этом случае включается файл
+ <filename>doc.docbook.mk</filename>.</para>
+
+ <para>Две строки <literal>.endif</literal> закрывают два вышестоящих
+ условия, отмечая конец их действия.</para>
+ </sect3>
+ </sect2>
+
+ <sect2>
+ <title>doc.subdir.mk</title>
+
+ <para>Этот файл слишком долго описывать на примерах, вы сможете
+ разобраться с ним сами на основе знаний, полученных из предыдущих глав
+ и некоторой вспомогательной информации, дающейся здесь.</para>
+
+ <sect3>
+ <title>Переменные</title>
+
+ <itemizedlist>
+ <listitem>
+ <para><makevar>SUBDIR</makevar> представляет из себя список
+ подкаталогов, которые должны быть охвачены процессом
+ построения.</para>
+ </listitem>
+
+ <listitem>
+ <para><makevar>ROOT_SYMLINKS</makevar> является именами каталогов,
+ которые должны указывать на корень установки документа
+ от их действительных положений, если текущий язык является
+ основным (что задается переменной
+ <makevar>PRI_LANG</makevar>).</para>
+ </listitem>
+
+ <listitem>
+ <para><makevar>COMPAT_SYMLINK</makevar> описано в разделе о
+ <link linkend="sub-make">make-файле подкаталога</link>.</para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>Цели и макросы</title>
+
+ <para>Зависимости описываются парами
+ <literal><replaceable>target</replaceable>:
+ <replaceable>dependency1 dependency2 ...</replaceable></literal>, и
+ когда вам нужно построить <literal>target</literal>, вам необходимо
+ сначала построить список зависимостей.</para>
+
+ <para>После описательной пары могут следовать инструкции о том, как
+ построить цель, если процесс преобразования цели к зависимостям ранее
+ не был определен, или если это конкретное преобразование не совпадает
+ с применяемым по умолчанию методом.</para>
+
+ <para>Особая зависимость <literal>.USE</literal> задает эквивалент
+ макроса.</para>
+
+<programlisting>_SUBDIRUSE: .USE
+.for entry in ${SUBDIR}
+ @${ECHO} "===> ${DIRPRFX}${entry}"
+ @(cd ${.CURDIR}/${entry} && \
+ ${MAKE} ${.TARGET:S/realpackage/package/:S/realinstall/install/} DIRPRFX=${DIRPRFX}${entry}/ )
+.endfor</programlisting>
+
+ <para>В вышеприведенном фрагменте <maketarget>_SUBDIRUSE</maketarget>
+ теперь является макросом, который будет выполнять заданные команды,
+ если задан в списке зависимостей.</para>
+
+ <para>Что отличает этот макрос от других целей? В основном то, что
+ он выполняется <emphasis>после</emphasis> инструкций, данных в
+ процедуре построения, в качестве зависимости для которой он
+ перечислен, и это не влияет на <makevar>.TARGET</makevar>, которая
+ является переменной, содержащей название текущей выполняемой
+ цели.</para>
+
+<programlisting>clean: _SUBDIRUSE
+ rm -f ${CLEANFILES}</programlisting>
+
+ <para>В вышеприведенном фрагменте <maketarget>clean</maketarget> будет
+ использовать макрос <maketarget>_SUBDIRUSE</maketarget> после того,
+ как выполнит инструкцию <command>rm -f ${CLEANFILES}</command>. В
+ результате это приведет к тому, что <maketarget>clean</maketarget>
+ будет углубляться по дереву каталогов, удаляя файлы после перехода
+ <emphasis>ниже</emphasis>, а не на пути назад.</para>
+
+ <sect4>
+ <title>Предопределенные цели</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>Цели <maketarget>install</maketarget> и
+ <maketarget>package</maketarget> обе переходят вниз по дереву
+ каталогов, вызывая собственные выполняющие реальную работу
+ версии в подкаталогах. (<maketarget>realinstall</maketarget>
+ и <maketarget>realpackage</maketarget> соответственно)</para>
+ </listitem>
+
+ <listitem>
+ <para><maketarget>clean</maketarget> удаляет файлы, созданные в
+ процессе построения (и тоже переходит вниз по дереву
+ каталогов). <maketarget>cleandir</maketarget> делает то же
+ самое и также удаляет каталог, если он есть.</para>
+ </listitem>
+ </itemizedlist>
+ </sect4>
+ </sect3>
+
+ <sect3>
+ <title>Подробности об условиях</title>
+
+ <itemizedlist>
+ <listitem>
+ <para><literal>exists</literal> является еще одной функцией
+ условия, которая возвращает истину, если указанный файл
+ существует.</para>
+ </listitem>
+
+ <listitem>
+ <para><literal>empty</literal> возвращает истину, если данная
+ переменная имеет пустое значение.</para>
+ </listitem>
+
+ <listitem>
+ <para><literal>target</literal> возвращает истину, если указанная
+ цель еще не существует.</para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>Циклы в make (.for)</title>
+
+ <para><literal>.for</literal> дает способ повторить набор инструкций
+ для каждого элемента списка, заданного в переменной через пробел. Он
+ делает это, присваивая переменной значение текущего элемента
+ перебираемого списка.</para>
+
+<programlisting>_SUBDIRUSE: .USE
+.for entry in ${SUBDIR}
+ @${ECHO} "===> ${DIRPRFX}${entry}"
+ @(cd ${.CURDIR}/${entry} && \
+ ${MAKE} ${.TARGET:S/realpackage/package/:S/realinstall/install/} DIRPRFX=${DIRPRFX}${entry}/ )
+.endfor</programlisting>
+
+ <para>В примере выше если переменная <makevar>SUBDIR</makevar> пуста,
+ то не предпринимается никаких действий; если она состоит из одного
+ или более элементов, то инструкции между <literal>.for</literal> и
+ <literal>.endfor</literal> будут повторены для каждого элемента,
+ причем <makevar>entry</makevar> будет заменена значением текущего
+ элемента.</para>
+ </sect3>
+ </sect2>
+ </sect1>
+</chapter>