aboutsummaryrefslogtreecommitdiff
path: root/de_DE.ISO8859-1/books/porters-handbook/book.xml
diff options
context:
space:
mode:
Diffstat (limited to 'de_DE.ISO8859-1/books/porters-handbook/book.xml')
-rw-r--r--de_DE.ISO8859-1/books/porters-handbook/book.xml16633
1 files changed, 0 insertions, 16633 deletions
diff --git a/de_DE.ISO8859-1/books/porters-handbook/book.xml b/de_DE.ISO8859-1/books/porters-handbook/book.xml
deleted file mode 100644
index 13e200c827..0000000000
--- a/de_DE.ISO8859-1/books/porters-handbook/book.xml
+++ /dev/null
@@ -1,16633 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE book PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
- "http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
-<!--
- The FreeBSD Documentation Project
- The FreeBSD German Documentation Project
-
- $FreeBSD$
- $FreeBSDde: de-docproj/books/porters-handbook/book.xml,v 1.241 2011/10/08 16:18:17 jkois Exp $
- basiert auf: r37884
--->
-<book xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="of" xml:lang="de">
- <info><title>Das FreeBSD Porter-Handbuch</title>
-
-
- <authorgroup>
- <author><orgname>The FreeBSD German Documentation Project</orgname></author>
- </authorgroup>
-
- <pubdate>April 2000</pubdate>
-
- <copyright>
- <year>2000</year>
- <year>2001</year>
- <year>2002</year>
- <year>2003</year>
- <year>2004</year>
- <year>2005</year>
- <year>2006</year>
- <year>2007</year>
- <year>2008</year>
- <year>2009</year>
- <year>2010</year>
- <year>2011</year>
- <year>2012</year>
- <year>2013</year>
- <year>2014</year>
- <year>2015</year>
- <holder role="mailto:doc@FreeBSD.org">The FreeBSD German
- Documentation Project</holder>
- </copyright>
-
- &trademarks;
- &legalnotice;
-
- <releaseinfo>$FreeBSD$</releaseinfo>
- </info>
-
- <chapter xml:id="why-port">
- <title>Einführung</title>
-
- <para>Die Ports-Sammlung von FreeBSD ist der gebräuchlichste
- Weg, um Anwendungen ("Ports") unter FreeBSD zu installieren.
- Wie alles andere in FreeBSD auch, ist sie hauptsächlich
- das Ergebnis der Arbeit von Freiwilligen. Es ist wichtig,
- diesen Aspekt beim Lesen im Hinterkopf zu behalten.</para>
-
- <para>In FreeBSD kann jeder einen neuen Port einsenden oder sich
- dazu bereit erklären, einen bereits vorhandenen Port zu
- pflegen, sofern der Port derzeit keinen Maintainer
- hat&nbsp;&ndash;&nbsp;dazu sind keine besonderen Rechte
- nötig.</para>
- </chapter>
-
- <chapter xml:id="own-port">
- <title>Einen neuen Port erstellen</title>
-
- <para>Sie sind also daran interessiert, einen neuen Port zu
- erstellen oder einen vorhandenen zu aktualisieren?
- Großartig!</para>
-
- <para>Die folgenden Kapitel beinhalten einige Richtlinien, um
- einen neuen Port für FreeBSD zu erstellen. Wenn Sie
- einen vorhandenen Port auf den neuesten Stand bringen
- wollen, sollten Sie mit <xref linkend="port-upgrading"/>
- fortfahren.</para>
-
- <para>Wenn Ihnen dieses Dokument nicht detailliert genug ist,
- sollten Sie einen Blick in
- <filename>/usr/ports/Mk/bsd.port.mk</filename> werfen. Das
- Makefile jedes Ports bindet diese Datei ein. Auch wenn Sie
- nicht täglich mit Makefiles arbeiten, sollten Sie gut
- damit zurecht kommen, da die Datei gut dokumentiert ist und
- Sie eine Menge Wissen daraus erlangen können.
- Zusätzlich können Sie speziellere Fragen an die
- &a.ports;-Mailingliste stellen.</para>
-
- <note>
- <para>Nur ein Bruchteil der Variablen
- (<varname><replaceable>VAR</replaceable></varname>), die von
- Ihnen gesetzt werden können, finden hier
- Erwähnung. Die meisten von ihnen (wenn nicht sogar
- alle) sind am Anfang von
- <filename>/usr/ports/Mk/bsd.port.mk</filename>
- erläutert. Beachten Sie bitte, dass diese Datei eine
- nicht standardkonforme Tabulator-Einstellung
- verwendet. <application>Emacs</application> und
- <application>Vim</application> sollten diese Einstellung
- jedoch automatisch beim Öffnen der Datei setzen. Sowohl
- &man.vi.1; als auch &man.ex.1; können mit dem Befehl
- <command>:set tabstop=4</command> dazu gebracht werden, die
- Datei richtig anzuzeigen, wenn sie geöffnet wird.</para>
- </note>
-
- <para>Sind Sie auf der Suche nach einer neuen Aufgabe? Dann sehen
- Sie sich bitte die <link xlink:href="http://wiki.freebsd.org/WantedPorts">Ports-Wunschliste</link>
- an und prüfen Sie, ob Sie an einem dieser Ports arbeiten
- können.</para>
- </chapter>
-
- <chapter xml:id="quick-porting">
- <title>Einen neuen Port erstellen</title>
-
- <para>Dieser Abschnitt beschreibt, wie Sie schnell einen neuen
- Port erstellen können. In vielen Fällen ist dies
- allerdings nicht ausreichend, dann werden Sie in diesem Buch
- weiterlesen müssen.</para>
-
- <para>Als Erstes besorgen Sie sich das Original-Tarball
- (komprimiertes Archiv) und legen es im
- <varname>DISTDIR</varname> ab, welches
- standardmäßig
- <filename>/usr/ports/distfiles</filename> ist.</para>
-
- <note>
- <para>Im Folgenden wird angenommen, dass die Software
- unverändert kompiliert werden konnte, dass also keinerlei
- Änderungen nötig waren, um den Port auf Ihrem
- FreeBSD-Rechner zum Laufen zu bringen. Falls Sie
- Änderungen vornehmen mussten, werden Sie auch den
- nächsten Abschnitt beachten müssen.</para>
- </note>
-
- <sect1 xml:id="porting-makefile">
- <title>Das <filename>Makefile</filename> schreiben</title>
-
- <para>Ein minimales <filename>Makefile</filename> sieht in etwa
- so aus:</para>
-
- <programlisting># New ports collection makefile for: oneko
-# Date created: 5 December 1994
-# Whom: asami
-#
-# &dollar;FreeBSD&dollar;
-#
-
-PORTNAME= oneko
-PORTVERSION= 1.1b
-CATEGORIES= games
-MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/
-
-MAINTAINER= asami@FreeBSD.org
-COMMENT= A cat chasing a mouse all over the screen
-
-MAN1= oneko.1
-MANCOMPRESSED= yes
-USE_IMAKE= yes
-
-.include &lt;bsd.port.mk&gt;</programlisting>
-
- <para>Versuchen Sie es zu verstehen. Machen Sie sich keine
- Gedanken um die
- <literal>&dollar;FreeBSD&dollar;</literal>-Zeile, diese wird
- automatisch vom CVS eingefügt, wenn der Port in den
- Haupt-Ports-Tree importiert wird. Ein detailliertes Beispiel
- finden Sie im Abschnitt
- <link linkend="porting-samplem">sample Makefile</link>.</para>
- </sect1>
-
- <sect1 xml:id="porting-desc">
- <title>Die Beschreibungsdateien erstellen</title>
-
- <para>Es gibt zwei Beschreibungsdateien, die für jeden Port
- benötigt werden, ob sie tatsächlich im Paket
- enthalten sind oder nicht. Dies sind
- <filename>pkg-descr</filename> und
- <filename>pkg-plist</filename>. Der <filename>pkg-</filename>
- Präfix unterscheidet sie von anderen Dateien.</para>
-
- <sect2>
- <title><filename>pkg-descr</filename></title>
-
- <para>Diese enthält eine längere Beschreibung des
- Ports. Einer oder mehrere Absätze, die kurz und
- prägnant erklären, was der Port macht, sind
- ausreichend.</para>
-
- <note>
- <para><filename>pkg-descr</filename> enthält
- <emphasis>keine</emphasis> Anleitung oder detaillierte
- Beschreibung wie der Port benutzt oder kompiliert wird!
- <emphasis>Bitte seien Sie vorsichtig, wenn Sie aus dem
- <filename>README</filename> oder der Manualpage kopieren
- </emphasis>; Diese sind oft keine prägnanten
- Beschreibungen des Ports oder sie sind in einem
- ungünstigen Format (Manualpages haben z.B.
- bündige Zwischenräume). Wenn es für die
- portierte Software eine offizielle Webseite gibt, sollten
- Sie diese hier angeben. Fügen Sie hierzu
- <emphasis>eine</emphasis> der Webseiten mit dem
- Präfix <literal>WWW:</literal> ein, damit
- automatische Werkzeuge korrekt arbeiten.</para>
- </note>
-
- <para>Das folgende Beispiel zeigt wie Ihre
- <filename>pkg-descr</filename> aussehen sollte:</para>
-
- <programlisting>This is a port of oneko, in which a cat chases a poor mouse all over
-the screen.
- :
-(etc.)
-
-WWW: http://www.oneko.org/</programlisting>
- </sect2>
-
- <sect2>
- <title><filename>pkg-plist</filename></title>
-
- <para>Diese Datei enthält eine Liste aller Dateien, die
- von diesem Port installiert werden. Sie wird auch die
- <quote>Packliste</quote> genannt, da das Paket durch die
- hier aufgeführten Dateien erstellt wird. Die
- Pfadangaben sind relativ zum Installationspräfix
- (für gewöhnlich <filename>/usr/local</filename>
- oder <filename>/usr/X11R6</filename>). Wenn Sie die
- <varname>MAN<replaceable>n</replaceable></varname>-Variablen
- verwenden (was Sie auch machen sollten), führen Sie hier
- keine Manualpages auf. Wenn der Port während der
- Installation Verzeichnisse erstellt, stellen Sie sicher
- entsprechende <literal>@dirrm</literal>-Zeilen
- einzufügen, um die Verzeichnisse zu entfernen, wenn das
- Paket gelöscht wird.</para>
-
- <para>Hier ist ein kleines Beispiel:</para>
-
- <programlisting>bin/oneko
-lib/X11/app-defaults/Oneko
-lib/X11/oneko/cat1.xpm
-lib/X11/oneko/cat2.xpm
-lib/X11/oneko/mouse.xpm
-@dirrm lib/X11/oneko</programlisting>
-
- <para>Für weitere Details zur Packliste lesen Sie in der
- &man.pkg.create.1; Manualpage nach.</para>
-
- <note>
- <para>Es wird empfohlen alle Dateinamen in dieser Datei
- alphabetisch sortiert zu halten. Das erlaubt Ihnen die
- Änderungen bei einem Upgrade Ihres Ports deutlich
- einfacher zu Überprüfen.</para>
- </note>
-
- <note>
- <para>Eine Packlist von Hand zu erzeugen kann eine sehr
- mühsame Aufgabe sein. Wenn der Port eine große
- Anzahl Dateien installiert, kann es Zeit sparen,
- <link linkend="plist-autoplist">eine Packliste automatisch
- zu erstellen</link>.</para>
- </note>
-
- <para>Es gibt nur einen Fall, in dem
- <filename>pkg-plist</filename> weggelassen werden kann.
- Wenn der Port nur eine handvoll Dateien und Verzeichnisse
- installiert, können diese in den Variablen
- <varname>PLIST_FILES</varname> und
- <varname>PLIST_DIRS</varname> im
- <filename>Makefile</filename> aufgelistet werden. Zum
- Beispiel könnten wir im obigen Beispiel ohne
- <filename>pkg-plist</filename> für den
- <filename>oneko</filename>-Port auskommen, indem wir die
- folgenden Zeilen ins <filename>Makefile</filename>
- einfügen:</para>
-
- <programlisting>PLIST_FILES= bin/oneko \
- lib/X11/app-defaults/Oneko \
- lib/X11/oneko/cat1.xpm \
- lib/X11/oneko/cat2.xpm \
- lib/X11/oneko/mouse.xpm
-PLIST_DIRS= lib/X11/oneko</programlisting>
-
- <para>Natürlich sollte <varname>PLIST_DIRS</varname>
- ungesetzt bleiben, wenn der Port keine eigenen Verzeichnisse
- installiert.</para>
-
- <para>Der Preis für diese Art die Dateien eines Ports
- anzugeben ist, dass man keine Befehlsfolgen wie in
- &man.pkg.create.1; nutzen kann. Deshalb ist es nur
- für einfache Ports geeignet und macht diese noch
- einfacher. Gleichzeitig bringt es den Vorteil die Anzahl
- der Dateien in der Ports-Sammlung zu reduzieren. Deshalb
- ziehen Sie bitte diese Vorgehensweise in Erwägung,
- bevor Sie <filename>pkg-plist</filename> benutzen.</para>
-
- <para>Später werden wir uns ansehen, wie
- <filename>pkg-plist</filename> und
- <varname>PLIST_FILES</varname> benutzt werden können,
- um <link linkend="plist">anspruchsvollere Aufgaben</link> zu
- erfüllen.</para>
- </sect2>
- </sect1>
-
- <sect1 xml:id="porting-checksum">
- <title>Die Checksummendatei erzeugen</title>
-
- <para>Geben Sie einfach <command>make makesum</command> ein.
- Die Regeln von Make sorgen dafür, dass die Datei
- <filename>distinfo</filename> automatisch erstellt
- wird.</para>
-
- <para>Wenn sich die Checksumme einer heruntergeladenen Datei
- regelmäßig ändert und Sie sicher sind, dass
- Sie der Quelle trauen können (weil sie z.B. von einer
- Hersteller-CD oder täglich erstellter Dokumentation
- stammt), sollten Sie diese Dateien in der Variable
- <varname>IGNOREFILES</varname> angeben. Dann wird die
- Checksumme für diese Datei bei
- <command>make makesum</command> nicht berechnet, sondern auf
- <literal>IGNORE</literal> gesetzt.</para>
- </sect1>
-
- <sect1 xml:id="porting-testing">
- <title>Den Port testen</title>
-
- <para>Sie sollten sicherstellen, dass die Port-Regeln genau das
- einhalten, was Sie von ihnen erwarten, auch beim Erzeugen eines
- Pakets aus dem Port. Dies sind die wichtigen Punkte, die Sie
- überprüfen sollten.</para>
-
- <itemizedlist>
- <listitem>
- <para><filename>pkg-plist</filename> enthält nichts,
- das nicht von Ihrem Port installiert wurde.</para>
- </listitem>
-
- <listitem>
- <para><filename>pkg-plist</filename> enthält alles,
- was von Ihrem Port installiert wurde.</para>
- </listitem>
-
- <listitem>
- <para>Ihr Port kann mit Hilfe von
- <command>make reinstall</command> mehrmals installiert
- werden.</para>
- </listitem>
-
- <listitem>
- <para>Ihr Port
- <link linkend="plist-cleaning">räumt</link> bei der
- Deinstallation hinter sich auf.</para>
- </listitem>
- </itemizedlist>
-
- <procedure>
- <title>Empfohlene Testreihenfolge</title>
-
- <step>
- <para><command>make install</command></para>
- </step>
-
- <step>
- <para><command>make package</command></para>
- </step>
-
- <step>
- <para><command>make deinstall</command></para>
- </step>
-
- <step>
- <para><command>pkg_add Paket-Name
- </command></para>
- </step>
-
- <step>
- <para><command>make deinstall</command></para>
- </step>
-
- <step>
- <para><command>make reinstall</command></para>
- </step>
-
- <step>
- <para><command>make package</command></para>
- </step>
- </procedure>
-
- <para>Stellen Sie bitte sicher, dass während
- <command>make package</command> und
- <command>make deinstall</command> keine Warnungen ausgegeben
- werden. Nach Schritt 3 überprüfen Sie bitte, ob alle
- neuen Verzeichnisse korrekt entfernt wurden. Und versuchen Sie
- die Software nach Schritt 4 zu benutzen, um sicherzustellen,
- dass sie korrekt funktioniert, wenn diese aus einem Paket
- installiert wird.</para>
-
- <para>Der gründlichste Weg diese Schritte zu automatisieren
- ist eine <application>Tinderbox</application> zu installieren.
- Diese verwaltet <literal>Jails</literal>, in denen Sie alle
- oben genannten Schritte durchführen können, ohne den
- Zustand Ihres laufenden Systems zu verändern. Mehr
- Informationen hierzu entält
- <filename>ports/ports-mgmt/tinderbox</filename></para>
- </sect1>
-
- <sect1 xml:id="porting-portlint">
- <title>Ihren Port mit <command>portlint</command>
- überprüfen</title>
-
- <para>Bitte verwenden Sie <command>portlint</command>, um
- festzustellen, ob Ihr Port unseren Richtlinien entspricht.
- Das Programm
- <package>ports-mgmt/portlint</package> ist
- Teil der Ports-Sammlung. Stellen Sie vor allem sicher, dass
- das <link linkend="porting-samplem">Makefile</link> in der
- richtigen Form und das
- <link linkend="porting-pkgname">Paket</link> passend benannt
- ist.</para>
- </sect1>
-
- <sect1 xml:id="porting-submitting">
- <title>Den neuen Port einreichen</title>
-
- <para>Bevor Sie den neuen Port einreichen, lesen Sie bitte
- unbedingt den Abschnitt <link linkend="porting-dads">DOs and DON'Ts</link>.</para>
-
- <para>Nun, da Sie mit Ihrem Port zufrieden sind, müssen Sie
- ihn nur noch in den Haupt-Ports-Tree von &os; einbringen,
- damit alle daran teilhaben können. Wir benötigen
- nicht Ihr <filename>work</filename>-Verzeichnis oder Ihr
- <filename>pkgname.tgz</filename>-Paket&nbsp;&ndash;&nbsp;diese
- können Sie nun löschen. Wenn Ihr Port beispielsweise
- <literal>oneko</literal> heißt, wechseln Sie in das
- Verzeichnis, in dem sich das Verzeichnis
- <literal>oneko</literal> befindet und führen
- den Befehl <command>shar `find oneko` &gt; oneko.shar</command>
- aus.</para>
-
- <para>Fügen Sie Ihre Datei <literal>oneko.shar</literal>
- einem Fehlerbericht an und senden Sie diesen mit Hilfe des
- Programms &man.send-pr.1; (unter <link xlink:href="&url.articles.contributing;/contrib-how.html#CONTRIB-GENERAL">
- Bug Reports and General Commentary</link> finden Sie weitere
- Informationen über &man.send-pr.1;). Ordnen Sie den
- Fehlerbericht bitte in die Kategorie <literal>Ports</literal>
- mit der Klasse <literal>Change-Request</literal> ein
- (Markieren Sie den Bericht nicht als
- <literal>vertraulich</literal>
- (<literal>confidential</literal>)!). Fügen Sie bitte eine
- kurze Beschreibung des Programms, das Sie portiert haben, in
- das <quote>Beschreibungs</quote>-Feld des Problemberichts und
- die shar-Datei in das <quote>Fix</quote>-Feld
- ein (bespielsweise eine kurze Version des
- <varname>COMMENT</varname>).</para>
-
- <note>
- <para>Sie können uns die Arbeit um einiges vereinfachen,
- wenn Sie eine gute Beschreibung in der Zusammenfassung des
- Problemberichtes verwenden. Wir bevorzugen etwas wie
- <quote>Neuer Port:
- &lt;Kategorie&gt;/&lt;Portname&gt;&lt;Kurzbeschreibung des
- Ports&gt;</quote> für neue Ports. Wenn Sie sich an
- dieses Schema halten, ist die
- Chance, dass sich jemand bald Ihren Bericht ansieht,
- deutlich besser.</para>
- </note>
-
- <para>Noch einmal: <emphasis>Bitte fügen Sie nicht das
- distfile der Originalquelle, das
- <filename>work</filename>-Verzeichnis oder das Paket, das Sie
- mit <command>make package</command> erstellt haben,
- ein.</emphasis> Und verwenden Sie &man.shar.1; für
- neue Ports (und NICHT &man.diff.1;).</para>
-
- <para>Haben Sie bitte etwas Geduld, nachdem Sie den Port
- eingereicht haben. Manchmal kann es einige Monate dauern,
- bevor ein Port in &os; eingefügt wird, obwohl es
- wahrscheinlich nur ein paar Tage dauert. Sie können sich
- die <link xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?category=ports">
- Liste der PRs, die darauf warten, in &os; committet zu
- werden</link>, ansehen.</para>
-
- <para>Nachdem wir einen Blick auf Ihren Port geworfen haben,
- werden wir, wenn nötig, bei Ihnen nachfragen und ihn in
- die Ports-Sammlung übernehmen. Ihr Name taucht dann auch
- in der Liste der <link xlink:href="&url.articles.contributors;/contrib-additional.html">Additional
- FreeBSD Contributors</link> und in anderen Dateien auf.
- Ist das nicht toll?! <!-- smiley -->:-)</para>
- </sect1>
- </chapter>
-
- <chapter xml:id="slow">
- <title>Einen Port in aller Ruhe erstellen</title>
-
- <para>Ok, das war nicht ganz einfach und der Port hat einige
- Veränderungen erfordert, um funktionieren zu können.
- In diesem Abschnitt werden wir Schritt für Schritt
- erklären, wie man den funktionierenden Port den Vorgaben
- der Ports entsprechend anpasst.</para>
-
- <sect1 xml:id="slow-work">
- <title>Die Funktionsweise</title>
-
- <para>Beginnen wir mit der Abfolge der Ereignisse, die
- eintreten, wenn der Nutzer das erste <command>make</command>
- in Ihrem Portsverzeichnis ausführt. Sie empfinden es
- für das Verständnis vielleicht hilfreich
- <filename>bsd.port.mk</filename> in einem anderen Fenster
- offen zu haben, während Sie diesen Abschnitt
- lesen.</para>
-
- <para>Aber machen Sie sich keine Sorgen, falls Sie nicht
- wirklich verstehen, was <filename>bsd.port.mk</filename>
- macht, die Wenigsten begreifen dies... <!-- smiley -->
- <emphasis>:&gt;</emphasis></para>
-
- <procedure>
- <step>
- <para>Das Target <buildtarget>fetch</buildtarget> wird
- aufgerufen. Es ist dafür verantwortlich
- sicherzustellen, dass der Tarball lokal im
- <varname>DISTDIR</varname> verfügbar ist. Falls
- <buildtarget>fetch</buildtarget> die benötigten Dateien
- in <varname>DISTDIR</varname> nicht finden kann,
- durchsucht es die URL <varname>MASTER_SITES</varname>,
- welche im Makefile gesetzt ist, ebenso wie unsere
- Haupt-FTP-Seite unter <link xlink:href="ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles">
- ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/
- </link>, wo wir genehmigte Distfiles als Backup
- aufbewahren. Danach wird versucht, so eine direkte
- Internetverbindung besteht, dass genannte Distfile mit
- <varname>FETCH</varname> herunterzuladen. Falls dies
- gelingt, wird die Datei in <varname>DISTDIR</varname>
- für weitere Nutzung abgelegt und fährt
- fort.</para>
- </step>
-
- <step>
- <para>Das Target <buildtarget>extract</buildtarget> wird
- aufgerufen. Es sucht nach den Distfiles Ihres Ports
- (normalerweise ein gzip-komprimierter Tarball) in
- <varname>DISTDIR</varname> und entpackt diese in ein
- temporäres Unterverzeichnis, welches von <varname>
- WRKDIR</varname> festgelegt wird (standardmäßig
- <filename>work</filename>).</para>
- </step>
-
- <step>
- <para>Das Target <buildtarget>patch</buildtarget> wird
- aufgerufen. Zuerst werden alle in
- <varname>PATCHFILES</varname> festgelegten Patches
- eingespielt. Anschließend werden, falls Patches der
- Form
- <filename>patch-*</filename> in
- <varname>PATCHDIR</varname> (standardmäßig das
- <filename>files</filename>-Unterverzeichnis) gefunden
- werden, diese in alphabetischer Reihenfolge
- eingespielt.</para>
- </step>
-
- <step>
- <para>Das Target <buildtarget>configure</buildtarget> wird
- aufgerufen. Dieses kann viele verschiedene Dinge
- machen.</para>
-
- <orderedlist>
- <listitem>
- <para>Existiert <filename>scripts/configure</filename>,
- so wird es aufgerufen.</para>
- </listitem>
-
- <listitem>
- <para>Falls <varname>HAS_CONFIGURE</varname> oder
- <varname>GNU_CONFIGURE</varname> gesetzt sind, wird
- <filename>WRKSRC/configure
- </filename>ausgeführt.</para>
- </listitem>
-
- <listitem>
- <para>Falls <varname>USE_IMAKE</varname> gesetzt ist,
- wird <varname>XMKMF</varname>
- (standardmäßig <command>xmkmf -a</command>)
- ausgeführt.</para>
- </listitem>
- </orderedlist>
- </step>
-
- <step>
- <para>Das Target <buildtarget>build</buildtarget> wird
- aufgerufen. Es ist für das Wechseln in das private
- Arbeitsverzeichnis (<varname>WRKSRC</varname>) und das
- Bauen des Ports zuständig. Ist
- <varname>USE_GMAKE</varname> gesetzt, so wird GNU
- <command>make</command> verwendet, sonst das
- System-<command>make</command>.</para>
- </step>
- </procedure>
-
- <para>Die oben genannten Schritte sind die Standardaktionen.
- Zusätzlich können Sie <buildtarget>pre-<replaceable>
- irgendwas</replaceable></buildtarget> oder
- <buildtarget>post-<replaceable>irgendwas</replaceable>
- </buildtarget> als Targets definieren oder Skripten mit diesen
- Namen in das <filename>scripts</filename>-Unterverzeichnis
- legen. Sie werden dann vor bzw. nach den Standardaktionen
- aufgerufen.</para>
-
- <para>Angenommen Sie haben das Target <buildtarget>post-extract
- </buildtarget> in Ihrem <filename>Makefile</filename>
- definiert und eine Datei <filename>pre-build</filename> im
- <filename>scripts</filename> Unterverzeichnis, so wird das
- Target <buildtarget>post-extract</buildtarget> nach dem normalen
- Entpacken aufgerufen und das Skript
- <filename>pre-build</filename>
- ausgeführt, bevor die vordefinierten Bau-Regeln
- abgearbeitet sind. Es wird empfohlen, dass Sie
- <filename>Makefile</filename>-Targets verwenden, falls die
- Aktionen es erlauben, da es so für jemanden einfacher
- sein wird herauszufinden, was für eine
- nicht-standardmäßige Aktion der Port
- benötigt.</para>
-
- <para>Die Standardaktionen werden aus den Targets
- <filename>bsd.port.mk</filename>
- <buildtarget>do-<replaceable>irgendwas</replaceable>
- </buildtarget> übernommen. Zum Beispiel sind die Befehle
- zum Entpacken eines Ports im Target
- <buildtarget>do-extract</buildtarget> zu finden. Falls Sie mit
- einem vorgegebenen Target nicht zufrieden sind, können
- Sie es verändern, indem Sie das Target
- <buildtarget>do-<replaceable>irgendwas</replaceable>
- </buildtarget> in Ihrem <filename>Makefile</filename> neu
- definieren.</para>
-
- <note>
- <para>Die <quote>Haupt</quote>-Targets (z.B.
- <buildtarget>extract</buildtarget>,
- <buildtarget>configure</buildtarget> usw.) machen nicht mehr
- als sicherzustellen, dass bis hierhin alle Abschnitte
- abgeschlossen sind, um danach die eigentlichen Targets oder
- Skripte aufzurufen. Und es ist nicht beabsichtigt, dass
- diese geändert werden. Falls Sie das Entpacken
- verändern wollen, verändern Sie
- <buildtarget>do-extract</buildtarget>, aber niemals die Art,
- wie <buildtarget>extract</buildtarget> arbeitet!</para>
- </note>
-
- <para>Jetzt, da Sie verstehen, was geschieht, wenn der Benutzer
- <command>make</command> eingibt, lassen Sie uns durch die
- empfohlenen Schritte gehen, um den perfekten Port zu
- erstellen.</para>
- </sect1>
-
- <sect1 xml:id="slow-sources">
- <title>Den originalen Quelltext besorgen</title>
-
- <para>Normalerweise liegt der original Quelltext als gepackte
- Datei (<filename>foo.tar.gz
- </filename> oder
- <filename>foo.tar.Z</filename>)
- vor. Kopieren Sie diese nach <varname>DISTDIR</varname>.
- Nutzen Sie, soweit möglich, immer die Quellen aus dem
- <emphasis>Hauptzweig</emphasis>.</para>
-
- <para>Es ist notwendig die Variable
- <varname>MASTER_SITES</varname> anzupassen, um anzugeben, wo
- sich der originale Quelltext befindet. In
- <filename>bsd.sites.mk</filename> finden sich hilfreiche
- Definitionen für die gebräuchlichsten Seiten. Bitte
- nutzen Sie diese Seiten und die zugehörigen Definitionen,
- soweit dies möglich ist. Damit wird vermieden, immer und
- immer wieder dieselben Informationen zu wiederholen. Da die
- Hauptseiten regelmäßig angepasst werden
- müssen, vereinfacht dieses Vorgehen die Pflege der
- Dateien für jeden Beteiligten.</para>
-
- <para>Falls keine zuverlässige und gut erreichbare
- FTP/HTTP-Seite zu finden ist, oder nur Seiten auffindbar sind,
- die keinen Standards entsprechen, sollte eine Kopie des
- Quelltextes auf einer zuverlässigen Seite abgelegt
- werden. Dies könnte z.B. die eigene Internetseite
- sein.</para>
-
- <para>Ist kein geeigneter Ort zum Ablegen des Quelltextes
- auffindbar, ist es möglich diesen <quote>intern</quote>
- auf <systemitem>ftp.FreeBSD.org</systemitem> abzulegen; dies sollte
- jedoch als letzte Möglichkeit angesehen werden. Das
- Distfile muss in diesem Fall in <filename>~/public_distfiles/
- </filename> eines <systemitem>freefall</systemitem>-Accounts abgelegt
- werden. Bitten Sie den Committer Ihres Ports dies zu erledigen.
- Er wird außerdem <varname>MASTER_SITES</varname> nach
- <varname>MASTER_SITE_LOCAL</varname> und <varname>
- MASTER_SITE_SUBDIR</varname> auf den
- <systemitem>freefall</systemitem>-Benutzernamen angepasst.</para>
-
- <para>Sollte sich das Distfile des Ports regelmäßig
- ohne Versionsanpassungen des Autors ändern, sollte
- überlegt werden, das Disfile auf der eigenen
- Internetseite abzulegen und diese in der Liste der
- <varname>MASTER_SITES</varname> an die erste Stelle zu setzen.
- Falls möglich, sollte der Autor des Ports gebeten werden,
- dies zu erledigen; hierüber wird die Kontrolle des Quelltextes
- verbessert. Wird eine eigene Version des Quelltextes auf
- eigenen Internetseiten verfügbar gemacht, verhindert dies
- Warnungen von <errorname>checksum mismatch</errorname> und
- reduziert den Arbeitsaufwand der Maintainer der FTP-Seiten.
- Auch wenn nur eine Quelle für den Quelltext des Ports zur
- Verfügung steht, ist es empfohlen, ein Backup auf einer
- weiteren Seite abzulegen und diese als zweiten Eintrag in
- <varname>MASTER_SITES</varname> aufzunehmen.</para>
-
- <para>Sind für den Port zusätzlich aus dem Internet
- verfügbare Patches erforderlich, sollten diese ebenfalls
- in <varname>DISTDIR</varname> abgelegt werden. Sollten diese
- Patches von anderer Quelle als der Hauptseite des Ports
- stammen, ist das kein Grund zur Sorge. Es gibt Wege diesem
- Umstand gerecht zu werden (beachten Sie die unten stehende
- Beschreibung zu <link linkend="porting-patchfiles">PATCHFILES
- </link>).</para>
- </sect1>
-
- <sect1 xml:id="slow-modifying">
- <title>Den Port bearbeiten</title>
-
- <para>Entpacken Sie eine Kopie des Tarballs in ein privates
- Verzeichnis und nehmen Sie alle Änderungen
- vor, die nötig sind, um den Port unter einer aktuellen
- &os;-Version kompilieren zu können.
- <emphasis>Protokollieren Sie sorgfältig</emphasis> alle
- Schritte, die Sie vornehmen, da Sie den Prozess in Kürze
- automatisieren werden. Alles, auch das Entfernen,
- Hinzufügen oder Bearbeiten von Dateien, sollte von einem
- automatisierten Skript oder einer Patch-Datei machbar sein,
- wenn Ihr Port fertig ist.</para>
-
- <para>Falls Ihr Port bedeutende Interaktionen/Veränderungen
- durch den Benutzer benötigt, um ihn zu Kompilieren oder
- zu Installieren, sollten Sie einen Blick auf Larry Walls
- klassische <application>Configure</application>-Skripte werfen
- oder vielleicht etwas Ähnliches selbst erstellen. Das
- Ziel der Ports-Sammlung ist es, jeden Port so
- <quote>plug-and-play-fähig</quote> wie möglich
- für den Endbenutzer zu machen, während ein Minimum
- an Speicherplatz gebraucht wird.</para>
-
- <note>
- <para>Solange nicht anders angegeben wird von Patch-Dateien,
- Skripten und anderen Dateien, die Sie erstellt und der &os;
- Ports-Sammlung hinzugefügt haben, angenommen, dass Sie
- unter den standardmäßigen BSD-Copyright-Bedingungen
- stehen.</para>
- </note>
- </sect1>
-
- <sect1 xml:id="slow-patch">
- <title>Fehlerbehebung (Patches)</title>
-
- <para>Bei der Vorbereitung eines Ports können die Dateien,
- die hinzugefügt oder verändert wurden, mittels
- &man.diff.1; abgefangen werden, um Sie später an
- &man.patch.1; zu übergeben. Jeder Patch, der dem
- Quelltext übergeben werden soll, sollte in einer Datei
- <filename>patch-*</filename>
- abgelegt werden, wobei <replaceable>*</replaceable> dem
- Pfadnamen der zu korrigierenden Datei entspricht, wie er auch
- in <filename>patch-Imakefile</filename> oder im
- <filename>patch-src-config.h</filename> erscheint. Diese
- Dateien sollten in <varname>PATCHDIR</varname> (normalerweise
- <filename>files</filename>) abgelegt sein, von wo sie
- automatisch übernommen werden. Alle Patches müssen
- sich relativ zur <varname>WRKSRC</varname>-Variable
- (normalerweise dem Verzeichnis, in dem sich der Quelltext des
- Ports entpackt und wo auch der Bau stattfindet)
- befinden.</para>
-
- <para>Um Korrekturen und Updates zu vereinfachen, sollte es
- vermieden werden, mehr als einen Patch für eine Datei zu
- nutzen (z.B. <filename>patch-file</filename> und
- <filename>patch-file2</filename>, welche beide
- <filename>WRKSRC/foobar.c</filename>
- verändern). Beachten Sie, dass, falls der Pfad einer zu
- korrigierenden Datei einen Unterstrich (<literal>_</literal>)
- enthält, der Patch stattdessen zwei Unterstriche im Namen
- haben muss. Zum Beispiel muss der Patch, der eine Datei namens
- <filename>src/freeglut_joystick.c</filename> korrigieren soll,
- <filename>patch-src-freeglut__joystick.c</filename> genannt
- werden.</para>
-
- <para>Für die Benennung der Patches sollten nur die Zeichen
- <literal>[-+._a-zA-Z0-9]</literal> genutzt werden. Bitte
- verwenden Sie keine weiteren Zeichen als die angegebenen. Die
- Namensvergabe sollte nicht <filename>patch-aa</filename> oder
- <filename>patch-ab</filename> etc. entsprechen, erwähnen
- Sie immer den Pfad und Dateinamen.</para>
-
- <para>RCS-Zeichenketten sollten vermieden werden, da CVS diese
- verstümmeln würde, sobald wir diese Dateien in die
- Ports-Sammlung einpflegen. Wenn wir die Dateien wieder abrufen
- wären diese verändert und der Patch würde
- fehlschlagen. RCS-Zeichenketten sind in Dollar-Zeichen
- (<literal>&dollar;</literal>) eingefügte Zeichen und
- beginnen üblicherweise mit <literal>&dollar;Id</literal>
- oder <literal>&dollar;RCS</literal>.</para>
-
- <para>Die Option rekursiv (<option>-r</option>) zu nutzen
- &man.diff.1;, um Patches zu erstellen, ist zulässig,
- jedoch sollte der Patch anschließend geprüft
- werden, um Unnötiges aus dem Patch zu entfernen. Im
- Einzelnen bedeutet dies, dass Diffs zwischen zwei
- Backup-Dateien, <filename>Makefile</filename>s oder wenn der
- Port <command>Imake</command> oder GNU
- <command>configure</command> usw. nutzt, überflüssig
- sind und entfernt werden sollten. Falls es es notwendig war,
- <filename>configure.in</filename> zu bearbeiten und es soll
- <command>autoconf</command> zum Neuerstellen von
- <command>configure</command> genutzt werden, sollten die Diffs
- aus <command>configure</command> nicht genutzt werden (diese
- werden oft einige tausend Zeilen
- groß!);&nbsp;&ndash;&nbsp;hier sollte
- <literal>USE_AUTOTOOLS=autoconf:261</literal> definiert und
- das Diff aus <filename>configure.in</filename> genutzt
- werden.</para>
-
- <para>Zusätzlich sollte man unnötige
- Markup-Änderungen in Patches/Änderungen möglichst
- vermeiden. In der Open Source-Welt teilen sich Projekte
- häufig große Teile des Quellcodes. Allerdings
- verwenden die einzelnen Projekte oft unterschiedliche
- Programmierstile und Vorgaben für Einrückungen. Wenn
- man also einen funktionierenden Teil einer Funktion aus einem
- Projekt verwendet, um ein ähnliches Problem in einem anderen
- Projekt zu lösen, sollte man besonders vorsichtig sein, weil
- sich ansonsten die CVS-Änderungseinträge mit
- überflüssigen Einträgen füllen, die nur
- das Markup des Quellcodes betreffen, ohne dass sich an der
- Funktion des eigentlichen Quellcode etwas ändert
- (<quote>withspace-only changes</quote>). Solche Änderungen
- vergrößern nicht nur das CVS-Repository, sondern
- erschweren es auch die Ursache für eventuell auftretende
- Probleme zu finden.</para>
-
- <para>War es notwendig eine Datei zu entfernen, wird dies besser
- mittels des <buildtarget>post-extract</buildtarget>-Targets als
- über den Patch selbst realisiert.</para>
-
- <para>Ein einfacher Austausch kann direkt über das
- <filename>Makefile</filename> des Ports umgesetzt werden,
- indem der in-place-Modus von &man.sed.1; genutzt wird. Dies
- ist sehr hilfreich, wenn variable Werte korrigiert werden
- sollen. Beispiel:</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>
-
- <para>Relativ häufig ergibt sich die Situation, in der die
- portierte Software die CR/LF-Konventionen für Zeilenenden
- nutzt (dies ist bei unter &windows; entwickelter Software
- häufig der Fall). Dies kann bei weiteren Patches Probleme
- (Compiler-Warnungen, Fehlermeldungen bei der Ausführung
- von Skripten wie z.B. <command>/bin/sh^M</command> not found)
- und anderes ergeben. Um schnell alle Dateien von CR/LF
- nach LF zu konvertieren, kann
- <literal>USE_DOS2UNIX=yes</literal> in das
- <filename>Makefile</filename> des Ports geschrieben werden.
- Hierzu kann eine Liste der zu konvertierenden Dateien erstellt
- werden:</para>
-
- <programlisting>USE_DOS2UNIX= util.c util.h</programlisting>
-
- <para>Sollen Gruppen von Dateien über verschiedene
- Unterverzeichnisse konvertiert werden, kann
- <varname>DOS2UNIX_REGEX</varname> genutzt werden, dessen
- Argumente <command>find</command>-kompatible, reguläre
- Ausdrücke sind. Mehr zur Formatierung findet sich in
- &man.re.format.7;. Diese Option ist beim Konvertieren aller
- Dateien mit definierter Endung, z.B. aller Dateien im
- Quellcode, wobei binäre Dateien unberührt bleiben,
- sinnvoll:</para>
-
- <programlisting>USE_DOS2UNIX= yes
- DOS2UNIX_REGEX= .*\.(c|cpp|h)</programlisting>
-
- <para>Wenn Sie einen Patch zu einer bereits existierenden Datei
- erstellen wollen, können Sie von ihr eine Kopie mit der
- Endung <filename>.orig</filename> erstellen und
- anschließend die Originaldatei bearbeiten. Das make-Ziel
- <buildtarget>makepatch</buildtarget> führt dann zu
- einer entsprechenden Patch-Datei im Verzeichnis <filename>files</filename> des Ports.</para>
- </sect1>
-
- <sect1 xml:id="slow-configure">
- <title>Konfigurieren</title>
-
- <para>Fügen Sie alle zusätzlichen
- Veränderungsbefehle Ihrem Skript
- <filename>configure</filename> hinzu und speichern Sie es im
- <filename>scripts</filename>-Unterverzeichnis. Wie vorstehend
- schon erwähnt, können Sie dies auch mit den Targets
- <filename>Makefile</filename> und/oder Skripte mit dem Namen
- <filename>pre-configure</filename> oder
- <filename>post-configure</filename> erledigen.</para>
- </sect1>
-
- <sect1 xml:id="slow-user-input">
- <title>Handhabung von Benutzereingaben</title>
-
- <para>Sollte der Port Eingaben vom Benutzer benötigen,
- muss <varname>IS_INTERACTIVE</varname> im
- <filename>Makefile</filename> des Ports gesetzt werden. Dies
- erlaubt <quote>overnight builds</quote> Ihren Port zu
- überspringen, falls der Nutzer die Variable
- <envar>BATCH</envar> setzt (setzt der Nutzer hingegen die
- Variable <envar>INTERACTIVE</envar>, werden
- <emphasis>nur</emphasis> Ports gebaut, die Interaktion vom
- Nutzer erwarten). Dies erspart den Rechnern, welche
- kontinuierlich Ports bauen, eine Menge Zeit (siehe
- unten).</para>
-
- <para>Zudem ist es empfohlen, falls sinnvolle Vorgaben für
- interaktive Optionen gesetzt sind, die
- <varname>PACKAGE_BUILDING</varname>-Variable zu prüfen
- und das interaktive Skript abzuschalten. Dies macht es uns
- möglich, Pakete für CDROMs und FTP-Server zu
- bauen.</para>
- </sect1>
- </chapter>
-
- <chapter xml:id="makefile">
- <title>Die Konfiguration des Makefile</title>
-
- <para>Das Konfigurieren des <filename>Makefile</filename> ist
- sehr einfach und wir schlagen vor, dass Sie zunächst
- einen Blick auf vorhandene Beispiele werfen. Zusätzlich
- gibt es ein
- <link linkend="porting-samplem">Beispiel eines Makefile</link>
- in diesem Handbuch. Schauen Sie es sich an und verfolgen Sie
- bitte die Abfolge der Variablen und Abschnitte in dieser
- Vorlage. Damit erleichtern Sie es anderen,
- Ihren Port zu lesen.</para>
-
- <para>Bedenken Sie bitte die folgenden Probleme in der hier
- vorgegebenen Abfolge der Unterabschnitte dieses Kapitels, wenn
- Sie Ihr neues <filename>Makefile</filename> erstellen:</para>
-
- <sect1 xml:id="makefile-source">
- <title>Der originale Quelltext</title>
-
- <para>Liegt der Quelltext in <varname>DISTDIR</varname> als eine
- standardisierte und mit gzip gepackte Datei in der Art
- <filename>foozolix-1.2.tar.gz</filename>? Falls ja,
- können Sie zum nächsten Schritt übergehen.
- Falls nicht, sollten Sie versuchen, die Variablen
- <varname>DISTVERSION</varname>, <varname>DISTNAME</varname>,
- <varname>EXTRACT_CMD</varname>,
- <varname>EXTRACT_BEFORE_ARGS</varname>,
- <varname>EXTRACT_AFTER_ARGS</varname>,
- <varname>EXTRACT_SUFX</varname>, oder
- <varname>DISTFILES</varname> zu ändern. Das hängt
- davon ab, wie fremdartig das Distributionsfile Ihres Ports ist
- (der häufigste Fall ist
- <literal>EXTRACT_SUFX=.tar.Z</literal>, wenn der Tarball durch
- ein normales <command>compress</command> und nicht durch
- <command>gzip</command> gepackt wurde).</para>
-
- <para>Im schlimmsten Fall können Sie einfach Ihre eigene
- Vorgabe mittels <buildtarget>do-extract</buildtarget> erzeugen
- und die Standardvorgabe überschreiben; aber dies sollte
- in den wenigsten Fällen, wenn überhaupt, notwendig
- sein.</para>
- </sect1>
-
- <sect1 xml:id="makefile-naming">
- <title>Bezeichnungen</title>
-
- <para>Der erste Teil des <filename>Makefile</filename>
- beschreibt die Versionsnummer des Ports und führt ihn in
- der richtigen Kategorie auf.</para>
-
- <sect2>
- <title><varname>PORTNAME</varname> und
- <varname>PORTVERSION</varname></title>
-
- <para>Setzen Sie bitte die Variable
- <varname>PORTNAME</varname> auf den Basisnamen Ihres Ports
- und die Variable <varname>PORTVERSION</varname> auf dessen
- Versionsnummer.</para>
- </sect2>
-
- <sect2 xml:id="makefile-naming-revepoch">
- <title><varname>PORTREVISION</varname> und
- <varname>PORTEPOCH</varname></title>
-
- <sect3>
- <title><varname>PORTREVISION</varname></title>
-
- <para>Die <varname>PORTREVISION</varname>-Variable ist ein
- streng monoton wachsender Wert, welcher auf 0
- zurückgesetzt wird, nachdem
- <varname>PORTVERSION</varname> erhöht wurde (d.h.
- jedes Mal, wenn ein offizielles Release erfolgt). Sie wird
- an den Namen des Pakets angehängt, wenn sie ungleich
- 0 ist. Änderungen an <varname>PORTREVISION</varname>
- werden von automatisierten Werkzeugen (z.B.
- &man.pkg.version.1;) genutzt, um anzuzeigen, dass ein
- neues Paket verfügbar ist.</para>
-
- <para><varname>PORTREVISION</varname> sollte jedes Mal
- erhöht werden, wenn eine Änderung am Port
- erfolgt, die beträchtliche Auswirkungen auf den
- Inhalt oder Struktur des aus dem Port erzeugten Pakets
- zur Folge hat.</para>
-
- <para>Beispiele dafür, wann
- <varname>PORTREVISION</varname> erhöht werden
- sollte:</para>
-
- <itemizedlist>
- <listitem>
- <para>Hinzufügen von Patches, welche
- Sicherheitslücken schließen, Fehler
- beseitigen oder neue Funktionalität zum Port
- hinzufügen.</para>
- </listitem>
-
- <listitem>
- <para>Änderungen am <filename>Makefile</filename>
- des Ports, welche compile-time-Optionen
- hinzufügen oder entfernen.</para>
- </listitem>
-
- <listitem>
- <para>Änderungen bezüglich Packliste oder am
- Verhalten während der Installation des Pakets
- (d.h. Änderungen an einem Skript, welches
- Ausgangsdaten für das Paket erzeugt, wie z.B.
- SSH-Hostschlüssel).</para>
- </listitem>
-
- <listitem>
- <para>Versionssprung einer Shared-Library, welche eine
- Abhängigkeit dieses Ports ist (In diesem Fall
- würde ein Anwender bei der Installation des alten
- Pakets scheitern, falls er eine neue Version der
- Abhängigkeit bereits installiert hat, weil nach
- der alten Bibliothek libfoo.x anstatt nach
- libfoo.(x+1)) gesucht wird).</para>
- </listitem>
-
- <listitem>
- <para>Schleichende Änderungen am Distfile, welche
- bedeutende funktionale Änderungen verursachen,
- d.h. Änderungen des Distfile erfordern eine
- Korrektur an <filename>distinfo</filename>, ohne dass
- damit zusammenhängend die
- <varname>PORTVERSION</varname> verändert wird,
- obwohl ein <command>diff -ru</command> zwischen der
- alten und der neuen Version bedeutende
- Veränderungen am Code nachweist.</para>
- </listitem>
- </itemizedlist>
-
- <para>Beispiele für Änderungen, welche keine
- Erhöhung von <varname>PORTREVISION</varname>
- erfordern:</para>
-
- <itemizedlist>
- <listitem>
- <para>Stilistische Änderungen am Grundgerüst
- des Ports ohne funktionale Änderungen am daraus
- resultierenden Paket.</para>
- </listitem>
-
- <listitem>
- <para>Änderungen an der Variable
- <varname>MASTER_SITES</varname> oder andere
- funktionale Änderungen, welche das resultierende
- Paket nicht verändern.</para>
- </listitem>
-
- <listitem>
- <para>Marginale Patches am Distfile wie die Korrektur
- von Tippfehlern, welche nicht wichtig genug sind, um
- dem Benutzer die Bürde eines Upgrades
- aufzuerlegen.</para>
- </listitem>
-
- <listitem>
- <para>Build fixes, die ein Paket erst kompilierbar
- machen, welches ohne diese Änderungen vorher
- nicht erzeugt werden konnte (solange die
- Änderungen keine funktionale Differenz bringen
- auf Plattformen, auf denen dieses Paket schon vorher
- gebaut werden konnte). Da
- <varname>PORTREVISION</varname> den Inhalt des Pakets
- wiederspiegelt, ist es nicht notwendig
- <varname>PORTREVISION</varname> zu erhöhen, wenn
- das Paket vorher nicht erstellt werden konnte.</para>
- </listitem>
- </itemizedlist>
-
- <para>Als Faustregel gilt: Stellen Sie sich die Frage, ob
- die durchgeführte Änderung am Port jedem hilft
- (entweder aufgrund einer Verbesserung, Beseitigung eines
- Fehlers, oder der Annahme, dass das neue Paket
- überhaupt erst funktioniert) und wägen Sie es
- gegen den Umstand ab, dass jedermann, der seine
- Ports-Sammlung regelmässig auf dem neuesten Stand
- hält, zu einer Aktualisierung gezwungen wird.
- Falls Sie die Frage positiv beantworten sollten,
- erhöhen Sie die Variable
- <varname>PORTREVISION</varname>.</para>
- </sect3>
-
- <sect3>
- <title><varname>PORTEPOCH</varname></title>
-
- <para>Von Zeit zu Zeit geschieht es, dass irgendjemand
- (Drittanbieter von Software oder FreeBSD Ports Committer)
- etwas Dummes tut und eine Version einer Software
- veröffentlicht, deren Versionsnummer niedriger ist
- als die der vorherigen. Ein Beispiel hierfür ist
- ein Port, der von foo-20000801 auf foo-1.0 geändert
- wird (der Erstere wird fälschlicherweise als neue
- Version behandelt, weil 2000801 ein numerisch
- größerer Wert ist als 1).</para>
-
- <para>In Situationen wie diesen sollte die Variable
- <varname>PORTEPOCH</varname> erhöht werden. Wenn
- <varname>PORTEPOCH</varname> größer als 0 ist,
- wird sie an den Namen des Pakets angehängt, wie in
- Abschnitt 0 oberhalb bereits beschrieben.
- <varname>PORTEPOCH</varname> darf niemals verringert oder
- auf 0 gesetzt werden, weil der Vergleich des Pakets mit
- einem früheren Zeitpunkt scheitern würde (d.h.
- das Paket würde niemals als veraltet erkannt werden):
- Die neue Versionsnummer (<literal>1.0,1</literal> im
- obigen Beispiel) ist immer noch numerisch kleiner als die
- vorherige Version (2000801), aber das Suffix
- <literal>,1</literal> wird von automatisierten Werkzeugen
- gesondert behandelt und wird als größer
- erkannt, als das implizit angenommene Suffix
- <literal>,0</literal> im früheren Paket.</para>
-
- <para>Das Entfernen oder Zurücksetzen von
- <varname>PORTEPOCH</varname> führt zu unendlichem
- Ärger. Wenn Sie die obigen Ausführungen nicht
- vollständig verstanden haben, lesen Sie es bitte
- unbedingt nochmals bis Sie es vollständig
- verinnerlicht haben, oder fragen Sie vor jeder
- Änderung auf den Mailinglisten nach!</para>
-
- <para>Es wird erwartet, dass <varname>PORTEPOCH</varname>
- für die weitaus überwiegende Zahl der Ports
- nicht verwendet wird und der verantwortungsvolle und
- vorausschauende Umgang mit <varname>PORTVERSION</varname>
- macht es meist überflüssig, falls ein
- späteres Release die Versionsstruktur ändern
- sollte. Vorsicht ist geboten, wenn ein Release einer
- Drittanbieter-Software ohne eine offizielle Versionsnummer
- veröffentlicht wird, wie z.B. bei
- <quote>Snapshot-Versionen</quote>. Man ist versucht,
- das Release mit dem jeweiligen Datum zu bezeichnen,
- was unweigerlich zu den oben beschriebenen Problemen
- führt, wenn das nächste
- <quote>offizielle</quote> Release erscheint.</para>
-
- <para>Wenn z.B. ein Snapshot zum Datum 20000917
- veröffentlicht wird und die vorherige Version der
- Software war 1.2, dann sollte der Snapshot die
- <varname>PORTVERSION</varname> 1.2.20000917 oder
- ähnlich erhalten und nicht 20000917, damit das
- nachfolgende Release, angenommen 1.3, immer noch einen
- größeren numerischen Wert aufweist.</para>
- </sect3>
-
- <sect3>
- <title>Beispiel für den Gebrauch von
- <varname>PORTREVISION</varname> und
- <varname>PORTEPOCH</varname></title>
-
- <para>Der <literal>gtkmumble</literal>-Port, Version
- <literal>0.10</literal>, befindet sich in der
- Ports-Sammlung:</para>
-
- <programlisting>PORTNAME= gtkmumble
-PORTVERSION= 0.10</programlisting>
-
- <para><varname>PKGNAME</varname> wird zu
- <literal>gtkmumble-0.10</literal>.</para>
-
- <para>Ein Sicherheitsloch wurde entdeckt, das einen lokalen
- Patch von FreeBSD erforderlich macht.
- <varname>PORTREVISION</varname> wird entsprechend
- erhöht.</para>
-
- <programlisting>PORTNAME= gtkmumble
-PORTVERSION= 0.10
-PORTREVISION= 1</programlisting>
-
- <para><varname>PKGNAME</varname> wird zu
- <literal>gtkmumble-0.10_1</literal></para>
-
- <para>Eine neue Version wird vom Software-Drittanbieter
- veröffentlicht, bezeichnet mit der Version
- <literal>0.2</literal> (es stellt sich heraus, dass der
- Autor beabsichtigte, dass <literal>0.10</literal>
- eigentlich <literal>0.1.0</literal> bedeuten sollte,
- nicht <quote>was kommt nach 0.9</quote>
- &nbsp;&ndash;&nbsp;Hoppla, aber nun ist es zu spät).
- Da die neue Unterversion <literal>2</literal> numerisch
- kleiner ist als die vorherige Version
- <literal>10</literal>, muss <varname>PORTEPOCH</varname>
- erhöht werden, um sicherzustellen, dass das neue
- Paket auch als <quote>neuer</quote> erkannt wird. Da es
- ein neues Release des Drittanbieters ist, wird
- <varname>PORTREVISION</varname> auf 0 zurückgesetzt
- (oder aus dem <filename>Makefile</filename>
- entfernt).</para>
-
- <programlisting>PORTNAME= gtkmumble
-PORTVERSION= 0.2
-PORTEPOCH= 1</programlisting>
-
- <para><varname>PKGNAME</varname> wird zu
- <literal>gtkmumble-0.2,1</literal></para>
-
- <para>Das nächste Release ist 0.3. Da
- <varname>PORTEPOCH</varname> niemals verringert wird,
- sind die Versionsvariablen nun wie folgt:</para>
-
- <programlisting>PORTNAME= gtkmumble
-PORTVERSION= 0.3
-PORTEPOCH= 1</programlisting>
-
- <para><varname>PKGNAME</varname> wird zu
- <literal>gtkmumble-0.3,1</literal></para>
-
- <note>
- <para>Falls <varname>PORTEPOCH</varname> mit diesem
- Upgrade auf <literal>0</literal> zurückgesetzt
- worden wäre, dann würde jemand, der das Paket
- <literal>gtkmumble-0.10_1</literal> installiert
- hätte, das Paket <literal>gtkmumble-0.3</literal>
- nicht als neuer erkennen, da <literal>3</literal> immer
- noch numerisch kleiner ist als <literal>10</literal>.
- Bedenken Sie, dass genau dies der springende Punkt an
- <varname>PORTEPOCH</varname> ist.</para>
- </note>
- </sect3>
- </sect2>
-
- <sect2>
- <title><varname>PKGNAMEPREFIX</varname> und
- <varname>PKGNAMESUFFIX</varname></title>
-
- <para>Zwei optionale Variablen,
- <varname>PKGNAMEPREFIX</varname> und
- <varname>PKGNAMESUFFIX</varname>, werden verknüpft mit
- <varname>PORTNAME</varname> und
- <varname>PORTVERSION</varname>, um
- <varname>PKGNAME</varname> zu bilden als <literal>
- ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}
- </literal>. Stellen Sie bitte unbedingt sicher, dass diese
- Variablen den <link linkend="porting-pkgname">Richtlinien
- für einen guten Paketnamen</link> entsprechen.
- Insbesondere dürfen Sie
- <emphasis>keinesfalls</emphasis> einen Bindestrich
- (<literal>-</literal>) in <varname>PORTVERSION</varname>
- verwenden. Falls das Paket den
- <replaceable>language-</replaceable> oder
- <replaceable>-compiled.specifics</replaceable>-Teil aufweist
- (siehe unten) benutzen Sie <varname>PKGNAMEPREFIX</varname>
- oder <varname>PKGNAMESUFFIX</varname> respektive. Machen Sie
- diese Variablen nicht zum Bestandteil von
- <varname>PORTNAME</varname>!</para>
- </sect2>
-
- <sect2>
- <title><varname>LATEST_LINK</varname></title>
-
- <para>Die Umgebungsvariable <varname>LATEST_LINK</varname> wird
- während der Paketerstellung verwendet, um einen Kurznamen
- festzulegen, der danach von <command>pkg_add -r</command> genutzt
- werden kann. Dadurch wird es beispielsweise möglich, die
- aktuelle Perl-Version durch einen einfachen Aufruf von
- <command>pkg_add -r perl</command> zu installieren (ohne die
- Angabe der korrekten Versionsnummer). Dieser Name muss eindeutig
- sowie <quote>offensichtlich</quote> sein.</para>
-
- <para>In einigen Fällen können mehrere Versionen
- einer Applikation gleichzeitig in der Ports-Sammlung sein.
- Das index build- und das package build-System müssen
- nun in der Lage sein, diese als unterschiedliche Ports zu
- erkennen, obwohl diese Versionen alle die gleichen Variablen
- <varname>PORTNAME</varname>,
- <varname>PKGNAMEPREFIX</varname> und sogar
- <varname>PKGNAMESUFFIX</varname> aufweisen. In solchen
- Fällen sollte die optionale Variable
- <varname>LATEST_LINK</varname> auf einen unterschiedlichen
- Wert für alle Ports gesetzt werden mit Ausnahme des
- <quote>Haupt-Ports</quote>. Beispiele hierfür sind die
- <filename>lang/gcc46</filename> und
- <filename>lang/gcc</filename>-Ports und die
- <filename>www/apache*</filename>-Familie. Wenn Sie die
- Umgebungsvariable <varname>NO_LATEST_LINK</varname> setzen, wird
- kein Link erzeugt, was für alle Versionen (aber nicht für
- die <quote>Hauptversion</quote>) nützlich sein kann. Beachten
- Sie bitte, dass die Frage der Auswahl der
- <quote>wichtigsten</quote> Version
- (<quote>am populärsten</quote>,
- <quote>am besten Unterstützt</quote>,
- <quote>zuletzt gepatcht</quote> usw.) ausserhalb der
- Möglichkeiten dieses Handbuches liegt. Wir sagen Ihnen
- nur, wie Sie die anderen Ports spezifizieren, nachdem Sie
- den <quote>Haupt-Port</quote> erkoren haben.</para>
- </sect2>
-
- <sect2 xml:id="porting-pkgname">
- <title>Namensregeln für Pakete</title>
-
- <para>Im Folgenden finden Sie die Regeln für die
- Benennung Ihrer Pakete. Diese sollen gewährleisten,
- dass das Paketverzeichnis leicht zu durchsuchen ist, da es
- bereits abertausende Pakete gibt und die Nutzer sich mit
- Schauder abwenden, wenn Ihre Augen überstrapaziert
- werden!</para>
-
- <para>Der Paketname soll aussehen wie
- <filename>language_region-name-compiled.specifics-version.numbers</filename>.</para>
-
- <para>Der Paketname ist definiert als
- <literal>
- ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}
- </literal>. Stellen Sie bitte sicher, dass die Variablen
- Ihres Ports diesem Format entsprechen.</para>
-
- <orderedlist>
- <listitem>
- <para>FreeBSD bemüht sich ausserordentlich, die
- Landessprachen seiner Nutzer zu unterstützen.
- Die <replaceable>language-</replaceable>Variable soll
- eine Abkürzung mit 2 Buchstaben sein der Sprachen
- gemäß ISO-639, falls der Port für eine
- bestimmte Sprache spezifisch ist.
- Beispiele hierfür sind <literal>ja</literal>
- für Japanisch, <literal>ru</literal> für
- Russisch, <literal>vi</literal> für Vietnamesisch,
- <literal>zh</literal> für Chinesisch,
- <literal>ko</literal> für Koreanisch und
- <literal>de</literal> für Deutsch.</para>
-
- <para>Sollte der Port spezifisch sein für eine
- gewisse Region innerhalb eines Sprachraumes, dann
- fügen Sie bitte auch den Ländercode mit 2
- Buchstaben hinzu. Beispiele sind
- <literal>en_US</literal> für nordamerikanisches
- Englisch und <literal>fr_CH</literal> für
- schweizerisches Französisch.</para>
-
- <para>Der <replaceable>language-</replaceable>Teil muss
- in der <varname>PKGNAMEPREFIX</varname>-Variable gesetzt
- werden.</para>
- </listitem>
-
- <listitem>
- <para>Der erste Buchstabe des
- <filename>name</filename>-Teils muss kleingeschrieben
- werden (der Rest des Namens kann Großbuchstaben
- enthalten. Daher seien Sie bitte umsichtig, wenn Sie den
- Namen einer Software konvertieren, welche
- Grossbuchstaben enthält).
- Es ist Tradition, <literal>Perl 5</literal>-Module durch
- ein vorstehendes <literal>p5-</literal> und durch
- Umwandlung des doppelten Doppelpunktes in Bindestriche
- zu bezeichnen. So wird z.B. aus dem
- <literal>Data::Dumper</literal>-Modul der
- <literal>p5-Data-Dumper</literal>-Port.</para>
- </listitem>
-
- <listitem>
- <para>Vergewissern Sie sich, dass der Name des Ports und
- seine Versionsnummer klar getrennt sind und in den
- Variablen <varname>PORTNAME</varname> und
- <varname>PORTVERSION</varname> stehen. Der einzige
- Grund, um in <varname>PORTNAME</varname> einen
- Versionsteil aufzunehmen ist der, dass die Software
- wirklich so bezeichnet wird, wie z.B. die Ports
- <filename>textproc/libxml2</filename> oder
- <filename>japanese/kinput2-freewnn</filename>.
- Ansonsten sollte <varname>PORTNAME</varname> keine
- versionsspezifischen Bestandteile aufweisen. Es ist
- vollkommen normal, dass viele Ports den gleichen
- <varname>PORTNAME</varname> aufweisen wie z.B. die
- <filename>www/apache*</filename>-Ports. In diesem Falle
- werden unterschiedliche Versionen (und unterschiedliche
- Indexeinträge) unterschieden durch die Werte von
- <varname>PKGNAMEPREFIX</varname>,
- <varname>PKGNAMESUFFIX</varname> und
- <varname>LATEST_LINK</varname>.</para>
- </listitem>
-
- <listitem>
- <para>Falls der Port mit verschiedenen, <link linkend="makefile-masterdir">fest kodierten
- Vorgaben</link> (üblicherweise Teil des
- Verzeichnisnamens in einer Familie von Ports) gebaut
- werden kann, dann soll der
- <replaceable>-compiled.specifics</replaceable>-Teil die
- einkompilierten Vorgaben anzeigen (der Bindestrich ist
- optional). Beispiele hierfür sind
- Papiergrößen und Font-Einheiten.</para>
-
- <para>Der
- <replaceable>-compiled.specifics</replaceable>-Teil
- muss in der Variablen <varname>PKGNAMESUFFIX</varname>
- gesetzt werden.</para>
- </listitem>
-
- <listitem>
- <para>Die Versionszeichenfolge sollte einen Bindestrich
- (<literal>-</literal>) am Schluss haben und eine von
- Punkten getrennte Liste von Integer-Zahlen und
- kleingeschriebenen Buchstaben sein.
- Es ist nicht zulässig, einen weiteren Bindestrich
- innerhalb des Versionsstrings zu verwenden! Die einzige
- Ausnahme hiervon ist die Zeichenfolge
- <literal>pl</literal> (bedeutet
- <quote>patchlevel</quote>), welche
- <emphasis>nur</emphasis> dann gebraucht werden darf,
- wenn die Applikation über keine
- Haupt&ndash;&nbsp;oder Unterversionsnummern
- verfügt. Wenn die Versionsbezeichnung der Software
- Zeichenketten wie <quote>alpha</quote>,
- <quote>beta</quote>, <quote>rc</quote> oder
- <quote>pre</quote> enthält, dann nehmen Sie bitte
- den ersten Buchstaben daraus und setzen ihn unmittelbar
- hinter einen Punkt.
- Falls die Versionszeichenfolge nach diesem Punkt
- fortgesetzt wird, sollen die Zahlen ohne einen Punkt
- zwischen den einzelnen Buchstaben folgen.</para>
-
- <para>Das Ziel ist es, die Ports anhand der
- Versionszeichenfolge zu sortieren. Stellen Sie bitte
- unbedingt sicher, dass die Bestandteile der
- Versionsnummer immer durch einen Punkt getrennt sind
- und falls Datumsangaben verwendet werden, dass diese im Format
- <literal>0.0.yyyy.mm.dd</literal>
- und nicht <literal>dd.mm.yyyy
- </literal> oder gar dem nicht Y2K-kompatiblen Format
- <literal>
- yy.mm.dd
- </literal> vorliegen. Es ist wichtig, dass die
- Versionsnummer mit <literal>0.0.</literal> beginnt, da die
- Versionsnummer im Falle einer Veröffentlichung auf jeden
- Fall kleiner als
- <literal>yyyy</literal> sein
- wird.</para>
- </listitem>
- </orderedlist>
-
- <para>Hier sind einige reale Beispiele, die aufzeigen,
- wie man den Namen einer Applikation zu einem
- vernünftigen Paketnamen umwandelt:</para>
-
- <informaltable frame="none" pgwide="1">
- <tgroup cols="6">
- <thead>
- <row>
- <entry>Softwarename</entry>
- <entry><varname>PKGNAMEPREFIX</varname></entry>
- <entry><varname>PORTNAME</varname></entry>
- <entry><varname>PKGNAMESUFFIX</varname></entry>
- <entry><varname>PORTVERSION</varname></entry>
- <entry>Grund</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry>mule-2.2.2</entry>
- <entry>(leer)</entry>
- <entry>mule</entry>
- <entry>(leer)</entry>
- <entry>2.2.2</entry>
- <entry>Keine Änderung erforderlich</entry>
- </row>
-
- <row>
- <entry>EmiClock-1.0.2</entry>
- <entry>(leer)</entry>
- <entry>emiclock</entry>
- <entry>(leer)</entry>
- <entry>1.0.2</entry>
- <entry>keine Großbuchstaben für einzelne
- Applikationen</entry>
- </row>
-
- <row>
- <entry>rdist-1.3alpha</entry>
- <entry>(leer)</entry>
- <entry>rdist</entry>
- <entry>(leer)</entry>
- <entry>1.3.a</entry>
- <entry>Keine Zeichenketten wie
- <literal>alpha</literal> erlaubt</entry>
- </row>
-
- <row>
- <entry>es-0.9-beta1</entry>
- <entry>(leer)</entry>
- <entry>es</entry>
- <entry>(leer)</entry>
- <entry>0.9.b1</entry>
- <entry>keine Zeichenketten wie <literal>beta</literal>
- erlaubt</entry>
- </row>
-
- <row>
- <entry>mailman-2.0rc3</entry>
- <entry>(leer)</entry>
- <entry>mailman</entry>
- <entry>(leer)</entry>
- <entry>2.0.r3</entry>
- <entry>keine Zeichenketten wie <literal>rc</literal>
- erlaubt</entry>
- </row>
-
- <row>
- <entry>v3.3beta021.src</entry>
- <entry>(leer)</entry>
- <entry>tiff</entry>
- <entry>(leer)</entry>
- <entry>3.3</entry>
- <entry>Was sollte denn das eigentlich sein?</entry>
- </row>
-
- <row>
- <entry>tvtwm</entry>
- <entry>(leer)</entry>
- <entry>tvtwm</entry>
- <entry>(leer)</entry>
- <entry>pl11</entry>
- <entry>Versionsstring zwingend erforderlich</entry>
- </row>
-
- <row>
- <entry>piewm</entry>
- <entry>(leer)</entry>
- <entry>piewm</entry>
- <entry>(leer)</entry>
- <entry>1.0</entry>
- <entry>Versionsstring zwingend erforderlich</entry>
- </row>
-
- <row>
- <entry>xvgr-2.10pl1</entry>
- <entry>(leer)</entry>
- <entry>xvgr</entry>
- <entry>(leer)</entry>
- <entry>2.10.1</entry>
- <entry><literal>pl</literal> nur erlaubt, wenn keine
- Versionsnummer vorhanden</entry>
- </row>
-
- <row>
- <entry>gawk-2.15.6</entry>
- <entry>ja-</entry>
- <entry>gawk</entry>
- <entry>(leer)</entry>
- <entry>2.15.6</entry>
- <entry>Japanische Sprachversion</entry>
- </row>
-
- <row>
- <entry>psutils-1.13</entry>
- <entry>(leer)</entry>
- <entry>psutils</entry>
- <entry>-letter</entry>
- <entry>1.13</entry>
- <entry>Papergröße beim Paketbau fix
- kodiert</entry>
- </row>
-
- <row>
- <entry>pkfonts</entry>
- <entry>(leer)</entry>
- <entry>pkfonts</entry>
- <entry>300</entry>
- <entry>1.0</entry>
- <entry>Paket für 300 DPI Schriftarten</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>Falls es in der Originalquelle überhaupt keinen
- Anhaltspunkt für irgendeine Versionsbezeichnung gibt
- und es unwahrscheinlich ist, dass der Autor jemals eine neue
- Version veröffentlichen wird, dann setzen Sie bitte die
- Version einfach auf <literal>1.0</literal> (wie im obigen
- Beispiel <literal>piewm</literal>). Sie können auch den
- Autor fragen oder eine Datumszeichenfolge in der Art
- <literal>0.0.yyyy.mm.dd</literal>
- als Version verwenden.</para>
- </sect2>
- </sect1>
-
- <sect1 xml:id="makefile-categories">
- <title>Kategorisierung</title>
-
- <sect2>
- <title><varname>CATEGORIES</varname></title>
-
- <para>Wenn ein Paket erzeugt wird, dann wird es unter
- <filename>/usr/ports/packages/All</filename> abgelegt und
- von einem oder mehreren Unterverzeichnissen werden auf
- <filename>/usr/ports/packages</filename> Links erstellt.
- Die Namen dieser Unterverzeichnisse werden durch die
- Variable <varname>CATEGORIES</varname> festgelegt.
- Dies geschieht, um dem Nutzer zu helfen, eine große
- Zahl von Paketen auf einer FTP-Webseite oder einer CD/DVD
- zu durchsuchen.
- Bitte werfen Sie einen Blick auf die <link linkend="porting-categories">Aktuelle Liste der
- Kategorien</link> und suchen Sie die beste Kategorie
- für Ihren Port aus.</para>
-
- <para>Diese Liste legt auch fest, an welcher Stelle in der
- Ports-Sammlung der Port eingefügt wird. Falls Sie
- mehrere Kategorien angeben wird angenommen, dass die Dateien
- des Ports im Unterverzeichnis mit dem Namen der ersten
- angegebenen Kategorie liegen. Schauen Sie bitte <link linkend="choosing-categories">unten</link> für weitere
- Informationen darüber, wie man die richtige Kategorie
- bestimmt.</para>
- </sect2>
-
- <sect2 xml:id="porting-categories">
- <title>Aktuelle Liste der Kategorien</title>
-
- <para>Hier ist die aktuelle Liste der Kategorien. Die mit
- einem Asterisk (<literal>*</literal>) bezeichneten sind
- <emphasis>virtuelle</emphasis> Kategorien, also solche,
- welche über kein eigenes Unterverzeichnis in der
- Ports-Sammlung verfügen. Sie werden nur als
- Sekundärkategorien benutzt und sind nur für
- Suchzwecke eingerichtet worden.</para>
-
- <note>
- <para>Für nicht-virtuelle Kategorien finden Sie eine
- einzeilige Beschreibung in der Variable
- <varname>COMMENT</varname> im
- <filename>Makefile</filename> des jeweiligen
- Unterverzeichnisses.</para>
- </note>
-
- <informaltable frame="none" pgwide="1">
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Kategorie</entry>
- <entry>Beschreibung</entry>
- <entry>Anmerkung</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><filename>accessibility</filename></entry>
- <entry>Ports für behinderte Menschen.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>afterstep*</filename></entry>
- <entry>Ports für den <link xlink:href="http://www.afterstep.org">AfterStep</link>
- Window Manager.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>arabic</filename></entry>
- <entry>Arabische Sprachunterstützung.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>archivers</filename></entry>
- <entry>Archivierungswerkzeuge.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>astro</filename></entry>
- <entry>Ports für Astronomie.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>audio</filename></entry>
- <entry>Sound-Unterstützung.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>benchmarks</filename></entry>
- <entry>Benchmarking-Werkzeuge.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>biology</filename></entry>
- <entry>Software für Biologie.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>cad</filename></entry>
- <entry>CAD-Werkzeuge.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>chinese</filename></entry>
- <entry>Chinesische Sprachunterstützung.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>comms</filename></entry>
- <entry>Kommunikationsprogramme.</entry>
- <entry>Hauptsächlich Software für serielle
- Schnittstellen.</entry>
- </row>
-
- <row>
- <entry><filename>converters</filename></entry>
- <entry>Zeichensatz-Konverter.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>databases</filename></entry>
- <entry>Datenbanken.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>deskutils</filename></entry>
- <entry>Dinge, die vor der Erfindung des Computers
- auf dem Schreibtisch waren.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>devel</filename></entry>
- <entry>Entwicklungs-Werkzeuge.</entry>
- <entry>Legen Sie keine Bibliotheken hier ab, nur weil
- es Bibliotheken sind, es sei denn, sie gehören
- wirklich nirgendwo anders hin.</entry>
- </row>
-
- <row>
- <entry><filename>dns</filename></entry>
- <entry>DNS-bezogene Software.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>docs*</filename></entry>
- <entry>Meta-Ports für die
- FreeBSD-Dokumentation.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>editors</filename></entry>
- <entry>allgemeine Editoren.</entry>
- <entry>Spezielle Editoren gehören in Ihre
- jeweilige Kategorie, (z.B. gehört ein
- mathematischer Formeleditor in
- <filename>math</filename>).</entry>
- </row>
-
- <row>
- <entry><filename>elisp*</filename></entry>
- <entry>Emacs-lisp-Ports.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>emulators</filename></entry>
- <entry>Emulatoren für andere Betriebssysteme.
- </entry>
- <entry>Terminal-Emulatoren gehören
- <emphasis>nicht</emphasis> hierher; X-basierende
- gehören zu <filename>x11</filename> und
- text-basierende zu <filename>comms</filename> oder
- <filename>misc</filename>, abhängig von deren
- genauer Funktionalität.</entry>
- </row>
-
- <row>
- <entry><filename>finance</filename></entry>
- <entry>Finanz-Software und ähnliches.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>french</filename></entry>
- <entry>Französische Sprachunterstützung.
- </entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>ftp</filename></entry>
- <entry>FTP Client- und Server-Werkzeuge.</entry>
- <entry>Falls Ihr Port sowohl FTP als auch HTTP
- unterstützt, stellen Sie ihn in
- <filename>ftp</filename> mit der Zweitkategorie
- <filename>www</filename>.</entry>
- </row>
-
- <row>
- <entry><filename>games</filename></entry>
- <entry>Spiele.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>geography*</filename></entry>
- <entry>geografische Software.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>german</filename></entry>
- <entry>Deutsche Sprachunterstützung.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>gnome*</filename></entry>
- <entry>Ports für <link xlink:href="http://www.gnome.org">GNOME</link></entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>gnustep*</filename></entry>
- <entry>Software für GNUstep.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>graphics</filename></entry>
- <entry>grafische Werkzeuge.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>hamradio*</filename></entry>
- <entry>Software für Amateurfunk.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>haskell*</filename></entry>
- <entry>Software für die
- Haskell-Programmiersprache.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>hebrew</filename></entry>
- <entry>Hebräische Sprachunterstützung.
- </entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>hungarian</filename></entry>
- <entry>Ungarische Sprachunterstützung.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>ipv6*</filename></entry>
- <entry>IPv6-bezogene Software.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>irc</filename></entry>
- <entry>Internet Relay Chat (IRC)-Werkzeuge.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>japanese</filename></entry>
- <entry>Japanische Sprachunterstützung.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>java</filename></entry>
- <entry>Software für die Java&trade;-Programmiersprache.
- </entry>
- <entry>Die <filename>java</filename>-Kategorie sollte
- nicht die Einzige für einen Port sein mit
- Ausnahme der direkt nur mit der Programmiersprache
- zusammenhängenden Applikationen. Porter sollten
- <filename>java</filename> nicht als Hauptkategorie
- eines Ports wählen.</entry>
- </row>
-
- <row>
- <entry><filename>kde*</filename></entry>
- <entry>Ports für das <link xlink:href="http://www.kde.org">K Desktop Environment
- (KDE)</link>-Projekt.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>kld*</filename></entry>
- <entry>Kernelmodule.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>korean</filename></entry>
- <entry>Koreanische Sprachunterstützung.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>lang</filename></entry>
- <entry>Programmiersprachen.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>linux*</filename></entry>
- <entry>Linux-Applikationen und -Werkzeuge.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>lisp*</filename></entry>
- <entry>Software für die Lisp-Programmiersprache.
- </entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>mail</filename></entry>
- <entry>Mail-Software.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>math</filename></entry>
- <entry>Numerische Berechnungen und andere
- mathematische Werkzeuge.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>mbone*</filename></entry>
- <entry>MBone-Applikationen.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>misc</filename></entry>
- <entry>Verschiedene Werkzeuge.</entry>
- <entry>Hauptsächlich Werkzeuge, die nicht
- anderswo hingehören. Versuchen Sie, falls
- irgend möglich, eine bessere Kategorie
- für Ihren Port zu finden als
- <literal>misc</literal>, weil Ports hier leicht
- untergehen.</entry>
- </row>
-
- <row>
- <entry><filename>multimedia</filename></entry>
- <entry>Multimedia-Software.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>net</filename></entry>
- <entry>Verschiedene Netzwerk-Software.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>net-im</filename></entry>
- <entry>Instant Messaging-Software.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>net-mgmt</filename></entry>
- <entry>Netzwerk-Management-Software.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>net-p2p</filename></entry>
- <entry>Peer to peer-Netzwerkprogramme.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>news</filename></entry>
- <entry>USENET News-Software.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>palm</filename></entry>
- <entry>Software für <link xlink:href="http://www.palm.com/">Palm&trade;</link>.
- </entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>parallel*</filename></entry>
- <entry>Applikationen für paralleles Rechnen.
- </entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>pear*</filename></entry>
- <entry>Ports für das Pear PHP-Framework.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>perl5*</filename></entry>
- <entry>Ports, welche <application>Perl</application>
- Version 5 benötigen.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>plan9*</filename></entry>
- <entry>Verschiedene Programme von <link xlink:href="http://www.cs.bell-labs.com/plan9dist/">Plan9</link>.
- </entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>polish</filename></entry>
- <entry>Polnische Sprachunterstützung.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>ports-mgmt</filename></entry>
- <entry>Hilfsprogramme für das Installieren und
- Entwickeln von FreeBSD Ports und Paketen.</entry>
- </row>
-
- <row>
- <entry><filename>portuguese</filename></entry>
- <entry>Portugiesische Sprachunterstützung.
- </entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>print</filename></entry>
- <entry>Drucker-Software.</entry>
- <entry>Desktop Veröffentlichungs-Werkzeuge (DTP,
- Betrachter etc.) gehören auch hierher.</entry>
- </row>
-
- <row>
- <entry><filename>python*</filename></entry>
- <entry>Software für <link xlink:href="http://www.python.org/">Python</link>.
- </entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>ruby*</filename></entry>
- <entry>Software für <link xlink:href="http://www.ruby-lang.org/">Ruby</link>.
- </entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>rubygems*</filename></entry>
- <entry>Ports für <link xlink:href="http://www.rubygems.org/">RubyGems</link>-Pakete.
- </entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>russian</filename></entry>
- <entry>Russische Sprachunterstützung.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>scheme*</filename></entry>
- <entry>Software für die
- Scheme-Programmiersprache.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>science</filename></entry>
- <entry>Wissenschaftliche Programme, die in keine
- andere Kategorie passen wie z.B.
- <filename>astro</filename>,
- <filename>biology</filename> und
- <filename>math</filename>.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>security</filename></entry>
- <entry>Security-Werkzeuge.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>shells</filename></entry>
- <entry>Shells.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>spanish*</filename></entry>
- <entry>Spanische Sprachunterstützung.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>sysutils</filename></entry>
- <entry>System-Werkzeuge.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>tcl*</filename></entry>
- <entry>Ports, welche Tcl benötigen.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>textproc</filename></entry>
- <entry>Textverarbeitungsprogramme.</entry>
- <entry>Dies beinhaltet nicht DTP-Werkzeuge, diese
- gehören in <filename>print</filename>.
- </entry>
- </row>
-
- <row>
- <entry><filename>tk*</filename></entry>
- <entry>Ports, welche Tk benötigen.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>ukrainian</filename></entry>
- <entry>Ukrainische Sprachunterstützung.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>vietnamese</filename></entry>
- <entry>Vietnamesische Sprachunterstützung.
- </entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>windowmaker*</filename></entry>
- <entry>Ports für den WindowMaker Window-Manager.
- </entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>www</filename></entry>
- <entry>Software für das World Wide Web (WWW).
- </entry>
- <entry>HTML-Werkzeuge gehören auch hierher.
- </entry>
- </row>
-
- <row>
- <entry><filename>x11</filename></entry>
- <entry>X-Window-System und dergleichen.</entry>
- <entry>Diese Kategorie ist nur für Software,
- welche direkt X unterstützt.
- Fügen Sie keine normalen X-Applikationen hinzu.
- Die meisten davon gehören in eine andere
- <filename>x11-*</filename>-Kategorie (siehe unten).
- Falls Ihr Port eine X-Applikation
- <emphasis>ist</emphasis>, dann definieren Sie bitte
- <varname>USE_XLIB</varname> (impliziert durch
- <varname>USE_IMAKE</varname>) und fügen ihn der
- entsprechenden Kategorie hinzu.</entry>
- </row>
-
- <row>
- <entry><filename>x11-clocks</filename></entry>
- <entry>X11-Uhren.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>x11-drivers</filename></entry>
- <entry>X11-Treiber.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>x11-fm</filename></entry>
- <entry>X11-Dateimanager.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>x11-fonts</filename></entry>
- <entry>X11-Schriftarten und Werkzeuge.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>x11-servers</filename></entry>
- <entry>X11-Server.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>x11-themes</filename></entry>
- <entry>X11-Themes.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>x11-toolkits</filename></entry>
- <entry>X11-Toolkits.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>x11-wm</filename></entry>
- <entry>X11-Window-Manager.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>xfce*</filename></entry>
- <entry>Ports in Zusammenhang mit <link xlink:href="http://www.xfce.org/">Xfce</link>.</entry>
- <entry/>
- </row>
-
- <row>
- <entry><filename>zope*</filename></entry>
- <entry><link xlink:href="http://www.zope.org/">Zope</link>-Unterstützung.
- </entry>
- <entry/>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect2>
-
- <sect2 xml:id="choosing-categories">
- <title>Wählen der richtigen Kategorie</title>
-
- <para>Da viele der Kategorien sich überlappen,
- müssen Sie oft festlegen, welches die primäre
- Kategorie Ihres Ports ist. Hierzu gibt es einige Regeln,
- welche diese Auswahl bestimmen. Hier ist die Liste der
- Regeln mit abnehmender Wichtigkeit:</para>
-
- <itemizedlist>
- <listitem>
- <para>Die erste (primäre) Kategorie muss eine
- physische (keine virtuelle, siehe <link linkend="porting-categories">oben</link>) sein. Dies
- ist notwendig damit Pakete erstellt werden können.
- Die nachfolgenden Kategorien können wahllos
- virtuelle oder physische Kategorien sein.</para>
- </listitem>
-
- <listitem>
- <para>Sprachspezifische Kategorien kommen immer zuerst.
- Wenn Ihr Port z.B. Japanische X11-Schriftarten
- installiert, dann muss Ihre
- <varname>CATEGORIES</varname>-Zeile
- <filename>japanese x11-fonts</filename>
- enthalten.</para>
- </listitem>
-
- <listitem>
- <para>Spezifische Kategorien werden vor weniger
- spezifischen Kategorien aufgelistet. Ein HTML-Editor
- sollte z.B. als <filename>www editors</filename>
- aufgeführt werden und nicht umgekehrt.
- Genauso sollten Sie keinen Port unter
- <filename>net</filename> aufführen, wenn er zu
- <filename>irc</filename>, <filename>mail</filename>,
- <filename>news</filename>,
- <filename>security</filename> oder
- <filename>www</filename> passt, da
- <filename>net</filename> in diesen Kategorien
- bereits implizit eingeschlossen ist.</para>
- </listitem>
-
- <listitem>
- <para><filename>x11</filename> wird nur als sekundäre
- Kategorie benutzt, wenn die primäre Kategorie eine
- sprachspezifische ist. Keinesfalls sollten Sie
- <filename>x11</filename> in die Kategorie-Zeile einer
- X-Applikation setzen.</para>
- </listitem>
-
- <listitem>
- <para><application>Emacs</application> modes gehören
- in die gleiche Kategorie wie die vom jeweiligen mode
- unterstützte Applikation und nicht in
- <filename>editors</filename>. Ein
- <application>Emacs</application> mode z.B. für das
- Editieren von Quelltext einer bestimmten
- Programmiersprache gehört zur Kategorie
- <filename>lang</filename>.</para>
- </listitem>
-
- <listitem>
- <para>Für Ports, die vom Benutzer ladbare Kernelmodule
- installieren, sollte die virtuelle Kategorie
- <filename>kld</filename> in die
- <varname>CATEGORIES</varname>-Zeile aufgenommen
- werden.</para>
- </listitem>
-
- <listitem>
- <para><filename>misc</filename> sollte nicht zusammen mit
- irgendeiner anderen nicht-virtuellen Kategorie
- auftreten. Falls Sie <literal>misc</literal> mit einer
- anderen Kategorie in <varname>CATEGORIES</varname> haben
- bedeutet dies, dass Sie gefahrlos
- <literal>misc</literal> streichen und die andere
- Kategorie alleine verwenden können!</para>
- </listitem>
-
- <listitem>
- <para>Falls Ihr Port wirklich in keine andere Kategorie
- passt, verwenden Sie bitte
- <filename>misc</filename>.</para>
- </listitem>
- </itemizedlist>
-
- <para>Falls Sie sich über die Kategorie im Unklaren sind,
- hinterlassen Sie bitte einen Kommentar in Ihrem per
- &man.send-pr.1; eingereichten Bericht, damit wir diese Frage
- vor dem Import diskutieren können. Falls Sie ein
- Committer sind, schicken Sie bitte eine Nachricht an
- &a.ports;, damit die Frage im Vorhinein erörtert werden
- kann. Neue Ports werden zu häufig falsch kategorisiert
- und werden sofort wieder verschoben. Das bläht das
- Master Source Repository unnötig auf.</para>
- </sect2>
-
- <sect2 xml:id="proposing-categories">
- <title>Eine neue Kategorie vorschlagen</title>
-
- <para>Da die Ports-Sammlung über viele Jahre gewachsen
- ist, wurden viele neue Kategorien hinzugefügt. Neue
- Kategorien können <emphasis>virtuell</emphasis> (ohne
- eigenes Unterverzeichnis in der Ports-Sammlung) oder
- <emphasis>physisch</emphasis> sein.
- Der nachfolgende Text führt einige Punkte auf, welche
- bei der Neueinführung einer physischen Kategorie
- beachtet werden müssen, damit Sie dies bei einem
- eventuellen Vorschlag Ihrerseits berücksichtigen
- können.</para>
-
- <para>Unsere bestehende Maxime ist die Vermeidung der
- Neuanlage von physischen Kategorien, solange nicht eine
- große Zahl von Ports zugeordnet werden können
- oder falls ihr nicht Ports zugehören würden,
- welche eine logisch abgegrenzte Gruppe von limitiertem
- öffentlichem Interesse zugehören würden
- (zum Beispiel neue Sprachkategorien) oder vorzugsweise
- beides.</para>
-
- <para>Die Erklärung dafür ist, dass eine Neuanlage
- einer physischen Kategorie einen <link xlink:href="&url.articles.committers-guide;/article.html#PORTS">erheblichen
- Arbeitsaufwand</link> sowohl für die Committer als
- auch diejenigen Nutzer bedeutet, welche die Änderungen
- der Ports-Sammlung nachvollziehen. Zusätzlich
- verursachen Vorschläge für neue Kategorien oftmals
- Kontroversen (natürlich deswegen, weil es keinen klaren
- Konsens darüber gibt, welche Kategorie als <quote>zu
- groß</quote> betrachtet werden muss noch ob sich
- bestimmte Kategorien zur einfachen Suche eignen (und wie
- viele Kategorien überhaupt ideal wären) und so
- weiter).</para>
-
- <para>Hier ist das Prozedere:</para>
-
- <procedure>
- <step>
- <para>Schlagen Sie die neue Kategorie auf &a.ports; vor.
- Sie sollten eine detaillierte Begründung für
- die neue Kategorie beifügen einschließlich
- einer Erklärung, warum Sie meinen, die
- existierenden Kategorien seien nicht ausreichend.
- Zeigen Sie außerdem eine Liste der zu
- verschiebenden Ports (falls neue Ports in
- <application>GNATS</application> auf ihren commit
- warten, die in diese Kategorie passen würden.
- Listen Sie diese bitte auch mit auf). Sind Sie der
- Maintainer oder Einreicher dieser Ports, erwähnen
- Sie es bitte. Es verleiht Ihrem Vorschlag mehr
- Gewicht.</para>
- </step>
-
- <step>
- <para>Nehmen Sie an der Diskussion teil.</para>
- </step>
-
- <step>
- <para>Falls es Unterstützung für Ihren Vorschlag
- geben sollte, reichen Sie bitte einen PR ein, welcher
- die Begründung und die Liste der betroffenen Ports
- enthält, die verschoben werden müssen.
- Idealerweise sollte der PR Patches für Folgendes
- enthalten:</para>
-
- <itemizedlist>
- <listitem>
- <para><filename>Makefile</filename>s für die
- neuen Ports nach dem Repocopy</para>
- </listitem>
-
- <listitem>
- <para><filename>Makefile</filename> für die neue
- Kategorie</para>
- </listitem>
-
- <listitem>
- <para><filename>Makefile</filename> für die alten
- Kategorien der betroffenen Ports</para>
- </listitem>
-
- <listitem>
- <para><filename>Makefile</filename>s für Ports,
- welche von den alten Ports abhängen</para>
- </listitem>
-
- <listitem>
- <para>Für zusätzliches Ansehen sorgen Sie,
- wenn Sie die anderen Dateien, die geändert
- werden müssen, beifügen wie in der
- Direktive des Committer's Guide beschrieben.</para>
- </listitem>
- </itemizedlist>
- </step>
-
- <step>
- <para>Da es die Ports-Infrastruktur beeinflusst und nicht
- nur die Durchführung von Repocopies und
- möglicherweise sogar Regressionstests auf dem Build
- Cluster durchgeführt werden müssen, sollte der
- PR dem Ports Management Team &a.portmgr; zugeordnet
- werden.</para>
- </step>
-
- <step>
- <para>Sobald der PR bestätigt wurde muss ein
- Committer den Rest der Prozedur durchführen, welche
- im <link xlink:href="&url.articles.committers-guide;/#ports">
- Committers Guide</link> beschrieben ist.</para>
- </step>
- </procedure>
-
- <para>Das Vorschlagen einer neuen virtuellen Kategorie ist
- ähnlich, aber wesentlich weniger aufwendig, weil
- keine Ports verschoben werden müssen. In diesem Falle
- müssen nur die Patches an den PR beigefügt werden,
- welche die neue Kategorie zur Variable
- <varname>CATEGORIES</varname> der betroffenen Ports
- hinzufügen.</para>
- </sect2>
-
- <sect2 xml:id="proposing-reorg">
- <title>Vorschlagen einer Neuorganisation aller
- Kategorien</title>
-
- <para>Von Zeit zu Zeit schlägt jemand eine komplette
- Neuorganisation aller Ports, entweder mit einer zweistufigen
- Struktur oder irgendeiner Art von
- Schlüsselwörtern, vor. Bis heute wurde keiner
- dieser Vorschläge umgesetzt, weil sie zwar einfach
- zu machen sind, aber der Aufwand zur Umsetzung und
- Reorganisation der kompletten Ports-Sammlung schlichtweg
- mörderisch wäre. Bitte lesen Sie die Geschichte
- dieser Vorschläge in den Archiven der Mailinglisten
- nach, bevor Sie diese Ideen nochmals unterbreiten. Zudem
- sollten Sie gewappnet sein, dass man Sie auffordert, einen
- arbeitsfähigen Prototyp vorzulegen.</para>
- </sect2>
- </sect1>
-
- <sect1 xml:id="makefile-distfiles">
- <title>Die Distributionsdateien</title>
-
- <para>Der zweite Teil des <filename>Makefile</filename>
- beschreibt die Dateien, welche heruntergeladen werden
- müssen, um den Port zu bauen und wo diese Dateien zu
- finden sind.</para>
-
- <sect2>
- <title><varname>DISTVERSION/DISTNAME</varname></title>
-
- <para><varname>DISTNAME</varname> ist der Name der Applikation
- wie er von den Autoren vergeben wurde.
- <varname>DISTNAME</varname> hat als Vorgabe
- <literal>${PORTNAME}-${PORTVERSION}</literal> also
- überschreiben Sie diese Vorgabe nur, wenn es notwendig
- ist. <varname>DISTNAME</varname> wird nur an zwei Stellen
- genutzt. Erstens: (<varname>DISTFILES</varname>) hat als
- Vorgabe
- <varname>${DISTNAME}</varname><varname>${EXTRACT_SUFX}</varname>.
- Zweitens: Die Distributionsdatei soll in einem
- Unterverzeichnis namens <varname>WRKSRC</varname>
- extrahiert werden, dessen Vorgabe
- <filename>work/${DISTNAME}</filename>
- ist.</para>
-
- <para>Manche Drittanbieter-Namen, welche nicht in das Schema
- <literal>${PORTNAME}-${PORTVERSION}</literal> passen,
- können durch Setzen von <varname>DISTVERSION</varname>
- automatisch behandelt werden. <varname>PORTVERSION</varname>
- und <varname>DISTNAME</varname> werden automatisch
- abgeleitet, können aber natürlich manuell
- überschrieben werden. Die folgende Tabelle führt
- einige Beispiele auf:</para>
-
- <informaltable frame="none" pgwide="1">
- <tgroup cols="2">
- <thead>
- <row>
- <entry><varname>DISTVERSION</varname></entry>
- <entry><varname>PORTVERSION</varname></entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry>0.7.1d</entry>
- <entry>0.7.1.d</entry>
- </row>
-
- <row>
- <entry>10Alpha3</entry>
- <entry>10.a3</entry>
- </row>
-
- <row>
- <entry>3Beta7-pre2</entry>
- <entry>3.b7.p2</entry>
- </row>
-
- <row>
- <entry>8:f_17</entry>
- <entry>8f.17</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <note>
- <para><varname>PKGNAMEPREFIX</varname> und
- <varname>PKGNAMESUFFIX</varname> beeinflussen
- <varname>DISTNAME</varname> nicht. Beachten Sie bitte
- auch, dass Sie <varname>DISTNAME</varname>
- unverändert lassen sollten, falls
- <varname>WRKSRC</varname> denselben Wert hat wie
- <filename>work/${PORTNAME}-${PORTVERSION}</filename>
- und gleichzeitig dass Archiv des originalen Quelltextes
- anders benannt ist als
- <varname>${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}</varname>.
- Es ist einfacher
- <varname>DISTFILES</varname> zu definieren, als
- <varname>DISTNAME</varname> und <varname>WRKSRC</varname>
- (und möglicherweise <varname>EXTRACT_SUFX</varname>)
- zu setzen.</para>
- </note>
- </sect2>
-
- <sect2>
- <title><varname>MASTER_SITES</varname></title>
-
- <para>Dokumentieren Sie das Verzeichnis der FTP/HTTP-URL,
- welche auf den originalen Tarball zeigt, in der Variable
- <varname>MASTER_SITES</varname>. Bitte vergessen Sie
- niemals den Schrägstrich (<filename>/</filename>)
- am Ende!</para>
-
- <para>Die <command>make</command>-Makros werden versuchen,
- diese Festlegung für die Aufbereitung der
- Distributionsdateien mittels <varname>FETCH</varname> zu
- benutzen, falls sie diese nicht schon auf dem System
- finden.</para>
-
- <para>Es wird empfohlen, mehrere Webseiten in dieser Liste
- aufzuführen, vorzugsweise auf verschiedenen
- Kontinenten. Dies ist ein Schutz gegen Probleme bei
- größeren Ausfällen im Internet.
- Wir planen sogar Unterstützung einzubauen,
- die automatisch einen Server in der Nähe zum
- Herunterladen bestimmt. Die Verfügbarkeit von
- vielen Webseiten wird dieses Vorhaben beträchtlich
- erleichtern.</para>
-
- <para>Falls der originale Tarball Teil eines populären
- Archivs ist, wie SourceForge, GNU oder Perl CPAN, können
- Sie möglicherweise auf diese Seiten in einer einfachen
- und kompakten Form mittels
- <varname>MASTER_SITE_<replaceable>*</replaceable></varname>
- (d.h., <varname>MASTER_SITE_SOURCEFORGE</varname>,,
- <varname>MASTER_SITE_GNU</varname> und
- <varname>MASTER_SITE_PERL_CPAN</varname>) referenzieren.
- Setzen Sie einfach <varname>MASTER_SITES</varname> auf eine
- dieser Variablen und <varname>MASTER_SITE_SUBDIR</varname>
- auf den Pfad innerhalb des Archivs. Hier ist ein
- Beispiel:</para>
-
- <programlisting>MASTER_SITES= ${MASTER_SITE_GNU}
-MASTER_SITE_SUBDIR= make</programlisting>
-
- <para>Oder verwenden Sie ein kondensiertes Format:</para>
-
- <programlisting>MASTER_SITES= GNU/make</programlisting>
-
- <para>Diese Variablen werden in
- <filename>/usr/ports/Mk/bsd.sites.mk</filename> definiert.
- Es werden ständig neue Einträge hinzugefügt,
- daher stellen Sie bitte unbedingt sicher, dass Sie die
- neueste Version verwenden, bevor Sie einen Port
- einschicken.</para>
-
- <para>Für beliebte Seiten existieren sogenannte
- <emphasis>magic</emphasis>-Makros, die eine bestimmte
- Verzeichnisstruktur erstellen. Um eines dieser Makros zu
- verwenden, geben Sie dessen Abkürzung an und Ihr System
- wird versuchen, das korrekte Unterverzeichnis automatisch
- zu bestimmen.</para>
-
- <programlisting>MASTER_SITES= SF</programlisting>
-
- <para>Ist das Ergebnis nicht korrekt, können Sie diesen
- Wert auch überschreiben.</para>
-
- <programlisting>MASTER_SITES= SF/stardict/WyabdcRealPeopleTTS/${PORTVERSION}</programlisting>
-
- <table frame="none">
- <title>Beliebte magic <varname>MASTER_SITES</varname>-Makros</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Makro</entry>
-
- <entry>Erwartetes Unterverzeichnis</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>APACHE_JAKARTA</varname></entry>
-
- <entry><varname>/dist/jakarta/${PORTNAME:S,-,,/,}/source</varname></entry>
- </row>
-
- <row>
- <entry><varname>BERLIOS</varname></entry>
-
- <entry><varname>/${PORTNAME:L}</varname></entry>
- </row>
-
- <row>
- <entry><varname>CHEESESHOP</varname></entry>
-
- <entry><varname>/packages/source/source/${DISTNAME:C/(.).*/\1/}/${DISTNAME:C/(.*)-[0-9].*/\1/}</varname></entry>
- </row>
-
- <row>
- <entry><varname>DEBIAN</varname></entry>
-
- <entry><varname>/debian/pool/main/${PORTNAME:C/^((lib)?.).*$/\1/}/${PORTNAME}</varname></entry>
- </row>
-
- <row>
- <entry><varname>GCC</varname></entry>
-
- <entry><varname>/pub/gcc/releases/${DISTNAME}</varname></entry>
- </row>
-
- <row>
- <entry><varname>GNOME</varname></entry>
-
- <entry><varname>/pub/GNOME/sources/${PORTNAME}/${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/}</varname></entry>
- </row>
-
- <row>
- <entry><varname>GNU</varname></entry>
-
- <entry><varname>/gnu/${PORTNAME}</varname></entry>
- </row>
-
- <row>
- <entry><varname>MOZDEV</varname></entry>
-
- <entry><varname>/pub/mozdev/${PORTNAME:L}</varname></entry>
- </row>
-
- <row>
- <entry><varname>PERL_CPAN</varname></entry>
-
- <entry><varname>/pub/CPAN/modules/by-module/${PORTNAME:C/-.*//}</varname></entry>
- </row>
-
- <row>
- <entry><varname>PYTHON</varname></entry>
-
- <entry><varname>/ftp/python/${PYTHON_PORTVERSION:C/rc[0-9]//}</varname></entry>
- </row>
-
- <row>
- <entry><varname>RUBYFORGE</varname></entry>
-
- <entry><varname>/${PORTNAME:L}</varname></entry>
- </row>
-
- <row>
- <entry><varname>SAVANNAH</varname></entry>
-
- <entry><varname>/${PORTNAME:L}</varname></entry>
- </row>
-
- <row>
- <entry><varname>SF</varname></entry>
-
- <entry><varname>/project/${PORTNAME:L}/${PORTNAME:L}/${PORTVERSION}</varname></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect2>
-
- <sect2>
- <title><varname>EXTRACT_SUFX</varname></title>
-
- <para>Falls Sie eine Distributionsdatei haben, die ein
- eigentümliches Suffix nutzt, um die Art der
- Kompression anzuzeigen, dann setzen Sie
- <varname>EXTRACT_SUFX</varname>.</para>
-
- <para>Ist die Distributionsdatei zum Beispiel im Stil von
- <filename>foo.tgz</filename> anstatt des normalen
- <filename>foo.tar.gz</filename> benannt, würden Sie
- schreiben:</para>
-
- <programlisting>DISTNAME= foo
-EXTRACT_SUFX= .tgz</programlisting>
-
- <para>Falls erforderlich, setzen die Variablen
- <varname>USE_BZIP2</varname> und <varname>USE_ZIP</varname>
- automatisch <varname>EXTRACT_SUFX</varname> auf
- <literal>.tar.bz2</literal> oder <literal>.zip</literal>.
- Falls keine der beiden gesetzt ist, dann verwendet
- <varname>EXTRACT_SUFX</varname> die Vorgabe
- <literal>.tar.gz</literal>.</para>
-
- <note>
- <para>Sie müssen niemals beide Variablen
- <varname>EXTRACT_SUFX</varname> und
- <varname>DISTFILES</varname> setzen.</para>
- </note>
- </sect2>
-
- <sect2>
- <title><varname>DISTFILES</varname></title>
-
- <para>Manchmal haben die zu ladenden Dateien keinerlei
- Ähnlichkeit mit dem Namen des Ports. Es könnte
- z.B. <filename>source.tar.gz</filename> oder ähnlich
- heißen. In anderen Fällen könnte der
- Quelltext in mehreren Archiven sein und alle müssen
- heruntergeladen werden.</para>
-
- <para>Falls dies der Fall ist, setzen Sie
- <varname>DISTFILES</varname> als eine durch Leerzeichen
- getrennte Liste aller Dateien, die geladen werden
- müssen.</para>
-
- <programlisting>DISTFILES= source1.tar.gz source2.tar.gz</programlisting>
-
- <para>Wenn nicht ausdrücklich gesetzt, verwendet
- <varname>DISTFILES</varname> als Vorgabe
- <literal>${DISTNAME}${EXTRACT_SUFX}</literal>.</para>
- </sect2>
-
- <sect2>
- <title><varname>EXTRACT_ONLY</varname></title>
-
- <para>Falls nur einige der <varname>DISTFILES</varname>
- extrahiert werden müssen (z.B. eine Datei ist der
- Quelltext und eine andere ist ein unkomprimiertes Dokument),
- dann listen Sie die zu extrahierenden Dateien in
- <varname>EXTRACT_ONLY</varname> auf.</para>
-
- <programlisting>DISTFILES= source.tar.gz manual.html
-EXTRACT_ONLY= source.tar.gz</programlisting>
-
- <para>Falls <emphasis>keine</emphasis> der
- <varname>DISTFILES</varname> unkomprimiert sein sollte,
- dann setzen Sie <varname>EXTRACT_ONLY</varname> auf einen
- leeren String.</para>
-
- <programlisting>EXTRACT_ONLY=</programlisting>
- </sect2>
-
- <sect2 xml:id="porting-patchfiles">
- <title><varname>PATCHFILES</varname></title>
-
- <para>Falls Ihr Port zusätzliche Patches benötigt,
- welche per FTP oder HTTP verfügbar sind, dann setzen
- Sie <varname>PATCHFILES</varname> auf den Namen der Dateien
- und <varname>PATCH_SITES</varname> auf die URL des
- Verzeichnisses, das diese Patches enthält (das Format
- ist das gleiche wie <varname>MASTER_SITES</varname>).</para>
-
- <para>Falls ein Patch wegen einiger zusätzlicher
- Pfadnamen nicht relativ zum Anfang des Quelltextbaumes
- (d.h., <varname>WRKSRC</varname>) liegt, dann setzen Sie
- bitte <varname>PATCH_DIST_STRIP</varname> entsprechend.
- Wenn z.B. alle Pfadnamen in diesem Patch ein
- zusätzliches <literal>foozolix-1.0/</literal> vor ihren
- Dateinamen aufweisen, dann setzen Sie bitte
- <literal>PATCH_DIST_STRIP=-p1</literal>.</para>
-
- <para>Kümmern Sie sich nicht darum, ob die Patches
- komprimiert sind. Sie werden automatisch dekomprimiert,
- wenn die Dateinamen auf <filename>.gz</filename> oder
- <filename>.Z</filename> enden.</para>
-
- <para>Falls der Patch zusammen mit anderen Dateien in einem
- gezippten Tarball verteilt wird (z.B. mit Dokumentation),
- dann können Sie nicht <varname>PATCHFILES</varname>
- verwenden. In diesem Fall fügen Sie den Namen und den
- Ort dieses Tarballs zu <varname>DISTFILES</varname> und
- <varname>MASTER_SITES</varname>. Benutzen Sie dann die
- <varname>EXTRA_PATCHES</varname>-Variable, um auf diese
- Dateien zu zeigen und <filename>bsd.port.mk</filename>
- wird automatisch diese Dateien nutzen. Kopieren Sie
- <emphasis>niemals</emphasis> Patch-Dateien in das
- <varname>PATCHDIR</varname>-Verzeichnis, weil es
- möglicherweise nicht beschreibbar ist.</para>
-
- <note>
- <para>Der Tarball wird zusammen mit dem anderen Quelltext
- extrahiert werden. Eine ausdrückliche Dekomprimierung
- eines mit gzip oder compress erzeugten Tarball ist nicht
- notwendig. Sollten Sie dies dennoch vorgeben, so beachten
- Sie bitte peinlich genau, dass Sie nichts
- überschreiben, was bereits im Verzeichnis vorhanden
- ist. Vergessen Sie auch nicht den kopierten Patch im
- Target von <buildtarget>pre-clean</buildtarget> zu
- entfernen.</para>
- </note>
- </sect2>
-
- <sect2 xml:id="porting-master-sites-n">
- <title>Verschiedene Distributionsdateien oder Patches von
- verschiedenen Seiten und Verzeichnissen
- (<literal>MASTER_SITES:n</literal>)</title>
-
- <para>(Betrachten Sie es als in irgendeiner Form
- <quote>fortgeschrittenes Thema</quote>.
- Neulinge sollten möglicherweise diesen Abschnitt
- beim ersten Lesen überspringen).</para>
-
- <para>Dieser Abschnitt stellt Informationen über
- die Mechanismen zum Herunterladen von Dateien zur
- Verfügung und behandelt die Variablen
- <literal>MASTER_SITES:n</literal> und
- <literal>MASTER_SITES_NN</literal>.
- Wir beziehen uns im weiteren Text auf diese Variablen
- als <literal>MASTER_SITES:n</literal>.</para>
-
- <para>Etwas Hintergrundinformation zu Beginn: OpenBSD
- verfügt über eine sehr elegante Option
- innerhalb der Variablen <varname>DISTFILES</varname> und
- <varname>PATCHFILES</varname>. Sowohl Dateien als auch
- Patches können mit angehängten
- <literal>:n</literal>-Bezeichnern versehen werden wobei
- <literal>n</literal> in beiden Fällen
- <literal>[0-9]</literal> sein kann und eine
- Gruppenzugehörigkeit anzeigt. Ein Beispiel
- hierfür ist:</para>
-
- <programlisting>DISTFILES= alpha:0 beta:1</programlisting>
-
- <para>In OpenBSD wird die Datei <filename>alpha</filename>
- mit der Variable <varname>MASTER_SITES0</varname>
- verknüpft anstatt dem in FreeBSD gebräuchlichen
- <varname>MASTER_SITES</varname> und
- <filename>beta</filename> mit
- <varname>MASTER_SITES1</varname>.</para>
-
- <para>Das ist eine sehr interessante Möglichkeit,
- die endlose Suche nach der richtigen Download-Seite zu
- verkürzen.</para>
-
- <para>Stellen Sie sich zwei Dateien in
- <varname>DISTFILES</varname> und 20 Webseiten in der
- Variable <varname>MASTER_SITES</varname> vor. Alle Seiten
- sind erschreckend langsam, <filename>beta</filename>
- findet sich auf allen Seiten in
- <varname>MASTER_SITES</varname> und
- <filename>alpha</filename> kann nur auf der zwanzigsten
- Seite gefunden werden. Wäre es nicht reine
- Verschwendung, wenn der Maintainer alle Seiten zuvor
- überprüfen müsste? Kein guter
- Start für das wundervolle Wochenende!</para>
-
- <para>Übertragen Sie diesen Umstand auf noch mehr
- <varname>DISTFILES</varname> und mehr
- <varname>MASTER_SITES</varname>. Ganz sicher würde
- unser <quote>distfiles survey master</quote> die
- Erleichterung sehr zu schätzen wissen, die eine
- solche Verringerung der Netzwerkbelastung bringen
- würde.</para>
-
- <para>In den nächsten Abschnitten sehen Sie die
- Implementierung dieser Idee durch FreeBSD. Dabei wurde das
- Konzept von OpenBSD ein wenig verbessert.</para>
-
- <sect3>
- <title>Prinzipielle Information</title>
-
- <para>Dieser Abschnitt informiert Sie, wie Sie schnell
- ein fein granuliertes Herunterladen von vielen Dateien
- und Fehlerbereinigungen von verschiedenen Webseiten und
- Unterverzeichnissen bewerkstelligen. Wir beschreiben
- hier den Fall der vereinfachten Nutzung von
- <literal>MASTER_SITES:n</literal>. Das ist für die
- meisten Szenarien ausreichend. Falls Sie weitere
- Informationen benötigen, sollten Sie den
- nächsten Abschnitt lesen.</para>
-
- <para>Einige Programme bestehen aus mehreren Dateien,
- welche von verschiedenen Webseiten heruntergeladen werden
- müssen. Zum Beispiel besteht
- <application>Ghostscript</application> aus dem Kern des
- Programms und einer großen Zahl von Treiberdateien,
- die vom Drucker des Benutzers abhängen. Einige dieser
- Treiberdateien werden mit der Kernapplikation mitgeliefert
- aber viele müssen von verschiedenen Webseiten
- heruntergeladen werden.</para>
-
- <para>Um das zu unterstützen, muss jeder Eintrag in
- <varname>DISTFILES</varname> mit einem Komma und
- einem <quote>tag name</quote> abgeschlossen werden.
- Jeder in <varname>MASTER_SITES</varname> aufgeführte
- Webseite folgt ein Komma und eine Marke (tag), die
- anzeigt, welche Datei von dieser Webseite heruntergeladen
- werden kann.</para>
-
- <para>Stellen Sie sich bitte eine Applikation vor, deren
- Quelltext in zwei Teile aufgeteilt ist,
- <filename>source1.tar.gz</filename>
- und <filename>source2.tar.gz</filename>, welche von zwei
- verschiedenen Webseiten heruntergeladen werden
- müssen. Das <filename>Makefile</filename> des Port
- würde Zeilen enthalten wie in
- <xref linkend="ports-master-sites-n-example-simple-use-one-file-per-site"/>.</para>
-
- <example xml:id="ports-master-sites-n-example-simple-use-one-file-per-site">
- <title>Vereinfachtes Beispiel für den Gebrauch von
- <literal>MASTER_SITES:n</literal> mit einer Datei pro
- Webseite</title>
-
- <programlisting>MASTER_SITES= ftp://ftp.example1.com/:source1 \
- ftp://ftp.example2.com/:source2
-DISTFILES= source1.tar.gz:source1 \
- source2.tar.gz:source2</programlisting>
- </example>
-
- <para>Verschiedene Dateien können die gleiche Marke
- aufweisen. Ausgehend vom vorherigen Beispiel nehmen wir
- an, dass es noch eine dritte Datei gibt
- (<filename>source3.tar.gz</filename>), welche von
- <systemitem>ftp.example2.com</systemitem> heruntergeladen werden
- soll. Das <filename>Makefile</filename> würde dann
- aussehen wie <xref linkend="ports-master-sites-n-example-simple-use-more-than-one-file-per-site"/>.</para>
-
- <example xml:id="ports-master-sites-n-example-simple-use-more-than-one-file-per-site">
- <title>Vereinfachtes Beispiel für den Gebrauch von
- <literal>MASTER_SITES:n</literal> mit mehr als einer
- Datei pro Webseite</title>
-
- <programlisting>MASTER_SITES= ftp://ftp.example1.com/:source1 \
- ftp://ftp.example2.com/:source2
-DISTFILES= source1.tar.gz:source1 \
- source2.tar.gz:source2 \
- source3.tar.gz:source2</programlisting>
- </example>
- </sect3>
-
- <sect3>
- <title>Ausführliche Information</title>
-
- <para>In Ordnung, das vorherige Beispiel reicht nicht
- für Ihre Bedürfnisse? In diesem Abschnitt
- werden wir im Detail erklären, wie der fein
- granulierte Mechanismus zum Herunterladen
- (<literal>MASTER_SITES:n</literal>) funktioniert
- und wie Sie Ihre Ports modifizieren, um ihn zu
- nutzen.</para>
-
- <orderedlist>
- <listitem>
- <para>Elemente können nachstehend bezeichnet werden
- mit <literal>:n</literal>
- wobei <replaceable>n</replaceable> in diesem Falle
- <literal>[^:,]+</literal> ist. Das heißt
- <replaceable>n</replaceable> könnte theoretisch
- jede alphanumerische Zeichenkette sein, aber wir
- beschränken sie auf
- <literal>[a-zA-Z_][0-9a-zA-Z_]+</literal> für
- diesen Moment.</para>
-
- <para>Zudem ist die Zeichenkette case sensitive; d.h.
- <literal>n</literal> unterscheidet sich von
- <literal>N</literal>.</para>
-
- <para>Allerdings dürfen die folgenden Wörter
- nicht gebraucht werden, da sie spezielle Bedeutungen
- haben: <literal>default</literal>,
- <literal>all</literal> und <literal>ALL</literal>
- (diese Wörter werden intern genutzt in Punkt
- <xref linkend="porting-master-sites-n-what-changes-in-port-targets"/>).
- Ausserdem ist <literal>DEFAULT</literal> ein
- reserviertes Wort (beachten Sie <xref linkend="porting-master-sites-n-DEFAULT-group"/>).</para>
- </listitem>
-
- <listitem>
- <para>Elemente mit angehängtem
- <literal>:n</literal> gehören zur Gruppe
- <literal>n</literal>, <literal>:m</literal>
- gehört zur Gruppe <literal>m</literal>
- und so weiter.</para>
- </listitem>
-
- <listitem xml:id="porting-master-sites-n-DEFAULT-group">
- <para>Elemente ohne Anhängsel sind gruppenlos,
- d.h. sie gehören alle zu der speziellen Gruppe
- <literal>DEFAULT</literal>. Falls sie an irgendeinem
- Element <literal>DEFAULT</literal> hängen, ist
- dies überflüssig, es sei denn Sie wollen,
- dass ein Element sowohl zu <literal>DEFAULT</literal>
- als auch anderen Gruppen gleichzeitig gehört
- (beachten Sie <xref linkend="porting-master-sites-n-comma-operator"/>).</para>
-
- <para>Die folgenden Beispiele sind gleichwertig, aber
- das erste Beispiel ist vorzuziehen:</para>
-
- <programlisting>MASTER_SITES= alpha
-
-MASTER_SITES= alpha:DEFAULT</programlisting>
- </listitem>
-
- <listitem>
- <para>Gruppen sind nicht ausschliessend, d.h. ein
- Element kann mehreren Gruppen gleichzeitig
- angehören und eine Gruppe wiederum kann entweder
- mehrere Elemente oder überhaupt keine aufweisen.
- Wiederholte Elemente sind schlicht nur wiederholte
- Elemente.</para>
- </listitem>
-
- <listitem xml:id="porting-master-sites-n-comma-operator">
- <para>Wenn Sie wollen, dass ein Element gleichzeitig zu
- mehreren Gruppen gehört, dann können Sie
- diese durch ein Komma (<literal>,</literal>)
- trennen.</para>
-
- <para>Anstatt jedes Mal ein anderes Anhängsel zu
- verwenden und Wiederholungen aufzuführen,
- können Sie mehrere Gruppen auf einmal in einem
- einzigen Anhängsel bestimmen. Zum Beispiel
- markiert <literal>:m,n,o</literal> ein Element,
- welches zu den Gruppen <literal>m</literal>,
- <literal>n</literal> und <literal>o</literal>
- gehört.</para>
-
- <para>Alle folgenden Beispiele sind gleichwertig,
- aber das erste Beispiel ist vorzuziehen:</para>
-
- <programlisting>MASTER_SITES= alpha alpha:SOME_SITE
-
-MASTER_SITES= alpha:DEFAULT alpha:SOME_SITE
-
-MASTER_SITES= alpha:SOME_SITE,DEFAULT
-
-MASTER_SITES= alpha:DEFAULT,SOME_SITE</programlisting>
- </listitem>
-
- <listitem>
- <para>Alle Webseiten in einer Gruppe werden
- gemäß <varname>MASTER_SORT_AWK</varname>
- sortiert. Alle Gruppen innerhalb von
- <varname>MASTER_SITES</varname> und
- <varname>PATCH_SITES</varname> werden genauso
- sortiert.</para>
- </listitem>
-
- <listitem xml:id="porting-master-sites-n-group-semantics">
- <para>Gruppensemantik kann benutzt werden in den
- folgenden Variablen: <varname>MASTER_SITES</varname>,
- <varname>PATCH_SITES</varname>,
- <varname>MASTER_SITE_SUBDIR</varname>,
- <varname>PATCH_SITE_SUBDIR</varname>,
- <varname>DISTFILES</varname> und
- <varname>PATCHFILES</varname> entsprechend der
- folgenden Syntax:</para>
-
- <orderedlist>
- <listitem>
- <para>Elemente mit <varname>MASTER_SITES</varname>,
- <varname>PATCH_SITES</varname>,
- <varname>MASTER_SITE_SUBDIR</varname> und
- <varname>PATCH_SITE_SUBDIR</varname> müssen
- mit einem Schrägstrich beendet werden (
- <literal>/</literal>). Falls Elemente zu
- irgendwelchen Gruppen gehören, muss
- <literal>:n</literal>
- direkt nach dem Trenner <literal>/</literal>
- stehen. Der
- <literal>MASTER_SITES:n</literal>-Mechanismus
- verlässt sich auf das Vorhandensein des
- Trennzeichens <literal>/</literal>, um verwirrende
- Elemente zu vermeiden in denen
- <literal>:n</literal> ein zulässiger
- Bestandteil des Elementes ist und das Auftreten
- von <literal>:n</literal> die Gruppe
- <literal>n</literal> anzeigt. Aus
- Kompatibilitätsgründen (da der
- <literal>/</literal>-Trenner sowohl in
- <varname>MASTER_SITE_SUBDIR</varname> als auch
- <varname>PATCH_SITE_SUBDIR</varname>-Elementen
- nicht erforderlich ist) wird, falls das auf das
- Anhängsel folgende nächste Zeichen kein
- <literal>/</literal> ist, auch
- <literal>:n</literal> als gültiger Teil des
- Elementes behandelt anstatt als Gruppenzusatz,
- selbst wenn ein Element ein angehängtes
- <literal>:n</literal> aufweist. Beachten Sie
- sowohl <xref linkend="ports-master-sites-n-example-detailed-use-master-site-subdir"/>
- als auch <xref linkend="ports-master-sites-n-example-detailed-use-complete-example-master-sites"/>.</para>
-
- <example xml:id="ports-master-sites-n-example-detailed-use-master-site-subdir">
- <title>Ausführliches Beispiel von
- <literal>MASTER_SITES:n</literal> in
- <varname>MASTER_SITE_SUBDIR</varname></title>
-
- <programlisting>MASTER_SITE_SUBDIR= old:n new/:NEW</programlisting>
-
- <itemizedlist>
- <listitem>
- <para>Verzeichnisse innerhalb der Gruppe
- <literal>DEFAULT</literal> -&gt;
- old:n</para>
- </listitem>
-
- <listitem>
- <para>Verzeichnisse innerhalb der Gruppe
- <literal>NEW</literal> -&gt; new</para>
- </listitem>
- </itemizedlist>
- </example>
-
- <example xml:id="ports-master-sites-n-example-detailed-use-complete-example-master-sites">
- <title>Ausführliches Beispiel von
- <literal>MASTER_SITES:n</literal> mit
- Komma-Operator, mehreren Dateien, mehreren
- Webseiten und mehreren
- Unterverzeichnissen</title>
-
- <programlisting>MASTER_SITES= http://site1/%SUBDIR%/ http://site2/:DEFAULT \
- http://site3/:group3 http://site4/:group4 \
- http://site5/:group5 http://site6/:group6 \
- http://site7/:DEFAULT,group6 \
- http://site8/%SUBDIR%/:group6,group7 \
- http://site9/:group8
-DISTFILES= file1 file2:DEFAULT file3:group3 \
- file4:group4,group5,group6 file5:grouping \
- file6:group7
-MASTER_SITE_SUBDIR= directory-trial:1 directory-n/:groupn \
- directory-one/:group6,DEFAULT \
- directory</programlisting>
-
- <para>Das vorstehende Beispiel führt zu
- einem fein granulierten Herunterladen.
- Die Webseiten werden in der exakten Reihenfolge
- ihrer Nutzung aufgelistet.</para>
-
- <itemizedlist>
- <listitem>
- <para><filename>file1</filename> wird
- heruntergeladen von</para>
-
- <itemizedlist>
- <listitem>
- <para><varname>MASTER_SITE_OVERRIDE</varname></para>
- </listitem>
-
- <listitem>
- <para>http://site1/directory-trial:1/</para>
- </listitem>
-
- <listitem>
- <para>http://site1/directory-one/</para>
- </listitem>
-
- <listitem>
- <para>http://site1/directory/</para>
- </listitem>
-
- <listitem>
- <para>http://site2/</para>
- </listitem>
-
- <listitem>
- <para>http://site7/</para>
- </listitem>
-
- <listitem>
- <para><varname>MASTER_SITE_BACKUP</varname></para>
- </listitem>
- </itemizedlist>
- </listitem>
-
- <listitem>
- <para><filename>file2</filename> wird genauso
- heruntergeladen wie
- <filename>file1</filename>, da sie zur
- gleichen Gruppe gehören</para>
-
- <itemizedlist>
- <listitem>
- <para><varname>MASTER_SITE_OVERRIDE</varname></para>
- </listitem>
-
- <listitem>
- <para>http://site1/directory-trial:1/</para>
- </listitem>
-
- <listitem>
- <para>http://site1/directory-one/</para>
- </listitem>
-
- <listitem>
- <para>http://site1/directory/</para>
- </listitem>
-
- <listitem>
- <para>http://site2/</para>
- </listitem>
-
- <listitem>
- <para>http://site7/</para>
- </listitem>
-
- <listitem>
- <para><varname>MASTER_SITE_BACKUP</varname></para>
- </listitem>
- </itemizedlist>
- </listitem>
-
- <listitem>
- <para><filename>file3</filename> wird
- heruntergeladen von</para>
-
- <itemizedlist>
- <listitem>
- <para><varname>MASTER_SITE_OVERRIDE</varname></para>
- </listitem>
-
- <listitem>
- <para>http://site3/</para>
- </listitem>
-
- <listitem>
- <para><varname>MASTER_SITE_BACKUP</varname></para>
- </listitem>
- </itemizedlist>
- </listitem>
-
- <listitem>
- <para><filename>file4</filename> wird
- heruntergeladen von</para>
-
- <itemizedlist>
- <listitem>
- <para><varname>MASTER_SITE_OVERRIDE</varname></para>
- </listitem>
-
- <listitem>
- <para>http://site4/</para>
- </listitem>
-
- <listitem>
- <para>http://site5/</para>
- </listitem>
-
- <listitem>
- <para>http://site6/</para>
- </listitem>
-
- <listitem>
- <para>http://site7/</para>
- </listitem>
-
- <listitem>
- <para>http://site8/directory-one/</para>
- </listitem>
-
- <listitem>
- <para><varname>MASTER_SITE_BACKUP</varname></para>
- </listitem>
- </itemizedlist>
- </listitem>
-
- <listitem>
- <para><filename>file5</filename> wird
- heruntergeladen von</para>
-
- <itemizedlist>
- <listitem>
- <para><varname>MASTER_SITE_OVERRIDE</varname></para>
- </listitem>
-
- <listitem>
- <para><varname>MASTER_SITE_BACKUP</varname></para>
- </listitem>
- </itemizedlist>
- </listitem>
-
- <listitem>
- <para><filename>file6</filename> wird
- heruntergeladen von</para>
-
- <itemizedlist>
- <listitem>
- <para><varname>MASTER_SITE_OVERRIDE</varname></para>
- </listitem>
-
- <listitem>
- <para>http://site8/</para>
- </listitem>
-
- <listitem>
- <para><varname>MASTER_SITE_BACKUP</varname></para>
- </listitem>
- </itemizedlist>
- </listitem>
- </itemizedlist>
- </example>
- </listitem>
- </orderedlist>
- </listitem>
-
- <listitem>
- <para>Wie gruppiere ich eine der speziellen Variablen
- aus <filename>bsd.sites.mk</filename>, d.h.
- <varname>MASTER_SITE_SOURCEFORGE</varname>?</para>
-
- <para>Lesen Sie <xref linkend="ports-master-sites-n-example-detailed-use-master-site-sourceforge"/>.</para>
-
- <example xml:id="ports-master-sites-n-example-detailed-use-master-site-sourceforge">
- <title>Ausführliches Beispiel von
- <literal>MASTER_SITES:n</literal> mit
- <varname>MASTER_SITE_SOURCEFORGE</varname></title>
-
- <programlisting>MASTER_SITES= http://site1/ ${MASTER_SITE_SOURCEFORGE:S/$/:sourceforge,TEST/}
-DISTFILES= something.tar.gz:sourceforge</programlisting>
- </example>
-
- <para><filename>something.tar.gz</filename> wird von
- allen Webseiten innerhalb von
- <varname>MASTER_SITE_SOURCEFORGE</varname>
- heruntergeladen.</para>
- </listitem>
-
- <listitem>
- <para>Wie nutze ich dies mit
- <varname>PATCH*</varname>-Variablen.</para>
-
- <para>In allen Beispielen wurden
- <varname>MASTER*</varname>-Variablen genutzt,
- aber sie funktionieren exakt genauso mit
- <varname>PATCH*</varname>-Variablen, wie Sie an
- <xref linkend="ports-master-sites-n-example-detailed-use-patch-sites"/>.
- sehen können.</para>
-
- <example xml:id="ports-master-sites-n-example-detailed-use-patch-sites">
- <title>Vereinfachte Nutzung von
- <literal>MASTER_SITES:n</literal> mit
- <varname>PATCH_SITES</varname>.</title>
-
- <programlisting>PATCH_SITES= http://site1/ http://site2/:test
-PATCHFILES= patch1:test</programlisting>
- </example>
- </listitem>
- </orderedlist>
- </sect3>
-
- <sect3>
- <title>Was ändert sich für die Ports?
- Was ändert sich nicht?</title>
-
- <orderedlist numeration="lowerroman">
- <listitem>
- <para>Alle bestehenden Ports bleiben gleich. Der Code
- für <literal>MASTER_SITES:n</literal> wird nur
- aktiviert, falls es Elemente mit angehängtem
- <literal>:n</literal>
- entsprechend den zuvor erwähnten Syntax-Regeln
- wie in <xref linkend="porting-master-sites-n-group-semantics"/>
- gezeigt gibt.</para>
- </listitem>
-
- <listitem xml:id="porting-master-sites-n-what-changes-in-port-targets">
- <para>Das Target des Port bleibt gleich:
- <buildtarget>checksum</buildtarget>,
- <buildtarget>makesum</buildtarget>,
- <buildtarget>patch</buildtarget>,
- <buildtarget>configure</buildtarget>,
- <buildtarget>build</buildtarget> etc.
- Mit der offensichtlichen Ausnahme von
- <buildtarget>do-fetch</buildtarget>,
- <buildtarget>fetch-list</buildtarget>,
- <buildtarget>master-sites</buildtarget>
- und <buildtarget>patch-sites</buildtarget>.</para>
-
- <itemizedlist>
- <listitem>
- <para><buildtarget>do-fetch</buildtarget>: nutzt die
- neue Gruppierung <varname>DISTFILES</varname> und
- <varname>PATCHFILES</varname> mit ihren darauf
- zutreffenden Gruppenelementen in
- <varname>MASTER_SITES</varname> und
- <varname>PATCH_SITES</varname> welche zutreffende
- Gruppenelemente sowohl in
- <varname>MASTER_SITE_SUBDIR</varname> als auch
- <varname>PATCH_SITE_SUBDIR</varname> aufweisen.
- Sehen Sie hierzu <xref linkend="ports-master-sites-n-example-detailed-use-complete-example-master-sites"/>.</para>
- </listitem>
-
- <listitem>
- <para><buildtarget>fetch-list</buildtarget>: arbeitet
- wie das alte <buildtarget>fetch-list</buildtarget>
- mit der Ausnahme, dass es nur wie
- <buildtarget>do-fetch</buildtarget>
- gruppiert.</para>
- </listitem>
-
- <listitem>
- <para><buildtarget>master-sites</buildtarget>
- und <buildtarget>patch-sites</buildtarget>:
- (inkompatibel zu älteren Versionen) geben
- nur die Elemente der Gruppe
- <literal>DEFAULT</literal> zurück.
- Beziehungsweise sie führen genau genommen
- die Targets von
- <buildtarget>master-sites-default</buildtarget> und
- <buildtarget>patch-sites-default</buildtarget>
- aus.</para>
-
- <para>Weiterhin ist der Gebrauch des Target entweder
- von <buildtarget>master-sites-all</buildtarget> oder
- <buildtarget>patch-sites-all</buildtarget> der
- direkten Überprüfung von
- <buildtarget>MASTER_SITES</buildtarget> oder
- <buildtarget>PATCH_SITES</buildtarget> vorzuziehen.
- Zudem ist nicht garantiert, dass das direkte
- Überprüfen in zukünftigen Versionen
- funktionieren wird. Sehen Sie <xref linkend="porting-master-sites-n-new-port-targets-master-sites-all"/>
- für weitere Informationen zu diesen neuen
- Port-Targets.</para>
- </listitem>
- </itemizedlist>
- </listitem>
-
- <listitem>
- <para>Neue Port-Targets</para>
-
- <orderedlist>
- <listitem>
- <para>Es gibt
- <buildtarget>master-sites-<replaceable>n</replaceable></buildtarget>
- und
- <buildtarget>patch-sites-<replaceable>n</replaceable></buildtarget>-Targets,
- welche die Elemente der jeweiligen Gruppe
- <replaceable>n</replaceable> innerhalb von
- <varname>MASTER_SITES</varname> und
- <varname>PATCH_SITES</varname> auflisten.
- Beispielweise werden sowohl
- <buildtarget>master-sites-DEFAULT</buildtarget> als
- auch <buildtarget>patch-sites-DEFAULT</buildtarget>
- die Elemente der Gruppe
- <literal>DEFAULT</literal>,
- <buildtarget>master-sites-test</buildtarget> und
- <buildtarget>patch-sites-test</buildtarget> der
- Gruppe <literal>test</literal> usw.
- zurückgeben.</para>
- </listitem>
-
- <listitem xml:id="porting-master-sites-n-new-port-targets-master-sites-all">
- <para>Es gibt das neue Target
- <buildtarget>master-sites-all</buildtarget> und
- <buildtarget>patch-sites-all</buildtarget>,
- welche die Arbeit der alten Targets
- <buildtarget>master-sites</buildtarget> und
- <buildtarget>patch-sites</buildtarget>
- übernehmen. Sie geben die Elemente aller
- Gruppen zurück,als würden sie zur
- gleichen Gruppe gehören - mit dem Vorbehalt,
- dass sie so viele
- <varname>MASTER_SITE_BACKUP</varname> und
- <varname>MASTER_SITE_OVERRIDE</varname> auflisten
- wie Gruppen mittels
- <varname>DISTFILES</varname> oder
- <varname>PATCHFILES</varname> definiert sind.
- Das gleiche gilt entsprechend für
- <buildtarget>master-sites-all</buildtarget> und
- <buildtarget>patch-sites-all</buildtarget>.</para>
- </listitem>
- </orderedlist>
- </listitem>
- </orderedlist>
- </sect3>
- </sect2>
-
- <sect2>
- <title><varname>DIST_SUBDIR</varname></title>
-
- <para>Verhindern Sie, dass Ihr Port das Verzeichnis
- <filename>/usr/ports/distfiles</filename> in Unordnung
- bringt. Falls Ihr Port eine ganze Reihe von Dateien
- herunterladen muss oder eine Datei enthält,
- die einen Namen hat, der möglicherweise mit
- anderen Ports in Konflikt stehen könnte
- (d.h.<filename>Makefile</filename>), dann setzen Sie die
- Variable <varname>DIST_SUBDIR</varname> auf den Namen des
- Ports (<literal>${PORTNAME}</literal> oder
- <literal>${PKGNAMEPREFIX}${PORTNAME}</literal>
- sollte hervorragend funktionieren). Dies wird
- <varname>DISTDIR</varname> von der Vorgabe
- <filename>/usr/ports/distfiles</filename> auf
- <filename>/usr/ports/distfiles/DIST_SUBDIR
- </filename> ändern und stellt tatsächlich alle
- für Ihren Port benötigten Dateien in dieses
- Unterverzeichnis.</para>
-
- <para>Es wird zusätzlich nach dem Unterverzeichnis mit
- dem gleichen Namen auf der Sicherung der Hauptseite auf
- <filename>ftp.FreeBSD.org</filename> suchen (das
- ausdrückliche Setzen von <varname>DISTDIR</varname>
- in Ihrem <varname>Makefile</varname> wird dies nicht
- gewährleisten, also nutzen Sie bitte
- <varname>DIST_SUBDIR</varname>).</para>
-
- <note>
- <para>Dies hat keine Auswirkungen auf die Variable
- <varname>MASTER_SITES</varname>, die Sie in Ihrem
- <filename>Makefile</filename> definieren.</para>
- </note>
- </sect2>
-
- <sect2>
- <title><varname>ALWAYS_KEEP_DISTFILES</varname></title>
-
- <para>Falls Ihr Port binäre Distfiles benutzt und eine
- Lizenz aufweist, die verlangt, dass das der Quelltext in
- Form binärer Pakete verteilt werden muss, z.B. GPL,
- dann wird <varname>ALWAYS_KEEP_DISTFILES</varname> den
- &os; Build Cluster anweisen eine Kopie der Dateien in
- <varname>DISTFILES</varname> vorzuhalten. Nutzer dieser
- Ports benötigen generell diese Dateien nicht, daher
- ist es ein gutes Konzept, nur dann die Distfiles zu
- <varname>DISTFILES</varname> hinzuzufügen, wenn
- <varname>PACKAGE_BUILDING</varname> definiert ist.</para>
-
- <example xml:id="ports-master-sites-n-example-always-keep-distfiles">
- <title>Nutzung von
- <varname>ALWAYS_KEEP_DISTFILES</varname>.</title>
-
- <programlisting>.if defined(PACKAGE_BUILDING)
-DISTFILES+= <replaceable>foo.tar.gz</replaceable>
-ALWAYS_KEEP_DISTFILES= yes
-.endif</programlisting>
- </example>
-
- <para>Wenn Sie zusätzliche Dateien zu
- <varname>DISTFILES</varname> hinzufügen,
- dann beachten Sie bitte, dass Sie diese auch in
- <filename>distinfo</filename> aufführen.
- Zudem werden die zusätzlichen Dateien normalerweise
- ebenso in <varname>WRKDIR</varname> extrahiert,
- was für einige Ports zu unbeabsichtigten
- Seiteneffekten führen mag und spezielle
- Behandlung erfordert.</para>
- </sect2>
- </sect1>
-
- <sect1 xml:id="makefile-maintainer">
- <title><varname>MAINTAINER</varname></title>
-
- <para>Fügen Sie hier Ihre E-Mailadresse ein. Bitte.
- <!-- smiley --><emphasis>:-)</emphasis></para>
-
- <para>Beachten Sie bitte, dass nur eine einzelne E-Mailadresse
- ohne Kommentar in der Variable <varname>MAINTAINER</varname>
- zulässig ist. Das Format sollte
- <literal>user@hostname.domain</literal> sein.
- Bitte fügen Sie keinen beschreibenden Text wie z.B. Ihren
- wirklichen Namen ein, dies verwirrt lediglich
- <filename>bsd.port.mk</filename>.</para>
-
- <para>Der Maintainer ist dafür verantwortlich, dass der
- Port aktuell gehalten wird und er sorgt dafür, dass der
- Port korrekt arbeitet. Für eine detaillierte Beschreibung
- der Verantwortlichkeiten eines Maintainers beachten Sie bitte
- den Abschnitt <link xlink:href="&url.articles.contributing-ports;/maintain-port.html">
- Die Herausforderung für einen
- Port-Maintainer</link>.</para>
-
- <para>Änderungen am Port werden dem Maintainer zur
- Begutachtung und Zustimmung vorgelegt, bevor sie committed
- werden. Falls der Maintainer einem Aktualisierungs-Wunsch
- nicht binnen 2 Wochen (ausgenommen wichtige öffentliche
- Feiertage) zustimmt, dann wird dies als Maintainer-Timeout
- betrachtet und eine Aktualisierung kann ohne
- ausdrückliche Zustimmung des Maintainers erfolgen.
- Falls der Maintainer nicht binnen 3 Monaten zustimmt, wird er
- als abwesend ohne Grund betrachtet und kann als Maintainer
- des fraglichen Ports durch eine andere Person ersetzt werden.
- Ausgenommen davon ist alles, was durch das &a.portmgr; oder
- das &a.security-officer; betreut wird. Es dürfen niemals
- committs ohne vorherige Zustimmung an solchen Ports
- vorgenommen werden!</para>
-
- <para>Wir behalten uns das Recht vor, die Einreichungen eines
- Maintainers ohne ausdrückliche Zustimmung zu ändern,
- falls wir der Auffassung sind, dass dadurch die Einhaltung von
- Richtlinien und stilistischen Vorgaben für die
- Ports-Sammlung besser erfüllt wird. Zudem können
- größere Änderungen an der Infrastruktur der
- Ports zu Änderungen an einem bestimmten Port ohne
- Zustimmung des Maintainers führen.
- Diese Änderungen beeinflussen niemals die
- Funktionalität eines Ports.</para>
-
- <para>Das &a.portmgr; behält sich das Recht vor, die
- Maintainerschaft jedem aus irgendeinem Grund zu entziehen oder
- ausser Kraft zu setzen, und das Security Officer Team
- &a.security-officer; behält sich das Recht vor, jede
- Maintainerschaft aus Sicherheitsgründen aufzuheben oder
- ausser Kraft zu setzen.</para>
- </sect1>
-
- <sect1 xml:id="makefile-comment">
- <title><varname>COMMENT</varname></title>
-
- <para>Dies ist eine einzeilige Beschreibung des Ports.
- <emphasis>Bitte</emphasis> fügen Sie nicht den Paketnamen
- (oder die Version der Software) in den Kommentar ein.
- Der Kommentar soll mit einem Großbuchstaben beginnen
- und ohne Punkt enden. Hier ist ein Beispiel:</para>
-
- <programlisting>COMMENT= A cat chasing a mouse all over the screen</programlisting>
-
- <para>Die COMMENT-Variable soll unmittelbar nach der
- MAINTAINER-Variable im <filename>Makefile</filename>
- stehen.</para>
-
- <para>Bitte versuchen Sie die COMMENT-Zeile auf weniger als 70
- Zeichen zu begrenzen, da &man.pkg.info.1; diese zur Anzeige
- einer kurzen, einzeiligen Zusammenfassung des Ports
- verwendet.</para>
- </sect1>
-
- <sect1 xml:id="makefile-depend">
- <title>Abhängigkeiten (dependencies)</title>
-
- <para>Viele Ports hängen von anderen Ports ab.
- Dies ist ein sehr praktisches und nettes Feature der meisten
- Unix-ähnlichen Betriebssysteme, &os; nicht
- ausgeschlossen. Es erlaubt, dass häufig vorkommende
- Abhängigkeiten nicht mit jedem Port oder Paket zusammen
- ausgeliefert werden müssen, da viele Ports diese
- gemeinsam benutzen.
- Es gibt sieben Variablen, die benutzt werden können,
- um sicherzustellen, dass alle benötigten Teile auf dem
- Rechner des Nutzers sind. Zusätzlich gibt es einige
- vordefinierte Variablen für Abhängigkeiten in
- häufigen Fällen und einige, welche das Verhalten
- der Abhängigkeiten bestimmen.</para>
-
- <sect2>
- <title><varname>LIB_DEPENDS</varname></title>
-
- <para>Diese Variable spezifiziert die Shared-Libraries,
- von denen der Port abhängt. Es ist eine Liste von
- <replaceable>lib</replaceable>:<replaceable>dir</replaceable><optional>:target</optional>-Tupeln
- wobei <replaceable>lib</replaceable> den Name der gemeinsam
- genutzten Bibliothek, <replaceable>dir</replaceable> das
- Verzeichnis, in welchem sie zu finden ist, falls nicht
- verfügbar, und <replaceable>target</replaceable> das
- Target in diesem Verzeichnis angeben. Zum Beispiel wird
-
- <programlisting>LIB_DEPENDS= jpeg.9:${PORTSDIR}/graphics/jpeg</programlisting>
-
- auf eine jpeg-Bibliothek mit der Hauptversionsnummer 9
- prüfen, in das
- <filename>graphics/jpeg</filename>-Unterverzeichnis Ihrer
- Ports-Sammlung wechseln, es bauen und installieren, falls
- es nicht gefunden wird.
- Der <replaceable>target</replaceable>-Teil kann weggelassen
- werden, falls er identisch mit
- <varname>DEPENDS_TARGET</varname> ist (Vorgabe hierfür
- ist <literal>install</literal>).</para>
-
- <note>
- <para>Der <replaceable>lib</replaceable>-Teil ist ein
- regulärer Ausdruck, welcher die Ausgabe von
- <command>ldconfig -r</command> ausgewertet. Werte wie
- <literal>intl.[5-7]</literal> und <literal>intl</literal>
- sind zulässig. Das erste Muster,
- <literal>intl.[5-7]</literal>, stimmt überein mit:
- <literal>intl.5</literal>, <literal>intl.6</literal> oder
- <literal>intl.7</literal>. Das zweite Muster,
- <literal>intl</literal>, stimmt überein mit jeder
- Version der <literal>intl</literal>-Bibliothek.</para>
- </note>
-
- <para>Die Abhängigkeit wird zwei Mal überprüft,
- einmal innerhalb des <buildtarget>extract</buildtarget>-Target
- und dann innerhalb des
- <buildtarget>install</buildtarget>-Target.
- Zudem wird der Name der Abhängigkeit in das Paket
- eingefügt, damit &man.pkg.add.1; es automatisch
- installiert, falls es nicht auf dem Rechner des Nutzers
- ist.</para>
- </sect2>
-
- <sect2>
- <title><varname>RUN_DEPENDS</varname></title>
-
- <para>Diese Variable legt Binärdateien oder Dateien,
- von denen der Port abhängt, für die Laufzeit fest.
- Es ist eine Liste von
- <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional>:target</optional>-Tupeln,
- wobei <replaceable>path</replaceable> der Name der
- Binärdatei oder Datei, <replaceable>dir</replaceable>
- das Verzeichnis, in welchem sie gefunden werden kann, falls
- nicht vorhanden, und <replaceable>target</replaceable> das
- Target in diesem Verzeichnis angeben.
- Falls <replaceable>path</replaceable> mit einem Slash
- (<literal>/</literal>) beginnt, wird es als Datei behandelt
- und deren Vorhandensein wird mit <command>test -e</command>;
- überprüft. Andernfalls wird angenommen, dass es
- eine Binärdatei ist und <command>which -s</command>
- wird benutzt, um zu überprüfen, ob das Programm im
- Pfad vorhanden ist.</para>
-
- <para>Zum Beispiel wird</para>
-
- <programlisting>RUN_DEPENDS= ${LOCALBASE}/etc/innd:${PORTSDIR}/news/inn \
- xmlcatmgr:${PORTSDIR}/textproc/xmlcatmgr</programlisting>
-
- <para>überprüfen, ob die Datei oder das Verzeichnis
- <filename>/usr/local/etc/innd</filename> existiert und es
- erstellen und installieren aus dem
- <filename>news/inn</filename>-Unterverzeichnis der
- Ports-Sammlung, falls es nicht gefunden wird. Es wird zudem
- überprüft, ob die Binärdatei namens
- <command>xmlcatmgr</command> im Suchpfad vorhanden ist und
- danach zum Unterverzeichnis
- <filename>textproc/xmlcatmgr</filename> in Ihrer
- Ports-Sammlung wechseln, es bauen und installieren,
- falls es nicht gefunden wird.</para>
-
- <note>
- <para>In diesem Fall ist <command>innd</command> eine
- Binärdatei. Falls sich eine Binärdatei an
- einem ungewöhnlichen Platz befindet, der nicht
- im Suchpfad ist, dann sollten Sie die volle Pfadangabe
- verwenden.</para>
- </note>
-
- <note>
- <para>Der offizielle Suchpfad <envar>PATH</envar>,
- welcher im Ports Cluster benutzt wird, ist</para>
-
- <programlisting>/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin</programlisting>
- </note>
-
- <para>Die Abhängigkeit wird innerhalb des
- <buildtarget>install</buildtarget>-Target
- überprüft. Zudem wird der Name der
- Abhängigkeit in das Paket übernommen,
- damit &man.pkg.add.1; es automatisch installieren wird,
- falls es auf dem System des Nutzers nicht vorhanden ist.
- Der <replaceable>target</replaceable>-Teil kann
- weggelassen werden, wenn er der gleiche ist wie in der
- Variable <varname>DEPENDS_TARGET</varname>.</para>
-
- <para>Es kommt recht häufig vor, dass
- <varname>RUN_DEPENDS</varname> genau dasselbe enthält
- wie <varname>BUILD_DEPENDS</varname>, gerade dann, wenn die
- portierte Software in einer Skriptsprache geschrieben ist
- oder dieselbe Umgebung, die zum Bau verwendet wurde, zur
- Laufzeit gebraucht wird. In diesem Fall ist es sowohl
- verlockend als auch intuitiv, den Wert der einen
- Variable der anderen direkt zuzuweisen:</para>
-
- <programlisting>RUN_DEPENDS= ${BUILD_DEPENDS}</programlisting>
-
- <para>Jedoch kann eine solche Zuweisung dazu führen, dass
- die Liste der Laufzeitabhängigkeiten mit
- überflüssigen Einträgen belastet wird, die
- sich nicht in der ursprünglichen Liste
- <varname>BUILD_DEPENDS</varname> des Ports befanden, da sich
- &man.make.1; bei
- der Auswertung solcher Zuweisungen träge verhält.
- Stellen Sie sich ein <filename>Makefile</filename> mit
- <varname>USE_<replaceable>*</replaceable></varname>-Variablen
- vor, die von <filename>ports/Mk/bsd.*.mk</filename> verarbeitet
- werden, um initiale Bauabhängigkeiten zusammenzutragen.
- Zum Beispiel fügt <literal>USE_GMAKE=yes</literal>
- <package>devel/gmake</package> zu
- <varname>BUILD_DEPENDS</varname> hinzu. Um zu verhindern,
- dass solche zusätzlichen Abhängigkeiten
- <varname>RUN_DEPENDS</varname> belasten, achten Sie darauf,
- bei gleichzeitiger Auswertung zuzuweisen, d.h. der
- Ausdruck wird ausgewertet, bevor er als Wert der Variablen
- zugewiesen wird:</para>
-
- <programlisting>RUN_DEPENDS:= ${BUILD_DEPENDS}</programlisting>
- </sect2>
-
- <sect2>
- <title><varname>BUILD_DEPENDS</varname></title>
-
- <para>Diese Variable legt Binärdateien oder Dateien fest,
- die dieser Port zur Erstellung benötigt. Wie
- <varname>RUN_DEPENDS</varname> ist es eine Liste von
- <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional>:target</optional>-Tupeln.
- Zum Beispiel wird
-
- <programlisting> BUILD_DEPENDS=
- unzip:${PORTSDIR}/archivers/unzip</programlisting>
-
- überprüfen, ob eine Binärdatei
- <command>unzip</command> vorhanden ist und in das
- Unterverzeichnis <filename>archivers/unzip</filename>
- Ihrer Ports-Sammlung wechseln und sie erstellen und
- installieren, falls sie nicht gefunden wird.</para>
-
- <note>
- <para><quote>Erstellen</quote> bedeutet hier alles von der
- Extraktion bis zur Kompilierung. Die Abhängigkeit
- wird im <buildtarget>extract</buildtarget>-Target
- überprüft.
- Der <replaceable>target</replaceable>-Teil kann
- weggelassen werden, falls er identisch mit der Variable
- <varname>DEPENDS_TARGET</varname> ist.</para>
- </note>
- </sect2>
-
- <sect2>
- <title><varname>FETCH_DEPENDS</varname></title>
-
- <para>Diese Variable legt eine Binärdatei oder Datei
- fest, welche der Port benötigt, um heruntergeladen
- werden zu können. Wie die vorherigen beiden Variablen
- ist er eine Liste von
- <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional>:target</optional>-Tupeln.
- Zum Beispiel wird
-
- <programlisting> FETCH_DEPENDS=
- ncftp2:${PORTSDIR}/net/ncftp2</programlisting>
-
- überprüfen, ob eine Binärdatei namens
- <command>ncftp2</command> vorhanden ist, in das
- Unterverzeichnis <filename>net/ncftp2</filename> Ihrer
- Ports-Sammlung wechseln, sie erstellen und installieren,
- falls sie nicht gefunden wird.</para>
-
- <para>Die Abhängigkeit wird innerhalb des
- <buildtarget>fetch</buildtarget>-Target überprüft.
- Der <replaceable>target</replaceable>-Teil kann weggelassen
- werden, falls er identisch mit der Variable
- <varname>DEPENDS_TARGET</varname> ist.</para>
- </sect2>
-
- <sect2>
- <title><varname>EXTRACT_DEPENDS</varname></title>
-
- <para>Diese Variable spezifiziert eine Binärdatei oder
- eine Datei, welche dieser Port für die Extraktion
- benötigt. Wie die vorherigen Variablen ist er eine
- Liste von
- <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional>:target</optional>-Tupeln.
- Zum Beispiel wird
-
- <programlisting>EXTRACT_DEPENDS=
- unzip:${PORTSDIR}/archivers/unzip</programlisting>
-
- überprüfen, ob eine Binärdatei namens
- <command>unzip</command> vorhanden ist, in das
- Unterverzeichnis <filename>archivers/unzip</filename>
- Ihrer Ports-Sammlung wechseln, sie erstellen und
- installieren, falls sie nicht gefunden wird.</para>
-
- <para>Die Abhängigkeit wird innerhalb des
- <buildtarget>extract</buildtarget>-Target überprüft.
- Der <replaceable>target</replaceable>-Teil kann weggelassen
- werden, falls er identisch mit der Variable
- <varname>DEPENDS_TARGET</varname> ist.</para>
-
- <note>
- <para>Nutzen Sie diese Variable nur, wenn die Extraktion
- nicht funktioniert (die Vorgabe nimmt
- <command>gzip</command> an) und nicht mit
- <varname>USE_ZIP</varname> oder
- <varname>USE_BZIP2</varname> wie in <xref linkend="use-vars"/> beschrieben zum Laufen gebracht
- werden kann.</para>
- </note>
- </sect2>
-
- <sect2>
- <title><varname>PATCH_DEPENDS</varname></title>
-
- <para>Diese Variable legt eine Binärdatei oder eine
- Datei fest, welche dieser Port zum Patchen benötigt.
- Wie die vorhergehenden Variablen ist diese eine Liste von
- <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional>:target</optional>-Tupeln.
- Zum Beispiel wird
-
- <programlisting> PATCH_DEPENDS=
- ${NONEXISTENT}:${PORTSDIR}/java/jfc:extract
- </programlisting>
-
- in das Unterverzeichnis <filename>java/jfc</filename> Ihrer
- Ports-Sammlung wechseln, um es zu entpacken.</para>
-
- <para>Die Abhängigkeit wird innerhalb des
- <buildtarget>patch</buildtarget>-Target überprüft.
- Der <replaceable>target</replaceable>-Teil kann entfallen,
- falls er identisch mit der Variable
- <varname>DEPENDS_TARGET</varname> ist.</para>
- </sect2>
-
- <sect2 xml:id="use-vars">
- <title><varname>USE_<replaceable>*</replaceable></varname>
- </title>
-
- <para>Es gibt eine Reihe von Variablen, um gebräuchliche
- Abhängigkeiten einzukapseln, die viele Ports aufweisen.
- Obwohl Ihre Verwendung optional ist, können sie helfen
- die Übersichtlichkeit des <filename>Makefile</filename>
- eines Ports zu erhöhen. Jede von ihnen ist im Stil von
- <varname>USE_<replaceable>*</replaceable></varname>.
- Der Gebrauch dieser Variablen ist beschränkt auf das
- <filename>Makefile</filename> eines Ports und
- <filename>ports/Mk/bsd.*.mk</filename>. Es ist nicht
- entworfen worden, um durch den Nutzer setzbare Optionen
- einzukapseln; benutzen Sie
- <varname>WITH_<replaceable>*</replaceable></varname> und
- <varname>WITHOUT_<replaceable>*</replaceable></varname>
- für diese Zwecke.</para>
-
- <note>
- <para>Es ist <emphasis>immer</emphasis> falsch, irgendeine
- <varname>USE_<replaceable>*</replaceable></varname>-Variable
- in der <filename>/etc/make.conf</filename> zu setzen.
- Zum Beispiel würde das Setzen von
-
- <programlisting>USE_GCC=3.4</programlisting>
-
- eine Abhängigkeit für GCC34 für jeden Port
- einschliesslich GCC34 selbst hinzufügen!</para>
- </note>
-
- <table frame="none">
- <title>Die
- <varname>USE_<replaceable>*</replaceable></varname>-Varibalen
- </title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Variable</entry>
- <entry>Bedeutung</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>USE_BZIP2</varname></entry>
- <entry>Der Tarball dieses Ports wird mit
- <command>bzip2</command> komprimiert.</entry>
- </row>
-
- <row>
- <entry><varname>USE_ZIP</varname></entry>
- <entry>Der Tarball des Ports wird mit
- <command>zip</command> komprimiert.</entry>
- </row>
-
- <row>
- <entry><varname>USE_BISON</varname></entry>
- <entry>Der Port benutzt <command>bison</command>
- für die Erstellung.</entry>
- </row>
-
- <row>
- <entry><varname>USE_CDRTOOLS</varname></entry>
- <entry>Der Port erfordert
- <application>cdrecord</application> entweder von
- <package>sysutils/cdrtools
- </package> oder <package>sysutils/cdrtools-cjk</package>,
- abhängig davon, was der Nutzer vorgibt.
- </entry>
- </row>
-
- <row>
- <entry><varname>USE_GCC</varname></entry>
- <entry>Dieser Port benötigt eine bestimmte
- Version von <command>gcc</command> zur Erstellung.
- Die genaue Version kann festgelegt werden mit
- Werten wie <literal>3.4</literal>.
- Mit <literal>3.4+</literal> kann die mindestens
- erforderliche Version spezifiziert werden.
- Der <command>gcc</command> aus
- dem Basissystem wird genutzt, wenn er die
- erforderliche Version erfüllt, andernfalls wird
- eine geeignete Version des <command>gcc</command>
- aus den Ports kompiliert und die Variablen
- <varname>CC</varname> und <varname>CXX</varname>
- werden angepasst.</entry>
- </row>
-
- </tbody>
- </tgroup>
- </table>
-
- <para>Variablen zugehörig zu
- <application>gmake</application> und dem
- <filename>configure</filename>-Skript werden in
- <xref linkend="building"/> beschrieben, währenddessen
- <application>autoconf</application>,
- <application>automake</application> und
- <application>libtool</application> in
- <xref linkend="using-autotools"/> beschrieben sind.
- <application>Perl</application>-spezifische Variablen
- werden in <xref linkend="using-perl"/> behandelt.
- X11-Variablen sind aufgelistet in
- <xref linkend="using-x11"/>. <xref linkend="using-gnome"/>
- behandelt GNOME-bezogene Variablen und <xref linkend="using-kde"/> KDE-bezogene Variablen.
- <xref linkend="using-java"/> dokumentiert Java-Variablen,
- während <xref linkend="using-php"/>Informationen zu
- <application>Apache</application>,
- <application>PHP</application> und PEAR-Modulen
- enthält.
- <application>Python</application> wird in
- <xref linkend="using-python"/> und
- <application>Ruby</application> in
- <xref linkend="using-ruby"/> erörtert.
- <xref linkend="using-sdl"/> stellt Variablen für
- <application>SDL</application>-Programme zur Verfügung
- und <xref linkend="using-xfce"/> enthält schliesslich
- Variablen für <application>Xfce</application>.</para>
- </sect2>
-
- <sect2>
- <title>Minimale Version einer Abhängigkeit</title>
-
- <para>Eine minimale Version einer Abhängigkeit kann in
- jeder <varname>*_DEPENDS</varname>-Variable festgelegt
- werden mit Ausnahme von <varname>LIB_DEPENDS</varname>
- durch Anwendung folgender Syntax:</para>
-
- <programlisting>p5-Spiffy&gt;=0.26:${PORTSDIR}/devel/p5-Spiffy</programlisting>
-
- <para>Das erste Feld enthält einen abhängigen
- Paketnamen, welcher einem Eintrag in der Paketdatenbank
- entsprechen muss und einen Vergleich mit einer
- Paketversion. Die Abhängigkeit wird erfüllt,
- wenn p5-Spiffy-0.26 oder eine neuere Version
- auf dem System installiert ist.</para>
- </sect2>
-
- <sect2>
- <title>Anmerkungen zu Abhängigkeiten</title>
-
- <para>Wie vorstehend beschrieben ist das Vorgabe-Target
- <buildtarget>DEPENDS_TARGET</buildtarget>, wenn eine
- Abhängigkeit benötigt wird.
- Die Vorgabe hierfür ist <literal>install</literal>.
- Dies ist eine Nutzer-Variable; sie wird niemals im
- <filename>Makefile</filename> eines Ports definiert.
- Falls Ihr Port einen besonderen Weg benötigt,
- um mit einer Abhängigkeit umzugehen, dann benutzen
- Sie bitte den <literal>:target</literal>-Teil der
- <varname>*_DEPENDS</varname>-Variablen, anstatt
- <varname>DEPENDS_TARGET</varname> zu ändern.</para>
-
- <para>Falls Sie <command>make clean</command> schreiben,
- werden dessen Abhängigkeiten auch gesäubert.
- Falls Sie dies nicht wollen, definieren Sie die Variable
- <varname>NOCLEANDEPENDS</varname> in Ihrer Umgebung.
- Dies kann besonders erstrebenswert sein, wenn der Port
- etwas in seiner Liste von Abhängigkeiten hat,
- das sehr viel Zeit für einen rebuild benötigt
- wie KDE, GNOME oder Mozilla.</para>
-
- <para>Um von einem anderen Port bedingungslos abhängig
- zu sein, benutzen Sie bitte die Variable
- <varname>${NONEXISTENT}</varname> als erstes Feld von
- <varname>BUILD_DEPENDS</varname> oder
- <varname>RUN_DEPENDS</varname>. Benutzen Sie dies nur,
- wenn Sie den Quelltext eines anderen Port benötigen.
- Sie können auch oft Kompilierzeit sparen, wenn Sie das
- Target festlegen. Zum Beispiel wird
-
- <programlisting>BUILD_DEPENDS= ${NONEXISTENT}:${PORTSDIR}/graphics/jpeg:extract</programlisting>
-
- immer zum <literal>jpeg</literal>-Port wechseln und ihn
- extrahieren.</para>
- </sect2>
-
- <sect2>
- <title>Zirkuläre Abhängigkeiten sind fatal</title>
-
- <important>
- <para>Führen Sie niemals irgendwelche zirkulären
- Abhängigkeiten in der Ports-Sammlung ein!</para>
- </important>
-
- <para>Die Struktur für die Erstellung von Ports dulde
- keinerlei zirkuläre Abhängigkeiten. Falls Sie
- dennoch eine verwenden, wird es irgendjemanden irgendwo auf
- der Welt geben, dessen FreeBSD-Installation nahezu sofort
- zusammenbricht und vielen anderen wird es sehr schnell
- genauso ergehen.
- So etwas kann extrem schwer festzustellen sein.
- Falls Sie Zweifel haben vor einer Änderung,
- dann vergewissern Sie sich, dass Sie folgendes getan haben:
- <command>cd /usr/ports; make index</command>.
- Dieser Prozess kann auf alten Maschinen sehr langsam sein,
- aber Sie ersparen sich und einer Vielzahl von Menschen
- möglicherweise eine Menge Ärger.</para>
- </sect2>
- </sect1>
-
- <sect1 xml:id="makefile-masterdir">
- <title><varname>MASTERDIR</varname></title>
-
- <para>Falls Ihr Port wegen einer Variable, die verschiedene
- Werte annimmt (z.B. Auflösung oder
- Papiergröße), leicht unterschiedliche Versione
- von Paketen erzeugen muss, dann legen Sie bitte ein
- Unterverzeichnis pro Paket an, um es für den Nutzer
- einfacher begreiflich zu machen, was zu machen ist.
- Aber versuchen Sie dabei so viele Dateien wie möglich
- zwischen diesen Ports gemeinsam zu nutzen.
- Normalerweise benötigen Sie nur ein sehr kurzes
- <filename>Makefile</filename> in allen ausser einem
- Unterverzeichnis, wenn Sie Variablen intelligent nutzen.
- In diesem einzigen <filename>Makefile</filename> können
- Sie <varname>MASTERDIR</varname> verwenden, um anzugeben,
- wo der Rest der Dateien liegt. Benutzen Sie bitte auch eine
- Variable für <link linkend="porting-pkgname">
- <varname>PKGNAMESUFFIX</varname></link>, damit die Pakete
- unterschiedliche Namen haben werden.</para>
-
- <para>Wir demonstrieren dies am Besten an einem Beispiel. Es ist
- Teil von
- <filename>japanese/xdvi300/Makefile</filename>;</para>
-
- <programlisting>PORTNAME= xdvi
-PORTVERSION= 17
-PKGNAMEPREFIX= ja-
-PKGNAMESUFFIX= ${RESOLUTION}
- :
-# default
-RESOLUTION?= 300
-.if ${RESOLUTION} != 118 &amp;&amp; ${RESOLUTION} != 240 &amp;&amp; \
- ${RESOLUTION} != 300 &amp;&amp; ${RESOLUTION} != 400
- @${ECHO_MSG} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\""
- @${ECHO_MSG} "Possible values are: 118, 240, 300 (default) and 400."
- @${FALSE}
-.endif</programlisting>
-
- <para><package>japanese/xdvi300</package>
- verfügt ebenfalls über alle Patches, Paket-Dateien
- usw. Wenn Sie <command>make</command> eintippen, wird der Port
- die Standardvorgabe für die Auflösung nehmen (300)
- und den Port ganz normal erstellen.</para>
-
- <para>Genauso wie für alle anderen Auflösungen ist
- dies das <emphasis>vollständige</emphasis>
- <filename>xdvi118/Makefile</filename>:</para>
-
- <programlisting>RESOLUTION= 118
-MASTERDIR= ${.CURDIR}/../xdvi300
-
-.include "${MASTERDIR}/Makefile"</programlisting>
-
- <para>(<filename>xdvi240/Makefile</filename> und
- <filename>xdvi400/Makefile</filename> sind ähnlich).
- Die <varname>MASTERDIR</varname>-Definition teilt dem
- <filename>bsd.port.mk</filename> mit, dass die normalen
- Unterverzeichnisse wie <varname>FILESDIR</varname> und
- <varname>SCRIPTDIR</varname> unter
- <filename>xdvi300</filename> gefunden werden können.
- Die <literal>RESOLUTION=118</literal>-Zeile wird die
- <literal>RESOLUTION=300</literal>-Zeile in
- <filename>xdvi300/Makefile</filename> überschreiben
- und der Port wird mit einer Auflösung von 118
- erstellt.</para>
- </sect1>
-
- <sect1 xml:id="makefile-manpages">
- <title>Manualpages</title>
-
- <para>Die Variablen <varname>MAN[1-9LN]</varname>
- werden automatisch jede Manualpage zur
- <filename>pkg-plist</filename> hinzufügen
- (dies bedeutet, dass Sie Manualpages
- <emphasis>nicht</emphasis> in der
- <filename>pkg-plist</filename> auflisten dürfen,
- lesen Sie bitte <link linkend="plist-sub">Erstellung
- der PLIST</link> für weitere Details).
- Sie veranlassen zudem den Installationsabschnitt
- dazu, die Manualpages zu Komprimieren oder zu Dekomprimieren
- abhängig vom gesetzten Wert der Variable
- <varname>NO_MANCOMPRESS</varname> in
- <filename>/etc/make.conf</filename>.</para>
-
- <para>Falls Ihr Port versucht verschiedene Namen für
- Manualpages unter Zuhilfenahme von Symlinks oder Hardlinks
- zu installieren, müssen Sie die Variable
- <varname>MLINKS</varname> nutzen, um diese zu identifizieren.
- Der von Ihrem Port installierte Link wird von
- <filename>bsd.port.mk</filename> gelöscht und wieder
- eingefügt, um sicherzustellen, dass er auf die korrekte
- Datei zeigt. Jede Manualpage, welche in
- <varname>MLINKS</varname> aufgeführt ist, darf nicht in
- der <filename>pkg-plist</filename> aufgenommen werden.</para>
-
- <para>Falls die Manualpages während der Installation
- komprimiert werden sollen, müssen Sie die Variable
- <varname>MANCOMPRESSED</varname> setzen. Diese Variable kann
- drei Werte annehmen, <literal>yes</literal>,
- <literal>no</literal> und <literal>maybe</literal>.
- <literal>yes</literal> bedeutet, dass Manualpages bereits
- komprimiert installiert sind, bei <literal>no</literal> sind
- sie es nicht und <literal>maybe</literal> bedeutet, dass die
- Software bereits den Wert von <varname>NO_MANCOMPRESS</varname>
- beachtet, damit <filename>bsd.port.mk</filename> nichts
- Besonderes auszuführen hat.</para>
-
- <para><varname>MANCOMPRESSED</varname> wird automatisch auf
- <literal>yes</literal> gesetzt, wenn
- <varname>USE_IMAKE</varname> vorgegeben ist und gleichzeitig
- <varname>NO_INSTALL_MANPAGES</varname> nicht. Im umgekehrten
- Falle ist <varname>MANCOMPRESSED</varname> auf
- <literal>no</literal> gesetzt.
- Sie müssen es nicht explizit angeben, außer die
- Standardvorgabe ist für Ihren Port nicht passend.</para>
-
- <para>Wenn Ihr Port den man tree irgendwo anders als in der
- Variable <varname>PREFIX</varname> verankert, können
- Sie ihn mit <varname>MANPREFIX</varname> bestimmen.
- Sollten zudem Manualpages nur in bestimmten Abschnitten an
- einem nicht-standardkonformen Platz liegen, wie z.B. bestimmte
- <literal>Perl</literal>-Modul-Ports,
- dann können Sie mittels der Variable
- <varname>MAN<replaceable>sect</replaceable>PREFIX</varname>
- (wobei <replaceable>sect</replaceable> ein Wert aus
- <literal>1-9</literal>, <literal>L</literal> oder
- <literal>N</literal> ist) individuelle Pfade zu den
- Manualpages festlegen.</para>
-
- <para>Wenn Ihre Manualpages in sprachspezifische
- Unterverzeichnisse installiert werden, dann bestimmen Sie
- bitte den Namen der Sprache mit der Variable
- <varname>MANLANG</varname>. Der Wert dieser Variable ist
- mit <literal>""</literal> vorgegeben (das bedeutet nur
- Englisch).</para>
-
- <para>Hier ist ein Beispiel, welches alles zusammenfasst.</para>
-
- <programlisting>MAN1= foo.1
-MAN3= bar.3
-MAN4= baz.4
-MLINKS= foo.1 alt-name.8
-MANLANG= "" ja
-MAN3PREFIX= ${PREFIX}/share/foobar
-MANCOMPRESSED= yes</programlisting>
-
- <para>Dies zeigt an, dass sechs Dateien von diesem Port
- installiert werden;</para>
-
- <programlisting>${MANPREFIX}/man/man1/foo.1.gz
-${MANPREFIX}/man/ja/man1/foo.1.gz
-${PREFIX}/share/foobar/man/man3/bar.3.gz
-${PREFIX}/share/foobar/man/ja/man3/bar.3.gz
-${MANPREFIX}/man/man4/baz.4.gz
-${MANPREFIX}/man/ja/man4/baz.4.gz</programlisting>
-
- <para><filename>${MANPREFIX}/man/man8/alt-name.8.gz</filename>
- kann zusätzlich von Ihrem Port installiert werden,
- oder auch nicht. Unabhängig davon wird ein Symlink
- erstellt, welcher die Manualpages foo(1) und alt-name(8)
- einbindet.</para>
-
- <para>Falls nur manche Manualpages übersetzt sind,
- können Sie einige dynamisch vom
- <varname>MANLANG</varname>-Inhalt erzeugte Variablen
- nutzen:</para>
-
- <programlisting>MANLANG= "" de ja
-MAN1= foo.1
-MAN1_EN= bar.1
-MAN3_DE= baz.3</programlisting>
-
- <para>Dies führt zu folgender Liste von Dateien:</para>
-
- <programlisting>${MANPREFIX}/man/man1/foo.1.gz
-${MANPREFIX}/man/de/man1/foo.1.gz
-${MANPREFIX}/man/ja/man1/foo.1.gz
-${MANPREFIX}/man/man1/bar.1.gz
-${MANPREFIX}/man/de/man3/baz.3.gz</programlisting>
- </sect1>
-
- <sect1 xml:id="makefile-info">
- <title>Info-Dateien</title>
-
- <para>Falls Ihr Paket GNU-Info-Dateien installiert, sollten
- diese in der <varname>INFO</varname>-Variablen augelistet sein
- (ohne das angehängte <literal>.info</literal>) mit einem
- Eintrag für jedes Dokument. Von diesen Dateien wird
- angenommen, dass sie nach
- <filename>PREFIX/INFO_PATH</filename>
- installiert werden. Sie können
- <varname>INFO_PATH</varname> ändern, falls Ihr Paket
- einen anderen Ort vorsieht. Jedoch wird dies nicht empfohlen.
- Die Einträge enthalten nur den relativen Pfad zu
- <filename>PREFIX/INFO_PATH</filename>.
- Zum Beispiel installiert <package>lang/gcc34</package> Info-Dateien nach
- <filename>PREFIX/INFO_PATH/gcc34</filename>,
- wobei <varname>INFO</varname> etwa so aussieht:
-
- <programlisting>INFO= gcc34/cpp gcc34/cppinternals gcc34/g77 ...</programlisting>
-
- Entsprechende Installations-/Deinstalltions-Codes werden vor
- der Paket-Registrierung automatisch der vorläufigen
- <filename>pkg-plist</filename> hinzugefügt.</para>
- </sect1>
-
- <sect1 xml:id="makefile-options">
- <title>Makefile-Optionen</title>
-
- <para>Einige größere Applikationen können mit
- einer Reihe von Konfigurationen, die zusätzliche
- Funktionalitäten hinzufügen, erstellt werden,
- falls eine oder mehrere Bibliotheken oder Applikationen
- verfügbar sind. Dazu gehören die Auswahl von
- natürlichen Sprachen, GUI versus Kommandozeilen-Versionen
- oder die Auswahl aus mehreren Datenbank-Programmen.
- Da nicht alle Nutzer diese Bibliotheken oder Applikationen
- wollen, stellt das Ports-System hooks (Haken) zur
- Verfügung, damit der Autor des Ports bestimmen kann,
- welche Konfiguration erstellt werden soll.</para>
-
- <sect2>
- <title>KNOBS (Einstellungen)</title>
-
- <sect3>
- <title><varname>WITH_<replaceable>*</replaceable></varname>
- und
- <varname>WITHOUT_<replaceable>*</replaceable></varname>
- </title>
-
- <para>Diese Variablen sind entworfen worden, um vom
- System-Administrator gesetzt zu werden. Es gibt viele,
- die in <link xlink:href="http://www.freebsd.org/cgi/cvsweb.cgi/ports/KNOBS?rev=HEAD&amp;content-type=text/x-cvsweb-markup"><filename>ports/KNOBS</filename></link>
- standardisiert sind.</para>
-
- <para>Benennen Sie Schalter bei der Erstellung eines Ports
- nicht programmspezifisch. Verwenden Sie zum Beispiel im
- Avahi-Port <varname>WITHOUT_MDNS</varname> anstelle von
- <varname>WITHOUT_AVAHI_MDNS</varname>.</para>
-
- <note>
- <para>Sie sollten nicht annehmen, dass ein
- <varname>WITH_<replaceable>*</replaceable></varname>
- notwendigerweise eine korrespondierende <varname>
- WITHOUT_<replaceable>*</replaceable></varname>-Variable
- hat oder umgekehrt. Im Allgemeinen wird diese
- Vorgabe einfach unterstellt.</para>
- </note>
-
- <note>
- <para>Falls nicht anderweitig festgelegt, werden diese
- Variablen nur dahingehend überprüft, ob sie
- gesetzt sind oder nicht&nbsp;&ndash;&nbsp;nicht darauf,
- ob sie auf bestimmte Werte wie <literal>YES</literal>
- oder <literal>NO</literal> gesetzt sind.</para>
- </note>
-
- <table frame="none">
- <title>Häufige
- <varname>WITH_<replaceable>*</replaceable></varname>
- und <varname>
- WITHOUT_<replaceable>*</replaceable></varname>-Variablen
- </title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Variable</entry>
-
- <entry>Bedeutung</entry>
- </row>
- </thead>
-
- <tbody>
- <row xml:id="knobs-without-nls">
- <entry><varname>WITHOUT_NLS</varname></entry>
-
- <entry>Falls gesetzt, bedeutet sie, dass eine
- Internationalisierung nicht benötigt wird,
- was Kompilierzeit sparen kann. Als Vorgabe
- wird Internationalisierung gebraucht.</entry>
- </row>
-
- <row>
- <entry><varname>WITH_OPENSSL_BASE</varname></entry>
-
- <entry>Nutze die Version von OpenSSL aus dem
- Basissystem.</entry>
- </row>
-
- <row>
- <entry><varname>WITH_OPENSSL_PORT</varname></entry>
-
- <entry>Installiert die Version von OpenSSL aus
- <package>security/openssl</package>, auch
- wenn das Basissystem auf aktuellem Stand
- ist.</entry>
- </row>
-
- <row>
- <entry><varname>WITHOUT_X11</varname></entry>
-
- <entry>Falls der Port mit oder ohne
- Unterstützung für X erstellt werden
- kann, dann sollte normalerweise mit
- X-Unterstützung erstellt werden.
- Falls die Variable gesetzt ist, soll die Version
- ohne X-Unterstützung erstellt werden.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect3>
-
- <sect3>
- <title>Benennung von Knobs (Einstellungen)</title>
-
- <para>Um die Anzahl der Knobs niedrig zu halten und zum
- Vorteil des Anwenders, wird empfohlen, dass Porter
- ähnliche Namen für Knobs verwenden.
- Eine Liste der beliebtesten Knobs kann in der <link xlink:href="http://www.freebsd.org/cgi/cvsweb.cgi/ports/KNOBS?rev=HEAD&amp;content-type=text/x-cvsweb-markup">KNOBS-Datei</link>
- eingesehen werden.</para>
-
- <para>Knob-Namen sollten wiederspiegeln, was der Knob
- bedeutet und was er bewirkt. Wenn ein Port einen
- lib-Präfix im <varname>PORTNAME</varname> hat,
- dann soll das lib-Präfix im Knob-Namen
- entfallen.</para>
- </sect3>
- </sect2>
-
- <sect2>
- <title><varname>OPTIONS</varname></title>
-
- <sect3>
- <title>Hintergrund</title>
-
- <para>Die <varname>OPTIONS</varname>-Variable gibt dem
- Nutzer, der diesen Port installiert, einen Dialog mit
- auswählbaren Optionen und speichert diese in
- <filename>/var/db/ports/portname/options</filename>.
- Bei der nächsten Neuerstellung des Ports werden
- diese Einstellungen wieder verwandt.
- Sie werden sich niemals mehr an all die zwanzig
- <varname>WITH_<replaceable>*</replaceable></varname> und
- <varname>WITHOUT_<replaceable>*</replaceable></varname>-Optionen
- erinnern müssen, die Sie benutzt haben, um diesen
- Port zu erstellen!</para>
-
- <para>Wenn der Anwender <command>make config</command>
- benutzt (oder ein <command>make build</command> das
- erste Mal laufen lässt) wird das Framework auf
- <filename>/var/db/ports/portname/options</filename>
- die Einstellungen prüfen. Falls die Datei nicht
- existiert, werden die Werte von
- <varname>OPTIONS</varname> genutzt, um eine Dialogbox
- zu erzeugen, in welcher die Optionen an- oder abgeschaltet
- werden können. Dann wird die
- <filename>options</filename>-Datei gespeichert und die
- ausgewählten Variablen werden bei der Erstellung
- des Ports benutzt.</para>
-
- <para>Falls eine neue Version des Ports
- <varname>OPTIONS</varname> hinzufügt, wird der
- Dialog mit den gespeicherten Werten dem Nutzer
- angezeigt.</para>
-
- <para>Benutzen Sie <command>make showconfig</command>,
- um die gespeicherte Konfiguration zu betrachten.
- Benutzen Sie <command>make rmconfig</command>, um die
- gespeicherte Konfiguration zu Löschen.</para>
- </sect3>
-
- <sect3>
- <title>Syntax</title>
-
- <para>Die Syntax für die
- <varname>OPTIONS</varname>-Variable lautet:
-
- <programlisting>OPTIONS= OPTION "descriptive text" default ...</programlisting>
-
- Der Wert als Vorgabe ist entweder <literal>ON</literal>
- oder <literal>OFF</literal>. Wiederholungen dieser drei
- Felder sind erlaubt.</para>
-
- <para><varname>OPTIONS</varname>-Definitionen
- müssen vor der Einbindung von
- <filename>bsd.port.options.mk</filename> erscheinen.
- Die <varname>WITH_*</varname> und
- <varname>WITHOUT_*</varname>-Variablen können
- nur nach der Einbindung von
- <filename>bsd.port.options.mk</filename> getestet
- werden. <filename>bsd.port.pre.mk</filename> kann auch
- stattdessen eingebunden werden und wird immer noch von
- vielen Ports eingebunden, die vor der Einführung von
- <filename>bsd.port.options.mk</filename> erstellt wurden.
- Jedoch wirken manche Variablen nicht wie gewohnt nach der
- Einbindung von <filename>bsd.port.pre.mk</filename>,
- typischerweise <varname>USE_*</varname>-Optionen.</para>
-
- <example xml:id="ports-options-simple-use">
- <title>Einfache Anwendung von
- <varname>OPTIONS</varname></title>
-
- <para><programlisting>OPTIONS= FOO "Enable option foo" On \
- BAR "Support feature bar" Off
-
-.include &lt;bsd.port.options.mk&gt;
-
-.if defined(WITHOUT_FOO)
-CONFIGURE_ARGS+= --without-foo
-.else
-CONFIGURE_ARGS+= --with-foo
-.endif
-
-.if defined(WITH_BAR)
-RUN_DEPENDS+= bar:${PORTSDIR}/bar/bar
-.endif
-
-.include &lt;bsd.port.mk&gt;</programlisting></para>
- </example>
-
- <example xml:id="ports-options-old-style-use">
- <title>Veraltete Anwendung von
- <varname>OPTIONS</varname></title>
-
- <para><programlisting>OPTIONS= FOO "Enable option foo" On
-
-.include &lt;bsd.port.pre.mk&gt;
-
-.if defined(WITHOUT_FOO)
-CONFIGURE_ARGS+= --without-foo
-.else
-CONFIGURE_ARGS+= --with-foo
-.endif
-
-.include &lt;bsd.port.post.mk&gt;</programlisting></para>
- </example>
- </sect3>
- </sect2>
-
- <sect2>
- <title>Automatische Aktivierung von Funktionen</title>
-
- <para>Wenn Sie ein GNU-Konfigurationsskript benutzen,
- sollten Sie ein Auge darauf werfen, welche Funktionen
- durch die automatische Erkennung aktiviert werden.
- Schalten Sie Funktionen, die Sie nicht möchten,
- ausdrücklich durch Verwendung von
- <literal>--without-xxx</literal> oder
- <literal>--disable-xxx</literal> in der Variable
- <varname>CONFIGURE_ARGS</varname> einzeln ab.</para>
-
- <example>
- <title>Falsche Behandlung einer Option</title>
-
- <programlisting>.if defined(WITH_FOO)
-LIB_DEPENDS+= foo.0:${PORTSDIR}/devel/foo
-CONFIGURE_ARGS+= --enable-foo
-.endif</programlisting>
- </example>
-
- <para>Stellen Sie sich vor im obigen Beispiel ist eine
- Bibliothek libfoo auf dem System installiert. Der Nutzer
- will nicht, dass diese Applikation libfoo benutzt, also
- hat er die Option auf "off" im
- <literal>make config</literal>-Dialog umgestellt.
- Aber das Konfigurationsskript der Applikation hat
- erkannt, dass die Bibliothek auf dem System vorhanden ist
- und fügt ihre Funktionen in die Binärdatei ein.
- Falls der Nutzer sich nun entschliesst libfoo von seinem
- System zu entfernen, dann wird das Ports-System nicht
- protestieren (es wurde keine Abhängigkeit von libfoo
- eingetragen), aber die Applikation bricht ab.</para>
-
- <example>
- <title>Korrekte Behandlung einer Option</title>
-
- <programlisting>.if defined(WITH_FOO)
-LIB_DEPENDS+= foo.0:${PORTSDIR}/devel/foo
-CONFIGURE_ARGS+= --enable-foo
-.else
-CONFIGURE_ARGS+= --disable-foo
-.endif</programlisting>
- </example>
-
- <para>Im zweiten Beispiel wird die Bibliothek libfoo explizit
- abgeschaltet. Das Konfigurationsskript aktiviert die
- entsprechenden Funktionen nicht in der Applikation trotz
- der Anwesenheit der Bibliothek auf dem System.</para>
- </sect2>
- </sect1>
-
- <sect1 xml:id="makefile-wrkdir">
- <title>Die Festlegung des Arbeitsverzeichnisses</title>
-
- <para>Jeder Port wird extrahiert in ein Arbeitsverzeichnis,
- welches beschreibbar sein muss. Das Ports-System gibt als
- Standard vor, dass die <varname>DISTFILES</varname> in
- einem Verzeichnis namens <literal>${DISTNAME}</literal>
- entpackt werden. Mit anderen Worten, wenn Sie:</para>
-
- <programlisting>PORTNAME= foo
-PORTVERSION= 1.0</programlisting>
-
- <para>festgelegt haben, dann enthalten die Distributions-Dateien
- des Ports ein Verzeichnis auf oberster Ebene,
- <filename>foo-1.0</filename>, und der Rest der Dateien
- befindet sich unter diesem Verzeichnis.</para>
-
- <para>Es gibt eine Reihe von Variablen, die Sie
- überschreiben können, falls dies nicht der Fall
- sein sollte.</para>
-
- <sect2>
- <title><varname>WRKSRC</varname></title>
-
- <para>Diese Variable listet den Namen des Verzeichnisses,
- welches erstellt wird, wenn die Distfiles der Applikation
- extrahiert werden. Wenn unser vorheriges Beispiel in einem
- Verzeichnis namens <filename>foo</filename> (und nicht
- <filename>foo-1.0</filename>) extrahiert wurde,
- würden Sie schreiben:</para>
-
- <programlisting>WRKSRC= ${WRKDIR}/foo</programlisting>
-
- <para>oder möglicherweise</para>
-
- <programlisting>WRKSRC= ${WRKDIR}/${PORTNAME}
- </programlisting>
- </sect2>
-
- <sect2>
- <title><varname>NO_WRKSUBDIR</varname></title>
-
- <para>Wenn der Port überhaupt nicht in einem
- Unterverzeichnis extrahiert wird, sollten Sie dies mit dem
- Setzen von <varname>NO_WRKSUBDIR</varname> anzeigen.</para>
-
- <programlisting>NO_WRKSUBDIR= yes</programlisting>
- </sect2>
- </sect1>
-
- <sect1 xml:id="conflicts">
- <title>Konfliktbehandlung</title>
-
- <para>Es gibt drei verschiedene Variablen, um einen
- Konflikt zwischen Paketen und Ports zu dokumentieren:
- <varname>CONFLICTS</varname>,
- <varname>CONFLICTS_INSTALL</varname> sowie
- <varname>CONFLICTS_BUILD</varname>.</para>
-
- <note>
- <para><varname>CONFLICTS</varname> setzt automatisch die
- Variable <varname>IGNORE</varname>, die
- ausführlicher in <xref linkend="dads-noinstall"/> beschrieben wird.</para>
- </note>
-
- <para>Beim Entfernen eines von mehreren in Konflikt stehenden
- Ports ist es ratsam, die
- <varname>CONFLICTS</varname>-Einträge in den anderen
- Ports für einige Monate beizubehalten, um Nutzer zu
- unterstützen, die ihre Ports nur sporadisch
- aktualisieren.</para>
-
- <sect2>
- <title><varname>CONFLICTS_INSTALL</varname></title>
-
- <para>Falls Ihr Paket nicht mit anderen Paketen koexistieren
- kann (wegen Dateikonflikten, Laufzeit-Inkompatibilitäten
- usw.), führen Sie bitte die anderen Paketnamen in der
- Variable <varname>CONFLICTS_INSTALL</varname> auf. Sie
- können hier Shell-Globs wie <literal>*</literal> und
- <literal>?</literal> verwenden. Paketnamen sollten in der
- gleichen Weise aufgezählt werden, wie sie in
- <filename>/var/db/pkg</filename> auftauchen. Bitte stellen
- Sie sicher, dass <varname>CONFLICTS</varname> nicht mit dem
- Paket des Ports selbst übereinstimmt, da ansonsten das
- Erzwingen der Installation durch
- <varname>FORCE_PKG_REGISTER</varname> nicht länger
- funktionieren wird.</para>
- </sect2>
-
- <sect2>
- <title><varname>CONFLICTS_BUILD</varname></title>
-
- <para>Wenn Ihr Port nicht gebaut werden kann, wenn ein
- bestimmter Port bereits installiert ist, geben Sie diesen in
- der Variable <varname>CONFLICTS_BUILD</varname> an. Sie
- können hier Shell-Globs wie <literal>*</literal> und
- <literal>?</literal> verwenden. Paketnamen sollten in der
- gleichen Weise aufgezählt werden, wie sie in
- <filename>/var/db/pkg</filename> auftauchen. Die
- CONFLICTS_BUILD-Prüfung erfolgt vor dem Bau des Ports.
- Baukonflikte werden im erzeugten Paket nicht
- verzeichnet.</para>
- </sect2>
-
- <sect2>
- <title><varname>CONFLICTS</varname></title>
-
- <para>Wenn Ihr Port nicht gebaut werden kann, wenn ein bestimmter
- Port bereits installiert ist und das aus dem Port erzeugte
- Paket nicht mit dem anderen Paket koexistieren kann, geben Sie
- das andere Paket in der Variable <varname>CONFLICTS</varname>
- an. Sie können hier Shell-Globs wie <literal>*</literal> und
- <literal>?</literal> verwenden. Paketnamen sollten in der
- gleichen Weise aufgezählt werden, wie sie in
- <filename>/var/db/pkg</filename> auftauchen. Bitte stellen
- Sie sicher, dass <varname>CONFLICTS_INSTALL</varname> nicht mit
- dem Paket des Ports selbst übereinstimmt, da ansonsten das
- Erzwingen der Installation durch
- <varname>FORCE_PKG_REGISTER</varname> nicht länger
- funktionieren wird. Die CONFLICTS-Prüfung erfolgt vor dem
- Bau des Ports und vor der Installation des gebauten Ports.</para>
- </sect2>
- </sect1>
-
- <sect1 xml:id="install">
- <title>Installation von Dateien</title>
-
- <sect2 xml:id="install-macros">
- <title>INSTALL_* macros</title>
-
- <para>Nutzen Sie die Makros in
- <filename>bsd.port.mk</filename>, um korrekte
- Modi und Eigentümer von Dateien in Ihren
- <buildtarget>*-install</buildtarget>-Targets
- sicherzustellen.</para>
-
- <itemizedlist>
- <listitem>
- <para><varname>INSTALL_PROGRAM</varname> ist ein Befehl,
- um binäre Binärdateien zu installieren.</para>
- </listitem>
-
- <listitem>
- <para><varname>INSTALL_SCRIPT</varname> ist ein Befehl,
- um ausführbare Skripte zu installieren.</para>
- </listitem>
-
- <listitem>
- <para><varname>INSTALL_LIB</varname> ist ein Befehl
- zur Installation Shared-Libraries.</para>
- </listitem>
-
- <listitem>
- <para><varname>INSTALL_KLD</varname> ist ein Befehl, mit
- dem Kernelmodule installiert werden können. Einige
- Architekturen haben Probleme mit stripped-Modulen.
- Daher sollten Sie diesen Befehl anstelle von
- <varname>INSTALL_PROGRAM</varname> verwenden.</para>
- </listitem>
-
- <listitem>
- <para><varname>INSTALL_DATA</varname> ist ein Befehl,
- um gemeinsam nutzbare Daten zu installieren.</para>
- </listitem>
-
- <listitem>
- <para><varname>INSTALL_MAN</varname> ist ein Befehl,
- um Manualpages oder andere Dokumentation zu
- installieren (es wird nichts komprimiert).</para>
- </listitem>
- </itemizedlist>
-
- <para>Das sind grundsätzlich alle
- <command>install</command>-Befehle mit
- ihren passenden Flags.</para>
- </sect2>
-
- <sect2 xml:id="install-strip">
- <title>Zerlegen von Binärdateien und
- Shared-Libraries</title>
-
- <para>Zerlegen Sie keine Binärdateien manuell,
- wenn Sie es nicht müssen. Alle Binaries sollten
- gestripped werden; allerdings vermag das
- <varname>INSTALL_PROGRAM</varname>-Makro gleichzeitig
- eine Binärdatei zu installieren und zu strippen
- (beachten Sie den nächsten Abschnitt). Das
- Makro <varname>INSTALL_LIB</varname> erledigt das
- gleiche für Shared-Libraries.</para>
-
- <para>Wenn Sie eine Datei strippen müssen, aber weder
- das <varname>INSTALL_PROGRAM</varname>- noch das
- <varname>INSTALL_LIB</varname>-Makro nutzen wollen, dann
- kann <varname>${STRIP_CMD}</varname> Ihr Programm strippen.
- Dies wird typischerweise innerhalb des
- <literal>post-install</literal>-Targets gemacht.
- Zum Beispiel:</para>
-
- <programlisting>post-install:
- ${STRIP_CMD} ${PREFIX}/bin/xdl</programlisting>
-
- <para>Nutzen Sie &man.file.1; für die installierte
- Applikation, um zu überprüfen, ob eine
- Binärdatei gestripped ist oder nicht.
- Wenn es nicht meldet <literal>not stripped</literal>,
- dann ist es bereits gestripped. Zudem wird &man.strip.1;
- nicht ein bereits gestripptes Programm nochmals versuchen
- zu strippen, sondern wird stattdessen einfach sauber
- beenden.</para>
- </sect2>
-
- <sect2 xml:id="install-copytree">
- <title>Installation eines ganzen Verzeichnisbaums
- inklusive Dateien</title>
-
- <para>Manchmal muss man eine große Zahl von Dateien
- unter Erhalt ihrer hierarchischen Struktur installieren,
- d.h. Kopieraktionen über einen ganzen Verzeichnisbaum
- von <varname>WRKSRC</varname> zu einem Zielverzeichnis unter
- <varname>PREFIX</varname>.</para>
-
- <para>Für diesen Fall gibt es zwei Makros. Der Vorteil
- der Nutzung dieser Makros anstatt <command>cp</command> ist,
- dass sie korrekte Besitzer und Berechtigungen auf den
- Zieldateien garantieren.
- Das erste Makro, <varname>COPYTREE_BIN</varname>, wird alle
- installierten Dateien ausführbar markieren und damit
- passend für die Installation in
- <filename>PREFIX/bin</filename>
- vorbereiten. Das zweite Makro,
- <varname>COPYTREE_SHARE</varname>, setzt keine
- Ausführungsberechtigungen auf Dateien und ist daher
- geeignet für die Installation von Dateien im Target von
- <filename>PREFIX/share</filename>.</para>
-
- <programlisting>post-install:
- ${MKDIR} ${EXAMPLESDIR}
- (cd ${WRKSRC}/examples/ &amp;&amp; ${COPYTREE_SHARE} \* ${EXAMPLESDIR})</programlisting>
-
- <para>Dieses Beispiel wird den Inhalt des
- <filename>examples</filename>-Verzeichnisses im Distfile
- des Drittanbieters in das Beispielverzeichnis Ihres Ports
- kopieren.</para>
-
- <programlisting>post-install:
- ${MKDIR} ${DATADIR}/summer
- (cd ${WRKSRC}/temperatures/ &amp;&amp; ${COPYTREE_SHARE} "June July August" ${DATADIR}/summer/)</programlisting>
-
- <para>Und dieses Beispiel wird die Daten der Sommermonate in
- das <filename>summer</filename>-Unterverzeichnis eines
- <filename>DATADIR</filename>
- installieren.</para>
-
- <para>Zusätzliche <command>find</command>-Argumente
- können mit dem dritten Argument an die
- <varname>COPYTREE_*</varname>-Makros übergeben werden.
- Um zum Beispiel alle Dateien aus dem 1. Beispiel ohne die
- Makefiles zu installieren, kann man folgenden Befehl
- benutzen.</para>
-
- <programlisting>post-install:
- ${MKDIR} ${EXAMPLESDIR}
- (cd ${WRKSRC}/examples/ &amp;&amp; \
- ${COPYTREE_SHARE} \* ${EXAMPLESDIR} "! -name Makefile")</programlisting>
-
- <para>Beachten Sie bitte, dass diese Makros die installierten
- Dateien nicht zur <filename>pkg-plist</filename>
- hinzufügen, Sie müssen sie immer noch selbst
- auflisten.</para>
- </sect2>
-
- <sect2 xml:id="install-documentation">
- <title>Installation zusätzlicher Dokumentation</title>
-
- <para>Falls Ihre Software zusätzlich zu den üblichen
- Manualpages und Info-Seiten weitere Dokumentation hat und
- Sie diese für nützlich halten, dann installieren
- Sie sie unter
- <filename>PREFIX/share/doc</filename>.
- Dies kann wie vorstehend im Target des
- <buildtarget>post-install</buildtarget> geschehen.</para>
-
- <para>Legen Sie ein neues Verzeichnis für Ihren Port an.
- Das Verzeichnis sollte wiederspiegeln, was der Port ist.
- Das bedeutet normalerweise <varname>PORTNAME</varname>.
- Wie auch immer, wenn Sie meinen, der Nutzer möchte
- verschiedene Versionen des Ports zur gleichen Zeit
- installiert haben, dann können Sie die gesamte Variable
- <varname>PKGNAME</varname> nutzen.</para>
-
- <para>Machen Sie die Installation von der Variablen
- <varname>NOPORTDOCS</varname> abhängig, damit die
- Nutzer sie in <filename>/etc/make.conf</filename> abschalten
- können:</para>
-
- <programlisting>post-install:
-.if !defined(NOPORTDOCS)
- ${MKDIR} ${DOCSDIR}
- ${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${DOCSDIR}
-.endif</programlisting>
-
- <para>Hier einige praktische Variablen und wie sie
- standardmässig bei Verwendung im
- <filename>Makefile</filename> expandiert werden:</para>
-
- <itemizedlist>
- <listitem>
- <para><varname>DATADIR</varname> wird expandiert zu
- <filename>PREFIX/share/PORTNAME</filename>.</para>
- </listitem>
-
- <listitem>
- <para><varname>DATADIR_REL</varname> wird expandiert zu
- <filename>share/PORTNAME</filename>.</para>
- </listitem>
-
- <listitem>
- <para><varname>DOCSDIR</varname> wird expandiert zu
- <filename>PREFIX/share/doc/PORTNAME</filename>.</para>
- </listitem>
-
- <listitem>
- <para><varname>DOCSDIR_REL</varname> wird expandiert zu
- <filename>share/doc/PORTNAME</filename>.</para>
- </listitem>
-
- <listitem>
- <para><varname>EXAMPLESDIR</varname> wird expandiert zu
- <filename>PREFIX/share/examples/PORTNAME</filename>.</para>
- </listitem>
-
- <listitem>
- <para><varname>EXAMPLESDIR_REL</varname> wird expandiert zu
- <filename>share/examples/PORTNAME</filename>.</para>
- </listitem>
- </itemizedlist>
-
- <note>
- <para><varname>NOPORTDOCS</varname> behandelt nur
- zusätzliche Dokumentation, die in
- <varname>DOCSDIR</varname> installiert ist.
- Für normale Manualpages und Info-Seiten
- wird die Variable benutzt.
- Dinge, welche in <varname>DATADIR</varname>
- und <varname>EXAMPLESDIR</varname> installiert werden,
- legen die Variablen <varname>NOPORTDATA</varname> und
- <varname>NOPORTEXAMPLES</varname> fest.</para>
- </note>
-
- <para>Die Variablen werden nach <varname>PLIST_SUB</varname>
- exportiert. Ihre Werte erscheinen dort als Pfadnamen relativ
- zu <filename>PREFIX</filename>,
- falls möglich. Das bedeutet, dass
- <filename>share/doc/PORTNAME</filename>
- standardmässig ersetzt wird durch
- <literal>%%DOCSDIR%%</literal> in der Packliste usw.
- (mehr zur Ersetzung durch die
- <filename>pkg-plist</filename> finden Sie
- <link linkend="plist-sub">hier</link>).</para>
-
- <para>Alle installierten Dokumentationsdateien
- und&nbsp;&ndash;Verzeichnisse
- sollten in der <filename>pkg-plist</filename> dem
- <literal>%%PORTDOCS%%</literal>-Präfix
- enthalten sein, zum Beispiel:</para>
-
- <programlisting>%%PORTDOCS%%%%DOCSDIR%%/AUTHORS
-%%PORTDOCS%%%%DOCSDIR%%/CONTACT
-%%PORTDOCS%%@dirrm %%DOCSDIR%%</programlisting>
-
- <para>Alternativ zur Auflistung der Dokumentationsdateien in
- der <filename>pkg-plist</filename> kann in einem Port auch
- die Variable <varname>PORTDOCS</varname> gesetzt werden
- für eine Liste von Dateien und Shell-Globs, um diese
- zur endgültigen Packliste hinzuzufügen. Die Namen
- werden relativ zur Variable <varname>DOCSDIR</varname> sein.
- Wenn Sie also einen Port haben, welcher
- <varname>PORTDOCS</varname> benutzt, und Sie haben eine vom
- Standard abweichenden Platz für seine Dokumentation,
- dann müssen Sie die Variable <varname>DOCSDIR</varname>
- entsprechend setzen. Wenn ein Verzeichnis in
- <varname>PORTDOCS</varname> aufgeführt ist, oder von
- einem Shell-Glob dieser Variable abgebildet wird, dann wird
- der komplette Verzeichnisbaum inklusive Dateien und
- Verzeichnissen in der endgültigen Packliste
- aufgenommen. Wenn die Variable <varname>NOPORTDOCS</varname>
- gesetzt ist, dann werden die Dateien und Verzeichnisse,
- die in <varname>PORTDOCS</varname> aufgelistet sind,
- nicht installiert und werden auch nicht zur Packliste des
- Ports hinzugefügt. Wie oben gezeigt bleibt es dem Port
- selbst überlassen, die Dokumentation in
- <varname>PORTDOCS</varname> zu installieren. Ein typisches
- Beispiel für den Gebrauch von
- <varname>PORTDOCS</varname> sieht wie folgt aus:</para>
-
- <programlisting>PORTDOCS= README.* ChangeLog docs/*</programlisting>
-
- <note>
- <para>Die Äquivalente zu <varname>PORTDOCS</varname>
- für unter <varname>DATADIR</varname> und
- <varname>EXAMPLESDIR</varname> installierte Dateien sind
- <varname>PORTDATA</varname> beziehungsweise
- <varname>PORTEXAMPLES</varname>.</para>
-
- <para>Sie können auch <filename>pkg-message</filename>
- benutzen, um Meldungen während der Installation
- anzuzeigen. Lesen Sie <link linkend="porting-message">diesen Abschnitt über den
- Gebrauch von <filename>pkg-message</filename></link>
- für weitere Details.
- Die <filename>pkg-message</filename>-Datei muss nicht zur
- <filename>pkg-plist</filename> hinzugefügt
- werden.</para>
- </note>
- </sect2>
-
- <sect2 xml:id="install-subdirs">
- <title>Unterverzeichnisse mit PREFIX</title>
-
- <para>Lassen Sie den Port die Dateien in die richtigen
- Unterverzeichnisse von <varname>PREFIX</varname> verteilen.
- Einige Ports werfen alles in einen Topf und legen es im
- Unterverzeichnis mit dem Namen des Ports ab, was falsch ist.
- Ausserdem legen viele Ports alles ausser Binaries,
- Header-Dateien und Manualpages in ein Unterverzeichnis
- von <filename>lib</filename>, was natürlich auch nicht
- der BSD-Philosophie entspricht und nicht gut funktioniert.
- Viele der Dateien sollten in eines der folgenden
- Verzeichnisse geschoben werden: <filename>etc</filename>
- (Konfigurationsdateien), <filename>libexec</filename>
- (intern gestartete Binärdateien),
- <filename>sbin</filename> (Binärdateien für
- Superuser/Manager), <filename>info</filename>
- (Dokumentation für Info-Browser) oder
- <filename>share</filename> (Architektur-unabhängige
- Dateien). Lesen Sie hierzu &man.hier.7;; weitestgehend
- greifen die Regeln für <filename>/usr</filename> auch
- für <filename>/usr/local</filename>. Die Ausnahme sind
- Ports, welche mit <quote>news</quote> aus dem USENET
- arbeiten. In diesem Falle sollte
- <filename>PREFIX/news</filename>
- als Zielort für die Dateien benutzt werden.</para>
- </sect2>
- </sect1>
- </chapter>
-
- <chapter xml:id="special">
- <title>Besonderheiten</title>
-
- <para>Es gibt einige Dinge mehr, die zu beachten sind,
- wenn man einen Port erstellt. Dieser Abschnitt
- erklärt die wichtigsten.</para>
-
- <sect1 xml:id="porting-shlibs">
- <title>Shared-Libraries</title>
-
- <para>Wenn Ihr Port eine oder mehrere Shared-Libraries
- installiert, dann definieren Sie bitte eine
- <varname>USE_LDCONFIG</varname> make-Variable,
- die <filename>bsd.port.mk</filename> anweisen wird,
- <literal>&dollar;{LDCONFIG} -m</literal> auf das
- Verzeichnis, in das die neue Library installiert wird
- (normalerweise
- <filename>PREFIX/lib</filename>),
- während des
- <buildtarget>post-install</buildtarget>-Targets anzuwenden,
- um sie im Shared-Library-Cache zu registrieren.
- Diese Variable, wenn definiert, wird auch dafür sorgen,
- dass ein entsprechendes
- <literal>@exec /sbin/ldconfig -m</literal> und
- <literal>@unexec /sbin/ldconfig -R</literal>-Paar zu Ihrer
- <filename>pkg-plist</filename>-Datei hinzugefügt wird,
- sodass ein Benutzer, der das Paket installiert, die
- Bibliothek danach sofort benutzen kann und das System nach
- deren Deinstallation nicht glaubt, die Bibliothek wäre
- noch da.</para>
-
- <programlisting>USE_LDCONFIG= yes</programlisting>
-
- <para>Wenn nötig, können Sie das Standardverzeichnis
- außer Kraft setzen, indem Sie den
- <varname>USE_LDCONFIG</varname> Wert auf eine Liste von
- Verzeichnissen setzen, in die Shared Libraries installiert
- werden sollen. Wenn Ihr Port z.B. diese Bibliotheken nach
- <filename>PREFIX/lib/foo</filename> und
- <filename>PREFIX/lib/bar</filename>
- installiert, könnten Sie folgendes in Ihrem
- <filename>Makefile</filename> benutzen:</para>
-
- <programlisting>USE_LDCONFIG= ${PREFIX}/lib/foo ${PREFIX}/lib/bar</programlisting>
-
- <para>Bitte überprüfen Sie dies genau. Oft ist das
- überhaupt nicht nötig oder kann durch
- <literal>-rpath</literal> oder das Setzen von
- <envar>LD_RUN_PATH</envar> während des Linkens umgangen
- werden (s. <package>lang/moscow_ml</package> für ein
- Beispiel), oder durch einen Shell-Wrapper, der
- <varname>LD_LIBRARY_PATH</varname> setzt, bevor er die
- Binärdatei ausführt, wie es <package>www/seamonkey</package> tut.</para>
-
- <para>Wenn Sie 32-Bit Libraries auf 64-Bit Systemen
- installieren, benutzen Sie stattdessen
- <varname>USE_LDCONFIG32</varname>.</para>
-
- <para>Versuchen Sie Shared-Library-Versionsnummern im
- <filename>libfoo.so.0</filename> Format zu halten.
- Unser Runtime-Linker kümmert sich nur um die Major
- (erste) Nummer.</para>
-
- <para>Wenn sich die Major-Library-Versionsnummer
- während der Aktualisierung zu einer neuen
- Portversion erhöht, sollte auch die
- <varname>PORTREVISION</varname> aller Ports, die die
- Shared-Library linken, erhöht werden, damit diese
- mit der neuen Version der Bibliothek neu kompiliert
- werden.</para>
- </sect1>
-
- <sect1 xml:id="porting-restrictions">
- <title>Ports mit beschränkter Verbreitung</title>
-
- <para>Lizenzen variieren und manche geben Restriktionen vor,
- wie die Applikation gepackt werden oder ob sie
- gewinnorientiert verkauft werden kann, usw.</para>
-
- <important>
- <para>Es liegt in Ihrer Verantwortung als Porter die
- Lizenzbestimmungen der Software zu lesen und
- sicherzustellen, dass das FreeBSD-Projekt nicht haftbar
- gemacht wird für Lizenzverletzungen durch
- Weiterverbreitung des Quelltextes oder kompilierter
- Binaries über FTP/HTTP oder CD-ROM. Im Zweifelsfall
- kontaktieren Sie bitte die &a.ports;.</para>
- </important>
-
- <para>In solchen Situationen können die in den folgenden
- Abschnitten beschriebenen Variablen gesetzt werden.</para>
-
- <sect2>
- <title><varname>NO_PACKAGE</varname></title>
-
- <para>Diese Variable zeigt an, dass wir keine binären
- Pakete dieser Applikation erzeugen dürfen - z.B. wenn
- die Lizenz die Weiterverteilung von binären Paketen
- oder Paketen verbietet, die aus verändertem Quelltext
- erzeugt wurden.</para>
-
- <para>Die <varname>DISTFILES</varname> des Ports dürfen
- allerdings frei über FTP/HTTP Mirrors
- weiterverbreitet werden. Sie dürfen auch auf CD-ROM
- (oder ähnlichen Medien) weiterverbreitet werden - es
- sei denn, <varname>NO_CDROM</varname> ist ebenfalls
- gesetzt.</para>
-
- <para><varname>NO_PACKAGE</varname> sollte auch benutzt
- werden, wenn das binäre Paket nicht allgemein
- brauchbar ist und die Applikation immer aus dem Quelltext
- kompiliert werden sollte.
- Zum Beispiel, wenn die Applikation konfigurierte
- Informationen über den Rechner/Installationsort bei
- der Installation einkompiliert bekommt, setzen Sie
- <varname>NO_PACKAGE</varname>.</para>
-
- <para><varname>NO_PACKAGE</varname> sollte auf eine
- Zeichenkette gesetzt werden, die den Grund beschreibt,
- warum kein Paket erzeugt werden soll.</para>
- </sect2>
-
- <sect2>
- <title><varname>NO_CDROM</varname></title>
-
- <para>Diese Variable gibt an, dassobwohl wir binäre
- Pakete erzeugen dürfen&nbsp;&ndash;&nbsp;wir weder
- diese Pakete noch die <varname>DISTFILES</varname> des
- Ports auf einer CD-ROM (oder ähnlichen Medien)
- verkaufen dürfen. Die <varname>DISTFILES</varname>
- des Ports dürfen allerdings immer noch auf FTP/HTTP
- Mirrors.</para>
-
- <para>Wenn diese Variable und auch
- <varname>NO_PACKAGE</varname> gesetzt ist, dann werden
- nur die <varname>DISTFILES</varname> des Ports
- erhältlich sein&nbsp;&ndash;&nbsp;und das nur
- mittels FTP/HTTP.</para>
-
- <para><varname>NO_CDROM</varname> sollte auf eine
- Zeichenkette gesetzt werden, die den Grund beschreibt,
- warum der Port nicht auf CD-ROM weiterverbreitet werden
- kann. Das sollte z.B. gemacht werden, wenn die Lizenz
- des Ports nur für
- <quote>nichtkommerzielle Zwecke</quote> gilt.</para>
- </sect2>
-
- <sect2>
- <title><varname>NOFETCHFILES</varname></title>
-
- <para>Dateien, die in der Variable
- <varname>NOFETCHFILES</varname> aufgelistet sind,
- sind von keiner der <varname>MASTER_SITES</varname>
- abrufbar. Ein Beispiel solch einer Datei ist eine selbige,
- welche vom Anbieter auf CD-ROM bereitgestellt wird.</para>
-
- <para>Werkzeuge, die das Vorhandensein dieser Dateien auf
- den <varname>MASTER_SITES</varname>
- überprüfen, sollten diese Dateien
- ignorieren und sie nicht melden.</para>
- </sect2>
-
- <sect2>
- <title><varname>RESTRICTED</varname></title>
-
- <para>Setzen Sie diese Variable, wenn die Lizenz der
- Applikation weder das Spiegeln der
- <varname>DISTFILES</varname> der Applikation noch
- das Weiterverbreiten von binären Paketen in
- jedweder Art erlaubt.</para>
-
- <para><varname>NO_CDROM</varname> oder
- <varname>NO_PACKAGE</varname> sollten nicht zusammen
- mit <varname>RESTRICTED</varname> gesetzt werden, weil
- letztere Variable die anderen beiden impliziert.</para>
-
- <para><varname>RESTRICTED</varname> sollte auf eine
- Zeichenkette gesetzt werden, die den Grund beschreibt,
- warum der Port nicht weiterverbreitet werden kann.
- Typischerweise besagt dies, dass der Port proprietäre
- Software enthält und der Benutzer die
- <varname>DISTFILES</varname> manuell herunterladen
- muss&nbsp;&ndash;&nbsp;möglicherweise erst nachdem
- er sich für die Software registriert oder die
- Bedingungen eines Endbenutzer-Lizenzvertrags
- (<acronym>EULA</acronym>) akzeptiert hat.</para>
- </sect2>
-
- <sect2>
- <title><varname>RESTRICTED_FILES</varname></title>
-
- <para>Wenn <varname>RESTRICTED</varname> oder
- <varname>NO_CDROM</varname> gesetzt ist, ist diese
- Variable auf <literal>${DISTFILES}
- ${PATCHFILES}</literal> voreingestellt, sonst ist sie
- leer. Wenn nicht jede dieser Dateien beschränkt ist,
- dann führen Sie die betroffenen Dateien in dieser
- Variable auf.</para>
-
- <para>Beachten Sie, dass der Porter für jede
- aufgeführte Distributionsdatei einen Eintrag zu
- <filename>/usr/ports/LEGAL</filename> hinzufügen
- sollte, der genau beschreibt, was die Beschränkung
- mit sich bringt.</para>
- </sect2>
- </sect1>
-
- <sect1 xml:id="building">
- <title>Build-Mechanismen</title>
-
- <sect2 xml:id="parallel-builds">
- <title>Paralleles Bauen von Ports</title>
-
- <para>Das Ports-Framework von &os; unterstützt das
- parallele Bauen von Ports, indem es mehrere
- <command>make</command>-Instanzen ausführt, damit
- <acronym>SMP</acronym>-Systeme ihre gesamte
- <acronym>CPU</acronym>-Rechenleistung ausnützen
- können und so das Bauen von Ports schneller und
- effektiver werden kann.</para>
-
- <para>Dies ermöglicht der Parameter
- <varname>-jX</varname> an &man.make.1;, wenn Code von
- Drittanbietern kompiliert wird. Leider können nicht
- alle Ports wirklich gut mit dem Parallelbau umgehen.
- Deshalb ist es erforderlich, dass dieses Feature explizit
- durch <literal>MAKE_JOBS_SAFE=yes</literal> irgendwo
- unterhalb des Abschnitts für Abhängigkeiten im
- <filename>Makefile</filename> aktiviert wird.</para>
-
- <para>Eine weitere Möglichkeit im Umgang mit dieser
- Option besteht für den Maintainer darin,
- <varname>MAKE_JOBS_UNSAFE=yes</varname> zu setzen. Diese
- Variable wird dann verwendet, wenn ein Port bekannterweise
- mit <varname>-jX</varname> nicht gebaut werden kann, der
- Benutzer jedoch für alle Ports den Mehrprozessorbau
- durch <literal>FORCE_MAKE_JOBS=yes</literal> in
- <filename>/etc/make.conf</filename> erzwingt.</para>
- </sect2>
-
- <sect2 xml:id="using-make">
- <title><command>make</command>, <command>gmake</command>
- und <command>imake</command></title>
-
- <para>Wenn Ihr Port <application>GNU make</application>
- benutzt, dann setzen Sie bitte
- <literal>USE_GMAKE=yes</literal>.</para>
-
- <table frame="none">
- <title>Port-Variablen im Zusammenhang mit
- <application>gmake</application></title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Variable</entry>
-
- <entry>Bedeutung</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>USE_GMAKE</varname></entry>
-
- <entry>Der Port benötigt <command>gmake</command>
- für den Build.</entry>
- </row>
-
- <row>
- <entry><varname>GMAKE</varname></entry>
-
- <entry>Der ganze Pfad zu <command>gmake</command>,
- wenn es nicht im <envar>PATH</envar> ist.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Wenn Ihr Port eine X-Applikation ist, die
- <filename>Makefile</filename>-Dateien aus
- <filename>Imakefile</filename>-Dateien mit
- <application>imake</application> erzeugt, dann setzen Sie
- <literal>USE_IMAKE=yes</literal>. Das sorgt dafür,
- dass die Konfigurationsphase automatisch ein
- <command>xmkmf -a</command> ausführt.
- Wenn das Flag <option>-a</option> ein Problem für
- Ihren Port darstellt, setzen Sie
- <literal>XMKMF=xmkmf</literal>. Wenn der Port
- <application>imake</application> benutzt, aber das
- <buildtarget>install.man</buildtarget>-Target nicht versteht,
- dann sollte <literal>NO_INSTALL_MANPAGES=yes</literal>
- gesetzt werden.</para>
-
- <para>Wenn das <filename>Makefile</filename>
- im Quelltext Ihres Ports etwas anderes als
- <buildtarget>all</buildtarget> als Haupt-Build-Target
- hat, setzen Sie <varname>ALL_TARGET</varname>
- entsprechend. Das Gleiche gilt für
- <buildtarget>install</buildtarget> und
- <varname>INSTALL_TARGET</varname>.</para>
- </sect2>
-
- <sect2 xml:id="using-configure">
- <title><command>configure</command> Skript</title>
-
- <para>Wenn Ihr Port ein <command>configure</command>-Skript
- benutzt, um <filename>Makefile</filename>-Dateien aus
- <filename>Makefile.in</filename>-Dateien zu erzeugen,
- setzen Sie <literal>GNU_CONFIGURE=yes</literal>.
- Wenn Sie dem <command>configure</command>-Skript
- zusätzliche Argumente übergeben wollen (das
- Vorgabeargument ist <literal>--prefix=&dollar;{PREFIX}
- --infodir=&dollar;{PREFIX}/&dollar;{INFO_PATH}
- --mandir=&dollar;{MANPREFIX}/man
- --build=&dollar;{CONFIGURE_TARGET}</literal>), setzen Sie diese
- zusätzlichen Argumente in
- <varname>CONFIGURE_ARGS</varname>.
- Zusätzliche Umgebungsvariablen können
- überdie Variable <varname>CONFIGURE_ENV</varname>
- übergeben werden.</para>
-
- <table frame="none">
- <title>Variablen für Ports, die
- <command>configure</command> benutzen</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Variable</entry>
-
- <entry>Bedeutung</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>GNU_CONFIGURE</varname></entry>
-
- <entry>Der Port benutzt ein
- <command>configure</command>-Skript, um das Bauen
- vorzubereiten.</entry>
- </row>
-
- <row>
- <entry><varname>HAS_CONFIGURE</varname></entry>
-
- <entry>Wie <varname>GNU_CONFIGURE</varname>, nur
- dass kein Standard-Konfigurations-Target zu
- <varname>CONFIGURE_ARGS</varname> hinzugefügt
- wird.</entry>
- </row>
-
- <row>
- <entry><varname>CONFIGURE_ARGS</varname></entry>
-
- <entry>Zusätzliche Argumente für das
- <command>configure</command>-Skript.</entry>
- </row>
-
- <row>
- <entry><varname>CONFIGURE_ENV</varname></entry>
-
- <entry>Zusätzliche Umgebungsvariablen
- für die Abarbeitung des
- <command>configure</command>-Skriptes.</entry>
- </row>
-
- <row>
- <entry><varname>CONFIGURE_TARGET</varname></entry>
-
- <entry>Ersetzt das Standard-Konfigurations-Target.
- Vorgabewert ist
- <literal>&dollar;{MACHINE_ARCH}-portbld-freebsd&dollar;{OSREL}</literal>.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect2>
-
- <sect2 xml:id="using-scons">
- <title>Benutzung von <command>scons</command></title>
-
- <para>Wenn Ihr Port <application>SCons</application>
- benutzt, definieren Sie
- <literal>USE_SCONS=yes</literal>.</para>
-
- <table frame="none">
- <title>Variablen für Ports, die
- <command>scons</command> benutzen</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Variable</entry>
-
- <entry>Bedeutung</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>SCONS_ARGS</varname></entry>
-
- <entry>Port-spezifische SCons-Argumente, die der
- SCons-Umgebung übergeben werden.</entry>
- </row>
-
- <row>
- <entry><varname>SCONS_BUILDENV</varname></entry>
-
- <entry>Variablen, die in der System-Umgebung
- gesetzt werden sollen.</entry>
- </row>
-
- <row>
- <entry><varname>SCONS_ENV</varname></entry>
-
- <entry>Variablen, die in der SCons-Umgebung
- gesetzt werden sollen.</entry>
- </row>
-
- <row>
- <entry><varname>SCONS_TARGET</varname></entry>
-
- <entry>Letztes Argument, das SCons übergeben
- wird&nbsp;&ndash;&nbsp;ähnlich
- <varname>MAKE_TARGET</varname>.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Um <filename>SConstruct</filename> im Quelltext alles,
- was SCons in <varname>SCONS_ENV</varname> übergeben
- wird, respektieren zu lassen (das ist hauptsächlich
- <varname>CC/CXX/CFLAGS/CXXFLAGS</varname>), patchen Sie
- <filename>SConstruct</filename>, sodass das Build
- <literal>Environment</literal> wie folgt konstruiert
- wird:</para>
-
- <programlisting>env = Environment(**ARGUMENTS)</programlisting>
-
- <para>Es kann dann mit <literal>env.Append</literal> und
- <literal>env.Replace</literal> modifiziert werden.</para>
- </sect2>
- </sect1>
-
- <sect1 xml:id="using-autotools">
- <title>Benutzung von GNU autotools</title>
-
- <sect2 xml:id="using-autotools-introduction">
- <title>Einführung</title>
-
- <para>Die verschiedenen GNU autotools stellen einen
- Abstraktionsmechanismus bereit für das Kompilieren
- von Software für eine Vielfalt von Betriebssystemen
- und Maschinenarchitekturen. Innerhalb der Ports-Sammlung
- kann ein einzelner Port diese Werkzeuge mit Hilfe eines
- einfachen Konstrukts benutzen:</para>
-
- <programlisting>USE_AUTOTOOLS= <replaceable>tool</replaceable>:<replaceable>version</replaceable>[:<replaceable>operation</replaceable>] ...</programlisting>
-
- <para>Als dies geschrieben wurde konnte
- <replaceable>tool</replaceable> eins von
- <literal>libtool</literal>, <literal>libltdl</literal>,
- <literal>autoconf</literal>,
- <literal>autoheader</literal>,
- <literal>automake</literal> oder
- <literal>aclocal</literal> sein.</para>
-
- <para><replaceable>version</replaceable> gibt die einzelne
- Werkzeug-Revision an, die benutzt werden soll (siehe
- <literal>devel/{automake,autoconf,libtool}[0-9]+</literal>
- für mögliche Versionen).</para>
-
- <para><replaceable>operation</replaceable> ist eine
- optionale Angabe, die modifiziert, wie das Werkzeug
- benutzt wird.</para>
-
- <para>Es können auch mehrere Werkzeuge angegeben
- werden&nbsp;&ndash;&nbsp;entweder durch Angabe aller in
- einer einzigen Zeile oder durch Benutzung des
- <literal>+=</literal> Makefile-Konstrukts.</para>
-
- <para>Schliesslich gibt es das spezielle Tool, genannt
- <literal>autotools</literal>, das der Einfachheit dient
- indem es von alle verfügbaren Versionen der Autotools
- abhängt, was sinnvoll für Cross-Development ist.
- Dies kann auch erreicht werden, indem man den Port
- <literal>devel/autotools</literal> installiert.</para>
- </sect2>
-
- <sect2 xml:id="using-libtool">
- <title><command>libtool</command></title>
-
- <para>Shared-Libraries, die das GNU Build-System benutzen,
- verwenden normalerweise
- <command>libtool</command>, um die Kompilierung und
- Installation solcher Bibliotheken anzupassen.
- Die übliche Praxis ist, eine Kopie von
- <command>libtool</command>, die mit dem Quelltext
- geliefert wird, zu benutzen. Falls Sie ein externes
- <command>libtool</command> benötigen, können
- Sie die Version, die von der Ports-Sammlung bereitgestellt
- wird, benutzen:</para>
-
- <programlisting>USE_AUTOTOOLS= libtool:<replaceable>version</replaceable>[:env]</programlisting>
-
- <para>Ohne zusätzliche Angaben sagt
- <literal>libtool:version
- </literal> dem Build-System, dass es das
- Konfigurationsskript mit der auf dem System
- installierten Kopie von <command>libtool</command>
- patchen soll.
- Die Variable <varname>GNU_CONFIGURE</varname> ist
- impliziert. Außerdem werden einige
- make&ndash;&nbsp;und shell-Variablen zur
- weiteren Benutzung durch den Port gesetzt.
- Für Genaueres siehe
- <filename>bsd.autotools.mk</filename>.</para>
-
- <para>Mit der Angabe <literal>:env</literal> wird nur die
- Umgebung vorbereitet.</para>
-
- <para>Schließlich können optional
- <varname>LIBTOOLFLAGS</varname> und
- <varname>LIBTOOLFILES</varname> gesetzt werden, um die
- häufigsten Argumente und durch
- <command>libtool</command> gepatchten Dateien außer
- Kraft zu setzen. Die meisten Ports werden das aber nicht
- brauchen. Für Weiteres siehe
- <filename>bsd.autotools.mk</filename>.</para>
- </sect2>
-
- <sect2 xml:id="using-libltdl">
- <title><command>libltdl</command></title>
-
- <para>Einige Ports benutzen das
- <command>libltdl</command>-Bibliothekspaket,
- welches Teil der <command>libtool</command>-Suite ist.
- Der Gebrauch dieser Bibliothek macht nicht automatisch
- den Gebrauch von <command>libtool</command> selbst
- nötig, deshalb wird ein separates Konstrukt zur
- Verfügung gestellt.</para>
-
- <programlisting>USE_AUTOTOOLS= libltdl:<replaceable>version</replaceable></programlisting>
-
- <para>Im Moment sorgt dies nur für eine
- <varname>LIB_DEPENDS</varname>-Abhängigkeit von dem
- entsprechenden <command>libltdl</command>-Port und wird
- zur Vereinfachung zur Verfügung gestellt,
- um Abhängigkeiten von den Autotools-Ports
- ausserhalb des <varname>USE_AUTOTOOLS</varname>-Systems
- zu eliminieren. Es gibt keine weiteren Angaben für
- dieses Werkzeug.</para>
- </sect2>
-
- <sect2 xml:id="using-autoconf">
- <title><command>autoconf</command> und
- <command>autoheader</command></title>
-
- <para>Manche Ports enthalten kein Konfigurationsskript,
- sondern eine autoconf-Vorlage in der
- <filename>configure.ac</filename>-Datei.
- Sie können die folgenden Zuweisungen benutzen,
- um <command>autoconf</command> das Konfigurationsskript
- erzeugen zu lassen, und auch <command>autoheader</command>
- Header-Vorlagen zur Benutzung durch das
- Konfigurationsskript erzeugen zu lassen.</para>
-
- <programlisting>USE_AUTOTOOLS= autoconf:<replaceable>version</replaceable>[:env]</programlisting>
-
- <para>und</para>
-
- <programlisting>USE_AUTOTOOLS= autoheader:<replaceable>version</replaceable></programlisting>
-
- <para>welches auch die Benutzung von
- <literal>autoconf:version
- </literal> impliziert.</para>
-
- <para>Ähnlich wie bei <command>libtool</command>,
- bereitet die Angabe des optionalen
- <literal>:env</literal> nur die Umgebung für weitere
- Benutzung vor. Ohne dieses wird der Port auch gepatched
- und erneut konfiguriert.</para>
-
- <para>Die zusätzlichen optionalen Variablen
- <varname>AUTOCONF_ARGS</varname> und
- <varname>AUTOHEADER_ARGS</varname> können durch das
- <filename>Makefile</filename> des Ports ausser Kraft
- gesetzt werden, wenn erforderlich. Wie bei den
- <command>libtool</command>-Äquivalenten werden die
- meisten Ports dies aber nicht benötigen.</para>
- </sect2>
-
- <sect2 xml:id="using-automake">
- <title><command>automake</command> und
- <command>aclocal</command></title>
-
- <para>Manche Pakete enthalten nur
- <filename>Makefile.am</filename>-Dateien. Diese
- müssen durch <command>automake</command> in
- <filename>Makefile.in</filename>-Dateien konvertiert
- und dann durch <command>configure</command>
- weiterbearbeitet werden, um schließlich ein
- <filename>Makefile</filename> zu erzeugen.</para>
-
- <para>Ähnliches gilt für Pakete, die gelegentlich
- keine <filename>aclocal.m4</filename>-Dateien mitliefern,
- welche ebenfalls zum Erstellen der Software benötigt
- werden. Diese können durch <command>aclocal</command>
- erzeugt werden, welches <filename>configure.ac</filename>
- oder <filename>configure.in</filename> durchsucht.</para>
-
- <para><command>aclocal</command> hat eine ähnliche
- Beziehung zu <command>automake</command> wie
- <command>autoheader</command> zu
- <command>autoconf</command>&nbsp;&ndash;&nbsp;beschrieben
- im vorherigen Abschnitt. <command>aclocal</command>
- impliziert die Benutzung von <command>automake</command>,
- also haben wir:</para>
-
- <programlisting>USE_AUTOTOOLS= automake:<replaceable>version</replaceable>[:<replaceable>env</replaceable>]</programlisting>
-
- <para>und</para>
-
- <programlisting>USE_AUTOTOOLS= aclocal:<replaceable>version</replaceable></programlisting>
-
- <para>was auch die Benutzung von <literal>
- automake:version</literal>
- impliziert.</para>
-
- <para>Ähnlich wie bei <command>libtool</command> und
- <command>autoconf</command>, bereitet die optionale Angabe
- <literal>:env</literal> nur die Umgebung zur weiteren
- Benutzung vor. Ohne sie wird der Port erneut
- konfiguriert.</para>
-
- <para>Wie schon <command>autoconf</command> und
- <command>autoheader</command>, hat sowohl
- <command>automake</command> als auch
- <command>aclocal</command> eine optionale
- Argument-Variable <varname>AUTOMAKE_ARGS</varname>
- bzw. <varname>ACLOCAL_ARGS</varname>, die durch das
- <filename>Makefile</filename> des Ports, falls nötig,
- außer Kraft gesetzt werden kann.</para>
- </sect2>
- </sect1>
-
- <sect1 xml:id="using-gettext">
- <title>Benutzung von GNU <literal>gettext</literal></title>
-
- <sect2>
- <title>Grundlegende Benutzung</title>
-
- <para>Wenn Ihr Port <literal>gettext</literal>
- benötigt, setzen Sie einfach
- <varname>USE_GETTEXT</varname> auf <literal>yes</literal>,
- und Ihr Port bekommt die Abhängigkeit von <package>devel/gettext</package>. Der Wert von
- <varname>USE_GETTEXT</varname> kann auch die
- benötigte Version der
- <literal>libintl</literal>-Bibliothek angeben, der
- grundlegenden Teil von
- <literal>gettext</literal>&nbsp;&ndash;&nbsp;jedoch
- wird von der Benutzung dieser Funktion
- <emphasis>dringend abgeraten</emphasis>:
- Ihr Port sollte einfach nur mit der aktuellen Version von
- <package>devel/gettext</package>
- funktionieren.</para>
-
- <para>Ein ziemlich häufiger Fall ist, dass ein Port
- <literal>gettext</literal> und
- <command>configure</command> benutzt. Normalerweise sollte
- GNU <command>configure</command>
- <literal>gettext</literal> automatisch finden können.
- Sollte das einmal nicht funktionieren, können
- Hinweise über den Ort von <literal>gettext</literal>
- in <envar>CPPFLAGS</envar> und <envar>LDFLAGS</envar> wie
- folgt übergeben werden:</para>
-
- <programlisting>USE_GETTEXT= yes
-CPPFLAGS+= -I${LOCALBASE}/include
-LDFLAGS+= -L${LOCALBASE}/lib
-
-GNU_CONFIGURE= yes
-CONFIGURE_ENV= CPPFLAGS="${CPPFLAGS}" \
- LDFLAGS="${LDFLAGS}"</programlisting>
-
- <para>Natürlich kann der Code kompakter sein,
- wenn es keine weiteren Flags gibt, die
- <command>configure</command> übergeben werden
- müssen:</para>
-
- <programlisting>USE_GETTEXT= yes
-GNU_CONFIGURE= yes
-CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include" \
- LDFLAGS="-L${LOCALBASE}/lib"</programlisting>
- </sect2>
-
- <sect2>
- <title>Optionale Benutzung</title>
-
- <para>Manche Softwareprodukte erlauben die Deaktivierung
- von NLS - z.B. durch Übergeben von
- <option>--disable-nls</option> an
- <command>configure</command>. In diesem Fall sollte Ihr
- Port <literal>gettext</literal> abhängig vom Status
- von <link linkend="knobs-without-nls"><varname>WITHOUT_NLS</varname></link>
- benutzen. Für Ports mit niedriger bis mittlerer
- Komplexität können Sie sich auf das folgende
- Idiom verlassen:</para>
-
- <programlisting>GNU_CONFIGURE= yes
-
-.if !defined(WITHOUT_NLS)
-USE_GETTEXT= yes
-PLIST_SUB+= NLS=""
-.else
-CONFIGURE_ARGS+= --disable-nls
-PLIST_SUB+= NLS="@comment "
-.endif</programlisting>
-
- <para>Der nächste Punkt auf Ihrer Todo-Liste ist
- dafür zu sorgen, dass die Message-Catalog-Dateien
- nur bedingt in der Packliste aufgeführt werden. Der
- <filename>Makefile</filename>-Teil dieser Aufgabe ist
- schon durch obiges Idiom erledigt.
- Das wird im Abschnitt über <link linkend="plist-sub">Fortgeschrittene
- <filename>pkg-plist</filename>-Methoden</link>
- erklärt.
- Kurz gesagt, jedes Vorkommen von
- <literal>%%NLS%%</literal> in
- <filename>pkg-plist</filename> wird durch
- <quote><literal>@comment&nbsp;</literal></quote>, wenn NLS
- abgeschaltet ist, oder durch eine leere Zeichenkette,
- wenn NLS aktiviert ist, ersetzt. Folglich werden die
- Zeilen, denen <literal>%%NLS%%</literal> vorangestellt
- ist, zu reinen Kommentaren in der endgültigen
- Packliste, wenn NLS abgeschaltet ist;
- andernfalls wird der Prefix einfach nur ausgelassen.
- Alles, was Sie jetzt noch machen müssen, ist
- <literal>%%NLS%%</literal> vor jedem Pfad zu einer
- Message-Catalog-Datei in <filename>pkg-plist</filename>
- einzufügen. Zum Beispiel:</para>
-
- <programlisting>%%NLS%%share/locale/fr/LC_MESSAGES/foobar.mo
-%%NLS%%share/locale/no/LC_MESSAGES/foobar.mo</programlisting>
-
- <para>In sehr komplexen Fällen müssen Sie
- eventuell fortgeschrittenere Techniken als die hier
- vorgestellte benutzen - wie z.B. <link linkend="plist-dynamic">Dynamische
- Packlistenerzeugung</link>.</para>
- </sect2>
-
- <sect2>
- <title>Behandlung von Message-Catalog-Verzeichnissen</title>
-
- <para>Bei der Installation von Message-Catalog-Dateien
- gibt es einen Punkt zu beachten. Ihr Zielverzeichnis,
- das unter <filename>
- LOCALBASE/share/locale</filename>
- liegt, sollte nur selten von Ihrem Port erzeugt und
- gelöscht werden. Die Verzeichnisse für die
- gebräuchlichsten Sprachen sind in
- <filename>/etc/mtree/BSD.local.dist</filename>
- aufgelistet; das heisst, sie sind Teil des Systems.
- Die Verzeichnisse für viele andere Sprachen sind
- Teil des Ports <package>devel/gettext</package>. Sie wollen
- vielleicht dessen <filename>pkg-plist</filename>
- zur Hand nehmen, um festzustellen, ob Ihr Port eine
- Message-Catalog-Datei für eine seltene Sprache
- installiert.</para>
- </sect2>
- </sect1>
-
- <sect1 xml:id="using-perl">
- <title>Die Benutzung von <literal>perl</literal></title>
-
- <para>Wenn <varname>MASTER_SITES</varname> auf
- <varname>MASTER_SITE_PERL_CPAN</varname> gesetzt ist,
- dann ist der bevorzugte Wert von
- <varname>MASTER_SITE_SUBDIR</varname> der Top-Level-Name
- der Hierarchie. Zum Beispiel ist der empfohlene Wert
- für
- <literal>p5-Module-Name</literal>-<literal>Module</literal>.
- Die Top-Level-Hierarchie kann unter <link xlink:href="http://cpan.org/modules/by-module/">cpan.org</link>
- angeschaut werden. Dies sorgt dafür, dass der Port
- weiter funktioniert, wenn sich der Autor des Moduls
- ändert.</para>
-
- <para>Die Ausnahme dieser Regel ist, dass das entsprechende
- Verzeichnis selber oder das Distfile in diesem Verzeichnis
- nicht existiert. In solchen Fällen ist die Benutzung
- der Id des Autors als <varname>MASTER_SITE_SUBDIR</varname>
- erlaubt.</para>
-
- <para>Jede der Einstellungen unten kann sowohl auf
- <literal>YES</literal> als auch auf eine
- Versionszeichenkette wie <literal>5.8.0+</literal> gesetzt
- werden. Wenn <literal>YES</literal> benutzt wird, bedeutet
- das, dass der Port mit jeder der unterstützten
- <application>Perl</application>-Versionen funktioniert.
- Falls ein Port nur mit einer bestimmten
- <application>Perl</application>-Version funktioniert, kann
- darauf mit einer Versionszeichenkette hingewiesen werden,
- die entweder eine Mindest- (z.B. <literal>5.7.3+</literal>),
- Maximal- (z.B. <literal>5.8.0-</literal>) oder
- Absolutversion (z.B. <literal>5.8.3</literal>)
- festlegt.</para>
-
- <table frame="none">
- <title>Variablen für Ports, die <literal>perl</literal>
- benutzen</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Variable</entry>
- <entry>Bedeutung</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>USE_PERL5</varname></entry>
- <entry>Bedeutet, dass der Port <literal>perl 5</literal>
- zum Erstellen und zum Ausführen benutzt.</entry>
- </row>
-
- <row>
- <entry><varname>USE_PERL5_BUILD</varname></entry>
- <entry>Bedeutet, dass der Port <literal>perl 5</literal>
- zum Erstellen benutzt.</entry>
- </row>
-
- <row>
- <entry><varname>USE_PERL5_RUN</varname></entry>
- <entry>Bedeutet, dass der Port <literal>perl 5</literal>
- zur Laufzeit benutzt.</entry>
- </row>
-
- <row>
- <entry><varname>PERL</varname></entry>
- <entry>Der gesamte Pfad zu
- <literal>perl 5</literal>&nbsp;&ndash;&nbsp;entweder
- im Basissystem oder nachinstalliert über einen
- Port&nbsp;&ndash;&nbsp;ohne die Versionsnummer. Benutzen
- Sie diese Variable, wenn Sie <quote>
- <literal>#!</literal></quote>-Zeilen in Skripten
- ersetzen müssen.</entry>
- </row>
-
- <row>
- <entry><varname>PERL_CONFIGURE</varname></entry>
- <entry>Perls MakeMaker für die Konfiguration
- benutzen. Dies impliziert
- <varname>USE_PERL5</varname>.</entry>
- </row>
-
- <row>
- <entry><varname>PERL_MODBUILD</varname></entry>
- <entry>Module::Build für configure, build und install
- benutzen. Dies impliziert
- <varname>PERL_CONFIGURE</varname>.</entry>
- </row>
- </tbody>
- </tgroup>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Nur lesbare Variablen</entry>
- <entry>Bedeutung</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>PERL_VERSION</varname></entry>
- <entry>Die volle Version des installierten
- <literal>perl</literal> (z.B.
- <literal>5.8.9</literal>).</entry>
- </row>
-
- <row>
- <entry><varname>PERL_LEVEL</varname></entry>
- <entry>Die installierte <literal>perl</literal>-Version
- als ein Integer der Form <literal>MNNNPP</literal>
- (z.B. <literal>500809</literal>).</entry>
- </row>
-
- <row>
- <entry><varname>PERL_ARCH</varname></entry>
- <entry>Wo <literal>perl</literal> architektur
- abhängige Bibliotheken ablegt. Vorgabe ist
- <literal>${ARCH}-freebsd</literal>.</entry>
- </row>
-
- <row>
- <entry><varname>PERL_PORT</varname></entry>
- <entry>Name des <literal>perl</literal>-Ports, der
- installiert ist (z.B. <literal>perl5</literal>).</entry>
- </row>
-
- <row>
- <entry><varname>SITE_PERL</varname></entry>
- <entry>Verzeichnis, in das die Site-spezifischen
- <literal>perl</literal>-Pakete kommen. Dieser Wert
- wird zu PLIST_SUB hinzugefügt.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <note>
- <para>Ports von Perl-Modulen, die keine offizielle
- Webseite haben, sollen in der WWW-Zeile ihrer
- <filename>pkg-descr</filename>-Datei auf
- <systemitem>cpan.org</systemitem> verlinken.
- Die bevorzugte URL-Form ist <literal>
- http://search.cpan.org/dist/Module-Name/</literal>
- (inklusive des Slash am Ende).</para>
- </note>
- </sect1>
-
- <sect1 xml:id="using-x11">
- <title>Benutzung von X11</title>
-
- <sect2 xml:id="x11-variables">
- <title>X.Org-Komponenten</title>
-
- <para>Die X11-Implementierung, welche die Ports-Sammlung
- bereitstellt, ist X.Org. Wenn Ihre Applikation von
- X-Komponenten abhängt, listen Sie die benötigten
- Komponenten in <varname>USE_XORG</varname> auf. Als dies
- geschrieben wurde, wurden die folgenden Komponenten
- bereitgestellt:</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>Die aktuelle Liste finden Sie immer in
- <filename>/usr/ports/Mk/bsd.xorg.mk</filename>.</para>
-
- <para>Das Mesa Projekt ist ein Versuch, eine freie OpenGL
- Implementierung bereitzustellen. Sie können eine
- Abhängigkeit von verschiedenen Komponenten diese
- Projektes in der Variable <varname>USE_GL</varname>
- spezifizieren. ouml;gliche Optionen sind: <literal>glut,
- glu, glw, glew, gl</literal> und <literal>linux</literal>.
- Für Abwärtskompatibilität gilt der
- Wert <literal>yes</literal> als
- <literal>glu</literal>.</para>
-
- <example xml:id="use-xorg-example">
- <title>Beispiel für USE_XORG</title>
-
- <programlisting>USE_XORG= xrender xft xkbfile xt xaw
-USE_GL= glu</programlisting>
- </example>
-
- <para>Viele Ports definieren <varname>USE_XLIB</varname>,
- was dafür sorgt, dass der Port von allen (rund 50)
- Bibliotheken abhängt. Diese Variable existiert, um
- Abwärtskompatibilität sicherzustellen (sie
- stammt noch aus der Zeit vor dem modularem X.Org), und
- sollte bei neuen Ports nicht mehr benutzt werden.</para>
-
- <table frame="none">
- <title>Variablen für Ports, die X benutzen</title>
-
- <tgroup cols="2">
- <tbody>
-
- <row>
- <entry><varname>USE_XLIB</varname></entry>
- <entry>Der Port benutzt die X-Bibliotheken. Soll
- nicht mehr verwendet werden - benutzen Sie
- stattdessen eine Liste von Komponenten in
- <varname>USE_XORG</varname>.</entry>
- </row>
-
- <row>
- <entry><varname>USE_X_PREFIX</varname></entry>
- <entry>Soll nicht mehr benutzt werden, ist jetzt
- äquivalent zu <varname>USE_XLIB</varname> und
- kann einfach durch letzteres ersetzt
- werden.</entry>
- </row>
-
- <row>
- <entry><varname>USE_IMAKE</varname></entry>
- <entry>Der Port benutzt <command>imake</command>.
- Impliziert <varname>USE_X_PREFIX</varname>.</entry>
- </row>
-
- <row>
- <entry><varname>XMKMF</varname></entry>
- <entry>Ist auf den Pfad zu <command>xmkmf</command>
- gesetzt, wenn nicht in <envar>PATH</envar>. Vorgabe
- ist <literal>xmkmf -a</literal>.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <table frame="none">
- <title>Variablen bei Abhängigkeit von einzelnen
- Teilen von X11</title>
-
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><varname>X_IMAKE_PORT</varname></entry>
- <entry>Ein Port, der <command>imake</command> und einige
- andere Werkzeuge, die zum Erstellen von X11 benutzt
- werden, bereitstellt.</entry>
- </row>
-
- <row>
- <entry><varname>X_LIBRARIES_PORT</varname></entry>
- <entry>Ein Port, der die X11-Bibliotheken
- bereitstellt.</entry>
- </row>
-
- <row>
- <entry><varname>X_CLIENTS_PORT</varname></entry>
- <entry>Ein Port, der X11-Clients bereitstellt.</entry>
- </row>
-
- <row>
- <entry><varname>X_SERVER_PORT</varname></entry>
- <entry>Ein Port, der den X11-Server bereitstellt.</entry>
- </row>
-
- <row>
- <entry><varname>X_FONTSERVER_PORT</varname></entry>
- <entry>Ein Port, der den Fontserver bereitstellt.</entry>
- </row>
-
- <row>
- <entry><varname>X_PRINTSERVER_PORT</varname></entry>
- <entry>Ein Port, der den Printserver bereitstellt.</entry>
- </row>
-
- <row>
- <entry><varname>X_VFBSERVER_PORT</varname></entry>
- <entry>Ein Port, der den virtuellen Framebuffer-Server
- bereitstellt.</entry>
- </row>
-
- <row>
- <entry><varname>X_NESTSERVER_PORT</varname></entry>
- <entry>Ein Port, der einen nested X-Server
- bereitstellt.</entry>
- </row>
-
- <row>
- <entry><varname>X_FONTS_ENCODINGS_PORT</varname></entry>
- <entry>Ein Port, der Kodierungen für Schriftarten
- bereitstellt.</entry>
- </row>
-
- <row>
- <entry><varname>X_FONTS_MISC_PORT</varname></entry>
- <entry>Ein Port, der verschiedene Bitmap-Schriftarten
- bereitstellt.</entry>
- </row>
-
- <row>
- <entry><varname>X_FONTS_100DPI_PORT</varname></entry>
- <entry>Ein Port, der 100dpi Bitmap-Schriftarten
- bereitstellt.</entry>
- </row>
-
- <row>
- <entry><varname>X_FONTS_75DPI_PORT</varname></entry>
- <entry>Ein Port, der 75dpi Bitmap-Schriftarten
- bereitstellt.</entry>
- </row>
-
- <row>
- <entry><varname>X_FONTS_CYRILLIC_PORT</varname></entry>
- <entry>Ein Port, der kyrillische Bitmap-Schriftarten
- bereitstellt.</entry>
- </row>
-
- <row>
- <entry><varname>X_FONTS_TTF_PORT</varname></entry>
- <entry>Ein Port, der &truetype;-Schriftarten
- bereitstellt.</entry>
- </row>
-
- <row>
- <entry><varname>X_FONTS_TYPE1_PORT</varname></entry>
- <entry>Ein Port, der Type1-Schriftarten bereitstellt.</entry>
- </row>
-
- <row>
- <entry><varname>X_MANUALS_PORT</varname></entry>
- <entry>Ein Port, der entwicklerorientierte Manualpages
- bereitstellt.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <example xml:id="using-x11-vars">
- <title>Benutzung von X11-bezogenen Variablen in einem
- Port</title>
-
- <programlisting># Port benutzt X11-Bibliotheken und hängt vom Font-Server sowie
-# von kyrillischen Schriftarten ab.
-RUN_DEPENDS= ${LOCALBASE}/bin/xfs:${X_FONTSERVER_PORT} \
- ${LOCALBASE}/lib/X11/fonts/cyrillic/crox1c.pcf.gz:${X_FONTS_CYRILLIC_PORT}
-
-USE_XORG= x11 xpm</programlisting>
- </example>
- </sect2>
-
- <sect2 xml:id="x11-motif">
- <title>Ports, die Motif benötigen</title>
-
- <para>Wenn Ihr Port eine Motif-Bibliothek benötigt,
- definieren Sie <varname>USE_MOTIF</varname> im
- <filename>Makefile</filename>.
- Die Standard-Motif-Implementierung ist <package>x11-toolkits/open-motif</package>.
- Benutzer können stattdessen <package>x11-toolkits/lesstif</package> wählen,
- indem Sie die <varname>WANT_LESSTIF</varname>-Variable
- setzen.</para>
-
- <para>Die Variable <varname>MOTIFLIB</varname> wird von
- <filename>bsd.port.mk</filename> auf die entsprechende
- Motif-Bibliothek gesetzt. Bitte patchen Sie den Quelltext
- Ihres Ports, sodass er überall
- <literal>&dollar;{MOTIFLIB}</literal> benutzt, wo die
- Motif-Bibliothek im Original <filename>Makefile</filename>
- oder <filename>Imakefile</filename> referenziert
- wird.</para>
-
- <para>Es gibt zwei verbreitete Fälle:</para>
-
- <itemizedlist>
- <listitem>
- <para>Wenn sich der Port in seinem
- <filename>Makefile</filename> oder
- <filename>Imakefile</filename> auf die
- Motif-Bibliothek als <literal>-lXm</literal> bezieht,
- ersetzen Sie das einfach durch
- <literal>&dollar;{MOTIFLIB}</literal>.</para>
- </listitem>
-
- <listitem>
- <para>Wenn der Port in seinem
- <filename>Imakefile</filename>
- <literal>XmClientLibs</literal> benutzt, ersetzen Sie
- das durch <literal>&dollar;{MOTIFLIB}
- &dollar;{XTOOLLIB} &dollar;{XLIB}</literal>.</para>
- </listitem>
- </itemizedlist>
-
- <para>Anmerkung: <varname>MOTIFLIB</varname> expandiert
- (normalerweise) zu <literal>-L/usr/X11R6/lib
- -lXm</literal> oder <literal>/usr/X11R6/lib/libXm.a
- </literal> - d.h. Sie müssen kein
- <literal>-L</literal> oder <literal>-l</literal> davor
- einfügen.</para>
- </sect2>
-
- <sect2>
- <title>X11 Schriftarten</title>
-
- <para>Wenn Ihr Port Schriftarten für das
- X-Window-System installiert, legen Sie diese nach
- <filename>
- LOCALBASE/lib/X11/fonts/local</filename>.</para>
- </sect2>
-
- <sect2>
- <title>Erzeugen eines künstlichen
- <envar>DISPLAY</envar> durch Xvfb</title>
-
- <para>Manche Applikationen benötigen ein
- funktionierendes X11-Display, damit die Kompilierung
- funktioniert. Das stellt für Systeme, die ohne
- Display laufen, ein Problem dar. Wenn die folgende
- Variable benutzt wird, startet die Bauumgebung den
- virtuellen Framebuffer-X-Server, und ein funktionierendes
- <envar>DISPLAY</envar> wird dem Build
- übergeben.</para>
-
- <programlisting>USE_DISPLAY= yes</programlisting>
- </sect2>
-
- <sect2 xml:id="desktop-entries">
- <title>Desktop-Einträge</title>
-
- <para>Desktop-Einträge (<link xlink:href="http://standards.freedesktop.org/desktop-entry-spec/latest/">Freedesktop
- Standard</link>) können in Ihrem Port einfach
- über die <varname>DESKTOP_ENTRIES</varname>-Variable
- erzeugt werden. Diese Einträge erscheinen dann im
- Applikationsmenü von standardkonformen
- Desktop-Umgebungen wie GNOME oder KDE. Die
- <filename>.desktop</filename>-Datei wird dann
- automatisch erzeugt, installiert und der
- <filename>pkg-plist</filename> hinzugefügt.
- Die Syntax ist:</para>
-
- <programlisting>DESKTOP_ENTRIES= "NAME" "COMMENT" "ICON" "COMMAND" "CATEGORY" StartupNotify</programlisting>
-
- <para>Die Liste der möglichen Kategorien ist auf der
- <link xlink:href="http://standards.freedesktop.org/menu-spec/latest/apa.html">Freedesktop
- Webseite</link> abrufbar.
- <varname>StartupNotify</varname> zeigt an, ob die
- Applikation den Status in Umgebungen, die
- Startup-Notifications kennen, löschen wird.</para>
-
- <para>Beispiel:</para>
-
- <programlisting>DESKTOP_ENTRIES= "ToME" "Roguelike game based on JRR Tolkien's work" \
- "${DATADIR}/xtra/graf/tome-128.png" \
- "tome -v -g" "Application;Game;RolePlaying;" \
- false</programlisting>
- </sect2>
- </sect1>
-
- <sect1 xml:id="using-gnome">
- <title>Benutzung von GNOME</title>
-
- <para>Das FreeBSD/GNOME-Projekt benutzt seine eigene
- Gruppe von Variablen, um zu definieren, welche
- GNOME-Komponenten ein bestimmter Port benutzt. Eine
- <link xlink:href="http://www.FreeBSD.org/gnome/docs/porting.html">
- umfassende Liste dieser Variablen</link> existiert innerhalb
- der Webseite des FreeBSD/GNOME-Projektes.</para>
- </sect1>
-
- <sect1 xml:id="using-qt">
- <title>Benutzung von Qt</title>
-
- <sect2 xml:id="qt-common">
- <title>Ports, die Qt benötigen</title>
-
- <table frame="none">
- <title>Variablen für Ports, die Qt
- benötigen</title>
-
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><varname>USE_QT_VER</varname></entry>
- <entry>Der Port benutzt das Qt-Toolkit. Mögliche
- Werte sind <literal>3</literal> und
- <literal>4</literal>; diese spezifizieren die Major
- Version von Qt, die benutzt werden soll.
- Entsprechende Parameter werden an das
- <command>configure</command>-Skript und
- <command>make</command> übergeben.</entry>
- </row>
-
- <row>
- <entry><varname>QT_PREFIX</varname></entry>
- <entry>Enthält den Pfad, wohin Qt installiert ist
- (nur lesbare Variable).</entry>
- </row>
-
- <row>
- <entry><varname>MOC</varname></entry>
- <entry>Enthält den Pfad von <command>moc</command>
- (nur lesbare Variable). Voreingestellt entsprechend des
- <varname>USE_QT_VER</varname>-Werts.</entry>
- </row>
-
- <row>
- <entry><varname>QTCPPFLAGS</varname></entry>
- <entry>Zusätzliche Compiler-Flags, die über
- <varname>CONFIGURE_ENV</varname> an das Qt-Toolkit
- übergeben werden. Voreingestellt entsprechend des
- <varname>USE_QT_VER</varname>-Wertes.</entry>
- </row>
-
- <row>
- <entry><varname>QTCFGLIBS</varname></entry>
- <entry>Zusätzliche Bibliotheken, die über
- <varname>CONFIGURE_ENV</varname> für das Qt-Toolkit
- gelinkt werden sollen. Voreingestellt entsprechend des
- <varname>USE_QT_VER</varname>-Wertes.</entry>
- </row>
-
- <row>
- <entry><varname>QTNONSTANDARD</varname></entry>
- <entry>Änderungen von
- <varname>CONFIGURE_ENV</varname>,
- <varname>CONFIGURE_ARGS</varname> und
- <varname>MAKE_ENV</varname> sollen unterdrückt
- werden.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <table frame="none">
- <title>Zusätzliche Variablen für Ports,
- die Qt 4.xi benutzen</title>
-
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><varname>QT_COMPONENTS</varname></entry>
- <entry>Spezifiziert Tool&ndash;&nbsp;und
- Bibliothek-Abhängigkeiten für Qt4.
- Siehe unten für Details.</entry>
- </row>
-
- <row>
- <entry><varname>UIC</varname></entry>
- <entry>Enthält den Pfad von <command>uic</command>
- (nur lesbare Variable). Voreingestellt entsprechend des
- <varname>USE_QT_VER</varname>-Wertes.</entry>
- </row>
-
- <row>
- <entry><varname>QMAKE</varname></entry>
- <entry>Enthält den Pfad von <command>qmake</command>
- (nur lesbare Variable). Voreingestellt entsprechend des
- <varname>USE_QT_VER</varname>-Wertes.</entry>
- </row>
-
- <row>
- <entry><varname>QMAKESPEC</varname></entry>
- <entry>Enthält den Pfad der Konfigurationsdatei
- für <command>qmake</command>
- (nur lesbare Variable). Voreingestellt entsprechend des
- <varname>USE_QT_VER</varname>-Wertes.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Wenn <varname>USE_QT_VER</varname> gesetzt ist,
- werden dem <command>configure</command>-Skript einige
- nützliche Einstellungen übergeben:</para>
-
- <programlisting>CONFIGURE_ARGS+= --with-qt-includes=${QT_PREFIX}/include \
- --with-qt-libraries=${QT_PREFIX}/lib \
- --with-extra-libs=${LOCALBASE}/lib \
- --with-extra-includes=${LOCALBASE}/include
-CONFIGURE_ENV+= MOC="${MOC}" CPPFLAGS="${CPPFLAGS} ${QTCPPFLAGS}" LIBS="${QTCFGLIBS}" \
- QTDIR="${QT_PREFIX}" KDEDIR="${KDE_PREFIX}"</programlisting>
-
- <para>Wenn <varname>USE_QT_VER</varname> auf
- <literal>4</literal> gesetzt ist, werden auch die folgenden
- Einstellungen übergeben:</para>
-
- <programlisting>CONFIGURE_ENV+= UIC="${UIC}" QMAKE="${QMAKE}" QMAKESPEC="${QMAKESPEC}"
-MAKE_ENV+= QMAKESPEC="${QMAKESPEC}"</programlisting>
- </sect2>
- <sect2 xml:id="qt4-components">
- <title>Komponentenauswahl (nur bei Qt 4.x)</title>
-
- <para>Wenn <varname>USE_QT_VER</varname> auf 4 gesetzt ist,
- können individuelle Qt4-Tool- und
- Bibliotheksabhängigkeiten in der Variable
- <varname>QT_COMPONENTS</varname> angegeben werden. An jede
- Komponente kann <literal>_build</literal> oder
- <literal>_run</literal> als Suffix angehängt werden,
- was eine Abhängigkeit zur Build- bzw. Laufzeit angibt.
- Ohne Suffix gilt die Abhängigkeit sowohl zur Build-
- als auch zur Laufzeit. Bibliothekskomponenten sollten
- normalerweise ohne Suffix angegeben werden,
- Tool-Komponenten mit <literal>_build</literal> und
- Plugin-Komponenten mit <literal>_run</literal>. Die
- gebräuchlichsten Komponenten werden im Folgenden
- angegeben (alle verfügbaren Komponenten sind in
- <varname>_QT_COMPONENTS_ALL</varname> in
- <filename>/usr/ports/Mk/bsd.qt.mk</filename>
- aufgelistet):</para>
-
- <table frame="none">
- <title>Verfügbare Qt4-Bibliothekskomponenten</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Name</entry>
- <entry>Beschreibung</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><literal>corelib</literal></entry>
- <entry>Kern-Bibliothek (kann weggelassen
- werden&ndash;&nbsp;es sei denn, der Port benutzt nichts
- außer <literal>corelib</literal>)</entry>
- </row>
-
- <row>
- <entry><literal>gui</literal></entry>
- <entry>Graphische
- Benutzeroberflächen-Bibliothek</entry>
- </row>
-
- <row>
- <entry><literal>network</literal></entry>
- <entry>Netzwerk-Bibliothek</entry>
- </row>
-
- <row>
- <entry><literal>opengl</literal></entry>
- <entry>OpenGL-Bibliothek</entry>
- </row>
-
- <row>
- <entry><literal>qt3support</literal></entry>
- <entry>Qt3-Kompatibilitäts-Bibliothek</entry>
- </row>
-
- <row>
- <entry><literal>qtestlib</literal></entry>
- <entry>Modultest-Bibliothek</entry>
- </row>
-
- <row>
- <entry><literal>script</literal></entry>
- <entry>Skript-Bibliothek</entry>
- </row>
-
- <row>
- <entry><literal>sql</literal></entry>
- <entry>SQL-Bibliothek</entry>
- </row>
-
- <row>
- <entry><literal>xml</literal></entry>
- <entry>XML-Bibliothek</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Sie können herausfinden, welche Bibliotheken die
- Applikation benötigt, indem Sie nach erfolgreicher
- Kompilierung <command>ldd</command> auf die
- Hauptbinärdatei anwenden.</para>
-
- <table frame="none">
- <title>Verfügbare Qt4-Tool-Komponenten</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Name</entry>
- <entry>Beschreibung</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><literal>moc</literal></entry>
- <entry>meta object compiler (wird zum Build fast
- jeder Qt-Applikation benötigt)</entry>
- </row>
-
- <row>
- <entry><literal>qmake</literal></entry>
- <entry>Makefile-Generator / Build-Werkzeug</entry>
- </row>
-
- <row>
- <entry><literal>rcc</literal></entry>
- <entry>Resource-Compiler (wird benötigt, falls
- die Applikation <filename>*.rc</filename> oder
- <filename>*.qrc</filename> Dateien
- enthält)</entry>
- </row>
-
- <row>
- <entry><literal>uic</literal></entry>
- <entry>User-Interface-Compiler (wird benötigt,
- falls die Applikation von Qt-Designer erzeugte
- <filename>*.ui</filename> Dateien enthält -
- gilt für praktisch jede Qt-Applikation mit
- einer GUI)</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <table frame="none">
- <title>Verfügbare Qt4-Plugin-Komponenten</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Name</entry>
- <entry>Beschreibung</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><literal>iconengines</literal></entry>
- <entry>SVG-Icon-Engine Plugin (wenn die Applikation
- SVG-Icons mitliefert)</entry>
- </row>
-
- <row>
- <entry><literal>imageformats</literal></entry>
- <entry>Bildformatplugins für GIF, JPEG, MNG und
- SVG (wenn die Applikation Bilddateien
- mitliefert)</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <example xml:id="qt4-components-example">
- <title>Qt4-Komponenten auswählen</title>
-
- <para>In diesem Beispiel benutzt die portierte Applikation
- die Qt4 GUI-Bibliothek, die Qt4-Core-Bibliothek, alle
- Qt4-Codeerzeugungstools und Qt4's Makefile Generator. Da
- die GUI-Bibliothek eine Abhängigkeit von der
- Core-Bibliothek impliziert, muss corelib nicht angegeben
- werden. Die Qt4-Codeerzeugungstools moc, uic und rcc,
- sowie der Makefile Generator qmake werden nur für den
- Build benötigt, deshalb bekommen die den Suffix
- <literal>_build</literal>:</para>
-
- <programlisting>USE_QT_VER= 4
-QT_COMPONENTS= gui moc_build qmake_build rcc_build uic_build</programlisting>
- </example>
- </sect2>
-
- <sect2 xml:id="qt-additional">
- <title>Zusätzliche Besonderheiten</title>
-
- <para>Wenn die Applikation keine
- <filename>configure</filename> Datei, sondern eine
- <filename>.pro</filename> Datei hat, können Sie das
- Folgende benutzen:</para>
-
- <programlisting>HAS_CONFIGURE= yes
-
-do-configure:
- @cd ${WRKSRC} &amp;&amp; ${SETENV} ${CONFIGURE_ENV} \
- ${QMAKE} -unix PREFIX=${PREFIX} texmaker.pro</programlisting>
-
- <para>Beachten Sie die Ähnlichkeit mit der
- <command>qmake</command>-Zeile im mitgelieferten
- <filename>BUILD.sh</filename>-Skript. Die
- Übergabe von <varname>CONFIGURE_ENV</varname>
- stellt sicher, dass <command>qmake</command> die
- <varname>QMAKESPEC</varname>-Variable übergeben
- bekommt, ohne die es nicht funktioniert.
- <command>qmake</command> erzeugt Standard-Makefiles,
- sodass es nicht nötig ist ein eigenes neues
- <buildtarget>build</buildtarget>-Target zu schreiben.</para>
-
- <para>Qt-Applikationen sind oft so geschrieben, dass sie
- plattformübergreifend sind, und oft ist X11/Unix
- nicht die Plattform, auf der sie entwickelt werden.
- Das sorgt oft für bestimmte fehlende
- Kleinigkeiten wie z.B.:</para>
-
- <itemizedlist>
- <listitem>
- <para><emphasis>Fehlende zusätzliche
- Include-Pfade.</emphasis>
- Viele Applikationen kommen mit System-Tray-Icon
- Support&ndash;&nbsp;unterlassen es aber Includes
- oder Bibliotheken in den X11 Verzeichnissen zu suchen.
- Sie können <command>qmake</command> über die
- Kommandozeile sagen, es soll Verzeichnisse zu den
- Include- und Bibliotheks-Suchpfaden
- hinzufügen - z.B.:</para>
-
- <programlisting>${QMAKE} -unix PREFIX=${PREFIX} INCLUDEPATH+=${LOCALBASE}/include \
- LIBS+=-L${LOCALBASE}/lib sillyapp.pro</programlisting>
- </listitem>
-
- <listitem>
- <para><emphasis>Falsche Installations-Pfade.</emphasis>
- Manchmal werden Daten wie Icons oder .desktop-Dateien
- per Vorgabe in Verzeichnisse installiert, die nicht von
- XDG-kompatiblen Applikationen durchsucht werden.
- <package>editors/texmaker</package>
- ist hierfür ein Beispiel&ndash;&nbsp;siehe
- <filename>patch-texmaker.pro</filename> im
- <filename>files</filename>-Verzeichnis dieses Ports
- als eine Vorlage, die zeigt, wie man dies direkt in der
- Qmake Projektdatei löst.</para>
- </listitem>
- </itemizedlist>
- </sect2>
- </sect1>
-
- <sect1 xml:id="using-kde">
- <title>Benutzung von KDE</title>
-
- <sect2 xml:id="kde-variables">
- <title>Variablen-Definitionen (KDE 3)</title>
-
- <table frame="none">
- <title>Variablen für Ports, die KDE 3 benutzen</title>
-
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><varname>USE_KDELIBS_VER</varname></entry>
- <entry>Der Port benutzt KDE-Bibliotheken. Die Variable
- spezifiziert die Major Version von KDE, die benutzt
- werden soll, und impliziert
- <varname>USE_QT_VER</varname> der entsprechenden
- Version. Der einzig mögliche Wert ist
- <literal>3</literal>.</entry>
- </row>
-
- <row>
- <entry><varname>USE_KDEBASE_VER</varname></entry>
- <entry>Der Port benutzt die KDE-Base. Die Variable
- spezifiziert die Major Version von KDE, die benutzt
- werden soll, und impliziert
- <varname>USE_QT_VER</varname> der entsprechenden
- Version. Der einzig mögliche Wert ist
- <literal>3</literal>.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect2>
-
- <sect2 xml:id="kde4-variables">
- <title>Variablen-Definitionen (KDE 4)</title>
-
- <para>Falls Ihre Anwendung von KDE 4 abhängt, weisen Sie
- <varname>USE_KDE4</varname> eine Liste mit benötigten
- Komponenten zu. Die am häufigsten gebrauchten sind
- unten aufgelistet (<varname>_USE_KDE4_ALL</varname> in
- <filename>/usr/ports/Mk/bsd.kde4.mk</filename> enthält
- stets die aktuelle Liste):</para>
-
- <table frame="none">
- <title>Verfügbare KDE 4-Komponenten</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Name</entry>
- <entry>Beschreibung</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><literal>akonadi</literal></entry>
- <entry>Personal Information Management
- (PIM)-Speicherdienst</entry>
- </row>
-
- <row>
- <entry><literal>automoc4</literal></entry>
- <entry>Lässt den Port das Bauwerkzeug automoc4
- verwenden.</entry>
- </row>
-
- <row>
- <entry><literal>kdebase</literal></entry>
- <entry>Grundlegende KDE-Anwendungen (Konqueror,
- Dolphin, Konsole)</entry>
- </row>
-
- <row>
- <entry><literal>kdeexp</literal></entry>
- <entry>Experimentelle KDE-Bibliotheken (mit einer API,
- die als non-stable eingestuft ist)</entry>
- </row>
-
- <row>
- <entry><literal>kdehier</literal></entry>
- <entry>Stellt allgemeine KDE-Verzeichnisse
- bereit</entry>
- </row>
-
- <row>
- <entry><literal>kdelibs</literal></entry>
- <entry>Die grundlegenden KDE-Bibliotheken</entry>
- </row>
-
- <row>
- <entry><literal>kdeprefix</literal></entry>
- <entry>Falls in der Liste vorhanden, wird der Port
- unter <literal>&dollar;{KDE4_PREFIX}</literal> statt
- <literal>&dollar;{LOCALBASE}</literal>
- installiert</entry>
- </row>
-
- <row>
- <entry><literal>pimlibs</literal></entry>
- <entry>PIM-Bibliotheken</entry>
- </row>
-
- <row>
- <entry><literal>workspace</literal></entry>
- <entry>Anwendungen und Bibliotheken, welche die
- Desktopumgebung gestalten (Plasma, KWin)</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>KDE 4-Ports werden unter
- <literal>&dollar;{KDE4_PREFIX}</literal>, zur Zeit
- <filename>/usr/local/kde4</filename>, installiert, um
- Konflikte mit KDE 3-Ports zu verhindern. Dies wird durch
- Auflisten der Komponente <literal>kdeprefix</literal>
- erreicht, welche die standardmäßig gesetzte
- Variable <varname>PREFIX</varname> überschreibt. Die
- Ports übernehmen jedoch, jeden über die
- Umgebungsvariable <envar>MAKEFLAGS</envar> oder
- <application>make</application>-Parameter festgelegten Wert
- für <varname>PREFIX</varname>.</para>
-
- <para>Es könnte bei der Installation von KDE 4-Ports zu
- Konflikten mit KDE 3-Ports kommen, sodass diese bei
- aktivierter <literal>kdeprefix</literal>-Komponente unter
- <literal>&dollar;{KDE4_PREFIX}</literal> installiert werden.
- Der Standardwert von <literal>KDE4_PREFIX</literal> ist zur
- Zeit <filename>/usr/local/kde4</filename>. Es ist auch
- möglich, KDE 4-Ports unter einem angepassten
- <literal>PREFIX</literal> zu installieren. Wenn
- <literal>PREFIX</literal> als
- <envar>MAKEFLAGS</envar>-Umgebungsvariable oder als
- <application>make</application>-Parameter gesetzt wird,
- überschreibt dies den von <literal>kdeprefix</literal>
- festgelegten Wert.</para>
-
- <example xml:id="kde4-components-example">
- <title><varname>USE_KDE4</varname>-Beispiel</title>
-
- <para>Dies ist ein einfaches Beispiel für einen KDE
- 4-Port. <varname>USE_CMAKE</varname> weist den Port an,
- <application>CMake</application>, ein unter KDE
- 4-Projekten weit verbreitetes Konfigurationswerkzeug, zu
- verwenden. <varname>USE_KDE4</varname> legt die
- Abhängigkeit von KDE-Bibliotheken und die Verwendung
- von <application>automoc4</application> während der
- Kompilierung fest. Mit Hilfe des configure-Protokolls
- können die KDE-Komponenten und andere
- Abhängigkeiten festgestellt werden.
- <varname>USE_KDE4</varname> impliziert
- <varname>USE_QT_VER</varname> nicht. Falls der Port Qt
- 4-Komponenten benötigt, sollten
- <varname>USE_QT_VER</varname> gesetzt und verlangte
- Komponenten festgelegt werden.</para>
-
- <programlisting>USE_CMAKE= yes
-USE_KDE4= automoc4 kdelibs kdeprefix
-USE_QT_VER= 4
-QT_COMPONENTS= qmake_build moc_build rcc_build uic_build</programlisting>
- </example>
- </sect2>
- </sect1>
-
- <sect1 xml:id="using-java">
- <title>Benutzung von Java</title>
-
- <sect2 xml:id="java-variables">
- <title>Variablen-Definitionen</title>
-
- <para>Wenn Ihr Port ein Java&trade; Development Kit (JDK&trade;)
- benötigt, entweder zum Bauen, zur Laufzeit oder
- sogar, um das Distfile auszupacken, dann sollten Sie
- <varname>USE_JAVA</varname> setzen.</para>
-
- <para>Es gibt mehrere JDKs in der
- Ports-Sammlung&ndash;&nbsp;von verschiedenen Anbietern
- und in verschiedenen Versionen.
- Wenn Ihr Port eine bestimmte dieser Versionen
- benötigt, können Sie definieren welche.
- Die aktuelle Version ist <package>java/jdk16</package>.</para>
-
- <table frame="none">
- <title>Variablen, die von Ports, die Java benutzen, gesetzt
- werden müssen</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Variable</entry>
- <entry>Bedeutung</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>USE_JAVA</varname></entry>
- <entry>Sollte definiert sein, damit die übrigen
- Variablen irgendeinen Effekt haben.</entry>
- </row>
-
- <row>
- <entry><varname>JAVA_VERSION</varname></entry>
- <entry>Durch Leerzeichen getrennte Liste von geeigneten
- Java-Versionen für den Port. Ein optionales
- <literal>"+"</literal> ermöglicht die Angabe eines
- Bereiches von Versionen (mögliche Werte:
- <literal>1.5[+] 1.6[+] 1.7[+]</literal>).</entry>
- </row>
-
- <row>
- <entry><varname>JAVA_OS</varname></entry>
- <entry>Durch Leerzeichen getrennte Liste von geeigneten
- JDK-Port-Betriebssystemen für den Port. (erlaubte
- Werte: <literal>native linux</literal>).</entry>
- </row>
-
- <row>
- <entry><varname>JAVA_VENDOR</varname></entry>
- <entry>Durch Leerzeichen getrennte Liste von geeigneten
- JDK-Port-Anbietern für den Port. (erlaubte Werte:
- <literal>freebsd bsdjava sun openjdk</literal>).</entry>
- </row>
-
- <row>
- <entry><varname>JAVA_BUILD</varname></entry>
- <entry>Bedeutet, falls gesetzt, dass der ausgewählte
- JDK-Port zu den Build-Abhängigkeiten des Ports
- hinzugefügt werden soll.</entry>
- </row>
-
- <row>
- <entry><varname>JAVA_RUN</varname></entry>
- <entry>Bedeutet, falls gesetzt, dass der ausgewählte
- JDK-Port zu den Laufzeit-Abhängigkeiten des Ports
- hinzugefügt werden soll.</entry>
- </row>
-
- <row>
- <entry><varname>JAVA_EXTRACT</varname></entry>
- <entry>Bedeutet, falls gesetzt, dass der ausgewählte
- JDK-Port zu den Extract-Abhängigkeiten des Ports
- hinzugefügt werden soll.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Das Folgende ist eine Liste aller Variablen, die ein
- Port bekommt, nachdem er <varname>USE_JAVA</varname>
- gesetzt hat:</para>
-
- <table frame="none">
- <title>Bereitgestellte Variablen für Ports,
- die Java benutzen</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Variable</entry>
- <entry>Wert</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>JAVA_PORT</varname></entry>
- <entry>Der Name des JDK-Ports (z.B.
- <literal>'java/diablo-jdk16'</literal>).</entry>
- </row>
-
- <row>
- <entry><varname>JAVA_PORT_VERSION</varname></entry>
- <entry>Die volle Version des JDK Ports (z.B.
- <literal>'1.6.0'</literal>). Wenn Sie nur die ersten
- beiden Stellen dieser Versionsnummer benötigen,
- benutzen Sie <varname>
- ${JAVA_PORT_VERSION:C/^([0-9])\.([0-9])(.*)$/\1.\2/}</varname>.</entry>
- </row>
-
- <row>
- <entry><varname>JAVA_PORT_OS</varname></entry>
- <entry>Das vom JDK-Port benutzte Betriebssystem (z.B.
- <literal>'native'</literal>).</entry>
- </row>
-
- <row>
- <entry><varname>JAVA_PORT_VENDOR</varname></entry>
- <entry>Der Anbieter des JDK-Ports (z.B.
- <literal>'freebsd'</literal>).</entry>
- </row>
-
- <row>
- <entry><varname>JAVA_PORT_OS_DESCRIPTION</varname></entry>
- <entry>Beschreibung des vom JDK-Port benutzten
- Betriebssystems (z.B.
- <literal>'Native'</literal>).</entry>
- </row>
-
- <row>
- <entry><varname>JAVA_PORT_VENDOR_DESCRIPTION</varname></entry>
- <entry>Beschreibung des Anbieters des JDK-Ports (z.B.
- <literal>'FreeBSD Foundation'</literal>).</entry>
- </row>
-
- <row>
- <entry><varname>JAVA_HOME</varname></entry>
- <entry>Pfad zum Installationsverzeichnis des JDK (z.B.
- <filename>'/usr/local/diablo-jdk1.6.0'</filename>).</entry>
- </row>
-
- <row>
- <entry><varname>JAVAC</varname></entry>
- <entry>Pfad zum Java-Compiler, der benutzt werden soll
- (z.B. <filename>'/usr/local/diablo-jdk1.6.0/bin/javac'</filename>.</entry>
- </row>
-
- <row>
- <entry><varname>JAR</varname></entry>
- <entry>Pfad zum <command>jar</command>-Werkzeug, das
- benutzt werden soll
- (z.B.'<filename>'/usr/local/diablo-jdk1.6.0/bin/jar</filename> oder
- <filename>'/usr/local/bin/fastjar'</filename>).</entry>
- </row>
-
- <row>
- <entry><varname>APPLETVIEWER</varname></entry>
- <entry>Pfad zum <command>appletviewer</command>-Werkzeug
- (z.B. <filename>'/usr/local/diablo-jdk1.6.0/bin/appletviewer'</filename>).</entry>
- </row>
-
- <row>
- <entry><varname>JAVA</varname></entry>
- <entry>Pfad zur <command>java</command> Binärdatei.
- Benutzen Sie dies, um Java-Programme auszuführen
- (z.B.<filename>'/usr/local/diablo-jdk1.6.0/bin/java'</filename>).</entry>
- </row>
-
- <row>
- <entry><varname>JAVADOC</varname></entry>
- <entry>Pfad zum
- <command>javadoc</command>-Werkzeug.</entry>
- </row>
-
- <row>
- <entry><varname>JAVAH</varname></entry>
- <entry>Pfad zum <command>javah</command>-Programm.</entry>
- </row>
-
- <row>
- <entry><varname>JAVAP</varname></entry>
- <entry>Pfad zum <command>javap</command>-Programm.</entry>
- </row>
-
- <row>
- <entry><varname>JAVA_KEYTOOL</varname></entry>
- <entry>Pfad zum <command>keytool</command>-Werkzeug.</entry>
- </row>
-
- <row>
- <entry><varname>JAVA_N2A</varname></entry>
- <entry>Pfad zum
- <command>native2ascii</command>-Werkzeug.</entry>
- </row>
-
- <row>
- <entry><varname>JAVA_POLICYTOOL</varname></entry>
- <entry>Pfad zum <command>policytool</command> Programm.</entry>
- </row>
-
- <row>
- <entry><varname>JAVA_SERIALVER</varname></entry>
- <entry>Pfad zum
- <command>serialver</command>-Werkzeug.</entry>
- </row>
-
- <row>
- <entry><varname>RMIC</varname></entry>
- <entry>Pfad zum RMI Stub/Skeleton-Generator,
- <command>rmic</command>.</entry>
- </row>
-
- <row>
- <entry><varname>RMIREGISTRY</varname></entry>
- <entry>Pfad zum RMI Registry-Werkzeug,
- <command>rmiregistry</command>.</entry>
- </row>
-
- <row>
- <entry><varname>RMID</varname></entry>
- <entry>Pfad zum RMI Daemon <command>rmid</command>.</entry>
- </row>
-
- <row>
- <entry><varname>JAVA_CLASSES</varname></entry>
- <entry>Pfad zum Archiv, das die JDK-Klassendateien
- enthält, <filename>${JAVA_HOME}/jre/lib/rt.jar</filename>.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Sie können das <literal>java-debug</literal>
- make-Target benutzen, um Information zum Debuggen
- Ihres Ports zu erhalten. Es wird die Werte vieler
- der obenangegebenen Variablen anzeigen.</para>
-
- <para>Zusätzlich sind die folgenden Konstanten
- definiert, damit alle Java-Ports auf eine konsistente
- Art installiert werden können:</para>
-
- <table frame="none">
- <title>Konstanten, die für Ports, welche Java benutzen,
- definiert sind</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Konstante</entry>
- <entry>Wert</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>JAVASHAREDIR</varname></entry>
- <entry>Das Basis-Verzeichnis für alles, was mit Java
- zusammenhängt. Standardmäßig
- <filename>${PREFIX}/share/java</filename>.</entry>
- </row>
-
- <row>
- <entry><varname>JAVAJARDIR</varname></entry>
- <entry>Das Verzeichnis, wohin JAR-Dateien installiert
- werden sollen. Standardmäßig
- <filename>${JAVASHAREDIR}/classes</filename>.</entry>
- </row>
-
- <row>
- <entry><varname>JAVALIBDIR</varname></entry>
- <entry>Das Verzeichnis, in dem JAR-Dateien, die von
- anderen Ports installiert wurden, liegen.
- Standardmäßig <filename>
- ${LOCALBASE}/share/java/classes</filename>.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Die entsprechenden Einträge sind sowohl in
- <varname>PLIST_SUB</varname> (dokumentiert in
- <xref linkend="plist-sub"/>) als auch in
- <varname>SUB_LIST</varname> definiert.</para>
- </sect2>
-
- <sect2 xml:id="java-building-with-ant">
- <title>Kompilieren mit Ant</title>
-
- <para>Wenn der Port mit Apache Ant kompiliert werden soll,
- muss er <varname>USE_ANT</varname> setzen. Ant wird dann
- als das sub-make-Kommando betrachtet. Wenn kein
- <literal>do-build</literal>-Target vom Port definiert ist,
- wird eine Standardvorgabe benutzt, die einfach Ant
- entsprechend <varname>MAKE_ENV</varname>,
- <varname>MAKE_ARGS</varname> und
- <varname>ALL_TARGET</varname> aufruft. Das ähnelt dem
- <varname>USE_GMAKE</varname>-Mechanismus, der in <xref linkend="building"/> dokumentiert ist.</para>
- </sect2>
-
- <sect2 xml:id="java-best-practices">
- <title>Optimales Verfahren</title>
-
- <para>Wenn Sie eine Java-Bibliothek portieren, sollte Ihr Port
- die JAR-Datei(en) in <filename>${JAVAJARDIR}</filename>
- installieren, und alles andere unter
- <filename>${JAVASHAREDIR}/${PORTNAME}</filename>
- (ausgenommen die Dokumentation - siehe unten). Um die
- Größe der Packlistendatei zu reduzieren,
- können die JAR-Datei(en) direkt im
- <filename>Makefile</filename> angegeben werden. Benutzen
- Sie einfach die folgende Anweisung (wobei
- <filename>myport.jar</filename> der Name der JAR-Datei ist,
- die als Teil des Ports installiert wird):</para>
-
- <programlisting>PLIST_FILES+= %%JAVAJARDIR%%/myport.jar</programlisting>
-
- <para>Beim Portieren einer Java-Applikation installiert der
- Port normalerweise alles unter einem einzigen Verzeichnis
- (inklusive seiner JAR-Abhängigkeiten). Die Benutzung
- von <filename>${JAVASHAREDIR}/${PORTNAME}</filename>
- wird in dieser Beziehung dringend empfohlen. Es liegt
- im Entscheidungsbereich des Portierenden, ob der Port
- die zusätzlichen JAR-Abhängigkeiten unter
- diesem Verzeichnis installieren oder direkt die schon
- installierten (aus <filename>${JAVAJARDIR}</filename>)
- benutzen soll.</para>
-
- <para>Unabhängig von der Art Ihres Ports (Bibliothek
- oder Applikation), sollte die zusätzliche Dokumentation
- an die <link linkend="install-documentation">gleiche Stelle</link>
- installiert werden wie bei jedem anderen Port auch.
- Das JavaDoc-Werkzeug ist dafür bekannt einen
- unterschiedlichen Satz von Dateien abhängig von der
- Version des benutzten JDKs zu erstellen. Für Ports,
- die nicht die Benutzung eines bestimmten JDKs vorgeben,
- ist es deshalb eine komplexe Aufgabe die Packliste
- (<filename>pkg-plist</filename>) festzulegen. Dies ist
- ein Grund, warum dringend angeraten wird, das
- <varname>PORTDOCS</varname>-Makro zu benutzen.
- Außerdem, selbst wenn Sie den Satz von Dateien,
- den <command>javadoc</command> erzeugen wird,
- voraussagen können, die Größe der
- resultierenden <filename>pkg-plist</filename>
- befürwortet die Benutzung von
- <varname>PORTDOCS</varname>.</para>
-
- <para>Der Vorgabewert für <varname>DATADIR</varname> ist
- <filename>${PREFIX}/share/${PORTNAME}</filename>. Es ist
- eine gute Idee, <varname>DATADIR</varname> für
- Java-Ports stattdessen auf
- <filename>${JAVASHAREDIR}/${PORTNAME}</filename> zu setzen.
- In der Tat wird <varname>DATADIR</varname> automatisch zu
- <varname>PLIST_SUB</varname> (dokumentiert in <xref linkend="plist-sub"/>) hinzugefügt, d.h. Sie können
- <literal>%%DATADIR%%</literal> direkt in
- <filename>pkg-plist</filename> benutzen.</para>
-
- <para>Zu der Frage, ob Java-Ports aus dem Quelltext gebaut
- werden, oder direkt bereitgestellte binäre
- Distributionen benutzt werden sollten, gab es, als dies
- geschrieben wurde, keine definierte Richtlinie. Allerdings
- ermutigen Mitglieder des <link xlink:href="http://www.freebsd.org/java/">&os;
- Java-Projekts</link> Porter dazu, Ihre Ports aus dem
- Quelltext kompilieren zu lassen, wann immer dies kein
- Problem darstellt.</para>
-
- <para>Alle Eigenschaften, die in diesem Abschnitt
- präsentiert wurden sind in
- <filename>bsd.java.mk</filename> implementiert.
- Sollten Sie jemals der Meinung sein, dass Ihr Port
- ausgefeiltere Java-Unterstützung benötigt,
- schauen Sie bitte erst in das <link xlink:href="http://www.freebsd.org/cgi/cvsweb.cgi/ports/Mk/bsd.java.mk">
- bsd.java.mk CVS Log</link>, weil es normalerweise immer
- etwas Zeit braucht bis die neuesten Eigenschaften
- dokumentiert sind. Wenn Sie glauben, dass der fehlende
- Support auch für viele andere Java Ports nützlich
- sein könnte, wenden Sie sich bitte an die
- &a.java;.</para>
-
- <para>Obwohl es eine <literal>java</literal>-Kategorie
- für Fehlerberichte gibt, bezieht sich diese auf die
- JDK-Portierungsbemühungen des &os; Java-Projektes.
- Deshalb sollten Sie Ihren Java-Port in der
- <literal>ports</literal>-Kategorie einreichen wie bei
- jeden anderen Port auch - es sei denn, die Angelegenheit,
- die Sie zu klären versuchen, steht in Zusammenhang
- entweder mit einer JDK-Implementierung oder
- <filename>bsd.java.mk</filename>.</para>
-
- <para>Gleichermaßen gibt es eine definierte Richtlinie
- für die <varname>CATEGORIES</varname> eines Java-Ports,
- die in <xref linkend="makefile-categories"/> erklärt
- wird.</para>
- </sect2>
- </sect1>
-
- <sect1 xml:id="using-php">
- <title>Webanwendungen, Apache und PHP</title>
-
- <sect2 xml:id="using-apache">
- <title>Apache</title>
-
- <table frame="none">
- <title>Variablen für Ports, die Apache
- verwenden</title>
-
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><varname>USE_APACHE</varname></entry>
- <entry>Der Port benötigt Apache. Mögliche Werte:
- <literal>yes</literal> (beliebige Version),
- <literal>1.3</literal>, <literal>2.0</literal>,
- <literal>2.2</literal>, <literal>2.0+</literal>,
- etc.&nbsp;&ndash;&nbsp;Standard ist Version
- <literal>1.3</literal>.</entry>
- </row>
-
- <row>
- <entry><varname>WITH_APACHE2</varname></entry>
- <entry>Der Port benötigt Apache 2.0. Ist diese
- Variable nicht gesetzt, so benötigt der Port
- Apache 1.3. Diese Variable ist veraltet und sollte
- nicht mehr verwendet werden.</entry>
- </row>
-
- <row>
- <entry><varname>APXS</varname></entry>
- <entry>Vollständiger Pfad zu der
- <command>apxs</command> Binärdatei. Die Variable
- kann neu gesetzt werden.</entry>
- </row>
-
- <row>
- <entry><varname>HTTPD</varname></entry>
- <entry>Vollständiger Pfad zu der
- <command>httpd</command> Binärdatei.
- Die Variable kann neu gesetzt werden.</entry>
- </row>
-
- <row>
- <entry><varname>APACHE_VERSION</varname></entry>
- <entry>Beinhaltet die Versionsnummer des aktuell
- installierten Apache (nur lesbare Variable).
- Diese Variable ist nach Einbinden der Datei
- <filename>bsd.port.pre.mk</filename>
- verfügbar. Mögliche Werte:
- <literal>13</literal>, <literal>20</literal>,
- <literal>22</literal>.</entry>
- </row>
-
- <row>
- <entry><varname>APACHEMODDIR</varname></entry>
- <entry>Verzeichnis der Apache-Module. Diese Variable wird
- automatisch in pkg-plist ersetzt.</entry>
- </row>
-
- <row>
- <entry><varname>APACHEINCLUDEDIR</varname></entry>
- <entry>Verzeichnis der Apache Header-Dateien. Diese
- Variable wird automatisch in pkg-plist ersetzt.</entry>
- </row>
-
- <row>
- <entry><varname>APACHEETCDIR</varname></entry>
- <entry> Verzeichnis der Apache-Konfigurationsdateien.
- Diese Variable wird automatisch in pkg-plist
- ersetzt.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <table frame="none">
- <title>Nützliche Variablen für Ports von
- Apache-Modulen</title>
-
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><varname>MODULENAME</varname></entry>
- <entry>Name des Moduls. Standardwert ist
- <varname>PORTNAME</varname>. Beispiel:
- <literal>mod_hello</literal></entry>
- </row>
-
- <row>
- <entry><varname>SHORTMODNAME</varname></entry>
- <entry>Der gekürzte Name des Moduls.
- Standardmäßig
- wird der Wert von <varname>MODULENAME</varname>
- übernommen.
- Beispiel: <literal>hello</literal></entry>
- </row>
-
- <row>
- <entry><varname>AP_FAST_BUILD</varname></entry>
- <entry>Verwende <command>apxs</command> zum Kompilieren
- und Installieren des Moduls.</entry>
- </row>
-
- <row>
- <entry><varname>AP_GENPLIST</varname></entry>
- <entry>Eine <filename>pkg-plist</filename> wird
- automatisch erzeugt.</entry>
- </row>
-
- <row>
- <entry><varname>AP_INC</varname></entry>
- <entry>Verzeichnis für zusätzliche
- Header-Dateien, die beim Kompilieren mitverwendet
- werden.</entry>
- </row>
-
- <row>
- <entry><varname>AP_LIB</varname></entry>
- <entry>Verzeichnis für zusätzliche
- Bibliothek-Dateien, welche beim Kompilieren
- mitverwendet werden.</entry>
- </row>
-
- <row>
- <entry><varname>AP_EXTRAS</varname></entry>
- <entry>Zusätzliche Flags für
- <command>apxs</command>.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect2>
-
- <sect2 xml:id="web-apps">
- <title>Webanwendungen</title>
-
- <para>Webanwendungen sollten nach <filename>
- PREFIX/www/programmname
- </filename> installiert werden.
- Der Einfachheit halber ist dieser Pfad sowohl im
- <filename>Makefile</filename> als auch in
- <filename>pkg-plist</filename> als
- <varname>WWWDIR</varname> verfügbar. Der relative
- Pfad <varname>PREFIX</varname> ist hingegen im
- <filename>Makefile</filename> durch die Variable
- <varname>WWWDIR_REL</varname> festgelegt.</para>
-
- <para>Der Benutzername und die Benutzergruppe,
- mit deren Rechte Webanwendungen laufen, sind in
- <varname>WWWOWN</varname> und <varname>WWWGRP</varname>
- festgelegt. Standardwert ist bei beiden
- <literal>www</literal>. Falls ein Port mit anderen
- Rechten gestartet werden soll, so sollte die Anweisung
- <literal>WWWOWN?= myuser</literal> verwendet werden. Dies
- vereinfacht dem Benutzer eine Anpassung dieser Werte.</para>
-
- <para>Falls die Webanwendung nicht explizit Apache
- benötigt, so sollte dieser auch nicht als
- Abhängigkeit des Ports aufgeführt werden.
- Dadurch bleibt es dem Benutzer überlassen
- Apache oder einen anderen Webserver zu verwenden.</para>
- </sect2>
-
- <sect2 xml:id="php-variables">
- <title>PHP</title>
-
- <table frame="none">
- <title>Variablen für Ports, die PHP verwenden</title>
-
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><varname>USE_PHP</varname></entry>
- <entry>Der Port benötigt PHP. Der Wert
- <literal>yes</literal> bewirkt eine Abhängigkeit
- des Ports von PHP. Es kann auch eine Liste der
- benötigten PHP-Erweiterungen angegeben
- werden. Beispiel:
- <literal>pcre xml gettext</literal></entry>
- </row>
-
- <row>
- <entry><varname>DEFAULT_PHP_VER</varname></entry>
- <entry>Legt die Version von PHP fest, die
- standardmäßig installiert wird, falls noch
- kein PHP vorhanden ist. Standardwert ist
- <literal>4</literal>. Mögliche Werte sind:
- <literal>4</literal>,<literal>5</literal></entry>
- </row>
-
- <row>
- <entry><varname>IGNORE_WITH_PHP</varname></entry>
- <entry>Der Port funktioniert nicht mit der angegebenen
- Version von PHP. Mögliche Werte:
- <literal>4</literal>, <literal>5</literal></entry>
- </row>
-
- <row>
- <entry><varname>USE_PHPIZE</varname></entry>
- <entry>Der Port wird als PHP-Erweiterung gebaut.</entry>
- </row>
-
- <row>
- <entry><varname>USE_PHPEXT</varname></entry>
- <entry>Der Port wird wie eine PHP-Erweiterung
- behandelt&nbsp;&ndash;&nbsp;Installation und
- Eintragung in die PHP-Registry für
- Erweiterungen.</entry>
- </row>
-
- <row>
- <entry><varname>USE_PHP_BUILD</varname></entry>
- <entry>Setzt PHP als build-Anhängigkeit.</entry>
- </row>
-
- <row>
- <entry><varname>WANT_PHP_CLI</varname></entry>
- <entry>Benötigt die Kommandozeilen-Version von
- PHP.</entry>
- </row>
-
- <row>
- <entry><varname>WANT_PHP_CGI</varname></entry>
- <entry>Benötigt die CGI-Version von PHP.</entry>
- </row>
-
- <row>
- <entry><varname>WANT_PHP_MOD</varname></entry>
- <entry>Benötigt das Apache-Modul von PHP.</entry>
- </row>
-
- <row>
- <entry><varname>WANT_PHP_SCR</varname></entry>
- <entry>Benötigt die Kommandozeilen- oder die
- CGI-Version von PHP.</entry>
- </row>
-
- <row>
- <entry><varname>WANT_PHP_WEB</varname></entry>
- <entry>Benötigt das Apache-Modul oder die CGI-Version
- von PHP.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect2>
-
- <sect2>
- <title>PEAR Module</title>
-
- <para>Das Portieren von PEAR-Modulen ist sehr einfach.</para>
-
- <para>Mit Hilfe der Variablen <varname>FILES</varname>,
- <varname>TESTS</varname>, <varname>DATA</varname>,
- <varname>SQLS</varname>, <varname>SCRIPTFILES</varname>,
- <varname>DOCS</varname> und <varname>EXAMPLES</varname>
- können die zu installierenden Dateien angegeben werden.
- Alle aufgeführten Dateien werden automatisch in die
- jeweiligen Verzeichnisse installiert und der Datei
- <filename>pkg-plist</filename> hinzugefügt.</para>
-
- <para>Die Datei <filename>
- &dollar;{PORTSDIR}/devel/pear/bsd.pear.mk</filename>
- muss am Ende des <filename>Makefile</filename>s
- eingebunden werden.</para>
-
- <example xml:id="pear-makefile">
- <title>Beispiel eines Makefiles für eine PEAR
- Klasse</title>
-
- <programlisting>PORTNAME= Date
-PORTVERSION= 1.4.3
-CATEGORIES= devel www pear
-
-MAINTAINER= example@domain.com
-COMMENT= PEAR Date and Time Zone Classes
-
-BUILD_DEPENDS= ${PEARDIR}/PEAR.php:${PORTSDIR}/devel/pear-PEAR
-RUN_DEPENDS= ${BUILD_DEPENDS}
-
-FILES= Date.php Date/Calc.php Date/Human.php Date/Span.php \
- Date/TimeZone.php
-TESTS= test_calc.php test_date_methods_span.php testunit.php \
- testunit_date.php testunit_date_span.php wknotest.txt \
- bug674.php bug727_1.php bug727_2.php bug727_3.php \
- bug727_4.php bug967.php weeksinmonth_4_monday.txt \
- weeksinmonth_4_sunday.txt weeksinmonth_rdm_monday.txt \
- weeksinmonth_rdm_sunday.txt
-DOCS= TODO
-_DOCSDIR= .
-
-.include &lt;bsd.port.pre.mk&gt;
-.include "&dollar;{PORTSDIR}/devel/pear/bsd.pear.mk"
-.include &lt;bsd.port.post.mk&gt;</programlisting>
-
- </example>
- </sect2>
- </sect1>
-
- <sect1 xml:id="using-python">
- <title>Python benutzen</title>
-
- <para>Die Ports unterstützen parallele Installationen
- mehrerer Python-Versionen. Ports sollten sicherstellen,
- dass der richtige <command>python</command>-Interpreter
- verwendet wird&nbsp;&ndash;&nbsp;entsprechend der durch den
- Benutzer definierbaren Variable
- <varname>PYTHON_VERSION</varname>. Häufig bedeutet
- dies, dass der Pfad zum <command>python</command>-Interpreter
- durch den Wert der Variablen <varname>PYTHON_CMD</varname>
- ersetzt werden muss.</para>
-
- <para>Ports, die Dateien unter
- <varname>PYTHON_SITELIBDIR</varname> installieren, sollten
- <literal>pyXY-</literal> als Präfix des Paketnamens
- haben, sodass in deren Paketname die zugehörige
- Python Version aufgeführt wird.</para>
-
- <programlisting>PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}</programlisting>
-
- <table frame="none">
- <title>Nützliche Variablen für Ports,
- die Python verwenden</title>
-
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><varname>USE_PYTHON</varname></entry>
- <entry>Der Port benötigt Python. Die minimal
- benötigte Version kann durch Werte wie
- <literal>2.3+</literal> angegeben werden.
- Bereiche von Versionsnummern können durch Angabe der
- minimalen und maximalen Versionsnummer, getrennt durch
- einen Gedankenstrich, festgelegt werden, z.B.:
- <literal>2.1-2.3</literal></entry>
- </row>
-
- <row>
- <entry><varname>USE_PYDISTUTILS</varname></entry>
- <entry>Verwende Python-distutils zum Konfigurieren,
- Kompilieren und Installieren. Dies ist erforderlich,
- falls der Port eine <filename>setup.py</filename>-Datei
- beinhaltet. Dadurch werden die
- <buildtarget>do-build</buildtarget> und
- <buildtarget>do-install</buildtarget>-Ziele und eventuell
- auch das <buildtarget>do-configure</buildtarget>-Ziel
- übergangen, falls <varname>GNU_CONFIGURE</varname>
- nicht definiert ist.</entry>
- </row>
-
- <row>
- <entry><varname>PYTHON_PKGNAMEPREFIX</varname></entry>
- <entry>Wird als <varname>PKGNAMEPREFIX</varname> verwendet,
- um Pakete für unterschiedliche Python-Versionen zu
- trennen. Beispiel: <literal>py24-</literal></entry>
- </row>
-
- <row>
- <entry><varname>PYTHON_SITELIBDIR</varname></entry>
- <entry>Verzeichnis des site-Pakete Baums, der das
- Installationsverzeichnis von Python (üblicherweise
- <varname>LOCALBASE</varname>) beinhaltet. Die
- <varname>PYTHON_SITELIBDIR</varname>-Variable kann
- sehr nützlich bei der Installation von
- Python-Modulen sein.</entry>
- </row>
-
- <row>
- <entry><varname>PYTHONPREFIX_SITELIBDIR</varname></entry>
- <entry>Die präfix-freie Variante von
- <varname>PYTHON_SITELIBDIR</varname>. Benutzen Sie immer
- <literal>%%PYTHON_SITELIBDIR%%</literal> in
- <filename>pkg-plist</filename>, wenn möglich. Der
- Standardwert von <literal>%%PYTHON_SITELIBDIR%%</literal>
- ist <literal>
- lib/python%%PYTHON_VERSION%%/site-packages
- </literal></entry>
- </row>
-
- <row>
- <entry><varname>PYTHON_CMD</varname></entry>
- <entry>Kommandozeilen-Interpreter für Python mit
- Versionsnummer.</entry>
- </row>
-
- <row>
- <entry><varname>PYNUMERIC</varname></entry>
- <entry>Liste der Abhängigkeiten für numerische
- Erweiterungen.</entry>
- </row>
-
- <row>
- <entry><varname>PYNUMPY</varname></entry>
- <entry>Liste der Abhängigkeiten für die neue
- numerische Erweiterung numpy.
- (<varname>PYNUMERIC</varname> ist vom Anbieter als
- veraltet deklariert)</entry>
- </row>
-
- <row>
- <entry><varname>PYXML</varname></entry>
- <entry>Liste der Abhängigkeiten für
- XML-Erweiterungen (wird ab Python 2.0 nicht mehr
- benötigt, da im Basispaket enthalten).</entry>
- </row>
-
- <row>
- <entry><varname>USE_TWISTED</varname></entry>
- <entry>Setzt die Abhängigkeit des Ports von
- twistedCore. Die Liste der erforderlichen Komponenten
- kann als Wert spezifiziert werden. Beispiel:
- <literal>web lore pair flow</literal></entry>
- </row>
-
- <row>
- <entry><varname>USE_ZOPE</varname></entry>
- <entry>Setzt Zope, eine Plattform für Webanwendungen,
- als Abhängigkeit des Ports. Setzt die
- Versionsabhängigkeit von Python auf 2.3. Setzt
- <varname>ZOPEBASEDIR</varname> auf das Verzeichnis,
- in welches Zope installiert wurde.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Eine vollständige Liste aller verfügbaren
- Variablen ist in <filename>/usr/ports/Mk/bsd.python.mk
- </filename> zu finden.</para>
- </sect1>
-
- <sect1 xml:id="using-tcl">
- <title>Benutzung von <application>Tcl/Tk</application></title>
-
- <para>Die Ports-Sammlung unterstützt die parallele
- Installation mehrerer
- <application>Tcl/Tk</application>-Versionen. Ports sollten
- mindestens die vorgegebene
- <application>Tcl/Tk</application>-Version oder höher zu
- unterstützen versuchen anhand der Variablen
- <varname>USE_TCL</varname> und <varname>USE_TK</varname>. Es
- ist möglich, die gewünschte Version von
- <command>tcl</command> mit der Variable
- <varname>WITH_TCL_VER</varname> vorzuschreiben.</para>
-
- <table frame="none">
- <title>Äußerst nützliche Variablen für
- Ports, die <application>Tcl/Tk</application>
- benutzen</title>
-
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><varname>USE_TCL</varname></entry>
-
- <entry>Der Port benötigt die
- <application>Tcl</application>-Bibliothek (nicht die
- Shell). Eine notwendige Mindestversion kann mit Werten
- wie 84+ angegeben werden. Einzelne nicht
- unterstützte Versionen können mit der
- Variable <varname>INVALID_TCL_VER</varname> festgelegt
- werden.</entry>
- </row>
-
- <row>
- <entry><varname>USE_TCL_BUILD</varname></entry>
-
- <entry>Der Port benötigt
- <application>Tcl</application> nur während der
- Zeit, in der er gebaut wird.</entry>
- </row>
-
- <row>
- <entry><varname>USE_TCL_WRAPPER</varname></entry>
-
- <entry>Ports, welche zwar die
- <application>Tcl</application>-Shell, aber nicht eine
- bestimmte Version von <literal>tclsh</literal>
- verlangen, sollten diese neue Variable verwenden. Ein
- Wrapperskript für <literal>tclsh</literal> wird
- auf dem System installiert. Der Benutzer kann
- festlegen, welche <command>tcl</command>-Shell
- gewünscht ist bzw. verwendet werden soll.</entry>
- </row>
-
- <row>
- <entry><varname>WITH_TCL_VER</varname></entry>
-
- <entry>Benutzerdefinierte Variable, welche die
- gewünschte <application>Tcl</application>-Version
- bestimmt.</entry>
- </row>
-
- <row>
- <entry><varname><replaceable>PORTNAME</replaceable>_WITH_TCL_VER</varname></entry>
-
- <entry>Gleich wie <varname>WITH_TCL_VER</varname>, nur
- portspezifisch.</entry>
- </row>
-
- <row>
- <entry><varname>USE_TCL_THREADS</varname></entry>
-
- <entry>Fordere threadfähiges
- <application>Tcl/Tk</application>.</entry>
- </row>
-
- <row>
- <entry><varname>USE_TK</varname></entry>
-
- <entry>Der Port benötigt die
- <application>Tk</application>-Bibliothek (nicht die
- Wish-Shell). Impliziert <varname>USE_TCL</varname> mit
- dem gleichen Wert. Für weitere Informationen
- siehe die Beschreibung der Variable
- <varname>USE_TCL</varname>.</entry>
- </row>
-
- <row>
- <entry><varname>USE_TK_BUILD</varname></entry>
-
- <entry>Analog zur Variable
- <varname>USE_TCL_BUILD</varname>.</entry>
- </row>
-
- <row>
- <entry><varname>USE_TK_WRAPPER</varname></entry>
-
- <entry>Analog zur Variable
- <varname>USE_TCL_WRAPPER</varname>.</entry>
- </row>
-
- <row>
- <entry><varname>WITH_TK_VER</varname></entry>
-
- <entry>Analog zur Variable
- <varname>WITH_TCL_VER</varname> und impliziert
- <varname>WITH_TCL_VER</varname> mit dem gleichen
- Wert.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Eine vollständige Liste der zur Verfügung
- stehenden Variablen befindet sich in
- <filename>/usr/ports/Mk/bsd.tcl.mk</filename>.</para>
- </sect1>
-
- <sect1 xml:id="using-emacs">
- <title>Emacs benutzen</title>
-
- <para>Dieser Abschnitt muss noch geschrieben werden.</para>
- </sect1>
-
- <sect1 xml:id="using-ruby">
- <title>Ruby benutzen</title>
-
- <table frame="none">
- <title>Nützliche Variablen für Ports,
- die Ruby verwenden</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Variable</entry>
- <entry>Description</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>USE_RUBY</varname></entry>
- <entry>Der Port benötigt Ruby.</entry>
- </row>
-
- <row>
- <entry><varname>USE_RUBY_EXTCONF</varname></entry>
- <entry>Der Port verwendet <filename>extconf.rb</filename>
- für die Konfiguration.</entry>
- </row>
-
- <row>
- <entry><varname>USE_RUBY_SETUP</varname></entry>
- <entry>Der Port verwendet <filename>setup.rb</filename>
- für die Konfiguration.</entry>
- </row>
-
- <row>
- <entry><varname>RUBY_SETUP</varname></entry>
- <entry>Legt den alternativen Namen von
- <filename>setup.rb</filename> fest. Üblich ist der
- Wert <filename>install.rb</filename>.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Die folgende Tabelle listet ausgewählte Variablen
- auf, die Portautoren über die Port-Infrastruktur zur
- Verfügung stehen. Diese Variablen sollten für die
- Installation von Dateien in die entsprechenden Verzeichnisse
- verwendet werden. Sie sollten in
- <filename>pkg-plist</filename> so häufig wie möglich
- verwendet und in einem Port nicht neu definiert werden.</para>
-
- <table frame="none">
- <title>Ausgewählte read-only-Variablen für Ports,
- die Ruby verwenden</title>
-
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Variable</entry>
- <entry>Beschreibung</entry>
- <entry>Beispiel</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>RUBY_PKGNAMEPREFIX</varname></entry>
- <entry>Wird als <varname>PKGNAMEPREFIX</varname> verwendet,
- um Pakete für verschiedene Versionen von Ruby zu
- unterscheiden.</entry>
- <entry><literal>ruby18-</literal></entry>
- </row>
-
- <row>
- <entry><varname>RUBY_VERSION</varname></entry>
- <entry>Vollständige Version von Ruby in der Form
- <literal>x.y.z</literal>.</entry>
- <entry><literal>1.8.2</literal></entry>
- </row>
-
- <row>
- <entry><varname>RUBY_SITELIBDIR</varname></entry>
- <entry>Installationsverzeichnis der von der
- Rechnerarchitektur unabhängigen
- Bibliotheken.</entry>
- <entry><literal>/usr/local/lib/ruby/site_ruby/1.8</literal></entry>
- </row>
-
- <row>
- <entry><varname>RUBY_SITEARCHLIBDIR</varname></entry>
- <entry>Installationsverzeichnis der von der Rechnerarchitektur
- abhängigen Bibliotheken.</entry>
- <entry><literal>/usr/local/lib/ruby/site_ruby/1.8/amd64-freebsd6</literal></entry>
- </row>
-
- <row>
- <entry><varname>RUBY_MODDOCDIR</varname></entry>
- <entry>Installationsverzeichnis für die Dokumentation
- der Module.</entry>
- <entry><literal>/usr/local/share/doc/ruby18/patsy</literal></entry>
- </row>
-
- <row>
- <entry><varname>RUBY_MODEXAMPLESDIR</varname></entry>
- <entry>Installationsverzeichnis für die Beispiele der
- Module.</entry>
- <entry><literal>/usr/local/share/examples/ruby18/patsy</literal></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Eine vollständige Liste der verfügbarenVariablen
- kann in <filename>/usr/ports/Mk/bsd.ruby.mk</filename>
- eingesehen werden.</para>
- </sect1>
-
- <sect1 xml:id="using-sdl">
- <title>SDL verwenden</title>
-
- <para>Die Variable <varname>USE_SDL</varname> wird für die
- automatische Konfiguration der Abhängigkeiten für Ports
- benutzt, die auf SDL basierende Bibliotheken wie
- <package>devel/sdl12</package> und
- <package>x11-toolkits/sdl_gui</package>
- verwenden.</para>
-
- <para>Die folgenden SDL-Bibliotheken sind derzeit
- bekannt:</para>
-
- <itemizedlist>
- <listitem>
- <para>sdl: <package>devel/sdl12</package></para>
- </listitem>
-
- <listitem>
- <para>gfx: <package>graphics/sdl_gfx</package></para>
- </listitem>
-
- <listitem>
- <para>gui: <package>x11-toolkits/sdl_gui</package></para>
- </listitem>
-
- <listitem>
- <para>image: <package>graphics/sdl_image</package></para>
- </listitem>
-
- <listitem>
- <para>ldbad: <package>devel/sdl_ldbad</package></para>
- </listitem>
-
- <listitem>
- <para>mixer: <package>audio/sdl_mixer</package></para>
- </listitem>
-
- <listitem>
- <para>mm: <package>devel/sdlmm</package></para>
- </listitem>
-
- <listitem>
- <para>net: <package>net/sdl_net</package></para>
- </listitem>
-
- <listitem>
- <para>sound: <package>audio/sdl_sound</package></para>
- </listitem>
-
- <listitem>
- <para>ttf: <package>graphics/sdl_ttf</package></para>
- </listitem>
- </itemizedlist>
-
- <para>Falls ein Port z.B. von
- <package>net/sdl_net</package> und
- <package>audio/sdl_mixer</package>
- abhängt, so wäre die Syntax:</para>
-
- <programlisting>USE_SDL= net mixer</programlisting>
-
- <para>Die Abhängigkeit von
- <package>devel/sdl12</package>, die durch
- <package>net/sdl_net</package> und
- <package>audio/sdl_mixer</package> entsteht,
- wird automatisch zum Port hinzugefügt.</para>
-
- <para>Falls <varname>USE_SDL</varname> im Port verwendet wird,
- so wird automatisch:</para>
-
- <itemizedlist>
- <listitem>
- <para>die Abhängigkeit von
- <application>sdl12-config</application> zu
- <varname>BUILD_DEPENDS</varname> hinzugefügt</para>
- </listitem>
-
- <listitem>
- <para>die Variable <varname>SDL_CONFIG</varname> zu
- <varname>CONFIGURE_ENV</varname> hinzugefügt</para>
- </listitem>
-
- <listitem>
- <para>die Abhängigkeit der ausgewählten
- Bibliotheken zu <varname>LIB_DEPENDS</varname>
- hinzugefügt</para>
- </listitem>
- </itemizedlist>
-
- <para>Um zu überprüfen, ob die SDL-Bibliotheken
- verfügbar sind, kann die Variable
- <varname>WANT_SDL</varname> verwendet werden:</para>
-
- <programlisting>WANT_SDL=yes
-
-.include &lt;bsd.port.pre.mk&gt;
-
-.if ${HAVE_SDL:Mmixer}!=""
-USE_SDL+= mixer
-.endif
-
-.include &lt;bsd.port.post.mk&gt;</programlisting>
-
- </sect1>
-
- <sect1 xml:id="using-wx">
- <title><application>wxWidgets</application> verwenden</title>
-
- <para>Dieser Abschnitt beschreibt den Status der
- <application>wxWidgets</application>-Bibliotheken in den Ports
- und deren Einbindung in das Ports-System.</para>
-
- <sect2 xml:id="wx-introduction">
- <title>Einführung</title>
-
- <para>Es gibt viele Probleme bei der gleichzeitigen Verwendung
- unterschiedlicher Versionen von
- <application>wxWidgets</application>-Bibliotheken (Dateien
- unterschiedlicher
- <application>wxWidgets</application>-Versionen haben
- denselben Dateinamen). In den Ports wurde das Problem
- dadurch gelöst, dass jede Version unter einem eigenen
- Namen installiert wird, der die Versionsnummer als Suffix
- beinhaltet.</para>
-
- <para>Der offensichtliche Nachteil dabei ist, dass jede
- Anwendung so verändert werden muss, dass sie die
- erwartete Version vorfindet. Die meisten solcher
- Anwendungen benutzen das
- <command>wx-config</command>-Skript, um die benötigten
- Compiler- und Linkerflags zu erhalten. Dieses Skript hat
- für jede verfügbare Version einen anderen Namen.
- Die meisten Anwendungen beachten eine Umgebungsvariable oder
- ein Argument beim <command>configure</command>-Skript, um
- das gewünschte <command>wx-config</command>-Skript
- festzulegen. Ansonsten müssen sie gepatcht
- werden.</para>
- </sect2>
-
- <sect2 xml:id="wx-version">
- <title>Auswahl der Version</title>
-
- <para>Um festzulegen, welche Version der
- <application>wxWidgets</application> verwendet werden soll,
- gibt es zwei Variablen (falls nur eine der beiden definiert
- wird, so wird die andere auf einen Standardwert
- gesetzt):</para>
-
- <table xml:id="wx-ver-sel-table" frame="none">
- <title>Variablen, um die
- <application>wxWidgets</application>-Version festzulegen</title>
-
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Variable</entry>
- <entry>Beschreibung</entry>
- <entry>Standardwert</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>USE_WX</varname></entry>
- <entry>Liste der Versionen, die der Port verwenden
- kann</entry>
- <entry>Alle verfügbaren Versionen</entry>
- </row>
-
- <row>
- <entry><varname>USE_WX_NOT</varname></entry>
- <entry>Liste der Versionen, die der Port nicht verwenden
- kann</entry>
- <entry>Nichts</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Es folgt eine Liste an möglichen
- <application>wxWidgets</application>-Versionen und deren
- zugehöriger Port:</para>
-
- <table frame="none">
- <title>Verfügbare
- <application>wxWidgets</application>-Versionen</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Version</entry>
- <entry>Port</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><literal>2.4</literal></entry>
- <entry><package>x11-toolkits/wxgtk24</package></entry>
- </row>
-
- <row>
- <entry><literal>2.6</literal></entry>
- <entry><package>x11-toolkits/wxgtk26</package></entry>
- </row>
-
- <row>
- <entry><literal>2.8</literal></entry>
- <entry><package>x11-toolkits/wxgtk28</package></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <note>
- <para>Ab Version <literal>2.5</literal> werden auch Versionen in
- Unicode unterstützt und über einen Unterport
- mit dem Suffix <literal>-unicode</literal> installiert.
- Dies kann aber auch über Variablen gehandhabt
- werden (siehe <xref linkend="wx-unicode"/>).</para>
- </note>
-
- <para>Die Variablen in <xref linkend="wx-ver-sel-table"/>
- können auf einen oder mehrere (durch Leerzeichen
- getrennt) der folgenden Werte gesetzt werden:</para>
-
- <table frame="none">
- <title>Spezifikationen der
- <application>wxWidgets</application>-Versionen</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Beschreibung</entry>
- <entry>Beispiel</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry>Einzelne Version</entry>
- <entry><literal>2.4</literal></entry>
- </row>
-
- <row>
- <entry>Aufsteigende Versionsnummern</entry>
- <entry><literal>2.4+</literal></entry>
- </row>
-
- <row>
- <entry>Absteigende Versionsnummern</entry>
- <entry><literal>2.6-</literal></entry>
- </row>
-
- <row>
- <entry>Versionsinterval (muss aufsteigend sein)</entry>
- <entry><literal>2.4-2.6</literal></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Desweiteren gibt es Variablen, über die eine
- bevorzugte Version festgelegt werden kann. Die Versionen
- können als Liste angegeben werden, wobei die
- Reihenfolge der Priorisierung entspricht.</para>
-
- <table frame="none">
- <title>Variablen zur Festlegung der bevorzugten
- <application>wxWidgets</application>-Version</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Name</entry>
- <entry>Bestimmt für</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>WANT_WX_VER</varname></entry>
- <entry>den Port</entry>
- </row>
-
- <row>
- <entry><varname>WITH_WX_VER</varname></entry>
- <entry>den Benutzer</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect2>
-
- <sect2 xml:id="wx-components">
- <title>Komponentenauswahl</title>
-
- <para>Desweiteren gibt es Anwendungen, die nicht direkt
- <application>wxWidgets</application>-Bibliotheken sind, aber
- trotzdem mit diesen zusammenhängen. Diese Anwendungen
- können über die Variable
- <varname>WX_COMPS</varname> festgelegt werden. Die folgenden
- Komponenten sind verfügbar:</para>
-
- <table frame="none">
- <title>Verfügbare
- <application>wxWidgets</application>-Komponenten</title>
-
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Name</entry>
- <entry>Beschreibung</entry>
- <entry>Versionsbeschränkungen</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><literal>wx</literal></entry>
- <entry>Hauptbibliothek</entry>
- <entry><literal>Nichts</literal></entry>
- </row>
-
- <row>
- <entry><literal>contrib</literal></entry>
- <entry>Beigesteuerte Bibliothek</entry>
- <entry><literal>Nichts</literal></entry>
- </row>
-
- <row>
- <entry><literal>python</literal></entry>
- <entry><application>wxPython</application>
- (<application>Python</application>-Bindungen)</entry>
- <entry><literal>2.4-2.6</literal></entry>
- </row>
-
- <row>
- <entry><literal>mozilla</literal></entry>
- <entry><application>wxMozilla</application></entry>
- <entry><literal>2.4</literal></entry>
- </row>
-
- <row>
- <entry><literal>svg</literal></entry>
- <entry><application>wxSVG</application></entry>
- <entry><literal>2.6</literal></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Der Typ der Abhängigkeit kann für jede
- Komponente durch hinzufügen eines Suffix (durch
- Strichpunkt getrennt) festgelegt werden. Falls der Typ nicht
- angegeben wird, wird ein Standardwert verwendet (siehe <xref linkend="wx-def-dep-types"/>). Die folgenden Typen sind
- verfügbar:</para>
-
- <table frame="none">
- <title>Verfügbare Typen von
- <application>wxWidgets</application>-Abhängigkeiten</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Name</entry>
- <entry>Beschreibung</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><literal>build</literal></entry>
- <entry>Komponente wird zum Bau
- benötigt&nbsp;&ndash;&nbsp;äquivalent zu
- <varname>BUILD_DEPENDS</varname></entry>
- </row>
-
- <row>
- <entry><literal>run</literal></entry>
- <entry>Komponente wird zum Ausführen
- benötigt&nbsp;&ndash;&nbsp;äquivalent zu
- <varname>RUN_DEPENDS</varname></entry>
- </row>
-
- <row>
- <entry><literal>lib</literal></entry>
- <entry>Komponente wird zum Bau und Ausführen
- benötigt&nbsp;&ndash;&nbsp;äquivalent zu
- <varname>LIB_DEPENDS</varname></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Die Standardwerte für die einzelnen Komponenten
- sind in der folgenden Tabelle aufgeführt:</para>
-
- <table xml:id="wx-def-dep-types" frame="none">
- <title>Standardtypen der
- <application>wxWidgets</application>-Abhängigkeiten</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Komponente</entry>
- <entry>Typ der Abhängigkeit</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><literal>wx</literal></entry>
- <entry><literal>lib</literal></entry>
- </row>
-
- <row>
- <entry><literal>contrib</literal></entry>
- <entry><literal>lib</literal></entry>
- </row>
-
- <row>
- <entry><literal>python</literal></entry>
- <entry><literal>run</literal></entry>
- </row>
-
- <row>
- <entry><literal>mozilla</literal></entry>
- <entry><literal>lib</literal></entry>
- </row>
-
- <row>
- <entry><literal>svg</literal></entry>
- <entry><literal>lib</literal></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <example xml:id="wx-components-example">
- <title>Auswahl von
- <application>wxWidgets</application>-Komponenten</title>
-
- <para>Der folgende Ausschnitt entspricht einem Port, der
- die <application>wxWidgets</application>-Version
- <literal>2.4</literal> und die zugehörigen
- Bibliotheken verwendet.</para>
-
- <programlisting>USE_WX= 2.4
-WX_COMPS= wx contrib</programlisting>
- </example>
- </sect2>
-
- <sect2 xml:id="wx-unicode">
- <title>Unicode</title>
-
- <para>Die <application>wxWidgets</application>-Bibliotheken
- unterstützen Unicode seit der Version
- <literal>2.5</literal>. In den Ports sind beide Versionen
- verfügbar und können über die folgenden
- Variablen ausgewählt werden:</para>
-
- <table xml:id="wx-unicode-var-table" frame="none">
- <title>Variablen, um Unicode in den
- <application>wxWidgets</application>-Versionen
- auszuwählen</title>
-
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Variable</entry>
- <entry>Beschreibung</entry>
- <entry>Bestimmt für</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>WX_UNICODE</varname></entry>
- <entry>Der Port funktioniert
- <emphasis>ausschließlich</emphasis> mit der
- Unicode-Version</entry>
- <entry>den Port</entry>
- </row>
-
- <row>
- <entry><varname>WANT_UNICODE</varname></entry>
- <entry>Der Port funktioniert in beiden
- Versionen&nbsp;&ndash;&nbsp;bevorzugt wird jedoch
- Unicode</entry>
- <entry>den Port</entry>
- </row>
-
- <row>
- <entry><varname>WITH_UNICODE</varname></entry>
- <entry>Der Port verwendet die Unicode-Version</entry>
- <entry>den Benutzer</entry>
- </row>
-
- <row>
- <entry><varname>WITHOUT_UNICODE</varname></entry>
- <entry>Der Port verwendet, falls unterstützt, die
- normale Version (falls <varname>WX_UNICODE</varname>
- nicht definiert ist)</entry>
- <entry>den Benutzer</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <warning>
- <para>Die Variable <varname>WX_UNICODE</varname> darf
- nicht bei Ports benutzt werden, die sowohl die Version mit
- als auch ohne Unterstützung für Unicode
- verwenden können. Falls der Port
- standardmäßig Unterstützung für
- Unicode bieten soll, verwenden Sie
- <varname>WANT_UNICODE</varname> stattdessen.</para>
- </warning>
- </sect2>
-
- <sect2 xml:id="wx-version-detection">
- <title>Feststellen der installierten Version</title>
-
- <para>Um eine bereits installierte Version zu finden, muss
- <varname>WANT_WX</varname> definiert werden. Falls diese
- Variable nicht auf eine bestimmte Versionsnummer gesetzt
- wird, werden die Komponenten einen Suffix mit der
- Versionsnummer tragen. Die Variable
- <varname>HAVE_WX</varname> wird gesetzt, falls eine
- installierte Version vorgefunden wurde.</para>
-
- <example xml:id="wx-ver-det-example">
- <title>Installierte
- <application>wxWidgets</application>-Versionen
- und&nbsp;&ndash;Komponenten feststellen</title>
-
- <para>Der folgende Ausschnitt kann in einem Port verwendet
- werden, der <application>wxWidgets</application>
- verwendet, falls es installiert ist, oder falls eine
- Option dafür ausgewählt wurde.</para>
-
- <programlisting>WANT_WX= yes
-
-.include &lt;bsd.port.pre.mk&gt;
-
-.if defined(WITH_WX) || ${HAVE_WX:Mwx-2.4} != ""
-USE_WX= 2.4
-CONFIGURE_ARGS+=--enable-wx
-.endif</programlisting>
-
- <para>Der folgende Ausschnitt kann verwendet werden, um
- die Unterstützung für
- <application>wxPython</application> zusätzlich zu der
- von <application>wxWidgets</application> zu aktivieren
- (beide in Version <literal>2.6</literal>), wenn das
- installiert ist, oder die Option ausgewählt
- wurde.</para>
-
- <programlisting>USE_WX= 2.6
-WX_COMPS= wx
-WANT_WX= 2.6
-
-.include &lt;bsd.port.pre.mk&gt;
-
-.if defined(WITH_WXPYTHON) || ${HAVE_WX:Mpython} != ""
-WX_COMPS+= python
-CONFIGURE_ARGS+=--enable-wxpython
-.endif</programlisting>
- </example>
- </sect2>
-
- <sect2 xml:id="wx-defined-variables">
- <title>Vordefinierte Variablen</title>
-
- <para>Die folgenden Variablen sind in den Ports
- verfügbar (nachdem sie entsprechend <xref linkend="wx-ver-sel-table"/> definiert wurden).</para>
-
- <table frame="none">
- <title>Vordefinierte Variablen für Ports, die
- <application>wxWidgets</application> verwenden</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Name</entry>
- <entry>Beschreibung</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>WX_CONFIG</varname></entry>
- <entry>Pfad zum <application>wxWidgets</application>
- <command>wx-config</command>-Skript (mit
- unterschiedlichem Namen)</entry>
- </row>
-
- <row>
- <entry><varname>WXRC_CMD</varname></entry>
- <entry>Pfad zum <application>wxWidgets</application>
- <command>wxrc</command>-Programm (mit
- unterschiedlichem Namen)</entry>
- </row>
-
- <row>
- <entry><varname>WX_VERSION</varname></entry>
- <entry>Version der <application>wxWidgets</application>, die
- verwendet werden soll (z.B. <literal>2.6</literal>)</entry>
- </row>
-
- <row>
- <entry><varname>WX_UNICODE</varname></entry>
- <entry>Falls Unterstützung für Unicode nicht
- explizit definiert, jedoch verwendet wird, dann wird die
- Unterstützung automatisch aktiviert.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect2>
-
- <sect2 xml:id="wx-premk">
- <title>Verarbeitung in
- <filename>bsd.port.pre.mk</filename></title>
-
- <para>Falls die Variablen gleich nach dem Importieren von
- <filename>bsd.port.pre.mk</filename> benutzt werden sollen,
- so muss die Variable <varname>WX_PREMK</varname> definiert
- werden.</para>
-
- <important>
- <para>Falls <varname>WX_PREMK</varname> definiert ist, so
- werden Version, Abhängigkeiten, Komponenten und
- vordefinierte Variablen nicht geändert, wenn die
- Variablen des <application>wxWidgets</application>-Ports
- <emphasis>nach</emphasis> dem Einbinden von
- <filename>bsd.port.pre.mk</filename> geändert
- werden.</para>
- </important>
-
- <example xml:id="wx-premk-example">
- <title>Verwendung von
- <application>wxWidgets</application>-Variablen
- in Kommandos</title>
-
- <para>Der folgende Ausschnitt zeigt die Verwendung von
- <varname>WX_PREMK</varname> durch Ausführen des
- <command>wx-config</command>-Skriptes, um die
- vollständige Version als Zeichenkette zu erhalten,
- diese dann einer Variablen zuzuweisen und die Variable
- anschließend einem Programm zu
- übergeben.</para>
-
- <programlisting>USE_WX= 2.4
-WX_PREMK= yes
-
-.include &lt;bsd.port.pre.mk&gt;
-
-.if exists(${WX_CONFIG})
-VER_STR!= ${WX_CONFIG} --release
-
-PLIST_SUB+= VERSION="${VER_STR}"
-.endif</programlisting>
- </example>
-
- <note>
- <para>Die <application>wxWidgets</application>-Variablen
- können problemlos in Kommandos benutzt werden, falls
- diese in Targets ohne gesetztes
- <varname>WX_PREMK</varname> verwendet werden.</para>
- </note>
- </sect2>
-
- <sect2 xml:id="wx-additional-config-args">
- <title>Weitere <command>configure</command>-Argumente</title>
-
- <para>Einige GNU <command>configure</command>-Skripte
- können <application>wxWidgets</application> nicht
- auffinden, falls nur die Umgebungsvariable
- <literal>WX_CONFIG</literal> gesetzt ist, sondern
- benötigen zusätzliche Argumente. Dafür kann
- die Variable <varname>WX_CONF_ARGS</varname> benutzt
- werden.</para>
-
- <table frame="none">
- <title>Zulässige Werte für
- <varname>WX_CONF_ARGS</varname></title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Möglicher Wert</entry>
- <entry>Resultierendes Argument</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><literal>absolute</literal></entry>
- <entry><literal>--with-wx-config=${WX_CONFIG}</literal></entry>
- </row>
-
- <row>
- <entry><literal>relative</literal></entry>
- <entry><literal>--with-wx=${LOCALBASE}
- --with-wx-config=${WX_CONFIG:T}</literal></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect2>
- </sect1>
-
- <sect1 xml:id="using-lua">
- <title>Verwendung von <application>Lua</application></title>
-
- <para>Dieser Abschnitt beschreibt den Status der
- <application>Lua</application>-Bibliotheken in den Ports
- und deren Einbindung in das Ports System.</para>
-
- <sect2 xml:id="lua-introduction">
- <title>Einführung</title>
-
- <para>Es gibt viele Probleme bei der gleichzeitigen
- Verwendung unterschiedlicher Versionen von
- <application>Lua</application>-Bibliotheken (Dateien
- unterschiedlicher Versionen haben denselben Dateinamen). In
- den Ports wurde das Problem gelöst, indem jede Version
- unter einem eigenen Namen mit der Versionsnummer als Suffix
- installiert wird.</para>
-
- <para>Der offensichtliche Nachteil dabei ist, dass jede
- Anwendung so verändert werden muss, dass sie die
- erwartete Version vorfindet. Dies kann jedoch durch
- zusätzliche Flags für Compiler und Linker
- gelöst werden.</para>
- </sect2>
-
- <sect2 xml:id="lua-version">
- <title>Auswahl der Version</title>
-
- <para>Um festzulegen, welche Version von
- <application>Lua</application> verwendet werden soll, gibt
- es zwei Variablen (falls nur eine der beiden definiert ist,
- so wird die andere auf einen Standardwert gesetzt):</para>
-
- <table xml:id="lua-ver-sel-table" frame="none">
- <title>Variablen, um die
- <application>Lua</application>-Version festzulegen</title>
-
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Variable</entry>
- <entry>Beschreibung</entry>
- <entry>Standardwert</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>USE_LUA</varname></entry>
- <entry>Liste der Versionen, welche der Port verwenden
- kann</entry>
- <entry>Alle verfügbaren Versionen</entry>
- </row>
-
- <row>
- <entry><varname>USE_LUA_NOT</varname></entry>
- <entry>Liste der Versionen, die der Port nicht verwenden
- kann</entry>
- <entry>Nichts</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Es folgt eine Liste an möglichen
- <application>Lua</application>-Versionen und deren
- zugehöriger Port:</para>
-
- <table frame="none">
- <title>Verfügbare
- <application>Lua</application>-Versionen</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Version</entry>
- <entry>Port</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><literal>4.0</literal></entry>
- <entry><package>lang/lua4</package></entry>
- </row>
-
- <row>
- <entry><literal>5.0</literal></entry>
- <entry><package>lang/lua50</package></entry>
- </row>
-
- <row>
- <entry><literal>5.1</literal></entry>
- <entry><package>lang/lua</package></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Die Variablen in <xref linkend="lua-ver-sel-table"/>
- können auf einen oder mehrere (durch Leerzeichen
- getrennt) der folgenden Werte gesetzt werden:</para>
-
- <table frame="none">
- <title>Spezifikationen der
- <application>Lua</application>-Versionen</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Beschreibung</entry>
- <entry>Beispiel</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry>Spezielle Version</entry>
- <entry><literal>4.0</literal></entry>
- </row>
-
- <row>
- <entry>Aufsteigende Versionen</entry>
- <entry><literal>5.0+</literal></entry>
- </row>
-
- <row>
- <entry>Absteigende Versionen</entry>
- <entry><literal>5.0-</literal></entry>
- </row>
-
- <row>
- <entry>Versionenintervall (muss aufsteigend sein)</entry>
- <entry><literal>5.0-5.1</literal></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Desweiteren gibt es Variablen, über die eine
- bevorzugte Version festgelegt werden kann. Die Versionen
- können als Liste angegeben werden, wobei die
- Reihenfolge der Priorisierung entspricht.</para>
-
- <table frame="none">
- <title>Variablen zur Festlegung der bevorzugten
- <application>Lua</application>-Version</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Name</entry>
- <entry>Bestimmt für</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>WANT_LUA_VER</varname></entry>
- <entry>den Port</entry>
- </row>
-
- <row>
- <entry><varname>WITH_LUA_VER</varname></entry>
- <entry>den Benutzer</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <example xml:id="lua-version-example">
- <title>Auswahl der
- <application>Lua</application>-Version</title>
-
- <para>Der folgende Ausschnitt entspricht einem Port, der
- <application>Lua</application> in den Versionen
- <literal>5.0</literal> oder <literal>5.1</literal>
- verwenden kann und standardmäßig
- <literal>5.0</literal> verwendet. Diese Einstellung kann
- durch die benutzerdefinierte Variable
- <varname>WITH_LUA_VER</varname> überschrieben
- werden.</para>
-
- <programlisting>USE_LUA= 5.0-5.1
-WANT_LUA_VER= 5.0</programlisting>
- </example>
- </sect2>
-
- <sect2 xml:id="lua-components">
- <title>Komponentenauswahl</title>
-
- <para>Desweiteren gibt es Anwendungen, die nicht direkt
- <application>Lua</application>-Bibliotheken sind, aber
- trotzdem mit diesen zusammenhängen. Diese Anwendungen
- können über die Variable
- <varname>LUA_COMPS</varname> festgelegt werden. Die
- folgenden Komponenten sind verfügbar:</para>
-
- <table frame="none">
- <title>Verfügbare
- <application>Lua</application>-Komponenten</title>
-
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Name</entry>
- <entry>Beschreibung</entry>
- <entry>Versionseinschränkungen</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><literal>lua</literal></entry>
- <entry>Hauptbibliothek</entry>
- <entry>Keine</entry>
- </row>
-
- <row>
- <entry><literal>tolua</literal></entry>
- <entry>Bibliothek für die Unterstützung von C/C++-Code</entry>
- <entry><literal>4.0-5.0</literal></entry>
- </row>
-
- <row>
- <entry><literal>ruby</literal></entry>
- <entry>Ruby-Bindungen</entry>
- <entry><literal>4.0-5.0</literal></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <note>
- <para>Es gibt weitere Komponenten, die jedoch Module
- für den Interpreter sind und nicht von Anwendungen
- benutzt werden (nur von anderen Modulen).</para>
- </note>
-
- <para>Der Typ der Abhängigkeit kann für jede
- Komponente durch Hinzufügen eines Suffix (durch
- Strichpunkt getrennt) festgelegt werden. Falls der Typ nicht
- angegeben wird, wird ein Standardwert verwendet (siehe <xref linkend="lua-def-dep-types"/>). Die folgenden Typen sind
- verfügbar:</para>
-
- <table frame="none">
- <title>Verfügbare Typen von
- <application>Lua</application>-Abhängigkeiten</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Name</entry>
- <entry>Beschreibung</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><literal>build</literal></entry>
- <entry>Komponente wird zum Bau
- benötigt&nbsp;&ndash;&nbsp;äquivalent zu
- <varname>BUILD_DEPENDS</varname></entry>
- </row>
-
- <row>
- <entry><literal>run</literal></entry>
- <entry>Komponente wird zum Ausführen
- benötigt&nbsp;&ndash;&nbsp;äquivalent zu
- <varname>RUN_DEPENDS</varname></entry>
- </row>
-
- <row>
- <entry><literal>lib</literal></entry>
- <entry>Komponente wird zum Bau und zum Ausführen
- benötigt&nbsp;&ndash;&nbsp;äquivalent zu
- <varname>LIB_DEPENDS</varname></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Die Standardwerte für die einzelnen Komponenten
- sind in der folgenden Tabelle aufgeführt:</para>
-
- <table xml:id="lua-def-dep-types" frame="none">
- <title>Standardtypen für
- <application>Lua</application>-Abhängigkeiten</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Komponente</entry>
- <entry>Typ der Abhängigkeit</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><literal>lua</literal></entry>
- <entry><literal>lib</literal> für
- <literal>4.0-5.0</literal> (shared) und
- <literal>build</literal> für <literal>5.1</literal>
- (static)</entry>
- </row>
-
- <row>
- <entry><literal>tolua</literal></entry>
- <entry><literal>build</literal> (static)</entry>
- </row>
-
- <row>
- <entry><literal>ruby</literal></entry>
- <entry><literal>lib</literal> (shared)</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <example xml:id="lua-components-example">
- <title>Auswahl von
- <application>Lua</application>-Komponenten</title>
-
- <para>Der folgende Ausschnitt entspricht einem Port,
- welcher die <application>Lua</application>-Version
- <literal>4.0</literal> und die zugehörigen
- <application>Ruby</application>-Bindungen
- verwendet.</para>
-
- <programlisting>USE_LUA= 4.0
-LUA_COMPS= lua ruby</programlisting>
- </example>
- </sect2>
-
- <sect2 xml:id="lua-version-detection">
- <title>Feststellen der installierten Version</title>
-
- <para>Um eine bereits installierte Version zu finden, muss
- <varname>WANT_LUA</varname> definiert werden. Falls diese
- Variable nicht auf eine bestimmte Versionsnummer gesetzt
- wird, werden die Komponenten einen Suffix mit der
- Versionsnummer tragen. Die Variable
- <varname>HAVE_LUA</varname> wird gesetzt, falls eine
- installierte Version vorgefunden wurde.</para>
-
- <example xml:id="lua-ver-det-example">
- <title>Installierte
- <application>Lua</application>-Versionen
- und&ndash;&nbsp;Komponenten feststellen</title>
-
- <para>Der folgende Ausschnitt kann in einem Port verwendet
- werden, der <application>Lua</application> benutzt, falls
- es installiert ist oder eine Option dafür
- ausgewählt wurde.</para>
-
- <programlisting>WANT_LUA= yes
-
-.include &lt;bsd.port.pre.mk&gt;
-
-.if defined(WITH_LUA5) || ${HAVE_LUA:Mlua-5.[01]} != ""
-USE_LUA= 5.0-5.1
-CONFIGURE_ARGS+=--enable-lua5
-.endif</programlisting>
-
- <para>Der folgende Ausschnitt kann verwendet werden, um
- die Unterstützung für
- <application>tolua</application> zusätzlich zu der
- von <application>Lua</application> zu aktivieren (beide in
- Version 4.0), wenn dies installiert ist oder die Option
- ausgewählt wurde.</para>
-
- <programlisting>USE_LUA= 4.0
-LUA_COMPS= lua
-WANT_LUA= 4.0
-
-.include &lt;bsd.port.pre.mk&gt;
-
-.if defined(WITH_TOLUA) || ${HAVE_LUA:Mtolua} != ""
-LUA_COMPS+= tolua
-CONFIGURE_ARGS+=--enable-tolua
-.endif</programlisting>
- </example>
- </sect2>
-
- <sect2 xml:id="lua-defined-variables">
- <title>Vordefinierte Variablen</title>
-
- <para>Die folgenden Variablen sind in den Ports
- verfügbar (nachdem sie entsprechend <xref linkend="lua-ver-sel-table"/> definiert wurden).</para>
-
- <table frame="none">
- <title>Vordefinierte Variablen für Ports, die
- <application>Lua</application> verwenden</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Name</entry>
- <entry>Beschreibung</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>LUA_VER</varname></entry>
- <entry>Die <application>Lua</application>-Version, die
- verwendet wird (z.B. <literal>5.1</literal>)</entry>
- </row>
-
- <row>
- <entry><varname>LUA_VER_SH</varname></entry>
- <entry>Die Hauptversion für
- shared-<application>Lua</application>-Bibliotheken (z.B.
- <literal>1</literal>)</entry>
- </row>
-
- <row>
- <entry><varname>LUA_VER_STR</varname></entry>
- <entry>Die <application>Lua</application>-Version ohne die
- Punkte (z.B. <literal>51</literal>)</entry>
- </row>
-
- <row>
- <entry><varname>LUA_PREFIX</varname></entry>
- <entry>Der Präfix, unter dem
- <application>Lua</application> (und Komponenten)
- installiert ist</entry>
- </row>
-
- <row>
- <entry><varname>LUA_SUBDIR</varname></entry>
- <entry>Das Verzeichnis unter
- <filename>${PREFIX}/bin</filename>,
- <filename>${PREFIX}/share</filename> und
- <filename>${PREFIX}/lib</filename>, in welchem
- <application>Lua</application> installiert ist</entry>
- </row>
-
- <row>
- <entry><varname>LUA_INCDIR</varname></entry>
- <entry>Das Verzeichnis, in dem
- <application>Lua</application>- und
- <application>tolua</application>-Header-Dateien
- installiert sind</entry>
- </row>
-
- <row>
- <entry><varname>LUA_LIBDIR</varname></entry>
- <entry>Das Verzeichnis, in dem
- <application>Lua</application>&ndash;&nbsp;und
- <application>tolua</application>-Bibliotheken
- installiert sind</entry>
- </row>
-
- <row>
- <entry><varname>LUA_MODLIBDIR</varname></entry>
- <entry>Das Verzeichnis, in dem
- <application>Lua</application> Modul-Bibliotheken
- (<filename>.so</filename>) installiert sind</entry>
- </row>
-
- <row>
- <entry><varname>LUA_MODSHAREDIR</varname></entry>
- <entry>Das Verzeichnis, in dem
- <application>Lua</application>-Module
- (<filename>.lua</filename>) installiert sind</entry>
- </row>
-
- <row>
- <entry><varname>LUA_PKGNAMEPREFIX</varname></entry>
- <entry>Der Paketnamen-Präfix, der von
- <application>Lua</application>-Modulen verwendet
- wird</entry>
- </row>
-
- <row>
- <entry><varname>LUA_CMD</varname></entry>
- <entry>Das Verzeichnis, in dem der
- <application>Lua</application>-Interpreter liegt</entry>
- </row>
-
- <row>
- <entry><varname>LUAC_CMD</varname></entry>
- <entry>Das Verzeichnis, in dem der
- <application>Lua</application>-Compiler liegt</entry>
- </row>
-
- <row>
- <entry><varname>TOLUA_CMD</varname></entry>
- <entry>Das Verzeichnis, in dem das
- <application>tolua</application>-Programm liegt</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <example xml:id="lua-variables-example">
- <title>Einem Port mitteilen, in welchem Verzeichnis
- <application>Lua</application> liegt</title>
-
- <para>Der folgende Ausschnitt zeigt, wie einem Port,
- welcher ein configure-Skript verwendet, mitgeteilt werden
- kann, wo die <application>Lua</application>-Header-Dateien
- und Bibliotheken liegen.</para>
-
- <programlisting>
-USE_LUA= 4.0
-GNU_CONFIGURE= yes
-CONFIGURE_ENV= CPPFLAGS="-I${LUA_INCDIR}" LDFLAGS="-L${LUA_LIBDIR}"</programlisting>
- </example>
- </sect2>
-
- <sect2 xml:id="lua-premk">
- <title>Verarbeitung in
- <filename>bsd.port.pre.mk</filename></title>
-
- <para>Falls die Variablen gleich nach dem Einbinden von
- <filename>bsd.port.pre.mk</filename> benutzt werden sollen,
- so muss die Variable <varname>LUA_PREMK</varname> definiert
- werden.</para>
-
- <important>
- <para>Falls <varname>LUA_PREMK</varname> definiert ist, so
- werden Version, Abhängigkeiten, Komponenten und
- vordefinierte Variablen nicht geändert, wenn die
- Variablen des <application>Lua</application>-Ports
- <emphasis>nach</emphasis> dem Einbinden von
- <filename>bsd.port.pre.mk</filename> geändert
- werden.</para>
- </important>
-
- <example xml:id="lua-premk-example">
- <title>Verwendung von
- <application>Lua</application>-Variablen in
- Kommandos</title>
-
- <para>Der folgende Ausschnitt zeigt die Verwendung von
- <varname>LUA_PREMK</varname> durch Ausführen des
- <application>Lua</application>-Interpreters, um die
- vollständige Version als Zeichenkette zu erhalten,
- diese dann einer Variablen zuzuweisen und die Variable
- schließlich einem Programm zu übergeben.</para>
-
- <programlisting>USE_LUA= 5.0
-LUA_PREMK= yes
-
-.include &lt;bsd.port.pre.mk&gt;
-
-.if exists(${LUA_CMD})
-VER_STR!= ${LUA_CMD} -v
-
-CFLAGS+= -DLUA_VERSION_STRING="${VER_STR}"
-.endif</programlisting>
- </example>
-
- <note>
- <para>Die <application>Lua</application>-Variablen
- können problemlos in Befehlen benutzt werden, falls
- diese in Targets ohne gesetztes
- <varname>LUA_PREMK</varname> verwendet werden.</para>
- </note>
- </sect2>
- </sect1>
-
- <sect1 xml:id="using-xfce">
- <title>Xfce verwenden</title>
-
- <para>Die <varname>USE_XFCE</varname>-Variable wird für
- die automatische Konfiguration der Abhängigkeiten
- eingesetzt, welche die Xfce-Basisbibliotheken oder Anwendungen
- wie <package>x11-toolkits/libxfce4gui</package> und
- <package>x11-wm/xfce4-panel</package>
- verwenden.</para>
-
- <para>Die folgenden Xfce-Bibliotheken und -Anwendungen werden
- derzeit unterstützt:</para>
-
- <itemizedlist>
- <listitem>
- <para>libexo: <package>x11/libexo</package></para>
- </listitem>
-
- <listitem>
- <para>libgui: <package>x11-toolkits/libxfce4gui</package></para>
- </listitem>
-
- <listitem>
- <para>libutil: <package>x11/libxfce4util</package></para>
- </listitem>
-
- <listitem>
- <para>libmcs: <package>x11/libxfce4mcs</package></para>
- </listitem>
-
- <listitem>
- <para>mcsmanager: <package>sysutils/xfce4-mcs-manager</package></para>
- </listitem>
-
- <listitem>
- <para>panel: <package>x11-wm/xfce4-panel</package></para>
- </listitem>
-
- <listitem>
- <para>thunar: <package>x11-fm/thunar</package></para>
- </listitem>
-
- <listitem>
- <para>wm: <package>x11-wm/xfce4-wm</package></para>
- </listitem>
-
- <listitem>
- <para>xfdev: <package>dev/xfce4-dev-tools</package></para>
- </listitem>
- </itemizedlist>
-
- <para>Die folgenden zusätzlichen Parameter werden
- unterstützt:</para>
-
- <itemizedlist>
- <listitem>
- <para>configenv: Benutzen Sie dies, wenn Ihr Port eine
- speziell angepasste
- <varname>CONFIGURE_ENV</varname>-Variable benötigt,
- um seine erforderlichen Bibliotheken zu finden.
- <programlisting>-I&dollar;{LOCALBASE}/include
- -L&dollar;{LOCALBASE}/lib</programlisting> wird CPPFLAGS
- hinzugefügt und ergibt
- <varname>CONFIGURE_ENV</varname>.</para>
- </listitem>
- </itemizedlist>
-
- <para>Wenn also ein Port von <package>sysutils/xfce4-mcs-manager</package>
- abhängt und die speziellen CPPFLAGS in seiner
- configure-Umgebung verlangt, dann würde die Syntax wie
- folgt aussehen:</para>
-
- <programlisting>USE_XFCE= mcsmanager configenv</programlisting>
- </sect1>
-
- <sect1 xml:id="using-mozilla">
- <title>Mozilla verwenden</title>
-
- <table frame="none">
- <title>Variablen für Ports, die Mozilla verwenden</title>
-
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><varname>USE_GECKO</varname></entry>
-
- <entry>Vom Port unterstützte Gecko-Backends. Mögliche
- Werte sind:
- <literal>libxul</literal> (<filename>libxul.so</filename>),
- <literal>seamonkey</literal> (<filename>libgtkembedmoz.so</filename>,
- (veraltet, sollte daher nicht mehr verwendet werden).</entry>
- </row>
-
- <row>
- <entry><varname>USE_FIREFOX</varname></entry>
-
- <entry>Der Port benötigt Firefox, um korrekt
- zu funktionieren. Mögliche Werte sind:
- <literal>yes</literal> (verwendet die Standardversion),
- <literal>40</literal>, <literal>36</literal>,
- <literal>35</literal>. Die Standardversion ist derzeit
- <literal>40</literal>.</entry>
- </row>
-
- <row>
- <entry><varname>USE_FIREFOX_BUILD</varname></entry>
-
- <entry>Um den Port zu bauen, muss Firefox installiert
- sein. Wird diese Variable gesetzt, wird
- automatisch auch <varname>USE_FIREFOX</varname>
- gesetzt.</entry>
- </row>
-
- <row>
- <entry><varname>USE_SEAMONKEY</varname></entry>
-
- <entry>Der Port benötigt Seamonkey, um korrekt
- zu funktionieren. Mögliche Werte sind:
- <literal>yes</literal> (verwendet die Standardversion),
- <literal>20</literal>, <literal>11</literal>
- (veraltet, sollte daher nicht mehr verwendet werden).
- Die Standardversion ist <literal>20</literal>.</entry>
- </row>
-
- <row>
- <entry><varname>USE_SEAMONKEY_BUILD</varname></entry>
-
- <entry>Um den Port zu bauen, muss Seamonkey installiert
- sein. Wird diese Variable gesetzt, wird
- automatisch auch <varname>USE_SEAMONKEY</varname>
- gesetzt.</entry>
- </row>
-
- <row>
- <entry><varname>USE_THUNDERBIRD</varname></entry>
-
- <entry>Dieser Port benötigt Thunderbird, um korrekt
- zu funktionieren. Mögliche Werte sind:
- <literal>yes</literal> (verwendet die Standardversion),
- <literal>31</literal>, <literal>30</literal>
- (veraltet, sollte daher nicht mehr verwendet werden).
- Die Standardversion ist <literal>31</literal>.</entry>
- </row>
-
- <row>
- <entry><varname>USE_THUNDERBIRD_BUILD</varname></entry>
-
- <entry>Um den Port zu bauen, muss Thunderbird installiert
- sein. Wird diese Variable gesetzt, wird
- automatisch auch <varname>USE_THUNDERBIRD</varname>
- gesetzt.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Eine komplette Liste aller verfügbaren Variablen finden
- Sie in der Datei
- <filename>/usr/ports/Mk/bsd.gecko.mk</filename>.</para>
- </sect1>
-
- <sect1 xml:id="using-databases">
- <title>Benutzung von Datenbanken</title>
-
- <table frame="none">
- <title>Variablen für Ports, die Datenbanken
- benutzen</title>
-
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Variable</entry>
-
- <entry>Bedeutung</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>USE_BDB</varname></entry>
-
- <entry>Falls die Variable auf <literal>yes</literal>
- gesetzt ist, füge eine Abhängigkeit von
- <package>databases/db41</package>
- hinzu. Die Variable kann auch folgende Werte
- annehmen: 40, 41, 42, 43, 44, 46, 47, 48 oder 51.
- Sie können eine Folge akzeptierter Werte
- angeben - <varname>USE_BDB</varname>=42+ stellt die
- höchste installierte Version fest und greift
- auf 42 zurück, falls sonst nichts installiert
- ist.</entry>
- </row>
-
- <row>
- <entry><varname>USE_MYSQL</varname></entry>
-
- <entry>Falls die Variable auf <literal>yes</literal>
- gesetzt ist, füge <package>databases/mysql55-server</package>
- als Abhängigkeit hinzu. Die damit
- verknüpfte Variable
- <varname>WANT_MYSQL_VER</varname> kann Werte wie
- 323, 40, 41, 50, 51, 52, 55, oder 60 annehmen.</entry>
- </row>
-
- <row>
- <entry><varname>USE_PGSQL</varname></entry>
-
- <entry>Falls die Variable auf <literal>yes</literal>
- gesetzt ist, füge eine Abhängigkeit von
- <package>databases/postgresql84</package>
- hinzu. Die damit verknüpfte Variable
- <varname>WANT_PGSQL_VER</varname> kann Werte wie 73,
- 74, 80, 81, 82, 83, oder 90 annehmen.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Weitere Informationen zu diesem Thema finden sich in der
- Datei <link xlink:href="http://www.freebsd.org/cgi/cvsweb.cgi/ports/Mk/bsd.database.mk">
- bsd.database.mk</link>.</para>
- </sect1>
-
- <sect1 xml:id="rc-scripts">
- <title>Starten und Anhalten von Diensten (rc Skripten)</title>
-
- <para><filename>rc.d</filename>-Skripten werden zum Starten
- von Diensten während des Systemstarts verwendet und um
- den Administratoren einen Standardweg zum Anhalten und Starten
- von Diensten zu bieten. Ports halten sich an dieses
- systemweite <filename>rc.d</filename>-Framework. Details zu
- deren Benutzung können im <link xlink:href="&url.books.handbook;/configtuning-rcd.html">rc.d Kapitel
- des Handbuchs</link> nachgelesen werden. Ausführliche
- Beschreibungen der verfügbaren Befehle stehen in
- &man.rc.8; und &man.rc.subr.8;. Desweiteren gibt es <link xlink:href="&url.articles.rc-scripting.en;">einen Artikel</link> zu
- praktischen Aspekten bezüglich
- <filename>rc.d</filename>-Skripten.</para>
-
- <para>Ein oder mehrere <filename>rc.d</filename>-Skripten können installiert
- werden mittels:</para>
-
- <programlisting>USE_RC_SUBR= doormand</programlisting>
-
- <para>Skripten müssen im Unterverzeichnis
- <filename>files</filename> abgelegt und jeder Skript-Datei
- muss ein <literal>.in</literal>-Suffix hinzugefügt
- werden. Standardmäßige
- <varname>SUB_LIST</varname>-Ersetzungen werden für diese
- Dateien unterstützt. Die Verwendung von
- <literal>%%PREFIX%%</literal> und
- <literal>%%LOCALBASE%%</literal> wird dringend empfohlen.
- Näheres zu <varname>SUB_LIST</varname> kann im <link linkend="using-sub-files">zugehörigen Kapitel</link>
- nachgelesen werden.</para>
-
- <para>Für &os;-Versionen, die älter als 6.1-RELEASE
- sind, ist die Integration mittels &man.rcorder.8;
- möglich, indem <varname>USE_RCORDER</varname> anstatt
- <varname>USE_RC_SUBR</varname> verwendet wird. Die Verwendung
- dieser Methode ist jedoch nur notwendig, wenn der Port in die
- Verzeichnisstruktur des Basissystems installiert werden kann
- oder der Dienst vor den
- <filename>FILESYSTEMS</filename>-Skripten in
- <filename>rc.d</filename> des Basissystems gestartet sein
- muss.</para>
-
- <para>Seit &os;&nbsp;6.1-RELEASE sind lokale
- <filename>rc.d</filename>-Skripten (inklusive der durch Ports
- installierten) im allgemeinen &man.rcorder.8; des
- Basissystems.</para>
-
- <para>Beispiel eines einfachen
- <filename>rc.d</filename>-Skripts:</para>
-
- <programlisting>#!/bin/sh
-
-# &dollar;FreeBSD&dollar;
-#
-# PROVIDE: doormand
-# REQUIRE: LOGIN
-# KEYWORD: shutdown
-#
-# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
-# to enable this service:
-#
-# doormand_enable (bool): Set to NO by default.
-# Set it to YES to enable doormand.
-# doormand_config (path): Set to %%PREFIX%%/etc/doormand/doormand.cf
-# by default.
-#
-
-. /etc/rc.subr
-
-name="doormand"
-rcvar=${name}_enable
-
-command=%%PREFIX%%/sbin/${name}
-pidfile=/var/run/${name}.pid
-
-load_rc_config $name
-
-: ${doormand_enable="NO"}
-: ${doormand_config="%%PREFIX%%/etc/doormand/doormand.cf"}
-
-command_args="-p $pidfile -f $doormand_config"
-
-run_rc_command "$1"</programlisting>
-
- <para>Solange kein guter Grund dafür besteht, einen Dienst
- früher starten zu lassen, sollten alle Ports-Skripten
- <programlisting>REQUIRE: LOGIN</programlisting> verwenden.
- Falls der Port von einem bestimmten Benutzer (außer
- root) ausgeführt wird, ist dies zwingend.
- <programlisting>KEYWORD: shutdown</programlisting> ist im
- Skript oben deswegen vorhanden, weil der frei erfundene
- Beispiel-Port einen Dienst startet und dieser beim
- Herunterfahren des Systems sauber beendet werden sollte.
- Startete das Skript keinen persistenten Dienst, wäre dies
- nicht notwendig.</para>
-
- <para>Für die Wertzuweisung von Variablen sollte
- &quot;=&quot; anstatt &quot;:=&quot; verwendet werden, da bei
- Ersterem nur auf einen Standardwert gesetzt wird, wenn die
- Variable vorher noch nicht gesetzt war, und bei Letzterem
- dieser gesetzt wird, auch wenn der Wert vorher Null gewesen
- ist. Ein Benutzer kann durchaus einen Ausdruck wie
- <programlisting>doormand_flags=""</programlisting> in seiner
- <filename>rc.conf.local</filename>-Datei stehen haben, und
- eine Variablenzuweisung mittels &quot;:=&quot; würde in
- diesem Fall die Benutzerdefinition überschreiben.</para>
-
- <note>
- <para>Es sollten keine weiteren Skripten mit der
- <filename>.sh</filename>-Endung hinzugefügt werden.
- Irgendwann wird es ein Massenumbenennen aller Skripten im
- Repository geben, die immer noch diese Endung haben.</para>
- </note>
-
- <sect2>
- <title>Anhalten und Deinstallieren von Diensten</title>
-
- <para>Es ist möglich, dass ein Dienst während der
- Deinstallation automatisch angehalten wird. Es wird
- empfohlen dieses Verhalten nur zu implementieren, wenn es
- unbedingt erforderlich ist zuerst den Dienst anzuhalten und
- dann die Dateien zu entfernen. Normalerweise sollte es dem
- Administrator überlassen werden, ob ein Dienst durch
- Deinstallieren angehalten werden soll. Dies betrifft auch
- den Vorgang des Aktualisierens.</para>
-
- <para>Der Datei <filename>pkg-plist</filename> sollte eine
- Zeile wie folgt zugefügt werden:</para>
-
- <programlisting>@stopdaemon doormand</programlisting>
-
- <para>Das Argument muss dabei mit dem Inhalt der
- <varname>USE_RC_SUBR</varname>-Variablen
- übereinstimmen.</para>
- </sect2>
- </sect1>
-
- <sect1 xml:id="users-and-groups">
- <title>Hinzufügen von Benutzern und Gruppen</title>
-
- <para>Manche Ports setzen voraus, dass ein bestimmter Benutzer
- auf dem System angelegt ist. Wählen Sie in einem solchen
- Fall eine freie Kennnummer zwischen 50 und 999 aus und tragen
- Sie diese in <filename>ports/UIDs</filename> (für
- Benutzer) oder <filename>ports/GIDs</filename> (für
- Gruppen) ein. Stellen Sie dabei sicher, dass Sie keine
- Kennnummer auswählen, die bereits vom System oder von
- anderen Ports verwendet wird.</para>
-
- <para>Erstellen Sie bitte eine entsprechende Patch-Datei
- für diese beiden Dateien, wenn für Ihren Port ein
- neuer Benutzer oder eine neue Gruppe angelegt werden
- muss.</para>
-
- <para>Sie können dann die Variablen
- <varname>USERS</varname> und <varname>GROUPS</varname> im
- <filename>Makefile</filename> benutzen, um bei der
- Port-Installation das automatische Anlegen des Benutzers zu
- veranlassen.</para>
-
- <programlisting>USERS= pulse
-GROUPS= pulse pulse-access pulse-rt</programlisting>
-
- <para>Die Liste mit den momentan belegten UIDs (GIDs) befindet
- sich in <filename>ports/UIDs</filename>
- (<filename>ports/GIDs</filename>).</para>
- </sect1>
-
- <sect1>
- <title>Von Kernelquellen abhängige Ports</title>
-
- <para>Einige Ports (beispielsweise vom Kernel ladbare Module)
- benötigen die Kernelsourcen, damit sie gebaut werden
- können. Die folgenden Zeilen beschreiben den korrekten
- Weg, wie Sie feststellen können, ob der Benutzer die
- Kernelsourcen installiert hat:</para>
-
- <programlisting>.if !exists(${SRC_BASE}/sys/Makefile)
-
-IGNORE= requires kernel sources to be installed
-.endif</programlisting>
- </sect1>
- </chapter>
-
- <chapter xml:id="plist">
- <title>Fortgeschrittene
- <filename>pkg-plist</filename>-Methoden</title>
-
- <sect1 xml:id="plist-sub">
- <title>Änderungen an <filename>pkg-plist</filename> mit
- Hilfe von make-Variablen</title>
-
- <para>Einige Ports, insbesondere die
- <literal>p5-</literal>-Ports, müssen, abhängig von
- ihren Konfigurationsoptionen (oder im Falle der p5-Ports von
- der <literal>perl</literal>-Version), die
- <filename>pkg-plist</filename> verändern. Um dies zu
- vereinfachen, werden für jeden Eintrag in
- <filename>pkg-plist</filename> die Variablen
- <literal>%%OSREL%%</literal>, <literal>%%PERL_VER%%</literal>
- und <literal>%%PERL_VERSION%%</literal> durch die jeweiligen
- Werte ersetzt. Der Wert von <literal>%%OSREL%%</literal> ist
- die Revisionsnummer des Betriebssystems (z.B.
- <literal>4.9</literal>). <literal>%%PERL_VERSION%%</literal>
- und <literal>%%PERL_VER%%</literal> geben die
- vollständige Versionsnummer von <command>perl</command>
- (z.B. <literal>5.8.9</literal>) an. Weitere, die
- Dokumentationsdateien des Ports betreffende
- <literal>%%VARS%%</literal>, werden
- im <link linkend="install-documentation">entsprechenden
- Abschnitt</link> erläutert.</para>
-
- <para>Falls Sie weitere Ersetzungen von Variablen
- durchführen müssen, können Sie in der Variable
- <varname>PLIST_SUB</varname> eine Liste von
- <literal>VAR=VALUE</literal>-Paaren
- angeben, wobei in der <filename>pkg-plist</filename>
- <literal>%%VAR%%</literal> durch
- <replaceable>VALUE</replaceable> ersetzt wird.</para>
-
- <para>Wenn Sie z.B. einen Port haben, der viele Dateien in ein
- versionsspezifisches Unterverzeichnis installiert, dann
- können Sie etwas wie</para>
-
- <programlisting>OCTAVE_VERSION= 2.0.13
-PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION}</programlisting>
-
- <para>in das <filename>Makefile</filename> schreiben und
- <literal>%%OCTAVE_VERSION%%</literal> verwenden,
- unabhängig davon, wo die Variable in
- <filename>pkg-plist</filename> verwendet wird. In diesem Fall
- müssen Sie bei einem Upgrade des Ports nicht dutzende
- (oder manchmal sogar hunderte) Zeilen in
- <filename>pkg-plist</filename> anpassen.</para>
-
- <para>Falls Ihr Port in Abhängigkeit von den
- ausgewählten Optionen Dateien installiert, ist es
- üblich, den entsprechenden Zeilen in der
- <filename>pkg-plist</filename> eine Zeichenfolge
- <literal>%%TAG%%</literal> voranzustellen, wobei der
- Platzhalter <literal>TAG</literal> der Variablen
- <varname>PLIST_SUB</varname> im <filename>Makefile</filename>
- bei gleichzeitiger Zuweisung des speziellen Werts
- <literal>@comment</literal> hinzugefügt wird, der die
- Paket-Werkzeuge die Zeile ignorieren lässt:</para>
-
- <programlisting>.if defined(WITH_X11)
-PLIST_SUB+= X11=""
-.else
-PLIST_SUB+= X11="@comment "
-.endif</programlisting>
-
- <para>und in der <filename>pkg-plist</filename>:</para>
-
- <programlisting>%%X11%%bin/foo-gui</programlisting>
-
- <para>Diese Ersetzung (ebenso wie das Hinzufügen weiterer
- <link linkend="makefile-manpages">Manualpages</link>) wird
- zwischen den <buildtarget>pre-install</buildtarget>- und
- <buildtarget>do-install</buildtarget>-Targets ausgeführt,
- indem aus <filename>PLIST</filename>
- gelesen und in
- <filename>TMPPLIST</filename> geschrieben
- wird (Standard:
- <filename>WRKDIR/.PLIST.mktmp</filename>).
- Falls Ihr Port also
- <filename>PLIST</filename> während dem
- Erstellen generiert, so sollte dies vor oder in
- <buildtarget>pre-install</buildtarget> geschehen. Muss Ihr Port
- die resultierende Datei verändern, so sollte dies in
- <buildtarget>post-install</buildtarget> mit der Ausgabedatei
- <filename>TMPPLIST</filename>
- erfolgen.</para>
-
- <para>Eine weitere Möglichkeit, die Paketliste eines
- Ports zu verändern, besteht darin die Variablen
- <varname>PLIST_FILES</varname> und
- <varname>PLIST_DIRS</varname> zu setzen. Der Wert jeder der
- beiden Variablen stellt eine Liste von Pfadnamen dar, die
- zusammen mit dem Inhalt von
- <filename>PLIST</filename> in
- <filename>TMPPLIST</filename> geschrieben
- wird. Dabei unterliegen die Namen in
- <varname>PLIST_FILES</varname> und
- <varname>PLIST_DIRS</varname> der weiter oben beschriebenen
- Substitution von
- <literal>%%VAR%%</literal>. Die
- Namen aus <varname>PLIST_FILES</varname> werden ansonsten
- unverändert in die endgültige Paketliste
- übernommen, während den Namen aus
- <varname>PLIST_DIRS</varname> noch der Wert von
- <literal>@dirrm</literal> vorangestellt wird. Damit die
- Verwendung von <varname>PLIST_FILES</varname> und
- <varname>PLIST_DIRS</varname> überhaupt möglich
- ist, müssen diese gesetzt werden, bevor
- <filename>TMPPLIST</filename> geschrieben
- wird&nbsp;&ndash;&nbsp;z.B. in
- <buildtarget>pre-install</buildtarget> oder vorher.</para>
- </sect1>
-
- <sect1 xml:id="plist-cleaning">
- <title>Leere Verzeichnisse</title>
-
- <sect2 xml:id="plist-dir-cleaning">
- <title>Aufräumen leerer Verzeichnisse</title>
-
- <para>Bitte sorgen Sie dafür, dass ihre Ports bei der
- Deinstallation leere Verzeichnisse löschen. Dazu wird
- für jedes Verzeichnis, das der Port erzeugt hat, eine
- <literal>@dirrm</literal>-Zeile angegeben. Um ein
- Verzeichnis zu löschen müssen Sie zuerst dessen
- Unterverzeichnisse entfernen.</para>
-
- <programlisting> :
-lib/X11/oneko/pixmaps/cat.xpm
-lib/X11/oneko/sounds/cat.au
- :
-@dirrm lib/X11/oneko/pixmaps
-@dirrm lib/X11/oneko/sounds
-@dirrm lib/X11/oneko</programlisting>
-
- <para>Es kann allerdings auch vorkommen, dass
- <literal>@dirrm</literal> Fehler ausgibt, da andere Ports
- ein Verzeichnis ebenfalls nutzen. Deshalb können Sie
- <literal>@dirrmtry</literal> verwenden, um nur Verzeichnisse
- zu löschen, die wirklich leer sind, und damit
- Warnhinweise vermeiden.</para>
-
- <programlisting>@dirrmtry share/doc/gimp</programlisting>
-
- <para>Dadurch wird es weder eine Fehlermeldung geben noch
- wird &man.pkg.delete.1; abnormal beendet werden - auch dann
- nicht, wenn
- <filename>${PREFIX}/share/doc/gimp</filename>
- nicht leer ist, da andere Ports hier ebenfalls Dateien
- installiert haben.</para>
- </sect2>
-
- <sect2 xml:id="plist-dir-empty">
- <title>Erstellen leerer Verzeichnisse</title>
-
- <para>Um leere Verzeichnisse während der Installation
- eines Ports zu erstellen, bedarf es etwas Aufmerksamkeit.
- Diese Verzeichnisse werden nicht erstellt, wenn das Paket
- installiert wird, da Pakete nur die Dateien speichern und
- &man.pkg.add.1; nur die Verzeichnisse erstellt, die
- dafür benötigt werden. Um sicher zu gehen, dass
- das leere Verzeichnis erstellt wird, wenn ein Paket
- installiert wird, muss die folgende Zeile in
- <filename>pkg-plist</filename> über der entsprechenden
- <literal>@dirrm</literal> Zeile eingetragen werden:</para>
-
- <programlisting>@exec mkdir -p %D/share/foo/templates</programlisting>
- </sect2>
- </sect1>
-
- <sect1 xml:id="plist-config">
- <title>Konfigurationsdateien</title>
-
- <para>Sollte Ihr Port Konfigurationsdateien in
- <filename>PREFIX/etc</filename>
- benötigen, so sollten Sie diese
- <emphasis>nicht</emphasis> einfach installieren und in
- <filename>pkg-plist</filename> auflisten. Dies würde
- &man.pkg.delete.1; veranlassen, diese Dateien zu löschen,
- selbst wenn wenn sie vom Benutzer editiert wurden.</para>
-
- <para>Stattdessen sollten Beispieldateien mit einem
- entsprechenden Suffix (beispielsweise
- <filename>filename.sample</filename>)
- versehen werden. Ist die Konfigurationsdatei nicht vorhanden,
- so sollte die Beispieldatei an deren Platz kopiert werden. Bei
- der Deinstallation sollte die Konfigurationsdatei
- gelöscht werden, aber nur, wenn sie nicht vom Benutzer
- verändert wurde. Das alles muss sowohl im
- <filename>Makefile</filename> des Ports als auch in der
- <filename>pkg-plist</filename> (für die Installation aus
- einem Paket) sichergestellt werden.</para>
-
- <para>Beispiel aus einem <filename>Makefile</filename>:</para>
-
- <programlisting>post-install:
- @if [ ! -f ${PREFIX}/etc/orbit.conf ]; then \
- ${CP} -p ${PREFIX}/etc/orbit.conf.sample ${PREFIX}/etc/orbit.conf ; \
- fi</programlisting>
-
- <para>Beispiel aus einer <filename>pkg-plist</filename>:</para>
-
- <programlisting>@unexec if cmp -s %D/etc/orbit.conf.sample %D/etc/orbit.conf; then rm -f %D/etc/orbit.conf; fi
-etc/orbit.conf.sample
-@exec if [ ! -f %D/etc/orbit.conf ] ; then cp -p %D/%F %B/orbit.conf; fi</programlisting>
-
- <para>Wahlweise können Sie auch eine <link linkend="porting-message">Nachricht</link> ausgegeben lassen,
- in der Sie den Nutzer auffordern, die Datei an die richtige
- Stelle zu kopieren und zu bearbeiten, bevor das Programm
- ausgeführt werden kann.</para>
- </sect1>
-
- <sect1 xml:id="plist-dynamic">
- <title>Dynamische oder statische Paketliste</title>
-
- <para>Eine <emphasis>statische Paketliste</emphasis> ist eine
- Paketliste, die in der Ports-Sammlung, entweder in Form der
- <filename>pkg-plist</filename> (mit oder ohne der Ersetzung
- von Variablen) oder durch <varname>PLIST_FILES</varname> und
- <varname>PLIST_DIRS</varname> im <filename>Makefile</filename>
- eingebettet, verfügbar ist. Selbst wenn der Inhalt durch
- ein Werkzeug oder ein Target im Makefile automatisch erzeugt
- wird, <emphasis>bevor</emphasis> die Datei von einem Committer
- in die Ports-Sammlung aufgenommen wird, so ist dies immer noch
- eine statische Liste, da es möglich ist den Dateiinhalt
- zu betrachten ohne ein Distfile Herunterladen oder Kompilieren
- zu müssen.</para>
-
- <para>Eine <emphasis>dynamische Paketliste</emphasis> ist eine
- Paketliste, die beim Kompilieren des Ports erstellt wird,
- abhängig davon, welche Dateien und Verzeichnisse
- installiert werden. Es ist nicht möglich diese Liste zu
- betrachten, bevor der Quelltext heruntergeladen und kompiliert
- oder nachdem ein <literal>make clean</literal> ausgeführt
- wurde.</para>
-
- <para>Der Einsatz dynamischer Paketlisten ist zwar nicht
- untersagt, aber Sie sollten, wann immer das möglich ist,
- statische Paketlisten verwenden, da die Nutzer dann
- &man.grep.1; auf alle verfügbaren Ports anwenden
- können, um z.B. herauszufinden, von welchem eine
- bestimmte Datei installiert wurde. Dynamische Paketlisten
- sollten für komplexe Ports verwendet werden, bei denen
- sich die Liste abhängig von den gewählten Funktionen
- sehr stark ändern kann (wodurch die Pflege von statischen
- Listen unmöglich wird), oder Ports, welche die Paketliste
- abhängig von den Versionen verwendeter
- Abhängigkeiten verändern (z.B. Ports, die Ihre
- Dokumentation mit <application>Javadoc</application>
- erzeugen).</para>
-
- <para>Maintainer, die dynamische Paketlisten bevorzugen,
- werden dazu aufgefordert, neue Targets zu Ihren Ports
- hinzuzufügen, welche die
- <filename>pkg-plist</filename>-Datei erzeugen, sodass Benutzer
- den Inhalt überprüfen können.</para>
- </sect1>
-
- <sect1 xml:id="plist-autoplist">
- <title>Automatisiertes Erstellen von Paketlisten</title>
-
- <para>Als Erstes sollten Sie sich vergewissern, dass der Port
- bis auf <filename>pkg-plist</filename> vollständig
- ist.</para>
-
- <para>Als Nächstes erstellen Sie einen temporären
- Verzeichnisbaum, in welchem Ihr Port installiert werden kann,
- und installieren Sie alle Abhängigkeiten.</para>
-
- <screen>&prompt.root; <userinput>mkdir /var/tmp/`make -V PORTNAME`</userinput>
-&prompt.root; <userinput>mtree -U -f `make -V MTREE_FILE` -d -e -p /var/tmp/`make -V PORTNAME`</userinput>
-&prompt.root; <userinput>make depends PREFIX=/var/tmp/`make -V PORTNAME`</userinput></screen>
-
- <para>Speichern Sie die Verzeichnisstruktur in einer neuen
- Datei.</para>
-
- <screen>&prompt.root; <userinput>(cd /var/tmp/`make -V PORTNAME` &amp;&amp; find -d * -type d) | sort &gt; OLD-DIRS</userinput></screen>
-
- <para>Erstellen Sie eine leere
- <filename>pkg-plist</filename>-Datei:</para>
-
- <screen>&prompt.root; <userinput>:&gt;pkg-plist</userinput></screen>
-
- <para>Wenn Ihr Port auf <varname>PREFIX</varname> achtet (was
- er machen sollte), so kann der Port nun installiert und die
- Paketliste erstellt werden.</para>
-
- <screen>&prompt.root; <userinput>make install PREFIX=/var/tmp/`make -V PORTNAME`</userinput>
-&prompt.root; <userinput>(cd /var/tmp/`make -V PORTNAME` &amp;&amp; find -d * \! -type d) | sort &gt; pkg-plist</userinput></screen>
-
- <para>Sie müssen auch alle neu erstellten Verzeichnisse in
- die Paketliste aufnehmen.</para>
-
- <screen>&prompt.root; <userinput>(cd /var/tmp/`make -V PORTNAME` &amp;&amp; find -d * -type d) | sort | comm -13 OLD-DIRS - | sort -r | sed -e 's#^#@dirrm #' &gt;&gt; pkg-plist</userinput></screen>
-
- <para>Zu guter Letzt muss die Paketliste noch manuell
- aufgeräumt werden - es funktioniert eben nicht
- <emphasis>alles</emphasis> automatisch. Manualpages sollten im
- <filename>Makefile</filename> des Ports unter
- <varname>MAN<replaceable>n</replaceable></varname>
- aufgeführt sein und nicht in der Paketliste.
- Konfigurationsdateien des Benutzers sollten entfernt oder als
- <filename>filename.sample</filename>
- installiert werden. Die <filename>info/dir</filename>-Datei
- sollte nicht aufgeführt sein und die zugehörigen
- <filename>install-info</filename>-Zeilen sollten
- hinzugefügt werden, wie im <link linkend="makefile-info">info files</link>-Abschnitt
- beschrieben. Alle Bibliotheken, die der Port installiert,
- sollten aufgelistet werden, wie es im <link linkend="porting-shlibs">Shared Libraries</link>-Abschnitt
- festgelegt ist.</para>
-
- <para>Alternativ dazu können Sie das
- <command>plist</command>-Skript in
- <filename>/usr/ports/Tools/scripts/</filename> verwenden, um
- die Paketliste automatisch zu erstellen. Das
- <filename>plist</filename>-Skript ist ein
- <application>Ruby</application>-Skript, das die meisten der in
- den vorangehenden Absätzen kurz dargestellten manuellen
- Schritte automatisiert.</para>
-
- <para>Der erste Schritt ist
- derselbe wie oben: Nehmen Sie die ersten drei Zeilen, also
- <command>mkdir</command>, <command>mtree</command> und
- <command>make depends</command>. Installieren und bauen Sie
- dann den Port:</para>
-
- <screen>&prompt.root; <userinput>make install PREFIX=/var/tmp/`make -V PORTNAME`</userinput></screen>
-
- <para>Und lassen Sie <command>plist</command> die
- <filename>pkg-plist</filename>-Datei erstellen:</para>
-
- <screen>&prompt.root; <userinput>/usr/ports/Tools/scripts/plist -Md -m `make -V MTREE_FILE` /var/tmp/`make -V PORTNAME` &gt; pkg-plist</userinput></screen>
-
- <para>Die Paketliste muss immer noch von Hand aufgeräumt
- werden, wie es oben erklärt wurde.</para>
-
- <para>Ein weiteres Werkzeug zur Erzeugung einer ersten
- <filename>pkg-plist</filename>-Datei ist <package>ports-mgmt/genplist</package>. Wie bei jedem
- automatisierten Hilfswerkzeug, sollte die erzeugte
- <filename>pkg-plist</filename>-Datei überprüft und
- bei Bedarf von Hand nachbearbeitet werden.</para>
- </sect1>
- </chapter>
-
- <chapter xml:id="pkg-files">
- <title>Die <filename>pkg-*</filename>
- Dateien</title>
-
- <para>Es gibt noch einige Tricks mit
- <filename>pkg-*</filename>, die wir
- noch nicht erwähnt haben, die aber oft sehr praktisch
- sind.</para>
-
- <sect1 xml:id="porting-message">
- <title><filename>pkg-message</filename></title>
-
- <para>Wenn Sie dem Anwender bei der Installation weitere
- Informationen anzeigen wollen, so können Sie diese
- Nachricht in <filename>pkg-message</filename> speichern.
- Diese Vorgehensweise ist oft nützlich, um
- zusätzliche Schritte anzuzeigen, die nach &man.pkg.add.1;
- durchgeführt werden müssen. Dadurch können Sie
- auch Lizenzinformationen darstellen.</para>
-
- <para>Wollen Sie nur ein paar Zeilen über die
- Einstellungen zum Erstellen des Ports oder Warnungen ausgeben,
- benutzen Sie <varname>ECHO_MSG</varname>.
- <filename>pkg-message</filename> ist nur für Schritte
- nach der Installation vorgesehen. Sie sollten den Unterschied
- zwischen <varname>ECHO_MSG</varname> und
- <varname>ECHO_CMD</varname> beachten: Ersteres wird benutzt,
- um Informationen auf dem Bildschirm auszugeben, während
- Letzteres für Kommando-Pipelining bestimmt ist.</para>
-
- <para>Ein gutes Beispiel für die Benutzung der beiden
- Befehle ist in <filename>shells/bash2/Makefile</filename> zu
- finden:</para>
-
- <programlisting>update-etc-shells:
- @${ECHO_MSG} "updating /etc/shells"
- @${CP} /etc/shells /etc/shells.bak
- @( ${GREP} -v ${PREFIX}/bin/bash /etc/shells.bak; \
- ${ECHO_CMD} ${PREFIX}/bin/bash) &gt;/etc/shells
- @${RM} /etc/shells.bak</programlisting>
-
- <note>
- <para>Die <filename>pkg-message</filename> wird nicht zur
- <filename>pkg-plist</filename> hinzugefügt. Sie wird
- auch nicht automatisch angezeigt, falls ein Anwender den
- Port installiert. Sie müssen also die Ausgabe selbst im
- <buildtarget>post-install</buildtarget>-Ziel des Make-Vorgangs
- veranlassen.</para>
- </note>
- </sect1>
-
- <sect1 xml:id="pkg-install">
- <title><filename>pkg-install</filename></title>
-
- <para>Sollte es nötig sein, dass Ihr Port bei der
- Installation des Binärpakets mit &man.pkg.add.1; Befehle
- ausführt, können Sie das Skript
- <filename>pkg-install</filename> benutzen. Dieses Skript wird
- automatisch dem Paket hinzugefügt und zweimal von
- &man.pkg.add.1; ausgeführt: Zuerst als
- <literal>&dollar;{SH} pkg-install &dollar;{PKGNAME}
- PRE-INSTALL</literal> und beim zweiten Mal als
- <literal>&dollar;{SH} pkg-install &dollar;{PKGNAME}
- POST-INSTALL</literal>. <literal>&dollar;2</literal> kann also
- getestet werden, um festzustellen, in welchem Modus das Skript
- ausgeführt wird. Die Umgebungsvariable
- <envar>PKG_PREFIX</envar> wird auf das Verzeichnis gesetzt, in
- welches das Paket installiert wird. Siehe &man.pkg.add.1;
- für weiterführende Informationen.</para>
-
- <note>
- <para>Das Skript wird nicht automatisch ausgeführt,
- wenn Sie den Port mit <command>make install</command>
- installieren. Wenn Sie es ausführen lassen wollen, dann
- müssen Sie es im Makefile aufrufen:
- <literal>PKG_PREFIX=&dollar;{PREFIX} &dollar;{SH}
- &dollar;{PKGINSTALL} &dollar;{PKGNAME}
- PRE-INSTALL.</literal></para>
- </note>
- </sect1>
-
- <sect1 xml:id="pkg-deinstall">
- <title><filename>pkg-deinstall</filename></title>
-
- <para>Dieses Skript wird ausgeführt, wenn ein Paket
- deinstalliert wird.</para>
-
- <para>Es wird zweimal von &man.pkg.delete.1; aufgerufen. Das
- erste Mal als <literal>&dollar;{SH} pkg-deinstall
- &dollar;{PKGNAME} DEINSTALL</literal> und dann als
- <literal>&dollar;{SH} pkg-deinstall &dollar;{PKGNAME}
- POST-DEINSTALL.</literal></para>
- </sect1>
-
- <sect1 xml:id="pkg-req">
- <title><filename>pkg-req</filename></title>
-
- <para>Muss Ihr Port entscheiden, ob er installiert werden
- soll oder nicht, können Sie ein
- <filename>pkg-req</filename>-<quote>Bedingungsskript</quote>
- verwenden. Dieses wird automatisch bei der Installation/
- Deinstallation aufgerufen, um zu entscheiden, ob die
- Installation/ Deinstallation fortgesetzt werden soll.</para>
-
- <para>Das Skript wird während der Installation von
- &man.pkg.add.1; als <literal>pkg-req &dollar;{PKGNAME}
- INSTALL</literal> aufgerufen. Bei der Deinstallation wird es
- von &man.pkg.delete.1; als <literal>pkg-req &dollar;{PKGNAME}
- DEINSTALL</literal> ausgeführt.</para>
- </sect1>
-
- <sect1 xml:id="pkg-names">
- <title xml:id="porting-pkgfiles">Ändern der Namen der
- <filename>pkg-*</filename>
- Dateien</title>
-
-<!-- Hier muss noch mal überarbeitet werden -->
-
- <para>Alle Namen der
- <filename>pkg-*</filename> Dateien
- werden durch Variablen festgelegt. Sie können sie bei
- Bedarf also im <filename>Makefile</filename> des Ports
- ändern. Das ist besonders nützlich, wenn Sie die
- gleichen <filename>pkg-*</filename>
- Dateien in mehreren Ports nutzen oder in eine der oben genannten
- Dateien schreiben wollen. Schreiben Sie niemals außerhalb
- des Unterverzeichnisses <varname>WRKDIR</varname>
- <filename>pkg-*</filename>, eine Erklärung hierzu finden
- Sie in <link linkend="porting-wrkdir"> Schreiben ausserhalb von
- <varname>WRKDIR</varname></link>.</para>
-
- <para>Hier ist eine Liste von Variablennamen und ihren
- Standardwerten (<varname>PKGDIR</varname> ist
- standardmäßig
- <varname>&dollar;{MASTERDIR}</varname>).</para>
-
- <informaltable frame="none" pgwide="1">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Variable</entry>
- <entry>Standardwert</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>DESCR</varname></entry>
- <entry><literal>${PKGDIR}/pkg-descr</literal></entry>
- </row>
-
- <row>
- <entry><varname>PLIST</varname></entry>
- <entry><literal>${PKGDIR}/pkg-plist</literal></entry>
- </row>
-
- <row>
- <entry><varname>PKGINSTALL</varname></entry>
- <entry><literal>${PKGDIR}/pkg-install</literal></entry>
- </row>
-
- <row>
- <entry><varname>PKGDEINSTALL</varname></entry>
- <entry><literal>${PKGDIR}/pkg-deinstall</literal></entry>
- </row>
-
- <row>
- <entry><varname>PKGREQ</varname></entry>
- <entry><literal>${PKGDIR}/pkg-req</literal></entry>
- </row>
-
- <row>
- <entry><varname>PKGMESSAGE</varname></entry>
- <entry><literal>${PKGDIR}/pkg-message</literal></entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>Bitte benutzen Sie diese Variablen anstatt
- <varname>PKG_ARGS</varname> zu ändern. Wenn Sie
- <varname>PKG_ARGS</varname> modifizieren, werden diese Dateien
- bei der Installation des Ports nicht korrekt in
- <filename>/var/db/pkg</filename> installiert.</para>
- </sect1>
-
- <sect1 xml:id="using-sub-files">
- <title>Nutzung von <varname>SUB_FILES</varname> und
- <varname>SUB_LIST</varname></title>
-
- <para>Die Variablen <varname>SUB_FILES</varname> und
- <varname>SUB_LIST</varname> sind nützlich, um dynamische
- Werte in Port-Dateien zu verwenden, wie beispielsweise der
- Installations-<varname>PREFIX</varname> in
- <filename>pkg-message</filename>.</para>
-
- <para>Die Variable <varname>SUB_FILES</varname> enthält
- eine Liste von Dateien, die automatisch verändert werden.
- Jede <replaceable>Datei</replaceable> in
- <varname>SUB_FILES</varname> muss ein entsprechendes Pendant
- <replaceable>datei.in</replaceable> im Verzeichnis
- <varname>FILESDIR</varname> haben. Die modifizierte Version
- wird in <varname>WRKDIR</varname> angelegt. Dateien, die als
- Werte von <varname>USE_RC_SUBR</varname> (oder veraltet in
- <varname>USE_RCORDER</varname>) gespeichert werden, werden
- automatisch zu <varname>SUB_FILES</varname> hinzugefügt.
- Für die Dateien <filename>pkg-message</filename>,
- <filename>pkg-install</filename>,
- <filename>pkg-deinstall</filename> und
- <filename>pkg-req</filename> werden die jeweiligen
- Makefile-Variablen selbsttätig auf die geänderte
- Version der Datei gesetzt.</para>
-
- <para>Die Variable <varname>SUB_LIST</varname> ist eine Liste
- von <literal>VAR=WERT</literal>-Paaren. Jedes Paar
- <literal>%%VAR%%</literal> in den Dateien von
- <varname>SUB_FILES</varname> wird mit <literal>WERT</literal>
- ersetzt. Einige gebräuchliche Paare werden automatisch
- definiert: <varname>PREFIX</varname>,
- <varname>LOCALBASE</varname>,
- <varname>DATADIR</varname>, <varname>DOCSDIR</varname>,
- <varname>EXAMPLESDIR</varname>. Jede Zeile, die mit
- <literal>@comment</literal> beginnt, wird nach der
- Variablen-Ersetzung aus der neu erstellten Datei
- gelöscht.</para>
-
- <para>Im folgenden Beispiel wird <literal>%%ARCH%%</literal>
- mit der Systemarchitektur in <filename>pkg-message</filename>
- ersetzt:</para>
-
- <programlisting>SUB_FILES= pkg-message
-SUB_LIST= ARCH=${ARCH}</programlisting>
-
- <para>Beachten Sie bitte, dass in diesem Beispiel die Datei
- <filename>pkg-message.in</filename> im Verzeichnis
- <varname>FILESDIR</varname> vorhanden sein muss.</para>
-
- <para>Hier ein Beispiel für eine gute
- <filename>pkg-message.in</filename>:</para>
-
- <programlisting>Now it is time to configure this package.
-Copy %%PREFIX%%/share/examples/putsy/%%ARCH%%.conf into your home directory
-as .putsy.conf and edit it.</programlisting>
- </sect1>
- </chapter>
-
- <chapter xml:id="testing">
- <title>Ihren Port testen</title>
-
- <sect1 xml:id="make-describe">
- <title><command>make describe</command> ausführen</title>
-
- <para>Einige der &os;-Werkzeuge zur Pflege von Ports, wie zum
- Beispiel &man.portupgrade.1;, verwenden eine Datenbank names
- <filename>/usr/ports/INDEX</filename>, welche Eigenschaften,
- wie z.B. Port-Abhängigkeiten, verfolgt.
- <filename>INDEX</filename> wird vom Makefile der höchsten
- Ebene, <filename>ports/Makefile</filename>, mittels
- <command>make index</command> erstellt, welches in das
- Unterverzeichnis jedes Ports wechselt und dort <command>make
- describe</command> ausführt. Wenn also <command>make
- describe</command> bei einem Port fehlschlägt, kann
- <filename>INDEX</filename> nicht generiert werden und schnell
- werden viele Leute darüber unzufrieden sein.</para>
-
- <note>
- <para>Es ist wichtig diese Datei erzeugen zu können,
- unabhängig davon, welche Optionen in
- <filename>make.conf</filename> vorhanden sind. Bitte
- vermeiden Sie es daher beispielsweise
- <literal>.error</literal>-Anweisungen zu benutzen, wenn zum
- Beispiel eine Abhängigkeit nicht erfüllt wird
- (Lesen Sie dazu bitte <xref linkend="dads-dot-error"/>).</para>
- </note>
-
- <para>Wenn <command>make describe</command> eine Zeichenkette
- anstatt einer Fehlermeldung erzeugt, sind Sie wahrscheinlich
- auf der sicheren Seite. Vergleichen Sie die erzeugte
- Zeichenkette mit <filename>bsd.port.mk</filename>, um mehr
- über deren Bedeutung zu erfahren.</para>
-
- <para>Beachten Sie bitte außerdem, dass die Benutzung
- einer aktuellen Version von <command>portlint</command> (wie
- im nächsten Abschnitt beschrieben) automatisch
- <command>make describe</command> startet.</para>
- </sect1>
-
- <sect1 xml:id="testing-portlint">
- <title>Portlint</title>
-
- <para>Bitte überprüfen Sie Ihre Arbeit stets mit
- <link linkend="porting-portlint"><command>portlint</command></link>,
- bevor Sie diese einreichen oder committen.
- <command>portlint</command> warnt Sie bei häufigen
- Fehlern, sowohl funktionaler als auch stilistischer Natur.
- Für einen neuen (oder repokopierten) Port ist
- <command>portlint -A</command> die gründlichste Variante;
- für einen bereits existierenden Port ist
- <command>portlint -C</command> ausreichend.</para>
-
- <para>Da <command>portlint</command> heuristische Methoden zur
- Fehlersuche benutzt, kann es vorkommen, dass Warnungen
- für Fehler erzeugt werden, die keine sind. Gelegentlich
- kann etwas, das als Problem angezeigt wird, aufgrund von
- Einschränkungen im Port-System nicht anders gelöst
- werden. Wenn es Zweifel gibt, fragen Sie am besten auf
- &a.ports; nach.</para>
- </sect1>
-
- <sect1 xml:id="testing-porttools">
- <title>Port Tools</title>
-
- <para>Das Programm <package>ports-mgmt/porttools</package> ist Teil der
- Ports-Sammlung.</para>
-
- <para><command>port</command> ist das Front-End-Skript, das
- Ihnen dabei behilflich sein kann Ihre Arbeit als Tester zu
- vereinfachen. Um einen neuen Port zu testen oder einen bereits
- bestehenden Port zu aktualisieren, können Sie
- <command>port test</command> verwenden, damit die Tests,
- inklusive der <link linkend="testing-portlint"><command>portlint</command></link>-Überprüfung,
- durchgeführt werden. Dieser Befehl spürt ausserdem
- alle nicht in <filename>pkg-plist</filename> enthaltenen
- Dateien auf und gibt eine Liste dieser aus. Hier ein
- Beispiel:</para>
-
- <screen>&prompt.root; <userinput>port test /usr/ports/net/csup</userinput></screen>
- </sect1>
-
-
- <sect1 xml:id="porting-prefix">
- <title><varname>PREFIX</varname> und
- <varname>DESTDIR</varname></title>
-
- <para><varname>PREFIX</varname> bestimmt, an welche Stelle der
- Port installiert werden soll. In der Regel ist
- dies<filename>/usr/local</filename> oder
- <filename>/opt</filename>, was jedoch anpassbar ist. Ihr Port
- muss sich an diese Variable halten.</para>
-
- <para><varname>DESTDIR</varname>, wenn es vom Benutzer gesetzt
- wird, bestimmt die alternative Umgebung (in der Regel eine
- Jail oder ein installiertes System, welches an anderer Stelle
- als <filename>/</filename> eingehängt ist).
- Ein Port wird unter
- <varname>DESTDIR</varname>/<varname>PREFIX</varname>
- installiert und registriert sich in der Paket-Datenbank unter
- <varname>DESTDIR</varname>/var/db/pkg.
- Da <varname>DESTDIR</varname> mittels eines
- &man.chroot.8;-Aufrufs vom Ports-System automatisch gesetzt
- wird, brauchen Sie keine Änderungen oder besondere Pflege
- für <varname>DESTDIR</varname>-konforme Ports.</para>
-
- <para>Der Wert von <varname>PREFIX</varname> wird auf
- <varname>LOCALBASE</varname> gesetzt (Standard ist
- <filename>/usr/local</filename>).
- Falls <varname>USE_LINUX_PREFIX</varname> gesetzt ist, wird
- <varname>PREFIX</varname> <varname>LINUXBASE</varname>
- annehmen (Standard ist
- <filename>/compat/linux</filename>).</para>
-
- <para>Die Vermeidung der hart kodierten Angaben von
- <filename>/usr/local</filename> oder
- <filename>/usr/X11R6</filename> im Quelltext wird den Port
- viel flexibler machen und erleichtert es die Anforderungen
- anderer Einsatzorte zu erfüllen. Für X-Ports, die
- <command>imake</command> benutzen, geschieht dies automatisch;
- andernfalls kann dies erreicht werden, indem alle Angaben von
- <filename>/usr/local</filename> (oder
- <filename>/usr/X11R6</filename> für X-Ports, die nicht
- imake benutzen) in den verschiedenen
- <filename>Makefile</filename>s im Port ersetzt werden, um
- <varname>${PREFIX}</varname> zu lesen, da diese Variable
- automatisch an jede Stufe des Build- und Install-Prozesses
- übergeben wird.</para>
-
- <para>Vergewissern Sie sich bitte, dass Ihre Anwendung nichts
- unter <filename>/usr/local</filename> an Stelle von
- <varname>PREFIX</varname> installiert. Um dies festzustellen,
- können Sie folgendes machen:</para>
-
- <screen>&prompt.root; <userinput>make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`</userinput></screen>
-
- <para>Wenn etwas außerhalb von <varname>PREFIX</varname>
- installiert wird, so gibt der Prozess der Paketerstellung eine
- Meldung aus, dass es die Dateien nicht finden kann.</para>
-
- <para>Dies prüft nicht das Vorhandensein eines internen
- Verweises oder die richtige Verwendung von
- <varname>LOCALBASE</varname> für Verweise auf Dateien
- anderer Ports. Das Testen der Installation in
- <filename>/var/tmp/`make -V PORTNAME`</filename> würde
- dies erledigen.</para>
-
- <para>Die Variable <varname>PREFIX</varname> kann in Ihrem
- <filename>Makefile</filename> oder der Umgebung des Benutzers
- neu gesetzt werden. Allerdings wird für einzelne Ports
- dringend davon abgeraten diese Variable in den
- <filename>Makefile</filename>s direkt zu setzen.</para>
-
- <para>Verweisen Sie bitte außerdem auf Programme/Dateien
- von anderen Ports durch die oben erwähnten Variablen und
- nicht mit den eindeutigen Pfadnamen. Wenn Ihr Port zum
- Beispiel vom Makro <literal>PAGER</literal> erwartet, dass es
- den vollständigen Pfadnamen von <command>less</command>
- enthält, benutzen Sie folgendes Compiler-Flag:
-
- <programlisting>-DPAGER=\"&dollar;{LOCALBASE}/bin/less\"</programlisting>
-
- anstatt <literal>-DPAGER=\"/usr/local/bin/less\"</literal>.
- Somit ist die Wahrscheinlichkeit höher, dass es auch
- funktioniert, wenn der Administrator den ganzen
- <filename>/usr/local</filename>-Baum an eine andere Stelle
- verschoben hat.</para>
- </sect1>
-
- <sect1 xml:id="testing-tinderbox">
- <title>Die Tinderbox</title>
-
- <para>Wenn Sie ein begeisterter Ports-Entwickler sind
- möchten Sie vielleicht einen Blick auf die
- <application>Tinderbox</application> werfen. Es ist ein
- leistungsstarkes System zur Erstellung und zum Testen von
- Ports, welches auf Skripten basiert, die auf <link linkend="build-cluster">Pointyhat</link> verwendet werden. Sie
- können <application>Tinderbox</application> installieren,
- indem Sie den Port <package>ports-mgmt/tinderbox</package> benutzen.
- Bitte lesen Sie die mitgelieferte Dokumentation
- gründlich, da die Konfiguration nicht einfach ist.</para>
-
-
- <para>Um Näheres darüber zu erfahren, besuchen Sie
- bitte die <link xlink:href="http://tinderbox.marcuscom.com/">Tinderbox
- Homepage</link>.</para>
- </sect1>
- </chapter>
-
- <chapter xml:id="port-upgrading">
- <title>Einen existierenden Port aktualisieren</title>
-
- <para>Wenn Sie feststellen, dass ein Port verglichen mit der
- neuesten Version des Originalautors nicht mehr auf dem aktuellen
- Stand ist, sollten Sie als Erstes sicherstellen, dass Sie die
- aktuellste Version des Ports haben. Diese finden Sie im
- Verzeichnis <filename>ports/ports-current</filename> der FreeBSD
- FTP-Spiegelseiten. Wenn Sie allerdings mit mehr als ein paar
- Ports arbeiten, werden Sie es wahrscheinlich einfacher finden
- <application>CVSup</application> zu benutzen, um Ihre gesamte
- Ports-Sammlung aktuell zu halten, wie es im <link xlink:href="&url.books.handbook;/synching.html#CVSUP-CONFIG">Handbuch</link>
- beschrieben wird. Das hat zusätzlich den Vorteil, dass Sie
- so auch alle Abhängigkeiten des Ports aktuell
- halten.</para>
-
- <para>Der nächste Schritt besteht darin festzustellen, ob
- bereits eine Aktualisierung des Ports darauf wartet committet zu
- werden. Um das sicherzustellen haben Sie folgende
- Möglichkeiten. Es gibt eine durchsuchbare Schnittstelle zur
- <link xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query">FreeBSD
- Problembericht Datenbank (PR - Problem Report)</link> (auch
- bekannt als <literal>GNATS</literal>). Wählen Sie dazu
- <literal>Ports</literal> im Drop-Down-Menü und geben Sie
- den Namen des Ports ein.</para>
-
- <para>Allerdings wird manchmal vergessen den Namen des Ports
- eindeutig im Feld für die Zusammenfassung anzugeben. In
- diesem Fall können Sie das <link linkend="portsmon">FreeBSD
- Ports Monitoring System</link> (auch bekannt als
- <literal>portsmon</literal>) nutzen. Dieses versucht PRs von
- Ports nach Portname zu sortieren. Um PRs nach einem bestimmten
- Port zu durchsuchen können Sie die <link xlink:href="http://portsmon.FreeBSD.org/portoverview.py">Übersicht
- eines Ports</link> verwenden.</para>
-
- <para>Wenn es keine wartenden PRs gibt, ist der nächste
- Schritt eine E-Mail an den Maintainer des Ports zu schicken, wie
- von <command>make maintainer</command> gezeigt wird. Diese
- Person arbeitet vielleicht schon an einer Aktualisierung, oder
- hat einen guten Grund den Port im Moment nicht zu aktualisieren
- (z.B. wegen Stabilitätsproblemen der neuen Version). Sie
- wollen sicher nicht die Arbeit des Maintainers doppelt machen.
- Beachten Sie bitte, dass für Ports ohne Maintainer
- <literal>ports@FreeBSD.org</literal> eingetragen ist. Das ist
- nur die allgemeine &a.ports;-Mailingliste, deshalb wird es in
- diesem Fall wahrscheinlich nicht helfen eine E-Mail dorthin zu
- schicken.</para>
-
- <para>Wenn Sie der Maintainer bittet die Aktualisierung zu
- erledigen, oder falls es keinen Maintainer gibt, haben Sie
- Gelegenheit, FreeBSD zu helfen, indem Sie die Aktualisierung
- selbst bereitstellen. Dazu verwenden Sie &man.diff.1;, das
- bereits im Basissystem enthalten ist.</para>
-
- <para>Um einen brauchbaren <command>diff</command> für einen
- einzelne Datei zu erstellen, kopieren Sie die zu patchende
- Datei nach <replaceable>dateiname.orig</replaceable> und speichern
- Ihre Änderungen in die Datei
- <replaceable>dateiname</replaceable>. Danach erzeugen Sie den
- Patch:</para>
-
- <informalexample>
- <screen>&prompt.user; <userinput>/usr/bin/diff dateiname.orig dateiname &gt; dateiname.diff</userinput></screen>
- </informalexample>
-
- <para>Soll mehr als eine Datei gepatcht werden, können Sie
- entweder <command>cvs diff</command> verwenden (siehe dazu <xref linkend="cvs-diff"/>) oder Sie kopieren
- den kompletten Port in ein neues Verzeichnis und speichern die
- Ausgabe des rekursiven &man.diff.1; auf das neue und alte
- Portverzeichniss (wenn Ihr verändertes Portverzeichnis z.B.
- <filename>superedit</filename> und das Original
- <filename>superedit.bak</filename> heißt, dann speichern
- Sie bitte die Ergebnisse von <command>diff -ruN superedit.bak
- superedit</command>). Sowohl vereinheitlichendes als auch
- kontextabhängiges diff (Auflistung der Unterschiede zweier
- Dateien) sind akzeptabel, aber im Allgemeinen bevorzugen
- Port-Committer vereinheitlichende <command>diff</command>s.
- Bitte beachten Sie die Verwendung der
- <literal>-N</literal>-Option. Dies ist der gebräuchliche
- Weg <command>diff</command> dazu zu bewegen korrekt damit
- umzugehen, neue Dateien anzulegen und alte zu löschen.
- Bevor Sie das diff einsenden überprüfen Sie bitte die
- Ausgabe, um sicherzugehen, dass die Änderungen sinnvoll
- sind. Stellen Sie insbesondere sicher, dass Sie das
- Arbeitsverzeichnis mit <command>make clean</command>
- aufgerät haben).</para>
-
- <para>Um gängige Operationen mit Korrekturdateien zu
- vereinfachen, können Sie
- <filename>/usr/ports/Tools/scripts/patchtool.py</filename>
- benutzen. Aber lesen Sie bitte vorher
- <filename>/usr/ports/Tools/scripts/README.patchtool</filename>.</para>
-
- <para>Falls der Port keinen Maintainer hat und Sie ihn selbst
- aktiv benutzen, ziehen Sie bitte in Erwägung sich als
- Maintainer zu melden. &os; hat mehr als 4000 Ports ohne
- Maintainer und in diesem Bereich werden immer zusätzliche
- Freiwillige benötigt (Für eine ausführliche
- Beschreibung der Verantwortlichkeiten eines Maintainers lesen
- Sie bitte im <link xlink:href="&url.books.developers-handbook;/policies.html#POLICIES-MAINTAINER">
- Developer's Handbook</link> nach).</para>
-
- <para>Der beste Weg uns das diff zu schicken ist mittels
- &man.send-pr.1; (Kategorie Ports). Wenn Sie der Maintainer des
- Ports sind, fügen Sie bitte <literal>[maintainer
- update]</literal> an den Anfang Ihrer Zusammenfassung und setzen
- Sie die <quote>Klasse</quote> des PR auf
- <literal>maintainer-update</literal>. Ansonsten sollte die
- <quote>Klasse</quote> des PR <literal>change-request</literal>
- sein. Bitte erwähnen Sie alle hinzugefügten oder
- gelöschten Dateien in der Nachricht, da diese beim Commit
- ausdrücklich an &man.cvs.1; übergeben werden
- müssen. Wenn das diff größer ist als 20 Kilobyte
- komprimieren und uuencoden Sie es bitte. Ansonsten können
- Sie es in den PR einfügen wie es ist.</para>
-
- <para>Bevor Sie den PR mit &man.send-pr.1; abschicken, sollten
- Sie den Abschnitt <link xlink:href="&url.articles.problem-reports;/pr-writing.html"> Den
- Problembericht schreiben</link> im Artikel über
- Problemberichte lesen. Dieser enthält sehr viel mehr
- Informationen darüber, wie man nützliche
- Problemberichte verfasst.</para>
-
- <important>
- <para>Wenn Sie Ihre Aktualisierung aufgrund von
- Sicherheitsbedenken oder eines schwerwiegenden Fehlers
- bereitstellen wollen, informieren Sie bitte das &a.portmgr;,
- um einen sofortigen Rebuild und eine Neuverteilung des Pakets
- Ihres Ports durchzuführen. Sonst werden ahnungslose
- Nutzer von &man.pkg.add.1; über mehrere Wochen die alte
- Version durch <command>pkg_add -r</command>
- installieren.</para>
- </important>
-
- <note>
- <para>Noch einmal: Bitte verwenden Sie &man.diff.1; und nicht
- &man.shar.1;, um Aktualisierungen existierender Ports zu
- senden. Sie erleichtern es damit den Ports-Committern,
- Ihre Änderungen nachzuvollziehen.</para>
- </note>
-
- <para>Nun, da Sie all das geschafft haben, können Sie in <xref linkend="keeping-up"/> nachlesen, wie Sie den Port
- aktuell halten.</para>
-
- <sect1 xml:id="cvs-diff">
- <title>Patches mit CVS erstellen</title>
-
- <para>Wenn möglich, sollten Sie stets eine &man.cvs.1;-Differenz
- einreichen. Diese sind leichter zu bearbeiten als Differenzen
- zwischen <quote>neuen und alten</quote> Verzeichnissen. Außerdem
- könenn Sie so einfacher feststellen, welche Änderungen Sie
- vorgenommen haben oder Ihren Patch modifizieren, falls dies durch
- Änderungen in einem anderen Bereich der Ports-Sammlung notwendig
- wird oder Sie vom Committer um eine Korrektur Ihres Patches gebeten
- werden.</para>
-
- <screen>&prompt.user; <userinput>cd ~/my_wrkdir</userinput> <co xml:id="my-wrkdir"/>
-&prompt.user; <userinput>cvs -d R_CVSROOT co pdnsd</userinput> <co xml:id="R-CVSROOT"/> <co xml:id="module-name"/>
-&prompt.user; <userinput>cd ~/my_wrkdir/pdnsd</userinput></screen>
-
- <calloutlist>
- <callout arearefs="my-wrkdir">
- <para>Das Verzeichnis, in dem Sie den Port bauen wollen. Dieses
- Arbeitsverzeichnis kann sich auch außerhalb von
- <filename>/usr/ports/</filename> befinden.</para>
- </callout>
-
- <callout arearefs="R-CVSROOT">
- <para>R_CVSROOT steht für einen öffentlichen CVS-Server.
- Eine Liste aller verfügbaren Server finden Sie im <link xlink:href="&url.books.handbook;/cvsup.html">&os; Handbuch</link>.</para>
- </callout>
-
- <callout arearefs="module-name">
- <para>Ersetzen Sie <quote>pdnsd</quote> durch den Modulnamen des
- Ports. Dieser entspricht in der Regel dem Namen des Ports.
- Allerdings gibt es einige Ausnahmen von dieser Regel, insbesondere
- bei sprachspezifischen Ports (beispielsweise lautet der Modulname
- für den Port <package>german/selfhtml</package>
- de-selfhtml). Um den Namen des Moduls herauszufinden, können
- Sie entweder die <link xlink:href="&url.base;/cgi/cvsweb.cgi/ports">cvsweb-Schnittstelle</link>
- verwenden oder den kompletten Pfad des Ports angeben (in unserem
- Beispiel wäre der komplette Pfad also <filename>ports/dns/pdnsd</filename>).</para>
- </callout>
- </calloutlist>
-
- <para>Danach modifizieren Sie den Port in gewohnter Weise. Falls Sie
- Dateien hinzufügen oder entfernen, sollten Sie dies mit
- <command>cvs</command> protokollieren:</para>
-
- <screen>&prompt.user; <userinput>cvs add new_file</userinput>
-&prompt.user; <userinput>cvs remove deleted_file</userinput></screen>
-
- <para>Überprüfen Sie die Funktion Ihres Ports anhand der
- Checklisten in <xref linkend="porting-testing"/> und
- <xref linkend="porting-portlint"/>.</para>
-
- <screen>&prompt.user; <userinput>cvs status</userinput>
-&prompt.user; <userinput>cvs update</userinput> <co xml:id="cvs-update"/></screen>
-
- <calloutlist>
- <callout arearefs="cvs-update">
- <para>Dadurch wird versucht, die Differenz zwischen Ihrer
- geänderten Version und dem aktuellen Stand im CVS zu
- kombinieren. Achten Sie dabei unbedingt auf die Ausgabe dieses
- Befehls. Vor jeder Datei wird ein Buchstabe angezeigt, der
- Ihnen mitteilt, was mit dieser Datei passiert ist. Eine
- vollständige Liste dieser Präfixe finden Sie in
- <xref linkend="table-cvs-up"/>.</para>
- </callout>
- </calloutlist>
-
- <table pgwide="1" frame="none" xml:id="table-cvs-up">
- <title>Von cvs update verwendete Präfixe</title>
-
- <tgroup cols="2">
- <tbody>
- <row>
- <entry>U</entry>
- <entry>Die Datei wurde aktualisiert. Es traten dabei keine
- Probleme auf.</entry>
- </row>
-
- <row>
- <entry>P</entry>
- <entry>Die Datei wurde ohne Probleme aktualisiert (dieses
- Präfix wird nur verwendet, wenn Sie mit einem
- entfernten Repository arbeiten).</entry>
- </row>
-
- <row>
- <entry>M</entry>
- <entry>Die Datei wurde modifiziert. Es traten keine Konflikte
- auf.</entry>
- </row>
-
- <row>
- <entry>C</entry>
- <entry>Die Datei wurde modifiziert, allerdings kam es dabei zu
- Konflikten zwischen Ihrer geänderten Version und der
- aktuellen Version im CVS.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Wird das Präfix <literal>C</literal> nach einem
- <literal>cvs update</literal> angezeigt, bedeutet dies, dass im CVS
- etwas geändert wurde und &man.cvs.1; daher nicht in der Lage war,
- Ihre Änderungen und die Änderungen im CVS zu kombinieren.
- Es ist immer sinnvoll, sich die Änderungen anzusehen, da
- <command>cvs</command> keine Informationen darüber hat, wie ein
- Port aufgebaut sein soll. Es kann (und wird wahrscheinlich) daher
- vorkommen, dass sich manchmal Änderungen ergeben, die keinen
- Sinn machen.</para>
-
- <para>Im letzten Schritt erzeugen Sie einen <quote>unified
- &man.diff.1;</quote> gegen die derzeit im CVS vorhandenen Dateien:</para>
-
- <screen>&prompt.user; <userinput>cvs diff -uN &gt; ../`basename ${PWD}`.diff</userinput></screen>
-
- <note>
- <para>Verwenden Sie unbedingt die Option <option>-N</option>, um
- sicherzustellen, dass von hinzugefügte oder gelöschte
- Dateien im Patch erfasst sind. Der Patch enthät auch
- von Ihnen gelöschte Dateien (allerdings ohne Inhalt). Dies
- ist wichtig, da nur so der Committer wissen kann, welche Dateien
- er entfernen muss.</para>
- </note>
-
- <para>Zuletzt reichen Sie Ihren Patch ein, indem Sie der Anleitung in
- <xref linkend="port-upgrading"/> folgen.</para>
- </sect1>
-
- <sect1 xml:id="moved-and-updating-files">
- <title>Die Dateien UPDATING und MOVED</title>
-
- <para>Wenn die Aktualisierung des Ports spezielle Schritte wie
- die Anpassung von Konfigurationsdateien oder die
- Ausführung eines speziellen Programms erfordert, sollten
- Sie diesen Umstand in der Datei
- <filename>/usr/ports/UPDATING</filename> dokumentieren.
- Einträge in dieser Datei haben das folgende
- Format:</para>
-
- <programlisting>YYYYMMDD:
- AFFECTS: users of portcategory/portname
- AUTHOR: Your name &lt;Your email address&gt;
-
- Special instructions</programlisting>
-
- <para>Wenn Sie exakte Portmaster oder Portupgrade-Meldungen
- einfügen wollen, stellen Sie bitte sicher, dass alle
- Sonderzeichen korrekt dargestellt werden.</para>
-
- <para>Wurde der Port gelöscht oder umbenannt, sollten
- Sie dies in der Datei
- <filename>/usr/ports/MOVED</filename> vermerken. Einträge
- in dieser Datei haben das folgende Format:</para>
-
- <programlisting>old name|new name (blank for deleted)|date of move|reason</programlisting>
- </sect1>
- </chapter>
-
- <chapter xml:id="security">
- <title>Sicherheit der Ports</title>
-
- <sect1 xml:id="security-intro">
- <title>Warum Sicherheit so wichtig ist</title>
-
- <para>Es finden sich immer wieder Fehler in Software. Die
- gefährlichsten davon sind wohl jene, die
- Sicherheitslücken öffnen. Technisch gesehen
- müssen diese Lücken geschlossen werden, indem die
- Fehler, die Sie verursacht haben, beseitigt werden. Aber die
- Vorgehensweisen, wie mit bloßen Fehlern und
- Sicherheitslücken umgegangen wird, sind sehr
- unterschiedlich.</para>
-
- <para>Ein typischer kleiner Fehler betrifft nur Nutzer, die
- eine bestimmte Kombination von Optionen aktiviert haben, die
- den Fehler auslöst. Der Entwickler wird letztendlich
- einen Patch herausgeben, gefolgt von einer neuen Version des
- Programms, die den Fehler nicht mehr
- enthält&nbsp;&ndash;&nbsp;jedoch wird die Mehrheit der
- Nutzer nicht sofort aktualisieren, da sie von diesem Fehler
- nicht betroffen sind. Ein kritischer Fehler, der zu
- Datenverlust führen kann, stellt ein schwerwiegendes
- Problem dar. Dennoch sind sich umsichtige Nutzer bewusst, dass
- Datenverlust verschiedene Ursachen&nbsp;&ndash;&nbsp;neben
- Softwarefehlern&nbsp;&ndash;&nbsp;haben kann, und machen
- deshalb Sicherungskopien wichtiger Daten. Zumal ein
- kritischer Fehler sehr schnell entdeckt wird.</para>
-
- <para>Bei einer Sicherheitslücke ist dies ganz anders.
- Erstens wird sie vielleicht jahrelang nicht entdeckt, da dies
- oftmals keine Fehlfunktion im Programm verursacht. Zweitens
- kann eine böswillige Person unerlaubten Zugriff auf ein
- unsicheres System erlangen, um empfindliche Daten zu
- verändern oder zu zerstören; im schlimmsten Fall
- findet der Nutzer nicht einmal die Ursache des Schadens.
- Drittens hilft der Zugriff auf ein unsicheres System dem
- Angreifer oft in ein anderes System einzudringen, welches
- ansonsten nicht gefährdet wäre. Deshalb reicht es
- nicht aus eine Sicherheitslücke nur zu schließen:
- Die Zielgruppe sollte möglichst genau und umfassend
- darüber informiert werden, damit sie die Gefahr
- einschätzen und passende Maßnahmen ergreifen
- können.</para>
- </sect1>
-
- <sect1 xml:id="security-fix">
- <title>Sicherheitslücken schliessen</title>
-
- <para>Bei Ports und Paketen kann eine Sicherheitslücke im
- ursprünglichen Programm oder in den Port-Dateien
- verursacht werden. Im ersten Fall wird der ursprüngliche
- Entwickler den Fehler wahrscheinlich umgehend korrigieren oder
- eine neue Version herausgeben und Sie müssen den Port nur
- aktualisieren und die Korrekturen des Autors beachten. Falls
- sich die Korrektur aus irgendeinem Grund verzögert,
- sollten Sie <link linkend="dads-noinstall">den Port als
- <varname>FORBIDDEN</varname> markieren</link> oder selbst den
- Fehler für den Port korrigieren. Falls die
- Sicherheitslücke im Port verursacht wird, sollten Sie ihn
- sobald wie möglich berichtigen. In jedem Fall sollte
- <link linkend="port-upgrading">die Standardvorgehensweise zum
- Einreichen von Änderungen</link> beachtet
- werden&nbsp;&ndash;&nbsp;es sei denn, Sie haben das Recht
- diese direkt in den Ports-Baum zu committen.</para>
-
- <important>
- <para>Ports-Committer zu sein ist nicht genug, um
- Änderungen an einem beliebigen Port zu committen. Bitte
- denken Sie daran, dass Ports üblicherweise Maintainer
- haben, die Sie respektieren sollten.</para>
- </important>
-
- <para>Bitte stellen Sie sicher, dass die Revision des Ports
- erhöht wird, sobald die Sicherheitslücke geschlossen
- wurde. Dadurch sehen die Nutzer, die installierte Pakete
- regelmäßig aktualisieren, dass es an der Zeit ist
- eine Aktualisierung durchzuführen. Außerdem wird
- ein neues Paket gebaut, über FTP&ndash;&nbsp;und
- WWW-Spiegel verteilt und die unsichere Version damit
- verdrängt. <varname>PORTREVISION</varname> sollte
- erhöht werden&nbsp;&ndash;&nbsp;es sei denn,
- <varname>PORTREVISION</varname> hat sich im Laufe der
- Korrektur des Fehlers geändert. Das heißt, Sie
- sollten <varname>PORTREVISION</varname> erhöhen, wenn Sie
- eine Korrektur hinzugefügt haben. Sie sollten diese aber
- nicht erhöhen, wenn Sie den Port auf die neueste Version
- des Programms gebracht haben und <varname>PORTREVISION
- </varname> somit schon verändert wurde. Bitte beachten
- Sie den <link linkend="makefile-naming-revepoch">betreffenden
- Abschnitt</link> für weitere Informationen.</para>
- </sect1>
-
- <sect1 xml:id="security-notify">
- <title>Die Community informiert halten</title>
-
- <sect2 xml:id="security-notify-vuxml-db">
- <title>Die VuXML-Datenbank</title>
-
- <para>Ein sehr wichtiger und dringender Schritt, den man
- unternehmen muss, sobald eine Sicherheitslücke entdeckt
- wurde, ist die Gemeinschaft der Anwender des Ports über
- die Gefahr zu informieren. Diese Benachrichtigung hat zwei
- Gründe. Erstens wird es sinnvoll sein, wenn die Gefahr
- wirklich so groß ist, sofort Abhilfe zu schaffen,
- indem man z.B. den betreffenden Netzwerkdienst beendet oder
- den Port komplett deinstalliert, bis die Lücke
- geschlossen wurde. Und Zweitens pflegen viele Nutzer
- installierte Pakete nur gelegentlich zu aktualisieren. Sie
- werden aus der Mitteilung erfahren, dass Sie das Paket,
- sobald eine Korrektur verfügbar ist, sofort
- aktualisieren <emphasis>müssen</emphasis>.</para>
-
- <para>Angesichts der riesigen Zahl an Ports kann nicht
- für jeden Vorfall ein Sicherheitshinweis erstellt
- werden, ohne durch die Flut an Nachrichten die
- Aufmerksamkeit der Empfänger zu verlieren, im Laufe der
- Zeit kommt es so zu ernsten Problemen. Deshalb werden
- Sicherheitslücken von Ports in <link xlink:href="http://vuxml.freebsd.org/">der FreeBSD
- VuXML-Datenbank</link> aufgezeichnet. Das Team der
- Sicherheitsverantwortlichen beobachtet diese wegen
- Angelegenheiten, die Ihr Eingreifen erfordern.</para>
-
- <para>Wenn Sie Committerrechte haben, können Sie die
- VuXML-Datenbank selbst aktualisieren. Auf diese Weise helfen
- Sie den Sicherheitsverantwortlichen und liefern die
- kritischen Informationen frühzeitig an die Community.
- Aber auch wenn Sie kein Committer sind und glauben, Sie
- haben eine außergewöhnlich schwerwiegende
- Lücke gefunden&nbsp;&ndash;&nbsp;egal
- welche&nbsp;&ndash;&nbsp;zögern Sie bitte nicht die
- Sicherheitsverantwortlichen zu kontaktieren, wie es in den
- <link xlink:href="http://www.freebsd.org/security/#how"> FreeBSD
- Sicherheitsinformationen</link> beschrieben wird.</para>
-
- <para>Wie vielleicht aus dem Titel hervorgeht, handelt es sich
- bei der VuXMl-Datenbank um ein
- XML-Dokument. Die Quelldatei <filename>vuln.xml</filename>
- können Sie im Port <package>security/vuxml</package> finden. Deshalb
- wird der komplette Pfadname <filename>
- PORTSDIR/security/vuxml/vuln.xml</filename>
- lauten. Jedes Mal, wenn Sie eine Sicherheitslücke in
- einem Port entdecken, fügen Sie bitte einen Eintrag
- dafür in diese Datei ein. Solange Sie nicht mit VuXML
- vertraut sind, ist es das Beste, was Sie machen können,
- einen vorhandenen Eintrag, der zu Ihrem Fall passt, zu
- kopieren und als Vorlage zu verwenden.</para>
- </sect2>
-
- <sect2 xml:id="security-notify-vuxml-intro">
- <title>Eine kurze Einführung in VuXML</title>
-
- <para>Das komplette XML ist komplex und würde den
- Rahmen dieses Buches sprengen. Allerdings benötigen Sie
- für einen grundlegenden Einblick in die Struktur eines
- VuXML-Eintrags nur eine Vorstellung der Tags. XML-Tags
- bestehen aus Namen, die in spitzen Klammern eingeschlossen
- sind. Zu jedem öffnenden &lt;Tag&gt; muss ein passendes
- &lt;/Tag&gt; existieren. Tags können geschachtelt
- werden. Wenn sie geschachtelt werden müssen die inneren
- Tags vor den Äußeren geschlossen werden. Es gibt
- eine Hierarchie von Tags&nbsp;&ndash;&nbsp;das heißt
- komplexere Regeln zur Schachtelung. Klingt so ähnlich
- wie HTML, oder? Der größte Unterschied ist: XML
- ist erweiterbar
- (e<emphasis>X</emphasis>tensible)&nbsp;&ndash;&nbsp;das
- heißt es basiert darauf maßgeschneiderte Tags zu
- definieren. Aufgrund seiner wesentlichen Struktur bringt
- XML ansonsten formlose Daten in eine bestimmte Form. VuXML
- ist speziell darauf zugeschnitten Beschreibungen von
- Sicherheitslücken zu verwalten.</para>
-
- <para>Lassen Sie uns nun einen realistischen VuXML-Eintrag
- betrachten:</para>
-
- <programlisting>&lt;vuln vid="f4bc80f4-da62-11d8-90ea-0004ac98a7b9"&gt; <co xml:id="co-vx-vid"/>
- &lt;topic&gt;Several vulnerabilities found in Foo&lt;/topic&gt; <co xml:id="co-vx-top"/>
- &lt;affects&gt;
- &lt;package&gt;
- &lt;name&gt;foo&lt;/name&gt; <co xml:id="co-vx-nam"/>
- &lt;name&gt;foo-devel&lt;/name&gt;
- &lt;name&gt;ja-foo&lt;/name&gt;
- &lt;range&gt;&lt;ge&gt;1.6&lt;/ge&gt;&lt;lt&gt;1.9&lt;/lt&gt;&lt;/range&gt; <co xml:id="co-vx-rng"/>
- &lt;range&gt;&lt;ge&gt;2.*&lt;/ge&gt;&lt;lt&gt;2.4_1&lt;/lt&gt;&lt;/range&gt;
- &lt;range&gt;&lt;eq&gt;3.0b1&lt;/eq&gt;&lt;/range&gt;
- &lt;/package&gt;
- &lt;package&gt;
- &lt;name&gt;openfoo&lt;/name&gt; <co xml:id="co-vx-nm2"/>
- &lt;range&gt;&lt;lt&gt;1.10_7&lt;/lt&gt;&lt;/range&gt; <co xml:id="co-vx-epo"/>
- &lt;range&gt;&lt;ge&gt;1.2,1&lt;/ge&gt;&lt;lt&gt;1.3_1,1&lt;/lt&gt;&lt;/range&gt;
- &lt;/package&gt;
- &lt;/affects&gt;
- &lt;description&gt;
- &lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
- &lt;p&gt;J. Random Hacker reports:&lt;/p&gt; <co xml:id="co-vx-bdy"/>
- &lt;blockquote
- cite="http://j.r.hacker.com/advisories/1"&gt;
- &lt;p&gt;Several issues in the Foo software may be exploited
- via carefully crafted QUUX requests. These requests will
- permit the injection of Bar code, mumble theft, and the
- readability of the Foo administrator account.&lt;/p&gt;
- &lt;/blockquote&gt;
- &lt;/body&gt;
- &lt;/description&gt;
- &lt;references&gt; <co xml:id="co-vx-ref"/>
- &lt;freebsdsa&gt;SA-10:75.foo&lt;/freebsdsa&gt; <co xml:id="co-vx-fsa"/>
- &lt;freebsdpr&gt;ports/987654&lt;/freebsdpr&gt; <co xml:id="co-vx-fpr"/>
- &lt;cvename&gt;CAN-2010-0201&lt;/cvename&gt; <co xml:id="co-vx-cve"/>
- &lt;cvename&gt;CAN-2010-0466&lt;/cvename&gt;
- &lt;bid&gt;96298&lt;/bid&gt; <co xml:id="co-vx-bid"/>
- &lt;certsa&gt;CA-2010-99&lt;/certsa&gt; <co xml:id="co-vx-cts"/>
- &lt;certvu&gt;740169&lt;/certvu&gt; <co xml:id="co-vx-ctv"/>
- &lt;uscertsa&gt;SA10-99A&lt;/uscertsa&gt; <co xml:id="co-vx-ucs"/>
- &lt;uscertta&gt;SA10-99A&lt;/uscertta&gt; <co xml:id="co-vx-uct"/>
- &lt;mlist msgid="201075606@hacker.com"&gt;http://marc.theaimsgroup.com/?l=bugtraq&amp;amp;m=203886607825605&lt;/mlist&gt; <co xml:id="co-vx-mls"/>
- &lt;url&gt;http://j.r.hacker.com/advisories/1&lt;/url&gt; <co xml:id="co-vx-url"/>
- &lt;/references&gt;
- &lt;dates&gt;
- &lt;discovery&gt;2010-05-25&lt;/discovery&gt; <co xml:id="co-vx-dsc"/>
- &lt;entry&gt;2010-07-13&lt;/entry&gt; <co xml:id="co-vx-ent"/>
- &lt;modified&gt;2010-09-17&lt;/modified&gt; <co xml:id="co-vx-mod"/>
- &lt;/dates&gt;
-&lt;/vuln&gt;</programlisting>
-
- <para>Die Namen der Tags sollten selbsterklärend sein
- &nbsp;&ndash;&nbsp;also werfen wir einen genaueren Blick auf
- die Felder, die Sie selbst ausfüllen
- müssen:</para>
-
- <calloutlist>
- <callout arearefs="co-vx-vid">
- <para>Dies ist die höchste Tag-Ebene eines
- VuXML-Eintrags. Es ist ein vorgeschriebenes Attribut
- <literal>vid</literal>, welches eine allgemein
- einzigartige Kennung (universally unique identifier,
- UUID) in Anführungszeichen für diesen
- Eintrag festlegt. Sie sollten eine UUID für
- jeden neuen VuXML-Eintrag erzeugen (und vergessen Sie
- nicht die UUID der Vorlage zu ersetzen, es sei denn,
- Sie schreiben den Eintrag von Grund auf selbst). Sie
- können &man.uuidgen.1; verwenden, um eine VuXML
- UUID zu erzeugen.</para>
- </callout>
-
- <callout arearefs="co-vx-top">
- <para>Dies ist eine einzeilige Beschreibung des
- gefundenen Fehlers.</para>
- </callout>
-
- <callout arearefs="co-vx-nam">
- <para>Hier werden die Namen betroffener Pakete
- aufgeführt. Es können mehrere Namen
- angegeben werden, da mehrere Pakete von einem einzigen
- Master-Port oder Software-Produkt abhängen
- können. Das schließt Stable&ndash;&nbsp;und
- Developement-Zweige, lokalisierte Versionen und
- Slave-Ports ein, die verschiedene
- Auswahlmöglichkeiten wichtiger
- Kompilierungszeit-Optionen bieten.</para>
-
- <important>
- <para>Es liegt in Ihrer Verantwortung all diese
- betroffenen Pakete zu finden, wenn Sie den
- VuXML-Eintrag schreiben.Behalten Sie im
- Hinterkopf, dass <literal>make search
- name=foo</literal> Ihr Freund ist. Die wichtigsten
- Punkte, auf die Sie achten sollten, sind die
- folgenden:</para>
-
- <itemizedlist>
- <listitem>
- <para>die <filename>foo-devel</filename>
- Variante eines <filename>foo</filename>
- Ports;</para>
- </listitem>
-
- <listitem>
- <para>andere Varianten mit einem Suffix wie
- <literal> -a4</literal> (für
- Druck-betreffende Pakete),
- <literal>-without-gui</literal> (für Pakete
- mit deaktivierter X-Unterstützung) oder
- ähnliche</para>
- </listitem>
-
- <listitem>
- <para><literal>jp-</literal>,
- <literal>ru-</literal>, <literal>zh-</literal>
- und andere, eventuell lokalisierte, Varianten in
- den entsprechenden Länderkategorien der
- Ports-Sammlung</para>
- </listitem>
- </itemizedlist>
- </important>
- </callout>
-
- <callout arearefs="co-vx-rng">
- <para>Betroffene Versionen der Pakete werden hier als
- ein Bereich oder mehrere durch eine Kombination aus
- <literal>&lt;lt&gt;</literal>, <literal>&lt;le&gt;
- </literal>, <literal>&lt;eq&gt;</literal>, <literal>
- &lt;ge&gt;</literal>, und
- <literal>&lt;gt&gt;</literal>-Elementen ausgegeben.
- Die angegebenen Bereiche sollten sich nicht
- überschneiden.</para>
-
- <para>In einer Bereichsangabe steht
- <literal>*</literal> (Asterisk) für die kleinste
- Versionsnummer. Insbesondere ist
- <literal>2.*</literal> kleiner als
- <literal>2.a</literal>. Deshalb kann ein Stern benutzt
- werden, um auf alle möglichen <literal>Alpha
- </literal>-, <literal>Beta</literal>&ndash;&nbsp;und
- <literal>RC </literal>-Versionen zuzutreffen. Zum
- Beispiel passt
- <literal>&lt;ge&gt;2.*&lt;/ge&gt;&lt;lt&gt;3.*
- &lt;/lt&gt;</literal> auf alle Versionen der Form
- <literal>2.x</literal>, während
- <literal>&lt;ge&gt;
- 2.0&lt;/ge&gt;&lt;lt&gt;3.0&lt;/lt&gt;</literal> das
- nicht erfüllt, da es nicht auf <literal>2.r3
- </literal> passt, auf <literal>3.b</literal> aber
- schon.</para>
-
- <para>Das obige Beispiel legt fest, dass Versionen von
- <literal>1.6</literal> bis <literal>1.9</literal>
- betroffen sind&nbsp;&ndash;&nbsp;außerdem
- Versionen <literal>2.x </literal> vor
- <literal>2.4_1</literal> und Version
- <literal>3.0b1</literal>.</para>
- </callout>
-
- <callout arearefs="co-vx-nm2">
- <para>Mehrere zusammenhängende Gruppen von
- Paketen (im wesentlichen Ports) können im
- Abschnitt <literal> &lt;affected&gt;</literal>
- aufgeführt werden. Das kann man benutzen, wenn
- sich Programme (sagen wir FooBar, FreeBar und OpenBar)
- denselben Quelltext als Grundlage haben und sich noch
- dessen Fehler und Sicherheitslücken teilen.
- Beachten Sie den Unterschied zum Anführen
- mehrerer Namen innerhalb eines &lt;package&gt;
- Abschnittes.</para>
- </callout>
-
- <callout arearefs="co-vx-epo">
- <para>Die Versionsbereiche sollten, wenn möglich,
- sowohl <varname>PORTEPOCH</varname> als auch <varname>
- PORTREVISION</varname> erlauben. Bitte denken Sie
- daran, dass gemäß der Vergleichsregeln eine
- Version mit einer <varname>PORTEPOCH</varname>, die
- nicht Null ist, größer ist als jede Version
- ohne <varname>PORTEPOCH</varname>. Das heißt,
- <literal> 3.0,1</literal> ist größer als
- <literal>3.1 </literal> oder sogar
- <literal>8.9</literal>.</para>
- </callout>
-
- <callout arearefs="co-vx-bdy">
- <para>Das ist die Zusammenfassung des Problems. In
- diesem Feld wird XHTML verwendet. Zumindest
- umschließende <literal>&lt;p&gt;</literal> und
- <literal>&lt;/p&gt;</literal> sollten auftauchen.
- Komplexere Tags sind zwar möglich, aber sollten
- nur um der Genauigkeit und Klarheit willen verwendet
- werden: Bitte verwenden Sie hier kein
- Eye-Candy.</para>
- </callout>
-
- <callout arearefs="co-vx-ref">
- <para>Dieser Abschnitt enthält Verweise auf
- relevante Dokumente. Es wird empfohlen so viele
- Referenzen wie nötig aufzuführen.</para>
- </callout>
-
- <callout arearefs="co-vx-fsa">
- <para>Das ist ein <link xlink:href="http://www.freebsd.org/security/#adv">FreeBSD
- Sicherheitshinweis</link>.</para>
- </callout>
-
- <callout arearefs="co-vx-fpr">
- <para>Das ist ein <link xlink:href="http://www.freebsd.org/support.html#gnats">
- FreeBSD Problembericht</link>.</para>
- </callout>
-
- <callout arearefs="co-vx-cve">
- <para>Das ist eine <link xlink:href="http://www.cve.mitre.org/">Mitre CVE</link>
- Kennung.</para>
- </callout>
-
- <callout arearefs="co-vx-bid">
- <para>Das ist eine <link xlink:href="http://www.securityfocus.com/bid">SecurityFocus
- Fehler-Kennung</link>.</para>
- </callout>
-
- <callout arearefs="co-vx-cts">
- <para>Das ist ein Sicherheitshinweis von <link xlink:href="http://www.cert.org/">US-CERT</link>.</para>
- </callout>
-
- <callout arearefs="co-vx-ctv">
- <para>Das ist eine Mitteilung über eine
- Schwachstelle von <link xlink:href="http://www.cert.org/">US-CERT</link>.</para>
- </callout>
-
- <callout arearefs="co-vx-ucs">
- <para>Das ist ein Cyber-Sicherheitsalarm von <link xlink:href="http://www.cert.org/">US-CERT</link>.</para>
- </callout>
-
- <callout arearefs="co-vx-uct">
- <para>Das ist ein technischer Cyber-Sicherheitsalarm
- von <link xlink:href="http://www.cert.org/">US-CERT</link>.</para>
- </callout>
-
- <callout arearefs="co-vx-mls">
- <para>Das ist eine URL zu einem archivierten Posting
- auf einer Mailingliste. Das Attribut
- <literal>msgid</literal> ist optional und gibt die
- Nachrichtenkennung des Postings an.</para>
- </callout>
-
- <callout arearefs="co-vx-url">
- <para>Das ist eine gewöhnliche URL. Sie sollte
- nur verwendet werden, wenn keine der anderen
- Referenzkategorien verfügbar ist.</para>
- </callout>
-
- <callout arearefs="co-vx-dsc">
- <para>Das ist das Datum, an dem die
- Sicherheitslücke bekannt wurde
- (<replaceable>JJJJ-MM-TT</replaceable>).</para>
- </callout>
-
- <callout arearefs="co-vx-ent">
- <para>Das ist das Datum, an dem der Eintrag
- hinzugefügt wurde
- (<replaceable>JJJJ-MM-TT</replaceable>).</para>
- </callout>
-
- <callout arearefs="co-vx-mod">
- <para>Das ist das Datum, an dem zuletzt irgendeine
- Information des Eintrags verändert wurde
- (<replaceable>JJJJ-MM-TT</replaceable>). Neue
- Einträge dürfen dieses Feld nicht enthalten.
- Es sollte beim Editieren eines existierenden Eintrags
- eingefügt werden.</para>
- </callout>
- </calloutlist>
- </sect2>
-
- <sect2 xml:id="security-notify-vuxml-testing">
- <title>Ihre Änderungen an der VuXML-Datenbank
- testen</title>
-
- <para>Nehmen wir an, Sie haben gerade einen Eintrag
- für eine Sicherheitslücke in dem Paket
- <literal>clamav</literal> geschrieben oder
- ausgefüllt, die in der Version
- <literal>0.65_7</literal> korrigiert wurde.</para>
-
- <para>Als Voraussetzung müssen Sie die aktuellen Versionen
- der Ports <package>ports-mgmt/portaudit</package>, <package>ports-mgmt/portaudit-db</package> sowie
- <package>security/vuxml</package>
- <emphasis>installieren</emphasis>.</para>
-
- <note>
- <para>Um <command>packaudit</command> auszuführen,
- müssen Sie die Berechtigung haben
- <filename>DATABASEDIR</filename> zu
- schreiben&nbsp;&ndash;&nbsp;üblicherweise ist das
- <filename>/var/db/portaudit</filename>.</para>
-
- <para>Durch Setzen der Umgebungsvariable
- <filename>DATABASEDIR</filename> können
- Sie hier auch ein anderes Verzeichnis angeben.</para>
-
- <para>Arbeiten Sie nicht aus dem Verzeichnis
- <filename>${PORTSDIR}/security/vuxml</filename> heraus,
- müssen Sie zusätzlich die Umgebungsvariable
- <filename>VUXMLDIR</filename> setzen, um
- anzugeben, in welchem Verzeichnis sich die Datei
- <filename>vuln.xml</filename> befindet.</para>
- </note>
-
- <para>Zuerst überprüfen Sie bitte, ob bereits
- ein Eintrag für diese Schwachstelle existiert. Wenn
- es einen solchen Eintrag gibt, sollte er auf die vorige
- Version <literal>0.65_6</literal> zutreffen:</para>
-
- <screen>&prompt.user; <userinput>packaudit</userinput>
-&prompt.user; <userinput>portaudit clamav-0.65_6</userinput></screen>
-
- <para>Wenn keine vorhandenen Einträge gefunden werden
- haben Sie grünes Licht, einen neuen Eintrag für
- diese Sicherheitslücke anzulegen. Sie können nun
- eine neue UUID erzeugen (wir nehmen an, diese lautet
- <literal>74a9541d-5d6c-11d8-80e3-0020ed76ef5a</literal>)
- und einen neuen Eintrag in der VuXML-Datenbank anlegen.
- Bitte überprüfen Sie danach die Syntax mit
- folgendem Befehl:</para>
-
- <screen>&prompt.user; <userinput>cd ${PORTSDIR}/security/vuxml &amp;&amp; make validate</userinput></screen>
-
- <note>
- <para>Sie werden zumindest eines der folgenden Pakete
- benötigen: <package>textproc/libxml2</package>, <package>textproc/jade</package>.</para>
- </note>
-
- <para>Jetzt bauen Sie bitte die
- <command>portaudit</command>-Datenbank aus der VuXML-Datei
- neu:</para>
-
- <screen>&prompt.user; <userinput>packaudit</userinput></screen>
-
- <para>Um sicherzustellen, dass der Abschnitt
- <literal>&lt;affected&gt;</literal> Ihres Eintrags die
- richtigen Pakete betrifft, verwenden Sie bitte den
- folgenden Befehl:</para>
-
- <screen>&prompt.user; <userinput>portaudit -f /usr/ports/INDEX -r 74a9541d-5d6c-11d8-80e3-0020ed76ef5a</userinput></screen>
-
- <note>
- <para>Bitte lesen Sie in &man.portaudit.1; nach, um ein
- besseres Verständnis der Befehlssyntax zu
- entwickeln.</para>
- </note>
-
- <para>Bitte stellen Sie sicher, dass Ihr Eintrag keine
- falschen Treffer in der Ausgabe erzeugt.</para>
-
- <para>Jetzt überprüfen Sie bitte, dass Ihr
- Eintrag die richtigen Versionen des Pakets angibt:</para>
-
- <screen>&prompt.user; <userinput>portaudit clamav-0.65_6 clamav-0.65_7</userinput>
-Affected package: clamav-0.65_6 (matched by clamav&lt;0.65_7)
-Type of problem: clamav remote denial-of-service.
-Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-0020ed76ef5a.html&gt;
-
-1 problem(s) found.</screen>
-
- <para>Offensichtlich sollte die erste Version ausgegeben
- werden&nbsp;&ndash;&nbsp;die zweite jedoch nicht.</para>
-
- <para>Abschließend überprüfen Sie bitte,
- ob die Webseite, die aus der VuXML-Datenbank erzeugt wird,
- wie erwartet aussieht:</para>
-
- <screen>&prompt.user; <userinput>mkdir -p ~/public_html/portaudit</userinput>
-&prompt.user; <userinput>packaudit</userinput>
-&prompt.user; <userinput>lynx ~/public_html/portaudit/74a9541d-5d6c-11d8-80e3-0020ed76ef5a.html</userinput></screen>
- </sect2>
- </sect1>
- </chapter>
-
- <chapter xml:id="porting-dads">
- <title>Was man machen respektive vermeiden sollte</title>
-
- <sect1 xml:id="dads-intro">
- <title>Einführung</title>
-
- <para>Hier ist eine Liste von gebräuchlichen Dos and
- Don'ts (Dinge, die man machen oder vermeiden sollte), welchen
- Sie während des Portierungsprozesses begegnen werden.
- Sie sollten Ihren Port anhand dieser Liste
- überprüfen. Sie können auch Ports in der <link xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query">PR
- Datenbank</link>, welche andere Menschen eingereicht haben,
- kontrollieren. Senden Sie bitte Kommentare zu Ports, die Sie
- verifizieren wie unter <link xlink:href="&url.articles.contributing;/contrib-how.html#CONTRIB-GENERAL">Bug
- Reports and General Commentary</link> beschrieben. Der
- Abgleich von Ports aus der PR-Datenbank hilft uns diese
- schneller zu committen, und zeigt auch, dass Sie wissen, worum
- es geht.</para>
- </sect1>
-
- <sect1 xml:id="porting-wrkdir">
- <title><varname>WRKDIR</varname></title>
-
- <para>Schreiben Sie in keine Dateien außerhalb von
- <varname>WRKDIR</varname>. <varname>WRKDIR</varname> ist der
- einzige Ort, welcher während des Erstellen des Ports
- garantiert beschreibbar ist (siehe <link xlink:href="&url.books.handbook;/ports-using.html#PORTS-CD"> Ports
- Installieren von CDROM</link> für ein Beispiel, um Ports
- in einem schreibgeschützen Zweig zu erstellen). Wenn Sie
- eine der <filename>pkg-*</filename>
- Dateien modifizieren müssen, sollten Sie <link linkend="porting-pkgfiles">eine Variable erneut
- definieren</link>, anstatt die Datei zu
- überschreiben.</para>
- </sect1>
-
- <sect1 xml:id="porting-wrkdirprefix">
- <title><varname>WRKDIRPREFIX</varname></title>
-
- <para>Vergewissern Sie sich, dass Ihr Port
- <varname>WRKDIRPREFIX</varname> beachtet. Die meisten Ports
- sollten sich darüber keine Sorgen machen. Beachten Sie
- bitte, falls auf <varname>WRKDIR</varname> eines anderen Ports
- verwiesen wird, dass die korrekte Position
- <filename>WRKDIRPREFIXPORTSDIR/subdir/name/work</filename>,
- und nicht etwa
- <filename>PORTSDIR/subdir/name/work</filename>,
- <filename>.CURDIR/../../subdir/name/work</filename>
- oder ähnliches ist.</para>
-
- <para>Falls Sie <varname>WRKDIR</varname> selbst definieren,
- sollten Sie sicherstellen, dass Sie
- <literal>&dollar;{WRKDIRPREFIX}&dollar;{.CURDIR}</literal> am
- Anfang anfügen.</para>
- </sect1>
-
- <sect1 xml:id="porting-versions">
- <title>Unterschiedliche Betriebssysteme und
- Betriebssystemversionen</title>
-
- <para>Sie können auf Quelltext treffen, welcher
- Modifizierungen oder bedingtes Kompilieren, abhängig
- davon, unter welcher Unix-Version er läuft,
- benötigt. Falls Sie Änderungen an solch einem
- Quelltext vornehmen müssen, stellen Sie bitte sicher,
- dass Sie Ihre Änderungen so allgemein wie möglich
- halten, damit wir den Quelltext auf ältere
- FreeBSD-Systeme portieren und zur Quer-Portierung auf andere
- BSD-Systeme, wie etwa 4.4BSD von CSRG, BSD/386, 386BSD, NetBSD
- und OpenBSD verwenden können.</para>
-
- <para>Der bevorzugte Weg, um 4.3BSD/Reno (1990) und neuere
- Versionen des BSD-Quelltextes zu unterscheiden, ist das
- <literal>BSD</literal>-Makro zu nutzen, welches in <link xlink:href="http://cvsweb.freebsd.org/src/sys/sys/param.h">sys/param.h</link>
- definiert ist. Hoffentlich ist diese Datei schon
- enthalten&nbsp;&ndash;&nbsp;falls nicht, so fügen Sie
- folgenden Quelltext:</para>
-
- <programlisting>#if (defined(__unix__) || defined(unix)) &amp;&amp; !defined(USG)
-#include &lt;sys/param.h&gt;
-#endif</programlisting>
-
- <para>an der richtigen Stelle in der <filename>.c</filename>
- Datei hinzu. Wir glauben, dass jedes System, welches diese
- beiden Symbole definiert, die Datei
- <filename>sys/param.h</filename> besitzt. Wenn Sie auf
- Systeme stoßen, wo dies nicht so ist, würden wir
- gerne davon erfahren. Bitte senden Sie eine E-Mail an
- &a.ports;.</para>
-
- <para>Eine andere Möglichkeit zur Unterscheidung ist der
- GNU Autoconf-Stil:</para>
-
- <programlisting>#ifdef HAVE_SYS_PARAM_H
-#include &lt;sys/param.h&gt;
-#endif</programlisting>
-
- <para>Vergessen Sie nicht
- <literal>-DHAVE_SYS_PARAM_H</literal> zu den
- <varname>CFLAGS</varname> im <filename>Makefile</filename>
- hinzuzufügen, falls Sie diese Methode benutzen
- sollten.</para>
-
- <para>Sobald Sie <filename>sys/param.h</filename>
- hinzugefügt haben, können Sie mit Hilfe von</para>
-
- <programlisting>#if (defined(BSD) &amp;&amp; (BSD &gt;= 199103))</programlisting>
-
- <para>unterscheiden, ob der Quelltext auf einer 4.3 Net2
- Code-Basis oder neuer (z.B. FreeBSD 1.x, 4.3/Reno, NetBSD 0.9,
- 386BSD, BSD/386 1.1 und niedriger) kompiliert werden
- wird.</para>
-
- <para>Benutzen Sie:</para>
-
- <programlisting>#if (defined(BSD) &amp;&amp; (BSD &gt;= 199306))</programlisting>
-
- <para>um zu differenzieren, ob der Quelltext auf der Basis von
- 4.4 Code oder neuer (z.B. FreeBSD 2.x, 4.4, NetBSD 1.0,
- BSD/386 2.0 oder höher) kompiliert werden wird.</para>
-
- <para>Der Wert des <literal>BSD</literal>-Makros ist
- <literal>199506</literal> für die 4.4BSD-Lite2 Codebasis.
- Beachten Sie bitte, dass dies hier nur der Information wegen
- angegeben ist. Das Makro sollte nicht dazu benutzt werden, um
- zwischen Versionen von FreeBSD, welche auf 4.4-Lite basieren,
- und Versionen, welche Änderungen von 4.4-Lite2
- übernommen haben, zu unterscheiden. Das
- <literal>__FreeBSD__</literal> Makro sollte stattdessen
- verwandt werden.</para>
-
- <para>Sparsam sollte eingesetzt werden:</para>
-
- <itemizedlist>
- <listitem>
- <para><literal>__FreeBSD__</literal> ist in allen Versionen
- von FreeBSD definiert. Benutzen Sie dieses Makro, falls
- die Änderung(en), die Sie machen,
- <emphasis>nur</emphasis> FreeBSD betrifft.
- Portierungsfallen, wie der Gebrauch von
- <literal>sys_errlist[]</literal> gegenüber
- <function>strerror()</function> sind Berkeley-Eigenheiten,
- keine FreeBSD Änderungen.</para>
- </listitem>
-
- <listitem>
- <para>In FreeBSD 2.x, ist <literal>__FreeBSD__</literal>
- auf <literal>2</literal> definiert. In älteren
- Versionen, ist es <literal>1</literal>. Alle späteren
- Versionen erhöhen es, damit es mit der
- Haupt-Versionsnummer übereinstimmt.</para>
- </listitem>
-
- <listitem>
- <para>Falls Sie zwischen einem FreeBSD 1.x und einem
- FreeBSD 2.x (oder höher) System unterscheiden
- müssen, ist es normalerweise richtig, die
- <literal>BSD</literal>-Makros (wie oben beschrieben) zu
- benutzen. Gibt es tatsächlich eine
- FreeBSD-spezifische Änderung (wie z.B. spezielle
- Optionen von Shared-Libraries für
- <command>ld</command>), ist es nicht zu beanstanden
- <literal>__FreeBSD__</literal> und <literal>#if
- __FreeBSD__ &gt; 1</literal> zu nutzen, um FreeBSD 2.x und
- spätere Systeme zu erkennen. Falls Sie eine
- höhere Genauigkeit benötigen, um FreeBSD Systeme
- seit 2.0-RELEASE zu erkennen, können Sie folgendes
- nutzen:</para>
-
- <programlisting>#if __FreeBSD__ &gt;= 2
-#include &lt;osreldate.h&gt;
-# if __FreeBSD_version &gt;= 199504
- /* 2.0.5+ release specific code here */
-# endif
-#endif</programlisting>
- </listitem>
- </itemizedlist>
-
- <para>In den Tausenden von Ports, die bis jetzt erstellt
- wurden, gab es nur ein oder zwei Fälle, in denen
- <literal>__FreeBSD__</literal> hätte benutzt werden
- sollen. Nur weil ein früherer Port es an der falschen
- Stelle benutzt hatte, bedeutet das nicht, dass Sie dies auch
- machen sollten.</para>
- </sect1>
-
- <sect1 xml:id="freebsd-versions">
- <title>__FreeBSD_version Werte</title>
-
- <para>Hier ist eine praktische Liste von
- <literal>__FreeBSD_version</literal>-Werten wie in <link xlink:href="http://cvsweb.freebsd.org/src/sys/sys/param.h">sys/param.h</link>
- definiert:</para>
-
- <table frame="none">
- <title>__FreeBSD_version-Werte</title>
-
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Wert</entry>
- <entry>Datum</entry>
- <entry>Release</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry>119411</entry>
- <entry/>
- <entry>2.0-RELEASE</entry>
- </row>
-
- <row>
- <entry>199501, 199503</entry>
- <entry>19.&nbsp;März&nbsp;1995</entry>
- <entry>2.1-CURRENT</entry>
- </row>
-
- <row>
- <entry>199504</entry>
- <entry>9.&nbsp;April&nbsp;1995</entry>
- <entry>2.0.5-RELEASE</entry>
- </row>
-
- <row>
- <entry>199508</entry>
- <entry>26.&nbsp;August&nbsp;1995</entry>
- <entry>2.2-CURRENT vor 2.1</entry>
- </row>
-
- <row>
- <entry>199511</entry>
- <entry>10.&nbsp;November&nbsp;1995</entry>
- <entry>2.1.0-RELEASE</entry>
- </row>
-
- <row>
- <entry>199512</entry>
- <entry>10.&nbsp;November&nbsp;1995</entry>
- <entry>2.2-CURRENT vor 2.1.5</entry>
- </row>
-
- <row>
- <entry>199607</entry>
- <entry>10.&nbsp;Juli&nbsp;1996</entry>
- <entry>2.1.5-RELEASE</entry>
- </row>
-
- <row>
- <entry>199608</entry>
- <entry>12.&nbsp;Juli&nbsp;1996</entry>
- <entry>2.2-CURRENT vor 2.1.6</entry>
- </row>
-
- <row>
- <entry>199612</entry>
- <entry>15.&nbsp;November&nbsp;1996</entry>
- <entry>2.1.6-RELEASE</entry>
- </row>
-
- <row>
- <entry>199612</entry>
- <entry/>
- <entry>2.1.7-RELEASE</entry>
- </row>
-
- <row>
- <entry>220000</entry>
- <entry>19.&nbsp;Februar&nbsp;1997</entry>
- <entry>2.2-RELEASE</entry>
- </row>
-
- <row>
- <entry>(nicht geändert)</entry>
- <entry/>
- <entry>2.2.1-RELEASE</entry>
- </row>
-
- <row>
- <entry>(nicht geändert)</entry>
- <entry/>
- <entry>2.2-STABLE nach 2.2.1-RELEASE</entry>
- </row>
-
- <row>
- <entry>221001</entry>
- <entry>15.&nbsp;April&nbsp;1997</entry>
- <entry>2.2-STABLE nach texinfo-3.9</entry>
- </row>
-
- <row>
- <entry>221002</entry>
- <entry>30.&nbsp;April&nbsp;1997</entry>
- <entry>2.2-STABLE nach top</entry>
- </row>
-
- <row>
- <entry>222000</entry>
- <entry>16.&nbsp;Mai&nbsp;1997</entry>
- <entry>2.2.2-RELEASE</entry>
- </row>
-
- <row>
- <entry>222001</entry>
- <entry>19.&nbsp;Mai&nbsp;1997</entry>
- <entry>2.2-STABLE nach 2.2.2-RELEASE</entry>
- </row>
-
- <row>
- <entry>225000</entry>
- <entry>2.&nbsp;Oktober&nbsp;1997</entry>
- <entry>2.2.5-RELEASE</entry>
- </row>
-
- <row>
- <entry>225001</entry>
- <entry>20.&nbsp;November&nbsp;1997</entry>
- <entry>2.2-STABLE nach 2.2.5-RELEASE</entry>
- </row>
-
- <row>
- <entry>225002</entry>
- <entry>27.&nbsp;Dezember&nbsp;1997</entry>
- <entry>2.2-STABLE nach der Aufnahme von ldconfig -R</entry>
- </row>
-
- <row>
- <entry>226000</entry>
- <entry>24.&nbsp;März&nbsp;1998</entry>
- <entry>2.2.6-RELEASE</entry>
- </row>
-
- <row>
- <entry>227000</entry>
- <entry>21.&nbsp;Juli&nbsp;1998</entry>
- <entry>2.2.7-RELEASE</entry>
- </row>
-
- <row>
- <entry>227001</entry>
- <entry>21.&nbsp;Juli&nbsp;1998</entry>
- <entry>2.2-STABLE nach 2.2.7-RELEASE</entry>
- </row>
-
- <row>
- <entry>227002</entry>
- <entry>19.&nbsp;September&nbsp;1998</entry>
- <entry>2.2-STABLE nach &man.semctl.2; Änderung</entry>
- </row>
-
- <row>
- <entry>228000</entry>
- <entry>29.&nbsp;November&nbsp;1998</entry>
- <entry>2.2.8-RELEASE</entry>
- </row>
-
- <row>
- <entry>228001</entry>
- <entry>29.&nbsp;November&nbsp;1998</entry>
- <entry>2.2-STABLE nach 2.2.8-RELEASE</entry>
- </row>
-
- <row>
- <entry>300000</entry>
- <entry>19.&nbsp;Februar&nbsp;1996</entry>
- <entry>3.0-CURRENT vor &man.mount.2; Änderung</entry>
- </row>
-
- <row>
- <entry>300001</entry>
- <entry>24.&nbsp;September&nbsp;1997</entry>
- <entry>3.0-CURRENT nach &man.mount.2; Änderung</entry>
- </row>
-
- <row>
- <entry>300002</entry>
- <entry>2.&nbsp;Juni&nbsp;1998</entry>
- <entry>3.0-CURRENT nach &man.semctl.2; Änderung</entry>
- </row>
-
- <row>
- <entry>300003</entry>
- <entry>7.&nbsp;Juni&nbsp;1998</entry>
- <entry>3.0-CURRENT nach ioctl arg Änderungen</entry>
- </row>
-
- <row>
- <entry>300004</entry>
- <entry>3.&nbsp;September&nbsp;1998</entry>
- <entry>3.0-CURRENT nach ELF-Konvertierung</entry>
- </row>
-
- <row>
- <entry>300005</entry>
- <entry>16.&nbsp;Oktober&nbsp;1998</entry>
- <entry>3.0-RELEASE</entry>
- </row>
-
- <row>
- <entry>300006</entry>
- <entry>16.&nbsp;Oktober&nbsp;1998</entry>
- <entry>3.0-CURRENT nach 3.0-RELEASE</entry>
- </row>
-
- <row>
- <entry>300007</entry>
- <entry>22.&nbsp;Januar&nbsp;1999</entry>
- <entry>3.0-STABLE nach 3/4 Zweig</entry>
- </row>
-
- <row>
- <entry>310000</entry>
- <entry>9.&nbsp;Februar&nbsp;1999</entry>
- <entry>3.1-RELEASE</entry>
- </row>
-
- <row>
- <entry>310001</entry>
- <entry>27.&nbsp;März&nbsp;1999</entry>
- <entry>3.1-STABLE nach 3.1-RELEASE</entry>
- </row>
-
- <row>
- <entry>310002</entry>
- <entry>14.&nbsp;April&nbsp;1999</entry>
- <entry>3.1-STABLE nach Änderung der C++
- Konstruktor/Destruktor-Reihenfolge</entry>
- </row>
-
- <row>
- <entry>320000</entry>
- <entry/>
- <entry>3.2-RELEASE</entry>
- </row>
-
- <row>
- <entry>320001</entry>
- <entry>8.&nbsp;Mai&nbsp;1999</entry>
- <entry>3.2-STABLE</entry>
- </row>
-
- <row>
- <entry>320002</entry>
- <entry>29.&nbsp;August&nbsp;1999</entry>
- <entry>3.2-STABLE nach binär-inkompatibler IPFW und
- Socket-Änderungen</entry>
- </row>
-
- <row>
- <entry>330000</entry>
- <entry>2.&nbsp;September&nbsp;1999</entry>
- <entry>3.3-RELEASE</entry>
- </row>
-
- <row>
- <entry>330001</entry>
- <entry>16.&nbsp;September&nbsp;1999</entry>
- <entry>3.3-STABLE</entry>
- </row>
-
- <row>
- <entry>330002</entry>
- <entry>24.&nbsp;November&nbsp;1999</entry>
- <entry>3.3-STABLE nach Hinzufügen von &man.mkstemp.3;
- zur libc</entry>
- </row>
-
- <row>
- <entry>340000</entry>
- <entry>5.&nbsp;Dezember&nbsp;1999</entry>
- <entry>3.4-RELEASE</entry>
- </row>
-
- <row>
- <entry>340001</entry>
- <entry>17.&nbsp;Dezember&nbsp;1999</entry>
- <entry>3.4-STABLE</entry>
- </row>
-
- <row>
- <entry>350000</entry>
- <entry>20.&nbsp;Juni&nbsp;2000</entry>
- <entry>3.5-RELEASE</entry>
- </row>
-
- <row>
- <entry>350001</entry>
- <entry>12.&nbsp;Juli&nbsp;2000</entry>
- <entry>3.5-STABLE</entry>
- </row>
-
- <row>
- <entry>400000</entry>
- <entry>22.&nbsp;Januar&nbsp;1999</entry>
- <entry>4.0-CURRENT nach 3.4 Zweig</entry>
- </row>
-
- <row>
- <entry>400001</entry>
- <entry>20.&nbsp;Februar&nbsp;1999</entry>
- <entry>4.0-CURRENT nach der Änderung im Verhalten des
- dynamischen Linkers.</entry>
- </row>
-
- <row>
- <entry>400002</entry>
- <entry>13.&nbsp;März&nbsp;1999</entry>
- <entry>4.0-CURRENT nach Änderung der C++
- Konstruktor/Destruktor Reihenfolge.</entry>
- </row>
-
- <row>
- <entry>400003</entry>
- <entry>27.&nbsp;März&nbsp;1999</entry>
- <entry>4.0-CURRENT nach funktionierendem &man.dladdr.3;.</entry>
- </row>
-
- <row>
- <entry>400004</entry>
- <entry>5.&nbsp;April&nbsp;1999</entry>
- <entry>4.0-CURRENT nach der __deregister_frame_info
- Fehlerbehebung für den dynamischen Linker (auch
- 4.0-CURRENT nach EGCS 1.1.2 Integration).</entry>
- </row>
-
- <row>
- <entry>400005</entry>
- <entry>27.&nbsp;April&nbsp;1999</entry>
- <entry>4.0-CURRENT nach &man.suser.9; API Änderung
- (auch 4.0-CURRENT nach newbus).</entry>
- </row>
-
- <row>
- <entry>400006</entry>
- <entry>31.&nbsp;Mai&nbsp;1999</entry>
- <entry>4.0-CURRENT nach Änderung der
- cdevsw-Registrierung.</entry>
- </row>
-
- <row>
- <entry>400007</entry>
- <entry>17.&nbsp;Juni&nbsp;1999</entry>
- <entry>4.0-CURRENT nach Hinzufügen von so_cred
- für Zugangsberechtigungen auf Socket-Ebene.</entry>
- </row>
-
- <row>
- <entry>400008</entry>
- <entry>20.&nbsp;Juni&nbsp;1999</entry>
- <entry>4.0-CURRENT nach Hinzufügen eines poll
- Syscall-Wrappers zur libc_r.</entry>
- </row>
-
- <row>
- <entry>400009</entry>
- <entry>20.&nbsp;Juli&nbsp;1999</entry>
- <entry>4.0-CURRENT nach der Änderung des Kernel
- <literal>dev_t</literal>-Typs zum <literal>struct
- specinfo</literal>-Zeiger.</entry>
- </row>
-
- <row>
- <entry>400010</entry>
- <entry>25.&nbsp;September&nbsp;1999</entry>
- <entry>4.0-CURRENT nach dem Beseitigen eines Fehlers in
- &man.jail.2;.</entry>
- </row>
-
- <row>
- <entry>400011</entry>
- <entry>29.&nbsp;September&nbsp;1999</entry>
- <entry>4.0-CURRENT nach der <literal>sigset_t</literal>
- Datentyp Änderung.</entry>
- </row>
-
- <row>
- <entry>400012</entry>
- <entry>15.&nbsp;November&nbsp;1999</entry>
- <entry>4.0-CURRENT nach dem Wechsel zum GCC
- 2.95.2-Compiler.</entry>
- </row>
-
- <row>
- <entry>400013</entry>
- <entry>4.&nbsp;Dezember&nbsp;1999</entry>
- <entry>4.0-CURRENT nach Hinzufügen der erweiterbaren
- Linux Mode ioctl-Routinen.</entry>
- </row>
-
- <row>
- <entry>400014</entry>
- <entry>18.&nbsp;Januar&nbsp;2000</entry>
- <entry>4.0-CURRENT nach dem OpenSSL-Import.</entry>
- </row>
-
- <row>
- <entry>400015</entry>
- <entry>27.&nbsp;Januar&nbsp;2000</entry>
- <entry>4.0-CURRENT nach der C++ ABI Änderung in GCC
- 2.95.2 von -fvtable-thunks zu -fno-vtable-thunks als
- Standard.</entry>
- </row>
-
- <row>
- <entry>400016</entry>
- <entry>27.&nbsp;Februar&nbsp;2000</entry>
- <entry>4.0-CURRENT nach OpenSSH-Import.</entry>
- </row>
-
- <row>
- <entry>400017</entry>
- <entry>13.&nbsp;März&nbsp;2000</entry>
- <entry>4.0-RELEASE</entry>
- </row>
-
- <row>
- <entry>400018</entry>
- <entry>17.&nbsp;März&nbsp;2000</entry>
- <entry>4.0-STABLE nach 4.0-RELEASE</entry>
- </row>
-
- <row>
- <entry>400019</entry>
- <entry>5.&nbsp;Mai&nbsp;2000</entry>
- <entry>4.0-STABLE nach der Einführung von
- verzögerten Prüfsummen.</entry>
- </row>
-
- <row>
- <entry>400020</entry>
- <entry>4.&nbsp;Juni&nbsp;2000</entry>
- <entry>4.0-STABLE nach dem Einpflegen des
- libxpg4-Quelltextes in die libc.</entry>
- </row>
-
- <row>
- <entry>400021</entry>
- <entry>8.&nbsp;Juli&nbsp;2000</entry>
- <entry>4.0-STABLE nach der Aktualisierung von Binutils auf
- 2.10.0, Änderungen der binären ELF-Markierungen,
- Aufnahme von tcsh ins Basissystem.</entry>
- </row>
-
- <row>
- <entry>410000</entry>
- <entry>14.&nbsp;Juli&nbsp;2000</entry>
- <entry>4.1-RELEASE</entry>
- </row>
-
- <row>
- <entry>410001</entry>
- <entry>29.&nbsp;Juli&nbsp;2000</entry>
- <entry>4.1-STABLE nach 4.1-RELEASE</entry>
- </row>
-
- <row>
- <entry>410002</entry>
- <entry>16.&nbsp;September&nbsp;2000</entry>
- <entry>4.1-STABLE nachdem &man.setproctitle.3; von der
- libutil in die libc verschoben wurde.</entry>
- </row>
-
- <row>
- <entry>411000</entry>
- <entry>25.&nbsp;September&nbsp;2000</entry>
- <entry>4.1.1-RELEASE</entry>
- </row>
-
- <row>
- <entry>411001</entry>
- <entry/>
- <entry>4.1.1-STABLE nach 4.1.1-RELEASE</entry>
- </row>
-
- <row>
- <entry>420000</entry>
- <entry>31.&nbsp;Oktober&nbsp;2000</entry>
- <entry>4.2-RELEASE</entry>
- </row>
-
- <row>
- <entry>420001</entry>
- <entry>10.&nbsp;Januar&nbsp;2001</entry>
- <entry>4.2-STABLE nach Kombinaion von libgcc.a und
- libgcc_r.a und zugehörigen Änderungen der
- GCC-Bindungen.</entry>
- </row>
-
- <row>
- <entry>430000</entry>
- <entry>6.&nbsp;März&nbsp;2001</entry>
- <entry>4.3-RELEASE</entry>
- </row>
-
- <row>
- <entry>430001</entry>
- <entry>18.&nbsp;Mai&nbsp;2001</entry>
- <entry>4.3-STABLE nach der Einführung von
- wint_t.</entry>
- </row>
-
- <row>
- <entry>430002</entry>
- <entry>22.&nbsp;Juli&nbsp;2001</entry>
- <entry>4.3-STABLE nach dem Einpflegen der PCI
- Stromstatus-API.</entry>
- </row>
-
- <row>
- <entry>440000</entry>
- <entry>1.&nbsp;August&nbsp;2001</entry>
- <entry>4.4-RELEASE</entry>
- </row>
-
- <row>
- <entry>440001</entry>
- <entry>23.&nbsp;Oktober&nbsp;2001</entry>
- <entry>4.4-STABLE nach der Einführung von
- d_thread_t.</entry>
- </row>
-
- <row>
- <entry>440002</entry>
- <entry>4.&nbsp;November&nbsp;2001</entry>
- <entry>4.4-STABLE nach den Änderungen der
- mount-Struktur (betrifft Dateisystem-Kernelmodule).
- </entry>
- </row>
-
- <row>
- <entry>440003</entry>
- <entry>18.&nbsp;Dezember&nbsp;2001</entry>
- <entry>4.4-STABLE nachdem die Userland-Komponenten von
- smbfs importiert worden sind.</entry>
- </row>
-
- <row>
- <entry>450000</entry>
- <entry>20.&nbsp;Dezember&nbsp;2001</entry>
- <entry>4.5-RELEASE</entry>
- </row>
-
- <row>
- <entry>450001</entry>
- <entry>24.&nbsp;Februar&nbsp;2002</entry>
- <entry>4.5-STABLE nach der Umbenennung von Elementen der
- USB-Struktur.</entry>
- </row>
-
- <row>
- <entry>450004</entry>
- <entry>16.&nbsp;April&nbsp;2002</entry>
- <entry>4.5-STABLE nachdem die
- <literal>sendmail_enable</literal> &man.rc.conf.5;
- Variable geändert worden ist, um den Wert
- <literal>NONE</literal> zu akzeptieren.</entry>
- </row>
-
- <row>
- <entry>450005</entry>
- <entry>27.&nbsp;April&nbsp;2002</entry>
- <entry>4.5-STABLE nachdem XFree86 4 als Standard zum Bauen
- der Pakete benutzt wird.</entry>
- </row>
-
- <row>
- <entry>450006</entry>
- <entry>1.&nbsp;Mai&nbsp;2002</entry>
- <entry>4.5-STABLE nach dem Reparieren des Empfangsfilters,
- welcher anfällig für einfache DoS-Attacken
- war.</entry>
- </row>
-
- <row>
- <entry>460000</entry>
- <entry>21.&nbsp;Juni&nbsp;2002</entry>
- <entry>4.6-RELEASE</entry>
- </row>
-
- <row>
- <entry>460001</entry>
- <entry>21.&nbsp;Juni&nbsp;2002</entry>
- <entry>4.6-STABLE &man.sendfile.2; repariert, um mit der
- Dokumentation übereinzustimmen, und nicht mehr die
- Anzahl der gesendeten Header mit der Anzahl der Daten,
- welche aus der Datei geschickt werden, gegenzurechnen.</entry>
- </row>
-
- <row>
- <entry>460002</entry>
- <entry>19.&nbsp;Juli&nbsp;2002</entry>
- <entry>4.6.2-RELEASE</entry>
- </row>
-
- <row>
- <entry>460100</entry>
- <entry>26.&nbsp;Juni&nbsp;2002</entry>
- <entry>4.6-STABLE</entry>
- </row>
-
- <row>
- <entry>460101</entry>
- <entry>26.&nbsp;Juni&nbsp;2002</entry>
- <entry>4.6-STABLE nach dem Einfließen von `sed -i' aus
- CURRENT.</entry>
- </row>
-
- <row>
- <entry>460102</entry>
- <entry>1.&nbsp;September&nbsp;2002</entry>
- <entry>4.6-STABLE nach dem Einfließen von vielen
- neuen pkg_install-Funktionen aus HEAD (HEAD = die
- aktuellste und letzte Version des
- Quellverzeichnisbaumes).</entry>
- </row>
-
- <row>
- <entry>470000</entry>
- <entry>8.&nbsp;Oktober&nbsp;2002</entry>
- <entry>4.7-RELEASE</entry>
- </row>
-
- <row>
- <entry>470100</entry>
- <entry>9.&nbsp;Oktober&nbsp;2002</entry>
- <entry>4.7-STABLE</entry>
- </row>
-
- <row>
- <entry>470101</entry>
- <entry>10.&nbsp;November&nbsp;2002</entry>
- <entry>Beginn von generierten __std{in,out,err}p
- Referenzen statt __sF. Dies ändert std{in,out,err}
- von einem Ausdruck während des Kompilierens zu einem
- Laufzeitausdruck.</entry>
- </row>
-
- <row>
- <entry>470102</entry>
- <entry>23.&nbsp;Januar&nbsp;2003</entry>
- <entry>4.7-STABLE nach dem Einfliessen von
- mbuf-Änderungen, um m_aux mbufs mit denen von m_tag
- zu ersetzen</entry>
- </row>
-
- <row>
- <entry>470103</entry>
- <entry>14.&nbsp;Februar&nbsp;2003</entry>
- <entry>4.7-STABLE erhält OpenSSL 0.9.7</entry>
- </row>
-
- <row>
- <entry>480000</entry>
- <entry>30.&nbsp;März&nbsp;2003</entry>
- <entry>4.8-RELEASE</entry>
- </row>
-
- <row>
- <entry>480100</entry>
- <entry>5.&nbsp;April&nbsp;2003</entry>
- <entry>4.8-STABLE</entry>
- </row>
-
- <row>
- <entry>480101</entry>
- <entry>22.&nbsp;Mai&nbsp;2003</entry>
- <entry>4.8-STABLE nachdem &man.realpath.3; Thread-sicher
- gemacht wurde.</entry>
- </row>
-
- <row>
- <entry>480102</entry>
- <entry>10.&nbsp;August&nbsp;2003</entry>
- <entry>4.8-STABLE Änderung der 3ware-API in twe.</entry>
- </row>
-
- <row>
- <entry>490000</entry>
- <entry>27.&nbsp;Oktober&nbsp;2003</entry>
- <entry>4.9-RELEASE</entry>
- </row>
-
- <row>
- <entry>490100</entry>
- <entry>27.&nbsp;Oktober&nbsp;2003</entry>
- <entry>4.9-STABLE</entry>
- </row>
-
- <row>
- <entry>490101</entry>
- <entry>8.&nbsp;Januar&nbsp;2004</entry>
- <entry>4.9-STABLE nachdem e_sid zu der Struktur
- kinfo_eproc hinzugefügt wurde.</entry>
- </row>
-
- <row>
- <entry>490102</entry>
- <entry>4.&nbsp;Februar&nbsp;2004</entry>
- <entry>4.9-STABLE nach dem Einfliessen der
- libmap-Funktionalität für rtld.</entry>
- </row>
-
- <row>
- <entry>491000</entry>
- <entry>25.&nbsp;Mai&nbsp;2004</entry>
- <entry>4.10-RELEASE</entry>
- </row>
-
- <row>
- <entry>491100</entry>
- <entry>1.&nbsp;Juni&nbsp;2004</entry>
- <entry>4.10-STABLE</entry>
- </row>
-
- <row>
- <entry>491101</entry>
- <entry>11.&nbsp;August&nbsp;2004</entry>
- <entry>4.10-STABLE nach dem Einfliessen von Revision
- 20040629 der Paket-Werkzeuge aus CURRENT.</entry>
- </row>
-
- <row>
- <entry>491102</entry>
- <entry>16.&nbsp;November&nbsp;2004</entry>
- <entry>4.10-STABLE nach der Fehlerbehebung in der VM, um
- das Freigeben von fiktiven Speicherseiten korrekt zu
- handhaben.</entry>
- </row>
-
- <row>
- <entry>492000</entry>
- <entry>17.&nbsp;Dezember&nbsp;2004</entry>
- <entry>4.11-RELEASE</entry>
- </row>
-
- <row>
- <entry>492100</entry>
- <entry>17.&nbsp;Dezember&nbsp;2004</entry>
- <entry>4.11-STABLE</entry>
- </row>
-
- <row>
- <entry>492101</entry>
- <entry>18.&nbsp;April&nbsp;2006</entry>
- <entry>4.11-STABLE nach dem Hinzufügen von
- libdata/ldconfig Verzeichnissen zu den
- mtree-Dateien.</entry>
- </row>
-
- <row>
- <entry>500000</entry>
- <entry>13.&nbsp;März&nbsp;2000</entry>
- <entry>5.0-CURRENT</entry>
- </row>
-
- <row>
- <entry>500001</entry>
- <entry>18.&nbsp;April&nbsp;2000</entry>
- <entry>5.0-CURRENT nach Hinzufügen von
- zusätzlichen Feldern in den ELF-Headern und
- Ändern der Methode zur ELF-Markierung von
- Binärdateien.</entry>
- </row>
-
- <row>
- <entry>500002</entry>
- <entry>2.&nbsp;Mai&nbsp;2000</entry>
- <entry>5.0-CURRENT nach kld-Metadaten
- Änderungen.</entry>
- </row>
-
- <row>
- <entry>500003</entry>
- <entry>18.&nbsp;Mai&nbsp;2000</entry>
- <entry>5.0-CURRENT nach buf/bio Änderungen.</entry>
- </row>
-
- <row>
- <entry>500004</entry>
- <entry>26.&nbsp;Mai&nbsp;2000</entry>
- <entry>5.0-CURRENT nach binutils Aktualisierung.</entry>
- </row>
-
- <row>
- <entry>500005</entry>
- <entry>3.&nbsp;Juni&nbsp;2000</entry>
- <entry>5.0-CURRENT nach dem Einfliessen des libxpg4
- Quelltextes in die libc und der Einführung der
- TASKQ-Schnittstelle.</entry>
- </row>
-
- <row>
- <entry>500006</entry>
- <entry>10.&nbsp;Juni&nbsp;2000</entry>
- <entry>5.0-CURRENT nach dem Hinzufügen der
- AGP-Schnittstellen.</entry>
- </row>
-
- <row>
- <entry>500007</entry>
- <entry>29.&nbsp;Juni&nbsp;2000</entry>
- <entry>5.0-CURRENT nach der Aktualisierung von Perl auf
- Version 5.6.0.</entry>
- </row>
-
- <row>
- <entry>500008</entry>
- <entry>7.&nbsp;Juli&nbsp;2000</entry>
- <entry>5.0-CURRENT nach der Aktualisierung des
- KAME-Quelltextes zu den 2000/07-Quellen.</entry>
- </row>
-
- <row>
- <entry>500009</entry>
- <entry>14.&nbsp;Juli&nbsp;2000</entry>
- <entry>5.0-CURRENT nach ether_ifattach() und
- ether_ifdetach() Änderungen.</entry>
- </row>
-
- <row>
- <entry>500010</entry>
- <entry>16.&nbsp;Juli&nbsp;2000</entry>
- <entry>5.0-CURRENT nachdem die mtree-Standards zurück
- zur ursprünglichen Variante geändert wurden; -L
- hinzugefügt, um Symlinks zu folgen.</entry>
- </row>
-
- <row>
- <entry>500011</entry>
- <entry>18.&nbsp;Juli&nbsp;2000</entry>
- <entry>5.0-CURRENT nachdem die kqueue-API geändert
- worden ist.</entry>
- </row>
-
- <row>
- <entry>500012</entry>
- <entry>2.&nbsp;September&nbsp;2000</entry>
- <entry>5.0-CURRENT nachdem &man.setproctitle.3; von
- libutil nach libc verschoben worden ist.</entry>
- </row>
-
- <row>
- <entry>500013</entry>
- <entry>10.&nbsp;September&nbsp;2000</entry>
- <entry>5.0-CURRENT nach dem ersten SMPng-Commit.</entry>
- </row>
-
- <row>
- <entry>500014</entry>
- <entry>4.&nbsp;Januar&nbsp;2001</entry>
- <entry>5.0-CURRENT nachdem &lt;sys/select.h&gt; nach
- &lt;sys/selinfo.h&gt; verschoben worden ist.</entry>
- </row>
-
- <row>
- <entry>500015</entry>
- <entry>10.&nbsp;Januar&nbsp;2001</entry>
- <entry>5.0-CURRENT nach dem Kombinieren von libgcc.a und
- libgcc_r.a und damit verbundene Änderungen an
- GCC-Bindungen.</entry>
- </row>
-
- <row>
- <entry>500016</entry>
- <entry>24.&nbsp;Januar&nbsp;2001</entry>
- <entry>5.0-CURRENT nach der Änderung das
- Zusammenbinden von libc und libc_r zu erlauben, womit die
- -pthread Option veraltet ist.</entry>
- </row>
-
- <row>
- <entry>500017</entry>
- <entry>18.&nbsp;Februar&nbsp;2001</entry>
- <entry>5.0-CURRENT nach dem Umschalten von struct ucred zu
- struct xucred, um die vom Kernel exportierte API für
- mount u.a.zu stabilisieren.</entry>
- </row>
-
- <row>
- <entry>500018</entry>
- <entry>24.&nbsp;Februar&nbsp;2001</entry>
- <entry>5.0-CURRENT nach dem Hinzufügen der CPUTYPE
- make Variable zum Kontrollieren von CPU-spezifischen
- Optimierungen.</entry>
- </row>
-
- <row>
- <entry>500019</entry>
- <entry>9.&nbsp;Juni&nbsp;2001</entry>
- <entry>5.0-CURRENT nach dem Verschieben von
- machine/ioctl_fd.h nach sys/fdcio.h</entry>
- </row>
-
- <row>
- <entry>500020</entry>
- <entry>15.&nbsp;Juni&nbsp;2001</entry>
- <entry>5.0-CURRENT nach der Umbenennung der
- locale-Namen.</entry>
- </row>
-
- <row>
- <entry>500021</entry>
- <entry>22.&nbsp;Juni&nbsp;2001</entry>
- <entry>5.0-CURRENT nach dem Bzip2-Import. Kennzeichnet
- auch, dass S/Key entfernt wurde.</entry>
- </row>
-
- <row>
- <entry>500022</entry>
- <entry>12.&nbsp;Juli&nbsp;2001</entry>
- <entry>5.0-CURRENT nach SSE Unterstützung.</entry>
- </row>
-
- <row>
- <entry>500023</entry>
- <entry>14.&nbsp;September&nbsp;2001</entry>
- <entry>5.0-CURRENT nach KSE-Meilenstein 2.</entry>
- </row>
-
- <row>
- <entry>500024</entry>
- <entry>1.&nbsp;Oktober&nbsp;2001</entry>
- <entry>5.0-CURRENT nach d_thread_t, und nachdem UUCP in
- die Ports verschoben worden ist.</entry>
- </row>
-
- <row>
- <entry>500025</entry>
- <entry>4.&nbsp;Oktober&nbsp;2001</entry>
- <entry>5.0-CURRENT nach Änderungen in der ABI bei der
- Weitergabe von Deskriptoren und Berechtigungen auf 64 Bit
- Plattformen.</entry>
- </row>
-
- <row>
- <entry>500026</entry>
- <entry>9.&nbsp;Oktober&nbsp;2001</entry>
- <entry>5.0-CURRENT nachdem XFree86 4 als Standard zum
- Erstellen der Pakete benutzt wird und die neue libc
- strnstr()-Funktion hinzugefügt wurde.</entry>
- </row>
-
- <row>
- <entry>500027</entry>
- <entry>10.&nbsp;Oktober&nbsp;2001</entry>
- <entry>5.0-CURRENT nachdem die neue libc
- strcasestr()-Funktion hinzugefügt wurde.</entry>
- </row>
-
- <row>
- <entry>500028</entry>
- <entry>14.&nbsp;Dezember&nbsp;2001</entry>
- <entry>5.0-CURRENT nachdem die Userland-Komponenten von
- smbfs importiert wurden.</entry>
- </row>
-
- <row>
- <entry>(nicht geändert)</entry>
- <entry/>
- <entry>5.0-CURRENT nachdem die neuen C99-Ganzzahlen mit
- spezifischer Breite hinzugefügt wurden.</entry>
- </row>
-
- <row>
- <entry>500029</entry>
- <entry>29.&nbsp;Januar&nbsp;2002</entry>
- <entry>5.0-CURRENT nachdem eine Änderung im
- Rückgabewert von &man.sendfile.2; gemacht
- wurde.</entry>
- </row>
-
- <row>
- <entry>500030</entry>
- <entry>15.&nbsp;Februar&nbsp;2002</entry>
- <entry>5.0-CURRENT nach der Einführung des Types
- <literal>fflags_t</literal>, welches die passende
- Größe für Dateiflags hat.</entry>
- </row>
-
- <row>
- <entry>500031</entry>
- <entry>24.&nbsp;Februar&nbsp;2002</entry>
- <entry>5.0-CURRENT nach der Umbenennung der USB
- elements-Struktur.</entry>
- </row>
-
- <row>
- <entry>500032</entry>
- <entry>16.&nbsp;März&nbsp;2002</entry>
- <entry>5.0-CURRENT nach der Einführung von Perl
- 5.6.1.</entry>
- </row>
-
- <row>
- <entry>500033</entry>
- <entry>3.&nbsp;April&nbsp;2002</entry>
- <entry>5.0-CURRENT nachdem die
- <literal>sendmail_enable</literal> &man.rc.conf.5;
- Variable geändert worden ist, um den Wert
- <literal>NONE</literal> zu akzeptieren.</entry>
- </row>
-
- <row>
- <entry>500034</entry>
- <entry>30.&nbsp;April&nbsp;2002</entry>
- <entry>5.0-CURRENT nachdem mtx_init() einen dritten
- Parameter entgegen nimmt.</entry>
- </row>
-
- <row>
- <entry>500035</entry>
- <entry>13.&nbsp;Mai&nbsp;2002</entry>
- <entry>5.0-CURRENT mit GCC 3.1.</entry>
- </row>
-
- <row>
- <entry>500036</entry>
- <entry>17.&nbsp;Mai&nbsp;2002</entry>
- <entry>5.0-CURRENT ohne Perl in /usr/src</entry>
- </row>
-
- <row>
- <entry>500037</entry>
- <entry>29.&nbsp;Mai&nbsp;2002</entry>
- <entry>5.0-CURRENT nach dem Hinzufügen von
- &man.dlfunc.3;</entry>
- </row>
-
- <row>
- <entry>500038</entry>
- <entry>24.&nbsp;Juli&nbsp;2002</entry>
- <entry>5.0-CURRENT nachdem die Typen von einigen Elementen
- der sockbuf-Struktur geändert wurden und nachdem die
- Struktur neu geordnet wurde.</entry>
- </row>
-
- <row>
- <entry>500039</entry>
- <entry>1.&nbsp;September&nbsp;2002</entry>
- <entry>5.0-CURRENT nach dem GCC 3.2.1 Import. Und auch
- nachdem die Header nicht mehr _BSD_FOO_T_ sondern
- _FOO_T_DECLARED benutzen. Dieser Wert kann auch als
- konservative Schätzung für den Beginn der
- Unterstützung des &man.bzip2.1; Pakets verwendet
- werden.</entry>
- </row>
-
- <row>
- <entry>500040</entry>
- <entry>20.&nbsp;September&nbsp;2002</entry>
- <entry>5.0-CURRENT nachdem verschiedene Änderungen an
- Plattenfunktionen gemacht wurden, um die Anhängigkeit
- von Interna der disklabel-Struktur zu entfernen.</entry>
- </row>
-
- <row>
- <entry>500041</entry>
- <entry>1.&nbsp;Oktober&nbsp;2002</entry>
- <entry>5.0-CURRENT nach dem Hinzufügen von
- &man.getopt.long.3; zur libc.</entry>
- </row>
-
- <row>
- <entry>500042</entry>
- <entry>15.&nbsp;Oktober&nbsp;2002</entry>
- <entry>5.0-CURRENT nach der Aktualisierung von Binutils
- auf 2.13, bei denen die FreeBSD-Emulation, vec und das
- Ausgabeformat geändert wurden.</entry>
- </row>
-
- <row>
- <entry>500043</entry>
- <entry>1.&nbsp;November&nbsp;2002</entry>
- <entry>5.0-CURRENT nach dem Hinzufügen schwacher
- pthread_XXX Stubs zur libc, womit libXThrStub.so veraltet
- ist. 5.0-RELEASE.</entry>
- </row>
-
- <row>
- <entry>500100</entry>
- <entry>17.&nbsp;Januar&nbsp;2003</entry>
- <entry>5.0-CURRENT nach dem Erstellen des
- RELENG_5_0-Zweiges</entry>
- </row>
-
- <row>
- <entry>500101</entry>
- <entry>19.&nbsp;Februar&nbsp;2003</entry>
- <entry>&lt;sys/dkstat.h&gt; ist leer und sollte nicht
- inkludiert werden.</entry>
- </row>
-
- <row>
- <entry>500102</entry>
- <entry>25.&nbsp;Februar&nbsp;2003</entry>
- <entry>5.0-CURRENT nach der Änderung in der
- d_mmap_t-Schnittstelle.</entry>
- </row>
-
- <row>
- <entry>500103</entry>
- <entry>26.&nbsp;Februar&nbsp;2003</entry>
- <entry>5.0-CURRENT nachdem taskqueue_swi geädert
- wurde, um ohne Giant zu arbeiten, und taskqueue_swi_giant
- hinzugefügt wurde, um Giant zu verwenden.</entry>
- </row>
-
- <row>
- <entry>500104</entry>
- <entry>27.&nbsp;Februar&nbsp;2003</entry>
- <entry>cdevsw_add() und cdevsw_remove() gibt es nicht
- länger. Auftauchen der
- MAJOR_AUTO-Allokationsmöglichkeit.</entry>
- </row>
-
- <row>
- <entry>500105</entry>
- <entry>4.&nbsp;März&nbsp;2003</entry>
- <entry>5.0-CURRENT nach der neuen
- cdevsw-Initialisierungsmethode.</entry>
- </row>
-
- <row>
- <entry>500106</entry>
- <entry>8.&nbsp;März&nbsp;2003</entry>
- <entry>devstat_add_entry() wurde durch
- devstat_new_entry() ersetzt.</entry>
- </row>
-
- <row>
- <entry>500107</entry>
- <entry>15.&nbsp;März&nbsp;2003</entry>
- <entry>Devstat Schnittstellenänderung; siehe
- sys/sys/param.h 1.149.</entry>
- </row>
-
- <row>
- <entry>500108</entry>
- <entry>15.&nbsp;März&nbsp;2003</entry>
- <entry>Token-Ring Schnittstellenänderungen.</entry>
- </row>
-
- <row>
- <entry>500109</entry>
- <entry>25.&nbsp;März&nbsp;2003</entry>
- <entry>Hinzufügen von vm_paddr_t.</entry>
- </row>
-
- <row>
- <entry>500110</entry>
- <entry>28.&nbsp;März&nbsp;2003</entry>
- <entry>5.0-CURRENT nachdem &man.realpath.3;
- Thread-sicher gemacht wurde.</entry>
- </row>
-
- <row>
- <entry>500111</entry>
- <entry>9.&nbsp;April&nbsp;2003</entry>
- <entry>5.0-CURRENT nachdem &man.usbhid.3; mit
- NetBSD synchronisiert wurde.</entry>
- </row>
-
- <row>
- <entry>500112</entry>
- <entry>17.&nbsp;April&nbsp;2003</entry>
- <entry>5.0-CURRENT nach der neuen NSS Implementierung
- und Hinzufügen der POSIX.1 getpw*_r, getgr*_r
- Funktionen.</entry>
- </row>
-
- <row>
- <entry>500113</entry>
- <entry>2.&nbsp;Mai&nbsp;2003</entry>
- <entry>5.0-CURRENT nach Entfernen des alten
- rc-Systems.</entry>
- </row>
-
- <row>
- <entry>501000</entry>
- <entry>4.&nbsp;Juni&nbsp;2003</entry>
- <entry>5.1-RELEASE.</entry>
- </row>
-
- <row>
- <entry>501100</entry>
- <entry>2.&nbsp;Juni&nbsp;2003</entry>
- <entry>5.1-CURRENT nach dem Erstellen des RELENG_5_1
- Zweiges.</entry>
- </row>
-
- <row>
- <entry>501101</entry>
- <entry>29.&nbsp;Juni&nbsp;2003</entry>
- <entry>5.1-CURRENT nachdem die Semantik von
- sigtimedwait(2) and sigwaitinfo(2) korrigiert
- wurden.</entry>
- </row>
-
- <row>
- <entry>501102</entry>
- <entry>3.&nbsp;Juli&nbsp;2003</entry>
- <entry>5.1-CURRENT nach dem Hinzufügen der lockfunc und
- lockfuncarg-Felder zu &man.bus.dma.tag.create.9;.</entry>
- </row>
-
- <row>
- <entry>501103</entry>
- <entry>31.&nbsp;Juli&nbsp;2003</entry>
- <entry>5.1-CURRENT nach der Integration des GCC 3.3.1-pre
- 20030711 Snapshots.</entry>
- </row>
-
- <row>
- <entry>501104</entry>
- <entry>5.&nbsp;August&nbsp;2003</entry>
- <entry>5.1-CURRENT 3ware-API Änderungen in twe.</entry>
- </row>
-
- <row>
- <entry>501105</entry>
- <entry>17.&nbsp;August&nbsp;2003</entry>
- <entry>5.1-CURRENT Unterstützung von dynamisch
- gebundenen /bin und /sbin und Verschieben von Bibliotheken
- nach /lib.</entry>
- </row>
-
- <row>
- <entry>501106</entry>
- <entry>8.&nbsp;September&nbsp;2003</entry>
- <entry>5.1-CURRENT nachdem im Kernel Unterstützung
- für Coda 6.x hinzugefügt wurden.</entry>
- </row>
-
- <row>
- <entry>501107</entry>
- <entry>17.&nbsp;September&nbsp;2003</entry>
- <entry>5.1-CURRENT nachdem die 16550 UART-Konstanten von
- <filename>&lt;dev/sio/sioreg.h&gt;</filename> nach
- <filename>&lt;dev/ic/ns16550.h&gt;</filename> verschoben
- wurden. Und nachdem die libmap Funktionalität
- vorbehaltlos vom rtld unterstützt wurde.</entry>
- </row>
-
- <row>
- <entry>501108</entry>
- <entry>23.&nbsp;September&nbsp;2003</entry>
- <entry>5.1-CURRENT nach Aktualisierung der PFIL_HOOKS API.</entry>
- </row>
-
- <row>
- <entry>501109</entry>
- <entry>27.&nbsp;September&nbsp;2003</entry>
- <entry>5.1-CURRENT nachdem kiconv(3) hinzugefügt
- wurde.</entry>
- </row>
-
- <row>
- <entry>501110</entry>
- <entry>28.&nbsp;September&nbsp;2003</entry>
- <entry>5.1-CURRENT nachdem der standardmäßige
- Ablauf von open und close in cdevsw geändert
- wurde.</entry>
- </row>
-
- <row>
- <entry>501111</entry>
- <entry>16.&nbsp;Oktober&nbsp;2003</entry>
- <entry>5.1-CURRENT nachdem das Layout von cdevsw
- geändert wurde.</entry>
- </row>
-
- <row>
- <entry>501112</entry>
- <entry>16.&nbsp;Oktober&nbsp;2003</entry>
- <entry>5.1-CURRENT nach dem Hinzufügen von
- Mehrfachvererbung in kobj.</entry>
- </row>
-
- <row>
- <entry>501113</entry>
- <entry>31.&nbsp;Oktober&nbsp;2003</entry>
- <entry>5.1-CURRENT nach der if_xname Änderung in der
- Struktur ifnet</entry>
- </row>
-
- <row>
- <entry>501114</entry>
- <entry>16.&nbsp;November&nbsp;2003</entry>
- <entry>5.1-CURRENT nachdem /bin und /sbin geändert
- wurden, um sie dynamisch zu binden.</entry>
- </row>
-
- <row>
- <entry>502000</entry>
- <entry>7.&nbsp;Dezember&nbsp;2003</entry>
- <entry>5.2-RELEASE</entry>
- </row>
-
- <row>
- <entry>502010</entry>
- <entry>23.&nbsp;Februar&nbsp;2004</entry>
- <entry>5.2.1-RELEASE</entry>
- </row>
-
- <row>
- <entry>502100</entry>
- <entry>7.&nbsp;Dezember&nbsp;2003</entry>
- <entry>5.2-CURRENT nach dem Erstellen des RELENG_5_2-Zweiges.</entry>
- </row>
-
- <row>
- <entry>502101</entry>
- <entry>19.&nbsp;Dezember&nbsp;2003</entry>
- <entry>5.2-CURRENT nachdem die
- __cxa_atexit/__cxa_finalize Funktionen zur libc
- hinzugefügt wurden.</entry>
- </row>
-
- <row>
- <entry>502102</entry>
- <entry>30.&nbsp;Januar&nbsp;2004</entry>
- <entry>5.2-CURRENT nachdem die Standard-Thread Bibliothek
- von libc_r zu libpthread geändert wurde.</entry>
- </row>
-
- <row>
- <entry>502103</entry>
- <entry>21.&nbsp;Februar&nbsp;2004</entry>
- <entry>5.2-CURRENT nach dem Gerätetreiber API
- Megapatch.</entry>
- </row>
-
- <row>
- <entry>502104</entry>
- <entry>25.&nbsp;Februar&nbsp;2004</entry>
- <entry>5.2-CURRENT nachdem getopt_long_only()
- hinzugefügt wurde.</entry>
- </row>
-
- <row>
- <entry>502105</entry>
- <entry>5.&nbsp;März&nbsp;2004</entry>
- <entry>5.2-CURRENT nachdem NULL für C in ((void *)0)
- geändert wurde, was mehr Warnungen erzeugt.</entry>
- </row>
-
- <row>
- <entry>502106</entry>
- <entry>8.&nbsp;März&nbsp;2004</entry>
- <entry>5.2-CURRENT nachdem pf beim Bauen und Installieren
- mit eingebunden wird.</entry>
- </row>
-
- <row>
- <entry>502107</entry>
- <entry>10.&nbsp;März&nbsp;2004</entry>
- <entry>5.2-CURRENT nachdem time_t auf der sparc64-Plattform
- in einen 64-bit Wert geändert wurde.</entry>
- </row>
-
- <row>
- <entry>502108</entry>
- <entry>12.&nbsp;März&nbsp;2004</entry>
- <entry>5.2-CURRENT nachdem sich die Unterstützung
- für den Intel C/C++-Compiler in einigen Headern und
- execve(2) geändert hat, um sich strikter an POSIX zu
- halten.</entry>
- </row>
-
- <row>
- <entry>502109</entry>
- <entry>22.&nbsp;März&nbsp;2004</entry>
- <entry>5.2-CURRENT nach der Einführung der
- bus_alloc_resource_any API</entry>
- </row>
-
- <row>
- <entry>502110</entry>
- <entry>27.&nbsp;März&nbsp;2004</entry>
- <entry>5.2-CURRENT nach dem Hinzufügen von UTF-8
- locales</entry>
- </row>
-
- <row>
- <entry>502111</entry>
- <entry>11.&nbsp;April&nbsp;2004</entry>
- <entry>5.2-CURRENT nach dem Entfernen der getvfsent(3)
- API</entry>
- </row>
-
- <row>
- <entry>502112</entry>
- <entry>13.&nbsp;April&nbsp;2004</entry>
- <entry>5.2-CURRENT nach dem Hinzufügen der .warning
- Directive für make.</entry>
- </row>
-
- <row>
- <entry>502113</entry>
- <entry>4.&nbsp;Juni&nbsp;2004</entry>
- <entry>5.2-CURRENT nachdem ttyioctl() zwingend erforderlich
- für serielle Treiber gemacht wurde.</entry>
- </row>
-
- <row>
- <entry>502114</entry>
- <entry>13.&nbsp;Juni&nbsp;2004</entry>
- <entry>5.2-CURRENT nach dem Import des
- ALTQ-Frameworks.</entry>
- </row>
-
- <row>
- <entry>502115</entry>
- <entry>14.&nbsp;Juni&nbsp;2004</entry>
- <entry>5.2-CURRENT nachdem sema_timedwait(9) geändert
- wurde, 0 bei Erfolg und einen von 0 verschiedenen
- Fehlercode im Falle eines Fehlers
- zurückzuliefern.</entry>
- </row>
-
- <row>
- <entry>502116</entry>
- <entry>16.&nbsp;Juni&nbsp;2004</entry>
- <entry>5.2-CURRENT nach dem Ändern der Kernel
- Struktur dev_t, in ein Zeiger auf die Struktur cdev *</entry>
- </row>
-
- <row>
- <entry>502117</entry>
- <entry>17.&nbsp;Juni&nbsp;2004</entry>
- <entry>5.2-CURRENT nach dem Ändern der Kernelstruktur
- udev_t in dev_t.</entry>
- </row>
-
- <row>
- <entry>502118</entry>
- <entry>17.&nbsp;Juni&nbsp;2004</entry>
- <entry>5.2-CURRENT nachdem Unterstützung für
- CLOCK_VIRTUAL und CLOCK_PROF zu clock_gettime(2) und
- clock_getres(2) hinzugefügt wurde.</entry>
- </row>
-
- <row>
- <entry>502119</entry>
- <entry>22.&nbsp;Juni&nbsp;2004</entry>
- <entry>5.2-CURRENT nachdem die Überprüfung des
- Klonens von Netzwerk-Schnittstellen geändert
- wurde.</entry>
- </row>
-
- <row>
- <entry>502120</entry>
- <entry>2.&nbsp;Juli&nbsp;2004</entry>
- <entry>5.2-CURRENT nach dem Einfliessen von Revision
- 20040629 der Paket-Werkzeuge.</entry>
- </row>
-
- <row>
- <entry>502121</entry>
- <entry>9.&nbsp;Juli&nbsp;2004</entry>
- <entry>5.2-CURRENT nachdem Bluetooth-Quelltext als nicht
- i386-spezifisch markiert wurde.</entry>
- </row>
-
- <row>
- <entry>502122</entry>
- <entry>11.&nbsp;Juli&nbsp;2004</entry>
- <entry>5.2-CURRENT nach der Einführung des KDB
- Debugger Frameworks, der Umwandlung des DDB in ein Backend
- und der Einführung des GDB-Backends.</entry>
- </row>
-
- <row>
- <entry>502123</entry>
- <entry>12.&nbsp;Juli&nbsp;2004</entry>
- <entry>5.2-CURRENT nachdem VFS_ROOT geändert wurde,
- eine Struktur thread als Argument zu aktzeptieren, wie
- vflush. Die Struktur kinfo_proc enthält nun einen
- Zeiger auf Benutzer Daten. Der Umstieg auf
- <literal>xorg</literal> als standardmäßige X
- Implementierung wurde auch zu dieser Zeit
- durchgeführt.</entry>
- </row>
-
- <row>
- <entry>502124</entry>
- <entry>24.&nbsp;Juli&nbsp;2004</entry>
- <entry>5.2-CURRENT nachdem die Art und Weise, wie rc.d-Skripte
- von Ports und Altlasten gestartet werden, getrennt wurde.</entry>
- </row>
-
- <row>
- <entry>502125</entry>
- <entry>28.&nbsp;Juli&nbsp;2004</entry>
- <entry>5.2-CURRENT nachdem die vorherige Änderung
- rückgängig gemacht wurde.</entry>
- </row>
-
- <row>
- <entry>502126</entry>
- <entry>31.&nbsp;Juli&nbsp;2004</entry>
- <entry>5.2-CURRENT nach dem Entfernen von
- kmem_alloc_pageable() und dem Import von GCC 3.4.2.</entry>
- </row>
-
- <row>
- <entry>502127</entry>
- <entry>2.&nbsp;August&nbsp;2004</entry>
- <entry>5.2-CURRENT nachdem die UMA Kernel API
- geändert wurde, um Konstruktoren und
- Initialisierungsmethoden zu erlauben
- fehlzuschlagen.</entry>
- </row>
-
- <row>
- <entry>502128</entry>
- <entry>8.&nbsp;August&nbsp;2004</entry>
- <entry>5.2-CURRENT nach der Änderung in der vfs_mount
- Signatur sowie allgemeines Ersetzen von PRISON_ROOT durch
- SUSER_ALLOWJAIL in der suser(9) API.</entry>
- </row>
-
- <row>
- <entry>503000</entry>
- <entry>23.&nbsp;August&nbsp;2004</entry>
- <entry>5.3-BETA/RC vor der Änderung der pfil-API.</entry>
- </row>
-
- <row>
- <entry>503001</entry>
- <entry>22.&nbsp;September&nbsp;2004</entry>
- <entry>5.3-RELEASE</entry>
- </row>
-
- <row>
- <entry>503100</entry>
- <entry>16.&nbsp;Oktober&nbsp;2004</entry>
- <entry>5.3-STABLE nach dem Erstellen des RELENG_5_3-Zweiges.</entry>
- </row>
-
- <row>
- <entry>503101</entry>
- <entry>3.&nbsp;Dezember&nbsp;2004</entry>
- <entry>5.3-STABLE nach dem Hinzufügen von
- Fülloptionen im Stile der libc zu
- &man.strftime.3;.</entry>
- </row>
-
- <row>
- <entry>503102</entry>
- <entry>13.&nbsp;Februar&nbsp;2005</entry>
- <entry>5.3-STABLE nachdem OpenBSD's nc(1) von CURRENT
- importiert wurde.</entry>
- </row>
-
- <row>
- <entry>503103</entry>
- <entry>27.&nbsp;Februar&nbsp;2005</entry>
- <entry>5.4-PRERELEASE nach dem Einfliessen der Reparaturen
- aus CURRENT, in
- <filename>&lt;src/include/stdbool.h&gt;</filename> und
- <filename>&lt;src/sys/i386/include/_types.h&gt;</filename>,
- um die GCC-Kompatibilität des Intel C/C++-Compilers
- zu benutzen.</entry>
- </row>
-
- <row>
- <entry>503104</entry>
- <entry>28.&nbsp;Februar&nbsp;2005</entry>
- <entry>5.4-PRERELEASE nach dem Einfliessen der
- Änderung aus CURRENT in ifi_epoch statt der lokalen
- Zeit die Betriebszeit des Systems zu benutzen.</entry>
- </row>
-
- <row>
- <entry>503105</entry>
- <entry>2.&nbsp;März&nbsp;2005</entry>
- <entry>5.4-PRERELEASE nach dem Einfliessen der Reparaturen
- von EOVERFLOW in vswprintf(3) aus CURRENT.</entry>
- </row>
-
- <row>
- <entry>504000</entry>
- <entry>3.&nbsp;April&nbsp;2005</entry>
- <entry>5.4-RELEASE.</entry>
- </row>
-
- <row>
- <entry>504100</entry>
- <entry>3.&nbsp;April&nbsp;2005</entry>
- <entry>5.4-STABLE nach dem Erstellen des
- RELENG_5_4-Zweiges.</entry>
- </row>
-
- <row>
- <entry>504101</entry>
- <entry>11.&nbsp;Mai&nbsp;2005</entry>
- <entry>5.4-STABLE nach dem Vergrößern der
- standardmäßigen Stackgröße für
- Threads.</entry>
- </row>
-
- <row>
- <entry>504102</entry>
- <entry>24.&nbsp;Juni&nbsp;2005</entry>
- <entry>5.4-STABLE nach dem Hinzufügen von sha256.</entry>
- </row>
-
- <row>
- <entry>504103</entry>
- <entry>3.&nbsp;Oktober&nbsp;2005</entry>
- <entry>5.4-STABLE nach dem Einfliessen von if_bridge aus
- CURRENT.</entry>
- </row>
-
- <row>
- <entry>504104</entry>
- <entry>13.&nbsp;November&nbsp;2005</entry>
- <entry>5.4-STABLE nach dem Einfliessen von bsdiff und
- portsnap aus CURRENT.</entry>
- </row>
-
- <row>
- <entry>504105</entry>
- <entry>17.&nbsp;Januar&nbsp;2006</entry>
- <entry>5.4-STABLE nach dem Einfliessen der Änderung
- von ldconfig_local_dirs aus CURRENT.</entry>
- </row>
-
- <row>
- <entry>505000</entry>
- <entry>12.&nbsp;Mai&nbsp;2006</entry>
- <entry>5.5-RELEASE.</entry>
- </row>
-
- <row>
- <entry>505100</entry>
- <entry>12.&nbsp;Mai&nbsp;2006</entry>
- <entry>5.5-STABLE nach dem Erstellen des RELENG_5_5-Zweiges.</entry>
- </row>
-
- <row>
- <entry>600000</entry>
- <entry>18.&nbsp;August&nbsp;2004</entry>
- <entry>6.0-CURRENT</entry>
- </row>
-
- <row>
- <entry>600001</entry>
- <entry>27.&nbsp;August&nbsp;2004</entry>
- <entry>6.0-CURRENT nach der festen Aktivierung von
- PFIL_HOOKS im Kernel.</entry>
- </row>
-
- <row>
- <entry>600002</entry>
- <entry>30.&nbsp;August&nbsp;2004</entry>
- <entry>6.0-CURRENT nach der anfänglichen
- Einführung von ifi_epoch zur Struktur if_data. Wurde
- nach ein paar Tagen wieder rückgängig gemacht.
- Benutzen Sie diesen Wert bitte nicht.</entry>
- </row>
-
- <row>
- <entry>600003</entry>
- <entry>8.&nbsp;September&nbsp;2004</entry>
- <entry>6.0-CURRENT nach dem erneuten Hinzufügen des
- Elements ifi_epoch zur Struktur if_data.</entry>
- </row>
-
- <row>
- <entry>600004</entry>
- <entry>29.&nbsp;September&nbsp;2004</entry>
- <entry>6.0-CURRENT nach dem Hinzufügen der Struktur
- inpcb als Argument in der pfil API.</entry>
- </row>
-
- <row>
- <entry>600005</entry>
- <entry>5.&nbsp;Oktober&nbsp;2004</entry>
- <entry>6.0-CURRENT nach dem Hinzufügen des "-d
- DESTDIR" Schalters zu newsyslog.</entry>
- </row>
-
- <row>
- <entry>600006</entry>
- <entry>4.&nbsp;November&nbsp;2004</entry>
- <entry>6.0-CURRENT nach dem Hinzufügen von
- Fülloptionen im Style der libc zu
- &man.strftime.3;.</entry>
- </row>
-
- <row>
- <entry>600007</entry>
- <entry>12.&nbsp;Dezember&nbsp;2004</entry>
- <entry>6.0-CURRENT nach dem Hinzufügen von 802.11
- Framework Neuerungen.</entry>
- </row>
-
- <row>
- <entry>600008</entry>
- <entry>25.&nbsp;Januar&nbsp;2005</entry>
- <entry>6.0-CURRENT Änderung an den VOP_*VOBJECT()
- Funktionen und Einführung des MNTK_MPSAFE Schalters
- für Dateisysteme, welche ohne Giant arbeiten.</entry>
- </row>
-
- <row>
- <entry>600009</entry>
- <entry>4.&nbsp;Februar&nbsp;2005</entry>
- <entry>6.0-CURRENT nach dem Hinzufügen von cpufreq
- Framework und Treibern.</entry>
- </row>
-
- <row>
- <entry>600010</entry>
- <entry>6.&nbsp;Februar&nbsp;2005</entry>
- <entry>6.0-CURRENT nachdem OpenBSD's nc(1) importiert
- wurde.</entry>
- </row>
-
- <row>
- <entry>600011</entry>
- <entry>12.&nbsp;Februar&nbsp;2005</entry>
- <entry>6.0-CURRENT nachdem der Anschein von
- <literal>matherr()</literal> Unterstützung in SVID2
- entfernt wurde.</entry>
- </row>
-
- <row>
- <entry>600012</entry>
- <entry>15.&nbsp;Februar&nbsp;2005</entry>
- <entry>6.0-CURRENT nach dem Vergrößern der
- standardmäßigen Stackgröße für
- Threads.</entry>
- </row>
-
- <row>
- <entry>600013</entry>
- <entry>19.&nbsp;Februar&nbsp;2005</entry>
- <entry>6.0-CURRENT nach dem Einfliessen der Reparaturen in
- <filename>&lt;src/include/stdbool.h&gt;</filename> und
- <filename>&lt;src/sys/i386/include/_types.h&gt;</filename>,
- um die GCC-Kompatibilität des Intel C/C++-Compilers
- zu benutzen.</entry>
- </row>
-
- <row>
- <entry>600014</entry>
- <entry>21.&nbsp;Februar&nbsp;2005</entry>
- <entry>6.0-CURRENT nachdem die Überprüfungen auf
- EOVERFLOW in vswprintf(3) korrigiert wurden.</entry>
- </row>
-
- <row>
- <entry>600015</entry>
- <entry>25.&nbsp;Februar&nbsp;2005</entry>
- <entry>6.0-CURRENT nach dem Einfliessen der Änderung,
- in ifi_epoch, statt der lokalen Zeit, die Betriebzeit des
- Systems zu benutzen.</entry>
- </row>
-
- <row>
- <entry>600016</entry>
- <entry>26.&nbsp;Februar&nbsp;2005</entry>
- <entry>6.0-CURRENT nachdem das Format von LC_CTYPE auf der
- Festplatte verändert wurde.</entry>
- </row>
-
- <row>
- <entry>600017</entry>
- <entry>27.&nbsp;Februar&nbsp;2005</entry>
- <entry>6.0-CURRENT nachdem das Format der NLS-Kataloge auf
- der Festplatte verändert wurde.</entry>
- </row>
-
- <row>
- <entry>600018</entry>
- <entry>27.&nbsp;Februar&nbsp;2005</entry>
- <entry>6.0-CURRENT nachdem das Format von LC_COLLATE auf
- der Festplatte verändert wurde.</entry>
- </row>
-
- <row>
- <entry>600019</entry>
- <entry>28.&nbsp;Februar&nbsp;2005</entry>
- <entry>Installation der acpica Include-Dateien in
- /usr/include.</entry>
- </row>
-
- <row>
- <entry>600020</entry>
- <entry>9.&nbsp;März&nbsp;2005</entry>
- <entry>Hinzufügen des MSG_NOSIGNAL Schalters zur
- send(2) API.</entry>
- </row>
-
- <row>
- <entry>600021</entry>
- <entry>17.&nbsp;März&nbsp;2005</entry>
- <entry>Hinzufügen von Feldern zu cdevsw</entry>
- </row>
-
- <row>
- <entry>600022</entry>
- <entry>21.&nbsp;März&nbsp;2005</entry>
- <entry>gtar wurde aus dem Basissystem entfernt.</entry>
- </row>
-
- <row>
- <entry>600023</entry>
- <entry>13.&nbsp;April&nbsp;2005</entry>
- <entry>Die Optionen LOCAL_CREDS, LOCAL_CONNWAIT für
- Sockets wurde zu unix(4) hinzugefügt.</entry>
- </row>
-
- <row>
- <entry>600024</entry>
- <entry>19.&nbsp;April&nbsp;2005</entry>
- <entry>&man.hwpmc.4; und zugehörige Werkzeuge wurden
- zu 6.0-CURRENT hinzugefügt.</entry>
- </row>
-
- <row>
- <entry>600025</entry>
- <entry>26.&nbsp;April&nbsp;2005</entry>
- <entry>Die Struktur icmphdr wurden zu 6.0-CURRENT
- hinzugefügt.</entry>
- </row>
-
- <row>
- <entry>600026</entry>
- <entry>3.&nbsp;Mai&nbsp;2005</entry>
- <entry>pf Aktualisierung auf 3.7.</entry>
- </row>
-
- <row>
- <entry>600027</entry>
- <entry>6.&nbsp;Mai&nbsp;2005</entry>
- <entry>Kernel libalias und ng_nat wurden
- eingeführt.</entry>
- </row>
-
- <row>
- <entry>600028</entry>
- <entry>13.&nbsp;Mai&nbsp;2005</entry>
- <entry>POSIX ttyname_r(3) wurde über unistd.h und
- libc zur Verfügung gestellt.</entry>
- </row>
-
- <row>
- <entry>600029</entry>
- <entry>29.&nbsp;Mai&nbsp;2005</entry>
- <entry>6.0-CURRENT nachdem libpcap zu Version v0.9.1 alpha
- 096 aktualisiert wurde.</entry>
- </row>
-
- <row>
- <entry>600030</entry>
- <entry>5.&nbsp;Juni&nbsp;2005</entry>
- <entry>6.0-CURRENT nach dem Import von NetBSDs
- if_bridge(4).</entry>
- </row>
-
- <row>
- <entry>600031</entry>
- <entry>10.&nbsp;Juni&nbsp;2005</entry>
- <entry>6.0-CURRENT nachdem die Struktur ifnet aus dem
- Treiber softcs herausgelöst wurde.</entry>
- </row>
-
- <row>
- <entry>600032</entry>
- <entry>11.&nbsp;Juli&nbsp;2005</entry>
- <entry>6.0-CURRENT nach dem Import von libpcap
- v0.9.1.</entry>
- </row>
-
- <row>
- <entry>600033</entry>
- <entry>25.&nbsp;Juli&nbsp;2005</entry>
- <entry>6.0-STABLE nachdem die Versionen aller gemeinsam
- genutzten Bibliotheken, welche seit RELENG_5 nicht
- geändert wurden, erhöht wurden.</entry>
- </row>
-
- <row>
- <entry>600034</entry>
- <entry>13.&nbsp;August&nbsp;2005</entry>
- <entry>6.0-STABLE nachdem das Argument credential zu der
- dev_clone-Ereignisbehandlung hinzugefügt wurde.
- 6.0-RELEASE.</entry>
- </row>
-
- <row>
- <entry>600100</entry>
- <entry>1.&nbsp;November&nbsp;2005</entry>
- <entry>6.0-STABLE nach dem Erstellen des
- 6.0-RELEASE-Zweiges.</entry>
- </row>
-
- <row>
- <entry>600101</entry>
- <entry>21.&nbsp;Dezember&nbsp;2005</entry>
- <entry>6.0-STABLE nach dem Aufnehmen von Skripten aus den
- local_startup-Verzeichnissen in &man.rcorder.8; des
- Basissystems.</entry>
- </row>
-
- <row>
- <entry>600102</entry>
- <entry>30.&nbsp;Dezember&nbsp;2005</entry>
- <entry>6.0-STABLE nach dem Aktualisieren der ELF-Typen und
- Konstanten.</entry>
- </row>
-
- <row>
- <entry>600103</entry>
- <entry>15.&nbsp;Januar&nbsp;2006</entry>
- <entry>6.0-STABLE nach dem Einfliessen der pidfile(3)-API
- aus CURRENT.</entry>
- </row>
-
- <row>
- <entry>600104</entry>
- <entry>17.&nbsp;Januar&nbsp;2006</entry>
- <entry>6.0-STABLE nach dem Einfliessen der Änderung
- von ldconfig_local_dirs aus CURRENT.</entry>
- </row>
-
- <row>
- <entry>600105</entry>
- <entry>26.&nbsp;Februar&nbsp;2006</entry>
- <entry>6.0-STABLE nach der NLS-Katalogunterstützung
- von csh(1).</entry>
- </row>
-
- <row>
- <entry>601000</entry>
- <entry>6.&nbsp;Mai&nbsp;2006</entry>
- <entry>6.1-RELEASE</entry>
- </row>
-
- <row>
- <entry>601100</entry>
- <entry>6.&nbsp;Mai&nbsp;2006</entry>
- <entry>6.1-STABLE nach 6.1-RELEASE.</entry>
- </row>
-
- <row>
- <entry>601101</entry>
- <entry>22.&nbsp;Juni&nbsp;2006</entry>
- <entry>6.1-STABLE nach dem Import von csup.</entry>
- </row>
-
- <row>
- <entry>601102</entry>
- <entry>11.&nbsp;Juli&nbsp;2006</entry>
- <entry>6.1-STABLE nach der iwi(4)-Aktualisierung.</entry>
- </row>
-
- <row>
- <entry>601103</entry>
- <entry>17.&nbsp;Juli&nbsp;2006</entry>
- <entry>6.1-STABLE nach der Aktualisierung der
- Namensauflösung zu BIND9 und Aufnahme der
- ablaufinvarianten Versionen der netdb-Funktionen.</entry>
- </row>
-
- <row>
- <entry>601104</entry>
- <entry>8.&nbsp;August&nbsp;2006</entry>
- <entry>6.1-STABLE nachdem Unterstützung für DSO
- (dynamic shared objects - gemeinsam genutzte, dynamische
- Objekte) in OpenSSL aktiviert wurde.</entry>
- </row>
-
- <row>
- <entry>601105</entry>
- <entry>2.&nbsp;September&nbsp;2006</entry>
- <entry>6.1-STABLE nachdem 802.11 Reparaturen die API der
- IEEE80211_IOC_STA_INFO ioctl geändert haben.</entry>
- </row>
-
- <row>
- <entry>602000</entry>
- <entry>15.&nbsp;November&nbsp;2006</entry>
- <entry>6.2-RELEASE</entry>
- </row>
-
- <row>
- <entry>602100</entry>
- <entry>15.&nbsp;September&nbsp;2006</entry>
- <entry>6.2-STABLE nach 6.2-RELEASE.</entry>
- </row>
-
- <row>
- <entry>602101</entry>
- <entry>12.&nbsp;Dezember&nbsp;2006</entry>
- <entry>6.2-STABLE nach dem Hinzufügen der Wi-Spy
- Eigenart.</entry>
- </row>
-
- <row>
- <entry>602102</entry>
- <entry>28.&nbsp;Dezember&nbsp;2006</entry>
- <entry>6.2-STABLE nachdem pci_find_extcap() hinzugefügt
- wurde.</entry>
- </row>
-
- <row>
- <entry>602103</entry>
- <entry>16.&nbsp;Januar&nbsp;2007</entry>
- <entry>6.2-STABLE nach dem Einpflegen der dlsym
- Änderung aus CURRENT, ein angefordertes Symbol sowohl
- in der spezifizierten dso, als auch in den impliziten
- Abhängigkeiten nachzuschlagen.</entry>
- </row>
-
- <row>
- <entry>602104</entry>
- <entry>28.&nbsp;Januar&nbsp;2007</entry>
- <entry>6.2-STABLE nach dem Einpflegen von ng_deflate(4)
- und ng_pred1(4) netgraph Knoten und neuen Kompressions-
- und -Verschlüsselungmodi für den ng_ppp(4)
- Knoten aus CURRENT.</entry>
- </row>
-
- <row>
- <entry>602105</entry>
- <entry>20.&nbsp;Februar&nbsp;2007</entry>
- <entry>6.2-STABLE nach dem Einpflegen der BSD lizensierten
- Version von &man.gzip.1;, welche von NetBSD portiert wurde
- aus CURRENT.</entry>
- </row>
-
- <row>
- <entry>602106</entry>
- <entry>31.&nbsp;März&nbsp;2007</entry>
- <entry>6.2-STABLE nach dem Einpflegen der PCI MSI und
- MSI-X Unterstützung aus CURRENT.</entry>
- </row>
-
- <row>
- <entry>602107</entry>
- <entry>6.&nbsp;April&nbsp;2007</entry>
- <entry>6.2-STABLE nach dem Einpflegen von ncurses 5.6 und
- Unterstützung für Multibyte-Zeichen aus
- CURRENT.</entry>
- </row>
-
- <row>
- <entry>602108</entry>
- <entry>11.&nbsp;April&nbsp;2007</entry>
- <entry>6.2-STABLE nach dem Einpflegen des 'SG'
- Peripheriegerätes aus CURRENT in CAM, welches einen
- Teil der SCSI SG passthrough Geräte API von Linux
- enthält.</entry>
- </row>
-
- <row>
- <entry>602109</entry>
- <entry>17.&nbsp;April&nbsp;2007</entry>
- <entry>6.2-STABLE nach dem Einpflegen von readline 5.2
- Patchset 002 aus CURRENT.</entry>
- </row>
-
- <row>
- <entry>602110</entry>
- <entry>2.&nbsp;Mai&nbsp;2007</entry>
- <entry>6.2-STABLE nach dem Einpflegen von
- pmap_invalidate_cache(), pmap_change_attr(),
- pmap_mapbios(), pmap_mapdev_attr(), und pmap_unmapbios()
- für amd64 und i386 aus CURRENT.</entry>
- </row>
-
- <row>
- <entry>602111</entry>
- <entry>11.&nbsp;Juni&nbsp;2007</entry>
- <entry>6.2-STABLE nach dem Einpflegen von BOP_BDFLUSH aus
- CURRENT und dem daraus resultierendem Bruch mit dem
- Dateisystemmodul KBI.</entry>
- </row>
-
- <row>
- <entry>602112</entry>
- <entry>21.&nbsp;September&nbsp;2007</entry>
- <entry>6.2-STABLE nach dem Einpflegen von libutil(3) aus
- CURRENT.</entry>
- </row>
-
- <row>
- <entry>602113</entry>
- <entry>25.&nbsp;Oktober&nbsp;2007</entry>
- <entry>6.2-STABLE, nach der Trennung in "wide und
- single byte ctype". Neu kompilierte Binärdateien,
- die ctype.h referenzieren, erfordern möglicherweise
- ein neues Symbol, __mb_sb_limit, das auf älteren
- Systemen nicht verfügbar ist.</entry>
- </row>
-
- <row>
- <entry>602114</entry>
- <entry>30.&nbsp;Oktober&nbsp;2007</entry>
- <entry>6.2-STABLE, nachdem die ctype
- ABI-Aufwärtskompatibilität wiederhergestellt
- wurde.</entry>
- </row>
-
- <row>
- <entry>602115</entry>
- <entry>21.&nbsp;November&nbsp;2007</entry>
- <entry>FreeBSD 6.2-STABLE nach der Entfernung/Eliminierung
- der wide und single Byte ctype-Trennung</entry>
- </row>
-
- <row>
- <entry>603000</entry>
- <entry>25.&nbsp;November&nbsp;2007</entry>
- <entry>6.3-RELEASE</entry>
- </row>
-
- <row>
- <entry>603100</entry>
- <entry>25.&nbsp;November&nbsp;2007</entry>
- <entry>6.3-STABLE nach 6.3-RELEASE.</entry>
- </row>
-
- <row>
- <entry>603101</entry>
- <entry>7.&nbsp;Dezember&nbsp;2007</entry>
- <entry>6.3-STABLE, nachdem der Support für den
- Multibyte-Datentyp im Bit-Makro gefixt wurde.</entry>
- </row>
-
- <row>
- <entry>603102</entry>
- <entry>24.&nbsp;April&nbsp;2008</entry>
- <entry>6.3-STABLE nach Hinzufügen von l_sysid zu
- struct&nbsp;flock.</entry>
- </row>
-
- <row>
- <entry>603103</entry>
- <entry>27.&nbsp;Mai&nbsp;2008</entry>
- <entry>6.3-STABLE nach Einfließen der
- <function>memrchr</function>-Funktion.</entry>
- </row>
-
- <row>
- <entry>603104</entry>
- <entry>15.&nbsp;Juni&nbsp;2008</entry>
- <entry>6.3-STABLE nach Übernahme der
- Unterstützung von <literal>:u</literal> als
- Variablenwandler in make(1).</entry>
- </row>
-
- <row>
- <entry>604000</entry>
- <entry>4.&nbsp;Oktober&nbsp;2008</entry>
- <entry>6.4-RELEASE</entry>
- </row>
-
- <row>
- <entry>604100</entry>
- <entry>4.&nbsp;Oktober&nbsp;2008</entry>
- <entry>6.4-STABLE nach 6.4-RELEASE.</entry>
- </row>
-
- <row>
- <entry>700000</entry>
- <entry>11.&nbsp;Juli&nbsp;2005</entry>
- <entry>7.0-CURRENT.</entry>
- </row>
-
- <row>
- <entry>700001</entry>
- <entry>23.&nbsp;Juli&nbsp;2005</entry>
- <entry>7.0-CURRENT nachdem die Versionen aller gemeinsam
- genutzten Bibliotheken, welche seit RELENG_5 nicht
- geändert wurden, erhöht wurden.</entry>
- </row>
-
- <row>
- <entry>700002</entry>
- <entry>13.&nbsp;August&nbsp;2005</entry>
- <entry>7.0-CURRENT nachdem ein Berechtigungs-Argument zur
- dev_clone-Ereignisroutine hinzugefügt wurde.</entry>
- </row>
-
- <row>
- <entry>700003</entry>
- <entry>25.&nbsp;August&nbsp;2005</entry>
- <entry>7.0-CURRENT nachdem memmem(3) zur libc
- hinzugefügt wurde.</entry>
- </row>
-
- <row>
- <entry>700004</entry>
- <entry>30.&nbsp;Oktober&nbsp;2005</entry>
- <entry>7.0-CURRENT nachdem die Argumente der
- Kernelfunktion solisten(9) modifiziert wurden, um einen
- Backlog-Parameter (Anzahl der maximalen wartenden
- Verbindungen) zu akzeptieren.</entry>
- </row>
-
- <row>
- <entry>700005</entry>
- <entry>11.&nbsp;November&nbsp;2005</entry>
- <entry>7.0-CURRENT nachdem IFP2ENADDR() geändert
- wurde, einen Zeiger auf IF_LLADDR()
- zurückzugeben.</entry>
- </row>
-
- <row>
- <entry>700006</entry>
- <entry>11.&nbsp;November&nbsp;2005</entry>
- <entry>7.0-CURRENT nach dem Hinzufügen des
- <literal>if_addr</literal>-Elements zur Struktur
- <literal>ifnet</literal> und dem Entfernen von
- IFP2ENADDR().</entry>
- </row>
-
- <row>
- <entry>700007</entry>
- <entry>2.&nbsp;Dezember&nbsp;2005</entry>
- <entry>7.0-CURRENT nach dem Aufnehmen von Skripten aus den
- local_startup Verzeichnissen in &man.rcorder.8; des
- Basissystems.</entry>
- </row>
-
- <row>
- <entry>700008</entry>
- <entry>5.&nbsp;Dezember&nbsp;2005</entry>
- <entry>7.0-CURRENT nach dem Entfernen der MNT_NODEV
- mount-Option.</entry>
- </row>
-
- <row>
- <entry>700009</entry>
- <entry>19.&nbsp;Dezember&nbsp;2005</entry>
- <entry>7.0-CURRENT nach ELF-64 Typen Änderungen und
- Symbol Versionierung.</entry>
- </row>
-
- <row>
- <entry>700010</entry>
- <entry>20.&nbsp;Dezember&nbsp;2005</entry>
- <entry>7.0-CURRENT nach Hinzufügen der hostb und
- vgapci Treiber, Hinzufügen von pci_find_extcap() und
- Änderung der AGP Treiber die Apertur nicht
- länger abzubilden.</entry>
- </row>
-
- <row>
- <entry>700011</entry>
- <entry>31.&nbsp;Dezember&nbsp;2005</entry>
- <entry>7.0-CURRENT nachdem auf allen Plattformen
- außer Alpha tv_sec in time_t umgewandelt
- wurde.</entry>
- </row>
-
- <row>
- <entry>700012</entry>
- <entry>8.&nbsp;Januar&nbsp;2006</entry>
- <entry>7.0-CURRENT nach Änderung von
- ldconfig_local_dirs.</entry>
- </row>
-
- <row>
- <entry>700013</entry>
- <entry>12.&nbsp;Januar&nbsp;2006</entry>
- <entry>7.0-CURRENT nach Änderung in
- <filename>/etc/rc.d/abi</filename> um
- <filename>/compat/linux/etc/ld.so.cache</filename> als
- Symlink in ein schreibgeschütztes Dateisystem zu
- unterstützen.</entry>
- </row>
-
- <row>
- <entry>700014</entry>
- <entry>26.&nbsp;Januar&nbsp;2006</entry>
- <entry>7.0-CURRENT nach pts Import.</entry>
- </row>
-
- <row>
- <entry>700015</entry>
- <entry>26.&nbsp;März&nbsp;2006</entry>
- <entry>7.0-CURRENT nach Einführung von Version 2 der
- &man.hwpmc.4;'s ABI.</entry>
- </row>
-
- <row>
- <entry>700016</entry>
- <entry>22.&nbsp;April&nbsp;2006</entry>
- <entry>7.0-CURRENT nach dem Hinzufügen von
- &man.fcloseall.3; zur libc.</entry>
- </row>
-
- <row>
- <entry>700017</entry>
- <entry>13.&nbsp;Mai&nbsp;2006</entry>
- <entry>7.0-CURRENT nach dem Entfernen von ip6fw.</entry>
- </row>
-
- <row>
- <entry>700018</entry>
- <entry>15.&nbsp;Juli&nbsp;2006</entry>
- <entry>7.0-CURRENT nach dem Import von snd_emu10kx.</entry>
- </row>
-
- <row>
- <entry>700019</entry>
- <entry>29.&nbsp;Juli&nbsp;2006</entry>
- <entry>7.0-CURRENT nach dem Import von OpenSSL
- 0.9.8b.</entry>
- </row>
-
- <row>
- <entry>700020</entry>
- <entry>3.&nbsp;September&nbsp;2006</entry>
- <entry>7.0-CURRENT nach dem Hinzufügen der
- bus_dma_get_tag-Funktion</entry>
- </row>
-
- <row>
- <entry>700021</entry>
- <entry>4.&nbsp;September&nbsp;2006</entry>
- <entry>7.0-CURRENT nach dem Import von libpcap 0.9.4 und
- tcpdump 3.9.4.</entry>
- </row>
-
- <row>
- <entry>700022</entry>
- <entry>9.&nbsp;September&nbsp;2006</entry>
- <entry>7.0-CURRENT nach der dlsym Änderung, ein
- angefordertes Symbol sowohl in der spezifizierten dso, als
- auch in den impliziten Abhängigkeiten
- nachzuschlagen.</entry>
- </row>
-
- <row>
- <entry>700023</entry>
- <entry>23.&nbsp;September&nbsp;2006</entry>
- <entry>7.0-CURRENT nach dem Hinzufügen neuer
- Sound-IOCTLs für die OSSv4-Mixer-API.</entry>
- </row>
-
- <row>
- <entry>700024</entry>
- <entry>28.&nbsp;September&nbsp;2006</entry>
- <entry>7.0-CURRENT nach dem Import von OpenSSL
- 0.9.8d.</entry>
- </row>
-
- <row>
- <entry>700025</entry>
- <entry>11.&nbsp;November&nbsp;2006</entry>
- <entry>7.0-CURRENT nach dem Hinzufügen der
- libelf.</entry>
- </row>
-
- <row>
- <entry>700026</entry>
- <entry>26.&nbsp;November&nbsp;2006</entry>
- <entry>7.0-CURRENT nach größeren
- Änderungen an den Sound sysctls.</entry>
- </row>
-
- <row>
- <entry>700027</entry>
- <entry>30.&nbsp;November&nbsp;2006</entry>
- <entry>7.0-CURRENT nach dem Hinzufügen der
- Wi-Spy-Eigenart.</entry>
- </row>
-
- <row>
- <entry>700028</entry>
- <entry>15.&nbsp;Dezember&nbsp;2006</entry>
- <entry>7.0-CURRENT nach dem Hinzufügen von
- sctp-Aufrufen zur libc.</entry>
- </row>
-
- <row>
- <entry>700029</entry>
- <entry>26.&nbsp;Januar&nbsp;2007</entry>
- <entry>7.0-CURRENT nach dem Ersetzen von GNU &man.gzip.1;
- durch eine von NetBSD portierte Version, die unter
- BSD-Lizenz steht.</entry>
- </row>
-
- <row>
- <entry>700030</entry>
- <entry>7.&nbsp;Februar&nbsp;2007</entry>
- <entry>7.0-CURRENT nach dem Entfernen der IPIP
- Tunnelkapselung (VIFF_TUNNEL) aus dem IPv4
- Multicast-Forwarding-Quelltext.</entry>
- </row>
-
- <row>
- <entry>700031</entry>
- <entry>23.&nbsp;Februar&nbsp;2007</entry>
- <entry>7.0-CURRENT nach den Modifizierungen an
- bus_setup_intr() (newbus).</entry>
- </row>
-
- <row>
- <entry>700032</entry>
- <entry>2.&nbsp;März&nbsp;2007</entry>
- <entry>7.0-CURRENT nach der Aufnahme der Firmware für
- ipw(4) und iwi(4).</entry>
- </row>
-
- <row>
- <entry>700033</entry>
- <entry>9.&nbsp;März&nbsp;2007</entry>
- <entry>7.0-CURRENT nach Unterstützung für
- Multibyte-Zeichen.</entry>
- </row>
-
- <row>
- <entry>700034</entry>
- <entry>19.&nbsp;März&nbsp;2007</entry>
- <entry>7.0-CURRENT nach Änderungen, wie insmntque(),
- getnewvnode() und vfs_hash_insert() arbeiten.</entry>
- </row>
-
- <row>
- <entry>700035</entry>
- <entry>26.&nbsp;März&nbsp;2007</entry>
- <entry>7.0-CURRENT nach Hinzufügen eines
- Benachrichtigungsmechanismus für CPU
- Frequenzänderungen.</entry>
- </row>
-
- <row>
- <entry>700036</entry>
- <entry>6.&nbsp;April&nbsp;2007</entry>
- <entry>7.0-CURRENT nach dem Import des ZFS
- Dateisystemes.</entry>
- </row>
-
- <row>
- <entry>700037</entry>
- <entry>8.&nbsp;April&nbsp;2007</entry>
- <entry>7.0-CURRENT nach dem Einpflegen des 'SG'
- Peripheriegerätes in CAM, welches einen Teil der SCSI
- SG passthrough Geräte API von Linux
- enthält.</entry>
- </row>
-
- <row>
- <entry>700038</entry>
- <entry>30.&nbsp;April&nbsp;2007</entry>
- <entry>7.0-CURRENT nachdem &man.getenv.3;, &man.putenv.3;,
- &man.setenv.3; und &man.unsetenv.3; geändert wurden,
- um POSIX konform zu sein.</entry>
- </row>
-
- <row>
- <entry>700039</entry>
- <entry>1.&nbsp;Mai&nbsp;2007</entry>
- <entry>7.0-CURRENT nachdem die Änderungen von 700038
- rückgängig gemacht wurden.</entry>
- </row>
-
- <row>
- <entry>700040</entry>
- <entry>10.&nbsp;Mai&nbsp;2007</entry>
- <entry>7.0-CURRENT nach dem Hinzufügen von
- &man.flopen.3; zur libutil.</entry>
- </row>
-
- <row>
- <entry>700041</entry>
- <entry>13.&nbsp;Mai&nbsp;2007</entry>
- <entry>7.0-CURRENT nachdem Symbol Versionierung aktiviert
- und die standardmäßige Thread-Bibliothek zu
- libthr geändert wurde.</entry>
- </row>
-
- <row>
- <entry>700042</entry>
- <entry>19.&nbsp;Mai&nbsp;2007</entry>
- <entry>7.0-CURRENT nach dem Import von GCC 4.2.0.</entry>
- </row>
-
- <row>
- <entry>700043</entry>
- <entry>21.&nbsp;Mai&nbsp;2007</entry>
- <entry>7.0-CURRENT nachdem die Versionen aller
- Shared-Libraries, welche seit RELENG_6 nicht geändert
- wurden, erhöht worden sind.</entry>
- </row>
-
- <row>
- <entry>700044</entry>
- <entry>7.&nbsp;Juni&nbsp;2007</entry>
- <entry>7.0-CURRENT nachdem das Argument für
- vn_open()/VOP_OPEN() vom Dateideskriptorindex zur Struktur
- file * geädert wurde.</entry>
- </row>
-
- <row>
- <entry>700045</entry>
- <entry>10.&nbsp;Juni&nbsp;2007</entry>
- <entry>7.0-CURRENT nachdem &man.pam.nologin.8;
- geädert wurde, eine Kontoverwaltungs-Funktion statt
- einer Authentifizierungsfunktion für das
- PAM-Framework zur Verfügung zu stellen.</entry>
- </row>
-
- <row>
- <entry>700046</entry>
- <entry>11.&nbsp;Juni&nbsp;2007</entry>
- <entry>7.0-CURRENT nach aktualisierter 802.11 wireless
- Unterstützung.</entry>
- </row>
-
- <row>
- <entry>700047</entry>
- <entry>11.&nbsp;Juni&nbsp;2007</entry>
- <entry>7.0-CURRENT, nachdem
- TCP-LRO-Schnittstellen-Ressourcen hinzugefügt
- wurden.</entry>
- </row>
-
- <row>
- <entry>700048</entry>
- <entry>12.&nbsp;Juni&nbsp;2007</entry>
- <entry>7.0-CURRENT, nachdem die RFC&nbsp;3678
- API-Unterstützung zum IPv4-Stack hinzugefügt
- wurde. Veraltetes RFC&nbsp;1724-Verhalten
- des IP_MULTICAST_IF ioctl wurde entfernt;
- 0.0.0.0/8 darf nicht länger als Schnittstellen-Index
- benutzt werden. Stattdessen sollte die Struktur ipmreqn
- verwendet werden.</entry>
- </row>
-
- <row>
- <entry>700049</entry>
- <entry>3.&nbsp;Juli&nbsp;2007</entry>
- <entry>7.0-CURRENT, nachdem pf von OpenBSD&nbsp;4.1
- importiert wurde</entry>
- </row>
-
- <row>
- <entry>(nicht geändert)</entry>
- <entry/>
- <entry>7.0-CURRENT, nachdem die IPv6-Unterstützung
- um FAST_IPSEC erweitert, KAME IPSEC entfernt und
- FAST_IPSEC in IPSEC umbenannt wurde.</entry>
- </row>
-
- <row>
- <entry>700050</entry>
- <entry>4.&nbsp;Juli&nbsp;2007</entry>
- <entry>7.0-CURRENT, nachdem Aufrufe von
- setenv/putenv/usw. von der traditionellen
- BSD-Art und Weise nach POSIX konvertiert
- wurden.</entry>
- </row>
-
- <row>
- <entry>700051</entry>
- <entry>4.&nbsp;Juli&nbsp;2007</entry>
- <entry>7.0-CURRENT, nachdem neue Systemaufrufe
- (mmap/lseek/usw.) implementiert wurden.</entry>
- </row>
-
- <row>
- <entry>700052</entry>
- <entry>6.&nbsp;Juli&nbsp;2007</entry>
- <entry>7.0-CURRENT, nachdem die I4B-Header nach
- include/i4b verschoben wurden.</entry>
- </row>
-
- <row>
- <entry>700053</entry>
- <entry>30.&nbsp;September&nbsp;2007</entry>
- <entry>7.0-CURRENT, nachdem die Unterstützung
- für PCI Domänen hinzugefügt
- wurde.</entry>
- </row>
-
- <row>
- <entry>700054</entry>
- <entry>25.&nbsp;Oktober&nbsp;2007</entry>
- <entry>7.0-CURRENT, nach der Trennung in "wide und
- single byte ctype".</entry>
- </row>
-
- <row>
- <entry>700055</entry>
- <entry>28.&nbsp;Oktober&nbsp;2007</entry>
- <entry>7.0-RELEASE sowie 7.0-CURRENT, nachdem die
- ABI-Abwärtskompatibilität für die
- FreeBSD 4/5/6-Versionen der PCIOCGETCONF-, PCIOCREAD-
- sowie PCIOCWRITE IOCTLs hinzugefügt wurde. Damit
- verbunden war, dass die ABI der PCIOCGETCONF IOCTL
- erneut deaktiviert werden musste.</entry>
- </row>
-
- <row>
- <entry>700100</entry>
- <entry>22.&nbsp;Dezember&nbsp;2007</entry>
- <entry>7.0-STABLE nach 7.0-RELEASE.</entry>
- </row>
-
- <row>
- <entry>700101</entry>
- <entry>8.&nbsp;Februar&nbsp;2008</entry>
- <entry>7.0-STABLE nach Einführung von
- m_collapse().</entry>
- </row>
-
- <row>
- <entry>700102</entry>
- <entry>30.&nbsp;März&nbsp;2008</entry>
- <entry>7.0-STABLE nach Einfließen von
- kdb_enter_why().</entry>
- </row>
-
- <row>
- <entry>700103</entry>
- <entry>10.&nbsp;April&nbsp;2008</entry>
- <entry>7.0-STABLE nach Hinzufügen von l_sysid zu
- struct&nbsp;flock.</entry>
- </row>
-
- <row>
- <entry>700104</entry>
- <entry>11.&nbsp;April&nbsp;2008</entry>
- <entry>7.0-STABLE nach Übernahme von
- procstat(1).</entry>
- </row>
-
- <row>
- <entry>700105</entry>
- <entry>11.&nbsp;April&nbsp;2008</entry>
- <entry>7.0-STABLE nach Einführung von
- umtx-Features.</entry>
- </row>
-
- <row>
- <entry>700106</entry>
- <entry>15.&nbsp;April&nbsp;2008</entry>
- <entry>7.0-STABLE nach Hinzufügen der
- Unterstützung von &man.write.2; zu
- &man.psm.4;.</entry>
- </row>
-
- <row>
- <entry>700107</entry>
- <entry>20.&nbsp;April&nbsp;2008</entry>
- <entry>7.0-STABLE nach Hinzufügen des Befehls
- F_DUP2FD zu &man.fcntl.2;.</entry>
- </row>
-
- <row>
- <entry>700108</entry>
- <entry>5.&nbsp;Mai&nbsp;2008</entry>
- <entry>7.0-STABLE nach einigen Änderungen an
- &man.lockmgr.9;, welche die Einbindung von
- <filename>sys/lock.h</filename> zur Verwendung von
- &man.lockmgr.9; voraussetzen.</entry>
- </row>
-
- <row>
- <entry>700109</entry>
- <entry>27.&nbsp;Mai&nbsp;2008</entry>
- <entry>7.0-STABLE nach Einfließen der
- <function>memrchr</function>-Funktion.</entry>
- </row>
-
- <row>
- <entry>700110</entry>
- <entry>5.&nbsp;August&nbsp;2008</entry>
- <entry>7.0-STABLE nach Einführung eines Clients
- für den Kernel&nbsp;NFS&nbsp;lockd.</entry>
- </row>
-
- <row>
- <entry>700111</entry>
- <entry>20.&nbsp;August&nbsp;2008</entry>
- <entry>7.0-STABLE nach Hinzufügen einer
- Unterstützung von physisch fortlaufender
- Jumbo&nbsp;Frames.</entry>
- </row>
-
- <row>
- <entry>700112</entry>
- <entry>27.&nbsp;August&nbsp;2008</entry>
- <entry>7.0-STABLE nach Einfließen einer
- Kernelunterstützung für DTrace.</entry>
- </row>
-
- <row>
- <entry>701000</entry>
- <entry>25.&nbsp;November&nbsp;2008</entry>
- <entry>7.1-RELEASE</entry>
- </row>
-
- <row>
- <entry>701100</entry>
- <entry>25.&nbsp;November&nbsp;2008</entry>
- <entry>7.1-STABLE nach 7.1-RELEASE.</entry>
- </row>
-
- <row>
- <entry>701101</entry>
- <entry>10.&nbsp;Januar&nbsp;2009</entry>
- <entry>7.1-STABLE nach Übernahme von
- <function>strndup</function>.</entry>
- </row>
-
- <row>
- <entry>701102</entry>
- <entry>17.&nbsp;Januar&nbsp;2009</entry>
- <entry>7.1-STABLE nach Hinzufügen einer
- Unterstützung von cpuctl(4).</entry>
- </row>
-
- <row>
- <entry>701103</entry>
- <entry>7.&nbsp;Februar&nbsp;2009</entry>
- <entry>7.1-STABLE nach Einfließen der
- Unterstützung von Jails mit keinen oder mehreren
- IPv4-/IPv6-Adressen.</entry>
- </row>
-
- <row>
- <entry>701104</entry>
- <entry>14.&nbsp;Februar&nbsp;2009</entry>
- <entry>7.1-STABLE, nachdem der Besitzer des Suspend in
- struct mount gespeichert wird und die Funktion
- vfs_susp_clean in struct vfsops aufgenommen
- ist.</entry>
- </row>
-
- <row>
- <entry>701105</entry>
- <entry>12.&nbsp;März&nbsp;2009</entry>
- <entry>7.1-STABLE nach der inkompatiblen Änderung
- am sysctl kern.ipc.shmsegs, um die Anforderung
- größerer Segmente von gemeinsam genutzten
- SysV-Speicher auf 64bit-Architekturen zu
- erlauben.</entry>
- </row>
-
- <row>
- <entry>701106</entry>
- <entry>14.&nbsp;März&nbsp;2009</entry>
- <entry>7.1-STABLE nach der Übernahme einer
- Fehlerbehebung für Warteoperationen, die
- POSIX-Semaphore verwenden.</entry>
- </row>
-
- <row>
- <entry>702000</entry>
- <entry>15.&nbsp;April&nbsp;2009</entry>
- <entry>7.2-RELEASE</entry>
- </row>
-
- <row>
- <entry>702100</entry>
- <entry>15.&nbsp;April&nbsp;2009</entry>
- <entry>7.2-STABLE nach 7.2-RELEASE.</entry>
- </row>
-
- <row>
- <entry>702101</entry>
- <entry>15.&nbsp;Mai&nbsp;2009</entry>
- <entry>7.2-STABLE, nachdem ichsmb(4) dahingehend
- geändert wurde, dass es links-ausgerichtete
- Adressierung von Slaves verwendet, um anderen
- SMBus-Kontrollertreibern zu entsprechen.</entry>
- </row>
-
- <row>
- <entry>702102</entry>
- <entry>28.&nbsp;Mai&nbsp;2009</entry>
- <entry>7.2-STABLE nach dem Einfließen der Funktion
- <function>fdopendir</function>.</entry>
- </row>
-
- <row>
- <entry>702103</entry>
- <entry>06.&nbsp;Juni&nbsp;2009</entry>
- <entry>7.2-STABLE nach dem Einfließen von PmcTools.</entry>
- </row>
-
- <row>
- <entry>702104</entry>
- <entry>14.&nbsp;Juli&nbsp;2009</entry>
- <entry>7.2-STABLE nach dem Einfließen des
- Systemaufrufs <function>closefrom</function>.</entry>
- </row>
-
- <row>
- <entry>702105</entry>
- <entry>31.&nbsp;Juli&nbsp;2009</entry>
- <entry>7.2-STABLE nach dem Einfließen der
- Änderung an der SYSVIPC-ABI.</entry>
- </row>
-
- <row>
- <entry>702106</entry>
- <entry>14.&nbsp;September&nbsp;2009</entry>
- <entry>7.2-STABLE nach dem Einfließen der
- PAT-Verbesserungen für x86-Prozessoren sowie dem
- Hinzufügen von d_mmap_single() und des
- VM-Objekttyps für scatter/gather-Listen.</entry>
- </row>
-
- <row>
- <entry>703000</entry>
- <entry>9.&nbsp;Februar&nbsp;2010</entry>
- <entry>7.3-RELEASE</entry>
- </row>
-
- <row>
- <entry>703100</entry>
- <entry>9.&nbsp;Februar&nbsp;2010</entry>
- <entry>7.3-STABLE nach 7.3-RELEASE.</entry>
- </row>
-
- <row>
- <entry>704000</entry>
- <entry>22.&nbsp;Dezember&nbsp;2010</entry>
- <entry>7.4-RELEASE</entry>
- </row>
-
- <row>
- <entry>704100</entry>
- <entry>22.&nbsp;Dezember&nbsp;2010</entry>
- <entry>7.4-STABLE, nachdem 7.4-RELEASE erzeugt
- wurde.</entry>
- </row>
-
- <row>
- <entry>800000</entry>
- <entry>11.&nbsp;Oktober&nbsp;2007</entry>
- <entry>8.0-CURRENT. Nach der Trennung in "wide und
- single byte ctype".</entry>
- </row>
-
- <row>
- <entry>800001</entry>
- <entry>16.&nbsp;Oktober&nbsp;2007</entry>
- <entry>8.0-CURRENT, nachdem libpcap 0.9.8 und
- tcpdump 3.9.8 importiert wurden.</entry>
- </row>
-
- <row>
- <entry>800002</entry>
- <entry>21.&nbsp;Oktober&nbsp;2007</entry>
- <entry>8.0-CURRENT, nachdem kthread_create() und
- Konsorten in kproc_create() usw. umbenannt
- wurden.</entry>
- </row>
-
- <row>
- <entry>800003</entry>
- <entry>24.&nbsp;Oktober&nbsp;2007</entry>
- <entry>8.0-CURRENT, nachdem die
- ABI-Abwärtskompatibilität für die
- FreeBSD 4/5/6-Versionen der PCIOCGETCONF-, PCIOCREAD-
- sowie PCIOCWRITE IOCTLs hinzugefügt wurde. Damit
- verbunden war, dass die ABI der PCIOCGETCONF IOCTL
- erneut deaktiviert werden musste.</entry>
- </row>
-
- <row>
- <entry>800004</entry>
- <entry>12.&nbsp;November&nbsp;2007</entry>
- <entry>8.0-CURRENT, nachdem der agp(4) Treiber verschoben
- wurde von src/sys/pci nach src/sys/dev/agp.</entry>
- </row>
-
- <row>
- <entry>800005</entry>
- <entry>4.&nbsp;Dezember&nbsp;2007</entry>
- <entry>8.0-CURRENT nach <link xlink:href="http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/kern/kern_mbuf.c#rev1.35">Änderungen
- am Jumbo&nbsp;Frame&nbsp;Allocator</link>.</entry>
- </row>
-
- <row>
- <entry>800006</entry>
- <entry>7.&nbsp;Dezember&nbsp;2007</entry>
- <entry>8.0-CURRENT, nach dem Hinzufügen der
- callgraph capture Funktionalität zu &man.hwpmc.4;.</entry>
- </row>
-
- <row>
- <entry>800007</entry>
- <entry>25.&nbsp;Dezember&nbsp;2007</entry>
- <entry>8.0-CURRENT nach dem Hinzufügen von "why"
- als Argument in kdb_enter().</entry>
- </row>
-
- <row>
- <entry>800008</entry>
- <entry>28.&nbsp;Dezember&nbsp;2007</entry>
- <entry>8.0-CURRENT nach Entfernen der Option
- LK_EXCLUPGRADE.</entry>
- </row>
-
- <row>
- <entry>800009</entry>
- <entry>9.&nbsp;Januar&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Einführung von
- &man.lockmgr.disown.9;</entry>
- </row>
-
- <row>
- <entry>800010</entry>
- <entry>10.&nbsp;Januar&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Änderungen am
- &man.vn.lock.9;-Prototyp.</entry>
- </row>
-
- <row>
- <entry>800011</entry>
- <entry>13.&nbsp;Januar&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Änderungen an den
- Prototypen von &man.VOP.LOCK.9; und
- &man.VOP.UNLOCK.9;.</entry>
- </row>
-
- <row>
- <entry>800012</entry>
- <entry>19.&nbsp;Januar&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Einführung von
- &man.lockmgr.recursed.9;, &man.BUF.RECURSED.9; und
- &man.BUF.ISLOCKED.9; sowie Entfernung von
- <function>BUF_REFCNT()</function>.</entry>
- </row>
-
- <row>
- <entry>800013</entry>
- <entry>23.&nbsp;Januar&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Einführung der
- <quote>ASCII</quote>-Kodierung.</entry>
- </row>
-
- <row>
- <entry>800014</entry>
- <entry>24.&nbsp;Januar&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Änderungen am
- &man.lockmgr.9;-Prototyp und Entfernung von
- <function>lockcount()</function> sowie
- <function>LOCKMGR_ASSERT()</function>.</entry>
- </row>
-
- <row>
- <entry>800015</entry>
- <entry>26.&nbsp;Januar&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Erweiterung der Datentypen der
- &man.fts.3;-Strukturen.</entry>
- </row>
-
- <row>
- <entry>800016</entry>
- <entry>1.&nbsp;Februar&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Hinzufügen eines neuen
- Parameters zu MEXTADD(9).</entry>
- </row>
-
- <row>
- <entry>800017</entry>
- <entry>6.&nbsp;Februar&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Einführung der Optionen
- LK_NODUP und LK_NOWITNESS in die
- &man.lockmgr.9;-Umgebung.</entry>
- </row>
-
- <row>
- <entry>800018</entry>
- <entry>8.&nbsp;Februar&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Hinzufügen von
- m_collapse.</entry>
- </row>
-
- <row>
- <entry>800019</entry>
- <entry>9.&nbsp;Februar&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Hinzufügen einer Arbeits-,
- Wurzel- und Jailverzeichnisunterstützung zur
- sysctl-Variable kern.proc.filedesc.</entry>
- </row>
-
- <row>
- <entry>800020</entry>
- <entry>13.&nbsp;Februar&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Einführung der Funktionen
- &man.lockmgr.assert.9; und
- <function>BUF_ASSERT</function>.</entry>
- </row>
-
- <row>
- <entry>800021</entry>
- <entry>15.&nbsp;Februar&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Einführung von
- &man.lockmgr.args.9; und Entfernung der Option
- LK_INTERNAL.</entry>
- </row>
-
- <row>
- <entry>800022</entry>
- <entry>(zurückgezogen)</entry>
- <entry>8.0-CURRENT nach Setzen von BSD&nbsp;&man.ar.1;
- als Systemstandard.</entry>
- </row>
-
- <row>
- <entry>800023</entry>
- <entry>25.&nbsp;Februar&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Prototypenänderungen an
- &man.lockstatus.9; und &man.VOP.ISLOCKED.9;, eigens zur
- Abschaffung des Parameters
- <literal>struct&nbsp;thread</literal>.</entry>
- </row>
-
- <row>
- <entry>800024</entry>
- <entry>1.&nbsp;März&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Beseitigung der Funktionen
- <function>lockwaiters</function> und
- <function>BUF_LOCKWAITERS</function>, Änderung
- des Rückgabewerts der Funktion
- <function>brelvp</function> von void nach int sowie
- Einführung neuer Optionen für
- &man.lockinit.9;.</entry>
- </row>
-
- <row>
- <entry>800025</entry>
- <entry>8.&nbsp;März&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Hinzufügen des Kommandos
- F_DUP2FD zu &man.fcntl.2;.</entry>
- </row>
-
- <row>
- <entry>800026</entry>
- <entry>12.&nbsp;März&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Änderung des Parameters
- für die Priorität an cv_broadcastpri, sodass
- 0 für keine Priorität steht.</entry>
- </row>
-
- <row>
- <entry>800027</entry>
- <entry>24.&nbsp;März&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Änderung der
- Monitoring&nbsp;ABI von BPF, als Zero-Copy&nbsp;Puffer
- hinzugefügt wurden.</entry>
- </row>
-
- <row>
- <entry>800028</entry>
- <entry>26.&nbsp;März&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Hinzufügen von l_sysid zu
- struct&nbsp;flock.</entry>
- </row>
-
- <row>
- <entry>800029</entry>
- <entry>28.&nbsp;März&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Wiedereingliederung der Funktion
- <function>BUF_LOCKWAITERS</function> und
- Hinzufügen von &man.lockmgr.waiters.9;.</entry>
- </row>
-
- <row>
- <entry>800030</entry>
- <entry>1.&nbsp;April&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Einführung der Funktionen
- &man.rw.try.rlock.9; und &man.rw.try.wlock.9;.</entry>
- </row>
-
- <row>
- <entry>800031</entry>
- <entry>6.&nbsp;April&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Einführung der Funktionen
- <function>lockmgr_rw</function> und
- <function>lockmgr_args_rw</function>.</entry>
- </row>
-
- <row>
- <entry>800032</entry>
- <entry>8.&nbsp;April&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Implementierung des
- Systemaufrufs openat und seiner Verwandten,
- Einführung der Option O_EXEC in &man.open.2; und
- Bereitstellung der entsprechenden Systemaufrufe
- innerhalb der
- &linux;-Kompatibilitätsumgebung.</entry>
- </row>
-
- <row>
- <entry>800033</entry>
- <entry>8.&nbsp;April&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Hinzufügen der
- Unterstützung von &man.write.2; in der nativen
- Operationsebene von &man.psm.4;. Es können nun
- beliebig Kommandos nach
- <filename>/dev/psm%d</filename> geschrieben und
- der Status dann von dort gelesen werden.</entry>
- </row>
-
- <row>
- <entry>800034</entry>
- <entry>10.&nbsp;April&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Einführung der Funktion
- <function>memrchr</function>.</entry>
- </row>
-
- <row>
- <entry>800035</entry>
- <entry>16.&nbsp;April&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Einführung der Funktion
- <function>fdopendir</function>.</entry>
- </row>
-
- <row>
- <entry>800036</entry>
- <entry>20.&nbsp;April&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Umstellung des Standards 802.11
- auf Unterstützung von Multi-BSS (auch
- vaps).</entry>
- </row>
-
- <row>
- <entry>800037</entry>
- <entry>9.&nbsp;Mai&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Hinzufügen einer
- Unterstützung für
- Multi&nbsp;Routing-Tabellen (siehe setfib(1),
- setfib(2)).</entry>
- </row>
-
- <row>
- <entry>800038</entry>
- <entry>26.&nbsp;Mai&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Entfernen von netatm und
- ISDN4BSD sowie dem Hinzufügen der
- Compact C Type (CTF)-Tools.</entry>
- </row>
-
- <row>
- <entry>800039</entry>
- <entry>14.&nbsp;Juni&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Entfernen von sgtty.</entry>
- </row>
-
- <row>
- <entry>800040</entry>
- <entry>26.&nbsp;Juni&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Einführung eines Clients
- für den Kernel&nbsp;NFS&nbsp;lockd.</entry>
- </row>
-
- <row>
- <entry>800041</entry>
- <entry>22.&nbsp;Juli&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Hinzufügen von
- arc4random_buf(3) und arc4random_uniform(3).</entry>
- </row>
-
- <row>
- <entry>800042</entry>
- <entry>8.&nbsp;August&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Hinzufügen von
- cpuctl(4).</entry>
- </row>
-
- <row>
- <entry>800043</entry>
- <entry>13.&nbsp;August&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Änderung von bpf(4) zur
- Verwendung einer einzelnen Gerätedatei anstatt
- von Klonierung.</entry>
- </row>
-
- <row>
- <entry>800044</entry>
- <entry>17.&nbsp;August&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Übernahme des ersten Teils
- aus dem vimage-Projekt durch Erweitern globaler
- Variablen um den Präfix V_. Zukünftig werden
- die virtualisierten Variablen dann mit Hilfe von
- Makros in ihre globalen Namen aufgelöst.</entry>
- </row>
-
- <row>
- <entry>800045</entry>
- <entry>20.&nbsp;August&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Eingliederung des
- MPSAFE&nbsp;TTY-Layers, einschließlich
- Änderungen an diversen Treibern und Werkzeugen,
- die mit ihm kommunizieren.</entry>
- </row>
-
- <row>
- <entry>800046</entry>
- <entry>8.&nbsp;September&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Abschottung der GDT pro CPU auf
- der AMD64-Architektur.</entry>
- </row>
-
- <row>
- <entry>800047</entry>
- <entry>10.&nbsp;September&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Entfernen von VSVTX, VSGID und
- VSUID.</entry>
- </row>
-
- <row>
- <entry>800048</entry>
- <entry>16.&nbsp;September&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Anpassung des Codes für
- Kernel&nbsp;NFS&nbsp;mount, sodass einzelne
- Mountoptionen im Parameter struct&nbsp;iovec an
- nmount() akzeptiert werden und nicht nur ein
- großes struct&nbsp;nfs_args.</entry>
- </row>
-
- <row>
- <entry>800049</entry>
- <entry>17.&nbsp;September&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Entfernen von &man.suser.9; und
- &man.suser.cred.9;.</entry>
- </row>
-
- <row>
- <entry>800050</entry>
- <entry>20.&nbsp;Oktober&nbsp;2008</entry>
- <entry>8.0-CURRENT nach API-Änderungen im Umgang
- mit dem Buffer&nbsp;Cache.</entry>
- </row>
-
- <row>
- <entry>800051</entry>
- <entry>23.&nbsp;Oktober&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Entfernen der Makros
- &man.MALLOC.9; und &man.FREE.9;.</entry>
- </row>
-
- <row>
- <entry>800052</entry>
- <entry>28.&nbsp;Oktober&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Einführung von accmode_t
- und Umbennung des Parameters a_mode an VOP_ACCESS nach
- a_accmode.</entry>
- </row>
-
- <row>
- <entry>800053</entry>
- <entry>2.&nbsp;November&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Änderung des Prototyps von
- &man.vfs.busy.9; und Einführung der Optionen
- MBF_NOWAIT sowie MBF_MNTLSTLOCK.</entry>
- </row>
-
- <row>
- <entry>800054</entry>
- <entry>22.&nbsp;November&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Hinzufügen von Funktionen
- im Bereich buf_ring, Memory&nbsp;Barriers und ifnet,
- um mehrere Sendeschlangen auf Hardwareebene für
- Karten zu ermöglichen, die dies
- unterstützen, sowie einer
- Ring&nbsp;Buffer-Implementierung ohne Lock, um
- Treibern zu ermöglichen, Paketschlangen
- effizienter zu verwalten.</entry>
- </row>
-
- <row>
- <entry>800055</entry>
- <entry>27.&nbsp;November&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Hinzufügen einer
- Unterstützung für &intel;&nbsp;Core, Core2
- und Atom zu &man.hwpmc.4;.</entry>
- </row>
-
- <row>
- <entry>800056</entry>
- <entry>29.&nbsp;November&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Einführung von Jails mit
- mehreren oder gar keinen IPv4-/IPv6-Adressen.</entry>
- </row>
-
- <row>
- <entry>800057</entry>
- <entry>1.&nbsp;Dezember&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Wechsel zum
- ath_hal&nbsp;Quellcode.</entry>
- </row>
-
- <row>
- <entry>800058</entry>
- <entry>12.&nbsp;Dezember&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Einführung der Funktion
- VOP_VPTOCNP.</entry>
- </row>
-
- <row>
- <entry>800059</entry>
- <entry>15.&nbsp;Dezember&nbsp;2008</entry>
- <entry>8.0-CURRENT gliedert das neue ARPv2 ein.</entry>
- </row>
-
- <row>
- <entry>800060</entry>
- <entry>19.&nbsp;Dezember&nbsp;2008</entry>
- <entry>8.0-CURRENT nach Hinzufügen von
- makefs.</entry>
- </row>
-
- <row>
- <entry>800061</entry>
- <entry>15.&nbsp;Januar&nbsp;2009</entry>
- <entry>8.0-CURRENT nach Umsetzung von
- TCP&nbsp;Appropriate&nbsp;Byte&nbsp;Counting.</entry>
- </row>
-
- <row>
- <entry>800062</entry>
- <entry>28.&nbsp;Januar&nbsp;2009</entry>
- <entry>8.0-CURRENT nach Entfernen von minor(),
- minor2unit(), unit2minor() usw.</entry>
- </row>
-
- <row>
- <entry>800063</entry>
- <entry>18.&nbsp;Februar&nbsp;2009</entry>
- <entry>8.0-CURRENT nach Änderung der
- GENERIC-Konfiguration zur Verwendung des
- USB2-Stack und Hinzufügen von fdevname(3).</entry>
- </row>
-
- <row>
- <entry>800064</entry>
- <entry>23.&nbsp;Februar&nbsp;2009</entry>
- <entry>8.0-CURRENT, nachdem der USB2-Stack nach dev/usb
- verschoben wurde, um es zu ersetzen.</entry>
- </row>
-
- <row>
- <entry>800065</entry>
- <entry>26.&nbsp;Februar&nbsp;2009</entry>
- <entry>8.0-CURRENT nach Umbenennen aller Funktionen in
- libmp(3).</entry>
- </row>
-
- <row>
- <entry>800066</entry>
- <entry>27.&nbsp;Februar&nbsp;2009</entry>
- <entry>8.0-CURRENT nach Anpassung des devfs-Verhaltens
- im Zusammenhang mit USB.</entry>
- </row>
-
- <row>
- <entry>800067</entry>
- <entry>28.&nbsp;Februar&nbsp;2009</entry>
- <entry>8.0-CURRENT nach Hinzufügen von getdelim(),
- getline(), stpncpy(), strnlen(), wcsnlen(),
- wcscasecmp() und wcsncasecmp().</entry>
- </row>
-
- <row>
- <entry>800068</entry>
- <entry>2.&nbsp;März&nbsp;2009</entry>
- <entry>8.0-CURRENT nach Umbenennen der Geräteklasse
- ushub in uhub.</entry>
- </row>
-
- <row>
- <entry>800069</entry>
- <entry>9.&nbsp;März&nbsp;2009</entry>
- <entry>8.0-CURRENT nach Umbenennen von libusb20.so.1 in
- libusb.so.1.</entry>
- </row>
-
- <row>
- <entry>800070</entry>
- <entry>9.&nbsp;März&nbsp;2009</entry>
- <entry>8.0-CURRENT nach der Einführung von IGMPv3
- und Source-Specific-Multicast&nbsp;(SSM) in den
- IPv4-Stack.</entry>
- </row>
-
- <row>
- <entry>800071</entry>
- <entry>14.&nbsp;März&nbsp;2009</entry>
- <entry>8.0-CURRENT nach der Anpassung von gcc zur
- Verwendung der C99-Inline-Semantik in den Modi c99 und
- gnu99.</entry>
- </row>
-
- <row>
- <entry>800072</entry>
- <entry>15.&nbsp;März&nbsp;2009</entry>
- <entry>8.0-CURRENT, nachdem die Option IFF_NEEDSGIANT
- entfernt wurde; Netzwerktreiber, die nicht MPSAFE
- sind, werden nicht mehr unterstützt.</entry>
- </row>
-
- <row>
- <entry>800073</entry>
- <entry>18.&nbsp;März&nbsp;2009</entry>
- <entry>8.0-CURRENT, nachdem die dynamische Ersetzung von
- Zeichenkettenkürzeln für rpath und
- benötigte Pfade implementiert wurde.</entry>
- </row>
-
- <row>
- <entry>800074</entry>
- <entry>24.&nbsp;März&nbsp;2009</entry>
- <entry>8.0-CURRENT nach dem Einfließen von
- tcpdump&nbsp;4.0.0 und libpcap&nbsp;1.0.0.</entry>
- </row>
-
- <row>
- <entry>800075</entry>
- <entry>6.&nbsp;April&nbsp;2009</entry>
- <entry>8.0-CURRENT, nachdem die Deklarationen von
- struct&nbsp;vnet_net, struct&nbsp;vnet_inet und
- struct&nbsp;vnet_ipfw geändert wurden.</entry>
- </row>
-
- <row>
- <entry>800076</entry>
- <entry>9.&nbsp;April&nbsp;2009</entry>
- <entry>8.0-CURRENT nach dem Hinzufügen von
- Laufzeitprofilen in dummynet.</entry>
- </row>
-
- <row>
- <entry>800077</entry>
- <entry>14.&nbsp;April&nbsp;2009</entry>
- <entry>8.0-CURRENT nach dem Entfernen von VOP_LEASE()
- und vop_vector.vop_lease.</entry>
- </row>
-
- <row>
- <entry>800078</entry>
- <entry>15.&nbsp;April&nbsp;2009</entry>
- <entry>8.0-CURRENT, nachdem die Felder aus
- struct&nbsp;rt_weight zu struct&nbsp;rt_metrics und
- struct&nbsp;rt_metrics_lite hinzugefügt wurden,
- wobei die Deklaration von struct&nbsp;rt_metrics_lite
- geändert wurde. RTM_VERSION wurde
- hochgezählt (zurückgezogen).</entry>
- </row>
-
- <row>
- <entry>800079</entry>
- <entry>15.&nbsp;April&nbsp;2009</entry>
- <entry>8.0-CURRENT, nachdem Pointer auf
- struct&nbsp;llentry zu struct&nbsp;route und
- struct&nbsp;route_in6 hinzugefügt wurden.</entry>
- </row>
-
- <row>
- <entry>800080</entry>
- <entry>15.&nbsp;April&nbsp;2009</entry>
- <entry>8.0-CURRENT nach Änderung der Deklaration
- von struct&nbsp;inpcb.</entry>
- </row>
-
- <row>
- <entry>800081</entry>
- <entry>19.&nbsp;April&nbsp;2009</entry>
- <entry>8.0-CURRENT nach Änderung der Deklaration
- von struct&nbsp;malloc_type.</entry>
- </row>
-
- <row>
- <entry>800082</entry>
- <entry>21.&nbsp;April&nbsp;2009</entry>
- <entry>8.0-CURRENT nach Änderung der Deklaration
- von struct&nbsp;ifnet und Hinzufügen von if_ref()
- und if_rele() zur Verwaltung von Referenzen auf
- ifnet.</entry>
- </row>
-
- <row>
- <entry>800083</entry>
- <entry>22.&nbsp;April&nbsp;2009</entry>
- <entry>8.0-CURRENT nach der Implementierung einer
- systemnahen Bluetooth-HCI-API.</entry>
- </row>
-
- <row>
- <entry>800084</entry>
- <entry>29.&nbsp;April&nbsp;2009</entry>
- <entry>8.0-CURRENT nach Änderungen an IPv6-SSM und
- MLDv2.</entry>
- </row>
-
- <row>
- <entry>800085</entry>
- <entry>30.&nbsp;April&nbsp;2009</entry>
- <entry>8.0-CURRENT, nachdem der Bau von VIMAGE-Kernel
- mit einem aktiven Image unterstützt wird.</entry>
- </row>
-
- <row>
- <entry>800086</entry>
- <entry>8.&nbsp;Mai&nbsp;2009</entry>
- <entry>8.0-CURRENT nach Hinzufügen der
- Unterstützung für Eingabezeilen mit
- beliebiger Länge durch patch(1).</entry>
- </row>
-
- <row>
- <entry>800087</entry>
- <entry>11.&nbsp;Mai&nbsp;2009</entry>
- <entry>8.0-CURRENT nach einigen Änderungen im
- Zusammenhang mit dem VFS-KPI. Der Thread-Parameter
- wurde von den FSD-Teilen des VFS entfernt.
- <function>VFS_*</function>-Funktionen benötigen
- den Kontext nicht mehr, da er sich immer auf
- <varname>curthread</varname> bezieht. In wenigen
- Sonderfällen ist das bisherige Verhalten nicht
- geändert worden.</entry>
- </row>
-
- <row>
- <entry>800088</entry>
- <entry>20.&nbsp;Mai&nbsp;2009</entry>
- <entry>8.0-CURRENT nach Änderungen am
- net80211-Monitormodus.</entry>
- </row>
-
- <row>
- <entry>800089</entry>
- <entry>23.&nbsp;Mai&nbsp;2009</entry>
- <entry>8.0-CURRENT nach dem Hinzufügen der
- Unterstützung von UDP-Kontrollblocks.</entry>
- </row>
-
- <row>
- <entry>800090</entry>
- <entry>23.&nbsp;Mai&nbsp;2009</entry>
- <entry>8.0-CURRENT nach der Virtualisierung der
- Schnittstellenklonierung.</entry>
- </row>
-
- <row>
- <entry>800091</entry>
- <entry>27.&nbsp;Mai&nbsp;2009</entry>
- <entry>8.0-CURRENT nach dem Hinzufügen von
- hierarchischen Jails und dem Entfernen des globalen
- securelevel.</entry>
- </row>
-
- <row>
- <entry>800092</entry>
- <entry>29.&nbsp;Mai&nbsp;2009</entry>
- <entry>8.0-CURRENT nach der Änderung des
- <function>sx_init_flags()</function>-KPI.
- <constant>SX_ADAPTIVESPIN</constant> wurde
- zurückgezogen und eine neue Option
- <constant>SX_NOADAPTIVE</constant> wurde
- eingeführt, um die umgekehrte Logik zu
- behandeln.</entry>
- </row>
-
- <row>
- <entry>800093</entry>
- <entry>29.&nbsp;Mai&nbsp;2009</entry>
- <entry>8.0-CURRENT nach dem Hinzufügen von
- mnt_xflag zu struct&nbsp;mount.</entry>
- </row>
-
- <row>
- <entry>800094</entry>
- <entry>30.&nbsp;Mai&nbsp;2009</entry>
- <entry>8.0-CURRENT nach dem Hinzufügen von
- &man.VOP.ACCESSX.9;.</entry>
- </row>
-
- <row>
- <entry>800095</entry>
- <entry>30.&nbsp;Mai&nbsp;2009</entry>
- <entry>8.0-CURRENT nach der Änderung des
- Polling-KPI. Die Polling-Handler liefern nun die Zahl
- der verarbeiteten Pakete zurück. Die neue Option
- <constant>IFCAP_POLLING_NOCOUNT</constant> wurde
- weiter eingeführt, um anzugeben, dass der
- Rückgabewert nicht von Bedeutung ist und das
- Zählen der Pakete ausgelassen werden
- soll.</entry>
- </row>
-
- <row>
- <entry>800096</entry>
- <entry>1.&nbsp;Juni&nbsp;2009</entry>
- <entry>8.0-CURRENT nach der Aktualisierung der
- netisr-Implementierung und nachdem die Weise, wie FIBs
- gespeichert werden und wie auf sie zugegriffen wird,
- geändert wurde.</entry>
- <!--
- Waren ursprünglich 96 und 97 und wurden wegen
- Zahlenmangel zusammengefasst.
- -->
- </row>
-
- <row>
- <entry>800097</entry>
- <entry>8.&nbsp;Juni&nbsp;2009</entry>
- <entry>8.0-CURRENT nach Einführung der
- Destruktor-Infrastruktur für vnet
- einschließlich Hooks.</entry>
- </row>
-
- <row>
- <entry>800097</entry>
- <entry>11.&nbsp;Juni&nbsp;2009</entry>
- <entry>8.0-CURRENT nach Einführung eines
- Erkennungssystems für ausgehende Pakete, die
- direkt wieder in netgraph gelangen und deswegen
- eingereiht werden. Dabei wurde auch die Definition von
- struct thread geändert.</entry>
- </row>
-
- <row>
- <entry>800098</entry>
- <entry>14.&nbsp;Juni&nbsp;2009</entry>
- <entry>8.0-CURRENT nach dem Einfließen von OpenSSL
- 0.9.8k.</entry>
- </row>
-
- <row>
- <entry>800099</entry>
- <entry>22.&nbsp;Juni&nbsp;2009</entry>
- <entry>8.0-CURRENT nach der Aktualisierung von NGROUPS
- und dem Verschieben der Routing-Virtualisierung in ein
- eigenes VImage-Modul.</entry>
- </row>
-
- <row>
- <entry>800100</entry>
- <entry>24.&nbsp;Juni&nbsp;2009</entry>
- <entry>8.0-CURRENT nach Änderung der
- SYSVIPC-ABI.</entry>
- </row>
-
- <row>
- <entry>800101</entry>
- <entry>29.&nbsp;Juni&nbsp;2009</entry>
- <entry>8.0-CURRENT nach dem Entfernen der
- zeichenorientierten Geräte aus /dev/net, von
- denen für jede Schnittstelle eines
- existiert.</entry>
- </row>
-
- <row>
- <entry>800102</entry>
- <entry>12.&nbsp;Juli&nbsp;2009</entry>
- <entry>8.0-CURRENT, nachdem struct sackhint, struct
- tcpcb und struct tcpstat mit Padding-Bytes
- aufgefüllt wurden.</entry>
- </row>
-
- <row>
- <entry>800103</entry>
- <entry>13.&nbsp;Juli&nbsp;2009</entry>
- <entry>8.0-CURRENT, nachdem struct tcpopt durch struct
- toeopt in der Schnittstelle zwischen dem TOE-Treiber
- und dem TCP-SYN-Cache ersetzt wurde.</entry>
- </row>
-
- <row>
- <entry>800104</entry>
- <entry>19.&nbsp;Juli&nbsp;2009</entry>
- <entry>8.0-CURRENT nach dem Hinzufügen einer
- vnet-spezifischen Speicherzuweisung, die auf dem
- Linker-Set-Verfahren basiert.</entry>
- </row>
-
- <row>
- <entry>800105</entry>
- <entry>19.&nbsp;Juli&nbsp;2009</entry>
- <entry>8.0-CURRENT nach der Inkrementierung der
- Versionsnummer aller Shared-Libraries, die
- Symbol-Versioning nicht aktiviert haben.</entry>
- </row>
-
- <row>
- <entry>800106</entry>
- <entry>24.&nbsp;Juli&nbsp;2009</entry>
- <entry>8.0-CURRENT nach Einführung des
- VM-Objekttyps OBJT_SG.</entry>
- </row>
-
- <row>
- <entry>800107</entry>
- <entry>2.&nbsp;August&nbsp;2009</entry>
- <entry>8.0-CURRENT nach Befreiung des Newbus-Subsystems
- von Giant durch Hinzufügen von sxlock und
- 8.0-RELEASE.</entry>
- </row>
-
- <row>
- <entry>800108</entry>
- <entry>21.&nbsp;November&nbsp;2009</entry>
- <entry>8.0-CURRENT nach Implementierung des
- kevent-Filters EVFILT_USER.</entry>
- </row>
-
- <row>
- <entry>800500</entry>
- <entry>7.&nbsp;Januar&nbsp;2010</entry>
- <entry>8.0-STABLE nach Erhöhung von
- <literal>__FreeBSD_version</literal>, damit
- <command>pkg_add -r</command> packages-8-stable
- verwendet.</entry>
- </row>
-
- <row>
- <entry>800501</entry>
- <entry>24.&nbsp;Januar&nbsp;2010</entry>
- <entry>8.0-STABLE, nachdem die Prototypen von
- <function>scandir(3)</function> und
- <function>alphasort(3)</function> geändert
- wurden, um der SUSv4 zu entsprechen.</entry>
- </row>
-
- <row>
- <entry>800502</entry>
- <entry>31.&nbsp;Januar&nbsp;2010</entry>
- <entry>8.0-STABLE nach Hinzufügen von
- <function>sigpause(3)</function>.</entry>
- </row>
-
- <row>
- <entry>800503</entry>
- <entry>25.&nbsp;Februar&nbsp;2010</entry>
- <entry>8.0-STABLE nach dem Hinzufügen der ioctls
- SIOCGIFDESCR und SIOCSIFDESCR für
- Netzwerk-Schnittstellen. Diese ioctls können,
- nach dem Vorbild von OpenBSD, dazu verwendet werden,
- Schnittstellenbeschreibungen zu bearbeiten und
- auszulesen.</entry>
- </row>
-
- <row>
- <entry>800504</entry>
- <entry>1.&nbsp;März&nbsp;2010</entry>
- <entry>8.0-STABLE, nachdem x86emu, ein Software-Emulator
- von OpenBSD für x86-Prozessoren im Real-Mode, von
- CURRENT übernommen wurde.</entry>
- </row>
-
- <row>
- <entry>800505</entry>
- <entry>18.&nbsp;Mai&nbsp;2010</entry>
- <entry>8.0-STABLE nach dem Einfließen von liblzma,
- xz, xzdec und lzmainfo.</entry>
- </row>
-
- <row>
- <entry>801000</entry>
- <entry>14.&nbsp;Juni&nbsp;2010</entry>
- <entry>8.1-RELEASE</entry>
- </row>
-
- <row>
- <entry>801500</entry>
- <entry>14.&nbsp;Juni&nbsp;2010</entry>
- <entry>8.1-STABLE nach 8.1-RELEASE.</entry>
- </row>
-
- <row>
- <entry>801501</entry>
- <entry>November 3, 2010</entry>
- <entry>8.1-STABLE nach der KBI-Änderung in
- struct sysentve und der Implementierung von
- PL_FLAG_SCE/SCX/EXEC/SI und
- pl_siginfo für ptrace(PT_LWPINFO) .</entry>
- </row>
-
- <row>
- <entry>802000</entry>
- <entry>22.&nbsp;Dezember&nbsp;2010</entry>
- <entry>8.2-RELEASE</entry>
- </row>
-
- <row>
- <entry>802500</entry>
- <entry>22.&nbsp;Dezember&nbsp;2010</entry>
- <entry>8.2-STABLE, nachdem 8.2-RELEASE erzeugt
- wurde.</entry>
- </row>
-
- <row>
- <entry>802501</entry>
- <entry>28.&nbsp;Februar&nbsp;2011</entry>
- <entry>8.2-STABLE, nachdem DTrace aktualisiert wurde (so wird
- nun auch Userland-Tracing unterstützt).</entry>
- </row>
-
- <row>
- <entry>802502</entry>
- <entry>6.&nbsp;März&nbsp;2011</entry>
- <entry>8.2-STABLE, nachdem log2 und log2f in libm aufgenommen
- wurden.</entry>
- </row>
-
- <row>
- <entry>802503</entry>
- <entry>1.&nbsp;Mai&nbsp;2011</entry>
- <entry>8.2-STABLE, nachdem gcc auf die letzte unter der GPLv2
- stehenden Version (aus dem FSF gcc-4_2-Zweig) aktualisiert
- wurde.</entry>
- </row>
-
- <row>
- <entry>802504</entry>
- <entry>28.&nbsp;Mai&nbsp;2011</entry>
- <entry>8.2-STABLE, nachdem KPI sowie die Infrastruktur zur
- Unterstützung von <quote>modular congestion
- control</quote> implementiert wurden.</entry>
- </row>
-
- <row>
- <entry>802505</entry>
- <entry>28.&nbsp;Mai&nbsp;2011</entry>
- <entry>8.2-STABLE, nachdem die KPIs Hhook und Khelp
- implementiert wurden.</entry>
- </row>
-
- <row>
- <entry>802506</entry>
- <entry>M28.&nbsp;Mai&nbsp;2011</entry>
- <entry>8.2-STABLE, nachdem OSD in die Struktur tcpcb
- eingebaut wurde.</entry>
- </row>
-
- <row>
- <entry>802507</entry>
- <entry>6.&nbsp;Juni&nbsp;2011</entry>
- <entry>8.2-STABLE nach dem Import von ZFS v28.</entry>
- </row>
-
- <row>
- <entry>802508</entry>
- <entry>8.&nbsp;Juni&nbsp;2011</entry>
- <entry>8.2-STABLE, nach dem Entfernen der Methode
- sv_schedtail struct sysvec.</entry>
- </row>
-
- <row>
- <entry>802509</entry>
- <entry>14.&nbsp;Juli&nbsp;2011</entry>
- <entry>8.2-STABLE, nachdem die binutils um die
- SSSE3-Unterstützung erweitert wurden.</entry>
- </row>
-
- <row>
- <entry>802510</entry>
- <entry>19.&nbsp;Juli&nbsp;2011</entry>
- <entry>8.2-STABLE, nach dem Hinzufügen des Flags
- RFTSIGZMB zu <function>rfork(2)</function>.</entry>
- </row>
-
- <row>
- <entry>900000</entry>
- <entry>22.&nbsp;August&nbsp;2009</entry>
- <entry>9.0-CURRENT.</entry>
- </row>
-
- <row>
- <entry>900001</entry>
- <entry>8.&nbsp;September&nbsp;2009</entry>
- <entry>9.0-CURRENT nach dem Import von x86emu, einem
- Software-Emulator von OpenBSD für x86-Prozessoren
- im Real-Mode.</entry>
- </row>
-
- <row>
- <entry>900002</entry>
- <entry>23.&nbsp;September&nbsp;2009</entry>
- <entry>9.0-CURRENT nach Implementierung des
- kevent-Filters EVFILT_USER.</entry>
- </row>
-
- <row>
- <entry>900003</entry>
- <entry>2.&nbsp;Dezember&nbsp;2009</entry>
- <entry>9.0-CURRENT nach Hinzufügen von
- <function>sigpause(3)</function> und der
- PIE-Unterstützung zu csu.</entry>
- </row>
-
- <row>
- <entry>900004</entry>
- <entry>6.&nbsp;Dezember&nbsp;2009</entry>
- <entry>9.0-CURRENT nach Hinzufügen von libulog und
- dessen
- libutempter-Kompatibilitätsschnittstelle.</entry>
- </row>
-
- <row>
- <entry>900005</entry>
- <entry>12.&nbsp;Dezember&nbsp;2009</entry>
- <entry>9.0-CURRENT nach Hinzufügen von
- <function>sleepq_sleepcnt()</function>, das dazu
- verwendet werden kann, die Anzahl der in einer
- bestimmten Warteschlange eingereihten Threads
- abzufragen.</entry>
- </row>
-
- <row>
- <entry>900006</entry>
- <entry>4.&nbsp;Januar&nbsp;2010</entry>
- <entry>9.0-CURRENT, nachdem die Prototypen von
- <function>scandir(3)</function> und
- <function>alphasort(3)</function> geändert
- wurden, um der SUSv4 zu entsprechen.</entry>
- </row>
-
- <row>
- <entry>900007</entry>
- <entry>13.&nbsp;Januar&nbsp;2010</entry>
- <entry>9.0-CURRENT nach dem Entfernen von utmp(5) und
- dem Hinzufügen von utmpx (siehe
- <function>getutxent(3)</function>) zur besseren
- Erfassung von Benutzeranmeldungen und
- Systemereignissen.</entry>
- </row>
-
- <row>
- <entry>900008</entry>
- <entry>20.&nbsp;Januar&nbsp;2010</entry>
- <entry>9.0-CURRENT nach der Einführung von BSDL
- bc/dc zur Ersetzung von GNU bc/dc.</entry>
- </row>
-
- <row>
- <entry>900009</entry>
- <entry>26.&nbsp;Januar&nbsp;2010</entry>
- <entry>9.0-CURRENT nach dem Hinzufügen der ioctls
- SIOCGIFDESCR und SIOCSIFDESCR für
- Netzwerk-Schnittstellen. Diese ioctls können,
- nach dem Vorbild von OpenBSD, dazu verwendet werden,
- Schnittstellenbeschreibungen zu bearbeiten und
- auszulesen.</entry>
- </row>
-
- <row>
- <entry>900010</entry>
- <entry>22.&nbsp;März&nbsp;2010</entry>
- <entry>9.0-CURRENT nach dem Import von zlib
- 1.2.4.</entry>
- </row>
-
- <row>
- <entry>900011</entry>
- <entry>24.&nbsp;April&nbsp;2010</entry>
- <entry>9.0-CURRENT nach Hinzufügen von Soft Updates
- Journaling.</entry>
- </row>
-
- <row>
- <entry>900012</entry>
- <entry>10.&nbsp;Mai&nbsp;2010</entry>
- <entry>9.0-CURRENT nach Hinzufügen von liblzma, xz,
- xzdec und lzmainfo.</entry>
- </row>
-
- <row>
- <entry>900013</entry>
- <entry>24.&nbsp;Mai&nbsp;2010</entry>
- <entry>9.0-CURRENT nach Einbringen von
- USB-Fehlerbehebungen in linux(4).</entry>
- </row>
-
- <row>
- <entry>900014</entry>
- <entry>10.&nbsp;Juni&nbsp;2010</entry>
- <entry>9.0-CURRENT nach Hinzufügen von
- Clang.</entry>
- </row>
-
- <row>
- <entry>900015</entry>
- <entry>22.&nbsp;Juli&nbsp;2010</entry>
- <entry>9.0-CURRENT nach dem Import von BSD grep.</entry>
- </row>
-
- <row>
- <entry>900016</entry>
- <entry>28.&nbsp;Juli&nbsp;2010</entry>
- <entry>9.0-CURRENT, nachdem mti_zone zu
- struct malloc_type_internal hinzugefügt
- wurde.</entry>
- </row>
-
- <row>
- <entry>900017</entry>
- <entry>23.&nbsp;August&nbsp;2010</entry>
- <entry>9.0-CURRENT nach dem Zurückkehren zu GNU
- grep als Standard und Hinzufügen der Option
- WITH_BSD_GREP.</entry>
- </row>
-
- <row>
- <entry>900018</entry>
- <entry>24.&nbsp;August&nbsp;2010</entry>
- <entry>9.0-CURRENT, nachdem das von
- <function>pthread_kill(3)</function> generierte Signal
- in si_code als SI_LWP bezeichnet wird. Zuvor war
- si_code SI_USER.</entry>
- </row>
-
- <row>
- <entry>900019</entry>
- <entry>28.&nbsp;August&nbsp;2010</entry>
- <entry>9.0-CURRENT nach Hinzufügen des Schalters
- MAP_PREFAULT_READ zu
- <function>mmap(2)</function>.</entry>
- </row>
-
- <row>
- <entry>900020</entry>
- <entry>9.&nbsp;September&nbsp;2010</entry>
- <entry>9.0-CURRENT, nachdem
- <quote>drain</quote>-Funktionalität
- in sbufs integriert wurde (wodurch sich auch das
- Layout von struct sbuf geändert hat).</entry>
- </row>
-
- <row>
- <entry>900021</entry>
- <entry>13.&nbsp;September&nbsp;2010</entry>
- <entry>9.0-CURRENT, nachdem <quote>Userland
- tracing</quote> in DTrace eingeführt
- wurde.</entry>
- </row>
-
- <row>
- <entry>900022</entry>
- <entry>2.&nbsp;Oktober&nbsp;2010</entry>
- <entry>9.0-CURRENT nach Hinzufügen der
- BSDL man-Utilities (und gleichzeitigem
- Entfernen der GNU/GPL man-Utilities).</entry>
- </row>
-
- <row>
- <entry>900023</entry>
- <entry>11.&nbsp;Oktober&nbsp;2010</entry>
- <entry>9.0-CURRENT nach der Aktualisierung von
- xz auf den git-Snapshot 20101010.</entry>
- </row>
-
- <row>
- <entry>900024</entry>
- <entry>11.&nbsp;November&nbsp;2010</entry>
- <entry>9.0-CURRENT, nachdem libgcc.a durch
- libcompiler_rt.a.</entry>
- </row>
-
- <row>
- <entry>900025</entry>
- <entry>12.&nbsp;November&nbsp;2010</entry>
- <entry>9.0-CURRENT nach der Einführung
- von <quote>modularised congestion
- control</quote>.</entry>
- </row>
-
- <row>
- <entry>900026</entry>
- <entry>30.&nbsp;November&nbsp;2010</entry>
- <entry>9.0-CURRENT nach der Einführung von
- <quote>Serial Management Protocol (SMP)
- passthrough</quote> sowie den XPT_SMP_IO und
- XPT_GDEV_ADVINFO CAM CCBs.</entry>
- </row>
-
- <row>
- <entry>900027</entry>
- <entry>5.&nbsp;Dezember&nbsp;2010</entry>
- <entry>9.0-CURRENT, nachdem log2 zu libm
- hinzugefügt wurde.</entry>
- </row>
-
- <row>
- <entry>900028</entry>
- <entry>21.&nbsp;Dezember&nbsp;2010</entry>
- <entry>9.0-CURRENT, nach dem HInzufügen von Hhook
- (Helper Hook), Khelp (Kernel Helpers) und Object Specific
- Data (OSD) KPIs.</entry>
- </row>
-
- <row>
- <entry>900029</entry>
- <entry>28.&nbsp;Dezember&nbsp;2010</entry>
- <entry>9.0-CURRENT, nach der TCP-Stack modifiziert wurde, um
- es den Khelp-Modulen zu erlauben, mit ihm über
- Helper Hook Points zu kommunizieren und Verbindungsdaten
- im TCP-Kontrollblock zu speichern.</entry>
- </row>
-
- <row>
- <entry>900030</entry>
- <entry>12.&nbsp;Januar&nbsp;2011</entry>
- <entry>9.0-CURRENT, nachdem libdialog auf die Version
- 20100428 aktualisiert wurde.</entry>
- </row>
-
- <row>
- <entry>900031</entry>
- <entry>7.&nbsp;Februar&nbsp;2011</entry>
- <entry>9.0-CURRENT, nach dem Hinzufügen von
- <function>pthread_getthreadid_np(3)</function>.</entry>
- </row>
-
- <row>
- <entry>900032</entry>
- <entry>8.&nbsp;Februar&nbsp;2011</entry>
- <entry>9.0-CURRENT, nachdem Prototyp und Symbol für
- uio_yield entfernt wurden.</entry>
- </row>
-
- <row>
- <entry>900033</entry>
- <entry>18.&nbsp;Februar&nbsp;2011</entry>
- <entry>9.0-CURRENT, nachdem die binutils auf Version
- 2.17.50 aktualisiert wurden.</entry>
- </row>
-
- <row>
- <entry>900034</entry>
- <entry>8.&nbsp;März&nbsp;2011</entry>
- <entry>9.0-CURRENT, nachdem die Struktur
- sysvec (sv_schedtail) modifiziert wurde.</entry>
- </row>
-
- <row>
- <entry>900035</entry>
- <entry>29.&nbsp;März&nbsp;20111</entry>
- <entry>9.0-CURRENT, nach dem Update des im
- Basissystem enthaltenen gcc sowie von libstdc++
- auf die letzten unter GPLv2 lizenzierten Versionen.</entry>
- </row>
-
- <row>
- <entry>900036</entry>
- <entry>18.&nbsp;April&nbsp;2011</entry>
- <entry>9.0-CURRENT, nachdem libobjc und die Unterstützung
- für Objective-C aus dem Basissystem entfernt
- wurden.</entry>
- </row>
-
- <row>
- <entry>900037</entry>
- <entry>13.&nbsp;Mai&nbsp;2011</entry>
- <entry>9.0-CURRENT, nach dem Import der
- libprocstat(3)-Bibliothek sowie von fuser(1) in das
- Basissystem.</entry>
- </row>
-
- <row>
- <entry>900038</entry>
- <entry>22.&nbsp;Mai&nbsp;2011</entry>
- <entry>9.0-CURRENT, nachdem ein Lock-Flag zu VFS_FHTOVP(9)
- hinzugefügt wurde.</entry>
- </row>
-
- <row>
- <entry>900039</entry>
- <entry>28.&nbsp;Juni&nbsp;2011</entry>
- <entry>9.0-CURRENT, nachdem pf von OpenBSD&nbsp;4.5 importiert
- wurde.</entry>
- </row>
-
- <row>
- <entry>900040</entry>
- <entry>19. Juli 2011</entry>
- <entry>Standardmäßige Erhöhung von MAXCPU für &os; auf
- 64 für amd64 und ia64 und auf 128 für XLP
- (mips).</entry>
- </row>
-
- <row>
- <entry>900041</entry>
- <entry>13.&nbsp;August&nbsp;2011</entry>
- <entry>9.0-CURRENT, nachdem Capsicum-Funktionalitäten
- implementiert wurden. Zusätzlich wurde fget(9) um ein
- Rechte-Argument erweitert.</entry>
- </row>
-
- <row>
- <entry>900042</entry>
- <entry>28. August 2011</entry>
- <entry>Versionssprünge für Shared-Libraries deren ABI
- sich geändert hat, in Vorbereitung für 9.0.</entry>
- </row>
-
- <row>
- <entry>900043</entry>
- <entry>2. September 2011</entry>
- <entry>Automatische Erkennung von USB-Massenspeicher
- Geräten, die das no synchronize cache SCSI Kommando
- nicht unterstützen.</entry>
- </row>
-
- <row>
- <entry>900044</entry>
- <entry>10. September 2011</entry>
- <entry>Re-factor auto-quirk.</entry>
- </row>
-
- <row>
- <entry>900045</entry>
- <entry>13. Oktober 2011</entry>
- <entry>Allen nicht-kompatiblen
- Systemaufruf-Einstiegspunkten wurde ein sys_
- vorangestellt.</entry>
- </row>
-
- </tbody>
- </tgroup>
- </table>
-
- <note>
- <para>Beachten Sie, dass 2.2-STABLE sich nach dem
- 2.2.5-RELEASE manchmal als <quote>2.2.5-STABLE</quote>
- identifiziert. Das Muster war früher das Jahr gefolgt
- von dem Monat, aber wir haben uns entschieden, ab 2.2. einen
- geradlinigeren Ansatz mit major/minor-Nummern zu benutzen.
- Dies liegt daran, dass gleichzeitiges Entwickeln an mehreren
- Zweigen es unmöglich macht, die Versionen nur mit Hilfe
- des Datums des Releases zu unterteilen. Wenn Sie jetzt einen
- Port erstellen brauchen Sie sich nicht um alte -CURRENTs zu
- kümmern; diese sind hier nur als Referenz
- augeführt.</para>
- </note>
- </sect1>
-
- <sect1 xml:id="dads-after-port-mk">
- <title>Etwas hinter die
- <filename>bsd.port.mk</filename>-Anweisung schreiben</title>
-
- <para>Schreiben Sie bitte nichts hinter die <literal>.include
- &lt;bsd.port.mk&gt;</literal>-Zeile. Normalerweise kann dies
- vermieden werden, indem Sie die Datei
- <filename>bsd.port.pre.mk</filename> irgendwo in der Mitte
- Ihres <filename>Makefile</filename>s und
- <filename>bsd.port.post.mk</filename> am Ende
- einfügen.</para>
-
- <note>
- <para>Sie dürfen entweder nur das
- <filename>bsd.port.pre.mk</filename>/<filename>bsd.port.post.mk</filename>-Paar
- oder <filename>bsd.port.mk</filename> alleine
- hinzufügen; vermischen Sie diese Verwendungen
- nicht!</para>
- </note>
-
- <para><filename>bsd.port.pre.mk</filename> definiert nur
- einige Variablen, welche in Tests im
- <filename>Makefile</filename> benutzt werden können,
- <filename>bsd.port.post.mk</filename> definiert den
- Rest.</para>
-
- <para>Hier sind einige wichtige Variablen, welche in
- <filename>bsd.port.pre.mk</filename> definiert sind (dies ist
- keine vollständige Liste, lesen Sie bitte
- <filename>bsd.port.mk</filename> für eine
- vollständige Auflistung).</para>
-
- <informaltable frame="none" pgwide="1">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Variable</entry>
- <entry>Beschreibung</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><varname>ARCH</varname></entry>
- <entry>Die Architektur, wie von <command>uname
- -m</command> zurückgegeben (z.B.
- <literal>i386</literal>)</entry>
- </row>
-
- <row>
- <entry><varname>OPSYS</varname></entry>
- <entry>Der Typ des Betriebsystems, wie von <command>uname
- -s</command> zurückgegeben (z.B.
- <literal>FreeBSD</literal>)</entry>
- </row>
-
- <row>
- <entry><varname>OSREL</varname></entry>
- <entry>Die Release Version des Betriebssystems (z.B.,
- <literal>2.1.5</literal> oder
- <literal>2.2.7</literal>)</entry>
- </row>
-
- <row>
- <entry><varname>OSVERSION</varname></entry>
- <entry>Die numerische Version des Betriebssystems;
- gleichbedeutend mit <link linkend="freebsd-versions"><literal>__FreeBSD_version</literal></link>.</entry>
- </row>
-
- <row>
- <entry><varname>PORTOBJFORMAT</varname></entry>
- <entry>Das Objektformat des Systems
- (<literal>elf</literal> oder <literal>aout</literal>;
- beachten Sie, dass für <quote>moderne</quote>
- Versionen von FreeBSD <literal>aout</literal> veraltet
- ist).</entry>
- </row>
-
- <row>
- <entry><varname>LOCALBASE</varname></entry>
- <entry>Die Basis des <quote>local</quote>
- Verzeichnisbaumes (z.B.
- <literal>/usr/local/</literal>)</entry>
- </row>
-
- <row>
- <entry><varname>PREFIX</varname></entry>
- <entry>Wo der Port sich selbst installiert (siehe <link linkend="porting-prefix"> Mehr Informationen über
- <varname>PREFIX</varname></link>).</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <note>
- <para>Falls Sie die Variablen <varname>USE_IMAKE</varname>,
- <varname>USE_X_PREFIX</varname>, oder
- <varname>MASTERDIR</varname> definieren müssen, sollten
- Sie dies vor dem Einfügen von
- <filename>bsd.port.pre.mk</filename> machen.</para>
- </note>
-
- <para>Hier sind ein paar Beispiele von Dingen, die Sie hinter
- die Anweisung <filename>bsd.port.pre.mk</filename> schreiben
- können:</para>
-
- <programlisting># lang/perl5 muss nicht kompliliert werden, falls perl5 schon auf dem System ist
-.if ${OSVERSION} &gt; 300003
-BROKEN= perl ist im System
-.endif
-
-# nur eine Versionsnummer für die ELF Version der shlib
-.if ${PORTOBJFORMAT} == "elf"
-TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR}
-.else
-TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR}.${SHLIB_MINOR}
-.endif
-
-# die Software erstellt schon eine Verknüpfung fü ELF, aber nicht fü a.out
-post-install:
-.if ${PORTOBJFORMAT} == "aout"
- ${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so
-.endif</programlisting>
-
- <para>Sie haben sich daran erinnert Tabulator statt
- Leerzeichen nach <literal>BROKEN=</literal> und
- <literal>TCL_LIB_FILE=</literal> zu benutzen, oder?
- <!-- smiley -->:-).</para>
- </sect1>
-
- <sect1 xml:id="dads-sh-exec">
- <title>Benutzen Sie die <function>exec</function>-Anweisung in
- Wrapper-Skripten</title>
-
- <para>Falls der Port ein Shellskript installiert, dessen Zweck
- es ist ein anderes Programm zu starten, und falls das Starten
- des Programmes die letzte Aktion des Skripts ist, sollten Sie
- sicherstellen, dass Sie die Funktion <function>exec</function>
- dafür benutzen; zum Beispiel:</para>
-
- <programlisting>#!/bin/sh
-exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting>
-
- <para>Die Funktion <function>exec</function> ersetzt den
- Shell-Prozess mit dem angegebenen Programm. Falls
- <function>exec</function> ausgelassen wird, verbleibt der
- Shell-Prozess im Speicher während das Programm
- ausgefährt wird und verbraucht unnötig
- Systemressourcen.</para>
- </sect1>
-
- <sect1 xml:id="dads-rational">
- <title>Aufgaben vernünftig lösen</title>
-
- <para>Das <filename>Makefile</filename> sollte die
- nötigen Schritte einfach und vernünftig
- durchführen. Wenn Sie ein einige Zeilen einsparen oder
- die Lesbarkeit verbessern können, dann machen Sie dies
- bitte. Beispiele sind: Ein make-Konstrukt
- <literal>.if</literal> anstatt eines Shellkonstrukt
- <literal>if</literal> zu verwenden, anstatt
- <buildtarget>do-extract</buildtarget> neu zu definieren, dies
- mit <varname>EXTRACT*</varname> machen, oder
- <varname>GNU_CONFIGURE</varname> anstelle von
- <literal>CONFIGURE_ARGS += --prefix=&dollar;{PREFIX}</literal>
- zu verwenden.</para>
-
- <para>Falls Sie sich in einer Situation wiederfinden, in der
- Sie viel Code neu schreiben müssen, um etwas zu testen,
- sollten Sie zuerst <filename>bsd.port.mk</filename> erneut
- konsultieren und nachprüfen ob es nicht bereits eine
- Lösung für Ihr Problem enthält. Es ist zwar
- schwer zu lesen, beinhaltet jedoch eine Menge kurzer
- Lösungen für viele scheinbar schwierige
- Probleme.</para>
- </sect1>
-
- <sect1 xml:id="dads-cc">
- <title>Berücksichtigen Sie sowohl <varname>CC</varname> als
- auch <varname>CXX</varname></title>
-
- <para>Der Port sollte sowohl die <varname>CC</varname>- wie
- auch die <varname>CXX</varname>-Variable berücksichtigen.
- Damit ist gemeint, dass der Port diese Variablen nicht ohne
- Rücksicht auf eventuell schon gesetzte Werte einfach
- überschreiben sollte; stattdessen sollten neue Werte an
- schon existierende angehängt werden. Dadurch können
- Build-Optionen, die alle Ports betreffen, global definiert
- werden.</para>
-
- <para>Falls der Port diese Variablen nicht
- berücksichtigt, sollte <literal>NO_PACKAGE=ignores either
- cc or cxx</literal> ins <filename>Makefile</filename>
- eingefügt werden.</para>
-
- <para>Im Folgenden wird ein Beispiel eines
- <filename>Makefile</filename>s gezeigt, welches die beiden
- Variablen <varname>CC</varname> und <varname>CXX</varname>
- berücksichtigt. Beachten Sie das
- <varname>?=</varname>:</para>
-
- <programlisting>CC?= gcc</programlisting>
- <programlisting>CXX?= g++</programlisting>
-
- <para>Nachfolgend ein Beispiel, welches weder
- <varname>CC</varname> noch <varname>CXX</varname>
- berücksichtigt:</para>
-
- <programlisting>CC= gcc</programlisting>
- <programlisting>CXX= g++</programlisting>
-
- <para>Die Variablen <varname>CC</varname> und
- <varname>CXX</varname> können auf FreeBSD-Systemen in
- <filename>/etc/make.conf</filename> definiert werden. Im
- ersten Beispiel wird ein Wert nur dann gesetzt, falls dieser
- vorher noch nicht gesetzt war, um so systemweite Definitionen
- zu berücksichtigen. Im zweiten Beispiel werden die
- Variablen ohne Rücksicht überschrieben.</para>
- </sect1>
-
- <sect1 xml:id="dads-cflags">
- <title>Berücksichtigen Sie
- <varname>CFLAGS</varname></title>
-
- <para>Der Port sollte die Variable <varname>CFLAGS</varname>
- berücksichtigen. Damit ist gemeint, dass der Port den
- Wert dieser Variablen nicht absolut setzen und damit
- existierende Werte überschreiben sollte; stattdessen
- sollte er weitere Werte der Variablen durch Anhängen
- hinzufügen. Dadurch können Build-Optionen, die alle
- Ports betreffen, global definiert werden.</para>
-
- <para>Falls der Port diese Variablen nicht
- berücksichtigt, sollte <literal>NO_PACKAGE=ignores
- cflags</literal> ins <filename>Makefile</filename>
- eingefügt werden.</para>
-
- <para>Im Folgenden wird ein Beispiel eines
- <filename>Makefile</filename>s gezeigt, welches die Variable
- <varname>CFLAGS</varname> berücksichtigt. Beachten Sie
- das <varname>+=</varname>:</para>
-
- <programlisting>CFLAGS+= -Wall -Werror</programlisting>
-
- <para>Nachfolgend finden Sie ein Beispiel, welches die
- <varname>CFLAGS</varname>-Variable nicht
- berücksichtigt:</para>
-
- <programlisting>CFLAGS= -Wall -Werror</programlisting>
-
- <para>Die Variable <varname>CFLAGS</varname> wird auf
- FreeBSD-Systemen in <filename>/etc/make.conf</filename>
- definiert. Im ersten Beispiel werden weitere Flags an die
- Variable <varname>CFLAGS</varname> angehängt und somit
- der bestehende Wert nicht gelöscht. Im zweiten Beispiel
- wird die Variable ohne Rücksicht
- überschrieben.</para>
-
- <para>Sie sollten Optimierungsflags aus
- <filename>Makefile</filename>s Dritter entfernen. Die
- <varname>CFLAGS</varname> des Systems beinhalten systemweite
- Optimierungsflags. Ein Beispiel eines unveränderten
- <filename>Makefile</filename>s:</para>
-
- <programlisting>CFLAGS= -O3 -funroll-loops -DHAVE_SOUND</programlisting>
-
- <para>Werden nun systemweite Optimierungsflags verwendet so
- würde das <filename>Makefile</filename> in etwa
- folgendermaßen aussehen:</para>
-
- <programlisting>CFLAGS+= -DHAVE_SOUND</programlisting>
- </sect1>
-
- <sect1 xml:id="dads-pthread">
- <title>Threading-Bibliotheken</title>
-
- <para>Die Threading-Bibliothek muss mit Hilfe eines speziellen
- Linker-Flags <literal>-pthread</literal> in die
- Binärdateien unter &os; gebunden werden. Falls ein Port
- auf ein direktes Verlinken gegen <literal>-lpthread</literal>
- oder <literal>-lc_r</literal> besteht, passen Sie den Port
- bitte so an, dass er die durch das Port-Framework
- bereitgestellte Variable <varname>PTHREAD_LIBS</varname>
- verwendet. Diese Variable hat üblicherweise den Wert
- <literal>-pthread</literal>, kann aber auf einigen
- Architekturen und &os;-Versionen abweichende Werte haben und
- daher sollte nie <literal>-pthread</literal> direkt in Patches
- geschrieben werden, sondern immer
- <varname>PTHREAD_LIBS</varname>.</para>
-
- <note>
- <para>Falls durch das Setzen von
- <varname>PTHREAD_LIBS</varname> der Bau des Ports mit der
- Fehlermeldung <literal>unrecognized option
- '-pthread'</literal> abbricht, kann die Verwendung des
- <command>gcc</command> als Linker durch setzen von
- <varname>CONFIGURE_ENV</varname> auf
- <literal>LD=${CC}</literal> helfen. Die Option
- <literal>-pthread</literal> wird nicht direkt von
- <command>ld</command> unterstützt.</para>
- </note>
- </sect1>
-
- <sect1 xml:id="dads-freedback">
- <title>Rückmeldungen</title>
-
- <para>Brauchbare Änderungen/Patches sollten an den
- ursprünglichen Autor/Maintainer der Software geschickt
- werden, damit diese in der nächsten Version der Software
- mit aufgenommen werden können. Dadurch wird Ihre Aufgabe
- für die nächste Version der Software deutlich
- einfacher.</para>
- </sect1>
-
- <sect1 xml:id="dads-readme">
- <title><filename>README.html</filename></title>
-
- <para>Nehmen Sie bitte keine <filename>README.html</filename>
- in den Port auf. Diese Datei ist kein Bestandteil der
- CVS-Sammlung sondern wird durch <command>make readme</command>
- erzeugt.</para>
- </sect1>
-
- <sect1 xml:id="dads-noinstall">
- <title>Einen Port durch <varname>BROKEN</varname>,
- <varname>FORBIDDEN</varname> oder <varname>IGNORE</varname> als
- nicht installierbar markieren</title>
-
- <para>In manchen Fällen sollten Benutzer davon abgehalten
- werden einen Port zu installieren. Um einem Benutzer
- mitzuteilen, dass ein Port nicht installiert werden sollte,
- gibt es mehrere Variablen für <command>make</command>,
- die im <filename>Makefile</filename> des Ports genutzt werden
- können. Der Wert der folgenden
- <command>make</command>-Variablen wird dem Benutzer als Grund
- für die Ablehnung der Installation des Ports
- zurückgegeben. Bitte benutzen Sie die richtige
- <command>make</command>-Variable, denn jede enthält eine
- völlig andere Bedeutung für den Benutzer und das
- automatische System, das von dem <filename>Makefile</filename>
- abhängt, wie <link linkend="build-cluster">der
- Ports-Build-Custer</link>, <link linkend="freshports">FreshPorts</link> und <link linkend="portsmon">portsmon</link>.</para>
-
- <sect2 xml:id="dads-noinstall-variables">
- <title>Variablen</title>
-
- <itemizedlist>
- <listitem>
- <para><varname>BROKEN</varname> ist reserviert für
- Ports, welche momentan nicht korrekt kompiliert,
- installiert oder deinstalliert werden. Es sollte
- für Ports benutzt werden, von denen man annimmt,
- dass dies ein temporäres Problem ist.</para>
-
- <para>Falls angegeben, wird der Build-Cluster dennoch
- versuchen den Port zu bauen, um zu sehen, ob das
- zugrunde liegende Problem behoben wurde (das ist jedoch
- im Allgemeinen nicht der Fall).</para>
-
- <para>Benutzen Sie <varname>BROKEN</varname> zum
- Beispiel, wenn ein Port:</para>
-
- <itemizedlist>
- <listitem>
- <para>nicht kompiliert</para>
- </listitem>
-
- <listitem>
- <para>beim Konfiguration- oder Installation-Prozess
- scheitert</para>
- </listitem>
-
- <listitem>
- <para>Dateien außerhalb von
- <filename>${LOCALBASE}</filename> installiert</para>
- </listitem>
-
- <listitem>
- <para>beim Deinstallieren nicht alle seine Dateien
- sauber entfernt (jedoch kann es akzeptable und
- wünschenswert sein, Dateien, die vom Nutzer
- verändert wurden, nicht zu entfernen)</para>
- </listitem>
- </itemizedlist>
- </listitem>
-
- <listitem>
- <para><varname>FORBIDDEN</varname> wird für Ports
- verwendet, die Sicherheitslücken enthalten oder die
- ernste Sicherheitsbedenken für das FreeBSD-System
- aufwerfen, wenn sie installiert sind (z.B. ein als
- unsicher bekanntes Programm, oder ein Programm, das
- einen Dienst zur Verfügung stellt, der leicht
- kompromittiert werden kann). Ports sollten als
- <varname>FORBIDDEN</varname> gekennzeichnet werden,
- sobald ein Programm eine Schwachstelle hat und kein
- Update veröffentlicht wurde. Idealerweise sollten
- Ports so bald wie möglich aktualisiert werden wenn
- eine Sicherheitslücke entdeckt wurde, um die Zahl
- verwundbarer FreeBSD-Hosts zu verringern (wir
- schätzen es für unsere Sicherheit bekannt zu
- sein), obwohl es manchmal einen beachtlichen Zeitabstand
- zwischen der Bekanntmachung einer Schwachstelle und dem
- entsprechenden Update gibt. Bitte kennzeichnen Sie einen
- Port nicht aus irgendeinem Grund außer Sicherheit
- als <varname>FORBIDDEN</varname>.</para>
- </listitem>
-
- <listitem>
- <para><varname>IGNORE</varname> ist für Ports
- reserviert, die aus anderen Gründen nicht gebaut
- werden sollten. Es sollte für Ports verwendet
- werden, in denen ein strukturelles Problem vermutet
- wird. Der Build-Cluster wird unter keinen Umständen
- Ports, die mit <varname>IGNORE</varname> markiert sind,
- erstellen. Verwenden Sie <varname>IGNORE</varname> zum
- Beispiel, wenn ein Port:</para>
-
- <itemizedlist>
- <listitem>
- <para>kompiliert, aber nicht richtig läuft</para>
- </listitem>
-
- <listitem>
- <para>nicht auf der installierten Version von &os;
- läuft</para>
- </listitem>
-
- <listitem>
- <para>&os; Kernelquelltext zum Bauen benötigt,
- aber der Benutzer diese nicht installiert hat</para>
- </listitem>
-
- <listitem>
- <para>ein Distfile benötigt, welches aufgrund
- von Lizenzbeschränkungen nicht automatisch
- abgerufen werden kann</para>
- </listitem>
-
- <listitem>
- <para>nicht korrekt mit einem momentan installiertem
- Port arbeitet (der Port hängt zum Beispiel von
- <package>www/apache21</package> ab,
- aber <package>www/apache13</package> ist
- installiert)</para>
- </listitem>
- </itemizedlist>
-
- <note>
- <para>Wenn ein Port mit einem momentan installiertem
- Port kollidiert (zum Beispiel, wenn beide eine Datei
- an die selbe Stelle installieren, diese aber eine
- andere Funktion hat), benutzen Sie stattdessen
- <varname>CONFLICTS</varname>.
- <varname>CONFLICTS</varname> setzt
- <varname>IGNORE</varname> dann
- selbstständig.</para>
- </note>
- </listitem>
-
- <listitem>
- <para>Um einen Port nur auf bestimmte
- Systemarchitekturen mit <varname>IGNORE</varname> zu
- markieren, gibt es zwei Variablen, die automatisch
- <varname>IGNORE</varname> für Sie setzen:
- <varname>ONLY_FOR_ARCHS</varname> und
- <varname>NOT_FOR_ARCHS</varname>. Beispiele:</para>
-
- <programlisting>ONLY_FOR_ARCHS= i386 amd64</programlisting>
-
- <programlisting>NOT_FOR_ARCHS= alpha ia64 sparc64</programlisting>
-
- <para>Eine eigene <varname>IGNORE</varname>-Ausgabe kann
- mit <varname>ONLY_FOR_ARCHS_REASON</varname> und
- <varname>NOT_FOR_ARCHS_REASON</varname> festgelegt
- werden. Für eine bestimmte Architektur sind
- Angaben durch
- <varname>ONLY_FOR_ARCHS_REASON_<replaceable>ARCH</replaceable></varname>
- und
- <varname>NOT_FOR_ARCHS_REASON_<replaceable>ARCH</replaceable></varname>
- möglich.</para>
- </listitem>
-
- <listitem>
- <para>Wenn ein Port i386-Binärdateien
- herunterlädt und installiert, sollte
- <varname>IA32_BINARY_PORT</varname> gesetzt werden. Wenn
- die Variable gesetzt ist, wird überprüft, ob
- das Verzeichnis <filename>/usr/lib32</filename> für
- IA32-Versionen der Bibliotheken vorhanden ist, und ob
- der Kernel mit IA32-Kompatibilität gebaut wurde.
- Wenn eine dieser zwei Voraussetzungen nicht erfüllt
- ist, wird <varname>IGNORE</varname> automatisch
- gesetzt.</para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2 xml:id="dads-noinstall-notes">
- <title>Anmerkungen zur Implementierung</title>
-
- <para>Zeichenketten sollten nicht in Anführungszeichen
- gesetzt werden. Auch die Wortwahl der Zeichenketten sollte
- die Art und Weise beachten, wie die Informationen dem Nutzer
- angezeigt werden. Beispiele:</para>
-
- <programlisting>BROKEN= this port is unsupported on FreeBSD 5.x</programlisting>
-
- <programlisting>IGNORE= is unsupported on FreeBSD 5.x</programlisting>
-
- <para>resultieren in den folgenden Ausgaben von
- <command>make describe</command>:</para>
-
- <programlisting>===&gt; foobar-0.1 is marked as broken: this port is unsupported on FreeBSD 5.x.</programlisting>
-
- <programlisting>===&gt; foobar-0.1 is unsupported on FreeBSD 5.x.</programlisting>
- </sect2>
- </sect1>
-
- <sect1 xml:id="dads-deprecated">
- <title>Kennzeichnen eines Ports zur Entfernung durch
- <varname>DEPRECATED</varname> oder
- <varname>EXPIRATION_DATE</varname></title>
-
- <para>Denken Sie bitte daran, dass <varname>BROKEN</varname>
- und <varname>FORBIDDEN</varname> nur als temporärer
- Ausweg verwendet werden sollten, wenn ein Port nicht
- funktioniert. Dauerhaft defekte Ports sollten komplett aus der
- Ports-Sammlung entfernt werden.</para>
-
- <para>Wenn es sinnvoll ist, können Benutzer vor der
- anstehenden Entfernung eines Ports mit
- <varname>DEPRECATED</varname> und
- <varname>EXPIRATION_DATE</varname> gewarnt werden. Ersteres
- ist einfach eine Zeichenkette, die angibt, warum der Port
- entfernt werden soll. Letzteres ist eine Zeichenkette im ISO
- 8601-Format (JJJJ-MM-TT). Beides wird dem Benutzer
- gezeigt.</para>
-
- <para>Es ist möglich <varname>DEPRECATED</varname> ohne
- <varname>EXPIRATION_DATE</varname> zu setzen (zum Beispiel, um
- eine neuere Version des Ports zu empfehlen), aber das
- Gegenteil ist sinnlos.</para>
-
- <para>Es gibt keine Vorschrift wie lange die Vorwarnzeit sein
- muss. Gegenwärtig ist es üblich einen Monat für
- sicherheitsrelevante Probleme und zwei Monate für
- Build-Probleme anzusetzen. Dies gibt allen interessierten
- Committern ein wenig Zeit die Probleme zu beheben.</para>
- </sect1>
-
- <sect1 xml:id="dads-dot-error">
- <title>Vermeiden Sie den Gebrauch des
- <literal>.error</literal>-Konstruktes</title>
-
- <para>Der korrekte Weg eines <filename>Makefile</filename>
- anzuzeigen, dass der Port aufgrund eines externen Grundes
- nicht installiert werden kann (zum Beispiel, weil der Benutzer
- eine ungültige Kombination von Build-Optionen angegeben
- hat), ist <varname>IGNORE</varname> auf einen nicht leeren
- Wert zu setzen. Dieser wird dann formatiert und dem Benutzer
- von <command>make install</command> ausgegeben.</para>
-
- <para>Es ist ein verbreiteter Fehler <literal>.error</literal>
- für diesem Zweck zu verwenden. Das Problem dabei ist,
- dass viele automatisierte Werkzeuge, die mit dem Ports-Baum
- arbeiten, in dieser Situation fehlschlagen. Am Häufigsten
- tritt das Problem beim Versuch
- <filename>/usr/ports/INDEX</filename> zu bauen auf (siehe
- <xref linkend="make-describe"/>). Jedoch schlagen auch
- trivialere Befehle wie <command>make maintainer</command>
- in diesem Fall fehl. Dies ist nicht akzeptabel!</para>
-
- <example xml:id="dot-error-breaks-index">
- <title>Wie vermeidet man die Verwendung von
- <literal>.error</literal></title>
-
- <para>Nehmen Sie an, dass die Zeile
- <programlisting>USE_POINTYHAT=yes</programlisting> in
- <filename>make.conf</filename> enthalten ist. Der erste der
- folgenden zwei <filename>Makefile</filename>-Schnipsel
- lässt <command>make index</command> fehlschlagen,
- während der zweite dies nicht tut.</para>
-
- <programlisting>.if USE_POINTYHAT
-.error "POINTYHAT is not supported"
-.endif</programlisting>
- <programlisting>.if USE_POINTYHAT
-IGNORE=POINTYHAT is not supported
-.endif</programlisting>
- </example>
- </sect1>
-
- <sect1 xml:id="dads-sysctl">
- <title>Verwendung von <filename>sysctl</filename></title>
-
- <para>Vom Gebrauch von sysctl wird, außer in Targets,
- abgeraten. Das liegt daran, dass die Auswertung aller
- <literal>makevar</literal>s, wie sie während
- <command>make index</command> verwendet werden, dann den
- Befehl ausführen muss, welches den Prozess weiter
- verlangsamt.</para>
-
- <para>Die Verwendung von &man.sysctl.8; sollte immer durch die
- Variable <varname>SYSCTL</varname> erfolgen, da diese den
- vollständigen Pfad enthält und überschrieben
- werden kann, so dies als notwendig erachtet wird.</para>
- </sect1>
-
- <sect1 xml:id="dads-rerolling-distfiles">
- <title>Erneutes Ausliefern von Distfiles</title>
-
- <para>Manchmal ändern die Autoren der Software den Inhalt
- veröffentlichter Distfiles, ohne den Dateinamen zu
- ändern. Sie müssen überprüfen, ob die
- Änderungen offizell sind und vom Autor durchgeführt
- wurden. Es ist in der Vergangenheit vorgekommen, dass
- Distfiles still und heimlich auf dem Download-Server
- geändert wurden, um Schaden zu verursachen oder die
- Sicherheit der Nutzer zu kompromittieren.</para>
-
- <para>Verschieben Sie das alte Distfile und laden Sie das neue
- herunter. Entpacken Sie es und vergleichen Sie den Inhalt
- mittels &man.diff.1;. Wenn Sie nichts Verdächtiges sehen
- können Sie <filename>distinfo</filename> aktualisieren.
- Stellen Sie sicher, dass die Änderungen in Ihrem PR oder
- Commit-Protokoll zusammengefasst sind, um zu
- Gewährleisten, dass nichts Negatives passiert ist.</para>
-
- <para>Sie können auch mit den Autoren der Software in
- Verbindung treten und sich die Änderungen bestätigen
- lassen.</para>
- </sect1>
-
- <sect1 xml:id="dads-misc">
- <title>Verschiedenes</title>
-
- <para>Die Dateien <filename>pkg-descr</filename> und
- <filename>pkg-plist</filename> sollten beide doppelt
- kontrolliert werden. Wenn Sie einen Port nachprüfen und
- glauben, dass man es besser machen kann, dann verbessern Sie
- ihn bitte.</para>
-
- <para>Bitte kopieren Sie nicht noch mehr Exemplare der
- GNU General Public License in unser System.</para>
-
- <para>Bitte überprüfen Sie alle gesetzlichen Punkte
- gründlich! Lassen Sie uns bitte keine illegale Software
- verbreiten!</para>
- </sect1>
- </chapter>
-
- <chapter xml:id="porting-samplem">
- <title>Beispiel eines <filename>Makefile</filename></title>
-
- <para>Hier ein Beispiel für ein
- <filename>Makefile</filename>, welches als Vorlage für
- einen neuen Port dienen kann. Alle zusätzlichen Kommentare
- in eckigen Klammern müssen entfernt werden!</para>
-
- <para>Es wird empfohlen, die hier gezeigte Formatierung zu
- übernehmen (Reihenfolge der Variablen, Leerzeichen zwischen
- einzelnen Abschnitten, usw.). Dadurch werden die wichtigen
- Informationen sofort ersichtlich. Zur Überprüfung
- Ihres <filename>Makefile</filename>s sollten Sie <link linkend="porting-portlint">portlint</link> verwenden.</para>
-
- <programlisting>[the header...just to make it easier for us to identify the ports.]
-# New ports collection makefile for: xdvi
-[the "version required" line is only needed when the PORTVERSION
- variable is not specific enough to describe the port.]
-# Date created: 26 May 1995
-[this is the person who did the original port to FreeBSD, in particular, the
-person who wrote the first version of this Makefile. Remember, this should
-not be changed when upgrading the port later.]
-# Whom: Satoshi Asami &lt;asami@FreeBSD.org&gt;
-#
-# &dollar;FreeBSD&dollar;
-[ ^^^^^^^^^ This will be automatically replaced with RCS ID string by CVS
-when it is committed to our repository. If upgrading a port, do not alter
-this line back to "&dollar;FreeBSD&dollar;". CVS deals with it automatically.]
-#
-
-[section to describe the port itself and the master site - PORTNAME
- and PORTVERSION are always first, followed by CATEGORIES,
- and then MASTER_SITES, which can be followed by MASTER_SITE_SUBDIR.
- PKGNAMEPREFIX and PKGNAMESUFFIX, if needed, will be after that.
- Then comes DISTNAME, EXTRACT_SUFX and/or DISTFILES, and then
- EXTRACT_ONLY, as necessary.]
-PORTNAME= xdvi
-PORTVERSION= 18.2
-CATEGORIES= print
-[do not forget the trailing slash ("/")!
- if you are not using MASTER_SITE_* macros]
-MASTER_SITES= ${MASTER_SITE_XCONTRIB}
-MASTER_SITE_SUBDIR= applications
-PKGNAMEPREFIX= ja-
-DISTNAME= xdvi-pl18
-[set this if the source is not in the standard ".tar.gz" form]
-EXTRACT_SUFX= .tar.Z
-
-[section for distributed patches -- can be empty]
-PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/
-PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz
-
-[maintainer; *mandatory*! This is the person who is volunteering to
- handle port updates, build breakages, and to whom a users can direct
- questions and bug reports. To keep the quality of the Ports Collection
- as high as possible, we no longer accept new ports that are assigned to
- "ports@FreeBSD.org".]
-MAINTAINER= asami@FreeBSD.org
-COMMENT= A DVI Previewer for the X Window System
-
-[dependencies -- can be empty]
-RUN_DEPENDS= gs:${PORTSDIR}/print/ghostscript
-LIB_DEPENDS= Xpm.5:${PORTSDIR}/graphics/xpm
-
-[this section is for other standard bsd.port.mk variables that do not
- belong to any of the above]
-[If it asks questions during configure, build, install...]
-IS_INTERACTIVE= yes
-[If it extracts to a directory other than ${DISTNAME}...]
-WRKSRC= ${WRKDIR}/xdvi-new
-[If the distributed patches were not made relative to ${WRKSRC}, you
- may need to tweak this]
-PATCH_DIST_STRIP= -p1
-[If it requires a "configure" script generated by GNU autoconf to be run]
-GNU_CONFIGURE= yes
-[If it requires GNU make, not /usr/bin/make, to build...]
-USE_GMAKE= yes
-[If it is an X application and requires "xmkmf -a" to be run...]
-USE_IMAKE= yes
-[et cetera.]
-
-[non-standard variables to be used in the rules below]
-MY_FAVORITE_RESPONSE= "yeah, right"
-
-[then the special rules, in the order they are called]
-pre-fetch:
- i go fetch something, yeah
-
-post-patch:
- i need to do something after patch, great
-
-pre-install:
- and then some more stuff before installing, wow
-
-[and then the epilogue]
-.include &lt;bsd.port.mk&gt;</programlisting>
- </chapter>
-
- <chapter xml:id="keeping-up">
- <title>Auf dem Laufenden bleiben</title>
-
- <para>Die &os; Ports-Sammlung verändert sich ständig.
- Hier finden Sie einige Informationen, wie Sie auf dem Laufenden
- bleiben.</para>
-
- <sect1 xml:id="freshports">
- <title>FreshPorts</title>
-
- <para>Einer der einfachsten Wege, um sich über
- Aktualisierungen, die bereits durchgeführt wurden, zu
- informieren, ist sich bei <link xlink:href="http://www.FreshPorts.org/">FreshPorts</link>
- anzumelden. Sie können dort beliebige Ports
- auswählen, die Sie beobachten möchten. Maintainern
- wird ausdrücklich empfohlen sich anzumelden, da Sie nicht
- nur über Ihre eigenen Änderungen informiert werden,
- sondern auch über die aller anderen Committer (Diese sind
- oft nötig, um über Änderungen des zugrunde
- liegenden Frameworks informiert zu bleiben. Obwohl es
- höflich wäre, vorher über solche
- Änderungen benachrichtigt zu werden, wird es manchmal
- vergessen oder ist einfach nicht möglich. Außerdem
- sind die Änderungen manchmal nur sehr klein. Wir erwarten
- von jedem in solchen Fällen nach bestem Gewissen zu
- urteilen).</para>
-
- <para>Wenn Sie Fresh-Ports benutzen möchten,
- benötigen Sie nur einen Account. Falls Sie sich mit einer
- <literal>@FreeBSD.org</literal> E-Mailadresse registriert
- haben, werden Sie den Anmeldelink am rechten Rand der Seite
- finden. Diejenigen, die bereits einen FeshPorts-Account
- haben, aber nicht Ihre <literal>@FreeBSD.org</literal>
- E-Mailadresse benutzen, können einfach Ihre E-Mailadresse
- auf <literal>@FreeBSD.org</literal> ändern, sich
- anmelden, und dann die Änderung rückgängig
- machen.</para>
-
- <para>FreshPorts bietet auch eine
- Überprüfungsfunktion, die automatisch alle Committs
- zum &os; Ports-Baum testet. Wenn Sie sich für diesen
- Dienst anmelden, werden Sie über alle Fehler, die bei der
- Überprüfung Ihres Committs auftreten,
- informiert.</para>
- </sect1>
-
- <sect1 xml:id="cvsweb">
- <title>Die Webschnittstelle zum Quelltext-Repository</title>
-
- <para>Es ist möglich die Dateien des Quellen-Repositories
- mit Hilfe einer Webschnittstelle durchzusehen.
- Änderungen, die das gesamte Ports-System betreffen,
- werden jetzt in der Datei <link xlink:href="http://cvsweb.FreeBSD.org/ports/CHANGES">CHANGES</link>
- dokumentiert. Solche, die nur bestimmte Ports betreffen, in
- der Datei <link xlink:href="http://cvsweb.FreeBSD.org/ports/UPDATING">UPDATING</link>.
- Aber die maßgebliche Antwort auf alle Fragen liegt
- zweifellos darin, den Quelltext von <link xlink:href="http://cvsweb.FreeBSD.org/ports/Mk/bsd.port.mk">bsd.port.mk</link>
- und dazugehörige Dateien zu lesen.</para>
- </sect1>
-
- <sect1 xml:id="ports-mailling-list">
- <title>Die &os; Ports-Mailingliste</title>
-
- <para>Wenn Sie Maintainer sind, sollten Sie in Erwägung
- ziehen die &a.ports;-Mailingliste zu verfolgen. Wichtige
- Änderungen an der grundlegenden Funktionsweise von Ports
- werden dort angekündigt und dann in
- <filename>CHANGES</filename> committet.</para>
- </sect1>
-
- <sect1 xml:id="build-cluster">
- <title>Der Cluster zum Bauen von &os;-Ports auf <systemitem class="fqdomainname">pointyhat.FreeBSD.org</systemitem></title>
-
- <para>Eine der weniger bekannten Stärken von &os; ist es,
- dass ein ganzer Cluster von Maschinen nur dafür
- reserviert ist, andauernd die Ports-Sammlung zu bauen, und
- zwar für jedes große &os; Release und jede
- Tier-1-Architektur. Die Ergebnisse können Sie unter
- <link xlink:href="http://pointyhat.FreeBSD.org/">package building
- logs and errors</link> finden.</para>
-
- <para>Alle Ports ausser denjenigen, die als
- <varname>IGNORE</varname> markiert sind, werden gebaut. Ports,
- die als <varname>BROKEN</varname> markiert sind, werden
- dennoch ausprobiert, um zu sehen, ob das zugrunde liegende
- Problem gelöst wurde (Dies wird erreicht, indem
- <varname>TRYBROKEN</varname> an das
- <filename>Makefile</filename> des Ports übergeben
- wird).</para>
- </sect1>
-
- <sect1 xml:id="distfile-survey">
- <title>Der &os; Ports-Distfile-Scanner</title>
-
- <para>Der Build-Cluster ist dazu bestimmt, das neueste Release
- jedes Ports aus bereits heruntergeladenden Distfiles zu bauen.
- Da sich das Internet aber ständig verändert, können Distfiles
- schnell verloren gehen. Der <link
- xlink:href="https://portscout.freebsd.org">FreeBSD
- Ports-Distfile-Scanner</link> versucht jeden
- Download-Standort für jeden Port anzufragen, um
- herauszufinden, ob jedes Distfile noch verfügbar ist.
- Maintainer werden gebeten diesen Bericht regelmäßig
- durchzusehen, nicht nur, um den Build-Prozess für die
- Nutzer zu beschleunigen, sondern auch um zu vermeiden, dass
- auf den Maschinen, die freiwillig zur Verfügung gestellt
- werden, um all diese Dateien anzubieten, Ressourcen
- verschwendet werden.</para>
- </sect1>
-
- <sect1 xml:id="portsmon">
- <title>Das &os; Ports-Monitoring-System</title>
-
- <para>Eine weitere praktische Ressource ist das <link xlink:href="http://portsmon.FreeBSD.org">FreeBSD
- Ports-Monitoring-System</link> (auch bekannt als
- <literal>portsmon</literal>). Dieses System besteht aus einer
- Datenbank, die Informationen von mehreren Quellen bezieht und
- es erlaubt diese über ein Webinterface abzufragen.
- Momentan werden die Ports-Problemberichte (PRs), die
- Fehlerprotokolle des Build-Clusters und die einzelnen Dateien
- der Ports-Sammlung verwendet. In Zukunft soll das auf die
- Distfile-Prüfung und weitere Informationsquellen
- ausgedehnt werden.</para>
-
- <para>Als Ausgangspunkt können Sie alle Informationen
- eines Ports mit Hilfe der <link xlink:href="http://portsmon.FreeBSD.org/portoverview.py">Übersicht
- eines Ports</link> betrachten.</para>
-
- <para>Zum Zeitpunkt des Schreibens ist dies die einzige
- Quelle, die GNATS PR-Einträge auf Portnamen abbildet
- (PR-Einreicher geben den Portnamen nicht immer in der
- Zusammenfassung an, obwohl wir uns das wünschen
- würden). Also ist <literal>portsmon</literal> ein guter
- Anlaufpunkt, wenn Sie herausfinden wollen, ob zu einem
- existierenden Port PRs oder Buildfehler eingetragen sind. Oder
- um herauszufinden, ob ein neuer Port, den Sie erstellen
- wollen, bereits eingereicht wurde.</para>
- </sect1>
- </chapter>
-</book>