1
0
mirror of https://git.FreeBSD.org/doc.git synced 2026-06-02 11:25:20 +00:00
Files
doc/de_DE.ISO8859-1/books/fdp-primer/doc-build/chapter.xml
T
Johann Kois bbd89bf624 r47338 -> r52149
MFde:   Resync de/books/fdp-primer/doc-build/chapter.xml
2019-05-04 18:42:23 +00:00

572 lines
20 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- 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.
$FreeBSD$
$FreeBSDde$
basiert auf: r52149
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="doc-build">
<info><title>Die Erzeugung der Zieldokumente</title>
<authorgroup>
<author><personname><firstname>Johann</firstname><surname>Kois</surname></personname><contrib>Übersetzt von </contrib></author>
</authorgroup>
</info>
<para>Dieses Kapitels erklärt detailliert,
<emphasis>wie der Bau der Dokumentation organisiert
ist</emphasis> und wie Sie diesen Prozess mit &man.make.1;
beeinflussen können.</para>
<sect1 xml:id="doc-build-rendering">
<title>DocBook in verschiedene Ausgabeformate konvertieren</title>
<para>Aus einer einzigen DocBook-Quellcodedatei können
verschiedene Ausgabeformate erstellt werden. Welches Dateiformat
erstellt wird, wird über die Variable
<varname>FORMATS</varname> festgelegt. Eine Liste aller
verfügbaren Formate ist in <varname>KNOWN_FORMATS</varname>
gespeichert:</para>
<screen xml:id="doc-build-rendering-known-formats">&prompt.user; <userinput>cd ~/doc/en_US.ISO8859-1/books/handbook</userinput>
&prompt.user; <userinput>make -V KNOWN_FORMATS</userinput></screen>
<table xml:id="doc-build-rendering-common-formats" frame="none">
<title>Häufige Ausgabeformate</title>
<tgroup cols="3">
<thead>
<row>
<entry><varname>FORMATS</varname></entry>
<entry>Dateityp</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>html</literal></entry>
<entry><acronym>HTML</acronym>, Einzeldatei</entry>
<entry>Eine einzelne <filename>book.html</filename> oder
<filename>article.html</filename>.</entry>
</row>
<row>
<entry><literal>html-split</literal></entry>
<entry><acronym>HTML</acronym>, multiple Dateien</entry>
<entry>Multiple <acronym>HTML</acronym>-Dateien, eine
für jedes Kapitel oder für jeden Abschnitt. Dieser
Typ wird in der Regel für die Nutzung des Dokuments
auf einer Internetseite verwendet.</entry>
</row>
<row>
<entry><literal>pdf</literal></entry>
<entry><acronym>PDF</acronym></entry>
<entry>Portable Document Format</entry>
</row>
</tbody>
</tgroup>
</table>
<para>Welches Format verwendet wird, hängt vom jeweiligen
Dokument ab, in der Regel handelt es sich aber um
<literal>html-split</literal>. Weitere Formate werden über die
Variable <varname>FORMATS</varname> angegeben. Dabei können
Sie ein einzelnes Format, aber auch mehrere Formate gleichzeitig
definieren.</para>
<example xml:id="doc-build-formats-example-html">
<title>Das Dokument als eine einzelne HTML-Seite bauen</title>
<screen>&prompt.user; <userinput>cd ~/doc/en_US.ISO8859-1/books/handbook</userinput>
&prompt.user; <userinput>make FORMATS=html</userinput></screen>
</example>
<example xml:id="doc-build-formats-example-html-split-pdf">
<title>Das Dokument in den Formaten HTML-Split sowie
<acronym>PDF</acronym> bauen</title>
<screen>&prompt.user; <userinput>cd ~/doc/en_US.ISO8859-1/books/handbook</userinput>
&prompt.user; <userinput>make FORMATS="html-split pdf"</userinput></screen>
</example>
</sect1>
<sect1 xml:id="doc-build-toolset">
<title>Für den Bau der &os;-Dokumentation benötigte
Werkzeuge</title>
<para>Die folgende Werkzeuge werden benötigt, um die
<acronym>FDP</acronym>-Dokumente zu bauen und zu installieren.</para>
<itemizedlist>
<listitem>
<para>Das wichtigste Werkzeug ist &man.make.1;, genauer
<application>Berkeley Make</application>.</para>
</listitem>
<listitem>
<para>Der Bau von Paketen erfolgt unter FreeBSD mit
&man.pkg-create.8;.</para>
</listitem>
<listitem>
<para>&man.gzip.1; dient zur Erstellung
komprimierter Versionen der Dokumentation. &man.bzip2.1; wird
ebenfalls unterstützt. Wollen Sie Pakete der Dokumentation
erstellen, benötigen Sie auch &man.tar.1;.</para>
</listitem>
<listitem>
<para>Mit &man.install.1; installieren Sie die Dokumentation auf
Ihrem System.</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 xml:id="doc-build-makefiles">
<title>Die <filename>Makefile</filename>s des Dokumentationsbaums
verstehen</title>
<para>Innerhalb des &os; Documentation Projects gibt es drei
verschiedene Arten von <filename>Makefile</filename>s:</para>
<itemizedlist>
<listitem>
<para>Ein <link linkend="sub-make">
<filename>Makefile</filename></link> in einem
Unterverzeichnis gibt Anweisungen an dessen Dateien und
Unterverzeichnisse weiter.</para>
</listitem>
<listitem>
<para>Ein <link linkend="doc-make">
Dokument-<filename>Makefile</filename></link> beschreibt das
Dokument, das aus dem Inhalt des jeweiligen Verzeichnisses
gebaut werden soll.</para>
</listitem>
<listitem>
<para><link linkend="make-includes">
<application>Make</application>-Includes</link> sind der
"Klebstoff", der für den Bau der Dokumentation
erforderlich ist. In der Regel heissen diese Dokumente
<filename>doc.<replaceable>xxx</replaceable>.mk</filename>.</para>
</listitem>
</itemizedlist>
<sect2 xml:id="sub-make">
<title>Unterverzeichnis-<filename>Makefile</filename>s</title>
<para>Derartige <filename>Makefile</filename>s sind in der Regel
wie folgt aufgebaut:</para>
<programlisting>SUBDIR =articles
SUBDIR+=books
COMPAT_SYMLINK = en
DOC_PREFIX?= ${.CURDIR}/..
.include "${DOC_PREFIX}/share/mk/doc.project.mk"</programlisting>
<para>Die ersten vier nicht-leeren Zeilen definieren die
&man.make.1;-Variablen
<varname>SUBDIR</varname>, <varname>COMPAT_SYMLINK</varname>,
und <varname>DOC_PREFIX</varname>.</para>
<para>Die <varname>SUBDIR</varname>-Anweisung weist
(ebenso wie die <varname>COMPAT_SYMLINK</varname>-Anweisung)
einer Variable einen Wert zu und überschreibt dabei
deren ursprünglichen Wert.</para>
<para>Die zweite <varname>SUBDIR</varname>-Anweisung zeigt,
wie man den aktuellen Wert einer Variable ergänzen
kann. Nach der Ausführung dieser Anweisung hat die
Variable <varname>SUBDIR</varname> den Wert
<literal>articles books</literal>.</para>
<para>Die Anweisung <varname>DOC_PREFIX</varname> zeigt, wie
man einer Variable einen Wert zuweist (vorausgesetzt, die
Variable ist nicht bereits definiert). Eine derartige
Anweisung ist beispielsweise sinnvoll, wenn sich
<varname>DOC_PREFIX</varname> nicht dort befindet, wo es
vom <filename>Makefile</filename> erwartet wird.
Durch das Setzen dieser Variable kann der korrekte Wert an
das Makefile übergeben werden.</para>
<para>Was heißt dies nun konkret? Mit den
<varname>SUBDIR</varname>-Anweisungen legen Sie fest, welche
Unterverzeichnisse beim Bau der Dokumentation eingeschlossen
werden müssen.</para>
<para><varname>COMPAT_SYMLINK</varname> wird zur Erstellung
von symbolischen Links zwischen den jeweiligen Dokumentsprachen
und deren offizieller Kodierung benötigt (so wird
beispielsweise <filename>doc/en</filename> nach
<filename>en_US.ISO-8859-1</filename> verlinkt).</para>
<para><varname>DOC_PREFIX</varname> gibt den Pfad zum
Wurzelverzeichnis des Quellcode-Baums des FreeBSD Documentation
Projects an. Diese Vorgabe kann jederzeit durch einen eigenen
Wert ersetzt werden. Bei <varname>.CURDIR</varname> handelt es
sich um eine in &man.make.1; eingebaute
Variable, die den Pfad des aktuellen Verzeichnisses
enthält.</para>
<para>Die letzte Zeile bindet <filename>doc.project.mk</filename>,
die zentrale, projektweite &man.make.1;-Datei
des &os; Documentation Projects, in den Bau ein. Diese Datei
enthält den "Klebstoff", der die diversen Variablen in
Anweisungen zum Bau der Dokumentation konvertiert.</para>
</sect2>
<sect2 xml:id="doc-make">
<title>Dokument-<filename>Makefile</filename>s</title>
<para>Diese <filename>Makefile</filename>s definieren diverse
<application>make</application>-Variablen mit Vorgaben
zum Bau der im Verzeichnis enthaltenen Dokumentation.</para>
<para>Dazu ein Beispiel:</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>Die Variable <varname>MAINTAINER</varname> ist von
zentraler Bedeutung. Sie legt fest, wer für ein
bestimmtes Dokument des FreeBSD Documentation Projects
verantwortlich ist.</para>
<para><varname>DOC</varname> (ohne die Erweiterung
<filename>.xml</filename>) ist der Name des Hauptdokuments des
Verzeichnisses, in dem sich das Makefile befindet. Mit
<varname>SRCS</varname>-Anweisungen geben Sie alle Dokumente an,
aus denen das Dokument besteht. Zusätzlich binden Sie
damit wichtige Dateien ein, deren Änderung einen erneuten
Bau der Dokumentation erforderlich macht.</para>
<para>Mit <varname>FORMATS</varname> geben Sie an, in welchen
Formaten die Dokumentation gebaut werden soll.
<varname>INSTALL_COMPRESSED</varname> enthält die
Standardvorgaben, die beim Bau komprimierter Pakte der
Dokumentation verwendet werden sollen. Der Variable
<varname>INSTALL_ONLY_COMPRESS</varname> (die in der
Voreinstellung leer ist) wird nur dann ein Wert zugewiesen,
wenn ausschließlich komprimierte Pakete der Dokumentation
erstellt werden sollen.</para>
<para>Die Variable <varname>DOC_PREFIX</varname> und die
verschiedenen Include-Anweisungen sollten Ihnen ebenfalls
bereits vertraut sein.</para>
</sect2>
</sect1>
<sect1 xml:id="make-includes">
<title>&man.make.1;-Includes des &os; Documentation Projects</title>
<para>Diese Dateien lassen sich am besten verstehen, indem man sich
deren Inhalt näher ansieht. Konkret handelt es sich dabei
um folgende Dateien:</para>
<itemizedlist>
<listitem>
<para><filename>doc.project.mk</filename> ist die
Haupt-Include-Datei, die bei Bedarf alle folgenden
Include-Dateien enthält.</para>
</listitem>
<listitem>
<para><filename>doc.subdir.mk</filename> sorgt dafür, dass
alle benötigten Verzeichnisse (und Unterverzeichnisse)
beim Bau der Dokumentation durchlaufen werden.</para>
</listitem>
<listitem>
<para><filename>doc.install.mk</filename> definiert Variablen,
die die Installation der Dokumentation beeinflussen.</para>
</listitem>
<listitem>
<para><filename>doc.docbook.mk</filename> wird verwendet, wenn
die Variable <varname>DOCFORMAT</varname> den Wert
<literal>docbook</literal> hat und die Variable
<varname>DOC</varname> gesetzt ist.</para>
</listitem>
</itemizedlist>
<sect2 xml:id="includes-doc-project-mk">
<title><filename>doc.project.mk</filename></title>
<para>Diese Datei hat folgenden Aufbau:</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 xml:id="doc-project-mk-variables">
<title>Variablen</title>
<para><varname>DOCFORMAT</varname> und <varname>MAINTAINER</varname>
enthalten Standardwerte, falls ihnen über das
Dokument-Makefile keine anderen Werte zugewiesen werden.</para>
<para>Bei <varname>PREFIX</varname> handelt es sich um das
Präfix, unter dem die zum Bau der Dokumentation
erforderlichen <link linkend="tools">SGML-Werkzeuge</link>
installiert sind. In der Regel handelt es sich dabei um
<filename>/usr/local</filename>.</para>
<para><varname>PRI_LANG</varname> sollte auf die Sprache und
Kodierung eingestellt werden, die unter den Leser der
Dokumentation am häufigsten verwendet wird. Diese
Variable hat den Standardwert "US English".</para>
<note>
<para><varname>PRI_LANG</varname> beeinflusst nicht,
welche Dokumente gebaut werden können oder
sollen. Diese Variable wird lediglich dazu verwendet,
häufig verwendete Dokumente in das Wurzelverzeichnis
der installierten Dokumentation zu verlinken.</para>
</note>
</sect3>
<sect3 xml:id="doc-project-mk-conditionals">
<title>Bedingungen</title>
<para>Die Zeile <literal>.if defined(DOC)</literal> ist ein
Beispiel für eine &man.make.1;-Bedingung, die (analog zum
Einsatz in anderen Programmen) festlegt, was geschehen soll,
wenn eine Bedingung "wahr" oder "falsch" ist.
<literal>defined</literal> ist eine Funktion, die
zurückgibt, ob die angegebene Variable existiert oder
nicht.</para>
<para><literal>.if ${DOCFORMAT} == "docbook"</literal> testet,
ob die Variable <varname>DOCFORMAT</varname> den Wert
<literal>"docbook"</literal> hat. Ist dies der Fall, wird
<filename>doc.docbook.mk</filename> mit in den Bau
aufgenommen.</para>
<para>Die zwei <literal>.endif</literal>s schließen die
zwei weiter oben definierten Bedingungen.</para>
</sect3>
</sect2>
<sect2 xml:id="includes-doc-subdir-mk">
<title><filename>doc.subdir.mk</filename></title>
<para>Den Inhalt dieser Datei hier zu beschreiben, würde
zu weit führen. Sie sollten aber nach dem Lesen der
vorangegangenen Abschnitte und der folgenden Ausführungen
in der Lage sein, Inhalt und Aufgabe dieser Datei zu
verstehen.</para>
<sect3 xml:id="doc-subdir-mk-variables">
<title>Variablen</title>
<itemizedlist>
<listitem>
<para><varname>SUBDIR</varname> legt die Unterverzeichnisse
fest, deren Inhalt beim Bau der Dokumentation inkludiert
werden muss.</para>
</listitem>
<listitem>
<para>Mit <varname>ROOT_SYMLINKS</varname> wird der Name der
Verzeichnisse angegeben, die von ihrer tatsächlichen
Position aus in das Wurzelverzeichnis, unter dem die
Dokumentation installiert wird, verlinkt werden sollen.
Vorausgesetzt, bei der verwendeten Sprache handelt es sich
um die primäre Sprache (die über
<varname>PRI_LANG</varname> festgelegt wird).</para>
</listitem>
<listitem>
<para><varname>COMPAT_SYMLINK</varname> wird im Abschnitt
<link linkend="sub-make">Unterverzeichnis-Makefile</link>s
beschrieben.</para>
</listitem>
</itemizedlist>
</sect3>
<sect3 xml:id="doc-subdir-mk-targets-macro">
<title>Targets und Makros</title>
<para>Abhängigkeiten
(<foreignphrase>Dependencies</foreignphrase>) werden
folgendermaßen definiert:
<literal><replaceable>target</replaceable>
<replaceable>abhaengigkeit1 abhaengigkeit2 ...</replaceable></literal>.
Um <literal>target</literal> zu bauen, müssen Sie zuvor
die angegebenen Abhängigkeiten bauen.</para>
<para>Daran anschließend können Anweisungen zum
Bau des angegebenen Targets folgen, falls der
Konvertierungsprozess zwischen dem Target und seinen
Abhängigkeiten nicht bereits früher definiert
wurde oder falls die Konvertierung nicht der
Standardkonvertierungsmethode entspricht.</para>
<para>Die spezielle Abhängigkeit <literal>.USE</literal>
definiert das Äquivalent eines Makros.</para>
<programlisting>_SUBDIRUSE: .USE
.for entry in ${SUBDIR}
@${ECHO} "===&gt; ${DIRPRFX}${entry}"
@(cd ${.CURDIR}/${entry} &amp;&amp; \
${MAKE} ${.TARGET:S/realpackage/package/:S/realinstall/install/} DIRPRFX=${DIRPRFX}${entry}/ )
.endfor</programlisting>
<para>In diesem Beispiel kann <buildtarget>_SUBDIRUSE</buildtarget>
nun als Makro, welches die angegebenen Befehle ausführt,
verwendet werden, indem es im Makefile als Abhängigkeit
angegeben wird.</para>
<para>Was unterscheidet dieses Makro nun von beliebigen anderen
Targets? Der Hauptunterschied ist, dass es
<emphasis>nach</emphasis> den Anweisungen der Bauprozedur,
in der es als Abhängigkeit angegeben ist, ausgeführt
wird. Außerdem ändert es die Variable
<varname>.TARGET</varname> (die den Namen des aktuell gebauten
Targets enthält) nicht.</para>
<programlisting>clean: _SUBDIRUSE
rm -f ${CLEANFILES}</programlisting>
<para>In diesem Beispiel führt <buildtarget>clean</buildtarget>
das Makro <buildtarget>_SUBDIRUSE</buildtarget> aus, nachdem es
den Befehl <command>rm -f ${CLEANFILES}</command> erfolgreich
ausgeführt hat. Dadurch löscht
<buildtarget>clean</buildtarget> zwar beim Wechsel in ein neues
<emphasis>Unterverzeichnis</emphasis> beim Bau erstellte
Dateien, aber nicht beim Wechsel aus einem Unterverzeichnis
in ein übergeordnetes Verzeichnis.</para>
<sect4 xml:id="doc-subdir-mk-provided-targets">
<title>Vorhandene Targets</title>
<itemizedlist>
<listitem>
<para><buildtarget>install</buildtarget> und
<buildtarget>package</buildtarget> arbeiten nacheinander
alle Unterverzeichnisse ab und rufen dabei jeweils ihre
realen Versionen (<buildtarget>realinstall</buildtarget>
beziehungsweise <buildtarget>realpackage</buildtarget>)
auf.</para>
</listitem>
<listitem>
<para><buildtarget>clean</buildtarget> entfernt alle
Dateien, die beim Bau der Dokumentation erzeugt wurden
(dies sowohl im aktuellen Verzeichnis als auch in allen
Unterverzeichnissen). <buildtarget>cleandir</buildtarget>
hat die gleiche Aufgabe, würde aber zusätzlich
die Objekt-Verzeichnisse löschen (falls diese
existieren).</para>
</listitem>
</itemizedlist>
</sect4>
</sect3>
<sect3 xml:id="doc-subdir-mk-conditionals">
<title>Weitere Bedingungen</title>
<itemizedlist>
<listitem>
<para><literal>exists</literal> gibt "wahr" zurück, wenn
die angegebene Datei bereits existiert.</para>
</listitem>
<listitem>
<para><literal>empty</literal> gibt "wahr" zurück, wenn
die angegebene Variable leer ist.</para>
</listitem>
<listitem>
<para><literal>target</literal> gibt "wahr" zurück, wenn
das angegebene Target noch nicht existiert.</para>
</listitem>
</itemizedlist>
</sect3>
<sect3 xml:id="doc-subdir-mk-looping">
<title>Schleifenkonstrukte in
<command>make (.for)</command></title>
<para><literal>.for</literal> erlaubt es, bestimmte
Anweisungen für jedes Element einer Variable zu
wiederholen, indem dieser Variable in jedem Durchlauf
der Schleife das jeweilige Element der untersuchten Liste
zugewiesen wird.</para>
<programlisting>_SUBDIRUSE: .USE
.for entry in ${SUBDIR}
@${ECHO} "===&gt; ${DIRPRFX}${entry}"
@(cd ${.CURDIR}/${entry} &amp;&amp; \
${MAKE} ${.TARGET:S/realpackage/package/:S/realinstall/install/} DIRPRFX=${DIRPRFX}${entry}/ )
.endfor</programlisting>
<para>Falls das Verzeichnis <varname>SUBDIR</varname> leer ist,
würde in unserem Beispiel keine Aktion erfolgen.
Enthält das Verzeichnis hingegen ein oder mehrere
Elemente, werden die Anweisungen zwischen
<literal>.for</literal> und <literal>.endfor</literal>
für jedes Element ausgeführt, wobei
<varname>entry</varname> durch das jeweilige Element ersetzt
werden würde.</para>
</sect3>
</sect2>
</sect1>
</chapter>