16754 lines
550 KiB
XML
16754 lines
550 KiB
XML
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
<!DOCTYPE book PUBLIC "-//FreeBSD//DTD DocBook XML V4.5-Based Extension//EN"
|
|
"../../../share/xml/freebsd45.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: 1.1117
|
|
-->
|
|
|
|
<book id="of" lang="de">
|
|
<bookinfo>
|
|
<title>Das FreeBSD Porter-Handbuch</title>
|
|
|
|
<authorgroup>
|
|
<corpauthor>The FreeBSD German Documentation Project</corpauthor>
|
|
</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>
|
|
<holder role="mailto:doc@FreeBSD.org">The FreeBSD German
|
|
Documentation Project</holder>
|
|
</copyright>
|
|
|
|
&trademarks;
|
|
&legalnotice;
|
|
|
|
<releaseinfo>$FreeBSD$</releaseinfo>
|
|
</bookinfo>
|
|
|
|
<chapter 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 – dazu sind keine besonderen Rechte
|
|
nötig.</para>
|
|
</chapter>
|
|
|
|
<chapter 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
|
|
(<makevar><replaceable>VAR</replaceable></makevar>), 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 <ulink
|
|
url="http://wiki.freebsd.org/WantedPorts">Ports-Wunschliste</ulink>
|
|
an und prüfen Sie, ob Sie an einem dieser Ports arbeiten
|
|
können.</para>
|
|
</chapter>
|
|
|
|
<chapter 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
|
|
<makevar>DISTDIR</makevar> 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 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
|
|
#
|
|
# $FreeBSD$
|
|
#
|
|
|
|
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 <bsd.port.mk></programlisting>
|
|
|
|
<para>Versuchen Sie es zu verstehen. Machen Sie sich keine
|
|
Gedanken um die
|
|
<literal>$FreeBSD$</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 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
|
|
<makevar>MAN<replaceable>n</replaceable></makevar>-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
|
|
<makevar>PLIST_FILES</makevar> und
|
|
<makevar>PLIST_DIRS</makevar> 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 <makevar>PLIST_DIRS</makevar>
|
|
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
|
|
<makevar>PLIST_FILES</makevar> benutzt werden können,
|
|
um <link linkend="plist">anspruchsvollere Aufgaben</link> zu
|
|
erfüllen.</para>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 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
|
|
<makevar>IGNOREFILES</makevar> 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 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 <replaceable>Paket-Name</replaceable>
|
|
</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 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
|
|
<filename role="package">ports-mgmt/portlint</filename> 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 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 – 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` > 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 <ulink
|
|
url="&url.articles.contributing;/contrib-how.html#CONTRIB-GENERAL">
|
|
Bug Reports and General Commentary</ulink> 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
|
|
<makevar>COMMENT</makevar>).</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:
|
|
<Kategorie>/<Portname><Kurzbeschreibung des
|
|
Ports></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 <ulink
|
|
url="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?category=ports">
|
|
Liste der PRs, die darauf warten, in &os; committet zu
|
|
werden</ulink>, 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 <ulink
|
|
url="&url.articles.contributors;/contrib-additional.html">Additional
|
|
FreeBSD Contributors</ulink> und in anderen Dateien auf.
|
|
Ist das nicht toll?! <!-- smiley -->:-)</para>
|
|
</sect1>
|
|
</chapter>
|
|
|
|
<chapter 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 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>:></emphasis></para>
|
|
|
|
<procedure>
|
|
<step>
|
|
<para>Das Target <maketarget>fetch</maketarget> wird
|
|
aufgerufen. Es ist dafür verantwortlich
|
|
sicherzustellen, dass der Tarball lokal im
|
|
<makevar>DISTDIR</makevar> verfügbar ist. Falls
|
|
<maketarget>fetch</maketarget> die benötigten Dateien
|
|
in <makevar>DISTDIR</makevar> nicht finden kann,
|
|
durchsucht es die URL <makevar>MASTER_SITES</makevar>,
|
|
welche im Makefile gesetzt ist, ebenso wie unsere
|
|
Haupt-FTP-Seite unter <ulink
|
|
url="ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles">
|
|
ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/
|
|
</ulink>, wo wir genehmigte Distfiles als Backup
|
|
aufbewahren. Danach wird versucht, so eine direkte
|
|
Internetverbindung besteht, dass genannte Distfile mit
|
|
<makevar>FETCH</makevar> herunterzuladen. Falls dies
|
|
gelingt, wird die Datei in <makevar>DISTDIR</makevar>
|
|
für weitere Nutzung abgelegt und fährt
|
|
fort.</para>
|
|
</step>
|
|
|
|
<step>
|
|
<para>Das Target <maketarget>extract</maketarget> wird
|
|
aufgerufen. Es sucht nach den Distfiles Ihres Ports
|
|
(normalerweise ein gzip-komprimierter Tarball) in
|
|
<makevar>DISTDIR</makevar> und entpackt diese in ein
|
|
temporäres Unterverzeichnis, welches von <makevar>
|
|
WRKDIR</makevar> festgelegt wird (standardmäßig
|
|
<filename>work</filename>).</para>
|
|
</step>
|
|
|
|
<step>
|
|
<para>Das Target <maketarget>patch</maketarget> wird
|
|
aufgerufen. Zuerst werden alle in
|
|
<makevar>PATCHFILES</makevar> festgelegten Patches
|
|
eingespielt. Anschließend werden, falls Patches der
|
|
Form
|
|
<filename>patch-<replaceable>*</replaceable></filename> in
|
|
<makevar>PATCHDIR</makevar> (standardmäßig das
|
|
<filename>files</filename>-Unterverzeichnis) gefunden
|
|
werden, diese in alphabetischer Reihenfolge
|
|
eingespielt.</para>
|
|
</step>
|
|
|
|
<step>
|
|
<para>Das Target <maketarget>configure</maketarget> 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 <makevar>HAS_CONFIGURE</makevar> oder
|
|
<makevar>GNU_CONFIGURE</makevar> gesetzt sind, wird
|
|
<filename><makevar>WRKSRC</makevar>/configure
|
|
</filename>ausgeführt.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Falls <makevar>USE_IMAKE</makevar> gesetzt ist,
|
|
wird <makevar>XMKMF</makevar>
|
|
(standardmäßig <command>xmkmf -a</command>)
|
|
ausgeführt.</para>
|
|
</listitem>
|
|
</orderedlist>
|
|
</step>
|
|
|
|
<step>
|
|
<para>Das Target <maketarget>build</maketarget> wird
|
|
aufgerufen. Es ist für das Wechseln in das private
|
|
Arbeitsverzeichnis (<makevar>WRKSRC</makevar>) und das
|
|
Bauen des Ports zuständig. Ist
|
|
<makevar>USE_GMAKE</makevar> 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 <maketarget>pre-<replaceable>
|
|
irgendwas</replaceable></maketarget> oder
|
|
<maketarget>post-<replaceable>irgendwas</replaceable>
|
|
</maketarget> 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 <maketarget>post-extract
|
|
</maketarget> in Ihrem <filename>Makefile</filename>
|
|
definiert und eine Datei <filename>pre-build</filename> im
|
|
<filename>scripts</filename> Unterverzeichnis, so wird das
|
|
Target <maketarget>post-extract</maketarget> 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>
|
|
<maketarget>do-<replaceable>irgendwas</replaceable>
|
|
</maketarget> übernommen. Zum Beispiel sind die Befehle
|
|
zum Entpacken eines Ports im Target
|
|
<maketarget>do-extract</maketarget> zu finden. Falls Sie mit
|
|
einem vorgegebenen Target nicht zufrieden sind, können
|
|
Sie es verändern, indem Sie das Target
|
|
<maketarget>do-<replaceable>irgendwas</replaceable>
|
|
</maketarget> in Ihrem <filename>Makefile</filename> neu
|
|
definieren.</para>
|
|
|
|
<note>
|
|
<para>Die <quote>Haupt</quote>-Targets (z.B.
|
|
<maketarget>extract</maketarget>,
|
|
<maketarget>configure</maketarget> 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
|
|
<maketarget>do-extract</maketarget>, aber niemals die Art,
|
|
wie <maketarget>extract</maketarget> 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 id="slow-sources">
|
|
<title>Den originalen Quelltext besorgen</title>
|
|
|
|
<para>Normalerweise liegt der original Quelltext als gepackte
|
|
Datei (<filename><replaceable>foo</replaceable>.tar.gz
|
|
</filename> oder
|
|
<filename><replaceable>foo</replaceable>.tar.Z</filename>)
|
|
vor. Kopieren Sie diese nach <makevar>DISTDIR</makevar>.
|
|
Nutzen Sie, soweit möglich, immer die Quellen aus dem
|
|
<emphasis>Hauptzweig</emphasis>.</para>
|
|
|
|
<para>Es ist notwendig die Variable
|
|
<makevar>MASTER_SITES</makevar> 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 <hostid>ftp.FreeBSD.org</hostid> abzulegen; dies sollte
|
|
jedoch als letzte Möglichkeit angesehen werden. Das
|
|
Distfile muss in diesem Fall in <filename>~/public_distfiles/
|
|
</filename> eines <hostid>freefall</hostid>-Accounts abgelegt
|
|
werden. Bitten Sie den Committer Ihres Ports dies zu erledigen.
|
|
Er wird außerdem <makevar>MASTER_SITES</makevar> nach
|
|
<makevar>MASTER_SITE_LOCAL</makevar> und <makevar>
|
|
MASTER_SITE_SUBDIR</makevar> auf den
|
|
<hostid>freefall</hostid>-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
|
|
<makevar>MASTER_SITES</makevar> 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
|
|
<makevar>MASTER_SITES</makevar> aufzunehmen.</para>
|
|
|
|
<para>Sind für den Port zusätzlich aus dem Internet
|
|
verfügbare Patches erforderlich, sollten diese ebenfalls
|
|
in <makevar>DISTDIR</makevar> 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 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 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-<replaceable>*</replaceable></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 <makevar>PATCHDIR</makevar> (normalerweise
|
|
<filename>files</filename>) abgelegt sein, von wo sie
|
|
automatisch übernommen werden. Alle Patches müssen
|
|
sich relativ zur <makevar>WRKSRC</makevar>-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><makevar>WRKSRC</makevar>/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>$</literal>) eingefügte Zeichen und
|
|
beginnen üblicherweise mit <literal>$Id</literal>
|
|
oder <literal>$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ß!); – 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 <maketarget>post-extract</maketarget>-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
|
|
<makevar>DOS2UNIX_REGEX</makevar> 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
|
|
<maketarget>makepatch</maketarget> führt dann zu
|
|
einer entsprechenden Patch-Datei im Verzeichnis <filename
|
|
class="directory">files</filename> des Ports.</para>
|
|
</sect1>
|
|
|
|
<sect1 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 id="slow-user-input">
|
|
<title>Handhabung von Benutzereingaben</title>
|
|
|
|
<para>Sollte der Port Eingaben vom Benutzer benötigen,
|
|
muss <makevar>IS_INTERACTIVE</makevar> 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
|
|
<makevar>PACKAGE_BUILDING</makevar>-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 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 id="makefile-source">
|
|
<title>Der originale Quelltext</title>
|
|
|
|
<para>Liegt der Quelltext in <makevar>DISTDIR</makevar> 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
|
|
<makevar>DISTVERSION</makevar>, <makevar>DISTNAME</makevar>,
|
|
<makevar>EXTRACT_CMD</makevar>,
|
|
<makevar>EXTRACT_BEFORE_ARGS</makevar>,
|
|
<makevar>EXTRACT_AFTER_ARGS</makevar>,
|
|
<makevar>EXTRACT_SUFX</makevar>, oder
|
|
<makevar>DISTFILES</makevar> 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 <maketarget>do-extract</maketarget> erzeugen
|
|
und die Standardvorgabe überschreiben; aber dies sollte
|
|
in den wenigsten Fällen, wenn überhaupt, notwendig
|
|
sein.</para>
|
|
</sect1>
|
|
|
|
<sect1 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><makevar>PORTNAME</makevar> und
|
|
<makevar>PORTVERSION</makevar></title>
|
|
|
|
<para>Setzen Sie bitte die Variable
|
|
<makevar>PORTNAME</makevar> auf den Basisnamen Ihres Ports
|
|
und die Variable <makevar>PORTVERSION</makevar> auf dessen
|
|
Versionsnummer.</para>
|
|
</sect2>
|
|
|
|
<sect2 id="makefile-naming-revepoch">
|
|
<title><makevar>PORTREVISION</makevar> und
|
|
<makevar>PORTEPOCH</makevar></title>
|
|
|
|
<sect3>
|
|
<title><makevar>PORTREVISION</makevar></title>
|
|
|
|
<para>Die <makevar>PORTREVISION</makevar>-Variable ist ein
|
|
streng monoton wachsender Wert, welcher auf 0
|
|
zurückgesetzt wird, nachdem
|
|
<makevar>PORTVERSION</makevar> 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 <makevar>PORTREVISION</makevar>
|
|
werden von automatisierten Werkzeugen (z.B.
|
|
&man.pkg.version.1;) genutzt, um anzuzeigen, dass ein
|
|
neues Paket verfügbar ist.</para>
|
|
|
|
<para><makevar>PORTREVISION</makevar> 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
|
|
<makevar>PORTREVISION</makevar> 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
|
|
<makevar>PORTVERSION</makevar> 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 <makevar>PORTREVISION</makevar>
|
|
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
|
|
<makevar>MASTER_SITES</makevar> 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
|
|
<makevar>PORTREVISION</makevar> den Inhalt des Pakets
|
|
wiederspiegelt, ist es nicht notwendig
|
|
<makevar>PORTREVISION</makevar> 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
|
|
<makevar>PORTREVISION</makevar>.</para>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title><makevar>PORTEPOCH</makevar></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
|
|
<makevar>PORTEPOCH</makevar> erhöht werden. Wenn
|
|
<makevar>PORTEPOCH</makevar> größer als 0 ist,
|
|
wird sie an den Namen des Pakets angehängt, wie in
|
|
Abschnitt 0 oberhalb bereits beschrieben.
|
|
<makevar>PORTEPOCH</makevar> 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
|
|
<makevar>PORTEPOCH</makevar> 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 <makevar>PORTEPOCH</makevar>
|
|
für die weitaus überwiegende Zahl der Ports
|
|
nicht verwendet wird und der verantwortungsvolle und
|
|
vorausschauende Umgang mit <makevar>PORTVERSION</makevar>
|
|
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
|
|
<makevar>PORTVERSION</makevar> 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
|
|
<makevar>PORTREVISION</makevar> und
|
|
<makevar>PORTEPOCH</makevar></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><makevar>PKGNAME</makevar> wird zu
|
|
<literal>gtkmumble-0.10</literal>.</para>
|
|
|
|
<para>Ein Sicherheitsloch wurde entdeckt, das einen lokalen
|
|
Patch von FreeBSD erforderlich macht.
|
|
<makevar>PORTREVISION</makevar> wird entsprechend
|
|
erhöht.</para>
|
|
|
|
<programlisting>PORTNAME= gtkmumble
|
|
PORTVERSION= 0.10
|
|
PORTREVISION= 1</programlisting>
|
|
|
|
<para><makevar>PKGNAME</makevar> 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>
|
|
– 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 <makevar>PORTEPOCH</makevar>
|
|
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
|
|
<makevar>PORTREVISION</makevar> auf 0 zurückgesetzt
|
|
(oder aus dem <filename>Makefile</filename>
|
|
entfernt).</para>
|
|
|
|
<programlisting>PORTNAME= gtkmumble
|
|
PORTVERSION= 0.2
|
|
PORTEPOCH= 1</programlisting>
|
|
|
|
<para><makevar>PKGNAME</makevar> wird zu
|
|
<literal>gtkmumble-0.2,1</literal></para>
|
|
|
|
<para>Das nächste Release ist 0.3. Da
|
|
<makevar>PORTEPOCH</makevar> niemals verringert wird,
|
|
sind die Versionsvariablen nun wie folgt:</para>
|
|
|
|
<programlisting>PORTNAME= gtkmumble
|
|
PORTVERSION= 0.3
|
|
PORTEPOCH= 1</programlisting>
|
|
|
|
<para><makevar>PKGNAME</makevar> wird zu
|
|
<literal>gtkmumble-0.3,1</literal></para>
|
|
|
|
<note>
|
|
<para>Falls <makevar>PORTEPOCH</makevar> 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
|
|
<makevar>PORTEPOCH</makevar> ist.</para>
|
|
</note>
|
|
</sect3>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title><makevar>PKGNAMEPREFIX</makevar> und
|
|
<makevar>PKGNAMESUFFIX</makevar></title>
|
|
|
|
<para>Zwei optionale Variablen,
|
|
<makevar>PKGNAMEPREFIX</makevar> und
|
|
<makevar>PKGNAMESUFFIX</makevar>, werden verknüpft mit
|
|
<makevar>PORTNAME</makevar> und
|
|
<makevar>PORTVERSION</makevar>, um
|
|
<makevar>PKGNAME</makevar> 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 <makevar>PORTVERSION</makevar>
|
|
verwenden. Falls das Paket den
|
|
<replaceable>language-</replaceable> oder
|
|
<replaceable>-compiled.specifics</replaceable>-Teil aufweist
|
|
(siehe unten) benutzen Sie <makevar>PKGNAMEPREFIX</makevar>
|
|
oder <makevar>PKGNAMESUFFIX</makevar> respektive. Machen Sie
|
|
diese Variablen nicht zum Bestandteil von
|
|
<makevar>PORTNAME</makevar>!</para>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title><makevar>LATEST_LINK</makevar></title>
|
|
|
|
<para>Die Umgebungsvariable <makevar>LATEST_LINK</makevar> 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
|
|
<makevar>PORTNAME</makevar>,
|
|
<makevar>PKGNAMEPREFIX</makevar> und sogar
|
|
<makevar>PKGNAMESUFFIX</makevar> aufweisen. In solchen
|
|
Fällen sollte die optionale Variable
|
|
<makevar>LATEST_LINK</makevar> 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 <makevar>NO_LATEST_LINK</makevar> 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 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><replaceable><optional>language<optional>_region</optional></optional>-name<optional><optional>-</optional>compiled.specifics</optional>-version.numbers</replaceable></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 <makevar>PKGNAMEPREFIX</makevar>-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 <makevar>PORTNAME</makevar> und
|
|
<makevar>PORTVERSION</makevar> stehen. Der einzige
|
|
Grund, um in <makevar>PORTNAME</makevar> 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 <makevar>PORTNAME</makevar> keine
|
|
versionsspezifischen Bestandteile aufweisen. Es ist
|
|
vollkommen normal, dass viele Ports den gleichen
|
|
<makevar>PORTNAME</makevar> 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
|
|
<makevar>PKGNAMEPREFIX</makevar>,
|
|
<makevar>PKGNAMESUFFIX</makevar> und
|
|
<makevar>LATEST_LINK</makevar>.</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 <makevar>PKGNAMESUFFIX</makevar>
|
|
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– 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.<replaceable>yyyy</replaceable>.<replaceable>mm</replaceable>.<replaceable>dd</replaceable></literal>
|
|
und nicht <literal><replaceable>dd</replaceable>.<replaceable>mm</replaceable>.<replaceable>yyyy</replaceable>
|
|
</literal> oder gar dem nicht Y2K-kompatiblen Format
|
|
<literal>
|
|
<replaceable>yy</replaceable>.<replaceable>mm</replaceable>.<replaceable>dd</replaceable>
|
|
</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><replaceable>yyyy</replaceable></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><makevar>PKGNAMEPREFIX</makevar></entry>
|
|
<entry><makevar>PORTNAME</makevar></entry>
|
|
<entry><makevar>PKGNAMESUFFIX</makevar></entry>
|
|
<entry><makevar>PORTVERSION</makevar></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.<replaceable>yyyy</replaceable>.<replaceable>mm</replaceable>.<replaceable>dd</replaceable></literal>
|
|
als Version verwenden.</para>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 id="makefile-categories">
|
|
<title>Kategorisierung</title>
|
|
|
|
<sect2>
|
|
<title><makevar>CATEGORIES</makevar></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 <makevar>CATEGORIES</makevar> 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 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
|
|
<makevar>COMMENT</makevar> 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></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>afterstep*</filename></entry>
|
|
<entry>Ports für den <ulink
|
|
url="http://www.afterstep.org">AfterStep</ulink>
|
|
Window Manager.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>arabic</filename></entry>
|
|
<entry>Arabische Sprachunterstützung.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>archivers</filename></entry>
|
|
<entry>Archivierungswerkzeuge.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>astro</filename></entry>
|
|
<entry>Ports für Astronomie.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>audio</filename></entry>
|
|
<entry>Sound-Unterstützung.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>benchmarks</filename></entry>
|
|
<entry>Benchmarking-Werkzeuge.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>biology</filename></entry>
|
|
<entry>Software für Biologie.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>cad</filename></entry>
|
|
<entry>CAD-Werkzeuge.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>chinese</filename></entry>
|
|
<entry>Chinesische Sprachunterstützung.</entry>
|
|
<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></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>databases</filename></entry>
|
|
<entry>Datenbanken.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>deskutils</filename></entry>
|
|
<entry>Dinge, die vor der Erfindung des Computers
|
|
auf dem Schreibtisch waren.</entry>
|
|
<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></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>docs*</filename></entry>
|
|
<entry>Meta-Ports für die
|
|
FreeBSD-Dokumentation.</entry>
|
|
<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></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></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>french</filename></entry>
|
|
<entry>Französische Sprachunterstützung.
|
|
</entry>
|
|
<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></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>geography*</filename></entry>
|
|
<entry>geografische Software.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>german</filename></entry>
|
|
<entry>Deutsche Sprachunterstützung.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>gnome*</filename></entry>
|
|
<entry>Ports für <ulink
|
|
url="http://www.gnome.org">GNOME</ulink></entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>gnustep*</filename></entry>
|
|
<entry>Software für GNUstep.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>graphics</filename></entry>
|
|
<entry>grafische Werkzeuge.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>hamradio*</filename></entry>
|
|
<entry>Software für Amateurfunk.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>haskell*</filename></entry>
|
|
<entry>Software für die
|
|
Haskell-Programmiersprache.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>hebrew</filename></entry>
|
|
<entry>Hebräische Sprachunterstützung.
|
|
</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>hungarian</filename></entry>
|
|
<entry>Ungarische Sprachunterstützung.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>ipv6*</filename></entry>
|
|
<entry>IPv6-bezogene Software.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>irc</filename></entry>
|
|
<entry>Internet Relay Chat (IRC)-Werkzeuge.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>japanese</filename></entry>
|
|
<entry>Japanische Sprachunterstützung.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>java</filename></entry>
|
|
<entry>Software für die Java™-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 <ulink
|
|
url="http://www.kde.org">K Desktop Environment
|
|
(KDE)</ulink>-Projekt.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>kld*</filename></entry>
|
|
<entry>Kernelmodule.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>korean</filename></entry>
|
|
<entry>Koreanische Sprachunterstützung.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>lang</filename></entry>
|
|
<entry>Programmiersprachen.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>linux*</filename></entry>
|
|
<entry>Linux-Applikationen und -Werkzeuge.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>lisp*</filename></entry>
|
|
<entry>Software für die Lisp-Programmiersprache.
|
|
</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>mail</filename></entry>
|
|
<entry>Mail-Software.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>math</filename></entry>
|
|
<entry>Numerische Berechnungen und andere
|
|
mathematische Werkzeuge.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>mbone*</filename></entry>
|
|
<entry>MBone-Applikationen.</entry>
|
|
<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></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>net</filename></entry>
|
|
<entry>Verschiedene Netzwerk-Software.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>net-im</filename></entry>
|
|
<entry>Instant Messaging-Software.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>net-mgmt</filename></entry>
|
|
<entry>Netzwerk-Management-Software.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>net-p2p</filename></entry>
|
|
<entry>Peer to peer-Netzwerkprogramme.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>news</filename></entry>
|
|
<entry>USENET News-Software.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>palm</filename></entry>
|
|
<entry>Software für <ulink
|
|
url="http://www.palm.com/">Palm™</ulink>.
|
|
</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>parallel*</filename></entry>
|
|
<entry>Applikationen für paralleles Rechnen.
|
|
</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>pear*</filename></entry>
|
|
<entry>Ports für das Pear PHP-Framework.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>perl5*</filename></entry>
|
|
<entry>Ports, welche <application>Perl</application>
|
|
Version 5 benötigen.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>plan9*</filename></entry>
|
|
<entry>Verschiedene Programme von <ulink
|
|
url="http://www.cs.bell-labs.com/plan9dist/">Plan9</ulink>.
|
|
</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>polish</filename></entry>
|
|
<entry>Polnische Sprachunterstützung.</entry>
|
|
<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></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 <ulink
|
|
url="http://www.python.org/">Python</ulink>.
|
|
</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>ruby*</filename></entry>
|
|
<entry>Software für <ulink
|
|
url="http://www.ruby-lang.org/">Ruby</ulink>.
|
|
</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>rubygems*</filename></entry>
|
|
<entry>Ports für <ulink
|
|
url="http://www.rubygems.org/">RubyGems</ulink>-Pakete.
|
|
</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>russian</filename></entry>
|
|
<entry>Russische Sprachunterstützung.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>scheme*</filename></entry>
|
|
<entry>Software für die
|
|
Scheme-Programmiersprache.</entry>
|
|
<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></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>security</filename></entry>
|
|
<entry>Security-Werkzeuge.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>shells</filename></entry>
|
|
<entry>Shells.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>spanish*</filename></entry>
|
|
<entry>Spanische Sprachunterstützung.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>sysutils</filename></entry>
|
|
<entry>System-Werkzeuge.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>tcl*</filename></entry>
|
|
<entry>Ports, welche Tcl benötigen.</entry>
|
|
<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></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>ukrainian</filename></entry>
|
|
<entry>Ukrainische Sprachunterstützung.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>vietnamese</filename></entry>
|
|
<entry>Vietnamesische Sprachunterstützung.
|
|
</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>windowmaker*</filename></entry>
|
|
<entry>Ports für den WindowMaker Window-Manager.
|
|
</entry>
|
|
<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
|
|
<makevar>USE_XLIB</makevar> (impliziert durch
|
|
<makevar>USE_IMAKE</makevar>) und fügen ihn der
|
|
entsprechenden Kategorie hinzu.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>x11-clocks</filename></entry>
|
|
<entry>X11-Uhren.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>x11-drivers</filename></entry>
|
|
<entry>X11-Treiber.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>x11-fm</filename></entry>
|
|
<entry>X11-Dateimanager.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>x11-fonts</filename></entry>
|
|
<entry>X11-Schriftarten und Werkzeuge.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>x11-servers</filename></entry>
|
|
<entry>X11-Server.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>x11-themes</filename></entry>
|
|
<entry>X11-Themes.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>x11-toolkits</filename></entry>
|
|
<entry>X11-Toolkits.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>x11-wm</filename></entry>
|
|
<entry>X11-Window-Manager.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>xfce*</filename></entry>
|
|
<entry>Ports in Zusammenhang mit <ulink
|
|
url="http://www.xfce.org/">Xfce</ulink>.</entry>
|
|
<entry></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><filename>zope*</filename></entry>
|
|
<entry><ulink
|
|
url="http://www.zope.org/">Zope</ulink>-Unterstützung.
|
|
</entry>
|
|
<entry></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</sect2>
|
|
|
|
<sect2 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
|
|
<makevar>CATEGORIES</makevar>-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
|
|
<makevar>CATEGORIES</makevar>-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 <makevar>CATEGORIES</makevar> 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 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 <ulink
|
|
url="&url.articles.committers-guide;/article.html#PORTS">erheblichen
|
|
Arbeitsaufwand</ulink> 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 <ulink url="&url.articles.committers-guide;/#ports">
|
|
Committers Guide</ulink> 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
|
|
<makevar>CATEGORIES</makevar> der betroffenen Ports
|
|
hinzufügen.</para>
|
|
</sect2>
|
|
|
|
<sect2 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 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><makevar>DISTVERSION/DISTNAME</makevar></title>
|
|
|
|
<para><makevar>DISTNAME</makevar> ist der Name der Applikation
|
|
wie er von den Autoren vergeben wurde.
|
|
<makevar>DISTNAME</makevar> hat als Vorgabe
|
|
<literal>${PORTNAME}-${PORTVERSION}</literal> also
|
|
überschreiben Sie diese Vorgabe nur, wenn es notwendig
|
|
ist. <makevar>DISTNAME</makevar> wird nur an zwei Stellen
|
|
genutzt. Erstens: (<makevar>DISTFILES</makevar>) hat als
|
|
Vorgabe
|
|
<makevar>${DISTNAME}</makevar><makevar>${EXTRACT_SUFX}</makevar>.
|
|
Zweitens: Die Distributionsdatei soll in einem
|
|
Unterverzeichnis namens <makevar>WRKSRC</makevar>
|
|
extrahiert werden, dessen Vorgabe
|
|
<filename>work/<makevar>${DISTNAME}</makevar></filename>
|
|
ist.</para>
|
|
|
|
<para>Manche Drittanbieter-Namen, welche nicht in das Schema
|
|
<literal>${PORTNAME}-${PORTVERSION}</literal> passen,
|
|
können durch Setzen von <makevar>DISTVERSION</makevar>
|
|
automatisch behandelt werden. <makevar>PORTVERSION</makevar>
|
|
und <makevar>DISTNAME</makevar> 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><makevar>DISTVERSION</makevar></entry>
|
|
<entry><makevar>PORTVERSION</makevar></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><makevar>PKGNAMEPREFIX</makevar> und
|
|
<makevar>PKGNAMESUFFIX</makevar> beeinflussen
|
|
<makevar>DISTNAME</makevar> nicht. Beachten Sie bitte
|
|
auch, dass Sie <makevar>DISTNAME</makevar>
|
|
unverändert lassen sollten, falls
|
|
<makevar>WRKSRC</makevar> denselben Wert hat wie
|
|
<filename>work/<makevar>${PORTNAME}-${PORTVERSION}</makevar></filename>
|
|
und gleichzeitig dass Archiv des originalen Quelltextes
|
|
anders benannt ist als
|
|
<makevar>${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}</makevar>.
|
|
Es ist einfacher
|
|
<makevar>DISTFILES</makevar> zu definieren, als
|
|
<makevar>DISTNAME</makevar> und <makevar>WRKSRC</makevar>
|
|
(und möglicherweise <makevar>EXTRACT_SUFX</makevar>)
|
|
zu setzen.</para>
|
|
</note>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title><makevar>MASTER_SITES</makevar></title>
|
|
|
|
<para>Dokumentieren Sie das Verzeichnis der FTP/HTTP-URL,
|
|
welche auf den originalen Tarball zeigt, in der Variable
|
|
<makevar>MASTER_SITES</makevar>. 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 <makevar>FETCH</makevar> 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
|
|
<makevar>MASTER_SITE_<replaceable>*</replaceable></makevar>
|
|
(d.h., <makevar>MASTER_SITE_SOURCEFORGE</makevar>,,
|
|
<makevar>MASTER_SITE_GNU</makevar> und
|
|
<makevar>MASTER_SITE_PERL_CPAN</makevar>) referenzieren.
|
|
Setzen Sie einfach <makevar>MASTER_SITES</makevar> auf eine
|
|
dieser Variablen und <makevar>MASTER_SITE_SUBDIR</makevar>
|
|
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 <makevar>MASTER_SITES</makevar>-Makros</title>
|
|
|
|
<tgroup cols="2">
|
|
<thead>
|
|
<row>
|
|
<entry>Makro</entry>
|
|
|
|
<entry>Erwartetes Unterverzeichnis</entry>
|
|
</row>
|
|
</thead>
|
|
|
|
<tbody>
|
|
<row>
|
|
<entry><makevar>APACHE_JAKARTA</makevar></entry>
|
|
|
|
<entry><makevar>/dist/jakarta/${PORTNAME:S,-,,/,}/source</makevar></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>BERLIOS</makevar></entry>
|
|
|
|
<entry><makevar>/${PORTNAME:L}</makevar></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>CHEESESHOP</makevar></entry>
|
|
|
|
<entry><makevar>/packages/source/source/${DISTNAME:C/(.).*/\1/}/${DISTNAME:C/(.*)-[0-9].*/\1/}</makevar></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>DEBIAN</makevar></entry>
|
|
|
|
<entry><makevar>/debian/pool/main/${PORTNAME:C/^((lib)?.).*$/\1/}/${PORTNAME}</makevar></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>GCC</makevar></entry>
|
|
|
|
<entry><makevar>/pub/gcc/releases/${DISTNAME}</makevar></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>GNOME</makevar></entry>
|
|
|
|
<entry><makevar>/pub/GNOME/sources/${PORTNAME}/${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/}</makevar></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>GNU</makevar></entry>
|
|
|
|
<entry><makevar>/gnu/${PORTNAME}</makevar></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>MOZDEV</makevar></entry>
|
|
|
|
<entry><makevar>/pub/mozdev/${PORTNAME:L}</makevar></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>PERL_CPAN</makevar></entry>
|
|
|
|
<entry><makevar>/pub/CPAN/modules/by-module/${PORTNAME:C/-.*//}</makevar></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>PYTHON</makevar></entry>
|
|
|
|
<entry><makevar>/ftp/python/${PYTHON_PORTVERSION:C/rc[0-9]//}</makevar></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>RUBYFORGE</makevar></entry>
|
|
|
|
<entry><makevar>/${PORTNAME:L}</makevar></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>SAVANNAH</makevar></entry>
|
|
|
|
<entry><makevar>/${PORTNAME:L}</makevar></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>SF</makevar></entry>
|
|
|
|
<entry><makevar>/project/${PORTNAME:L}/${PORTNAME:L}/${PORTVERSION}</makevar></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title><makevar>EXTRACT_SUFX</makevar></title>
|
|
|
|
<para>Falls Sie eine Distributionsdatei haben, die ein
|
|
eigentümliches Suffix nutzt, um die Art der
|
|
Kompression anzuzeigen, dann setzen Sie
|
|
<makevar>EXTRACT_SUFX</makevar>.</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
|
|
<makevar>USE_BZIP2</makevar> und <makevar>USE_ZIP</makevar>
|
|
automatisch <makevar>EXTRACT_SUFX</makevar> auf
|
|
<literal>.tar.bz2</literal> oder <literal>.zip</literal>.
|
|
Falls keine der beiden gesetzt ist, dann verwendet
|
|
<makevar>EXTRACT_SUFX</makevar> die Vorgabe
|
|
<literal>.tar.gz</literal>.</para>
|
|
|
|
<note>
|
|
<para>Sie müssen niemals beide Variablen
|
|
<makevar>EXTRACT_SUFX</makevar> und
|
|
<makevar>DISTFILES</makevar> setzen.</para>
|
|
</note>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title><makevar>DISTFILES</makevar></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
|
|
<makevar>DISTFILES</makevar> 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
|
|
<makevar>DISTFILES</makevar> als Vorgabe
|
|
<literal>${DISTNAME}${EXTRACT_SUFX}</literal>.</para>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title><makevar>EXTRACT_ONLY</makevar></title>
|
|
|
|
<para>Falls nur einige der <makevar>DISTFILES</makevar>
|
|
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
|
|
<makevar>EXTRACT_ONLY</makevar> auf.</para>
|
|
|
|
<programlisting>DISTFILES= source.tar.gz manual.html
|
|
EXTRACT_ONLY= source.tar.gz</programlisting>
|
|
|
|
<para>Falls <emphasis>keine</emphasis> der
|
|
<makevar>DISTFILES</makevar> unkomprimiert sein sollte,
|
|
dann setzen Sie <makevar>EXTRACT_ONLY</makevar> auf einen
|
|
leeren String.</para>
|
|
|
|
<programlisting>EXTRACT_ONLY=</programlisting>
|
|
</sect2>
|
|
|
|
<sect2 id="porting-patchfiles">
|
|
<title><makevar>PATCHFILES</makevar></title>
|
|
|
|
<para>Falls Ihr Port zusätzliche Patches benötigt,
|
|
welche per FTP oder HTTP verfügbar sind, dann setzen
|
|
Sie <makevar>PATCHFILES</makevar> auf den Namen der Dateien
|
|
und <makevar>PATCH_SITES</makevar> auf die URL des
|
|
Verzeichnisses, das diese Patches enthält (das Format
|
|
ist das gleiche wie <makevar>MASTER_SITES</makevar>).</para>
|
|
|
|
<para>Falls ein Patch wegen einiger zusätzlicher
|
|
Pfadnamen nicht relativ zum Anfang des Quelltextbaumes
|
|
(d.h., <makevar>WRKSRC</makevar>) liegt, dann setzen Sie
|
|
bitte <makevar>PATCH_DIST_STRIP</makevar> 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 <makevar>PATCHFILES</makevar>
|
|
verwenden. In diesem Fall fügen Sie den Namen und den
|
|
Ort dieses Tarballs zu <makevar>DISTFILES</makevar> und
|
|
<makevar>MASTER_SITES</makevar>. Benutzen Sie dann die
|
|
<makevar>EXTRA_PATCHES</makevar>-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
|
|
<makevar>PATCHDIR</makevar>-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 <maketarget>pre-clean</maketarget> zu
|
|
entfernen.</para>
|
|
</note>
|
|
</sect2>
|
|
|
|
<sect2 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 <makevar>DISTFILES</makevar> und
|
|
<makevar>PATCHFILES</makevar>. 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 <makevar>MASTER_SITES0</makevar>
|
|
verknüpft anstatt dem in FreeBSD gebräuchlichen
|
|
<makevar>MASTER_SITES</makevar> und
|
|
<filename>beta</filename> mit
|
|
<makevar>MASTER_SITES1</makevar>.</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
|
|
<makevar>DISTFILES</makevar> und 20 Webseiten in der
|
|
Variable <makevar>MASTER_SITES</makevar> vor. Alle Seiten
|
|
sind erschreckend langsam, <filename>beta</filename>
|
|
findet sich auf allen Seiten in
|
|
<makevar>MASTER_SITES</makevar> 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
|
|
<makevar>DISTFILES</makevar> und mehr
|
|
<makevar>MASTER_SITES</makevar>. 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
|
|
<makevar>DISTFILES</makevar> mit einem Komma und
|
|
einem <quote>tag name</quote> abgeschlossen werden.
|
|
Jeder in <makevar>MASTER_SITES</makevar> 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
|
|
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
|
|
<hostid>ftp.example2.com</hostid> 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
|
|
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>:<replaceable>n</replaceable></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 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 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äß <makevar>MASTER_SORT_AWK</makevar>
|
|
sortiert. Alle Gruppen innerhalb von
|
|
<makevar>MASTER_SITES</makevar> und
|
|
<makevar>PATCH_SITES</makevar> werden genauso
|
|
sortiert.</para>
|
|
</listitem>
|
|
|
|
<listitem id="porting-master-sites-n-group-semantics">
|
|
<para>Gruppensemantik kann benutzt werden in den
|
|
folgenden Variablen: <makevar>MASTER_SITES</makevar>,
|
|
<makevar>PATCH_SITES</makevar>,
|
|
<makevar>MASTER_SITE_SUBDIR</makevar>,
|
|
<makevar>PATCH_SITE_SUBDIR</makevar>,
|
|
<makevar>DISTFILES</makevar> und
|
|
<makevar>PATCHFILES</makevar> entsprechend der
|
|
folgenden Syntax:</para>
|
|
|
|
<orderedlist>
|
|
<listitem>
|
|
<para>Elemente mit <makevar>MASTER_SITES</makevar>,
|
|
<makevar>PATCH_SITES</makevar>,
|
|
<makevar>MASTER_SITE_SUBDIR</makevar> und
|
|
<makevar>PATCH_SITE_SUBDIR</makevar> müssen
|
|
mit einem Schrägstrich beendet werden (
|
|
<literal>/</literal>). Falls Elemente zu
|
|
irgendwelchen Gruppen gehören, muss
|
|
<literal>:<replaceable>n</replaceable></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
|
|
<makevar>MASTER_SITE_SUBDIR</makevar> als auch
|
|
<makevar>PATCH_SITE_SUBDIR</makevar>-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
|
|
id="ports-master-sites-n-example-detailed-use-master-site-subdir">
|
|
<title>Ausführliches Beispiel von
|
|
<literal>MASTER_SITES:n</literal> in
|
|
<makevar>MASTER_SITE_SUBDIR</makevar></title>
|
|
|
|
<programlisting>MASTER_SITE_SUBDIR= old:n new/:NEW</programlisting>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>Verzeichnisse innerhalb der Gruppe
|
|
<literal>DEFAULT</literal> ->
|
|
old:n</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Verzeichnisse innerhalb der Gruppe
|
|
<literal>NEW</literal> -> new</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</example>
|
|
|
|
<example
|
|
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><makevar>MASTER_SITE_OVERRIDE</makevar></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><makevar>MASTER_SITE_BACKUP</makevar></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><makevar>MASTER_SITE_OVERRIDE</makevar></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><makevar>MASTER_SITE_BACKUP</makevar></para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><filename>file3</filename> wird
|
|
heruntergeladen von</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para><makevar>MASTER_SITE_OVERRIDE</makevar></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>http://site3/</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><makevar>MASTER_SITE_BACKUP</makevar></para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><filename>file4</filename> wird
|
|
heruntergeladen von</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para><makevar>MASTER_SITE_OVERRIDE</makevar></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><makevar>MASTER_SITE_BACKUP</makevar></para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><filename>file5</filename> wird
|
|
heruntergeladen von</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para><makevar>MASTER_SITE_OVERRIDE</makevar></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><makevar>MASTER_SITE_BACKUP</makevar></para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><filename>file6</filename> wird
|
|
heruntergeladen von</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para><makevar>MASTER_SITE_OVERRIDE</makevar></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>http://site8/</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><makevar>MASTER_SITE_BACKUP</makevar></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.
|
|
<makevar>MASTER_SITE_SOURCEFORGE</makevar>?</para>
|
|
|
|
<para>Lesen Sie <xref
|
|
linkend="ports-master-sites-n-example-detailed-use-master-site-sourceforge"/>.</para>
|
|
|
|
<example
|
|
id="ports-master-sites-n-example-detailed-use-master-site-sourceforge">
|
|
<title>Ausführliches Beispiel von
|
|
<literal>MASTER_SITES:n</literal> mit
|
|
<makevar>MASTER_SITE_SOURCEFORGE</makevar></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
|
|
<makevar>MASTER_SITE_SOURCEFORGE</makevar>
|
|
heruntergeladen.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Wie nutze ich dies mit
|
|
<makevar>PATCH*</makevar>-Variablen.</para>
|
|
|
|
<para>In allen Beispielen wurden
|
|
<makevar>MASTER*</makevar>-Variablen genutzt,
|
|
aber sie funktionieren exakt genauso mit
|
|
<makevar>PATCH*</makevar>-Variablen, wie Sie an
|
|
<xref
|
|
linkend="ports-master-sites-n-example-detailed-use-patch-sites"/>.
|
|
sehen können.</para>
|
|
|
|
<example
|
|
id="ports-master-sites-n-example-detailed-use-patch-sites">
|
|
<title>Vereinfachte Nutzung von
|
|
<literal>MASTER_SITES:n</literal> mit
|
|
<makevar>PATCH_SITES</makevar>.</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>:<replaceable>n</replaceable></literal>
|
|
entsprechend den zuvor erwähnten Syntax-Regeln
|
|
wie in <xref
|
|
linkend="porting-master-sites-n-group-semantics"/>
|
|
gezeigt gibt.</para>
|
|
</listitem>
|
|
|
|
<listitem
|
|
id="porting-master-sites-n-what-changes-in-port-targets">
|
|
<para>Das Target des Port bleibt gleich:
|
|
<maketarget>checksum</maketarget>,
|
|
<maketarget>makesum</maketarget>,
|
|
<maketarget>patch</maketarget>,
|
|
<maketarget>configure</maketarget>,
|
|
<maketarget>build</maketarget> etc.
|
|
Mit der offensichtlichen Ausnahme von
|
|
<maketarget>do-fetch</maketarget>,
|
|
<maketarget>fetch-list</maketarget>,
|
|
<maketarget>master-sites</maketarget>
|
|
und <maketarget>patch-sites</maketarget>.</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para><maketarget>do-fetch</maketarget>: nutzt die
|
|
neue Gruppierung <makevar>DISTFILES</makevar> und
|
|
<makevar>PATCHFILES</makevar> mit ihren darauf
|
|
zutreffenden Gruppenelementen in
|
|
<makevar>MASTER_SITES</makevar> und
|
|
<makevar>PATCH_SITES</makevar> welche zutreffende
|
|
Gruppenelemente sowohl in
|
|
<makevar>MASTER_SITE_SUBDIR</makevar> als auch
|
|
<makevar>PATCH_SITE_SUBDIR</makevar> aufweisen.
|
|
Sehen Sie hierzu <xref
|
|
linkend="ports-master-sites-n-example-detailed-use-complete-example-master-sites"/>.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><maketarget>fetch-list</maketarget>: arbeitet
|
|
wie das alte <maketarget>fetch-list</maketarget>
|
|
mit der Ausnahme, dass es nur wie
|
|
<maketarget>do-fetch</maketarget>
|
|
gruppiert.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><maketarget>master-sites</maketarget>
|
|
und <maketarget>patch-sites</maketarget>:
|
|
(inkompatibel zu älteren Versionen) geben
|
|
nur die Elemente der Gruppe
|
|
<literal>DEFAULT</literal> zurück.
|
|
Beziehungsweise sie führen genau genommen
|
|
die Targets von
|
|
<maketarget>master-sites-default</maketarget> und
|
|
<maketarget>patch-sites-default</maketarget>
|
|
aus.</para>
|
|
|
|
<para>Weiterhin ist der Gebrauch des Target entweder
|
|
von <maketarget>master-sites-all</maketarget> oder
|
|
<maketarget>patch-sites-all</maketarget> der
|
|
direkten Überprüfung von
|
|
<maketarget>MASTER_SITES</maketarget> oder
|
|
<maketarget>PATCH_SITES</maketarget> 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
|
|
<maketarget>master-sites-<replaceable>n</replaceable></maketarget>
|
|
und
|
|
<maketarget>patch-sites-<replaceable>n</replaceable></maketarget>-Targets,
|
|
welche die Elemente der jeweiligen Gruppe
|
|
<replaceable>n</replaceable> innerhalb von
|
|
<makevar>MASTER_SITES</makevar> und
|
|
<makevar>PATCH_SITES</makevar> auflisten.
|
|
Beispielweise werden sowohl
|
|
<maketarget>master-sites-DEFAULT</maketarget> als
|
|
auch <maketarget>patch-sites-DEFAULT</maketarget>
|
|
die Elemente der Gruppe
|
|
<literal>DEFAULT</literal>,
|
|
<maketarget>master-sites-test</maketarget> und
|
|
<maketarget>patch-sites-test</maketarget> der
|
|
Gruppe <literal>test</literal> usw.
|
|
zurückgeben.</para>
|
|
</listitem>
|
|
|
|
<listitem
|
|
id="porting-master-sites-n-new-port-targets-master-sites-all">
|
|
<para>Es gibt das neue Target
|
|
<maketarget>master-sites-all</maketarget> und
|
|
<maketarget>patch-sites-all</maketarget>,
|
|
welche die Arbeit der alten Targets
|
|
<maketarget>master-sites</maketarget> und
|
|
<maketarget>patch-sites</maketarget>
|
|
ü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
|
|
<makevar>MASTER_SITE_BACKUP</makevar> und
|
|
<makevar>MASTER_SITE_OVERRIDE</makevar> auflisten
|
|
wie Gruppen mittels
|
|
<makevar>DISTFILES</makevar> oder
|
|
<makevar>PATCHFILES</makevar> definiert sind.
|
|
Das gleiche gilt entsprechend für
|
|
<maketarget>master-sites-all</maketarget> und
|
|
<maketarget>patch-sites-all</maketarget>.</para>
|
|
</listitem>
|
|
</orderedlist>
|
|
</listitem>
|
|
</orderedlist>
|
|
</sect3>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title><makevar>DIST_SUBDIR</makevar></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 <makevar>DIST_SUBDIR</makevar> auf den Namen des
|
|
Ports (<literal>${PORTNAME}</literal> oder
|
|
<literal>${PKGNAMEPREFIX}${PORTNAME}</literal>
|
|
sollte hervorragend funktionieren). Dies wird
|
|
<makevar>DISTDIR</makevar> von der Vorgabe
|
|
<filename>/usr/ports/distfiles</filename> auf
|
|
<filename>/usr/ports/distfiles/<makevar>DIST_SUBDIR</makevar>
|
|
</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 <makevar>DISTDIR</makevar>
|
|
in Ihrem <makevar>Makefile</makevar> wird dies nicht
|
|
gewährleisten, also nutzen Sie bitte
|
|
<makevar>DIST_SUBDIR</makevar>).</para>
|
|
|
|
<note>
|
|
<para>Dies hat keine Auswirkungen auf die Variable
|
|
<makevar>MASTER_SITES</makevar>, die Sie in Ihrem
|
|
<filename>Makefile</filename> definieren.</para>
|
|
</note>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title><makevar>ALWAYS_KEEP_DISTFILES</makevar></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 <makevar>ALWAYS_KEEP_DISTFILES</makevar> den
|
|
&os; Build Cluster anweisen eine Kopie der Dateien in
|
|
<makevar>DISTFILES</makevar> vorzuhalten. Nutzer dieser
|
|
Ports benötigen generell diese Dateien nicht, daher
|
|
ist es ein gutes Konzept, nur dann die Distfiles zu
|
|
<makevar>DISTFILES</makevar> hinzuzufügen, wenn
|
|
<makevar>PACKAGE_BUILDING</makevar> definiert ist.</para>
|
|
|
|
<example
|
|
id="ports-master-sites-n-example-always-keep-distfiles">
|
|
<title>Nutzung von
|
|
<makevar>ALWAYS_KEEP_DISTFILES</makevar>.</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
|
|
<makevar>DISTFILES</makevar> 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 <makevar>WRKDIR</makevar> extrahiert,
|
|
was für einige Ports zu unbeabsichtigten
|
|
Seiteneffekten führen mag und spezielle
|
|
Behandlung erfordert.</para>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 id="makefile-maintainer">
|
|
<title><makevar>MAINTAINER</makevar></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 <makevar>MAINTAINER</makevar>
|
|
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 <ulink
|
|
url="&url.articles.contributing-ports;/maintain-port.html">
|
|
Die Herausforderung für einen
|
|
Port-Maintainer</ulink>.</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 id="makefile-comment">
|
|
<title><makevar>COMMENT</makevar></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 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><makevar>LIB_DEPENDS</makevar></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><replaceable>:target</replaceable></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
|
|
<makevar>DEPENDS_TARGET</makevar> 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 <maketarget>extract</maketarget>-Target
|
|
und dann innerhalb des
|
|
<maketarget>install</maketarget>-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><makevar>RUN_DEPENDS</makevar></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><replaceable>:target</replaceable></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
|
|
<maketarget>install</maketarget>-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 <makevar>DEPENDS_TARGET</makevar>.</para>
|
|
|
|
<para>Es kommt recht häufig vor, dass
|
|
<makevar>RUN_DEPENDS</makevar> genau dasselbe enthält
|
|
wie <makevar>BUILD_DEPENDS</makevar>, 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
|
|
<makevar>BUILD_DEPENDS</makevar> 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
|
|
<makevar>USE_<replaceable>*</replaceable></makevar>-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>
|
|
<filename role="package">devel/gmake</filename> zu
|
|
<makevar>BUILD_DEPENDS</makevar> hinzu. Um zu verhindern,
|
|
dass solche zusätzlichen Abhängigkeiten
|
|
<makevar>RUN_DEPENDS</makevar> 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><makevar>BUILD_DEPENDS</makevar></title>
|
|
|
|
<para>Diese Variable legt Binärdateien oder Dateien fest,
|
|
die dieser Port zur Erstellung benötigt. Wie
|
|
<makevar>RUN_DEPENDS</makevar> ist es eine Liste von
|
|
<replaceable>path</replaceable>:<replaceable>dir</replaceable><optional><replaceable>:target</replaceable></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 <maketarget>extract</maketarget>-Target
|
|
überprüft.
|
|
Der <replaceable>target</replaceable>-Teil kann
|
|
weggelassen werden, falls er identisch mit der Variable
|
|
<makevar>DEPENDS_TARGET</makevar> ist.</para>
|
|
</note>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title><makevar>FETCH_DEPENDS</makevar></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><replaceable>:target</replaceable></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
|
|
<maketarget>fetch</maketarget>-Target überprüft.
|
|
Der <replaceable>target</replaceable>-Teil kann weggelassen
|
|
werden, falls er identisch mit der Variable
|
|
<makevar>DEPENDS_TARGET</makevar> ist.</para>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title><makevar>EXTRACT_DEPENDS</makevar></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><replaceable>:target</replaceable></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
|
|
<maketarget>extract</maketarget>-Target überprüft.
|
|
Der <replaceable>target</replaceable>-Teil kann weggelassen
|
|
werden, falls er identisch mit der Variable
|
|
<makevar>DEPENDS_TARGET</makevar> ist.</para>
|
|
|
|
<note>
|
|
<para>Nutzen Sie diese Variable nur, wenn die Extraktion
|
|
nicht funktioniert (die Vorgabe nimmt
|
|
<command>gzip</command> an) und nicht mit
|
|
<makevar>USE_ZIP</makevar> oder
|
|
<makevar>USE_BZIP2</makevar> wie in <xref
|
|
linkend="use-vars"/> beschrieben zum Laufen gebracht
|
|
werden kann.</para>
|
|
</note>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title><makevar>PATCH_DEPENDS</makevar></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><replaceable>:target</replaceable></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
|
|
<maketarget>patch</maketarget>-Target überprüft.
|
|
Der <replaceable>target</replaceable>-Teil kann entfallen,
|
|
falls er identisch mit der Variable
|
|
<makevar>DEPENDS_TARGET</makevar> ist.</para>
|
|
</sect2>
|
|
|
|
<sect2 id="use-vars">
|
|
<title><makevar>USE_<replaceable>*</replaceable></makevar>
|
|
</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
|
|
<makevar>USE_<replaceable>*</replaceable></makevar>.
|
|
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
|
|
<makevar>WITH_<replaceable>*</replaceable></makevar> und
|
|
<makevar>WITHOUT_<replaceable>*</replaceable></makevar>
|
|
für diese Zwecke.</para>
|
|
|
|
<note>
|
|
<para>Es ist <emphasis>immer</emphasis> falsch, irgendeine
|
|
<makevar>USE_<replaceable>*</replaceable></makevar>-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
|
|
<makevar>USE_<replaceable>*</replaceable></makevar>-Varibalen
|
|
</title>
|
|
|
|
<tgroup cols="2">
|
|
<thead>
|
|
<row>
|
|
<entry>Variable</entry>
|
|
<entry>Bedeutung</entry>
|
|
</row>
|
|
</thead>
|
|
|
|
<tbody>
|
|
<row>
|
|
<entry><makevar>USE_BZIP2</makevar></entry>
|
|
<entry>Der Tarball dieses Ports wird mit
|
|
<command>bzip2</command> komprimiert.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_ZIP</makevar></entry>
|
|
<entry>Der Tarball des Ports wird mit
|
|
<command>zip</command> komprimiert.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_BISON</makevar></entry>
|
|
<entry>Der Port benutzt <command>bison</command>
|
|
für die Erstellung.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_CDRTOOLS</makevar></entry>
|
|
<entry>Der Port erfordert
|
|
<application>cdrecord</application> entweder von
|
|
<filename role="package">sysutils/cdrtools
|
|
</filename> oder <filename
|
|
role="package">sysutils/cdrtools-cjk</filename>,
|
|
abhängig davon, was der Nutzer vorgibt.
|
|
</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_GCC</makevar></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
|
|
<makevar>CC</makevar> und <makevar>CXX</makevar>
|
|
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 <makevar>*_DEPENDS</makevar>-Variable festgelegt
|
|
werden mit Ausnahme von <makevar>LIB_DEPENDS</makevar>
|
|
durch Anwendung folgender Syntax:</para>
|
|
|
|
<programlisting>p5-Spiffy>=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
|
|
<maketarget>DEPENDS_TARGET</maketarget>, 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
|
|
<makevar>*_DEPENDS</makevar>-Variablen, anstatt
|
|
<makevar>DEPENDS_TARGET</makevar> 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
|
|
<makevar>NOCLEANDEPENDS</makevar> 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
|
|
<makevar>${NONEXISTENT}</makevar> als erstes Feld von
|
|
<makevar>BUILD_DEPENDS</makevar> oder
|
|
<makevar>RUN_DEPENDS</makevar>. 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 id="makefile-masterdir">
|
|
<title><makevar>MASTERDIR</makevar></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 <makevar>MASTERDIR</makevar> verwenden, um anzugeben,
|
|
wo der Rest der Dateien liegt. Benutzen Sie bitte auch eine
|
|
Variable für <link linkend="porting-pkgname">
|
|
<makevar>PKGNAMESUFFIX</makevar></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 && ${RESOLUTION} != 240 && \
|
|
${RESOLUTION} != 300 && ${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><filename role="package">japanese/xdvi300</filename>
|
|
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 <makevar>MASTERDIR</makevar>-Definition teilt dem
|
|
<filename>bsd.port.mk</filename> mit, dass die normalen
|
|
Unterverzeichnisse wie <makevar>FILESDIR</makevar> und
|
|
<makevar>SCRIPTDIR</makevar> 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 id="makefile-manpages">
|
|
<title>Manualpages</title>
|
|
|
|
<para>Die Variablen <makevar>MAN[1-9LN]</makevar>
|
|
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
|
|
<makevar>NO_MANCOMPRESS</makevar> 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
|
|
<makevar>MLINKS</makevar> 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
|
|
<makevar>MLINKS</makevar> 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
|
|
<makevar>MANCOMPRESSED</makevar> 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 <makevar>NO_MANCOMPRESS</makevar>
|
|
beachtet, damit <filename>bsd.port.mk</filename> nichts
|
|
Besonderes auszuführen hat.</para>
|
|
|
|
<para><makevar>MANCOMPRESSED</makevar> wird automatisch auf
|
|
<literal>yes</literal> gesetzt, wenn
|
|
<makevar>USE_IMAKE</makevar> vorgegeben ist und gleichzeitig
|
|
<makevar>NO_INSTALL_MANPAGES</makevar> nicht. Im umgekehrten
|
|
Falle ist <makevar>MANCOMPRESSED</makevar> 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 <makevar>MANPREFIX</makevar> verankert, können
|
|
Sie ihn mit <makevar>MANPREFIX</makevar> 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
|
|
<makevar>MAN<replaceable>sect</replaceable>PREFIX</makevar>
|
|
(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
|
|
<makevar>MANLANG</makevar>. 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
|
|
<makevar>MANLANG</makevar>-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 id="makefile-info">
|
|
<title>Info-Dateien</title>
|
|
|
|
<para>Falls Ihr Paket GNU-Info-Dateien installiert, sollten
|
|
diese in der <makevar>INFO</makevar>-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><makevar>PREFIX</makevar>/<makevar>INFO_PATH</makevar></filename>
|
|
installiert werden. Sie können
|
|
<makevar>INFO_PATH</makevar> ändern, falls Ihr Paket
|
|
einen anderen Ort vorsieht. Jedoch wird dies nicht empfohlen.
|
|
Die Einträge enthalten nur den relativen Pfad zu
|
|
<filename><makevar>PREFIX</makevar>/<makevar>INFO_PATH</makevar></filename>.
|
|
Zum Beispiel installiert <filename
|
|
role="package">lang/gcc34</filename> Info-Dateien nach
|
|
<filename><makevar>PREFIX</makevar>/<makevar>INFO_PATH</makevar>/gcc34</filename>,
|
|
wobei <makevar>INFO</makevar> 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 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><makevar>WITH_<replaceable>*</replaceable></makevar>
|
|
und
|
|
<makevar>WITHOUT_<replaceable>*</replaceable></makevar>
|
|
</title>
|
|
|
|
<para>Diese Variablen sind entworfen worden, um vom
|
|
System-Administrator gesetzt zu werden. Es gibt viele,
|
|
die in <ulink
|
|
url="http://www.freebsd.org/cgi/cvsweb.cgi/ports/KNOBS?rev=HEAD&content-type=text/x-cvsweb-markup"><filename>ports/KNOBS</filename></ulink>
|
|
standardisiert sind.</para>
|
|
|
|
<para>Benennen Sie Schalter bei der Erstellung eines Ports
|
|
nicht programmspezifisch. Verwenden Sie zum Beispiel im
|
|
Avahi-Port <makevar>WITHOUT_MDNS</makevar> anstelle von
|
|
<makevar>WITHOUT_AVAHI_MDNS</makevar>.</para>
|
|
|
|
<note>
|
|
<para>Sie sollten nicht annehmen, dass ein
|
|
<makevar>WITH_<replaceable>*</replaceable></makevar>
|
|
notwendigerweise eine korrespondierende <makevar>
|
|
WITHOUT_<replaceable>*</replaceable></makevar>-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 – 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
|
|
<makevar>WITH_<replaceable>*</replaceable></makevar>
|
|
und <makevar>
|
|
WITHOUT_<replaceable>*</replaceable></makevar>-Variablen
|
|
</title>
|
|
|
|
<tgroup cols="2">
|
|
<thead>
|
|
<row>
|
|
<entry>Variable</entry>
|
|
|
|
<entry>Bedeutung</entry>
|
|
</row>
|
|
</thead>
|
|
|
|
<tbody>
|
|
<row id="knobs-without-nls">
|
|
<entry><makevar>WITHOUT_NLS</makevar></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><makevar>WITH_OPENSSL_BASE</makevar></entry>
|
|
|
|
<entry>Nutze die Version von OpenSSL aus dem
|
|
Basissystem.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>WITH_OPENSSL_PORT</makevar></entry>
|
|
|
|
<entry>Installiert die Version von OpenSSL aus
|
|
<filename
|
|
role="package">security/openssl</filename>, auch
|
|
wenn das Basissystem auf aktuellem Stand
|
|
ist.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>WITHOUT_X11</makevar></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 <ulink
|
|
url="http://www.freebsd.org/cgi/cvsweb.cgi/ports/KNOBS?rev=HEAD&content-type=text/x-cvsweb-markup">KNOBS-Datei</ulink>
|
|
eingesehen werden.</para>
|
|
|
|
<para>Knob-Namen sollten wiederspiegeln, was der Knob
|
|
bedeutet und was er bewirkt. Wenn ein Port einen
|
|
lib-Präfix im <makevar>PORTNAME</makevar> hat,
|
|
dann soll das lib-Präfix im Knob-Namen
|
|
entfallen.</para>
|
|
</sect3>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title><makevar>OPTIONS</makevar></title>
|
|
|
|
<sect3>
|
|
<title>Hintergrund</title>
|
|
|
|
<para>Die <makevar>OPTIONS</makevar>-Variable gibt dem
|
|
Nutzer, der diesen Port installiert, einen Dialog mit
|
|
auswählbaren Optionen und speichert diese in
|
|
<filename>/var/db/ports/<replaceable>portname</replaceable>/options</filename>.
|
|
Bei der nächsten Neuerstellung des Ports werden
|
|
diese Einstellungen wieder verwandt.
|
|
Sie werden sich niemals mehr an all die zwanzig
|
|
<makevar>WITH_<replaceable>*</replaceable></makevar> und
|
|
<makevar>WITHOUT_<replaceable>*</replaceable></makevar>-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/<replaceable>portname</replaceable>/options</filename>
|
|
die Einstellungen prüfen. Falls die Datei nicht
|
|
existiert, werden die Werte von
|
|
<makevar>OPTIONS</makevar> 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
|
|
<makevar>OPTIONS</makevar> 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
|
|
<makevar>OPTIONS</makevar>-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><makevar>OPTIONS</makevar>-Definitionen
|
|
müssen vor der Einbindung von
|
|
<filename>bsd.port.options.mk</filename> erscheinen.
|
|
Die <makevar>WITH_*</makevar> und
|
|
<makevar>WITHOUT_*</makevar>-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 <makevar>USE_*</makevar>-Optionen.</para>
|
|
|
|
<example id="ports-options-simple-use">
|
|
<title>Einfache Anwendung von
|
|
<makevar>OPTIONS</makevar></title>
|
|
|
|
<para><programlisting>OPTIONS= FOO "Enable option foo" On \
|
|
BAR "Support feature bar" Off
|
|
|
|
.include <bsd.port.options.mk>
|
|
|
|
.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 <bsd.port.mk></programlisting></para>
|
|
</example>
|
|
|
|
<example id="ports-options-old-style-use">
|
|
<title>Veraltete Anwendung von
|
|
<makevar>OPTIONS</makevar></title>
|
|
|
|
<para><programlisting>OPTIONS= FOO "Enable option foo" On
|
|
|
|
.include <bsd.port.pre.mk>
|
|
|
|
.if defined(WITHOUT_FOO)
|
|
CONFIGURE_ARGS+= --without-foo
|
|
.else
|
|
CONFIGURE_ARGS+= --with-foo
|
|
.endif
|
|
|
|
.include <bsd.port.post.mk></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
|
|
<makevar>CONFIGURE_ARGS</makevar> 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 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 <makevar>DISTFILES</makevar> 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><makevar>WRKSRC</makevar></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><makevar>NO_WRKSUBDIR</makevar></title>
|
|
|
|
<para>Wenn der Port überhaupt nicht in einem
|
|
Unterverzeichnis extrahiert wird, sollten Sie dies mit dem
|
|
Setzen von <makevar>NO_WRKSUBDIR</makevar> anzeigen.</para>
|
|
|
|
<programlisting>NO_WRKSUBDIR= yes</programlisting>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 id="conflicts">
|
|
<title>Konfliktbehandlung</title>
|
|
|
|
<para>Es gibt drei verschiedene Variablen, um einen
|
|
Konflikt zwischen Paketen und Ports zu dokumentieren:
|
|
<makevar>CONFLICTS</makevar>,
|
|
<makevar>CONFLICTS_INSTALL</makevar> sowie
|
|
<makevar>CONFLICTS_BUILD</makevar>.</para>
|
|
|
|
<note>
|
|
<para><makevar>CONFLICTS</makevar> setzt automatisch die
|
|
Variable <makevar>IGNORE</makevar>, 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
|
|
<makevar>CONFLICTS</makevar>-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><makevar>CONFLICTS_INSTALL</makevar></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 <makevar>CONFLICTS_INSTALL</makevar> 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 <makevar>CONFLICTS</makevar> nicht mit dem
|
|
Paket des Ports selbst übereinstimmt, da ansonsten das
|
|
Erzwingen der Installation durch
|
|
<makevar>FORCE_PKG_REGISTER</makevar> nicht länger
|
|
funktionieren wird.</para>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title><makevar>CONFLICTS_BUILD</makevar></title>
|
|
|
|
<para>Wenn Ihr Port nicht gebaut werden kann, wenn ein
|
|
bestimmter Port bereits installiert ist, geben Sie diesen in
|
|
der Variable <makevar>CONFLICTS_BUILD</makevar> 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><makevar>CONFLICTS</makevar></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 <makevar>CONFLICTS</makevar>
|
|
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 <makevar>CONFLICTS_INSTALL</makevar> nicht mit
|
|
dem Paket des Ports selbst übereinstimmt, da ansonsten das
|
|
Erzwingen der Installation durch
|
|
<makevar>FORCE_PKG_REGISTER</makevar> 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 id="install">
|
|
<title>Installation von Dateien</title>
|
|
|
|
<sect2 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
|
|
<maketarget>*-install</maketarget>-Targets
|
|
sicherzustellen.</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para><makevar>INSTALL_PROGRAM</makevar> ist ein Befehl,
|
|
um binäre Binärdateien zu installieren.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><makevar>INSTALL_SCRIPT</makevar> ist ein Befehl,
|
|
um ausführbare Skripte zu installieren.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><makevar>INSTALL_LIB</makevar> ist ein Befehl
|
|
zur Installation Shared-Libraries.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><makevar>INSTALL_KLD</makevar> ist ein Befehl, mit
|
|
dem Kernelmodule installiert werden können. Einige
|
|
Architekturen haben Probleme mit stripped-Modulen.
|
|
Daher sollten Sie diesen Befehl anstelle von
|
|
<makevar>INSTALL_PROGRAM</makevar> verwenden.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><makevar>INSTALL_DATA</makevar> ist ein Befehl,
|
|
um gemeinsam nutzbare Daten zu installieren.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><makevar>INSTALL_MAN</makevar> 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 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
|
|
<makevar>INSTALL_PROGRAM</makevar>-Makro gleichzeitig
|
|
eine Binärdatei zu installieren und zu strippen
|
|
(beachten Sie den nächsten Abschnitt). Das
|
|
Makro <makevar>INSTALL_LIB</makevar> erledigt das
|
|
gleiche für Shared-Libraries.</para>
|
|
|
|
<para>Wenn Sie eine Datei strippen müssen, aber weder
|
|
das <makevar>INSTALL_PROGRAM</makevar>- noch das
|
|
<makevar>INSTALL_LIB</makevar>-Makro nutzen wollen, dann
|
|
kann <makevar>${STRIP_CMD}</makevar> 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 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 <makevar>WRKSRC</makevar> zu einem Zielverzeichnis unter
|
|
<makevar>PREFIX</makevar>.</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, <makevar>COPYTREE_BIN</makevar>, wird alle
|
|
installierten Dateien ausführbar markieren und damit
|
|
passend für die Installation in
|
|
<filename><makevar>PREFIX</makevar>/bin</filename>
|
|
vorbereiten. Das zweite Makro,
|
|
<makevar>COPYTREE_SHARE</makevar>, setzt keine
|
|
Ausführungsberechtigungen auf Dateien und ist daher
|
|
geeignet für die Installation von Dateien im Target von
|
|
<filename><makevar>PREFIX</makevar>/share</filename>.</para>
|
|
|
|
<programlisting>post-install:
|
|
${MKDIR} ${EXAMPLESDIR}
|
|
(cd ${WRKSRC}/examples/ && ${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/ && ${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><makevar>DATADIR</makevar></filename>
|
|
installieren.</para>
|
|
|
|
<para>Zusätzliche <command>find</command>-Argumente
|
|
können mit dem dritten Argument an die
|
|
<makevar>COPYTREE_*</makevar>-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/ && \
|
|
${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 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><makevar>PREFIX</makevar>/share/doc</filename>.
|
|
Dies kann wie vorstehend im Target des
|
|
<maketarget>post-install</maketarget> geschehen.</para>
|
|
|
|
<para>Legen Sie ein neues Verzeichnis für Ihren Port an.
|
|
Das Verzeichnis sollte wiederspiegeln, was der Port ist.
|
|
Das bedeutet normalerweise <makevar>PORTNAME</makevar>.
|
|
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
|
|
<makevar>PKGNAME</makevar> nutzen.</para>
|
|
|
|
<para>Machen Sie die Installation von der Variablen
|
|
<makevar>NOPORTDOCS</makevar> 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><makevar>DATADIR</makevar> wird expandiert zu
|
|
<filename><makevar>PREFIX</makevar>/share/<makevar>PORTNAME</makevar></filename>.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><makevar>DATADIR_REL</makevar> wird expandiert zu
|
|
<filename>share/<makevar>PORTNAME</makevar></filename>.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><makevar>DOCSDIR</makevar> wird expandiert zu
|
|
<filename><makevar>PREFIX</makevar>/share/doc/<makevar>PORTNAME</makevar></filename>.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><makevar>DOCSDIR_REL</makevar> wird expandiert zu
|
|
<filename>share/doc/<makevar>PORTNAME</makevar></filename>.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><makevar>EXAMPLESDIR</makevar> wird expandiert zu
|
|
<filename><makevar>PREFIX</makevar>/share/examples/<makevar>PORTNAME</makevar></filename>.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><makevar>EXAMPLESDIR_REL</makevar> wird expandiert zu
|
|
<filename>share/examples/<makevar>PORTNAME</makevar></filename>.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<note>
|
|
<para><makevar>NOPORTDOCS</makevar> behandelt nur
|
|
zusätzliche Dokumentation, die in
|
|
<makevar>DOCSDIR</makevar> installiert ist.
|
|
Für normale Manualpages und Info-Seiten
|
|
wird die Variable benutzt.
|
|
Dinge, welche in <makevar>DATADIR</makevar>
|
|
und <makevar>EXAMPLESDIR</makevar> installiert werden,
|
|
legen die Variablen <makevar>NOPORTDATA</makevar> und
|
|
<makevar>NOPORTEXAMPLES</makevar> fest.</para>
|
|
</note>
|
|
|
|
<para>Die Variablen werden nach <makevar>PLIST_SUB</makevar>
|
|
exportiert. Ihre Werte erscheinen dort als Pfadnamen relativ
|
|
zu <filename><makevar>PREFIX</makevar></filename>,
|
|
falls möglich. Das bedeutet, dass
|
|
<filename>share/doc/<makevar>PORTNAME</makevar></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 –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 <makevar>PORTDOCS</makevar> 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 <makevar>DOCSDIR</makevar> sein.
|
|
Wenn Sie also einen Port haben, welcher
|
|
<makevar>PORTDOCS</makevar> benutzt, und Sie haben eine vom
|
|
Standard abweichenden Platz für seine Dokumentation,
|
|
dann müssen Sie die Variable <makevar>DOCSDIR</makevar>
|
|
entsprechend setzen. Wenn ein Verzeichnis in
|
|
<makevar>PORTDOCS</makevar> 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 <makevar>NOPORTDOCS</makevar>
|
|
gesetzt ist, dann werden die Dateien und Verzeichnisse,
|
|
die in <makevar>PORTDOCS</makevar> 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
|
|
<makevar>PORTDOCS</makevar> zu installieren. Ein typisches
|
|
Beispiel für den Gebrauch von
|
|
<makevar>PORTDOCS</makevar> sieht wie folgt aus:</para>
|
|
|
|
<programlisting>PORTDOCS= README.* ChangeLog docs/*</programlisting>
|
|
|
|
<note>
|
|
<para>Die Äquivalente zu <makevar>PORTDOCS</makevar>
|
|
für unter <makevar>DATADIR</makevar> und
|
|
<makevar>EXAMPLESDIR</makevar> installierte Dateien sind
|
|
<makevar>PORTDATA</makevar> beziehungsweise
|
|
<makevar>PORTEXAMPLES</makevar>.</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 id="install-subdirs">
|
|
<title>Unterverzeichnisse mit PREFIX</title>
|
|
|
|
<para>Lassen Sie den Port die Dateien in die richtigen
|
|
Unterverzeichnisse von <makevar>PREFIX</makevar> 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><makevar>PREFIX</makevar>/news</filename>
|
|
als Zielort für die Dateien benutzt werden.</para>
|
|
</sect2>
|
|
</sect1>
|
|
</chapter>
|
|
|
|
<chapter 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 id="porting-shlibs">
|
|
<title>Shared-Libraries</title>
|
|
|
|
<para>Wenn Ihr Port eine oder mehrere Shared-Libraries
|
|
installiert, dann definieren Sie bitte eine
|
|
<makevar>USE_LDCONFIG</makevar> make-Variable,
|
|
die <filename>bsd.port.mk</filename> anweisen wird,
|
|
<literal>${LDCONFIG} -m</literal> auf das
|
|
Verzeichnis, in das die neue Library installiert wird
|
|
(normalerweise
|
|
<filename><makevar>PREFIX</makevar>/lib</filename>),
|
|
während des
|
|
<maketarget>post-install</maketarget>-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
|
|
<makevar>USE_LDCONFIG</makevar> Wert auf eine Liste von
|
|
Verzeichnissen setzen, in die Shared Libraries installiert
|
|
werden sollen. Wenn Ihr Port z.B. diese Bibliotheken nach
|
|
<filename><makevar>PREFIX</makevar>/lib/foo</filename> und
|
|
<filename><makevar>PREFIX</makevar>/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. <filename
|
|
role="package">lang/moscow_ml</filename> für ein
|
|
Beispiel), oder durch einen Shell-Wrapper, der
|
|
<makevar>LD_LIBRARY_PATH</makevar> setzt, bevor er die
|
|
Binärdatei ausführt, wie es <filename
|
|
role="package">www/seamonkey</filename> tut.</para>
|
|
|
|
<para>Wenn Sie 32-Bit Libraries auf 64-Bit Systemen
|
|
installieren, benutzen Sie stattdessen
|
|
<makevar>USE_LDCONFIG32</makevar>.</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
|
|
<makevar>PORTREVISION</makevar> aller Ports, die die
|
|
Shared-Library linken, erhöht werden, damit diese
|
|
mit der neuen Version der Bibliothek neu kompiliert
|
|
werden.</para>
|
|
</sect1>
|
|
|
|
<sect1 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><makevar>NO_PACKAGE</makevar></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 <makevar>DISTFILES</makevar> 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, <makevar>NO_CDROM</makevar> ist ebenfalls
|
|
gesetzt.</para>
|
|
|
|
<para><makevar>NO_PACKAGE</makevar> 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
|
|
<makevar>NO_PACKAGE</makevar>.</para>
|
|
|
|
<para><makevar>NO_PACKAGE</makevar> sollte auf eine
|
|
Zeichenkette gesetzt werden, die den Grund beschreibt,
|
|
warum kein Paket erzeugt werden soll.</para>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title><makevar>NO_CDROM</makevar></title>
|
|
|
|
<para>Diese Variable gibt an, dassobwohl wir binäre
|
|
Pakete erzeugen dürfen – wir weder
|
|
diese Pakete noch die <makevar>DISTFILES</makevar> des
|
|
Ports auf einer CD-ROM (oder ähnlichen Medien)
|
|
verkaufen dürfen. Die <makevar>DISTFILES</makevar>
|
|
des Ports dürfen allerdings immer noch auf FTP/HTTP
|
|
Mirrors.</para>
|
|
|
|
<para>Wenn diese Variable und auch
|
|
<makevar>NO_PACKAGE</makevar> gesetzt ist, dann werden
|
|
nur die <makevar>DISTFILES</makevar> des Ports
|
|
erhältlich sein – und das nur
|
|
mittels FTP/HTTP.</para>
|
|
|
|
<para><makevar>NO_CDROM</makevar> 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><makevar>NOFETCHFILES</makevar></title>
|
|
|
|
<para>Dateien, die in der Variable
|
|
<makevar>NOFETCHFILES</makevar> aufgelistet sind,
|
|
sind von keiner der <makevar>MASTER_SITES</makevar>
|
|
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 <makevar>MASTER_SITES</makevar>
|
|
überprüfen, sollten diese Dateien
|
|
ignorieren und sie nicht melden.</para>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title><makevar>RESTRICTED</makevar></title>
|
|
|
|
<para>Setzen Sie diese Variable, wenn die Lizenz der
|
|
Applikation weder das Spiegeln der
|
|
<makevar>DISTFILES</makevar> der Applikation noch
|
|
das Weiterverbreiten von binären Paketen in
|
|
jedweder Art erlaubt.</para>
|
|
|
|
<para><makevar>NO_CDROM</makevar> oder
|
|
<makevar>NO_PACKAGE</makevar> sollten nicht zusammen
|
|
mit <makevar>RESTRICTED</makevar> gesetzt werden, weil
|
|
letztere Variable die anderen beiden impliziert.</para>
|
|
|
|
<para><makevar>RESTRICTED</makevar> 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
|
|
<makevar>DISTFILES</makevar> manuell herunterladen
|
|
muss – 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><makevar>RESTRICTED_FILES</makevar></title>
|
|
|
|
<para>Wenn <makevar>RESTRICTED</makevar> oder
|
|
<makevar>NO_CDROM</makevar> 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 id="building">
|
|
<title>Build-Mechanismen</title>
|
|
|
|
<sect2 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
|
|
<makevar>-jX</makevar> 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,
|
|
<makevar>MAKE_JOBS_UNSAFE=yes</makevar> zu setzen. Diese
|
|
Variable wird dann verwendet, wenn ein Port bekannterweise
|
|
mit <makevar>-jX</makevar> 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 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><makevar>USE_GMAKE</makevar></entry>
|
|
|
|
<entry>Der Port benötigt <command>gmake</command>
|
|
für den Build.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>GMAKE</makevar></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
|
|
<maketarget>install.man</maketarget>-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
|
|
<maketarget>all</maketarget> als Haupt-Build-Target
|
|
hat, setzen Sie <makevar>ALL_TARGET</makevar>
|
|
entsprechend. Das Gleiche gilt für
|
|
<maketarget>install</maketarget> und
|
|
<makevar>INSTALL_TARGET</makevar>.</para>
|
|
</sect2>
|
|
|
|
<sect2 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=${PREFIX}
|
|
--infodir=${PREFIX}/${INFO_PATH}
|
|
--mandir=${MANPREFIX}/man
|
|
--build=${CONFIGURE_TARGET}</literal>), setzen Sie diese
|
|
zusätzlichen Argumente in
|
|
<makevar>CONFIGURE_ARGS</makevar>.
|
|
Zusätzliche Umgebungsvariablen können
|
|
überdie Variable <makevar>CONFIGURE_ENV</makevar>
|
|
ü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><makevar>GNU_CONFIGURE</makevar></entry>
|
|
|
|
<entry>Der Port benutzt ein
|
|
<command>configure</command>-Skript, um das Bauen
|
|
vorzubereiten.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>HAS_CONFIGURE</makevar></entry>
|
|
|
|
<entry>Wie <makevar>GNU_CONFIGURE</makevar>, nur
|
|
dass kein Standard-Konfigurations-Target zu
|
|
<makevar>CONFIGURE_ARGS</makevar> hinzugefügt
|
|
wird.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>CONFIGURE_ARGS</makevar></entry>
|
|
|
|
<entry>Zusätzliche Argumente für das
|
|
<command>configure</command>-Skript.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>CONFIGURE_ENV</makevar></entry>
|
|
|
|
<entry>Zusätzliche Umgebungsvariablen
|
|
für die Abarbeitung des
|
|
<command>configure</command>-Skriptes.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>CONFIGURE_TARGET</makevar></entry>
|
|
|
|
<entry>Ersetzt das Standard-Konfigurations-Target.
|
|
Vorgabewert ist
|
|
<literal>${MACHINE_ARCH}-portbld-freebsd${OSREL}</literal>.</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</sect2>
|
|
|
|
<sect2 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><makevar>SCONS_ARGS</makevar></entry>
|
|
|
|
<entry>Port-spezifische SCons-Argumente, die der
|
|
SCons-Umgebung übergeben werden.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>SCONS_BUILDENV</makevar></entry>
|
|
|
|
<entry>Variablen, die in der System-Umgebung
|
|
gesetzt werden sollen.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>SCONS_ENV</makevar></entry>
|
|
|
|
<entry>Variablen, die in der SCons-Umgebung
|
|
gesetzt werden sollen.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>SCONS_TARGET</makevar></entry>
|
|
|
|
<entry>Letztes Argument, das SCons übergeben
|
|
wird – ähnlich
|
|
<makevar>MAKE_TARGET</makevar>.</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
|
|
<para>Um <filename>SConstruct</filename> im Quelltext alles,
|
|
was SCons in <makevar>SCONS_ENV</makevar> übergeben
|
|
wird, respektieren zu lassen (das ist hauptsächlich
|
|
<makevar>CC/CXX/CFLAGS/CXXFLAGS</makevar>), 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 id="using-autotools">
|
|
<title>Benutzung von GNU autotools</title>
|
|
|
|
<sect2 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 – 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 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:<replaceable>version</replaceable>
|
|
</literal> dem Build-System, dass es das
|
|
Konfigurationsskript mit der auf dem System
|
|
installierten Kopie von <command>libtool</command>
|
|
patchen soll.
|
|
Die Variable <makevar>GNU_CONFIGURE</makevar> ist
|
|
impliziert. Außerdem werden einige
|
|
make– 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
|
|
<makevar>LIBTOOLFLAGS</makevar> und
|
|
<makevar>LIBTOOLFILES</makevar> 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 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
|
|
<makevar>LIB_DEPENDS</makevar>-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 <makevar>USE_AUTOTOOLS</makevar>-Systems
|
|
zu eliminieren. Es gibt keine weiteren Angaben für
|
|
dieses Werkzeug.</para>
|
|
</sect2>
|
|
|
|
<sect2 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:<replaceable>version</replaceable>
|
|
</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
|
|
<makevar>AUTOCONF_ARGS</makevar> und
|
|
<makevar>AUTOHEADER_ARGS</makevar> 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 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> – 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:<replaceable>version</replaceable></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 <makevar>AUTOMAKE_ARGS</makevar>
|
|
bzw. <makevar>ACLOCAL_ARGS</makevar>, die durch das
|
|
<filename>Makefile</filename> des Ports, falls nötig,
|
|
außer Kraft gesetzt werden kann.</para>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 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
|
|
<makevar>USE_GETTEXT</makevar> auf <literal>yes</literal>,
|
|
und Ihr Port bekommt die Abhängigkeit von <filename
|
|
role="package">devel/gettext</filename>. Der Wert von
|
|
<makevar>USE_GETTEXT</makevar> kann auch die
|
|
benötigte Version der
|
|
<literal>libintl</literal>-Bibliothek angeben, der
|
|
grundlegenden Teil von
|
|
<literal>gettext</literal> – jedoch
|
|
wird von der Benutzung dieser Funktion
|
|
<emphasis>dringend abgeraten</emphasis>:
|
|
Ihr Port sollte einfach nur mit der aktuellen Version von
|
|
<filename role="package">devel/gettext</filename>
|
|
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"><makevar>WITHOUT_NLS</makevar></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 </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>
|
|
<makevar>LOCALBASE</makevar>/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 <filename
|
|
role="package">devel/gettext</filename>. 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 id="using-perl">
|
|
<title>Die Benutzung von <literal>perl</literal></title>
|
|
|
|
<para>Wenn <makevar>MASTER_SITES</makevar> auf
|
|
<makevar>MASTER_SITE_PERL_CPAN</makevar> gesetzt ist,
|
|
dann ist der bevorzugte Wert von
|
|
<makevar>MASTER_SITE_SUBDIR</makevar> 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 <ulink
|
|
url="http://cpan.org/modules/by-module/">cpan.org</ulink>
|
|
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 <makevar>MASTER_SITE_SUBDIR</makevar>
|
|
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><makevar>USE_PERL5</makevar></entry>
|
|
<entry>Bedeutet, dass der Port <literal>perl 5</literal>
|
|
zum Erstellen und zum Ausführen benutzt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_PERL5_BUILD</makevar></entry>
|
|
<entry>Bedeutet, dass der Port <literal>perl 5</literal>
|
|
zum Erstellen benutzt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_PERL5_RUN</makevar></entry>
|
|
<entry>Bedeutet, dass der Port <literal>perl 5</literal>
|
|
zur Laufzeit benutzt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>PERL</makevar></entry>
|
|
<entry>Der gesamte Pfad zu
|
|
<literal>perl 5</literal> – entweder
|
|
im Basissystem oder nachinstalliert über einen
|
|
Port – ohne die Versionsnummer. Benutzen
|
|
Sie diese Variable, wenn Sie <quote>
|
|
<literal>#!</literal></quote>-Zeilen in Skripten
|
|
ersetzen müssen.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>PERL_CONFIGURE</makevar></entry>
|
|
<entry>Perls MakeMaker für die Konfiguration
|
|
benutzen. Dies impliziert
|
|
<makevar>USE_PERL5</makevar>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>PERL_MODBUILD</makevar></entry>
|
|
<entry>Module::Build für configure, build und install
|
|
benutzen. Dies impliziert
|
|
<makevar>PERL_CONFIGURE</makevar>.</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
|
|
<tgroup cols="2">
|
|
<thead>
|
|
<row>
|
|
<entry>Nur lesbare Variablen</entry>
|
|
</row>
|
|
</thead>
|
|
|
|
<tbody>
|
|
<row>
|
|
<entry><makevar>PERL_VERSION</makevar></entry>
|
|
<entry>Die volle Version des installierten
|
|
<literal>perl</literal> (z.B.
|
|
<literal>5.8.9</literal>).</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>PERL_LEVEL</makevar></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><makevar>PERL_ARCH</makevar></entry>
|
|
<entry>Wo <literal>perl</literal> architektur
|
|
abhängige Bibliotheken ablegt. Vorgabe ist
|
|
<literal>${ARCH}-freebsd</literal>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>PERL_PORT</makevar></entry>
|
|
<entry>Name des <literal>perl</literal>-Ports, der
|
|
installiert ist (z.B. <literal>perl5</literal>).</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>SITE_PERL</makevar></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
|
|
<hostid>cpan.org</hostid> verlinken.
|
|
Die bevorzugte URL-Form ist <literal>
|
|
http://search.cpan.org/dist/Module-Name/</literal>
|
|
(inklusive des Slash am Ende).</para>
|
|
</note>
|
|
</sect1>
|
|
|
|
<sect1 id="using-x11">
|
|
<title>Benutzung von X11</title>
|
|
|
|
<sect2 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 <makevar>USE_XORG</makevar> 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 <makevar>USE_GL</makevar>
|
|
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 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 <makevar>USE_XLIB</makevar>,
|
|
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><makevar>USE_XLIB</makevar></entry>
|
|
<entry>Der Port benutzt die X-Bibliotheken. Soll
|
|
nicht mehr verwendet werden - benutzen Sie
|
|
stattdessen eine Liste von Komponenten in
|
|
<makevar>USE_XORG</makevar>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_X_PREFIX</makevar></entry>
|
|
<entry>Soll nicht mehr benutzt werden, ist jetzt
|
|
äquivalent zu <makevar>USE_XLIB</makevar> und
|
|
kann einfach durch letzteres ersetzt
|
|
werden.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_IMAKE</makevar></entry>
|
|
<entry>Der Port benutzt <command>imake</command>.
|
|
Impliziert <makevar>USE_X_PREFIX</makevar>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>XMKMF</makevar></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><makevar>X_IMAKE_PORT</makevar></entry>
|
|
<entry>Ein Port, der <command>imake</command> und einige
|
|
andere Werkzeuge, die zum Erstellen von X11 benutzt
|
|
werden, bereitstellt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>X_LIBRARIES_PORT</makevar></entry>
|
|
<entry>Ein Port, der die X11-Bibliotheken
|
|
bereitstellt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>X_CLIENTS_PORT</makevar></entry>
|
|
<entry>Ein Port, der X11-Clients bereitstellt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>X_SERVER_PORT</makevar></entry>
|
|
<entry>Ein Port, der den X11-Server bereitstellt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>X_FONTSERVER_PORT</makevar></entry>
|
|
<entry>Ein Port, der den Fontserver bereitstellt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>X_PRINTSERVER_PORT</makevar></entry>
|
|
<entry>Ein Port, der den Printserver bereitstellt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>X_VFBSERVER_PORT</makevar></entry>
|
|
<entry>Ein Port, der den virtuellen Framebuffer-Server
|
|
bereitstellt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>X_NESTSERVER_PORT</makevar></entry>
|
|
<entry>Ein Port, der einen nested X-Server
|
|
bereitstellt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>X_FONTS_ENCODINGS_PORT</makevar></entry>
|
|
<entry>Ein Port, der Kodierungen für Schriftarten
|
|
bereitstellt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>X_FONTS_MISC_PORT</makevar></entry>
|
|
<entry>Ein Port, der verschiedene Bitmap-Schriftarten
|
|
bereitstellt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>X_FONTS_100DPI_PORT</makevar></entry>
|
|
<entry>Ein Port, der 100dpi Bitmap-Schriftarten
|
|
bereitstellt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>X_FONTS_75DPI_PORT</makevar></entry>
|
|
<entry>Ein Port, der 75dpi Bitmap-Schriftarten
|
|
bereitstellt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>X_FONTS_CYRILLIC_PORT</makevar></entry>
|
|
<entry>Ein Port, der kyrillische Bitmap-Schriftarten
|
|
bereitstellt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>X_FONTS_TTF_PORT</makevar></entry>
|
|
<entry>Ein Port, der &truetype;-Schriftarten
|
|
bereitstellt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>X_FONTS_TYPE1_PORT</makevar></entry>
|
|
<entry>Ein Port, der Type1-Schriftarten bereitstellt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>X_MANUALS_PORT</makevar></entry>
|
|
<entry>Ein Port, der entwicklerorientierte Manualpages
|
|
bereitstellt.</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
|
|
<example 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 id="x11-motif">
|
|
<title>Ports, die Motif benötigen</title>
|
|
|
|
<para>Wenn Ihr Port eine Motif-Bibliothek benötigt,
|
|
definieren Sie <makevar>USE_MOTIF</makevar> im
|
|
<filename>Makefile</filename>.
|
|
Die Standard-Motif-Implementierung ist <filename
|
|
role="package">x11-toolkits/open-motif</filename>.
|
|
Benutzer können stattdessen <filename
|
|
role="package">x11-toolkits/lesstif</filename> wählen,
|
|
indem Sie die <makevar>WANT_LESSTIF</makevar>-Variable
|
|
setzen.</para>
|
|
|
|
<para>Die Variable <makevar>MOTIFLIB</makevar> wird von
|
|
<filename>bsd.port.mk</filename> auf die entsprechende
|
|
Motif-Bibliothek gesetzt. Bitte patchen Sie den Quelltext
|
|
Ihres Ports, sodass er überall
|
|
<literal>${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>${MOTIFLIB}</literal>.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Wenn der Port in seinem
|
|
<filename>Imakefile</filename>
|
|
<literal>XmClientLibs</literal> benutzt, ersetzen Sie
|
|
das durch <literal>${MOTIFLIB}
|
|
${XTOOLLIB} ${XLIB}</literal>.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>Anmerkung: <makevar>MOTIFLIB</makevar> 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>
|
|
<makevar>LOCALBASE</makevar>/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 id="desktop-entries">
|
|
<title>Desktop-Einträge</title>
|
|
|
|
<para>Desktop-Einträge (<ulink
|
|
url="http://standards.freedesktop.org/desktop-entry-spec/latest/">Freedesktop
|
|
Standard</ulink>) können in Ihrem Port einfach
|
|
über die <makevar>DESKTOP_ENTRIES</makevar>-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
|
|
<ulink
|
|
url="http://standards.freedesktop.org/menu-spec/latest/apa.html">Freedesktop
|
|
Webseite</ulink> abrufbar.
|
|
<makevar>StartupNotify</makevar> 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 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
|
|
<ulink url="http://www.FreeBSD.org/gnome/docs/porting.html">
|
|
umfassende Liste dieser Variablen</ulink> existiert innerhalb
|
|
der Webseite des FreeBSD/GNOME-Projektes.</para>
|
|
</sect1>
|
|
|
|
<sect1 id="using-qt">
|
|
<title>Benutzung von Qt</title>
|
|
|
|
<sect2 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><makevar>USE_QT_VER</makevar></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><makevar>QT_PREFIX</makevar></entry>
|
|
<entry>Enthält den Pfad, wohin Qt installiert ist
|
|
(nur lesbare Variable).</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>MOC</makevar></entry>
|
|
<entry>Enthält den Pfad von <command>moc</command>
|
|
(nur lesbare Variable). Voreingestellt entsprechend des
|
|
<makevar>USE_QT_VER</makevar>-Werts.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>QTCPPFLAGS</makevar></entry>
|
|
<entry>Zusätzliche Compiler-Flags, die über
|
|
<makevar>CONFIGURE_ENV</makevar> an das Qt-Toolkit
|
|
übergeben werden. Voreingestellt entsprechend des
|
|
<makevar>USE_QT_VER</makevar>-Wertes.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>QTCFGLIBS</makevar></entry>
|
|
<entry>Zusätzliche Bibliotheken, die über
|
|
<makevar>CONFIGURE_ENV</makevar> für das Qt-Toolkit
|
|
gelinkt werden sollen. Voreingestellt entsprechend des
|
|
<makevar>USE_QT_VER</makevar>-Wertes.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>QTNONSTANDARD</makevar></entry>
|
|
<entry>Änderungen von
|
|
<makevar>CONFIGURE_ENV</makevar>,
|
|
<makevar>CONFIGURE_ARGS</makevar> und
|
|
<makevar>MAKE_ENV</makevar> 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><makevar>QT_COMPONENTS</makevar></entry>
|
|
<entry>Spezifiziert Tool– und
|
|
Bibliothek-Abhängigkeiten für Qt4.
|
|
Siehe unten für Details.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>UIC</makevar></entry>
|
|
<entry>Enthält den Pfad von <command>uic</command>
|
|
(nur lesbare Variable). Voreingestellt entsprechend des
|
|
<makevar>USE_QT_VER</makevar>-Wertes.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>QMAKE</makevar></entry>
|
|
<entry>Enthält den Pfad von <command>qmake</command>
|
|
(nur lesbare Variable). Voreingestellt entsprechend des
|
|
<makevar>USE_QT_VER</makevar>-Wertes.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>QMAKESPEC</makevar></entry>
|
|
<entry>Enthält den Pfad der Konfigurationsdatei
|
|
für <command>qmake</command>
|
|
(nur lesbare Variable). Voreingestellt entsprechend des
|
|
<makevar>USE_QT_VER</makevar>-Wertes.</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
|
|
<para>Wenn <makevar>USE_QT_VER</makevar> 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 <makevar>USE_QT_VER</makevar> 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 id="qt4-components">
|
|
<title>Komponentenauswahl (nur bei Qt 4.x)</title>
|
|
|
|
<para>Wenn <makevar>USE_QT_VER</makevar> auf 4 gesetzt ist,
|
|
können individuelle Qt4-Tool- und
|
|
Bibliotheksabhängigkeiten in der Variable
|
|
<makevar>QT_COMPONENTS</makevar> 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
|
|
<makevar>_QT_COMPONENTS_ALL</makevar> 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– 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 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 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} && ${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 <makevar>CONFIGURE_ENV</makevar>
|
|
stellt sicher, dass <command>qmake</command> die
|
|
<makevar>QMAKESPEC</makevar>-Variable übergeben
|
|
bekommt, ohne die es nicht funktioniert.
|
|
<command>qmake</command> erzeugt Standard-Makefiles,
|
|
sodass es nicht nötig ist ein eigenes neues
|
|
<maketarget>build</maketarget>-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– 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.
|
|
<filename role="package">editors/texmaker</filename>
|
|
ist hierfür ein Beispiel– 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 id="using-kde">
|
|
<title>Benutzung von KDE</title>
|
|
|
|
<sect2 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><makevar>USE_KDELIBS_VER</makevar></entry>
|
|
<entry>Der Port benutzt KDE-Bibliotheken. Die Variable
|
|
spezifiziert die Major Version von KDE, die benutzt
|
|
werden soll, und impliziert
|
|
<makevar>USE_QT_VER</makevar> der entsprechenden
|
|
Version. Der einzig mögliche Wert ist
|
|
<literal>3</literal>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_KDEBASE_VER</makevar></entry>
|
|
<entry>Der Port benutzt die KDE-Base. Die Variable
|
|
spezifiziert die Major Version von KDE, die benutzt
|
|
werden soll, und impliziert
|
|
<makevar>USE_QT_VER</makevar> der entsprechenden
|
|
Version. Der einzig mögliche Wert ist
|
|
<literal>3</literal>.</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</sect2>
|
|
|
|
<sect2 id="kde4-variables">
|
|
<title>Variablen-Definitionen (KDE 4)</title>
|
|
|
|
<para>Falls Ihre Anwendung von KDE 4 abhängt, weisen Sie
|
|
<makevar>USE_KDE4</makevar> eine Liste mit benötigten
|
|
Komponenten zu. Die am häufigsten gebrauchten sind
|
|
unten aufgelistet (<makevar>_USE_KDE4_ALL</makevar> 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>${KDE4_PREFIX}</literal> statt
|
|
<literal>${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>${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 <makevar>PREFIX</makevar> überschreibt. Die
|
|
Ports übernehmen jedoch, jeden über die
|
|
Umgebungsvariable <envar>MAKEFLAGS</envar> oder
|
|
<application>make</application>-Parameter festgelegten Wert
|
|
für <makevar>PREFIX</makevar>.</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>${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 id="kde4-components-example">
|
|
<title><makevar>USE_KDE4</makevar>-Beispiel</title>
|
|
|
|
<para>Dies ist ein einfaches Beispiel für einen KDE
|
|
4-Port. <makevar>USE_CMAKE</makevar> weist den Port an,
|
|
<application>CMake</application>, ein unter KDE
|
|
4-Projekten weit verbreitetes Konfigurationswerkzeug, zu
|
|
verwenden. <makevar>USE_KDE4</makevar> 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.
|
|
<makevar>USE_KDE4</makevar> impliziert
|
|
<makevar>USE_QT_VER</makevar> nicht. Falls der Port Qt
|
|
4-Komponenten benötigt, sollten
|
|
<makevar>USE_QT_VER</makevar> 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 id="using-java">
|
|
<title>Benutzung von Java</title>
|
|
|
|
<sect2 id="java-variables">
|
|
<title>Variablen-Definitionen</title>
|
|
|
|
<para>Wenn Ihr Port ein Java™ Development Kit (JDK™)
|
|
benötigt, entweder zum Bauen, zur Laufzeit oder
|
|
sogar, um das Distfile auszupacken, dann sollten Sie
|
|
<makevar>USE_JAVA</makevar> setzen.</para>
|
|
|
|
<para>Es gibt mehrere JDKs in der
|
|
Ports-Sammlung– 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 <filename
|
|
role="package">java/jdk16</filename>.</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><makevar>USE_JAVA</makevar></entry>
|
|
<entry>Sollte definiert sein, damit die übrigen
|
|
Variablen irgendeinen Effekt haben.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>JAVA_VERSION</makevar></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><makevar>JAVA_OS</makevar></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><makevar>JAVA_VENDOR</makevar></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><makevar>JAVA_BUILD</makevar></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><makevar>JAVA_RUN</makevar></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><makevar>JAVA_EXTRACT</makevar></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 <makevar>USE_JAVA</makevar>
|
|
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><makevar>JAVA_PORT</makevar></entry>
|
|
<entry>Der Name des JDK-Ports (z.B.
|
|
<literal>'java/diablo-jdk16'</literal>).</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>JAVA_PORT_VERSION</makevar></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 <makevar>
|
|
${JAVA_PORT_VERSION:C/^([0-9])\.([0-9])(.*)$/\1.\2/}</makevar>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>JAVA_PORT_OS</makevar></entry>
|
|
<entry>Das vom JDK-Port benutzte Betriebssystem (z.B.
|
|
<literal>'native'</literal>).</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>JAVA_PORT_VENDOR</makevar></entry>
|
|
<entry>Der Anbieter des JDK-Ports (z.B.
|
|
<literal>'freebsd'</literal>).</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>JAVA_PORT_OS_DESCRIPTION</makevar></entry>
|
|
<entry>Beschreibung des vom JDK-Port benutzten
|
|
Betriebssystems (z.B.
|
|
<literal>'Native'</literal>).</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>JAVA_PORT_VENDOR_DESCRIPTION</makevar></entry>
|
|
<entry>Beschreibung des Anbieters des JDK-Ports (z.B.
|
|
<literal>'FreeBSD Foundation'</literal>).</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>JAVA_HOME</makevar></entry>
|
|
<entry>Pfad zum Installationsverzeichnis des JDK (z.B.
|
|
<filename>'/usr/local/diablo-jdk1.6.0'</filename>).</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>JAVAC</makevar></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><makevar>JAR</makevar></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><makevar>APPLETVIEWER</makevar></entry>
|
|
<entry>Pfad zum <command>appletviewer</command>-Werkzeug
|
|
(z.B. <filename>'/usr/local/diablo-jdk1.6.0/bin/appletviewer'</filename>).</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>JAVA</makevar></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><makevar>JAVADOC</makevar></entry>
|
|
<entry>Pfad zum
|
|
<command>javadoc</command>-Werkzeug.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>JAVAH</makevar></entry>
|
|
<entry>Pfad zum <command>javah</command>-Programm.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>JAVAP</makevar></entry>
|
|
<entry>Pfad zum <command>javap</command>-Programm.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>JAVA_KEYTOOL</makevar></entry>
|
|
<entry>Pfad zum <command>keytool</command>-Werkzeug.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>JAVA_N2A</makevar></entry>
|
|
<entry>Pfad zum
|
|
<command>native2ascii</command>-Werkzeug.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>JAVA_POLICYTOOL</makevar></entry>
|
|
<entry>Pfad zum <command>policytool</command> Programm.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>JAVA_SERIALVER</makevar></entry>
|
|
<entry>Pfad zum
|
|
<command>serialver</command>-Werkzeug.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>RMIC</makevar></entry>
|
|
<entry>Pfad zum RMI Stub/Skeleton-Generator,
|
|
<command>rmic</command>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>RMIREGISTRY</makevar></entry>
|
|
<entry>Pfad zum RMI Registry-Werkzeug,
|
|
<command>rmiregistry</command>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>RMID</makevar></entry>
|
|
<entry>Pfad zum RMI Daemon <command>rmid</command>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>JAVA_CLASSES</makevar></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><makevar>JAVASHAREDIR</makevar></entry>
|
|
<entry>Das Basis-Verzeichnis für alles, was mit Java
|
|
zusammenhängt. Standardmäßig
|
|
<filename>${PREFIX}/share/java</filename>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>JAVAJARDIR</makevar></entry>
|
|
<entry>Das Verzeichnis, wohin JAR-Dateien installiert
|
|
werden sollen. Standardmäßig
|
|
<filename>${JAVASHAREDIR}/classes</filename>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>JAVALIBDIR</makevar></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
|
|
<makevar>PLIST_SUB</makevar> (dokumentiert in
|
|
<xref linkend="plist-sub"/>) als auch in
|
|
<makevar>SUB_LIST</makevar> definiert.</para>
|
|
</sect2>
|
|
|
|
<sect2 id="java-building-with-ant">
|
|
<title>Kompilieren mit Ant</title>
|
|
|
|
<para>Wenn der Port mit Apache Ant kompiliert werden soll,
|
|
muss er <makevar>USE_ANT</makevar> 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 <makevar>MAKE_ENV</makevar>,
|
|
<makevar>MAKE_ARGS</makevar> und
|
|
<makevar>ALL_TARGET</makevar> aufruft. Das ähnelt dem
|
|
<makevar>USE_GMAKE</makevar>-Mechanismus, der in <xref
|
|
linkend="building"/> dokumentiert ist.</para>
|
|
</sect2>
|
|
|
|
<sect2 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
|
|
<makevar>PORTDOCS</makevar>-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
|
|
<makevar>PORTDOCS</makevar>.</para>
|
|
|
|
<para>Der Vorgabewert für <makevar>DATADIR</makevar> ist
|
|
<filename>${PREFIX}/share/${PORTNAME}</filename>. Es ist
|
|
eine gute Idee, <makevar>DATADIR</makevar> für
|
|
Java-Ports stattdessen auf
|
|
<filename>${JAVASHAREDIR}/${PORTNAME}</filename> zu setzen.
|
|
In der Tat wird <makevar>DATADIR</makevar> automatisch zu
|
|
<makevar>PLIST_SUB</makevar> (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 <ulink
|
|
url="http://www.freebsd.org/java/">&os;
|
|
Java-Projekts</ulink> 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 <ulink
|
|
url="http://www.freebsd.org/cgi/cvsweb.cgi/ports/Mk/bsd.java.mk">
|
|
bsd.java.mk CVS Log</ulink>, 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 <makevar>CATEGORIES</makevar> eines Java-Ports,
|
|
die in <xref linkend="makefile-categories"/> erklärt
|
|
wird.</para>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 id="using-php">
|
|
<title>Webanwendungen, Apache und PHP</title>
|
|
|
|
<sect2 id="using-apache">
|
|
<title>Apache</title>
|
|
|
|
<table frame="none">
|
|
<title>Variablen für Ports, die Apache
|
|
verwenden</title>
|
|
|
|
<tgroup cols="2">
|
|
<tbody>
|
|
<row>
|
|
<entry><makevar>USE_APACHE</makevar></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. – Standard ist Version
|
|
<literal>1.3</literal>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>WITH_APACHE2</makevar></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><makevar>APXS</makevar></entry>
|
|
<entry>Vollständiger Pfad zu der
|
|
<command>apxs</command> Binärdatei. Die Variable
|
|
kann neu gesetzt werden.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>HTTPD</makevar></entry>
|
|
<entry>Vollständiger Pfad zu der
|
|
<command>httpd</command> Binärdatei.
|
|
Die Variable kann neu gesetzt werden.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>APACHE_VERSION</makevar></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><makevar>APACHEMODDIR</makevar></entry>
|
|
<entry>Verzeichnis der Apache-Module. Diese Variable wird
|
|
automatisch in pkg-plist ersetzt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>APACHEINCLUDEDIR</makevar></entry>
|
|
<entry>Verzeichnis der Apache Header-Dateien. Diese
|
|
Variable wird automatisch in pkg-plist ersetzt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>APACHEETCDIR</makevar></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><makevar>MODULENAME</makevar></entry>
|
|
<entry>Name des Moduls. Standardwert ist
|
|
<makevar>PORTNAME</makevar>. Beispiel:
|
|
<literal>mod_hello</literal></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>SHORTMODNAME</makevar></entry>
|
|
<entry>Der gekürzte Name des Moduls.
|
|
Standardmäßig
|
|
wird der Wert von <makevar>MODULENAME</makevar>
|
|
übernommen.
|
|
Beispiel: <literal>hello</literal></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>AP_FAST_BUILD</makevar></entry>
|
|
<entry>Verwende <command>apxs</command> zum Kompilieren
|
|
und Installieren des Moduls.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>AP_GENPLIST</makevar></entry>
|
|
<entry>Eine <filename>pkg-plist</filename> wird
|
|
automatisch erzeugt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>AP_INC</makevar></entry>
|
|
<entry>Verzeichnis für zusätzliche
|
|
Header-Dateien, die beim Kompilieren mitverwendet
|
|
werden.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>AP_LIB</makevar></entry>
|
|
<entry>Verzeichnis für zusätzliche
|
|
Bibliothek-Dateien, welche beim Kompilieren
|
|
mitverwendet werden.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>AP_EXTRAS</makevar></entry>
|
|
<entry>Zusätzliche Flags für
|
|
<command>apxs</command>.</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</sect2>
|
|
|
|
<sect2 id="web-apps">
|
|
<title>Webanwendungen</title>
|
|
|
|
<para>Webanwendungen sollten nach <filename>
|
|
<makevar>PREFIX</makevar>/www/<replaceable>programmname
|
|
</replaceable></filename> installiert werden.
|
|
Der Einfachheit halber ist dieser Pfad sowohl im
|
|
<filename>Makefile</filename> als auch in
|
|
<filename>pkg-plist</filename> als
|
|
<makevar>WWWDIR</makevar> verfügbar. Der relative
|
|
Pfad <makevar>PREFIX</makevar> ist hingegen im
|
|
<filename>Makefile</filename> durch die Variable
|
|
<makevar>WWWDIR_REL</makevar> festgelegt.</para>
|
|
|
|
<para>Der Benutzername und die Benutzergruppe,
|
|
mit deren Rechte Webanwendungen laufen, sind in
|
|
<makevar>WWWOWN</makevar> und <makevar>WWWGRP</makevar>
|
|
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 id="php-variables">
|
|
<title>PHP</title>
|
|
|
|
<table frame="none">
|
|
<title>Variablen für Ports, die PHP verwenden</title>
|
|
|
|
<tgroup cols="2">
|
|
<tbody>
|
|
<row>
|
|
<entry><makevar>USE_PHP</makevar></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><makevar>DEFAULT_PHP_VER</makevar></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><makevar>IGNORE_WITH_PHP</makevar></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><makevar>USE_PHPIZE</makevar></entry>
|
|
<entry>Der Port wird als PHP-Erweiterung gebaut.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_PHPEXT</makevar></entry>
|
|
<entry>Der Port wird wie eine PHP-Erweiterung
|
|
behandelt – Installation und
|
|
Eintragung in die PHP-Registry für
|
|
Erweiterungen.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_PHP_BUILD</makevar></entry>
|
|
<entry>Setzt PHP als build-Anhängigkeit.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>WANT_PHP_CLI</makevar></entry>
|
|
<entry>Benötigt die Kommandozeilen-Version von
|
|
PHP.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>WANT_PHP_CGI</makevar></entry>
|
|
<entry>Benötigt die CGI-Version von PHP.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>WANT_PHP_MOD</makevar></entry>
|
|
<entry>Benötigt das Apache-Modul von PHP.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>WANT_PHP_SCR</makevar></entry>
|
|
<entry>Benötigt die Kommandozeilen- oder die
|
|
CGI-Version von PHP.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>WANT_PHP_WEB</makevar></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 <makevar>FILES</makevar>,
|
|
<makevar>TESTS</makevar>, <makevar>DATA</makevar>,
|
|
<makevar>SQLS</makevar>, <makevar>SCRIPTFILES</makevar>,
|
|
<makevar>DOCS</makevar> und <makevar>EXAMPLES</makevar>
|
|
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>
|
|
${PORTSDIR}/devel/pear/bsd.pear.mk</filename>
|
|
muss am Ende des <filename>Makefile</filename>s
|
|
eingebunden werden.</para>
|
|
|
|
<example 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 <bsd.port.pre.mk>
|
|
.include "${PORTSDIR}/devel/pear/bsd.pear.mk"
|
|
.include <bsd.port.post.mk></programlisting>
|
|
|
|
</example>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 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 – entsprechend der durch den
|
|
Benutzer definierbaren Variable
|
|
<makevar>PYTHON_VERSION</makevar>. Häufig bedeutet
|
|
dies, dass der Pfad zum <command>python</command>-Interpreter
|
|
durch den Wert der Variablen <makevar>PYTHON_CMD</makevar>
|
|
ersetzt werden muss.</para>
|
|
|
|
<para>Ports, die Dateien unter
|
|
<makevar>PYTHON_SITELIBDIR</makevar> 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><makevar>USE_PYTHON</makevar></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><makevar>USE_PYDISTUTILS</makevar></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
|
|
<maketarget>do-build</maketarget> und
|
|
<maketarget>do-install</maketarget>-Ziele und eventuell
|
|
auch das <maketarget>do-configure</maketarget>-Ziel
|
|
übergangen, falls <makevar>GNU_CONFIGURE</makevar>
|
|
nicht definiert ist.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>PYTHON_PKGNAMEPREFIX</makevar></entry>
|
|
<entry>Wird als <makevar>PKGNAMEPREFIX</makevar> verwendet,
|
|
um Pakete für unterschiedliche Python-Versionen zu
|
|
trennen. Beispiel: <literal>py24-</literal></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>PYTHON_SITELIBDIR</makevar></entry>
|
|
<entry>Verzeichnis des site-Pakete Baums, der das
|
|
Installationsverzeichnis von Python (üblicherweise
|
|
<makevar>LOCALBASE</makevar>) beinhaltet. Die
|
|
<makevar>PYTHON_SITELIBDIR</makevar>-Variable kann
|
|
sehr nützlich bei der Installation von
|
|
Python-Modulen sein.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>PYTHONPREFIX_SITELIBDIR</makevar></entry>
|
|
<entry>Die präfix-freie Variante von
|
|
<makevar>PYTHON_SITELIBDIR</makevar>. 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><makevar>PYTHON_CMD</makevar></entry>
|
|
<entry>Kommandozeilen-Interpreter für Python mit
|
|
Versionsnummer.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>PYNUMERIC</makevar></entry>
|
|
<entry>Liste der Abhängigkeiten für numerische
|
|
Erweiterungen.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>PYNUMPY</makevar></entry>
|
|
<entry>Liste der Abhängigkeiten für die neue
|
|
numerische Erweiterung numpy.
|
|
(<makevar>PYNUMERIC</makevar> ist vom Anbieter als
|
|
veraltet deklariert)</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>PYXML</makevar></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><makevar>USE_TWISTED</makevar></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><makevar>USE_ZOPE</makevar></entry>
|
|
<entry>Setzt Zope, eine Plattform für Webanwendungen,
|
|
als Abhängigkeit des Ports. Setzt die
|
|
Versionsabhängigkeit von Python auf 2.3. Setzt
|
|
<makevar>ZOPEBASEDIR</makevar> 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 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
|
|
<makevar>USE_TCL</makevar> und <makevar>USE_TK</makevar>. Es
|
|
ist möglich, die gewünschte Version von
|
|
<command>tcl</command> mit der Variable
|
|
<makevar>WITH_TCL_VER</makevar> 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><makevar>USE_TCL</makevar></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 <makevar>INVALID_TCL_VER</makevar> festgelegt
|
|
werden.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_TCL_BUILD</makevar></entry>
|
|
|
|
<entry>Der Port benötigt
|
|
<application>Tcl</application> nur während der
|
|
Zeit, in der er gebaut wird.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_TCL_WRAPPER</makevar></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><makevar>WITH_TCL_VER</makevar></entry>
|
|
|
|
<entry>Benutzerdefinierte Variable, welche die
|
|
gewünschte <application>Tcl</application>-Version
|
|
bestimmt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar><replaceable>PORTNAME</replaceable>_WITH_TCL_VER</makevar></entry>
|
|
|
|
<entry>Gleich wie <makevar>WITH_TCL_VER</makevar>, nur
|
|
portspezifisch.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_TCL_THREADS</makevar></entry>
|
|
|
|
<entry>Fordere threadfähiges
|
|
<application>Tcl/Tk</application>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_TK</makevar></entry>
|
|
|
|
<entry>Der Port benötigt die
|
|
<application>Tk</application>-Bibliothek (nicht die
|
|
Wish-Shell). Impliziert <makevar>USE_TCL</makevar> mit
|
|
dem gleichen Wert. Für weitere Informationen
|
|
siehe die Beschreibung der Variable
|
|
<makevar>USE_TCL</makevar>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_TK_BUILD</makevar></entry>
|
|
|
|
<entry>Analog zur Variable
|
|
<makevar>USE_TCL_BUILD</makevar>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_TK_WRAPPER</makevar></entry>
|
|
|
|
<entry>Analog zur Variable
|
|
<makevar>USE_TCL_WRAPPER</makevar>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>WITH_TK_VER</makevar></entry>
|
|
|
|
<entry>Analog zur Variable
|
|
<makevar>WITH_TCL_VER</makevar> und impliziert
|
|
<makevar>WITH_TCL_VER</makevar> 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 id="using-emacs">
|
|
<title>Emacs benutzen</title>
|
|
|
|
<para>Dieser Abschnitt muss noch geschrieben werden.</para>
|
|
</sect1>
|
|
|
|
<sect1 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><makevar>USE_RUBY</makevar></entry>
|
|
<entry>Der Port benötigt Ruby.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_RUBY_EXTCONF</makevar></entry>
|
|
<entry>Der Port verwendet <filename>extconf.rb</filename>
|
|
für die Konfiguration.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_RUBY_SETUP</makevar></entry>
|
|
<entry>Der Port verwendet <filename>setup.rb</filename>
|
|
für die Konfiguration.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>RUBY_SETUP</makevar></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><makevar>RUBY_PKGNAMEPREFIX</makevar></entry>
|
|
<entry>Wird als <makevar>PKGNAMEPREFIX</makevar> verwendet,
|
|
um Pakete für verschiedene Versionen von Ruby zu
|
|
unterscheiden.</entry>
|
|
<entry><literal>ruby18-</literal></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>RUBY_VERSION</makevar></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><makevar>RUBY_SITELIBDIR</makevar></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><makevar>RUBY_SITEARCHLIBDIR</makevar></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><makevar>RUBY_MODDOCDIR</makevar></entry>
|
|
<entry>Installationsverzeichnis für die Dokumentation
|
|
der Module.</entry>
|
|
<entry><literal>/usr/local/share/doc/ruby18/patsy</literal></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>RUBY_MODEXAMPLESDIR</makevar></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 id="using-sdl">
|
|
<title>SDL verwenden</title>
|
|
|
|
<para>Die Variable <makevar>USE_SDL</makevar> wird für die
|
|
automatische Konfiguration der Abhängigkeiten für Ports
|
|
benutzt, die auf SDL basierende Bibliotheken wie
|
|
<filename role="package">devel/sdl12</filename> und
|
|
<filename role="package">x11-toolkits/sdl_gui</filename>
|
|
verwenden.</para>
|
|
|
|
<para>Die folgenden SDL-Bibliotheken sind derzeit
|
|
bekannt:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>sdl: <filename
|
|
role="package">devel/sdl12</filename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>gfx: <filename
|
|
role="package">graphics/sdl_gfx</filename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>gui: <filename
|
|
role="package">x11-toolkits/sdl_gui</filename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>image: <filename
|
|
role="package">graphics/sdl_image</filename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>ldbad: <filename
|
|
role="package">devel/sdl_ldbad</filename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>mixer: <filename
|
|
role="package">audio/sdl_mixer</filename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>mm: <filename
|
|
role="package">devel/sdlmm</filename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>net: <filename
|
|
role="package">net/sdl_net</filename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>sound: <filename
|
|
role="package">audio/sdl_sound</filename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>ttf: <filename
|
|
role="package">graphics/sdl_ttf</filename></para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>Falls ein Port z.B. von
|
|
<filename role="package">net/sdl_net</filename> und
|
|
<filename role="package">audio/sdl_mixer</filename>
|
|
abhängt, so wäre die Syntax:</para>
|
|
|
|
<programlisting>USE_SDL= net mixer</programlisting>
|
|
|
|
<para>Die Abhängigkeit von
|
|
<filename role="package">devel/sdl12</filename>, die durch
|
|
<filename role="package">net/sdl_net</filename> und
|
|
<filename role="package">audio/sdl_mixer</filename> entsteht,
|
|
wird automatisch zum Port hinzugefügt.</para>
|
|
|
|
<para>Falls <makevar>USE_SDL</makevar> im Port verwendet wird,
|
|
so wird automatisch:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>die Abhängigkeit von
|
|
<application>sdl12-config</application> zu
|
|
<makevar>BUILD_DEPENDS</makevar> hinzugefügt</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>die Variable <makevar>SDL_CONFIG</makevar> zu
|
|
<makevar>CONFIGURE_ENV</makevar> hinzugefügt</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>die Abhängigkeit der ausgewählten
|
|
Bibliotheken zu <makevar>LIB_DEPENDS</makevar>
|
|
hinzugefügt</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>Um zu überprüfen, ob die SDL-Bibliotheken
|
|
verfügbar sind, kann die Variable
|
|
<makevar>WANT_SDL</makevar> verwendet werden:</para>
|
|
|
|
<programlisting>WANT_SDL=yes
|
|
|
|
.include <bsd.port.pre.mk>
|
|
|
|
.if ${HAVE_SDL:Mmixer}!=""
|
|
USE_SDL+= mixer
|
|
.endif
|
|
|
|
.include <bsd.port.post.mk></programlisting>
|
|
|
|
</sect1>
|
|
|
|
<sect1 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 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 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 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><makevar>USE_WX</makevar></entry>
|
|
<entry>Liste der Versionen, die der Port verwenden
|
|
kann</entry>
|
|
<entry>Alle verfügbaren Versionen</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_WX_NOT</makevar></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><filename
|
|
role="package">x11-toolkits/wxgtk24</filename></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>2.6</literal></entry>
|
|
<entry><filename
|
|
role="package">x11-toolkits/wxgtk26</filename></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>2.8</literal></entry>
|
|
<entry><filename
|
|
role="package">x11-toolkits/wxgtk28</filename></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><makevar>WANT_WX_VER</makevar></entry>
|
|
<entry>den Port</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>WITH_WX_VER</makevar></entry>
|
|
<entry>den Benutzer</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</sect2>
|
|
|
|
<sect2 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
|
|
<makevar>WX_COMPS</makevar> 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 – äquivalent zu
|
|
<makevar>BUILD_DEPENDS</makevar></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>run</literal></entry>
|
|
<entry>Komponente wird zum Ausführen
|
|
benötigt – äquivalent zu
|
|
<makevar>RUN_DEPENDS</makevar></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>lib</literal></entry>
|
|
<entry>Komponente wird zum Bau und Ausführen
|
|
benötigt – äquivalent zu
|
|
<makevar>LIB_DEPENDS</makevar></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
|
|
<para>Die Standardwerte für die einzelnen Komponenten
|
|
sind in der folgenden Tabelle aufgeführt:</para>
|
|
|
|
<table 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 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 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 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><makevar>WX_UNICODE</makevar></entry>
|
|
<entry>Der Port funktioniert
|
|
<emphasis>ausschließlich</emphasis> mit der
|
|
Unicode-Version</entry>
|
|
<entry>den Port</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>WANT_UNICODE</makevar></entry>
|
|
<entry>Der Port funktioniert in beiden
|
|
Versionen – bevorzugt wird jedoch
|
|
Unicode</entry>
|
|
<entry>den Port</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>WITH_UNICODE</makevar></entry>
|
|
<entry>Der Port verwendet die Unicode-Version</entry>
|
|
<entry>den Benutzer</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>WITHOUT_UNICODE</makevar></entry>
|
|
<entry>Der Port verwendet, falls unterstützt, die
|
|
normale Version (falls <makevar>WX_UNICODE</makevar>
|
|
nicht definiert ist)</entry>
|
|
<entry>den Benutzer</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
|
|
<warning>
|
|
<para>Die Variable <makevar>WX_UNICODE</makevar> 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
|
|
<makevar>WANT_UNICODE</makevar> stattdessen.</para>
|
|
</warning>
|
|
</sect2>
|
|
|
|
<sect2 id="wx-version-detection">
|
|
<title>Feststellen der installierten Version</title>
|
|
|
|
<para>Um eine bereits installierte Version zu finden, muss
|
|
<makevar>WANT_WX</makevar> definiert werden. Falls diese
|
|
Variable nicht auf eine bestimmte Versionsnummer gesetzt
|
|
wird, werden die Komponenten einen Suffix mit der
|
|
Versionsnummer tragen. Die Variable
|
|
<makevar>HAVE_WX</makevar> wird gesetzt, falls eine
|
|
installierte Version vorgefunden wurde.</para>
|
|
|
|
<example id="wx-ver-det-example">
|
|
<title>Installierte
|
|
<application>wxWidgets</application>-Versionen
|
|
und –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 <bsd.port.pre.mk>
|
|
|
|
.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 <bsd.port.pre.mk>
|
|
|
|
.if defined(WITH_WXPYTHON) || ${HAVE_WX:Mpython} != ""
|
|
WX_COMPS+= python
|
|
CONFIGURE_ARGS+=--enable-wxpython
|
|
.endif</programlisting>
|
|
</example>
|
|
</sect2>
|
|
|
|
<sect2 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><makevar>WX_CONFIG</makevar></entry>
|
|
<entry>Pfad zum <application>wxWidgets</application>
|
|
<command>wx-config</command>-Skript (mit
|
|
unterschiedlichem Namen)</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>WXRC_CMD</makevar></entry>
|
|
<entry>Pfad zum <application>wxWidgets</application>
|
|
<command>wxrc</command>-Programm (mit
|
|
unterschiedlichem Namen)</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>WX_VERSION</makevar></entry>
|
|
<entry>Version der <application>wxWidgets</application>, die
|
|
verwendet werden soll (z.B. <literal>2.6</literal>)</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>WX_UNICODE</makevar></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 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 <makevar>WX_PREMK</makevar> definiert
|
|
werden.</para>
|
|
|
|
<important>
|
|
<para>Falls <makevar>WX_PREMK</makevar> 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 id="wx-premk-example">
|
|
<title>Verwendung von
|
|
<application>wxWidgets</application>-Variablen
|
|
in Kommandos</title>
|
|
|
|
<para>Der folgende Ausschnitt zeigt die Verwendung von
|
|
<makevar>WX_PREMK</makevar> 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 <bsd.port.pre.mk>
|
|
|
|
.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
|
|
<makevar>WX_PREMK</makevar> verwendet werden.</para>
|
|
</note>
|
|
</sect2>
|
|
|
|
<sect2 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 <makevar>WX_CONF_ARGS</makevar> benutzt
|
|
werden.</para>
|
|
|
|
<table frame="none">
|
|
<title>Zulässige Werte für
|
|
<makevar>WX_CONF_ARGS</makevar></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 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 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 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 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><makevar>USE_LUA</makevar></entry>
|
|
<entry>Liste der Versionen, welche der Port verwenden
|
|
kann</entry>
|
|
<entry>Alle verfügbaren Versionen</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_LUA_NOT</makevar></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><filename
|
|
role="package">lang/lua4</filename></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>5.0</literal></entry>
|
|
<entry><filename
|
|
role="package">lang/lua50</filename></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>5.1</literal></entry>
|
|
<entry><filename
|
|
role="package">lang/lua</filename></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><makevar>WANT_LUA_VER</makevar></entry>
|
|
<entry>den Port</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>WITH_LUA_VER</makevar></entry>
|
|
<entry>den Benutzer</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
|
|
<example 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
|
|
<makevar>WITH_LUA_VER</makevar> überschrieben
|
|
werden.</para>
|
|
|
|
<programlisting>USE_LUA= 5.0-5.1
|
|
WANT_LUA_VER= 5.0</programlisting>
|
|
</example>
|
|
</sect2>
|
|
|
|
<sect2 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
|
|
<makevar>LUA_COMPS</makevar> 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 – äquivalent zu
|
|
<makevar>BUILD_DEPENDS</makevar></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>run</literal></entry>
|
|
<entry>Komponente wird zum Ausführen
|
|
benötigt – äquivalent zu
|
|
<makevar>RUN_DEPENDS</makevar></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>lib</literal></entry>
|
|
<entry>Komponente wird zum Bau und zum Ausführen
|
|
benötigt – äquivalent zu
|
|
<makevar>LIB_DEPENDS</makevar></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
|
|
<para>Die Standardwerte für die einzelnen Komponenten
|
|
sind in der folgenden Tabelle aufgeführt:</para>
|
|
|
|
<table 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 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 id="lua-version-detection">
|
|
<title>Feststellen der installierten Version</title>
|
|
|
|
<para>Um eine bereits installierte Version zu finden, muss
|
|
<makevar>WANT_LUA</makevar> definiert werden. Falls diese
|
|
Variable nicht auf eine bestimmte Versionsnummer gesetzt
|
|
wird, werden die Komponenten einen Suffix mit der
|
|
Versionsnummer tragen. Die Variable
|
|
<makevar>HAVE_LUA</makevar> wird gesetzt, falls eine
|
|
installierte Version vorgefunden wurde.</para>
|
|
|
|
<example id="lua-ver-det-example">
|
|
<title>Installierte
|
|
<application>Lua</application>-Versionen
|
|
und– 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 <bsd.port.pre.mk>
|
|
|
|
.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 <bsd.port.pre.mk>
|
|
|
|
.if defined(WITH_TOLUA) || ${HAVE_LUA:Mtolua} != ""
|
|
LUA_COMPS+= tolua
|
|
CONFIGURE_ARGS+=--enable-tolua
|
|
.endif</programlisting>
|
|
</example>
|
|
</sect2>
|
|
|
|
<sect2 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><makevar>LUA_VER</makevar></entry>
|
|
<entry>Die <application>Lua</application>-Version, die
|
|
verwendet wird (z.B. <literal>5.1</literal>)</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>LUA_VER_SH</makevar></entry>
|
|
<entry>Die Hauptversion für
|
|
shared-<application>Lua</application>-Bibliotheken (z.B.
|
|
<literal>1</literal>)</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>LUA_VER_STR</makevar></entry>
|
|
<entry>Die <application>Lua</application>-Version ohne die
|
|
Punkte (z.B. <literal>51</literal>)</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>LUA_PREFIX</makevar></entry>
|
|
<entry>Der Präfix, unter dem
|
|
<application>Lua</application> (und Komponenten)
|
|
installiert ist</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>LUA_SUBDIR</makevar></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><makevar>LUA_INCDIR</makevar></entry>
|
|
<entry>Das Verzeichnis, in dem
|
|
<application>Lua</application>- und
|
|
<application>tolua</application>-Header-Dateien
|
|
installiert sind</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>LUA_LIBDIR</makevar></entry>
|
|
<entry>Das Verzeichnis, in dem
|
|
<application>Lua</application>– und
|
|
<application>tolua</application>-Bibliotheken
|
|
installiert sind</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>LUA_MODLIBDIR</makevar></entry>
|
|
<entry>Das Verzeichnis, in dem
|
|
<application>Lua</application> Modul-Bibliotheken
|
|
(<filename>.so</filename>) installiert sind</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>LUA_MODSHAREDIR</makevar></entry>
|
|
<entry>Das Verzeichnis, in dem
|
|
<application>Lua</application>-Module
|
|
(<filename>.lua</filename>) installiert sind</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>LUA_PKGNAMEPREFIX</makevar></entry>
|
|
<entry>Der Paketnamen-Präfix, der von
|
|
<application>Lua</application>-Modulen verwendet
|
|
wird</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>LUA_CMD</makevar></entry>
|
|
<entry>Das Verzeichnis, in dem der
|
|
<application>Lua</application>-Interpreter liegt</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>LUAC_CMD</makevar></entry>
|
|
<entry>Das Verzeichnis, in dem der
|
|
<application>Lua</application>-Compiler liegt</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>TOLUA_CMD</makevar></entry>
|
|
<entry>Das Verzeichnis, in dem das
|
|
<application>tolua</application>-Programm liegt</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
|
|
<example 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 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 <makevar>LUA_PREMK</makevar> definiert
|
|
werden.</para>
|
|
|
|
<important>
|
|
<para>Falls <makevar>LUA_PREMK</makevar> 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 id="lua-premk-example">
|
|
<title>Verwendung von
|
|
<application>Lua</application>-Variablen in
|
|
Kommandos</title>
|
|
|
|
<para>Der folgende Ausschnitt zeigt die Verwendung von
|
|
<makevar>LUA_PREMK</makevar> 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 <bsd.port.pre.mk>
|
|
|
|
.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
|
|
<makevar>LUA_PREMK</makevar> verwendet werden.</para>
|
|
</note>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 id="using-xfce">
|
|
<title>Xfce verwenden</title>
|
|
|
|
<para>Die <makevar>USE_XFCE</makevar>-Variable wird für
|
|
die automatische Konfiguration der Abhängigkeiten
|
|
eingesetzt, welche die Xfce-Basisbibliotheken oder Anwendungen
|
|
wie <filename
|
|
role="package">x11-toolkits/libxfce4gui</filename> und
|
|
<filename role="package">x11-wm/xfce4-panel</filename>
|
|
verwenden.</para>
|
|
|
|
<para>Die folgenden Xfce-Bibliotheken und -Anwendungen werden
|
|
derzeit unterstützt:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>libexo: <filename
|
|
role="package">x11/libexo</filename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>libgui: <filename
|
|
role="package">x11-toolkits/libxfce4gui</filename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>libutil: <filename
|
|
role="package">x11/libxfce4util</filename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>libmcs: <filename
|
|
role="package">x11/libxfce4mcs</filename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>mcsmanager: <filename
|
|
role="package">sysutils/xfce4-mcs-manager</filename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>panel: <filename
|
|
role="package">x11-wm/xfce4-panel</filename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>thunar: <filename
|
|
role="package">x11-fm/thunar</filename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>wm: <filename
|
|
role="package">x11-wm/xfce4-wm</filename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>xfdev: <filename
|
|
role="package">dev/xfce4-dev-tools</filename></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
|
|
<makevar>CONFIGURE_ENV</makevar>-Variable benötigt,
|
|
um seine erforderlichen Bibliotheken zu finden.
|
|
<programlisting>-I${LOCALBASE}/include
|
|
-L${LOCALBASE}/lib</programlisting> wird CPPFLAGS
|
|
hinzugefügt und ergibt
|
|
<makevar>CONFIGURE_ENV</makevar>.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>Wenn also ein Port von <filename
|
|
role="package">sysutils/xfce4-mcs-manager</filename>
|
|
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 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><makevar>USE_GECKO</makevar></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><makevar>USE_FIREFOX</makevar></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><makevar>USE_FIREFOX_BUILD</makevar></entry>
|
|
|
|
<entry>Um den Port zu bauen, muss Firefox installiert
|
|
sein. Wird diese Variable gesetzt, wird
|
|
automatisch auch <makevar>USE_FIREFOX</makevar>
|
|
gesetzt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_SEAMONKEY</makevar></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><makevar>USE_SEAMONKEY_BUILD</makevar></entry>
|
|
|
|
<entry>Um den Port zu bauen, muss Seamonkey installiert
|
|
sein. Wird diese Variable gesetzt, wird
|
|
automatisch auch <makevar>USE_SEAMONKEY</makevar>
|
|
gesetzt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_THUNDERBIRD</makevar></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><makevar>USE_THUNDERBIRD_BUILD</makevar></entry>
|
|
|
|
<entry>Um den Port zu bauen, muss Thunderbird installiert
|
|
sein. Wird diese Variable gesetzt, wird
|
|
automatisch auch <makevar>USE_THUNDERBIRD</makevar>
|
|
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 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><makevar>USE_BDB</makevar></entry>
|
|
|
|
<entry>Falls die Variable auf <literal>yes</literal>
|
|
gesetzt ist, füge eine Abhängigkeit von
|
|
<filename role="package">databases/db41</filename>
|
|
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 - <makevar>USE_BDB</makevar>=42+ stellt die
|
|
höchste installierte Version fest und greift
|
|
auf 42 zurück, falls sonst nichts installiert
|
|
ist.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_MYSQL</makevar></entry>
|
|
|
|
<entry>Falls die Variable auf <literal>yes</literal>
|
|
gesetzt ist, füge <filename
|
|
role="package">databases/mysql55-server</filename>
|
|
als Abhängigkeit hinzu. Die damit
|
|
verknüpfte Variable
|
|
<makevar>WANT_MYSQL_VER</makevar> kann Werte wie
|
|
323, 40, 41, 50, 51, 52, 55, oder 60 annehmen.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>USE_PGSQL</makevar></entry>
|
|
|
|
<entry>Falls die Variable auf <literal>yes</literal>
|
|
gesetzt ist, füge eine Abhängigkeit von
|
|
<filename
|
|
role="package">databases/postgresql84</filename>
|
|
hinzu. Die damit verknüpfte Variable
|
|
<makevar>WANT_PGSQL_VER</makevar> 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 <ulink
|
|
url="http://www.freebsd.org/cgi/cvsweb.cgi/ports/Mk/bsd.database.mk">
|
|
bsd.database.mk</ulink>.</para>
|
|
</sect1>
|
|
|
|
<sect1 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 <ulink
|
|
url="&url.books.handbook;/configtuning-rcd.html">rc.d Kapitel
|
|
des Handbuchs</ulink> nachgelesen werden. Ausführliche
|
|
Beschreibungen der verfügbaren Befehle stehen in
|
|
&man.rc.8; und &man.rc.subr.8;. Desweiteren gibt es <ulink
|
|
url="&url.articles.rc-scripting.en;">einen Artikel</ulink> 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
|
|
<makevar>SUB_LIST</makevar>-Ersetzungen werden für diese
|
|
Dateien unterstützt. Die Verwendung von
|
|
<literal>%%PREFIX%%</literal> und
|
|
<literal>%%LOCALBASE%%</literal> wird dringend empfohlen.
|
|
Näheres zu <makevar>SUB_LIST</makevar> 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 <makevar>USE_RCORDER</makevar> anstatt
|
|
<makevar>USE_RC_SUBR</makevar> 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; 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
|
|
|
|
# $FreeBSD$
|
|
#
|
|
# 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
|
|
"=" anstatt ":=" 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 ":=" 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
|
|
<makevar>USE_RC_SUBR</makevar>-Variablen
|
|
übereinstimmen.</para>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 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
|
|
<makevar>USERS</makevar> und <makevar>GROUPS</makevar> 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 id="plist">
|
|
<title>Fortgeschrittene
|
|
<filename>pkg-plist</filename>-Methoden</title>
|
|
|
|
<sect1 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>%%<replaceable>VARS</replaceable>%%</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
|
|
<makevar>PLIST_SUB</makevar> eine Liste von
|
|
<literal><replaceable>VAR</replaceable>=<replaceable>VALUE</replaceable></literal>-Paaren
|
|
angeben, wobei in der <filename>pkg-plist</filename>
|
|
<literal>%%<replaceable>VAR</replaceable>%%</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
|
|
<makevar>PLIST_SUB</makevar> 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 <maketarget>pre-install</maketarget>- und
|
|
<maketarget>do-install</maketarget>-Targets ausgeführt,
|
|
indem aus <filename><makevar>PLIST</makevar></filename>
|
|
gelesen und in
|
|
<filename><makevar>TMPPLIST</makevar></filename> geschrieben
|
|
wird (Standard:
|
|
<filename><makevar>WRKDIR</makevar>/.PLIST.mktmp</filename>).
|
|
Falls Ihr Port also
|
|
<filename><makevar>PLIST</makevar></filename> während dem
|
|
Erstellen generiert, so sollte dies vor oder in
|
|
<maketarget>pre-install</maketarget> geschehen. Muss Ihr Port
|
|
die resultierende Datei verändern, so sollte dies in
|
|
<maketarget>post-install</maketarget> mit der Ausgabedatei
|
|
<filename><makevar>TMPPLIST</makevar></filename>
|
|
erfolgen.</para>
|
|
|
|
<para>Eine weitere Möglichkeit, die Paketliste eines
|
|
Ports zu verändern, besteht darin die Variablen
|
|
<makevar>PLIST_FILES</makevar> und
|
|
<makevar>PLIST_DIRS</makevar> zu setzen. Der Wert jeder der
|
|
beiden Variablen stellt eine Liste von Pfadnamen dar, die
|
|
zusammen mit dem Inhalt von
|
|
<filename><makevar>PLIST</makevar></filename> in
|
|
<filename><makevar>TMPPLIST</makevar></filename> geschrieben
|
|
wird. Dabei unterliegen die Namen in
|
|
<makevar>PLIST_FILES</makevar> und
|
|
<makevar>PLIST_DIRS</makevar> der weiter oben beschriebenen
|
|
Substitution von
|
|
<literal>%%<replaceable>VAR</replaceable>%%</literal>. Die
|
|
Namen aus <makevar>PLIST_FILES</makevar> werden ansonsten
|
|
unverändert in die endgültige Paketliste
|
|
übernommen, während den Namen aus
|
|
<makevar>PLIST_DIRS</makevar> noch der Wert von
|
|
<literal>@dirrm</literal> vorangestellt wird. Damit die
|
|
Verwendung von <makevar>PLIST_FILES</makevar> und
|
|
<makevar>PLIST_DIRS</makevar> überhaupt möglich
|
|
ist, müssen diese gesetzt werden, bevor
|
|
<filename><makevar>TMPPLIST</makevar></filename> geschrieben
|
|
wird – z.B. in
|
|
<maketarget>pre-install</maketarget> oder vorher.</para>
|
|
</sect1>
|
|
|
|
<sect1 id="plist-cleaning">
|
|
<title>Leere Verzeichnisse</title>
|
|
|
|
<sect2 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><makevar>${PREFIX}</makevar>/share/doc/gimp</filename>
|
|
nicht leer ist, da andere Ports hier ebenfalls Dateien
|
|
installiert haben.</para>
|
|
</sect2>
|
|
|
|
<sect2 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 id="plist-config">
|
|
<title>Konfigurationsdateien</title>
|
|
|
|
<para>Sollte Ihr Port Konfigurationsdateien in
|
|
<filename><makevar>PREFIX</makevar>/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><replaceable>filename</replaceable>.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 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 <makevar>PLIST_FILES</makevar> und
|
|
<makevar>PLIST_DIRS</makevar> 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 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` && find -d * -type d) | sort > OLD-DIRS</userinput></screen>
|
|
|
|
<para>Erstellen Sie eine leere
|
|
<filename>pkg-plist</filename>-Datei:</para>
|
|
|
|
<screen>&prompt.root; <userinput>:>pkg-plist</userinput></screen>
|
|
|
|
<para>Wenn Ihr Port auf <makevar>PREFIX</makevar> 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` && find -d * \! -type d) | sort > 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` && find -d * -type d) | sort | comm -13 OLD-DIRS - | sort -r | sed -e 's#^#@dirrm #' >> 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
|
|
<makevar>MAN<replaceable>n</replaceable></makevar>
|
|
aufgeführt sein und nicht in der Paketliste.
|
|
Konfigurationsdateien des Benutzers sollten entfernt oder als
|
|
<filename><replaceable>filename</replaceable>.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` > 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 <filename
|
|
role="package">ports-mgmt/genplist</filename>. 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 id="pkg-files">
|
|
<title>Die <filename>pkg-<replaceable>*</replaceable></filename>
|
|
Dateien</title>
|
|
|
|
<para>Es gibt noch einige Tricks mit
|
|
<filename>pkg-<replaceable>*</replaceable></filename>, die wir
|
|
noch nicht erwähnt haben, die aber oft sehr praktisch
|
|
sind.</para>
|
|
|
|
<sect1 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 <makevar>ECHO_MSG</makevar>.
|
|
<filename>pkg-message</filename> ist nur für Schritte
|
|
nach der Installation vorgesehen. Sie sollten den Unterschied
|
|
zwischen <makevar>ECHO_MSG</makevar> und
|
|
<makevar>ECHO_CMD</makevar> 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) >/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
|
|
<maketarget>post-install</maketarget>-Ziel des Make-Vorgangs
|
|
veranlassen.</para>
|
|
</note>
|
|
</sect1>
|
|
|
|
<sect1 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>${SH} pkg-install ${PKGNAME}
|
|
PRE-INSTALL</literal> und beim zweiten Mal als
|
|
<literal>${SH} pkg-install ${PKGNAME}
|
|
POST-INSTALL</literal>. <literal>$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=${PREFIX} ${SH}
|
|
${PKGINSTALL} ${PKGNAME}
|
|
PRE-INSTALL.</literal></para>
|
|
</note>
|
|
</sect1>
|
|
|
|
<sect1 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>${SH} pkg-deinstall
|
|
${PKGNAME} DEINSTALL</literal> und dann als
|
|
<literal>${SH} pkg-deinstall ${PKGNAME}
|
|
POST-DEINSTALL.</literal></para>
|
|
</sect1>
|
|
|
|
<sect1 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 ${PKGNAME}
|
|
INSTALL</literal> aufgerufen. Bei der Deinstallation wird es
|
|
von &man.pkg.delete.1; als <literal>pkg-req ${PKGNAME}
|
|
DEINSTALL</literal> ausgeführt.</para>
|
|
</sect1>
|
|
|
|
<sect1 id="pkg-names">
|
|
<title id="porting-pkgfiles">Ändern der Namen der
|
|
<filename>pkg-<replaceable>*</replaceable></filename>
|
|
Dateien</title>
|
|
|
|
<!-- Hier muss noch mal überarbeitet werden -->
|
|
|
|
<para>Alle Namen der
|
|
<filename>pkg-<replaceable>*</replaceable></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-<replaceable>*</replaceable></filename>
|
|
Dateien in mehreren Ports nutzen oder in eine der oben genannten
|
|
Dateien schreiben wollen. Schreiben Sie niemals außerhalb
|
|
des Unterverzeichnisses <makevar>WRKDIR</makevar>
|
|
<filename>pkg-*</filename>, eine Erklärung hierzu finden
|
|
Sie in <link linkend="porting-wrkdir"> Schreiben ausserhalb von
|
|
<makevar>WRKDIR</makevar></link>.</para>
|
|
|
|
<para>Hier ist eine Liste von Variablennamen und ihren
|
|
Standardwerten (<makevar>PKGDIR</makevar> ist
|
|
standardmäßig
|
|
<makevar>${MASTERDIR}</makevar>).</para>
|
|
|
|
<informaltable frame="none" pgwide="1">
|
|
<tgroup cols="2">
|
|
<thead>
|
|
<row>
|
|
<entry>Variable</entry>
|
|
<entry>Standardwert</entry>
|
|
</row>
|
|
</thead>
|
|
|
|
<tbody>
|
|
<row>
|
|
<entry><makevar>DESCR</makevar></entry>
|
|
<entry><literal>${PKGDIR}/pkg-descr</literal></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>PLIST</makevar></entry>
|
|
<entry><literal>${PKGDIR}/pkg-plist</literal></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>PKGINSTALL</makevar></entry>
|
|
<entry><literal>${PKGDIR}/pkg-install</literal></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>PKGDEINSTALL</makevar></entry>
|
|
<entry><literal>${PKGDIR}/pkg-deinstall</literal></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>PKGREQ</makevar></entry>
|
|
<entry><literal>${PKGDIR}/pkg-req</literal></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>PKGMESSAGE</makevar></entry>
|
|
<entry><literal>${PKGDIR}/pkg-message</literal></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
|
|
<para>Bitte benutzen Sie diese Variablen anstatt
|
|
<makevar>PKG_ARGS</makevar> zu ändern. Wenn Sie
|
|
<makevar>PKG_ARGS</makevar> modifizieren, werden diese Dateien
|
|
bei der Installation des Ports nicht korrekt in
|
|
<filename>/var/db/pkg</filename> installiert.</para>
|
|
</sect1>
|
|
|
|
<sect1 id="using-sub-files">
|
|
<title>Nutzung von <makevar>SUB_FILES</makevar> und
|
|
<makevar>SUB_LIST</makevar></title>
|
|
|
|
<para>Die Variablen <makevar>SUB_FILES</makevar> und
|
|
<makevar>SUB_LIST</makevar> sind nützlich, um dynamische
|
|
Werte in Port-Dateien zu verwenden, wie beispielsweise der
|
|
Installations-<makevar>PREFIX</makevar> in
|
|
<filename>pkg-message</filename>.</para>
|
|
|
|
<para>Die Variable <makevar>SUB_FILES</makevar> enthält
|
|
eine Liste von Dateien, die automatisch verändert werden.
|
|
Jede <replaceable>Datei</replaceable> in
|
|
<makevar>SUB_FILES</makevar> muss ein entsprechendes Pendant
|
|
<replaceable>datei.in</replaceable> im Verzeichnis
|
|
<makevar>FILESDIR</makevar> haben. Die modifizierte Version
|
|
wird in <makevar>WRKDIR</makevar> angelegt. Dateien, die als
|
|
Werte von <makevar>USE_RC_SUBR</makevar> (oder veraltet in
|
|
<makevar>USE_RCORDER</makevar>) gespeichert werden, werden
|
|
automatisch zu <makevar>SUB_FILES</makevar> 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 <makevar>SUB_LIST</makevar> ist eine Liste
|
|
von <literal>VAR=WERT</literal>-Paaren. Jedes Paar
|
|
<literal>%%VAR%%</literal> in den Dateien von
|
|
<makevar>SUB_FILES</makevar> wird mit <literal>WERT</literal>
|
|
ersetzt. Einige gebräuchliche Paare werden automatisch
|
|
definiert: <makevar>PREFIX</makevar>,
|
|
<makevar>LOCALBASE</makevar>,
|
|
<makevar>DATADIR</makevar>, <makevar>DOCSDIR</makevar>,
|
|
<makevar>EXAMPLESDIR</makevar>. 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
|
|
<makevar>FILESDIR</makevar> 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 id="testing">
|
|
<title>Ihren Port testen</title>
|
|
|
|
<sect1 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 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 id="testing-porttools">
|
|
<title>Port Tools</title>
|
|
|
|
<para>Das Programm <filename
|
|
role="package">ports-mgmt/porttools</filename> 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 id="porting-prefix">
|
|
<title><makevar>PREFIX</makevar> und
|
|
<makevar>DESTDIR</makevar></title>
|
|
|
|
<para><makevar>PREFIX</makevar> 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><makevar>DESTDIR</makevar>, 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
|
|
<makevar>DESTDIR</makevar>/<makevar>PREFIX</makevar>
|
|
installiert und registriert sich in der Paket-Datenbank unter
|
|
<makevar>DESTDIR</makevar>/var/db/pkg.
|
|
Da <makevar>DESTDIR</makevar> mittels eines
|
|
&man.chroot.8;-Aufrufs vom Ports-System automatisch gesetzt
|
|
wird, brauchen Sie keine Änderungen oder besondere Pflege
|
|
für <makevar>DESTDIR</makevar>-konforme Ports.</para>
|
|
|
|
<para>Der Wert von <makevar>PREFIX</makevar> wird auf
|
|
<makevar>LOCALBASE</makevar> gesetzt (Standard ist
|
|
<filename>/usr/local</filename>).
|
|
Falls <makevar>USE_LINUX_PREFIX</makevar> gesetzt ist, wird
|
|
<makevar>PREFIX</makevar> <makevar>LINUXBASE</makevar>
|
|
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
|
|
<makevar>${PREFIX}</makevar> 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
|
|
<makevar>PREFIX</makevar> 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 <makevar>PREFIX</makevar>
|
|
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
|
|
<makevar>LOCALBASE</makevar> 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 <makevar>PREFIX</makevar> 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=\"${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 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 <filename
|
|
role="package">ports-mgmt/tinderbox</filename> 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 <ulink
|
|
url="http://tinderbox.marcuscom.com/">Tinderbox
|
|
Homepage</ulink>.</para>
|
|
</sect1>
|
|
</chapter>
|
|
|
|
<chapter 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 <ulink
|
|
url="&url.books.handbook;/synching.html#CVSUP-CONFIG">Handbuch</ulink>
|
|
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
|
|
<ulink
|
|
url="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query">FreeBSD
|
|
Problembericht Datenbank (PR - Problem Report)</ulink> (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 <ulink
|
|
url="http://portsmon.FreeBSD.org/portoverview.py">Übersicht
|
|
eines Ports</ulink> 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 > 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 <ulink
|
|
url="&url.books.developers-handbook;/policies.html#POLICIES-MAINTAINER">
|
|
Developer's Handbook</ulink> 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 <ulink
|
|
url="&url.articles.problem-reports;/pr-writing.html"> Den
|
|
Problembericht schreiben</ulink> 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 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 id="my-wrkdir"/>
|
|
&prompt.user; <userinput>cvs -d R_CVSROOT co pdnsd</userinput> <co id="R-CVSROOT"/> <co 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 class="directory">/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 <ulink
|
|
url="&url.books.handbook;/cvsup.html">&os; Handbuch</ulink>.</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 <filename role="package">german/selfhtml</filename>
|
|
de-selfhtml). Um den Namen des Moduls herauszufinden, können
|
|
Sie entweder die <ulink
|
|
url="&url.base;/cgi/cvsweb.cgi/ports">cvsweb-Schnittstelle</ulink>
|
|
verwenden oder den kompletten Pfad des Ports angeben (in unserem
|
|
Beispiel wäre der komplette Pfad also <filename
|
|
class="directory">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 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" 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 > ../`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 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 <Your email address>
|
|
|
|
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 id="security">
|
|
<title>Sicherheit der Ports</title>
|
|
|
|
<sect1 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 – 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 – neben
|
|
Softwarefehlern – 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 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
|
|
<makevar>FORBIDDEN</makevar> 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 – 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– und
|
|
WWW-Spiegel verteilt und die unsichere Version damit
|
|
verdrängt. <makevar>PORTREVISION</makevar> sollte
|
|
erhöht werden – es sei denn,
|
|
<makevar>PORTREVISION</makevar> hat sich im Laufe der
|
|
Korrektur des Fehlers geändert. Das heißt, Sie
|
|
sollten <makevar>PORTREVISION</makevar> 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 <makevar>PORTREVISION
|
|
</makevar> somit schon verändert wurde. Bitte beachten
|
|
Sie den <link linkend="makefile-naming-revepoch">betreffenden
|
|
Abschnitt</link> für weitere Informationen.</para>
|
|
</sect1>
|
|
|
|
<sect1 id="security-notify">
|
|
<title>Die Community informiert halten</title>
|
|
|
|
<sect2 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 <ulink
|
|
url="http://vuxml.freebsd.org/">der FreeBSD
|
|
VuXML-Datenbank</ulink> 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 – egal
|
|
welche – zögern Sie bitte nicht die
|
|
Sicherheitsverantwortlichen zu kontaktieren, wie es in den
|
|
<ulink url="http://www.freebsd.org/security/#how"> FreeBSD
|
|
Sicherheitsinformationen</ulink> 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 <filename
|
|
role="package">security/vuxml</filename> finden. Deshalb
|
|
wird der komplette Pfadname <filename>
|
|
<envar>PORTSDIR</envar>/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 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 <Tag> muss ein passendes
|
|
</Tag> 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 – 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) – 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><vuln vid="f4bc80f4-da62-11d8-90ea-0004ac98a7b9"> <co id="co-vx-vid"/>
|
|
<topic>Several vulnerabilities found in Foo</topic> <co id="co-vx-top"/>
|
|
<affects>
|
|
<package>
|
|
<name>foo</name> <co id="co-vx-nam"/>
|
|
<name>foo-devel</name>
|
|
<name>ja-foo</name>
|
|
<range><ge>1.6</ge><lt>1.9</lt></range> <co id="co-vx-rng"/>
|
|
<range><ge>2.*</ge><lt>2.4_1</lt></range>
|
|
<range><eq>3.0b1</eq></range>
|
|
</package>
|
|
<package>
|
|
<name>openfoo</name> <co id="co-vx-nm2"/>
|
|
<range><lt>1.10_7</lt></range> <co id="co-vx-epo"/>
|
|
<range><ge>1.2,1</ge><lt>1.3_1,1</lt></range>
|
|
</package>
|
|
</affects>
|
|
<description>
|
|
<body xmlns="http://www.w3.org/1999/xhtml">
|
|
<p>J. Random Hacker reports:</p> <co id="co-vx-bdy"/>
|
|
<blockquote
|
|
cite="http://j.r.hacker.com/advisories/1">
|
|
<p>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.</p>
|
|
</blockquote>
|
|
</body>
|
|
</description>
|
|
<references> <co id="co-vx-ref"/>
|
|
<freebsdsa>SA-10:75.foo</freebsdsa> <co id="co-vx-fsa"/>
|
|
<freebsdpr>ports/987654</freebsdpr> <co id="co-vx-fpr"/>
|
|
<cvename>CAN-2010-0201</cvename> <co id="co-vx-cve"/>
|
|
<cvename>CAN-2010-0466</cvename>
|
|
<bid>96298</bid> <co id="co-vx-bid"/>
|
|
<certsa>CA-2010-99</certsa> <co id="co-vx-cts"/>
|
|
<certvu>740169</certvu> <co id="co-vx-ctv"/>
|
|
<uscertsa>SA10-99A</uscertsa> <co id="co-vx-ucs"/>
|
|
<uscertta>SA10-99A</uscertta> <co id="co-vx-uct"/>
|
|
<mlist msgid="201075606@hacker.com">http://marc.theaimsgroup.com/?l=bugtraq&amp;m=203886607825605</mlist> <co id="co-vx-mls"/>
|
|
<url>http://j.r.hacker.com/advisories/1</url> <co id="co-vx-url"/>
|
|
</references>
|
|
<dates>
|
|
<discovery>2010-05-25</discovery> <co id="co-vx-dsc"/>
|
|
<entry>2010-07-13</entry> <co id="co-vx-ent"/>
|
|
<modified>2010-09-17</modified> <co id="co-vx-mod"/>
|
|
</dates>
|
|
</vuln></programlisting>
|
|
|
|
<para>Die Namen der Tags sollten selbsterklärend sein
|
|
– 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– 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></literal>, <literal><le>
|
|
</literal>, <literal><eq></literal>, <literal>
|
|
<ge></literal>, und
|
|
<literal><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>– und
|
|
<literal>RC </literal>-Versionen zuzutreffen. Zum
|
|
Beispiel passt
|
|
<literal><ge>2.*</ge><lt>3.*
|
|
</lt></literal> auf alle Versionen der Form
|
|
<literal>2.x</literal>, während
|
|
<literal><ge>
|
|
2.0</ge><lt>3.0</lt></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 – 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> <affected></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 <package>
|
|
Abschnittes.</para>
|
|
</callout>
|
|
|
|
<callout arearefs="co-vx-epo">
|
|
<para>Die Versionsbereiche sollten, wenn möglich,
|
|
sowohl <makevar>PORTEPOCH</makevar> als auch <makevar>
|
|
PORTREVISION</makevar> erlauben. Bitte denken Sie
|
|
daran, dass gemäß der Vergleichsregeln eine
|
|
Version mit einer <makevar>PORTEPOCH</makevar>, die
|
|
nicht Null ist, größer ist als jede Version
|
|
ohne <makevar>PORTEPOCH</makevar>. 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><p></literal> und
|
|
<literal></p></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 <ulink
|
|
url="http://www.freebsd.org/security/#adv">FreeBSD
|
|
Sicherheitshinweis</ulink>.</para>
|
|
</callout>
|
|
|
|
<callout arearefs="co-vx-fpr">
|
|
<para>Das ist ein <ulink
|
|
url="http://www.freebsd.org/support.html#gnats">
|
|
FreeBSD Problembericht</ulink>.</para>
|
|
</callout>
|
|
|
|
<callout arearefs="co-vx-cve">
|
|
<para>Das ist eine <ulink
|
|
url="http://www.cve.mitre.org/">Mitre CVE</ulink>
|
|
Kennung.</para>
|
|
</callout>
|
|
|
|
<callout arearefs="co-vx-bid">
|
|
<para>Das ist eine <ulink
|
|
url="http://www.securityfocus.com/bid">SecurityFocus
|
|
Fehler-Kennung</ulink>.</para>
|
|
</callout>
|
|
|
|
<callout arearefs="co-vx-cts">
|
|
<para>Das ist ein Sicherheitshinweis von <ulink
|
|
url="http://www.cert.org/">US-CERT</ulink>.</para>
|
|
</callout>
|
|
|
|
<callout arearefs="co-vx-ctv">
|
|
<para>Das ist eine Mitteilung über eine
|
|
Schwachstelle von <ulink
|
|
url="http://www.cert.org/">US-CERT</ulink>.</para>
|
|
</callout>
|
|
|
|
<callout arearefs="co-vx-ucs">
|
|
<para>Das ist ein Cyber-Sicherheitsalarm von <ulink
|
|
url="http://www.cert.org/">US-CERT</ulink>.</para>
|
|
</callout>
|
|
|
|
<callout arearefs="co-vx-uct">
|
|
<para>Das ist ein technischer Cyber-Sicherheitsalarm
|
|
von <ulink
|
|
url="http://www.cert.org/">US-CERT</ulink>.</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 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 <filename
|
|
role="package">ports-mgmt/portaudit</filename>, <filename
|
|
role="package">ports-mgmt/portaudit-db</filename> sowie
|
|
<filename role="package">security/vuxml</filename>
|
|
<emphasis>installieren</emphasis>.</para>
|
|
|
|
<note>
|
|
<para>Um <command>packaudit</command> auszuführen,
|
|
müssen Sie die Berechtigung haben
|
|
<filename><makevar>DATABASEDIR</makevar></filename> zu
|
|
schreiben – üblicherweise ist das
|
|
<filename>/var/db/portaudit</filename>.</para>
|
|
|
|
<para>Durch Setzen der Umgebungsvariable
|
|
<filename><makevar>DATABASEDIR</makevar></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><makevar>VUXMLDIR</makevar></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 && make validate</userinput></screen>
|
|
|
|
<note>
|
|
<para>Sie werden zumindest eines der folgenden Pakete
|
|
benötigen: <filename
|
|
role="package">textproc/libxml2</filename>, <filename
|
|
role="package">textproc/jade</filename>.</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><affected></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<0.65_7)
|
|
Type of problem: clamav remote denial-of-service.
|
|
Reference: <http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-0020ed76ef5a.html>
|
|
|
|
1 problem(s) found.</screen>
|
|
|
|
<para>Offensichtlich sollte die erste Version ausgegeben
|
|
werden – 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 id="porting-dads">
|
|
<title>Was man machen respektive vermeiden sollte</title>
|
|
|
|
<sect1 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 <ulink
|
|
url="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query">PR
|
|
Datenbank</ulink>, welche andere Menschen eingereicht haben,
|
|
kontrollieren. Senden Sie bitte Kommentare zu Ports, die Sie
|
|
verifizieren wie unter <ulink
|
|
url="&url.articles.contributing;/contrib-how.html#CONTRIB-GENERAL">Bug
|
|
Reports and General Commentary</ulink> 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 id="porting-wrkdir">
|
|
<title><makevar>WRKDIR</makevar></title>
|
|
|
|
<para>Schreiben Sie in keine Dateien außerhalb von
|
|
<makevar>WRKDIR</makevar>. <makevar>WRKDIR</makevar> ist der
|
|
einzige Ort, welcher während des Erstellen des Ports
|
|
garantiert beschreibbar ist (siehe <ulink
|
|
url="&url.books.handbook;/ports-using.html#PORTS-CD"> Ports
|
|
Installieren von CDROM</ulink> für ein Beispiel, um Ports
|
|
in einem schreibgeschützen Zweig zu erstellen). Wenn Sie
|
|
eine der <filename>pkg-<replaceable>*</replaceable></filename>
|
|
Dateien modifizieren müssen, sollten Sie <link
|
|
linkend="porting-pkgfiles">eine Variable erneut
|
|
definieren</link>, anstatt die Datei zu
|
|
überschreiben.</para>
|
|
</sect1>
|
|
|
|
<sect1 id="porting-wrkdirprefix">
|
|
<title><makevar>WRKDIRPREFIX</makevar></title>
|
|
|
|
<para>Vergewissern Sie sich, dass Ihr Port
|
|
<makevar>WRKDIRPREFIX</makevar> beachtet. Die meisten Ports
|
|
sollten sich darüber keine Sorgen machen. Beachten Sie
|
|
bitte, falls auf <makevar>WRKDIR</makevar> eines anderen Ports
|
|
verwiesen wird, dass die korrekte Position
|
|
<filename><makevar>WRKDIRPREFIX</makevar><makevar>PORTSDIR</makevar>/<replaceable>subdir</replaceable>/<replaceable>name</replaceable>/work</filename>,
|
|
und nicht etwa
|
|
<filename><makevar>PORTSDIR</makevar>/<replaceable>subdir</replaceable>/<replaceable>name</replaceable>/work</filename>,
|
|
<filename><makevar>.CURDIR</makevar>/../../<replaceable>subdir</replaceable>/<replaceable>name</replaceable>/work</filename>
|
|
oder ähnliches ist.</para>
|
|
|
|
<para>Falls Sie <makevar>WRKDIR</makevar> selbst definieren,
|
|
sollten Sie sicherstellen, dass Sie
|
|
<literal>${WRKDIRPREFIX}${.CURDIR}</literal> am
|
|
Anfang anfügen.</para>
|
|
</sect1>
|
|
|
|
<sect1 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 <ulink
|
|
url="http://cvsweb.freebsd.org/src/sys/sys/param.h">sys/param.h</ulink>
|
|
definiert ist. Hoffentlich ist diese Datei schon
|
|
enthalten – falls nicht, so fügen Sie
|
|
folgenden Quelltext:</para>
|
|
|
|
<programlisting>#if (defined(__unix__) || defined(unix)) && !defined(USG)
|
|
#include <sys/param.h>
|
|
#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 <sys/param.h>
|
|
#endif</programlisting>
|
|
|
|
<para>Vergessen Sie nicht
|
|
<literal>-DHAVE_SYS_PARAM_H</literal> zu den
|
|
<makevar>CFLAGS</makevar> 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) && (BSD >= 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) && (BSD >= 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__ > 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__ >= 2
|
|
#include <osreldate.h>
|
|
# if __FreeBSD_version >= 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 id="freebsd-versions">
|
|
<title>__FreeBSD_version Werte</title>
|
|
|
|
<para>Hier ist eine praktische Liste von
|
|
<literal>__FreeBSD_version</literal>-Werten wie in <ulink
|
|
url="http://cvsweb.freebsd.org/src/sys/sys/param.h">sys/param.h</ulink>
|
|
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>
|
|
<entry>2.0-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>199501, 199503</entry>
|
|
<entry>19. März 1995</entry>
|
|
<entry>2.1-CURRENT</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>199504</entry>
|
|
<entry>9. April 1995</entry>
|
|
<entry>2.0.5-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>199508</entry>
|
|
<entry>26. August 1995</entry>
|
|
<entry>2.2-CURRENT vor 2.1</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>199511</entry>
|
|
<entry>10. November 1995</entry>
|
|
<entry>2.1.0-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>199512</entry>
|
|
<entry>10. November 1995</entry>
|
|
<entry>2.2-CURRENT vor 2.1.5</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>199607</entry>
|
|
<entry>10. Juli 1996</entry>
|
|
<entry>2.1.5-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>199608</entry>
|
|
<entry>12. Juli 1996</entry>
|
|
<entry>2.2-CURRENT vor 2.1.6</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>199612</entry>
|
|
<entry>15. November 1996</entry>
|
|
<entry>2.1.6-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>199612</entry>
|
|
<entry></entry>
|
|
<entry>2.1.7-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>220000</entry>
|
|
<entry>19. Februar 1997</entry>
|
|
<entry>2.2-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>(nicht geändert)</entry>
|
|
<entry></entry>
|
|
<entry>2.2.1-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>(nicht geändert)</entry>
|
|
<entry></entry>
|
|
<entry>2.2-STABLE nach 2.2.1-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>221001</entry>
|
|
<entry>15. April 1997</entry>
|
|
<entry>2.2-STABLE nach texinfo-3.9</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>221002</entry>
|
|
<entry>30. April 1997</entry>
|
|
<entry>2.2-STABLE nach top</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>222000</entry>
|
|
<entry>16. Mai 1997</entry>
|
|
<entry>2.2.2-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>222001</entry>
|
|
<entry>19. Mai 1997</entry>
|
|
<entry>2.2-STABLE nach 2.2.2-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>225000</entry>
|
|
<entry>2. Oktober 1997</entry>
|
|
<entry>2.2.5-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>225001</entry>
|
|
<entry>20. November 1997</entry>
|
|
<entry>2.2-STABLE nach 2.2.5-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>225002</entry>
|
|
<entry>27. Dezember 1997</entry>
|
|
<entry>2.2-STABLE nach der Aufnahme von ldconfig -R</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>226000</entry>
|
|
<entry>24. März 1998</entry>
|
|
<entry>2.2.6-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>227000</entry>
|
|
<entry>21. Juli 1998</entry>
|
|
<entry>2.2.7-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>227001</entry>
|
|
<entry>21. Juli 1998</entry>
|
|
<entry>2.2-STABLE nach 2.2.7-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>227002</entry>
|
|
<entry>19. September 1998</entry>
|
|
<entry>2.2-STABLE nach &man.semctl.2; Änderung</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>228000</entry>
|
|
<entry>29. November 1998</entry>
|
|
<entry>2.2.8-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>228001</entry>
|
|
<entry>29. November 1998</entry>
|
|
<entry>2.2-STABLE nach 2.2.8-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>300000</entry>
|
|
<entry>19. Februar 1996</entry>
|
|
<entry>3.0-CURRENT vor &man.mount.2; Änderung</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>300001</entry>
|
|
<entry>24. September 1997</entry>
|
|
<entry>3.0-CURRENT nach &man.mount.2; Änderung</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>300002</entry>
|
|
<entry>2. Juni 1998</entry>
|
|
<entry>3.0-CURRENT nach &man.semctl.2; Änderung</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>300003</entry>
|
|
<entry>7. Juni 1998</entry>
|
|
<entry>3.0-CURRENT nach ioctl arg Änderungen</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>300004</entry>
|
|
<entry>3. September 1998</entry>
|
|
<entry>3.0-CURRENT nach ELF-Konvertierung</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>300005</entry>
|
|
<entry>16. Oktober 1998</entry>
|
|
<entry>3.0-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>300006</entry>
|
|
<entry>16. Oktober 1998</entry>
|
|
<entry>3.0-CURRENT nach 3.0-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>300007</entry>
|
|
<entry>22. Januar 1999</entry>
|
|
<entry>3.0-STABLE nach 3/4 Zweig</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>310000</entry>
|
|
<entry>9. Februar 1999</entry>
|
|
<entry>3.1-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>310001</entry>
|
|
<entry>27. März 1999</entry>
|
|
<entry>3.1-STABLE nach 3.1-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>310002</entry>
|
|
<entry>14. April 1999</entry>
|
|
<entry>3.1-STABLE nach Änderung der C++
|
|
Konstruktor/Destruktor-Reihenfolge</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>320000</entry>
|
|
<entry></entry>
|
|
<entry>3.2-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>320001</entry>
|
|
<entry>8. Mai 1999</entry>
|
|
<entry>3.2-STABLE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>320002</entry>
|
|
<entry>29. August 1999</entry>
|
|
<entry>3.2-STABLE nach binär-inkompatibler IPFW und
|
|
Socket-Änderungen</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>330000</entry>
|
|
<entry>2. September 1999</entry>
|
|
<entry>3.3-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>330001</entry>
|
|
<entry>16. September 1999</entry>
|
|
<entry>3.3-STABLE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>330002</entry>
|
|
<entry>24. November 1999</entry>
|
|
<entry>3.3-STABLE nach Hinzufügen von &man.mkstemp.3;
|
|
zur libc</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>340000</entry>
|
|
<entry>5. Dezember 1999</entry>
|
|
<entry>3.4-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>340001</entry>
|
|
<entry>17. Dezember 1999</entry>
|
|
<entry>3.4-STABLE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>350000</entry>
|
|
<entry>20. Juni 2000</entry>
|
|
<entry>3.5-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>350001</entry>
|
|
<entry>12. Juli 2000</entry>
|
|
<entry>3.5-STABLE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>400000</entry>
|
|
<entry>22. Januar 1999</entry>
|
|
<entry>4.0-CURRENT nach 3.4 Zweig</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>400001</entry>
|
|
<entry>20. Februar 1999</entry>
|
|
<entry>4.0-CURRENT nach der Änderung im Verhalten des
|
|
dynamischen Linkers.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>400002</entry>
|
|
<entry>13. März 1999</entry>
|
|
<entry>4.0-CURRENT nach Änderung der C++
|
|
Konstruktor/Destruktor Reihenfolge.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>400003</entry>
|
|
<entry>27. März 1999</entry>
|
|
<entry>4.0-CURRENT nach funktionierendem &man.dladdr.3;.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>400004</entry>
|
|
<entry>5. April 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. April 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. Mai 1999</entry>
|
|
<entry>4.0-CURRENT nach Änderung der
|
|
cdevsw-Registrierung.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>400007</entry>
|
|
<entry>17. Juni 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. Juni 1999</entry>
|
|
<entry>4.0-CURRENT nach Hinzufügen eines poll
|
|
Syscall-Wrappers zur libc_r.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>400009</entry>
|
|
<entry>20. Juli 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. September 1999</entry>
|
|
<entry>4.0-CURRENT nach dem Beseitigen eines Fehlers in
|
|
&man.jail.2;.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>400011</entry>
|
|
<entry>29. September 1999</entry>
|
|
<entry>4.0-CURRENT nach der <literal>sigset_t</literal>
|
|
Datentyp Änderung.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>400012</entry>
|
|
<entry>15. November 1999</entry>
|
|
<entry>4.0-CURRENT nach dem Wechsel zum GCC
|
|
2.95.2-Compiler.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>400013</entry>
|
|
<entry>4. Dezember 1999</entry>
|
|
<entry>4.0-CURRENT nach Hinzufügen der erweiterbaren
|
|
Linux Mode ioctl-Routinen.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>400014</entry>
|
|
<entry>18. Januar 2000</entry>
|
|
<entry>4.0-CURRENT nach dem OpenSSL-Import.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>400015</entry>
|
|
<entry>27. Januar 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. Februar 2000</entry>
|
|
<entry>4.0-CURRENT nach OpenSSH-Import.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>400017</entry>
|
|
<entry>13. März 2000</entry>
|
|
<entry>4.0-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>400018</entry>
|
|
<entry>17. März 2000</entry>
|
|
<entry>4.0-STABLE nach 4.0-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>400019</entry>
|
|
<entry>5. Mai 2000</entry>
|
|
<entry>4.0-STABLE nach der Einführung von
|
|
verzögerten Prüfsummen.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>400020</entry>
|
|
<entry>4. Juni 2000</entry>
|
|
<entry>4.0-STABLE nach dem Einpflegen des
|
|
libxpg4-Quelltextes in die libc.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>400021</entry>
|
|
<entry>8. Juli 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. Juli 2000</entry>
|
|
<entry>4.1-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>410001</entry>
|
|
<entry>29. Juli 2000</entry>
|
|
<entry>4.1-STABLE nach 4.1-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>410002</entry>
|
|
<entry>16. September 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. September 2000</entry>
|
|
<entry>4.1.1-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>411001</entry>
|
|
<entry></entry>
|
|
<entry>4.1.1-STABLE nach 4.1.1-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>420000</entry>
|
|
<entry>31. Oktober 2000</entry>
|
|
<entry>4.2-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>420001</entry>
|
|
<entry>10. Januar 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. März 2001</entry>
|
|
<entry>4.3-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>430001</entry>
|
|
<entry>18. Mai 2001</entry>
|
|
<entry>4.3-STABLE nach der Einführung von
|
|
wint_t.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>430002</entry>
|
|
<entry>22. Juli 2001</entry>
|
|
<entry>4.3-STABLE nach dem Einpflegen der PCI
|
|
Stromstatus-API.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>440000</entry>
|
|
<entry>1. August 2001</entry>
|
|
<entry>4.4-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>440001</entry>
|
|
<entry>23. Oktober 2001</entry>
|
|
<entry>4.4-STABLE nach der Einführung von
|
|
d_thread_t.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>440002</entry>
|
|
<entry>4. November 2001</entry>
|
|
<entry>4.4-STABLE nach den Änderungen der
|
|
mount-Struktur (betrifft Dateisystem-Kernelmodule).
|
|
</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>440003</entry>
|
|
<entry>18. Dezember 2001</entry>
|
|
<entry>4.4-STABLE nachdem die Userland-Komponenten von
|
|
smbfs importiert worden sind.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>450000</entry>
|
|
<entry>20. Dezember 2001</entry>
|
|
<entry>4.5-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>450001</entry>
|
|
<entry>24. Februar 2002</entry>
|
|
<entry>4.5-STABLE nach der Umbenennung von Elementen der
|
|
USB-Struktur.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>450004</entry>
|
|
<entry>16. April 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. April 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. Mai 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. Juni 2002</entry>
|
|
<entry>4.6-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>460001</entry>
|
|
<entry>21. Juni 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. Juli 2002</entry>
|
|
<entry>4.6.2-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>460100</entry>
|
|
<entry>26. Juni 2002</entry>
|
|
<entry>4.6-STABLE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>460101</entry>
|
|
<entry>26. Juni 2002</entry>
|
|
<entry>4.6-STABLE nach dem Einfließen von `sed -i' aus
|
|
CURRENT.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>460102</entry>
|
|
<entry>1. September 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. Oktober 2002</entry>
|
|
<entry>4.7-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>470100</entry>
|
|
<entry>9. Oktober 2002</entry>
|
|
<entry>4.7-STABLE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>470101</entry>
|
|
<entry>10. November 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. Januar 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. Februar 2003</entry>
|
|
<entry>4.7-STABLE erhält OpenSSL 0.9.7</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>480000</entry>
|
|
<entry>30. März 2003</entry>
|
|
<entry>4.8-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>480100</entry>
|
|
<entry>5. April 2003</entry>
|
|
<entry>4.8-STABLE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>480101</entry>
|
|
<entry>22. Mai 2003</entry>
|
|
<entry>4.8-STABLE nachdem &man.realpath.3; Thread-sicher
|
|
gemacht wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>480102</entry>
|
|
<entry>10. August 2003</entry>
|
|
<entry>4.8-STABLE Änderung der 3ware-API in twe.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>490000</entry>
|
|
<entry>27. Oktober 2003</entry>
|
|
<entry>4.9-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>490100</entry>
|
|
<entry>27. Oktober 2003</entry>
|
|
<entry>4.9-STABLE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>490101</entry>
|
|
<entry>8. Januar 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. Februar 2004</entry>
|
|
<entry>4.9-STABLE nach dem Einfliessen der
|
|
libmap-Funktionalität für rtld.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>491000</entry>
|
|
<entry>25. Mai 2004</entry>
|
|
<entry>4.10-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>491100</entry>
|
|
<entry>1. Juni 2004</entry>
|
|
<entry>4.10-STABLE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>491101</entry>
|
|
<entry>11. August 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. November 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. Dezember 2004</entry>
|
|
<entry>4.11-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>492100</entry>
|
|
<entry>17. Dezember 2004</entry>
|
|
<entry>4.11-STABLE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>492101</entry>
|
|
<entry>18. April 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. März 2000</entry>
|
|
<entry>5.0-CURRENT</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500001</entry>
|
|
<entry>18. April 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. Mai 2000</entry>
|
|
<entry>5.0-CURRENT nach kld-Metadaten
|
|
Änderungen.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500003</entry>
|
|
<entry>18. Mai 2000</entry>
|
|
<entry>5.0-CURRENT nach buf/bio Änderungen.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500004</entry>
|
|
<entry>26. Mai 2000</entry>
|
|
<entry>5.0-CURRENT nach binutils Aktualisierung.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500005</entry>
|
|
<entry>3. Juni 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. Juni 2000</entry>
|
|
<entry>5.0-CURRENT nach dem Hinzufügen der
|
|
AGP-Schnittstellen.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500007</entry>
|
|
<entry>29. Juni 2000</entry>
|
|
<entry>5.0-CURRENT nach der Aktualisierung von Perl auf
|
|
Version 5.6.0.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500008</entry>
|
|
<entry>7. Juli 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. Juli 2000</entry>
|
|
<entry>5.0-CURRENT nach ether_ifattach() und
|
|
ether_ifdetach() Änderungen.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500010</entry>
|
|
<entry>16. Juli 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. Juli 2000</entry>
|
|
<entry>5.0-CURRENT nachdem die kqueue-API geändert
|
|
worden ist.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500012</entry>
|
|
<entry>2. September 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. September 2000</entry>
|
|
<entry>5.0-CURRENT nach dem ersten SMPng-Commit.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500014</entry>
|
|
<entry>4. Januar 2001</entry>
|
|
<entry>5.0-CURRENT nachdem <sys/select.h> nach
|
|
<sys/selinfo.h> verschoben worden ist.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500015</entry>
|
|
<entry>10. Januar 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. Januar 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. Februar 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. Februar 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. Juni 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. Juni 2001</entry>
|
|
<entry>5.0-CURRENT nach der Umbenennung der
|
|
locale-Namen.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500021</entry>
|
|
<entry>22. Juni 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. Juli 2001</entry>
|
|
<entry>5.0-CURRENT nach SSE Unterstützung.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500023</entry>
|
|
<entry>14. September 2001</entry>
|
|
<entry>5.0-CURRENT nach KSE-Meilenstein 2.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500024</entry>
|
|
<entry>1. Oktober 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. Oktober 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. Oktober 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. Oktober 2001</entry>
|
|
<entry>5.0-CURRENT nachdem die neue libc
|
|
strcasestr()-Funktion hinzugefügt wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500028</entry>
|
|
<entry>14. Dezember 2001</entry>
|
|
<entry>5.0-CURRENT nachdem die Userland-Komponenten von
|
|
smbfs importiert wurden.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>(nicht geändert)</entry>
|
|
<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. Januar 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. Februar 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. Februar 2002</entry>
|
|
<entry>5.0-CURRENT nach der Umbenennung der USB
|
|
elements-Struktur.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500032</entry>
|
|
<entry>16. März 2002</entry>
|
|
<entry>5.0-CURRENT nach der Einführung von Perl
|
|
5.6.1.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500033</entry>
|
|
<entry>3. April 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. April 2002</entry>
|
|
<entry>5.0-CURRENT nachdem mtx_init() einen dritten
|
|
Parameter entgegen nimmt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500035</entry>
|
|
<entry>13. Mai 2002</entry>
|
|
<entry>5.0-CURRENT mit GCC 3.1.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500036</entry>
|
|
<entry>17. Mai 2002</entry>
|
|
<entry>5.0-CURRENT ohne Perl in /usr/src</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500037</entry>
|
|
<entry>29. Mai 2002</entry>
|
|
<entry>5.0-CURRENT nach dem Hinzufügen von
|
|
&man.dlfunc.3;</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500038</entry>
|
|
<entry>24. Juli 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. September 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. September 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. Oktober 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. Oktober 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. November 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. Januar 2003</entry>
|
|
<entry>5.0-CURRENT nach dem Erstellen des
|
|
RELENG_5_0-Zweiges</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500101</entry>
|
|
<entry>19. Februar 2003</entry>
|
|
<entry><sys/dkstat.h> ist leer und sollte nicht
|
|
inkludiert werden.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500102</entry>
|
|
<entry>25. Februar 2003</entry>
|
|
<entry>5.0-CURRENT nach der Änderung in der
|
|
d_mmap_t-Schnittstelle.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500103</entry>
|
|
<entry>26. Februar 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. Februar 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. März 2003</entry>
|
|
<entry>5.0-CURRENT nach der neuen
|
|
cdevsw-Initialisierungsmethode.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500106</entry>
|
|
<entry>8. März 2003</entry>
|
|
<entry>devstat_add_entry() wurde durch
|
|
devstat_new_entry() ersetzt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500107</entry>
|
|
<entry>15. März 2003</entry>
|
|
<entry>Devstat Schnittstellenänderung; siehe
|
|
sys/sys/param.h 1.149.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500108</entry>
|
|
<entry>15. März 2003</entry>
|
|
<entry>Token-Ring Schnittstellenänderungen.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500109</entry>
|
|
<entry>25. März 2003</entry>
|
|
<entry>Hinzufügen von vm_paddr_t.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500110</entry>
|
|
<entry>28. März 2003</entry>
|
|
<entry>5.0-CURRENT nachdem &man.realpath.3;
|
|
Thread-sicher gemacht wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500111</entry>
|
|
<entry>9. April 2003</entry>
|
|
<entry>5.0-CURRENT nachdem &man.usbhid.3; mit
|
|
NetBSD synchronisiert wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>500112</entry>
|
|
<entry>17. April 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. Mai 2003</entry>
|
|
<entry>5.0-CURRENT nach Entfernen des alten
|
|
rc-Systems.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>501000</entry>
|
|
<entry>4. Juni 2003</entry>
|
|
<entry>5.1-RELEASE.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>501100</entry>
|
|
<entry>2. Juni 2003</entry>
|
|
<entry>5.1-CURRENT nach dem Erstellen des RELENG_5_1
|
|
Zweiges.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>501101</entry>
|
|
<entry>29. Juni 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. Juli 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. Juli 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. August 2003</entry>
|
|
<entry>5.1-CURRENT 3ware-API Änderungen in twe.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>501105</entry>
|
|
<entry>17. August 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. September 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. September 2003</entry>
|
|
<entry>5.1-CURRENT nachdem die 16550 UART-Konstanten von
|
|
<filename><dev/sio/sioreg.h></filename> nach
|
|
<filename><dev/ic/ns16550.h></filename> verschoben
|
|
wurden. Und nachdem die libmap Funktionalität
|
|
vorbehaltlos vom rtld unterstützt wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>501108</entry>
|
|
<entry>23. September 2003</entry>
|
|
<entry>5.1-CURRENT nach Aktualisierung der PFIL_HOOKS API.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>501109</entry>
|
|
<entry>27. September 2003</entry>
|
|
<entry>5.1-CURRENT nachdem kiconv(3) hinzugefügt
|
|
wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>501110</entry>
|
|
<entry>28. September 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. Oktober 2003</entry>
|
|
<entry>5.1-CURRENT nachdem das Layout von cdevsw
|
|
geändert wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>501112</entry>
|
|
<entry>16. Oktober 2003</entry>
|
|
<entry>5.1-CURRENT nach dem Hinzufügen von
|
|
Mehrfachvererbung in kobj.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>501113</entry>
|
|
<entry>31. Oktober 2003</entry>
|
|
<entry>5.1-CURRENT nach der if_xname Änderung in der
|
|
Struktur ifnet</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>501114</entry>
|
|
<entry>16. November 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. Dezember 2003</entry>
|
|
<entry>5.2-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>502010</entry>
|
|
<entry>23. Februar 2004</entry>
|
|
<entry>5.2.1-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>502100</entry>
|
|
<entry>7. Dezember 2003</entry>
|
|
<entry>5.2-CURRENT nach dem Erstellen des RELENG_5_2-Zweiges.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>502101</entry>
|
|
<entry>19. Dezember 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. Januar 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. Februar 2004</entry>
|
|
<entry>5.2-CURRENT nach dem Gerätetreiber API
|
|
Megapatch.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>502104</entry>
|
|
<entry>25. Februar 2004</entry>
|
|
<entry>5.2-CURRENT nachdem getopt_long_only()
|
|
hinzugefügt wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>502105</entry>
|
|
<entry>5. März 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. März 2004</entry>
|
|
<entry>5.2-CURRENT nachdem pf beim Bauen und Installieren
|
|
mit eingebunden wird.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>502107</entry>
|
|
<entry>10. März 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. März 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. März 2004</entry>
|
|
<entry>5.2-CURRENT nach der Einführung der
|
|
bus_alloc_resource_any API</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>502110</entry>
|
|
<entry>27. März 2004</entry>
|
|
<entry>5.2-CURRENT nach dem Hinzufügen von UTF-8
|
|
locales</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>502111</entry>
|
|
<entry>11. April 2004</entry>
|
|
<entry>5.2-CURRENT nach dem Entfernen der getvfsent(3)
|
|
API</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>502112</entry>
|
|
<entry>13. April 2004</entry>
|
|
<entry>5.2-CURRENT nach dem Hinzufügen der .warning
|
|
Directive für make.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>502113</entry>
|
|
<entry>4. Juni 2004</entry>
|
|
<entry>5.2-CURRENT nachdem ttyioctl() zwingend erforderlich
|
|
für serielle Treiber gemacht wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>502114</entry>
|
|
<entry>13. Juni 2004</entry>
|
|
<entry>5.2-CURRENT nach dem Import des
|
|
ALTQ-Frameworks.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>502115</entry>
|
|
<entry>14. Juni 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. Juni 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. Juni 2004</entry>
|
|
<entry>5.2-CURRENT nach dem Ändern der Kernelstruktur
|
|
udev_t in dev_t.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>502118</entry>
|
|
<entry>17. Juni 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. Juni 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. Juli 2004</entry>
|
|
<entry>5.2-CURRENT nach dem Einfliessen von Revision
|
|
20040629 der Paket-Werkzeuge.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>502121</entry>
|
|
<entry>9. Juli 2004</entry>
|
|
<entry>5.2-CURRENT nachdem Bluetooth-Quelltext als nicht
|
|
i386-spezifisch markiert wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>502122</entry>
|
|
<entry>11. Juli 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. Juli 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. Juli 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. Juli 2004</entry>
|
|
<entry>5.2-CURRENT nachdem die vorherige Änderung
|
|
rückgängig gemacht wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>502126</entry>
|
|
<entry>31. Juli 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. August 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. August 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. August 2004</entry>
|
|
<entry>5.3-BETA/RC vor der Änderung der pfil-API.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>503001</entry>
|
|
<entry>22. September 2004</entry>
|
|
<entry>5.3-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>503100</entry>
|
|
<entry>16. Oktober 2004</entry>
|
|
<entry>5.3-STABLE nach dem Erstellen des RELENG_5_3-Zweiges.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>503101</entry>
|
|
<entry>3. Dezember 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. Februar 2005</entry>
|
|
<entry>5.3-STABLE nachdem OpenBSD's nc(1) von CURRENT
|
|
importiert wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>503103</entry>
|
|
<entry>27. Februar 2005</entry>
|
|
<entry>5.4-PRERELEASE nach dem Einfliessen der Reparaturen
|
|
aus CURRENT, in
|
|
<filename><src/include/stdbool.h></filename> und
|
|
<filename><src/sys/i386/include/_types.h></filename>,
|
|
um die GCC-Kompatibilität des Intel C/C++-Compilers
|
|
zu benutzen.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>503104</entry>
|
|
<entry>28. Februar 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. März 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. April 2005</entry>
|
|
<entry>5.4-RELEASE.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>504100</entry>
|
|
<entry>3. April 2005</entry>
|
|
<entry>5.4-STABLE nach dem Erstellen des
|
|
RELENG_5_4-Zweiges.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>504101</entry>
|
|
<entry>11. Mai 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. Juni 2005</entry>
|
|
<entry>5.4-STABLE nach dem Hinzufügen von sha256.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>504103</entry>
|
|
<entry>3. Oktober 2005</entry>
|
|
<entry>5.4-STABLE nach dem Einfliessen von if_bridge aus
|
|
CURRENT.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>504104</entry>
|
|
<entry>13. November 2005</entry>
|
|
<entry>5.4-STABLE nach dem Einfliessen von bsdiff und
|
|
portsnap aus CURRENT.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>504105</entry>
|
|
<entry>17. Januar 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. Mai 2006</entry>
|
|
<entry>5.5-RELEASE.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>505100</entry>
|
|
<entry>12. Mai 2006</entry>
|
|
<entry>5.5-STABLE nach dem Erstellen des RELENG_5_5-Zweiges.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>600000</entry>
|
|
<entry>18. August 2004</entry>
|
|
<entry>6.0-CURRENT</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>600001</entry>
|
|
<entry>27. August 2004</entry>
|
|
<entry>6.0-CURRENT nach der festen Aktivierung von
|
|
PFIL_HOOKS im Kernel.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>600002</entry>
|
|
<entry>30. August 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. September 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. September 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. Oktober 2004</entry>
|
|
<entry>6.0-CURRENT nach dem Hinzufügen des "-d
|
|
DESTDIR" Schalters zu newsyslog.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>600006</entry>
|
|
<entry>4. November 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. Dezember 2004</entry>
|
|
<entry>6.0-CURRENT nach dem Hinzufügen von 802.11
|
|
Framework Neuerungen.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>600008</entry>
|
|
<entry>25. Januar 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. Februar 2005</entry>
|
|
<entry>6.0-CURRENT nach dem Hinzufügen von cpufreq
|
|
Framework und Treibern.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>600010</entry>
|
|
<entry>6. Februar 2005</entry>
|
|
<entry>6.0-CURRENT nachdem OpenBSD's nc(1) importiert
|
|
wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>600011</entry>
|
|
<entry>12. Februar 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. Februar 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. Februar 2005</entry>
|
|
<entry>6.0-CURRENT nach dem Einfliessen der Reparaturen in
|
|
<filename><src/include/stdbool.h></filename> und
|
|
<filename><src/sys/i386/include/_types.h></filename>,
|
|
um die GCC-Kompatibilität des Intel C/C++-Compilers
|
|
zu benutzen.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>600014</entry>
|
|
<entry>21. Februar 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. Februar 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. Februar 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. Februar 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. Februar 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. Februar 2005</entry>
|
|
<entry>Installation der acpica Include-Dateien in
|
|
/usr/include.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>600020</entry>
|
|
<entry>9. März 2005</entry>
|
|
<entry>Hinzufügen des MSG_NOSIGNAL Schalters zur
|
|
send(2) API.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>600021</entry>
|
|
<entry>17. März 2005</entry>
|
|
<entry>Hinzufügen von Feldern zu cdevsw</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>600022</entry>
|
|
<entry>21. März 2005</entry>
|
|
<entry>gtar wurde aus dem Basissystem entfernt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>600023</entry>
|
|
<entry>13. April 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. April 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. April 2005</entry>
|
|
<entry>Die Struktur icmphdr wurden zu 6.0-CURRENT
|
|
hinzugefügt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>600026</entry>
|
|
<entry>3. Mai 2005</entry>
|
|
<entry>pf Aktualisierung auf 3.7.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>600027</entry>
|
|
<entry>6. Mai 2005</entry>
|
|
<entry>Kernel libalias und ng_nat wurden
|
|
eingeführt.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>600028</entry>
|
|
<entry>13. Mai 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. Mai 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. Juni 2005</entry>
|
|
<entry>6.0-CURRENT nach dem Import von NetBSDs
|
|
if_bridge(4).</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>600031</entry>
|
|
<entry>10. Juni 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. Juli 2005</entry>
|
|
<entry>6.0-CURRENT nach dem Import von libpcap
|
|
v0.9.1.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>600033</entry>
|
|
<entry>25. Juli 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. August 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. November 2005</entry>
|
|
<entry>6.0-STABLE nach dem Erstellen des
|
|
6.0-RELEASE-Zweiges.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>600101</entry>
|
|
<entry>21. Dezember 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. Dezember 2005</entry>
|
|
<entry>6.0-STABLE nach dem Aktualisieren der ELF-Typen und
|
|
Konstanten.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>600103</entry>
|
|
<entry>15. Januar 2006</entry>
|
|
<entry>6.0-STABLE nach dem Einfliessen der pidfile(3)-API
|
|
aus CURRENT.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>600104</entry>
|
|
<entry>17. Januar 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. Februar 2006</entry>
|
|
<entry>6.0-STABLE nach der NLS-Katalogunterstützung
|
|
von csh(1).</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>601000</entry>
|
|
<entry>6. Mai 2006</entry>
|
|
<entry>6.1-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>601100</entry>
|
|
<entry>6. Mai 2006</entry>
|
|
<entry>6.1-STABLE nach 6.1-RELEASE.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>601101</entry>
|
|
<entry>22. Juni 2006</entry>
|
|
<entry>6.1-STABLE nach dem Import von csup.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>601102</entry>
|
|
<entry>11. Juli 2006</entry>
|
|
<entry>6.1-STABLE nach der iwi(4)-Aktualisierung.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>601103</entry>
|
|
<entry>17. Juli 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. August 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. September 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. November 2006</entry>
|
|
<entry>6.2-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>602100</entry>
|
|
<entry>15. September 2006</entry>
|
|
<entry>6.2-STABLE nach 6.2-RELEASE.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>602101</entry>
|
|
<entry>12. Dezember 2006</entry>
|
|
<entry>6.2-STABLE nach dem Hinzufügen der Wi-Spy
|
|
Eigenart.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>602102</entry>
|
|
<entry>28. Dezember 2006</entry>
|
|
<entry>6.2-STABLE nachdem pci_find_extcap() hinzugefügt
|
|
wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>602103</entry>
|
|
<entry>16. Januar 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. Januar 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. Februar 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. März 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. April 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. April 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. April 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. Mai 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. Juni 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. September 2007</entry>
|
|
<entry>6.2-STABLE nach dem Einpflegen von libutil(3) aus
|
|
CURRENT.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>602113</entry>
|
|
<entry>25. Oktober 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. Oktober 2007</entry>
|
|
<entry>6.2-STABLE, nachdem die ctype
|
|
ABI-Aufwärtskompatibilität wiederhergestellt
|
|
wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>602115</entry>
|
|
<entry>21. November 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. November 2007</entry>
|
|
<entry>6.3-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>603100</entry>
|
|
<entry>25. November 2007</entry>
|
|
<entry>6.3-STABLE nach 6.3-RELEASE.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>603101</entry>
|
|
<entry>7. Dezember 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. April 2008</entry>
|
|
<entry>6.3-STABLE nach Hinzufügen von l_sysid zu
|
|
struct flock.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>603103</entry>
|
|
<entry>27. Mai 2008</entry>
|
|
<entry>6.3-STABLE nach Einfließen der
|
|
<function>memrchr</function>-Funktion.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>603104</entry>
|
|
<entry>15. Juni 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. Oktober 2008</entry>
|
|
<entry>6.4-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>604100</entry>
|
|
<entry>4. Oktober 2008</entry>
|
|
<entry>6.4-STABLE nach 6.4-RELEASE.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700000</entry>
|
|
<entry>11. Juli 2005</entry>
|
|
<entry>7.0-CURRENT.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700001</entry>
|
|
<entry>23. Juli 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. August 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. August 2005</entry>
|
|
<entry>7.0-CURRENT nachdem memmem(3) zur libc
|
|
hinzugefügt wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700004</entry>
|
|
<entry>30. Oktober 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. November 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. November 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. Dezember 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. Dezember 2005</entry>
|
|
<entry>7.0-CURRENT nach dem Entfernen der MNT_NODEV
|
|
mount-Option.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700009</entry>
|
|
<entry>19. Dezember 2005</entry>
|
|
<entry>7.0-CURRENT nach ELF-64 Typen Änderungen und
|
|
Symbol Versionierung.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700010</entry>
|
|
<entry>20. Dezember 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. Dezember 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. Januar 2006</entry>
|
|
<entry>7.0-CURRENT nach Änderung von
|
|
ldconfig_local_dirs.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700013</entry>
|
|
<entry>12. Januar 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. Januar 2006</entry>
|
|
<entry>7.0-CURRENT nach pts Import.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700015</entry>
|
|
<entry>26. März 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. April 2006</entry>
|
|
<entry>7.0-CURRENT nach dem Hinzufügen von
|
|
&man.fcloseall.3; zur libc.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700017</entry>
|
|
<entry>13. Mai 2006</entry>
|
|
<entry>7.0-CURRENT nach dem Entfernen von ip6fw.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700018</entry>
|
|
<entry>15. Juli 2006</entry>
|
|
<entry>7.0-CURRENT nach dem Import von snd_emu10kx.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700019</entry>
|
|
<entry>29. Juli 2006</entry>
|
|
<entry>7.0-CURRENT nach dem Import von OpenSSL
|
|
0.9.8b.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700020</entry>
|
|
<entry>3. September 2006</entry>
|
|
<entry>7.0-CURRENT nach dem Hinzufügen der
|
|
bus_dma_get_tag-Funktion</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700021</entry>
|
|
<entry>4. September 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. September 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. September 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. September 2006</entry>
|
|
<entry>7.0-CURRENT nach dem Import von OpenSSL
|
|
0.9.8d.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700025</entry>
|
|
<entry>11. November 2006</entry>
|
|
<entry>7.0-CURRENT nach dem Hinzufügen der
|
|
libelf.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700026</entry>
|
|
<entry>26. November 2006</entry>
|
|
<entry>7.0-CURRENT nach größeren
|
|
Änderungen an den Sound sysctls.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700027</entry>
|
|
<entry>30. November 2006</entry>
|
|
<entry>7.0-CURRENT nach dem Hinzufügen der
|
|
Wi-Spy-Eigenart.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700028</entry>
|
|
<entry>15. Dezember 2006</entry>
|
|
<entry>7.0-CURRENT nach dem Hinzufügen von
|
|
sctp-Aufrufen zur libc.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700029</entry>
|
|
<entry>26. Januar 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. Februar 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. Februar 2007</entry>
|
|
<entry>7.0-CURRENT nach den Modifizierungen an
|
|
bus_setup_intr() (newbus).</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700032</entry>
|
|
<entry>2. März 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. März 2007</entry>
|
|
<entry>7.0-CURRENT nach Unterstützung für
|
|
Multibyte-Zeichen.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700034</entry>
|
|
<entry>19. März 2007</entry>
|
|
<entry>7.0-CURRENT nach Änderungen, wie insmntque(),
|
|
getnewvnode() und vfs_hash_insert() arbeiten.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700035</entry>
|
|
<entry>26. März 2007</entry>
|
|
<entry>7.0-CURRENT nach Hinzufügen eines
|
|
Benachrichtigungsmechanismus für CPU
|
|
Frequenzänderungen.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700036</entry>
|
|
<entry>6. April 2007</entry>
|
|
<entry>7.0-CURRENT nach dem Import des ZFS
|
|
Dateisystemes.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700037</entry>
|
|
<entry>8. April 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. April 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. Mai 2007</entry>
|
|
<entry>7.0-CURRENT nachdem die Änderungen von 700038
|
|
rückgängig gemacht wurden.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700040</entry>
|
|
<entry>10. Mai 2007</entry>
|
|
<entry>7.0-CURRENT nach dem Hinzufügen von
|
|
&man.flopen.3; zur libutil.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700041</entry>
|
|
<entry>13. Mai 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. Mai 2007</entry>
|
|
<entry>7.0-CURRENT nach dem Import von GCC 4.2.0.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700043</entry>
|
|
<entry>21. Mai 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. Juni 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. Juni 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. Juni 2007</entry>
|
|
<entry>7.0-CURRENT nach aktualisierter 802.11 wireless
|
|
Unterstützung.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700047</entry>
|
|
<entry>11. Juni 2007</entry>
|
|
<entry>7.0-CURRENT, nachdem
|
|
TCP-LRO-Schnittstellen-Ressourcen hinzugefügt
|
|
wurden.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700048</entry>
|
|
<entry>12. Juni 2007</entry>
|
|
<entry>7.0-CURRENT, nachdem die RFC 3678
|
|
API-Unterstützung zum IPv4-Stack hinzugefügt
|
|
wurde. Veraltetes RFC 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. Juli 2007</entry>
|
|
<entry>7.0-CURRENT, nachdem pf von OpenBSD 4.1
|
|
importiert wurde</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>(nicht geändert)</entry>
|
|
<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. Juli 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. Juli 2007</entry>
|
|
<entry>7.0-CURRENT, nachdem neue Systemaufrufe
|
|
(mmap/lseek/usw.) implementiert wurden.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700052</entry>
|
|
<entry>6. Juli 2007</entry>
|
|
<entry>7.0-CURRENT, nachdem die I4B-Header nach
|
|
include/i4b verschoben wurden.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700053</entry>
|
|
<entry>30. September 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. Oktober 2007</entry>
|
|
<entry>7.0-CURRENT, nach der Trennung in "wide und
|
|
single byte ctype".</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700055</entry>
|
|
<entry>28. Oktober 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. Dezember 2007</entry>
|
|
<entry>7.0-STABLE nach 7.0-RELEASE.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700101</entry>
|
|
<entry>8. Februar 2008</entry>
|
|
<entry>7.0-STABLE nach Einführung von
|
|
m_collapse().</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700102</entry>
|
|
<entry>30. März 2008</entry>
|
|
<entry>7.0-STABLE nach Einfließen von
|
|
kdb_enter_why().</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700103</entry>
|
|
<entry>10. April 2008</entry>
|
|
<entry>7.0-STABLE nach Hinzufügen von l_sysid zu
|
|
struct flock.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700104</entry>
|
|
<entry>11. April 2008</entry>
|
|
<entry>7.0-STABLE nach Übernahme von
|
|
procstat(1).</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700105</entry>
|
|
<entry>11. April 2008</entry>
|
|
<entry>7.0-STABLE nach Einführung von
|
|
umtx-Features.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700106</entry>
|
|
<entry>15. April 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. April 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. Mai 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. Mai 2008</entry>
|
|
<entry>7.0-STABLE nach Einfließen der
|
|
<function>memrchr</function>-Funktion.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700110</entry>
|
|
<entry>5. August 2008</entry>
|
|
<entry>7.0-STABLE nach Einführung eines Clients
|
|
für den Kernel NFS lockd.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700111</entry>
|
|
<entry>20. August 2008</entry>
|
|
<entry>7.0-STABLE nach Hinzufügen einer
|
|
Unterstützung von physisch fortlaufender
|
|
Jumbo Frames.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>700112</entry>
|
|
<entry>27. August 2008</entry>
|
|
<entry>7.0-STABLE nach Einfließen einer
|
|
Kernelunterstützung für DTrace.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>701000</entry>
|
|
<entry>25. November 2008</entry>
|
|
<entry>7.1-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>701100</entry>
|
|
<entry>25. November 2008</entry>
|
|
<entry>7.1-STABLE nach 7.1-RELEASE.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>701101</entry>
|
|
<entry>10. Januar 2009</entry>
|
|
<entry>7.1-STABLE nach Übernahme von
|
|
<function>strndup</function>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>701102</entry>
|
|
<entry>17. Januar 2009</entry>
|
|
<entry>7.1-STABLE nach Hinzufügen einer
|
|
Unterstützung von cpuctl(4).</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>701103</entry>
|
|
<entry>7. Februar 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. Februar 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. März 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. März 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. April 2009</entry>
|
|
<entry>7.2-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>702100</entry>
|
|
<entry>15. April 2009</entry>
|
|
<entry>7.2-STABLE nach 7.2-RELEASE.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>702101</entry>
|
|
<entry>15. Mai 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. Mai 2009</entry>
|
|
<entry>7.2-STABLE nach dem Einfließen der Funktion
|
|
<function>fdopendir</function>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>702103</entry>
|
|
<entry>06. Juni 2009</entry>
|
|
<entry>7.2-STABLE nach dem Einfließen von PmcTools.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>702104</entry>
|
|
<entry>14. Juli 2009</entry>
|
|
<entry>7.2-STABLE nach dem Einfließen des
|
|
Systemaufrufs <function>closefrom</function>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>702105</entry>
|
|
<entry>31. Juli 2009</entry>
|
|
<entry>7.2-STABLE nach dem Einfließen der
|
|
Änderung an der SYSVIPC-ABI.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>702106</entry>
|
|
<entry>14. September 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. Februar 2010</entry>
|
|
<entry>7.3-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>703100</entry>
|
|
<entry>9. Februar 2010</entry>
|
|
<entry>7.3-STABLE nach 7.3-RELEASE.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>704000</entry>
|
|
<entry>22. Dezember 2010</entry>
|
|
<entry>7.4-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>704100</entry>
|
|
<entry>22. Dezember 2010</entry>
|
|
<entry>7.4-STABLE, nachdem 7.4-RELEASE erzeugt
|
|
wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800000</entry>
|
|
<entry>11. Oktober 2007</entry>
|
|
<entry>8.0-CURRENT. Nach der Trennung in "wide und
|
|
single byte ctype".</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800001</entry>
|
|
<entry>16. Oktober 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. Oktober 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. Oktober 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. November 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. Dezember 2007</entry>
|
|
<entry>8.0-CURRENT nach <ulink
|
|
url="http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/kern/kern_mbuf.c#rev1.35">Änderungen
|
|
am Jumbo Frame Allocator</ulink>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800006</entry>
|
|
<entry>7. Dezember 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. Dezember 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. Dezember 2007</entry>
|
|
<entry>8.0-CURRENT nach Entfernen der Option
|
|
LK_EXCLUPGRADE.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800009</entry>
|
|
<entry>9. Januar 2008</entry>
|
|
<entry>8.0-CURRENT nach Einführung von
|
|
&man.lockmgr.disown.9;</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800010</entry>
|
|
<entry>10. Januar 2008</entry>
|
|
<entry>8.0-CURRENT nach Änderungen am
|
|
&man.vn.lock.9;-Prototyp.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800011</entry>
|
|
<entry>13. Januar 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. Januar 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. Januar 2008</entry>
|
|
<entry>8.0-CURRENT nach Einführung der
|
|
<quote>ASCII</quote>-Kodierung.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800014</entry>
|
|
<entry>24. Januar 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. Januar 2008</entry>
|
|
<entry>8.0-CURRENT nach Erweiterung der Datentypen der
|
|
&man.fts.3;-Strukturen.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800016</entry>
|
|
<entry>1. Februar 2008</entry>
|
|
<entry>8.0-CURRENT nach Hinzufügen eines neuen
|
|
Parameters zu MEXTADD(9).</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800017</entry>
|
|
<entry>6. Februar 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. Februar 2008</entry>
|
|
<entry>8.0-CURRENT nach Hinzufügen von
|
|
m_collapse.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800019</entry>
|
|
<entry>9. Februar 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. Februar 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. Februar 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 &man.ar.1;
|
|
als Systemstandard.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800023</entry>
|
|
<entry>25. Februar 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 thread</literal>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800024</entry>
|
|
<entry>1. März 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. März 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. März 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. März 2008</entry>
|
|
<entry>8.0-CURRENT nach Änderung der
|
|
Monitoring ABI von BPF, als Zero-Copy Puffer
|
|
hinzugefügt wurden.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800028</entry>
|
|
<entry>26. März 2008</entry>
|
|
<entry>8.0-CURRENT nach Hinzufügen von l_sysid zu
|
|
struct flock.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800029</entry>
|
|
<entry>28. März 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. April 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. April 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. April 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. April 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
|
|
<devicename>/dev/psm%d</devicename> geschrieben und
|
|
der Status dann von dort gelesen werden.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800034</entry>
|
|
<entry>10. April 2008</entry>
|
|
<entry>8.0-CURRENT nach Einführung der Funktion
|
|
<function>memrchr</function>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800035</entry>
|
|
<entry>16. April 2008</entry>
|
|
<entry>8.0-CURRENT nach Einführung der Funktion
|
|
<function>fdopendir</function>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800036</entry>
|
|
<entry>20. April 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. Mai 2008</entry>
|
|
<entry>8.0-CURRENT nach Hinzufügen einer
|
|
Unterstützung für
|
|
Multi Routing-Tabellen (siehe setfib(1),
|
|
setfib(2)).</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800038</entry>
|
|
<entry>26. Mai 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. Juni 2008</entry>
|
|
<entry>8.0-CURRENT nach Entfernen von sgtty.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800040</entry>
|
|
<entry>26. Juni 2008</entry>
|
|
<entry>8.0-CURRENT nach Einführung eines Clients
|
|
für den Kernel NFS lockd.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800041</entry>
|
|
<entry>22. Juli 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. August 2008</entry>
|
|
<entry>8.0-CURRENT nach Hinzufügen von
|
|
cpuctl(4).</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800043</entry>
|
|
<entry>13. August 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. August 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. August 2008</entry>
|
|
<entry>8.0-CURRENT nach Eingliederung des
|
|
MPSAFE TTY-Layers, einschließlich
|
|
Änderungen an diversen Treibern und Werkzeugen,
|
|
die mit ihm kommunizieren.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800046</entry>
|
|
<entry>8. September 2008</entry>
|
|
<entry>8.0-CURRENT nach Abschottung der GDT pro CPU auf
|
|
der AMD64-Architektur.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800047</entry>
|
|
<entry>10. September 2008</entry>
|
|
<entry>8.0-CURRENT nach Entfernen von VSVTX, VSGID und
|
|
VSUID.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800048</entry>
|
|
<entry>16. September 2008</entry>
|
|
<entry>8.0-CURRENT nach Anpassung des Codes für
|
|
Kernel NFS mount, sodass einzelne
|
|
Mountoptionen im Parameter struct iovec an
|
|
nmount() akzeptiert werden und nicht nur ein
|
|
großes struct nfs_args.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800049</entry>
|
|
<entry>17. September 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. Oktober 2008</entry>
|
|
<entry>8.0-CURRENT nach API-Änderungen im Umgang
|
|
mit dem Buffer Cache.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800051</entry>
|
|
<entry>23. Oktober 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. Oktober 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. November 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. November 2008</entry>
|
|
<entry>8.0-CURRENT nach Hinzufügen von Funktionen
|
|
im Bereich buf_ring, Memory Barriers und ifnet,
|
|
um mehrere Sendeschlangen auf Hardwareebene für
|
|
Karten zu ermöglichen, die dies
|
|
unterstützen, sowie einer
|
|
Ring Buffer-Implementierung ohne Lock, um
|
|
Treibern zu ermöglichen, Paketschlangen
|
|
effizienter zu verwalten.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800055</entry>
|
|
<entry>27. November 2008</entry>
|
|
<entry>8.0-CURRENT nach Hinzufügen einer
|
|
Unterstützung für &intel; Core, Core2
|
|
und Atom zu &man.hwpmc.4;.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800056</entry>
|
|
<entry>29. November 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. Dezember 2008</entry>
|
|
<entry>8.0-CURRENT nach Wechsel zum
|
|
ath_hal Quellcode.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800058</entry>
|
|
<entry>12. Dezember 2008</entry>
|
|
<entry>8.0-CURRENT nach Einführung der Funktion
|
|
VOP_VPTOCNP.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800059</entry>
|
|
<entry>15. Dezember 2008</entry>
|
|
<entry>8.0-CURRENT gliedert das neue ARPv2 ein.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800060</entry>
|
|
<entry>19. Dezember 2008</entry>
|
|
<entry>8.0-CURRENT nach Hinzufügen von
|
|
makefs.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800061</entry>
|
|
<entry>15. Januar 2009</entry>
|
|
<entry>8.0-CURRENT nach Umsetzung von
|
|
TCP Appropriate Byte Counting.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800062</entry>
|
|
<entry>28. Januar 2009</entry>
|
|
<entry>8.0-CURRENT nach Entfernen von minor(),
|
|
minor2unit(), unit2minor() usw.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800063</entry>
|
|
<entry>18. Februar 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. Februar 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. Februar 2009</entry>
|
|
<entry>8.0-CURRENT nach Umbenennen aller Funktionen in
|
|
libmp(3).</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800066</entry>
|
|
<entry>27. Februar 2009</entry>
|
|
<entry>8.0-CURRENT nach Anpassung des devfs-Verhaltens
|
|
im Zusammenhang mit USB.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800067</entry>
|
|
<entry>28. Februar 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. März 2009</entry>
|
|
<entry>8.0-CURRENT nach Umbenennen der Geräteklasse
|
|
ushub in uhub.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800069</entry>
|
|
<entry>9. März 2009</entry>
|
|
<entry>8.0-CURRENT nach Umbenennen von libusb20.so.1 in
|
|
libusb.so.1.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800070</entry>
|
|
<entry>9. März 2009</entry>
|
|
<entry>8.0-CURRENT nach der Einführung von IGMPv3
|
|
und Source-Specific-Multicast (SSM) in den
|
|
IPv4-Stack.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800071</entry>
|
|
<entry>14. März 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. März 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. März 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. März 2009</entry>
|
|
<entry>8.0-CURRENT nach dem Einfließen von
|
|
tcpdump 4.0.0 und libpcap 1.0.0.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800075</entry>
|
|
<entry>6. April 2009</entry>
|
|
<entry>8.0-CURRENT, nachdem die Deklarationen von
|
|
struct vnet_net, struct vnet_inet und
|
|
struct vnet_ipfw geändert wurden.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800076</entry>
|
|
<entry>9. April 2009</entry>
|
|
<entry>8.0-CURRENT nach dem Hinzufügen von
|
|
Laufzeitprofilen in dummynet.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800077</entry>
|
|
<entry>14. April 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. April 2009</entry>
|
|
<entry>8.0-CURRENT, nachdem die Felder aus
|
|
struct rt_weight zu struct rt_metrics und
|
|
struct rt_metrics_lite hinzugefügt wurden,
|
|
wobei die Deklaration von struct rt_metrics_lite
|
|
geändert wurde. RTM_VERSION wurde
|
|
hochgezählt (zurückgezogen).</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800079</entry>
|
|
<entry>15. April 2009</entry>
|
|
<entry>8.0-CURRENT, nachdem Pointer auf
|
|
struct llentry zu struct route und
|
|
struct route_in6 hinzugefügt wurden.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800080</entry>
|
|
<entry>15. April 2009</entry>
|
|
<entry>8.0-CURRENT nach Änderung der Deklaration
|
|
von struct inpcb.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800081</entry>
|
|
<entry>19. April 2009</entry>
|
|
<entry>8.0-CURRENT nach Änderung der Deklaration
|
|
von struct malloc_type.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800082</entry>
|
|
<entry>21. April 2009</entry>
|
|
<entry>8.0-CURRENT nach Änderung der Deklaration
|
|
von struct ifnet und Hinzufügen von if_ref()
|
|
und if_rele() zur Verwaltung von Referenzen auf
|
|
ifnet.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800083</entry>
|
|
<entry>22. April 2009</entry>
|
|
<entry>8.0-CURRENT nach der Implementierung einer
|
|
systemnahen Bluetooth-HCI-API.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800084</entry>
|
|
<entry>29. April 2009</entry>
|
|
<entry>8.0-CURRENT nach Änderungen an IPv6-SSM und
|
|
MLDv2.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800085</entry>
|
|
<entry>30. April 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. Mai 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. Mai 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. Mai 2009</entry>
|
|
<entry>8.0-CURRENT nach Änderungen am
|
|
net80211-Monitormodus.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800089</entry>
|
|
<entry>23. Mai 2009</entry>
|
|
<entry>8.0-CURRENT nach dem Hinzufügen der
|
|
Unterstützung von UDP-Kontrollblocks.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800090</entry>
|
|
<entry>23. Mai 2009</entry>
|
|
<entry>8.0-CURRENT nach der Virtualisierung der
|
|
Schnittstellenklonierung.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800091</entry>
|
|
<entry>27. Mai 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. Mai 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. Mai 2009</entry>
|
|
<entry>8.0-CURRENT nach dem Hinzufügen von
|
|
mnt_xflag zu struct mount.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800094</entry>
|
|
<entry>30. Mai 2009</entry>
|
|
<entry>8.0-CURRENT nach dem Hinzufügen von
|
|
&man.VOP.ACCESSX.9;.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800095</entry>
|
|
<entry>30. Mai 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. Juni 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. Juni 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. Juni 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. Juni 2009</entry>
|
|
<entry>8.0-CURRENT nach dem Einfließen von OpenSSL
|
|
0.9.8k.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800099</entry>
|
|
<entry>22. Juni 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. Juni 2009</entry>
|
|
<entry>8.0-CURRENT nach Änderung der
|
|
SYSVIPC-ABI.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800101</entry>
|
|
<entry>29. Juni 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. Juli 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. Juli 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. Juli 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. Juli 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. Juli 2009</entry>
|
|
<entry>8.0-CURRENT nach Einführung des
|
|
VM-Objekttyps OBJT_SG.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800107</entry>
|
|
<entry>2. August 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. November 2009</entry>
|
|
<entry>8.0-CURRENT nach Implementierung des
|
|
kevent-Filters EVFILT_USER.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800500</entry>
|
|
<entry>7. Januar 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. Januar 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. Januar 2010</entry>
|
|
<entry>8.0-STABLE nach Hinzufügen von
|
|
<function>sigpause(3)</function>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>800503</entry>
|
|
<entry>25. Februar 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. März 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. Mai 2010</entry>
|
|
<entry>8.0-STABLE nach dem Einfließen von liblzma,
|
|
xz, xzdec und lzmainfo.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>801000</entry>
|
|
<entry>14. Juni 2010</entry>
|
|
<entry>8.1-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>801500</entry>
|
|
<entry>14. Juni 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. Dezember 2010</entry>
|
|
<entry>8.2-RELEASE</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>802500</entry>
|
|
<entry>22. Dezember 2010</entry>
|
|
<entry>8.2-STABLE, nachdem 8.2-RELEASE erzeugt
|
|
wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>802501</entry>
|
|
<entry>28. Februar 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. März 2011</entry>
|
|
<entry>8.2-STABLE, nachdem log2 und log2f in libm aufgenommen
|
|
wurden.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>802503</entry>
|
|
<entry>1. Mai 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. Mai 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. Mai 2011</entry>
|
|
<entry>8.2-STABLE, nachdem die KPIs Hhook und Khelp
|
|
implementiert wurden.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>802506</entry>
|
|
<entry>M28. Mai 2011</entry>
|
|
<entry>8.2-STABLE, nachdem OSD in die Struktur tcpcb
|
|
eingebaut wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>802507</entry>
|
|
<entry>6. Juni 2011</entry>
|
|
<entry>8.2-STABLE nach dem Import von ZFS v28.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>802508</entry>
|
|
<entry>8. Juni 2011</entry>
|
|
<entry>8.2-STABLE, nach dem Entfernen der Methode
|
|
sv_schedtail struct sysvec.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>802509</entry>
|
|
<entry>14. Juli 2011</entry>
|
|
<entry>8.2-STABLE, nachdem die binutils um die
|
|
SSSE3-Unterstützung erweitert wurden.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>802510</entry>
|
|
<entry>19. Juli 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. August 2009</entry>
|
|
<entry>9.0-CURRENT.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>900001</entry>
|
|
<entry>8. September 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. September 2009</entry>
|
|
<entry>9.0-CURRENT nach Implementierung des
|
|
kevent-Filters EVFILT_USER.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>900003</entry>
|
|
<entry>2. Dezember 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. Dezember 2009</entry>
|
|
<entry>9.0-CURRENT nach Hinzufügen von libulog und
|
|
dessen
|
|
libutempter-Kompatibilitätsschnittstelle.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>900005</entry>
|
|
<entry>12. Dezember 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. Januar 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. Januar 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. Januar 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. Januar 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. März 2010</entry>
|
|
<entry>9.0-CURRENT nach dem Import von zlib
|
|
1.2.4.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>900011</entry>
|
|
<entry>24. April 2010</entry>
|
|
<entry>9.0-CURRENT nach Hinzufügen von Soft Updates
|
|
Journaling.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>900012</entry>
|
|
<entry>10. Mai 2010</entry>
|
|
<entry>9.0-CURRENT nach Hinzufügen von liblzma, xz,
|
|
xzdec und lzmainfo.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>900013</entry>
|
|
<entry>24. Mai 2010</entry>
|
|
<entry>9.0-CURRENT nach Einbringen von
|
|
USB-Fehlerbehebungen in linux(4).</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>900014</entry>
|
|
<entry>10. Juni 2010</entry>
|
|
<entry>9.0-CURRENT nach Hinzufügen von
|
|
Clang.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>900015</entry>
|
|
<entry>22. Juli 2010</entry>
|
|
<entry>9.0-CURRENT nach dem Import von BSD grep.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>900016</entry>
|
|
<entry>28. Juli 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. August 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. August 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. August 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. September 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. September 2010</entry>
|
|
<entry>9.0-CURRENT, nachdem <quote>Userland
|
|
tracing</quote> in DTrace eingeführt
|
|
wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>900022</entry>
|
|
<entry>2. Oktober 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. Oktober 2010</entry>
|
|
<entry>9.0-CURRENT nach der Aktualisierung von
|
|
xz auf den git-Snapshot 20101010.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>900024</entry>
|
|
<entry>11. November 2010</entry>
|
|
<entry>9.0-CURRENT, nachdem libgcc.a durch
|
|
libcompiler_rt.a.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>900025</entry>
|
|
<entry>12. November 2010</entry>
|
|
<entry>9.0-CURRENT nach der Einführung
|
|
von <quote>modularised congestion
|
|
control</quote>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>900026</entry>
|
|
<entry>30. November 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. Dezember 2010</entry>
|
|
<entry>9.0-CURRENT, nachdem log2 zu libm
|
|
hinzugefügt wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>900028</entry>
|
|
<entry>21. Dezember 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. Dezember 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. Januar 2011</entry>
|
|
<entry>9.0-CURRENT, nachdem libdialog auf die Version
|
|
20100428 aktualisiert wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>900031</entry>
|
|
<entry>7. Februar 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. Februar 2011</entry>
|
|
<entry>9.0-CURRENT, nachdem Prototyp und Symbol für
|
|
uio_yield entfernt wurden.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>900033</entry>
|
|
<entry>18. Februar 2011</entry>
|
|
<entry>9.0-CURRENT, nachdem die binutils auf Version
|
|
2.17.50 aktualisiert wurden.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>900034</entry>
|
|
<entry>8. März 2011</entry>
|
|
<entry>9.0-CURRENT, nachdem die Struktur
|
|
sysvec (sv_schedtail) modifiziert wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>900035</entry>
|
|
<entry>29. März 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. April 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. Mai 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. Mai 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. Juni 2011</entry>
|
|
<entry>9.0-CURRENT, nachdem pf von OpenBSD 4.5 importiert
|
|
wurde.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>900041</entry>
|
|
<entry>13. August 2011</entry>
|
|
<entry>9.0-CURRENT, nachdem Capsicum-Funktionalitäten
|
|
implementiert wurden. Zusätzlich wurde fget(9) um ein
|
|
Rechte-Argument erweitert.</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 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
|
|
<bsd.port.mk></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><makevar>ARCH</makevar></entry>
|
|
<entry>Die Architektur, wie von <command>uname
|
|
-m</command> zurückgegeben (z.B.
|
|
<literal>i386</literal>)</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>OPSYS</makevar></entry>
|
|
<entry>Der Typ des Betriebsystems, wie von <command>uname
|
|
-s</command> zurückgegeben (z.B.
|
|
<literal>FreeBSD</literal>)</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>OSREL</makevar></entry>
|
|
<entry>Die Release Version des Betriebssystems (z.B.,
|
|
<literal>2.1.5</literal> oder
|
|
<literal>2.2.7</literal>)</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>OSVERSION</makevar></entry>
|
|
<entry>Die numerische Version des Betriebssystems;
|
|
gleichbedeutend mit <link
|
|
linkend="freebsd-versions"><literal>__FreeBSD_version</literal></link>.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>PORTOBJFORMAT</makevar></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><makevar>LOCALBASE</makevar></entry>
|
|
<entry>Die Basis des <quote>local</quote>
|
|
Verzeichnisbaumes (z.B.
|
|
<literal>/usr/local/</literal>)</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><makevar>PREFIX</makevar></entry>
|
|
<entry>Wo der Port sich selbst installiert (siehe <link
|
|
linkend="porting-prefix"> Mehr Informationen über
|
|
<makevar>PREFIX</makevar></link>).</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
|
|
<note>
|
|
<para>Falls Sie die Variablen <makevar>USE_IMAKE</makevar>,
|
|
<makevar>USE_X_PREFIX</makevar>, oder
|
|
<makevar>MASTERDIR</makevar> 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} > 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 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 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
|
|
<maketarget>do-extract</maketarget> neu zu definieren, dies
|
|
mit <makevar>EXTRACT*</makevar> machen, oder
|
|
<makevar>GNU_CONFIGURE</makevar> anstelle von
|
|
<literal>CONFIGURE_ARGS += --prefix=${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 id="dads-cc">
|
|
<title>Berücksichtigen Sie sowohl <makevar>CC</makevar> als
|
|
auch <makevar>CXX</makevar></title>
|
|
|
|
<para>Der Port sollte sowohl die <makevar>CC</makevar>- wie
|
|
auch die <makevar>CXX</makevar>-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 <makevar>CC</makevar> und <makevar>CXX</makevar>
|
|
berücksichtigt. Beachten Sie das
|
|
<makevar>?=</makevar>:</para>
|
|
|
|
<programlisting>CC?= gcc</programlisting>
|
|
<programlisting>CXX?= g++</programlisting>
|
|
|
|
<para>Nachfolgend ein Beispiel, welches weder
|
|
<makevar>CC</makevar> noch <makevar>CXX</makevar>
|
|
berücksichtigt:</para>
|
|
|
|
<programlisting>CC= gcc</programlisting>
|
|
<programlisting>CXX= g++</programlisting>
|
|
|
|
<para>Die Variablen <makevar>CC</makevar> und
|
|
<makevar>CXX</makevar> 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 id="dads-cflags">
|
|
<title>Berücksichtigen Sie
|
|
<makevar>CFLAGS</makevar></title>
|
|
|
|
<para>Der Port sollte die Variable <makevar>CFLAGS</makevar>
|
|
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
|
|
<makevar>CFLAGS</makevar> berücksichtigt. Beachten Sie
|
|
das <makevar>+=</makevar>:</para>
|
|
|
|
<programlisting>CFLAGS+= -Wall -Werror</programlisting>
|
|
|
|
<para>Nachfolgend finden Sie ein Beispiel, welches die
|
|
<makevar>CFLAGS</makevar>-Variable nicht
|
|
berücksichtigt:</para>
|
|
|
|
<programlisting>CFLAGS= -Wall -Werror</programlisting>
|
|
|
|
<para>Die Variable <makevar>CFLAGS</makevar> wird auf
|
|
FreeBSD-Systemen in <filename>/etc/make.conf</filename>
|
|
definiert. Im ersten Beispiel werden weitere Flags an die
|
|
Variable <makevar>CFLAGS</makevar> 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
|
|
<makevar>CFLAGS</makevar> 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 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 <makevar>PTHREAD_LIBS</makevar>
|
|
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
|
|
<makevar>PTHREAD_LIBS</makevar>.</para>
|
|
|
|
<note>
|
|
<para>Falls durch das Setzen von
|
|
<makevar>PTHREAD_LIBS</makevar> 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
|
|
<makevar>CONFIGURE_ENV</makevar> auf
|
|
<literal>LD=${CC}</literal> helfen. Die Option
|
|
<literal>-pthread</literal> wird nicht direkt von
|
|
<command>ld</command> unterstützt.</para>
|
|
</note>
|
|
</sect1>
|
|
|
|
<sect1 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 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 id="dads-noinstall">
|
|
<title>Einen Port durch <makevar>BROKEN</makevar>,
|
|
<makevar>FORBIDDEN</makevar> oder <makevar>IGNORE</makevar> 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 id="dads-noinstall-variables">
|
|
<title>Variablen</title>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para><makevar>BROKEN</makevar> 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 <makevar>BROKEN</makevar> 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><makevar>FORBIDDEN</makevar> 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
|
|
<makevar>FORBIDDEN</makevar> 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 <makevar>FORBIDDEN</makevar>.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><makevar>IGNORE</makevar> 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 <makevar>IGNORE</makevar> markiert sind,
|
|
erstellen. Verwenden Sie <makevar>IGNORE</makevar> 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
|
|
<filename role="package">www/apache21</filename> ab,
|
|
aber <filename
|
|
role="package">www/apache13</filename> 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
|
|
<makevar>CONFLICTS</makevar>.
|
|
<makevar>CONFLICTS</makevar> setzt
|
|
<makevar>IGNORE</makevar> dann
|
|
selbstständig.</para>
|
|
</note>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Um einen Port nur auf bestimmte
|
|
Systemarchitekturen mit <makevar>IGNORE</makevar> zu
|
|
markieren, gibt es zwei Variablen, die automatisch
|
|
<makevar>IGNORE</makevar> für Sie setzen:
|
|
<makevar>ONLY_FOR_ARCHS</makevar> und
|
|
<makevar>NOT_FOR_ARCHS</makevar>. Beispiele:</para>
|
|
|
|
<programlisting>ONLY_FOR_ARCHS= i386 amd64</programlisting>
|
|
|
|
<programlisting>NOT_FOR_ARCHS= alpha ia64 sparc64</programlisting>
|
|
|
|
<para>Eine eigene <makevar>IGNORE</makevar>-Ausgabe kann
|
|
mit <makevar>ONLY_FOR_ARCHS_REASON</makevar> und
|
|
<makevar>NOT_FOR_ARCHS_REASON</makevar> festgelegt
|
|
werden. Für eine bestimmte Architektur sind
|
|
Angaben durch
|
|
<makevar>ONLY_FOR_ARCHS_REASON_<replaceable>ARCH</replaceable></makevar>
|
|
und
|
|
<makevar>NOT_FOR_ARCHS_REASON_<replaceable>ARCH</replaceable></makevar>
|
|
möglich.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Wenn ein Port i386-Binärdateien
|
|
herunterlädt und installiert, sollte
|
|
<makevar>IA32_BINARY_PORT</makevar> 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 <makevar>IGNORE</makevar> automatisch
|
|
gesetzt.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</sect2>
|
|
|
|
<sect2 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>===> foobar-0.1 is marked as broken: this port is unsupported on FreeBSD 5.x.</programlisting>
|
|
|
|
<programlisting>===> foobar-0.1 is unsupported on FreeBSD 5.x.</programlisting>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 id="dads-deprecated">
|
|
<title>Kennzeichnen eines Ports zur Entfernung durch
|
|
<makevar>DEPRECATED</makevar> oder
|
|
<makevar>EXPIRATION_DATE</makevar></title>
|
|
|
|
<para>Denken Sie bitte daran, dass <makevar>BROKEN</makevar>
|
|
und <makevar>FORBIDDEN</makevar> 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
|
|
<makevar>DEPRECATED</makevar> und
|
|
<makevar>EXPIRATION_DATE</makevar> 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 <makevar>DEPRECATED</makevar> ohne
|
|
<makevar>EXPIRATION_DATE</makevar> 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 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 <makevar>IGNORE</makevar> 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 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 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 <makevar>SYSCTL</makevar> erfolgen, da diese den
|
|
vollständigen Pfad enthält und überschrieben
|
|
werden kann, so dies als notwendig erachtet wird.</para>
|
|
</sect1>
|
|
|
|
<sect1 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 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 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 <asami@FreeBSD.org>
|
|
#
|
|
# $FreeBSD$
|
|
[ ^^^^^^^^^ 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 "$FreeBSD$". 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 <bsd.port.mk></programlisting>
|
|
</chapter>
|
|
|
|
<chapter 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 id="freshports">
|
|
<title>FreshPorts</title>
|
|
|
|
<para>Einer der einfachsten Wege, um sich über
|
|
Aktualisierungen, die bereits durchgeführt wurden, zu
|
|
informieren, ist sich bei <ulink
|
|
url="http://www.FreshPorts.org/">FreshPorts</ulink>
|
|
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 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 <ulink
|
|
url="http://cvsweb.FreeBSD.org/ports/CHANGES">CHANGES</ulink>
|
|
dokumentiert. Solche, die nur bestimmte Ports betreffen, in
|
|
der Datei <ulink
|
|
url="http://cvsweb.FreeBSD.org/ports/UPDATING">UPDATING</ulink>.
|
|
Aber die maßgebliche Antwort auf alle Fragen liegt
|
|
zweifellos darin, den Quelltext von <ulink
|
|
url="http://cvsweb.FreeBSD.org/ports/Mk/bsd.port.mk">bsd.port.mk</ulink>
|
|
und dazugehörige Dateien zu lesen.</para>
|
|
</sect1>
|
|
|
|
<sect1 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 id="build-cluster">
|
|
<title>Der Cluster zum Bauen von &os;-Ports auf <hostid
|
|
role="hostname">pointyhat.FreeBSD.org</hostid></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
|
|
<ulink url="http://pointyhat.FreeBSD.org/">package building
|
|
logs and errors</ulink> finden.</para>
|
|
|
|
<para>Alle Ports ausser denjenigen, die als
|
|
<makevar>IGNORE</makevar> markiert sind, werden gebaut. Ports,
|
|
die als <makevar>BROKEN</makevar> markiert sind, werden
|
|
dennoch ausprobiert, um zu sehen, ob das zugrunde liegende
|
|
Problem gelöst wurde (Dies wird erreicht, indem
|
|
<makevar>TRYBROKEN</makevar> an das
|
|
<filename>Makefile</filename> des Ports übergeben
|
|
wird).</para>
|
|
</sect1>
|
|
|
|
<sect1 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 <ulink
|
|
url="http://www.portscout.org">FreeBSD
|
|
Ports-Distfile-Scanner</ulink> 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 id="portsmon">
|
|
<title>Das &os; Ports-Monitoring-System</title>
|
|
|
|
<para>Eine weitere praktische Ressource ist das <ulink
|
|
url="http://portsmon.FreeBSD.org">FreeBSD
|
|
Ports-Monitoring-System</ulink> (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 <ulink
|
|
url="http://portsmon.FreeBSD.org/portoverview.py">Übersicht
|
|
eines Ports</ulink> 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>
|