diff options
Diffstat (limited to 'de_DE.ISO8859-1/books/porters-handbook/book.xml')
-rw-r--r-- | de_DE.ISO8859-1/books/porters-handbook/book.xml | 16633 |
1 files changed, 0 insertions, 16633 deletions
diff --git a/de_DE.ISO8859-1/books/porters-handbook/book.xml b/de_DE.ISO8859-1/books/porters-handbook/book.xml deleted file mode 100644 index 13e200c827..0000000000 --- a/de_DE.ISO8859-1/books/porters-handbook/book.xml +++ /dev/null @@ -1,16633 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!DOCTYPE book PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN" - "http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd"> -<!-- - The FreeBSD Documentation Project - The FreeBSD German Documentation Project - - $FreeBSD$ - $FreeBSDde: de-docproj/books/porters-handbook/book.xml,v 1.241 2011/10/08 16:18:17 jkois Exp $ - basiert auf: r37884 ---> -<book xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="of" xml:lang="de"> - <info><title>Das FreeBSD Porter-Handbuch</title> - - - <authorgroup> - <author><orgname>The FreeBSD German Documentation Project</orgname></author> - </authorgroup> - - <pubdate>April 2000</pubdate> - - <copyright> - <year>2000</year> - <year>2001</year> - <year>2002</year> - <year>2003</year> - <year>2004</year> - <year>2005</year> - <year>2006</year> - <year>2007</year> - <year>2008</year> - <year>2009</year> - <year>2010</year> - <year>2011</year> - <year>2012</year> - <year>2013</year> - <year>2014</year> - <year>2015</year> - <holder role="mailto:doc@FreeBSD.org">The FreeBSD German - Documentation Project</holder> - </copyright> - - &trademarks; - &legalnotice; - - <releaseinfo>$FreeBSD$</releaseinfo> - </info> - - <chapter xml:id="why-port"> - <title>Einführung</title> - - <para>Die Ports-Sammlung von FreeBSD ist der gebräuchlichste - Weg, um Anwendungen ("Ports") unter FreeBSD zu installieren. - Wie alles andere in FreeBSD auch, ist sie hauptsächlich - das Ergebnis der Arbeit von Freiwilligen. Es ist wichtig, - diesen Aspekt beim Lesen im Hinterkopf zu behalten.</para> - - <para>In FreeBSD kann jeder einen neuen Port einsenden oder sich - dazu bereit erklären, einen bereits vorhandenen Port zu - pflegen, sofern der Port derzeit keinen Maintainer - hat – dazu sind keine besonderen Rechte - nötig.</para> - </chapter> - - <chapter xml:id="own-port"> - <title>Einen neuen Port erstellen</title> - - <para>Sie sind also daran interessiert, einen neuen Port zu - erstellen oder einen vorhandenen zu aktualisieren? - Großartig!</para> - - <para>Die folgenden Kapitel beinhalten einige Richtlinien, um - einen neuen Port für FreeBSD zu erstellen. Wenn Sie - einen vorhandenen Port auf den neuesten Stand bringen - wollen, sollten Sie mit <xref linkend="port-upgrading"/> - fortfahren.</para> - - <para>Wenn Ihnen dieses Dokument nicht detailliert genug ist, - sollten Sie einen Blick in - <filename>/usr/ports/Mk/bsd.port.mk</filename> werfen. Das - Makefile jedes Ports bindet diese Datei ein. Auch wenn Sie - nicht täglich mit Makefiles arbeiten, sollten Sie gut - damit zurecht kommen, da die Datei gut dokumentiert ist und - Sie eine Menge Wissen daraus erlangen können. - Zusätzlich können Sie speziellere Fragen an die - &a.ports;-Mailingliste stellen.</para> - - <note> - <para>Nur ein Bruchteil der Variablen - (<varname><replaceable>VAR</replaceable></varname>), die von - Ihnen gesetzt werden können, finden hier - Erwähnung. Die meisten von ihnen (wenn nicht sogar - alle) sind am Anfang von - <filename>/usr/ports/Mk/bsd.port.mk</filename> - erläutert. Beachten Sie bitte, dass diese Datei eine - nicht standardkonforme Tabulator-Einstellung - verwendet. <application>Emacs</application> und - <application>Vim</application> sollten diese Einstellung - jedoch automatisch beim Öffnen der Datei setzen. Sowohl - &man.vi.1; als auch &man.ex.1; können mit dem Befehl - <command>:set tabstop=4</command> dazu gebracht werden, die - Datei richtig anzuzeigen, wenn sie geöffnet wird.</para> - </note> - - <para>Sind Sie auf der Suche nach einer neuen Aufgabe? Dann sehen - Sie sich bitte die <link xlink:href="http://wiki.freebsd.org/WantedPorts">Ports-Wunschliste</link> - an und prüfen Sie, ob Sie an einem dieser Ports arbeiten - können.</para> - </chapter> - - <chapter xml:id="quick-porting"> - <title>Einen neuen Port erstellen</title> - - <para>Dieser Abschnitt beschreibt, wie Sie schnell einen neuen - Port erstellen können. In vielen Fällen ist dies - allerdings nicht ausreichend, dann werden Sie in diesem Buch - weiterlesen müssen.</para> - - <para>Als Erstes besorgen Sie sich das Original-Tarball - (komprimiertes Archiv) und legen es im - <varname>DISTDIR</varname> ab, welches - standardmäßig - <filename>/usr/ports/distfiles</filename> ist.</para> - - <note> - <para>Im Folgenden wird angenommen, dass die Software - unverändert kompiliert werden konnte, dass also keinerlei - Änderungen nötig waren, um den Port auf Ihrem - FreeBSD-Rechner zum Laufen zu bringen. Falls Sie - Änderungen vornehmen mussten, werden Sie auch den - nächsten Abschnitt beachten müssen.</para> - </note> - - <sect1 xml:id="porting-makefile"> - <title>Das <filename>Makefile</filename> schreiben</title> - - <para>Ein minimales <filename>Makefile</filename> sieht in etwa - so aus:</para> - - <programlisting># New ports collection makefile for: oneko -# Date created: 5 December 1994 -# Whom: asami -# -# $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 xml:id="porting-desc"> - <title>Die Beschreibungsdateien erstellen</title> - - <para>Es gibt zwei Beschreibungsdateien, die für jeden Port - benötigt werden, ob sie tatsächlich im Paket - enthalten sind oder nicht. Dies sind - <filename>pkg-descr</filename> und - <filename>pkg-plist</filename>. Der <filename>pkg-</filename> - Präfix unterscheidet sie von anderen Dateien.</para> - - <sect2> - <title><filename>pkg-descr</filename></title> - - <para>Diese enthält eine längere Beschreibung des - Ports. Einer oder mehrere Absätze, die kurz und - prägnant erklären, was der Port macht, sind - ausreichend.</para> - - <note> - <para><filename>pkg-descr</filename> enthält - <emphasis>keine</emphasis> Anleitung oder detaillierte - Beschreibung wie der Port benutzt oder kompiliert wird! - <emphasis>Bitte seien Sie vorsichtig, wenn Sie aus dem - <filename>README</filename> oder der Manualpage kopieren - </emphasis>; Diese sind oft keine prägnanten - Beschreibungen des Ports oder sie sind in einem - ungünstigen Format (Manualpages haben z.B. - bündige Zwischenräume). Wenn es für die - portierte Software eine offizielle Webseite gibt, sollten - Sie diese hier angeben. Fügen Sie hierzu - <emphasis>eine</emphasis> der Webseiten mit dem - Präfix <literal>WWW:</literal> ein, damit - automatische Werkzeuge korrekt arbeiten.</para> - </note> - - <para>Das folgende Beispiel zeigt wie Ihre - <filename>pkg-descr</filename> aussehen sollte:</para> - - <programlisting>This is a port of oneko, in which a cat chases a poor mouse all over -the screen. - : -(etc.) - -WWW: http://www.oneko.org/</programlisting> - </sect2> - - <sect2> - <title><filename>pkg-plist</filename></title> - - <para>Diese Datei enthält eine Liste aller Dateien, die - von diesem Port installiert werden. Sie wird auch die - <quote>Packliste</quote> genannt, da das Paket durch die - hier aufgeführten Dateien erstellt wird. Die - Pfadangaben sind relativ zum Installationspräfix - (für gewöhnlich <filename>/usr/local</filename> - oder <filename>/usr/X11R6</filename>). Wenn Sie die - <varname>MAN<replaceable>n</replaceable></varname>-Variablen - verwenden (was Sie auch machen sollten), führen Sie hier - keine Manualpages auf. Wenn der Port während der - Installation Verzeichnisse erstellt, stellen Sie sicher - entsprechende <literal>@dirrm</literal>-Zeilen - einzufügen, um die Verzeichnisse zu entfernen, wenn das - Paket gelöscht wird.</para> - - <para>Hier ist ein kleines Beispiel:</para> - - <programlisting>bin/oneko -lib/X11/app-defaults/Oneko -lib/X11/oneko/cat1.xpm -lib/X11/oneko/cat2.xpm -lib/X11/oneko/mouse.xpm -@dirrm lib/X11/oneko</programlisting> - - <para>Für weitere Details zur Packliste lesen Sie in der - &man.pkg.create.1; Manualpage nach.</para> - - <note> - <para>Es wird empfohlen alle Dateinamen in dieser Datei - alphabetisch sortiert zu halten. Das erlaubt Ihnen die - Änderungen bei einem Upgrade Ihres Ports deutlich - einfacher zu Überprüfen.</para> - </note> - - <note> - <para>Eine Packlist von Hand zu erzeugen kann eine sehr - mühsame Aufgabe sein. Wenn der Port eine große - Anzahl Dateien installiert, kann es Zeit sparen, - <link linkend="plist-autoplist">eine Packliste automatisch - zu erstellen</link>.</para> - </note> - - <para>Es gibt nur einen Fall, in dem - <filename>pkg-plist</filename> weggelassen werden kann. - Wenn der Port nur eine handvoll Dateien und Verzeichnisse - installiert, können diese in den Variablen - <varname>PLIST_FILES</varname> und - <varname>PLIST_DIRS</varname> im - <filename>Makefile</filename> aufgelistet werden. Zum - Beispiel könnten wir im obigen Beispiel ohne - <filename>pkg-plist</filename> für den - <filename>oneko</filename>-Port auskommen, indem wir die - folgenden Zeilen ins <filename>Makefile</filename> - einfügen:</para> - - <programlisting>PLIST_FILES= bin/oneko \ - lib/X11/app-defaults/Oneko \ - lib/X11/oneko/cat1.xpm \ - lib/X11/oneko/cat2.xpm \ - lib/X11/oneko/mouse.xpm -PLIST_DIRS= lib/X11/oneko</programlisting> - - <para>Natürlich sollte <varname>PLIST_DIRS</varname> - ungesetzt bleiben, wenn der Port keine eigenen Verzeichnisse - installiert.</para> - - <para>Der Preis für diese Art die Dateien eines Ports - anzugeben ist, dass man keine Befehlsfolgen wie in - &man.pkg.create.1; nutzen kann. Deshalb ist es nur - für einfache Ports geeignet und macht diese noch - einfacher. Gleichzeitig bringt es den Vorteil die Anzahl - der Dateien in der Ports-Sammlung zu reduzieren. Deshalb - ziehen Sie bitte diese Vorgehensweise in Erwägung, - bevor Sie <filename>pkg-plist</filename> benutzen.</para> - - <para>Später werden wir uns ansehen, wie - <filename>pkg-plist</filename> und - <varname>PLIST_FILES</varname> benutzt werden können, - um <link linkend="plist">anspruchsvollere Aufgaben</link> zu - erfüllen.</para> - </sect2> - </sect1> - - <sect1 xml:id="porting-checksum"> - <title>Die Checksummendatei erzeugen</title> - - <para>Geben Sie einfach <command>make makesum</command> ein. - Die Regeln von Make sorgen dafür, dass die Datei - <filename>distinfo</filename> automatisch erstellt - wird.</para> - - <para>Wenn sich die Checksumme einer heruntergeladenen Datei - regelmäßig ändert und Sie sicher sind, dass - Sie der Quelle trauen können (weil sie z.B. von einer - Hersteller-CD oder täglich erstellter Dokumentation - stammt), sollten Sie diese Dateien in der Variable - <varname>IGNOREFILES</varname> angeben. Dann wird die - Checksumme für diese Datei bei - <command>make makesum</command> nicht berechnet, sondern auf - <literal>IGNORE</literal> gesetzt.</para> - </sect1> - - <sect1 xml:id="porting-testing"> - <title>Den Port testen</title> - - <para>Sie sollten sicherstellen, dass die Port-Regeln genau das - einhalten, was Sie von ihnen erwarten, auch beim Erzeugen eines - Pakets aus dem Port. Dies sind die wichtigen Punkte, die Sie - überprüfen sollten.</para> - - <itemizedlist> - <listitem> - <para><filename>pkg-plist</filename> enthält nichts, - das nicht von Ihrem Port installiert wurde.</para> - </listitem> - - <listitem> - <para><filename>pkg-plist</filename> enthält alles, - was von Ihrem Port installiert wurde.</para> - </listitem> - - <listitem> - <para>Ihr Port kann mit Hilfe von - <command>make reinstall</command> mehrmals installiert - werden.</para> - </listitem> - - <listitem> - <para>Ihr Port - <link linkend="plist-cleaning">räumt</link> bei der - Deinstallation hinter sich auf.</para> - </listitem> - </itemizedlist> - - <procedure> - <title>Empfohlene Testreihenfolge</title> - - <step> - <para><command>make install</command></para> - </step> - - <step> - <para><command>make package</command></para> - </step> - - <step> - <para><command>make deinstall</command></para> - </step> - - <step> - <para><command>pkg_add Paket-Name - </command></para> - </step> - - <step> - <para><command>make deinstall</command></para> - </step> - - <step> - <para><command>make reinstall</command></para> - </step> - - <step> - <para><command>make package</command></para> - </step> - </procedure> - - <para>Stellen Sie bitte sicher, dass während - <command>make package</command> und - <command>make deinstall</command> keine Warnungen ausgegeben - werden. Nach Schritt 3 überprüfen Sie bitte, ob alle - neuen Verzeichnisse korrekt entfernt wurden. Und versuchen Sie - die Software nach Schritt 4 zu benutzen, um sicherzustellen, - dass sie korrekt funktioniert, wenn diese aus einem Paket - installiert wird.</para> - - <para>Der gründlichste Weg diese Schritte zu automatisieren - ist eine <application>Tinderbox</application> zu installieren. - Diese verwaltet <literal>Jails</literal>, in denen Sie alle - oben genannten Schritte durchführen können, ohne den - Zustand Ihres laufenden Systems zu verändern. Mehr - Informationen hierzu entält - <filename>ports/ports-mgmt/tinderbox</filename></para> - </sect1> - - <sect1 xml:id="porting-portlint"> - <title>Ihren Port mit <command>portlint</command> - überprüfen</title> - - <para>Bitte verwenden Sie <command>portlint</command>, um - festzustellen, ob Ihr Port unseren Richtlinien entspricht. - Das Programm - <package>ports-mgmt/portlint</package> ist - Teil der Ports-Sammlung. Stellen Sie vor allem sicher, dass - das <link linkend="porting-samplem">Makefile</link> in der - richtigen Form und das - <link linkend="porting-pkgname">Paket</link> passend benannt - ist.</para> - </sect1> - - <sect1 xml:id="porting-submitting"> - <title>Den neuen Port einreichen</title> - - <para>Bevor Sie den neuen Port einreichen, lesen Sie bitte - unbedingt den Abschnitt <link linkend="porting-dads">DOs and DON'Ts</link>.</para> - - <para>Nun, da Sie mit Ihrem Port zufrieden sind, müssen Sie - ihn nur noch in den Haupt-Ports-Tree von &os; einbringen, - damit alle daran teilhaben können. Wir benötigen - nicht Ihr <filename>work</filename>-Verzeichnis oder Ihr - <filename>pkgname.tgz</filename>-Paket – 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 <link xlink:href="&url.articles.contributing;/contrib-how.html#CONTRIB-GENERAL"> - Bug Reports and General Commentary</link> finden Sie weitere - Informationen über &man.send-pr.1;). Ordnen Sie den - Fehlerbericht bitte in die Kategorie <literal>Ports</literal> - mit der Klasse <literal>Change-Request</literal> ein - (Markieren Sie den Bericht nicht als - <literal>vertraulich</literal> - (<literal>confidential</literal>)!). Fügen Sie bitte eine - kurze Beschreibung des Programms, das Sie portiert haben, in - das <quote>Beschreibungs</quote>-Feld des Problemberichts und - die shar-Datei in das <quote>Fix</quote>-Feld - ein (bespielsweise eine kurze Version des - <varname>COMMENT</varname>).</para> - - <note> - <para>Sie können uns die Arbeit um einiges vereinfachen, - wenn Sie eine gute Beschreibung in der Zusammenfassung des - Problemberichtes verwenden. Wir bevorzugen etwas wie - <quote>Neuer Port: - <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 <link xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?category=ports"> - Liste der PRs, die darauf warten, in &os; committet zu - werden</link>, ansehen.</para> - - <para>Nachdem wir einen Blick auf Ihren Port geworfen haben, - werden wir, wenn nötig, bei Ihnen nachfragen und ihn in - die Ports-Sammlung übernehmen. Ihr Name taucht dann auch - in der Liste der <link xlink:href="&url.articles.contributors;/contrib-additional.html">Additional - FreeBSD Contributors</link> und in anderen Dateien auf. - Ist das nicht toll?! <!-- smiley -->:-)</para> - </sect1> - </chapter> - - <chapter xml:id="slow"> - <title>Einen Port in aller Ruhe erstellen</title> - - <para>Ok, das war nicht ganz einfach und der Port hat einige - Veränderungen erfordert, um funktionieren zu können. - In diesem Abschnitt werden wir Schritt für Schritt - erklären, wie man den funktionierenden Port den Vorgaben - der Ports entsprechend anpasst.</para> - - <sect1 xml:id="slow-work"> - <title>Die Funktionsweise</title> - - <para>Beginnen wir mit der Abfolge der Ereignisse, die - eintreten, wenn der Nutzer das erste <command>make</command> - in Ihrem Portsverzeichnis ausführt. Sie empfinden es - für das Verständnis vielleicht hilfreich - <filename>bsd.port.mk</filename> in einem anderen Fenster - offen zu haben, während Sie diesen Abschnitt - lesen.</para> - - <para>Aber machen Sie sich keine Sorgen, falls Sie nicht - wirklich verstehen, was <filename>bsd.port.mk</filename> - macht, die Wenigsten begreifen dies... <!-- smiley --> - <emphasis>:></emphasis></para> - - <procedure> - <step> - <para>Das Target <buildtarget>fetch</buildtarget> wird - aufgerufen. Es ist dafür verantwortlich - sicherzustellen, dass der Tarball lokal im - <varname>DISTDIR</varname> verfügbar ist. Falls - <buildtarget>fetch</buildtarget> die benötigten Dateien - in <varname>DISTDIR</varname> nicht finden kann, - durchsucht es die URL <varname>MASTER_SITES</varname>, - welche im Makefile gesetzt ist, ebenso wie unsere - Haupt-FTP-Seite unter <link xlink:href="ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles"> - ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/ - </link>, wo wir genehmigte Distfiles als Backup - aufbewahren. Danach wird versucht, so eine direkte - Internetverbindung besteht, dass genannte Distfile mit - <varname>FETCH</varname> herunterzuladen. Falls dies - gelingt, wird die Datei in <varname>DISTDIR</varname> - für weitere Nutzung abgelegt und fährt - fort.</para> - </step> - - <step> - <para>Das Target <buildtarget>extract</buildtarget> wird - aufgerufen. Es sucht nach den Distfiles Ihres Ports - (normalerweise ein gzip-komprimierter Tarball) in - <varname>DISTDIR</varname> und entpackt diese in ein - temporäres Unterverzeichnis, welches von <varname> - WRKDIR</varname> festgelegt wird (standardmäßig - <filename>work</filename>).</para> - </step> - - <step> - <para>Das Target <buildtarget>patch</buildtarget> wird - aufgerufen. Zuerst werden alle in - <varname>PATCHFILES</varname> festgelegten Patches - eingespielt. Anschließend werden, falls Patches der - Form - <filename>patch-*</filename> in - <varname>PATCHDIR</varname> (standardmäßig das - <filename>files</filename>-Unterverzeichnis) gefunden - werden, diese in alphabetischer Reihenfolge - eingespielt.</para> - </step> - - <step> - <para>Das Target <buildtarget>configure</buildtarget> wird - aufgerufen. Dieses kann viele verschiedene Dinge - machen.</para> - - <orderedlist> - <listitem> - <para>Existiert <filename>scripts/configure</filename>, - so wird es aufgerufen.</para> - </listitem> - - <listitem> - <para>Falls <varname>HAS_CONFIGURE</varname> oder - <varname>GNU_CONFIGURE</varname> gesetzt sind, wird - <filename>WRKSRC/configure - </filename>ausgeführt.</para> - </listitem> - - <listitem> - <para>Falls <varname>USE_IMAKE</varname> gesetzt ist, - wird <varname>XMKMF</varname> - (standardmäßig <command>xmkmf -a</command>) - ausgeführt.</para> - </listitem> - </orderedlist> - </step> - - <step> - <para>Das Target <buildtarget>build</buildtarget> wird - aufgerufen. Es ist für das Wechseln in das private - Arbeitsverzeichnis (<varname>WRKSRC</varname>) und das - Bauen des Ports zuständig. Ist - <varname>USE_GMAKE</varname> gesetzt, so wird GNU - <command>make</command> verwendet, sonst das - System-<command>make</command>.</para> - </step> - </procedure> - - <para>Die oben genannten Schritte sind die Standardaktionen. - Zusätzlich können Sie <buildtarget>pre-<replaceable> - irgendwas</replaceable></buildtarget> oder - <buildtarget>post-<replaceable>irgendwas</replaceable> - </buildtarget> als Targets definieren oder Skripten mit diesen - Namen in das <filename>scripts</filename>-Unterverzeichnis - legen. Sie werden dann vor bzw. nach den Standardaktionen - aufgerufen.</para> - - <para>Angenommen Sie haben das Target <buildtarget>post-extract - </buildtarget> in Ihrem <filename>Makefile</filename> - definiert und eine Datei <filename>pre-build</filename> im - <filename>scripts</filename> Unterverzeichnis, so wird das - Target <buildtarget>post-extract</buildtarget> nach dem normalen - Entpacken aufgerufen und das Skript - <filename>pre-build</filename> - ausgeführt, bevor die vordefinierten Bau-Regeln - abgearbeitet sind. Es wird empfohlen, dass Sie - <filename>Makefile</filename>-Targets verwenden, falls die - Aktionen es erlauben, da es so für jemanden einfacher - sein wird herauszufinden, was für eine - nicht-standardmäßige Aktion der Port - benötigt.</para> - - <para>Die Standardaktionen werden aus den Targets - <filename>bsd.port.mk</filename> - <buildtarget>do-<replaceable>irgendwas</replaceable> - </buildtarget> übernommen. Zum Beispiel sind die Befehle - zum Entpacken eines Ports im Target - <buildtarget>do-extract</buildtarget> zu finden. Falls Sie mit - einem vorgegebenen Target nicht zufrieden sind, können - Sie es verändern, indem Sie das Target - <buildtarget>do-<replaceable>irgendwas</replaceable> - </buildtarget> in Ihrem <filename>Makefile</filename> neu - definieren.</para> - - <note> - <para>Die <quote>Haupt</quote>-Targets (z.B. - <buildtarget>extract</buildtarget>, - <buildtarget>configure</buildtarget> usw.) machen nicht mehr - als sicherzustellen, dass bis hierhin alle Abschnitte - abgeschlossen sind, um danach die eigentlichen Targets oder - Skripte aufzurufen. Und es ist nicht beabsichtigt, dass - diese geändert werden. Falls Sie das Entpacken - verändern wollen, verändern Sie - <buildtarget>do-extract</buildtarget>, aber niemals die Art, - wie <buildtarget>extract</buildtarget> arbeitet!</para> - </note> - - <para>Jetzt, da Sie verstehen, was geschieht, wenn der Benutzer - <command>make</command> eingibt, lassen Sie uns durch die - empfohlenen Schritte gehen, um den perfekten Port zu - erstellen.</para> - </sect1> - - <sect1 xml:id="slow-sources"> - <title>Den originalen Quelltext besorgen</title> - - <para>Normalerweise liegt der original Quelltext als gepackte - Datei (<filename>foo.tar.gz - </filename> oder - <filename>foo.tar.Z</filename>) - vor. Kopieren Sie diese nach <varname>DISTDIR</varname>. - Nutzen Sie, soweit möglich, immer die Quellen aus dem - <emphasis>Hauptzweig</emphasis>.</para> - - <para>Es ist notwendig die Variable - <varname>MASTER_SITES</varname> anzupassen, um anzugeben, wo - sich der originale Quelltext befindet. In - <filename>bsd.sites.mk</filename> finden sich hilfreiche - Definitionen für die gebräuchlichsten Seiten. Bitte - nutzen Sie diese Seiten und die zugehörigen Definitionen, - soweit dies möglich ist. Damit wird vermieden, immer und - immer wieder dieselben Informationen zu wiederholen. Da die - Hauptseiten regelmäßig angepasst werden - müssen, vereinfacht dieses Vorgehen die Pflege der - Dateien für jeden Beteiligten.</para> - - <para>Falls keine zuverlässige und gut erreichbare - FTP/HTTP-Seite zu finden ist, oder nur Seiten auffindbar sind, - die keinen Standards entsprechen, sollte eine Kopie des - Quelltextes auf einer zuverlässigen Seite abgelegt - werden. Dies könnte z.B. die eigene Internetseite - sein.</para> - - <para>Ist kein geeigneter Ort zum Ablegen des Quelltextes - auffindbar, ist es möglich diesen <quote>intern</quote> - auf <systemitem>ftp.FreeBSD.org</systemitem> abzulegen; dies sollte - jedoch als letzte Möglichkeit angesehen werden. Das - Distfile muss in diesem Fall in <filename>~/public_distfiles/ - </filename> eines <systemitem>freefall</systemitem>-Accounts abgelegt - werden. Bitten Sie den Committer Ihres Ports dies zu erledigen. - Er wird außerdem <varname>MASTER_SITES</varname> nach - <varname>MASTER_SITE_LOCAL</varname> und <varname> - MASTER_SITE_SUBDIR</varname> auf den - <systemitem>freefall</systemitem>-Benutzernamen angepasst.</para> - - <para>Sollte sich das Distfile des Ports regelmäßig - ohne Versionsanpassungen des Autors ändern, sollte - überlegt werden, das Disfile auf der eigenen - Internetseite abzulegen und diese in der Liste der - <varname>MASTER_SITES</varname> an die erste Stelle zu setzen. - Falls möglich, sollte der Autor des Ports gebeten werden, - dies zu erledigen; hierüber wird die Kontrolle des Quelltextes - verbessert. Wird eine eigene Version des Quelltextes auf - eigenen Internetseiten verfügbar gemacht, verhindert dies - Warnungen von <errorname>checksum mismatch</errorname> und - reduziert den Arbeitsaufwand der Maintainer der FTP-Seiten. - Auch wenn nur eine Quelle für den Quelltext des Ports zur - Verfügung steht, ist es empfohlen, ein Backup auf einer - weiteren Seite abzulegen und diese als zweiten Eintrag in - <varname>MASTER_SITES</varname> aufzunehmen.</para> - - <para>Sind für den Port zusätzlich aus dem Internet - verfügbare Patches erforderlich, sollten diese ebenfalls - in <varname>DISTDIR</varname> abgelegt werden. Sollten diese - Patches von anderer Quelle als der Hauptseite des Ports - stammen, ist das kein Grund zur Sorge. Es gibt Wege diesem - Umstand gerecht zu werden (beachten Sie die unten stehende - Beschreibung zu <link linkend="porting-patchfiles">PATCHFILES - </link>).</para> - </sect1> - - <sect1 xml:id="slow-modifying"> - <title>Den Port bearbeiten</title> - - <para>Entpacken Sie eine Kopie des Tarballs in ein privates - Verzeichnis und nehmen Sie alle Änderungen - vor, die nötig sind, um den Port unter einer aktuellen - &os;-Version kompilieren zu können. - <emphasis>Protokollieren Sie sorgfältig</emphasis> alle - Schritte, die Sie vornehmen, da Sie den Prozess in Kürze - automatisieren werden. Alles, auch das Entfernen, - Hinzufügen oder Bearbeiten von Dateien, sollte von einem - automatisierten Skript oder einer Patch-Datei machbar sein, - wenn Ihr Port fertig ist.</para> - - <para>Falls Ihr Port bedeutende Interaktionen/Veränderungen - durch den Benutzer benötigt, um ihn zu Kompilieren oder - zu Installieren, sollten Sie einen Blick auf Larry Walls - klassische <application>Configure</application>-Skripte werfen - oder vielleicht etwas Ähnliches selbst erstellen. Das - Ziel der Ports-Sammlung ist es, jeden Port so - <quote>plug-and-play-fähig</quote> wie möglich - für den Endbenutzer zu machen, während ein Minimum - an Speicherplatz gebraucht wird.</para> - - <note> - <para>Solange nicht anders angegeben wird von Patch-Dateien, - Skripten und anderen Dateien, die Sie erstellt und der &os; - Ports-Sammlung hinzugefügt haben, angenommen, dass Sie - unter den standardmäßigen BSD-Copyright-Bedingungen - stehen.</para> - </note> - </sect1> - - <sect1 xml:id="slow-patch"> - <title>Fehlerbehebung (Patches)</title> - - <para>Bei der Vorbereitung eines Ports können die Dateien, - die hinzugefügt oder verändert wurden, mittels - &man.diff.1; abgefangen werden, um Sie später an - &man.patch.1; zu übergeben. Jeder Patch, der dem - Quelltext übergeben werden soll, sollte in einer Datei - <filename>patch-*</filename> - abgelegt werden, wobei <replaceable>*</replaceable> dem - Pfadnamen der zu korrigierenden Datei entspricht, wie er auch - in <filename>patch-Imakefile</filename> oder im - <filename>patch-src-config.h</filename> erscheint. Diese - Dateien sollten in <varname>PATCHDIR</varname> (normalerweise - <filename>files</filename>) abgelegt sein, von wo sie - automatisch übernommen werden. Alle Patches müssen - sich relativ zur <varname>WRKSRC</varname>-Variable - (normalerweise dem Verzeichnis, in dem sich der Quelltext des - Ports entpackt und wo auch der Bau stattfindet) - befinden.</para> - - <para>Um Korrekturen und Updates zu vereinfachen, sollte es - vermieden werden, mehr als einen Patch für eine Datei zu - nutzen (z.B. <filename>patch-file</filename> und - <filename>patch-file2</filename>, welche beide - <filename>WRKSRC/foobar.c</filename> - verändern). Beachten Sie, dass, falls der Pfad einer zu - korrigierenden Datei einen Unterstrich (<literal>_</literal>) - enthält, der Patch stattdessen zwei Unterstriche im Namen - haben muss. Zum Beispiel muss der Patch, der eine Datei namens - <filename>src/freeglut_joystick.c</filename> korrigieren soll, - <filename>patch-src-freeglut__joystick.c</filename> genannt - werden.</para> - - <para>Für die Benennung der Patches sollten nur die Zeichen - <literal>[-+._a-zA-Z0-9]</literal> genutzt werden. Bitte - verwenden Sie keine weiteren Zeichen als die angegebenen. Die - Namensvergabe sollte nicht <filename>patch-aa</filename> oder - <filename>patch-ab</filename> etc. entsprechen, erwähnen - Sie immer den Pfad und Dateinamen.</para> - - <para>RCS-Zeichenketten sollten vermieden werden, da CVS diese - verstümmeln würde, sobald wir diese Dateien in die - Ports-Sammlung einpflegen. Wenn wir die Dateien wieder abrufen - wären diese verändert und der Patch würde - fehlschlagen. RCS-Zeichenketten sind in Dollar-Zeichen - (<literal>$</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 <buildtarget>post-extract</buildtarget>-Targets als - über den Patch selbst realisiert.</para> - - <para>Ein einfacher Austausch kann direkt über das - <filename>Makefile</filename> des Ports umgesetzt werden, - indem der in-place-Modus von &man.sed.1; genutzt wird. Dies - ist sehr hilfreich, wenn variable Werte korrigiert werden - sollen. Beispiel:</para> - - <programlisting>post-patch: - @${REINPLACE_CMD} -e 's|for Linux|for FreeBSD|g' ${WRKSRC}/README - @${REINPLACE_CMD} -e 's|-pthread|${PTHREAD_LIBS}|' ${WRKSRC}/configure - </programlisting> - - <para>Relativ häufig ergibt sich die Situation, in der die - portierte Software die CR/LF-Konventionen für Zeilenenden - nutzt (dies ist bei unter &windows; entwickelter Software - häufig der Fall). Dies kann bei weiteren Patches Probleme - (Compiler-Warnungen, Fehlermeldungen bei der Ausführung - von Skripten wie z.B. <command>/bin/sh^M</command> not found) - und anderes ergeben. Um schnell alle Dateien von CR/LF - nach LF zu konvertieren, kann - <literal>USE_DOS2UNIX=yes</literal> in das - <filename>Makefile</filename> des Ports geschrieben werden. - Hierzu kann eine Liste der zu konvertierenden Dateien erstellt - werden:</para> - - <programlisting>USE_DOS2UNIX= util.c util.h</programlisting> - - <para>Sollen Gruppen von Dateien über verschiedene - Unterverzeichnisse konvertiert werden, kann - <varname>DOS2UNIX_REGEX</varname> genutzt werden, dessen - Argumente <command>find</command>-kompatible, reguläre - Ausdrücke sind. Mehr zur Formatierung findet sich in - &man.re.format.7;. Diese Option ist beim Konvertieren aller - Dateien mit definierter Endung, z.B. aller Dateien im - Quellcode, wobei binäre Dateien unberührt bleiben, - sinnvoll:</para> - - <programlisting>USE_DOS2UNIX= yes - DOS2UNIX_REGEX= .*\.(c|cpp|h)</programlisting> - - <para>Wenn Sie einen Patch zu einer bereits existierenden Datei - erstellen wollen, können Sie von ihr eine Kopie mit der - Endung <filename>.orig</filename> erstellen und - anschließend die Originaldatei bearbeiten. Das make-Ziel - <buildtarget>makepatch</buildtarget> führt dann zu - einer entsprechenden Patch-Datei im Verzeichnis <filename>files</filename> des Ports.</para> - </sect1> - - <sect1 xml:id="slow-configure"> - <title>Konfigurieren</title> - - <para>Fügen Sie alle zusätzlichen - Veränderungsbefehle Ihrem Skript - <filename>configure</filename> hinzu und speichern Sie es im - <filename>scripts</filename>-Unterverzeichnis. Wie vorstehend - schon erwähnt, können Sie dies auch mit den Targets - <filename>Makefile</filename> und/oder Skripte mit dem Namen - <filename>pre-configure</filename> oder - <filename>post-configure</filename> erledigen.</para> - </sect1> - - <sect1 xml:id="slow-user-input"> - <title>Handhabung von Benutzereingaben</title> - - <para>Sollte der Port Eingaben vom Benutzer benötigen, - muss <varname>IS_INTERACTIVE</varname> im - <filename>Makefile</filename> des Ports gesetzt werden. Dies - erlaubt <quote>overnight builds</quote> Ihren Port zu - überspringen, falls der Nutzer die Variable - <envar>BATCH</envar> setzt (setzt der Nutzer hingegen die - Variable <envar>INTERACTIVE</envar>, werden - <emphasis>nur</emphasis> Ports gebaut, die Interaktion vom - Nutzer erwarten). Dies erspart den Rechnern, welche - kontinuierlich Ports bauen, eine Menge Zeit (siehe - unten).</para> - - <para>Zudem ist es empfohlen, falls sinnvolle Vorgaben für - interaktive Optionen gesetzt sind, die - <varname>PACKAGE_BUILDING</varname>-Variable zu prüfen - und das interaktive Skript abzuschalten. Dies macht es uns - möglich, Pakete für CDROMs und FTP-Server zu - bauen.</para> - </sect1> - </chapter> - - <chapter xml:id="makefile"> - <title>Die Konfiguration des Makefile</title> - - <para>Das Konfigurieren des <filename>Makefile</filename> ist - sehr einfach und wir schlagen vor, dass Sie zunächst - einen Blick auf vorhandene Beispiele werfen. Zusätzlich - gibt es ein - <link linkend="porting-samplem">Beispiel eines Makefile</link> - in diesem Handbuch. Schauen Sie es sich an und verfolgen Sie - bitte die Abfolge der Variablen und Abschnitte in dieser - Vorlage. Damit erleichtern Sie es anderen, - Ihren Port zu lesen.</para> - - <para>Bedenken Sie bitte die folgenden Probleme in der hier - vorgegebenen Abfolge der Unterabschnitte dieses Kapitels, wenn - Sie Ihr neues <filename>Makefile</filename> erstellen:</para> - - <sect1 xml:id="makefile-source"> - <title>Der originale Quelltext</title> - - <para>Liegt der Quelltext in <varname>DISTDIR</varname> als eine - standardisierte und mit gzip gepackte Datei in der Art - <filename>foozolix-1.2.tar.gz</filename>? Falls ja, - können Sie zum nächsten Schritt übergehen. - Falls nicht, sollten Sie versuchen, die Variablen - <varname>DISTVERSION</varname>, <varname>DISTNAME</varname>, - <varname>EXTRACT_CMD</varname>, - <varname>EXTRACT_BEFORE_ARGS</varname>, - <varname>EXTRACT_AFTER_ARGS</varname>, - <varname>EXTRACT_SUFX</varname>, oder - <varname>DISTFILES</varname> zu ändern. Das hängt - davon ab, wie fremdartig das Distributionsfile Ihres Ports ist - (der häufigste Fall ist - <literal>EXTRACT_SUFX=.tar.Z</literal>, wenn der Tarball durch - ein normales <command>compress</command> und nicht durch - <command>gzip</command> gepackt wurde).</para> - - <para>Im schlimmsten Fall können Sie einfach Ihre eigene - Vorgabe mittels <buildtarget>do-extract</buildtarget> erzeugen - und die Standardvorgabe überschreiben; aber dies sollte - in den wenigsten Fällen, wenn überhaupt, notwendig - sein.</para> - </sect1> - - <sect1 xml:id="makefile-naming"> - <title>Bezeichnungen</title> - - <para>Der erste Teil des <filename>Makefile</filename> - beschreibt die Versionsnummer des Ports und führt ihn in - der richtigen Kategorie auf.</para> - - <sect2> - <title><varname>PORTNAME</varname> und - <varname>PORTVERSION</varname></title> - - <para>Setzen Sie bitte die Variable - <varname>PORTNAME</varname> auf den Basisnamen Ihres Ports - und die Variable <varname>PORTVERSION</varname> auf dessen - Versionsnummer.</para> - </sect2> - - <sect2 xml:id="makefile-naming-revepoch"> - <title><varname>PORTREVISION</varname> und - <varname>PORTEPOCH</varname></title> - - <sect3> - <title><varname>PORTREVISION</varname></title> - - <para>Die <varname>PORTREVISION</varname>-Variable ist ein - streng monoton wachsender Wert, welcher auf 0 - zurückgesetzt wird, nachdem - <varname>PORTVERSION</varname> erhöht wurde (d.h. - jedes Mal, wenn ein offizielles Release erfolgt). Sie wird - an den Namen des Pakets angehängt, wenn sie ungleich - 0 ist. Änderungen an <varname>PORTREVISION</varname> - werden von automatisierten Werkzeugen (z.B. - &man.pkg.version.1;) genutzt, um anzuzeigen, dass ein - neues Paket verfügbar ist.</para> - - <para><varname>PORTREVISION</varname> sollte jedes Mal - erhöht werden, wenn eine Änderung am Port - erfolgt, die beträchtliche Auswirkungen auf den - Inhalt oder Struktur des aus dem Port erzeugten Pakets - zur Folge hat.</para> - - <para>Beispiele dafür, wann - <varname>PORTREVISION</varname> erhöht werden - sollte:</para> - - <itemizedlist> - <listitem> - <para>Hinzufügen von Patches, welche - Sicherheitslücken schließen, Fehler - beseitigen oder neue Funktionalität zum Port - hinzufügen.</para> - </listitem> - - <listitem> - <para>Änderungen am <filename>Makefile</filename> - des Ports, welche compile-time-Optionen - hinzufügen oder entfernen.</para> - </listitem> - - <listitem> - <para>Änderungen bezüglich Packliste oder am - Verhalten während der Installation des Pakets - (d.h. Änderungen an einem Skript, welches - Ausgangsdaten für das Paket erzeugt, wie z.B. - SSH-Hostschlüssel).</para> - </listitem> - - <listitem> - <para>Versionssprung einer Shared-Library, welche eine - Abhängigkeit dieses Ports ist (In diesem Fall - würde ein Anwender bei der Installation des alten - Pakets scheitern, falls er eine neue Version der - Abhängigkeit bereits installiert hat, weil nach - der alten Bibliothek libfoo.x anstatt nach - libfoo.(x+1)) gesucht wird).</para> - </listitem> - - <listitem> - <para>Schleichende Änderungen am Distfile, welche - bedeutende funktionale Änderungen verursachen, - d.h. Änderungen des Distfile erfordern eine - Korrektur an <filename>distinfo</filename>, ohne dass - damit zusammenhängend die - <varname>PORTVERSION</varname> verändert wird, - obwohl ein <command>diff -ru</command> zwischen der - alten und der neuen Version bedeutende - Veränderungen am Code nachweist.</para> - </listitem> - </itemizedlist> - - <para>Beispiele für Änderungen, welche keine - Erhöhung von <varname>PORTREVISION</varname> - erfordern:</para> - - <itemizedlist> - <listitem> - <para>Stilistische Änderungen am Grundgerüst - des Ports ohne funktionale Änderungen am daraus - resultierenden Paket.</para> - </listitem> - - <listitem> - <para>Änderungen an der Variable - <varname>MASTER_SITES</varname> oder andere - funktionale Änderungen, welche das resultierende - Paket nicht verändern.</para> - </listitem> - - <listitem> - <para>Marginale Patches am Distfile wie die Korrektur - von Tippfehlern, welche nicht wichtig genug sind, um - dem Benutzer die Bürde eines Upgrades - aufzuerlegen.</para> - </listitem> - - <listitem> - <para>Build fixes, die ein Paket erst kompilierbar - machen, welches ohne diese Änderungen vorher - nicht erzeugt werden konnte (solange die - Änderungen keine funktionale Differenz bringen - auf Plattformen, auf denen dieses Paket schon vorher - gebaut werden konnte). Da - <varname>PORTREVISION</varname> den Inhalt des Pakets - wiederspiegelt, ist es nicht notwendig - <varname>PORTREVISION</varname> zu erhöhen, wenn - das Paket vorher nicht erstellt werden konnte.</para> - </listitem> - </itemizedlist> - - <para>Als Faustregel gilt: Stellen Sie sich die Frage, ob - die durchgeführte Änderung am Port jedem hilft - (entweder aufgrund einer Verbesserung, Beseitigung eines - Fehlers, oder der Annahme, dass das neue Paket - überhaupt erst funktioniert) und wägen Sie es - gegen den Umstand ab, dass jedermann, der seine - Ports-Sammlung regelmässig auf dem neuesten Stand - hält, zu einer Aktualisierung gezwungen wird. - Falls Sie die Frage positiv beantworten sollten, - erhöhen Sie die Variable - <varname>PORTREVISION</varname>.</para> - </sect3> - - <sect3> - <title><varname>PORTEPOCH</varname></title> - - <para>Von Zeit zu Zeit geschieht es, dass irgendjemand - (Drittanbieter von Software oder FreeBSD Ports Committer) - etwas Dummes tut und eine Version einer Software - veröffentlicht, deren Versionsnummer niedriger ist - als die der vorherigen. Ein Beispiel hierfür ist - ein Port, der von foo-20000801 auf foo-1.0 geändert - wird (der Erstere wird fälschlicherweise als neue - Version behandelt, weil 2000801 ein numerisch - größerer Wert ist als 1).</para> - - <para>In Situationen wie diesen sollte die Variable - <varname>PORTEPOCH</varname> erhöht werden. Wenn - <varname>PORTEPOCH</varname> größer als 0 ist, - wird sie an den Namen des Pakets angehängt, wie in - Abschnitt 0 oberhalb bereits beschrieben. - <varname>PORTEPOCH</varname> darf niemals verringert oder - auf 0 gesetzt werden, weil der Vergleich des Pakets mit - einem früheren Zeitpunkt scheitern würde (d.h. - das Paket würde niemals als veraltet erkannt werden): - Die neue Versionsnummer (<literal>1.0,1</literal> im - obigen Beispiel) ist immer noch numerisch kleiner als die - vorherige Version (2000801), aber das Suffix - <literal>,1</literal> wird von automatisierten Werkzeugen - gesondert behandelt und wird als größer - erkannt, als das implizit angenommene Suffix - <literal>,0</literal> im früheren Paket.</para> - - <para>Das Entfernen oder Zurücksetzen von - <varname>PORTEPOCH</varname> führt zu unendlichem - Ärger. Wenn Sie die obigen Ausführungen nicht - vollständig verstanden haben, lesen Sie es bitte - unbedingt nochmals bis Sie es vollständig - verinnerlicht haben, oder fragen Sie vor jeder - Änderung auf den Mailinglisten nach!</para> - - <para>Es wird erwartet, dass <varname>PORTEPOCH</varname> - für die weitaus überwiegende Zahl der Ports - nicht verwendet wird und der verantwortungsvolle und - vorausschauende Umgang mit <varname>PORTVERSION</varname> - macht es meist überflüssig, falls ein - späteres Release die Versionsstruktur ändern - sollte. Vorsicht ist geboten, wenn ein Release einer - Drittanbieter-Software ohne eine offizielle Versionsnummer - veröffentlicht wird, wie z.B. bei - <quote>Snapshot-Versionen</quote>. Man ist versucht, - das Release mit dem jeweiligen Datum zu bezeichnen, - was unweigerlich zu den oben beschriebenen Problemen - führt, wenn das nächste - <quote>offizielle</quote> Release erscheint.</para> - - <para>Wenn z.B. ein Snapshot zum Datum 20000917 - veröffentlicht wird und die vorherige Version der - Software war 1.2, dann sollte der Snapshot die - <varname>PORTVERSION</varname> 1.2.20000917 oder - ähnlich erhalten und nicht 20000917, damit das - nachfolgende Release, angenommen 1.3, immer noch einen - größeren numerischen Wert aufweist.</para> - </sect3> - - <sect3> - <title>Beispiel für den Gebrauch von - <varname>PORTREVISION</varname> und - <varname>PORTEPOCH</varname></title> - - <para>Der <literal>gtkmumble</literal>-Port, Version - <literal>0.10</literal>, befindet sich in der - Ports-Sammlung:</para> - - <programlisting>PORTNAME= gtkmumble -PORTVERSION= 0.10</programlisting> - - <para><varname>PKGNAME</varname> wird zu - <literal>gtkmumble-0.10</literal>.</para> - - <para>Ein Sicherheitsloch wurde entdeckt, das einen lokalen - Patch von FreeBSD erforderlich macht. - <varname>PORTREVISION</varname> wird entsprechend - erhöht.</para> - - <programlisting>PORTNAME= gtkmumble -PORTVERSION= 0.10 -PORTREVISION= 1</programlisting> - - <para><varname>PKGNAME</varname> wird zu - <literal>gtkmumble-0.10_1</literal></para> - - <para>Eine neue Version wird vom Software-Drittanbieter - veröffentlicht, bezeichnet mit der Version - <literal>0.2</literal> (es stellt sich heraus, dass der - Autor beabsichtigte, dass <literal>0.10</literal> - eigentlich <literal>0.1.0</literal> bedeuten sollte, - nicht <quote>was kommt nach 0.9</quote> - – Hoppla, aber nun ist es zu spät). - Da die neue Unterversion <literal>2</literal> numerisch - kleiner ist als die vorherige Version - <literal>10</literal>, muss <varname>PORTEPOCH</varname> - erhöht werden, um sicherzustellen, dass das neue - Paket auch als <quote>neuer</quote> erkannt wird. Da es - ein neues Release des Drittanbieters ist, wird - <varname>PORTREVISION</varname> auf 0 zurückgesetzt - (oder aus dem <filename>Makefile</filename> - entfernt).</para> - - <programlisting>PORTNAME= gtkmumble -PORTVERSION= 0.2 -PORTEPOCH= 1</programlisting> - - <para><varname>PKGNAME</varname> wird zu - <literal>gtkmumble-0.2,1</literal></para> - - <para>Das nächste Release ist 0.3. Da - <varname>PORTEPOCH</varname> niemals verringert wird, - sind die Versionsvariablen nun wie folgt:</para> - - <programlisting>PORTNAME= gtkmumble -PORTVERSION= 0.3 -PORTEPOCH= 1</programlisting> - - <para><varname>PKGNAME</varname> wird zu - <literal>gtkmumble-0.3,1</literal></para> - - <note> - <para>Falls <varname>PORTEPOCH</varname> mit diesem - Upgrade auf <literal>0</literal> zurückgesetzt - worden wäre, dann würde jemand, der das Paket - <literal>gtkmumble-0.10_1</literal> installiert - hätte, das Paket <literal>gtkmumble-0.3</literal> - nicht als neuer erkennen, da <literal>3</literal> immer - noch numerisch kleiner ist als <literal>10</literal>. - Bedenken Sie, dass genau dies der springende Punkt an - <varname>PORTEPOCH</varname> ist.</para> - </note> - </sect3> - </sect2> - - <sect2> - <title><varname>PKGNAMEPREFIX</varname> und - <varname>PKGNAMESUFFIX</varname></title> - - <para>Zwei optionale Variablen, - <varname>PKGNAMEPREFIX</varname> und - <varname>PKGNAMESUFFIX</varname>, werden verknüpft mit - <varname>PORTNAME</varname> und - <varname>PORTVERSION</varname>, um - <varname>PKGNAME</varname> zu bilden als <literal> - ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION} - </literal>. Stellen Sie bitte unbedingt sicher, dass diese - Variablen den <link linkend="porting-pkgname">Richtlinien - für einen guten Paketnamen</link> entsprechen. - Insbesondere dürfen Sie - <emphasis>keinesfalls</emphasis> einen Bindestrich - (<literal>-</literal>) in <varname>PORTVERSION</varname> - verwenden. Falls das Paket den - <replaceable>language-</replaceable> oder - <replaceable>-compiled.specifics</replaceable>-Teil aufweist - (siehe unten) benutzen Sie <varname>PKGNAMEPREFIX</varname> - oder <varname>PKGNAMESUFFIX</varname> respektive. Machen Sie - diese Variablen nicht zum Bestandteil von - <varname>PORTNAME</varname>!</para> - </sect2> - - <sect2> - <title><varname>LATEST_LINK</varname></title> - - <para>Die Umgebungsvariable <varname>LATEST_LINK</varname> wird - während der Paketerstellung verwendet, um einen Kurznamen - festzulegen, der danach von <command>pkg_add -r</command> genutzt - werden kann. Dadurch wird es beispielsweise möglich, die - aktuelle Perl-Version durch einen einfachen Aufruf von - <command>pkg_add -r perl</command> zu installieren (ohne die - Angabe der korrekten Versionsnummer). Dieser Name muss eindeutig - sowie <quote>offensichtlich</quote> sein.</para> - - <para>In einigen Fällen können mehrere Versionen - einer Applikation gleichzeitig in der Ports-Sammlung sein. - Das index build- und das package build-System müssen - nun in der Lage sein, diese als unterschiedliche Ports zu - erkennen, obwohl diese Versionen alle die gleichen Variablen - <varname>PORTNAME</varname>, - <varname>PKGNAMEPREFIX</varname> und sogar - <varname>PKGNAMESUFFIX</varname> aufweisen. In solchen - Fällen sollte die optionale Variable - <varname>LATEST_LINK</varname> auf einen unterschiedlichen - Wert für alle Ports gesetzt werden mit Ausnahme des - <quote>Haupt-Ports</quote>. Beispiele hierfür sind die - <filename>lang/gcc46</filename> und - <filename>lang/gcc</filename>-Ports und die - <filename>www/apache*</filename>-Familie. Wenn Sie die - Umgebungsvariable <varname>NO_LATEST_LINK</varname> setzen, wird - kein Link erzeugt, was für alle Versionen (aber nicht für - die <quote>Hauptversion</quote>) nützlich sein kann. Beachten - Sie bitte, dass die Frage der Auswahl der - <quote>wichtigsten</quote> Version - (<quote>am populärsten</quote>, - <quote>am besten Unterstützt</quote>, - <quote>zuletzt gepatcht</quote> usw.) ausserhalb der - Möglichkeiten dieses Handbuches liegt. Wir sagen Ihnen - nur, wie Sie die anderen Ports spezifizieren, nachdem Sie - den <quote>Haupt-Port</quote> erkoren haben.</para> - </sect2> - - <sect2 xml:id="porting-pkgname"> - <title>Namensregeln für Pakete</title> - - <para>Im Folgenden finden Sie die Regeln für die - Benennung Ihrer Pakete. Diese sollen gewährleisten, - dass das Paketverzeichnis leicht zu durchsuchen ist, da es - bereits abertausende Pakete gibt und die Nutzer sich mit - Schauder abwenden, wenn Ihre Augen überstrapaziert - werden!</para> - - <para>Der Paketname soll aussehen wie - <filename>language_region-name-compiled.specifics-version.numbers</filename>.</para> - - <para>Der Paketname ist definiert als - <literal> - ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION} - </literal>. Stellen Sie bitte sicher, dass die Variablen - Ihres Ports diesem Format entsprechen.</para> - - <orderedlist> - <listitem> - <para>FreeBSD bemüht sich ausserordentlich, die - Landessprachen seiner Nutzer zu unterstützen. - Die <replaceable>language-</replaceable>Variable soll - eine Abkürzung mit 2 Buchstaben sein der Sprachen - gemäß ISO-639, falls der Port für eine - bestimmte Sprache spezifisch ist. - Beispiele hierfür sind <literal>ja</literal> - für Japanisch, <literal>ru</literal> für - Russisch, <literal>vi</literal> für Vietnamesisch, - <literal>zh</literal> für Chinesisch, - <literal>ko</literal> für Koreanisch und - <literal>de</literal> für Deutsch.</para> - - <para>Sollte der Port spezifisch sein für eine - gewisse Region innerhalb eines Sprachraumes, dann - fügen Sie bitte auch den Ländercode mit 2 - Buchstaben hinzu. Beispiele sind - <literal>en_US</literal> für nordamerikanisches - Englisch und <literal>fr_CH</literal> für - schweizerisches Französisch.</para> - - <para>Der <replaceable>language-</replaceable>Teil muss - in der <varname>PKGNAMEPREFIX</varname>-Variable gesetzt - werden.</para> - </listitem> - - <listitem> - <para>Der erste Buchstabe des - <filename>name</filename>-Teils muss kleingeschrieben - werden (der Rest des Namens kann Großbuchstaben - enthalten. Daher seien Sie bitte umsichtig, wenn Sie den - Namen einer Software konvertieren, welche - Grossbuchstaben enthält). - Es ist Tradition, <literal>Perl 5</literal>-Module durch - ein vorstehendes <literal>p5-</literal> und durch - Umwandlung des doppelten Doppelpunktes in Bindestriche - zu bezeichnen. So wird z.B. aus dem - <literal>Data::Dumper</literal>-Modul der - <literal>p5-Data-Dumper</literal>-Port.</para> - </listitem> - - <listitem> - <para>Vergewissern Sie sich, dass der Name des Ports und - seine Versionsnummer klar getrennt sind und in den - Variablen <varname>PORTNAME</varname> und - <varname>PORTVERSION</varname> stehen. Der einzige - Grund, um in <varname>PORTNAME</varname> einen - Versionsteil aufzunehmen ist der, dass die Software - wirklich so bezeichnet wird, wie z.B. die Ports - <filename>textproc/libxml2</filename> oder - <filename>japanese/kinput2-freewnn</filename>. - Ansonsten sollte <varname>PORTNAME</varname> keine - versionsspezifischen Bestandteile aufweisen. Es ist - vollkommen normal, dass viele Ports den gleichen - <varname>PORTNAME</varname> aufweisen wie z.B. die - <filename>www/apache*</filename>-Ports. In diesem Falle - werden unterschiedliche Versionen (und unterschiedliche - Indexeinträge) unterschieden durch die Werte von - <varname>PKGNAMEPREFIX</varname>, - <varname>PKGNAMESUFFIX</varname> und - <varname>LATEST_LINK</varname>.</para> - </listitem> - - <listitem> - <para>Falls der Port mit verschiedenen, <link linkend="makefile-masterdir">fest kodierten - Vorgaben</link> (üblicherweise Teil des - Verzeichnisnamens in einer Familie von Ports) gebaut - werden kann, dann soll der - <replaceable>-compiled.specifics</replaceable>-Teil die - einkompilierten Vorgaben anzeigen (der Bindestrich ist - optional). Beispiele hierfür sind - Papiergrößen und Font-Einheiten.</para> - - <para>Der - <replaceable>-compiled.specifics</replaceable>-Teil - muss in der Variablen <varname>PKGNAMESUFFIX</varname> - gesetzt werden.</para> - </listitem> - - <listitem> - <para>Die Versionszeichenfolge sollte einen Bindestrich - (<literal>-</literal>) am Schluss haben und eine von - Punkten getrennte Liste von Integer-Zahlen und - kleingeschriebenen Buchstaben sein. - Es ist nicht zulässig, einen weiteren Bindestrich - innerhalb des Versionsstrings zu verwenden! Die einzige - Ausnahme hiervon ist die Zeichenfolge - <literal>pl</literal> (bedeutet - <quote>patchlevel</quote>), welche - <emphasis>nur</emphasis> dann gebraucht werden darf, - wenn die Applikation über keine - Haupt– oder Unterversionsnummern - verfügt. Wenn die Versionsbezeichnung der Software - Zeichenketten wie <quote>alpha</quote>, - <quote>beta</quote>, <quote>rc</quote> oder - <quote>pre</quote> enthält, dann nehmen Sie bitte - den ersten Buchstaben daraus und setzen ihn unmittelbar - hinter einen Punkt. - Falls die Versionszeichenfolge nach diesem Punkt - fortgesetzt wird, sollen die Zahlen ohne einen Punkt - zwischen den einzelnen Buchstaben folgen.</para> - - <para>Das Ziel ist es, die Ports anhand der - Versionszeichenfolge zu sortieren. Stellen Sie bitte - unbedingt sicher, dass die Bestandteile der - Versionsnummer immer durch einen Punkt getrennt sind - und falls Datumsangaben verwendet werden, dass diese im Format - <literal>0.0.yyyy.mm.dd</literal> - und nicht <literal>dd.mm.yyyy - </literal> oder gar dem nicht Y2K-kompatiblen Format - <literal> - yy.mm.dd - </literal> vorliegen. Es ist wichtig, dass die - Versionsnummer mit <literal>0.0.</literal> beginnt, da die - Versionsnummer im Falle einer Veröffentlichung auf jeden - Fall kleiner als - <literal>yyyy</literal> sein - wird.</para> - </listitem> - </orderedlist> - - <para>Hier sind einige reale Beispiele, die aufzeigen, - wie man den Namen einer Applikation zu einem - vernünftigen Paketnamen umwandelt:</para> - - <informaltable frame="none" pgwide="1"> - <tgroup cols="6"> - <thead> - <row> - <entry>Softwarename</entry> - <entry><varname>PKGNAMEPREFIX</varname></entry> - <entry><varname>PORTNAME</varname></entry> - <entry><varname>PKGNAMESUFFIX</varname></entry> - <entry><varname>PORTVERSION</varname></entry> - <entry>Grund</entry> - </row> - </thead> - - <tbody> - <row> - <entry>mule-2.2.2</entry> - <entry>(leer)</entry> - <entry>mule</entry> - <entry>(leer)</entry> - <entry>2.2.2</entry> - <entry>Keine Änderung erforderlich</entry> - </row> - - <row> - <entry>EmiClock-1.0.2</entry> - <entry>(leer)</entry> - <entry>emiclock</entry> - <entry>(leer)</entry> - <entry>1.0.2</entry> - <entry>keine Großbuchstaben für einzelne - Applikationen</entry> - </row> - - <row> - <entry>rdist-1.3alpha</entry> - <entry>(leer)</entry> - <entry>rdist</entry> - <entry>(leer)</entry> - <entry>1.3.a</entry> - <entry>Keine Zeichenketten wie - <literal>alpha</literal> erlaubt</entry> - </row> - - <row> - <entry>es-0.9-beta1</entry> - <entry>(leer)</entry> - <entry>es</entry> - <entry>(leer)</entry> - <entry>0.9.b1</entry> - <entry>keine Zeichenketten wie <literal>beta</literal> - erlaubt</entry> - </row> - - <row> - <entry>mailman-2.0rc3</entry> - <entry>(leer)</entry> - <entry>mailman</entry> - <entry>(leer)</entry> - <entry>2.0.r3</entry> - <entry>keine Zeichenketten wie <literal>rc</literal> - erlaubt</entry> - </row> - - <row> - <entry>v3.3beta021.src</entry> - <entry>(leer)</entry> - <entry>tiff</entry> - <entry>(leer)</entry> - <entry>3.3</entry> - <entry>Was sollte denn das eigentlich sein?</entry> - </row> - - <row> - <entry>tvtwm</entry> - <entry>(leer)</entry> - <entry>tvtwm</entry> - <entry>(leer)</entry> - <entry>pl11</entry> - <entry>Versionsstring zwingend erforderlich</entry> - </row> - - <row> - <entry>piewm</entry> - <entry>(leer)</entry> - <entry>piewm</entry> - <entry>(leer)</entry> - <entry>1.0</entry> - <entry>Versionsstring zwingend erforderlich</entry> - </row> - - <row> - <entry>xvgr-2.10pl1</entry> - <entry>(leer)</entry> - <entry>xvgr</entry> - <entry>(leer)</entry> - <entry>2.10.1</entry> - <entry><literal>pl</literal> nur erlaubt, wenn keine - Versionsnummer vorhanden</entry> - </row> - - <row> - <entry>gawk-2.15.6</entry> - <entry>ja-</entry> - <entry>gawk</entry> - <entry>(leer)</entry> - <entry>2.15.6</entry> - <entry>Japanische Sprachversion</entry> - </row> - - <row> - <entry>psutils-1.13</entry> - <entry>(leer)</entry> - <entry>psutils</entry> - <entry>-letter</entry> - <entry>1.13</entry> - <entry>Papergröße beim Paketbau fix - kodiert</entry> - </row> - - <row> - <entry>pkfonts</entry> - <entry>(leer)</entry> - <entry>pkfonts</entry> - <entry>300</entry> - <entry>1.0</entry> - <entry>Paket für 300 DPI Schriftarten</entry> - </row> - </tbody> - </tgroup> - </informaltable> - - <para>Falls es in der Originalquelle überhaupt keinen - Anhaltspunkt für irgendeine Versionsbezeichnung gibt - und es unwahrscheinlich ist, dass der Autor jemals eine neue - Version veröffentlichen wird, dann setzen Sie bitte die - Version einfach auf <literal>1.0</literal> (wie im obigen - Beispiel <literal>piewm</literal>). Sie können auch den - Autor fragen oder eine Datumszeichenfolge in der Art - <literal>0.0.yyyy.mm.dd</literal> - als Version verwenden.</para> - </sect2> - </sect1> - - <sect1 xml:id="makefile-categories"> - <title>Kategorisierung</title> - - <sect2> - <title><varname>CATEGORIES</varname></title> - - <para>Wenn ein Paket erzeugt wird, dann wird es unter - <filename>/usr/ports/packages/All</filename> abgelegt und - von einem oder mehreren Unterverzeichnissen werden auf - <filename>/usr/ports/packages</filename> Links erstellt. - Die Namen dieser Unterverzeichnisse werden durch die - Variable <varname>CATEGORIES</varname> festgelegt. - Dies geschieht, um dem Nutzer zu helfen, eine große - Zahl von Paketen auf einer FTP-Webseite oder einer CD/DVD - zu durchsuchen. - Bitte werfen Sie einen Blick auf die <link linkend="porting-categories">Aktuelle Liste der - Kategorien</link> und suchen Sie die beste Kategorie - für Ihren Port aus.</para> - - <para>Diese Liste legt auch fest, an welcher Stelle in der - Ports-Sammlung der Port eingefügt wird. Falls Sie - mehrere Kategorien angeben wird angenommen, dass die Dateien - des Ports im Unterverzeichnis mit dem Namen der ersten - angegebenen Kategorie liegen. Schauen Sie bitte <link linkend="choosing-categories">unten</link> für weitere - Informationen darüber, wie man die richtige Kategorie - bestimmt.</para> - </sect2> - - <sect2 xml:id="porting-categories"> - <title>Aktuelle Liste der Kategorien</title> - - <para>Hier ist die aktuelle Liste der Kategorien. Die mit - einem Asterisk (<literal>*</literal>) bezeichneten sind - <emphasis>virtuelle</emphasis> Kategorien, also solche, - welche über kein eigenes Unterverzeichnis in der - Ports-Sammlung verfügen. Sie werden nur als - Sekundärkategorien benutzt und sind nur für - Suchzwecke eingerichtet worden.</para> - - <note> - <para>Für nicht-virtuelle Kategorien finden Sie eine - einzeilige Beschreibung in der Variable - <varname>COMMENT</varname> im - <filename>Makefile</filename> des jeweiligen - Unterverzeichnisses.</para> - </note> - - <informaltable frame="none" pgwide="1"> - <tgroup cols="3"> - <thead> - <row> - <entry>Kategorie</entry> - <entry>Beschreibung</entry> - <entry>Anmerkung</entry> - </row> - </thead> - - <tbody> - <row> - <entry><filename>accessibility</filename></entry> - <entry>Ports für behinderte Menschen.</entry> - <entry/> - </row> - - <row> - <entry><filename>afterstep*</filename></entry> - <entry>Ports für den <link xlink:href="http://www.afterstep.org">AfterStep</link> - Window Manager.</entry> - <entry/> - </row> - - <row> - <entry><filename>arabic</filename></entry> - <entry>Arabische Sprachunterstützung.</entry> - <entry/> - </row> - - <row> - <entry><filename>archivers</filename></entry> - <entry>Archivierungswerkzeuge.</entry> - <entry/> - </row> - - <row> - <entry><filename>astro</filename></entry> - <entry>Ports für Astronomie.</entry> - <entry/> - </row> - - <row> - <entry><filename>audio</filename></entry> - <entry>Sound-Unterstützung.</entry> - <entry/> - </row> - - <row> - <entry><filename>benchmarks</filename></entry> - <entry>Benchmarking-Werkzeuge.</entry> - <entry/> - </row> - - <row> - <entry><filename>biology</filename></entry> - <entry>Software für Biologie.</entry> - <entry/> - </row> - - <row> - <entry><filename>cad</filename></entry> - <entry>CAD-Werkzeuge.</entry> - <entry/> - </row> - - <row> - <entry><filename>chinese</filename></entry> - <entry>Chinesische Sprachunterstützung.</entry> - <entry/> - </row> - - <row> - <entry><filename>comms</filename></entry> - <entry>Kommunikationsprogramme.</entry> - <entry>Hauptsächlich Software für serielle - Schnittstellen.</entry> - </row> - - <row> - <entry><filename>converters</filename></entry> - <entry>Zeichensatz-Konverter.</entry> - <entry/> - </row> - - <row> - <entry><filename>databases</filename></entry> - <entry>Datenbanken.</entry> - <entry/> - </row> - - <row> - <entry><filename>deskutils</filename></entry> - <entry>Dinge, die vor der Erfindung des Computers - auf dem Schreibtisch waren.</entry> - <entry/> - </row> - - <row> - <entry><filename>devel</filename></entry> - <entry>Entwicklungs-Werkzeuge.</entry> - <entry>Legen Sie keine Bibliotheken hier ab, nur weil - es Bibliotheken sind, es sei denn, sie gehören - wirklich nirgendwo anders hin.</entry> - </row> - - <row> - <entry><filename>dns</filename></entry> - <entry>DNS-bezogene Software.</entry> - <entry/> - </row> - - <row> - <entry><filename>docs*</filename></entry> - <entry>Meta-Ports für die - FreeBSD-Dokumentation.</entry> - <entry/> - </row> - - <row> - <entry><filename>editors</filename></entry> - <entry>allgemeine Editoren.</entry> - <entry>Spezielle Editoren gehören in Ihre - jeweilige Kategorie, (z.B. gehört ein - mathematischer Formeleditor in - <filename>math</filename>).</entry> - </row> - - <row> - <entry><filename>elisp*</filename></entry> - <entry>Emacs-lisp-Ports.</entry> - <entry/> - </row> - - <row> - <entry><filename>emulators</filename></entry> - <entry>Emulatoren für andere Betriebssysteme. - </entry> - <entry>Terminal-Emulatoren gehören - <emphasis>nicht</emphasis> hierher; X-basierende - gehören zu <filename>x11</filename> und - text-basierende zu <filename>comms</filename> oder - <filename>misc</filename>, abhängig von deren - genauer Funktionalität.</entry> - </row> - - <row> - <entry><filename>finance</filename></entry> - <entry>Finanz-Software und ähnliches.</entry> - <entry/> - </row> - - <row> - <entry><filename>french</filename></entry> - <entry>Französische Sprachunterstützung. - </entry> - <entry/> - </row> - - <row> - <entry><filename>ftp</filename></entry> - <entry>FTP Client- und Server-Werkzeuge.</entry> - <entry>Falls Ihr Port sowohl FTP als auch HTTP - unterstützt, stellen Sie ihn in - <filename>ftp</filename> mit der Zweitkategorie - <filename>www</filename>.</entry> - </row> - - <row> - <entry><filename>games</filename></entry> - <entry>Spiele.</entry> - <entry/> - </row> - - <row> - <entry><filename>geography*</filename></entry> - <entry>geografische Software.</entry> - <entry/> - </row> - - <row> - <entry><filename>german</filename></entry> - <entry>Deutsche Sprachunterstützung.</entry> - <entry/> - </row> - - <row> - <entry><filename>gnome*</filename></entry> - <entry>Ports für <link xlink:href="http://www.gnome.org">GNOME</link></entry> - <entry/> - </row> - - <row> - <entry><filename>gnustep*</filename></entry> - <entry>Software für GNUstep.</entry> - <entry/> - </row> - - <row> - <entry><filename>graphics</filename></entry> - <entry>grafische Werkzeuge.</entry> - <entry/> - </row> - - <row> - <entry><filename>hamradio*</filename></entry> - <entry>Software für Amateurfunk.</entry> - <entry/> - </row> - - <row> - <entry><filename>haskell*</filename></entry> - <entry>Software für die - Haskell-Programmiersprache.</entry> - <entry/> - </row> - - <row> - <entry><filename>hebrew</filename></entry> - <entry>Hebräische Sprachunterstützung. - </entry> - <entry/> - </row> - - <row> - <entry><filename>hungarian</filename></entry> - <entry>Ungarische Sprachunterstützung.</entry> - <entry/> - </row> - - <row> - <entry><filename>ipv6*</filename></entry> - <entry>IPv6-bezogene Software.</entry> - <entry/> - </row> - - <row> - <entry><filename>irc</filename></entry> - <entry>Internet Relay Chat (IRC)-Werkzeuge.</entry> - <entry/> - </row> - - <row> - <entry><filename>japanese</filename></entry> - <entry>Japanische Sprachunterstützung.</entry> - <entry/> - </row> - - <row> - <entry><filename>java</filename></entry> - <entry>Software für die Java™-Programmiersprache. - </entry> - <entry>Die <filename>java</filename>-Kategorie sollte - nicht die Einzige für einen Port sein mit - Ausnahme der direkt nur mit der Programmiersprache - zusammenhängenden Applikationen. Porter sollten - <filename>java</filename> nicht als Hauptkategorie - eines Ports wählen.</entry> - </row> - - <row> - <entry><filename>kde*</filename></entry> - <entry>Ports für das <link xlink:href="http://www.kde.org">K Desktop Environment - (KDE)</link>-Projekt.</entry> - <entry/> - </row> - - <row> - <entry><filename>kld*</filename></entry> - <entry>Kernelmodule.</entry> - <entry/> - </row> - - <row> - <entry><filename>korean</filename></entry> - <entry>Koreanische Sprachunterstützung.</entry> - <entry/> - </row> - - <row> - <entry><filename>lang</filename></entry> - <entry>Programmiersprachen.</entry> - <entry/> - </row> - - <row> - <entry><filename>linux*</filename></entry> - <entry>Linux-Applikationen und -Werkzeuge.</entry> - <entry/> - </row> - - <row> - <entry><filename>lisp*</filename></entry> - <entry>Software für die Lisp-Programmiersprache. - </entry> - <entry/> - </row> - - <row> - <entry><filename>mail</filename></entry> - <entry>Mail-Software.</entry> - <entry/> - </row> - - <row> - <entry><filename>math</filename></entry> - <entry>Numerische Berechnungen und andere - mathematische Werkzeuge.</entry> - <entry/> - </row> - - <row> - <entry><filename>mbone*</filename></entry> - <entry>MBone-Applikationen.</entry> - <entry/> - </row> - - <row> - <entry><filename>misc</filename></entry> - <entry>Verschiedene Werkzeuge.</entry> - <entry>Hauptsächlich Werkzeuge, die nicht - anderswo hingehören. Versuchen Sie, falls - irgend möglich, eine bessere Kategorie - für Ihren Port zu finden als - <literal>misc</literal>, weil Ports hier leicht - untergehen.</entry> - </row> - - <row> - <entry><filename>multimedia</filename></entry> - <entry>Multimedia-Software.</entry> - <entry/> - </row> - - <row> - <entry><filename>net</filename></entry> - <entry>Verschiedene Netzwerk-Software.</entry> - <entry/> - </row> - - <row> - <entry><filename>net-im</filename></entry> - <entry>Instant Messaging-Software.</entry> - <entry/> - </row> - - <row> - <entry><filename>net-mgmt</filename></entry> - <entry>Netzwerk-Management-Software.</entry> - <entry/> - </row> - - <row> - <entry><filename>net-p2p</filename></entry> - <entry>Peer to peer-Netzwerkprogramme.</entry> - <entry/> - </row> - - <row> - <entry><filename>news</filename></entry> - <entry>USENET News-Software.</entry> - <entry/> - </row> - - <row> - <entry><filename>palm</filename></entry> - <entry>Software für <link xlink:href="http://www.palm.com/">Palm™</link>. - </entry> - <entry/> - </row> - - <row> - <entry><filename>parallel*</filename></entry> - <entry>Applikationen für paralleles Rechnen. - </entry> - <entry/> - </row> - - <row> - <entry><filename>pear*</filename></entry> - <entry>Ports für das Pear PHP-Framework.</entry> - <entry/> - </row> - - <row> - <entry><filename>perl5*</filename></entry> - <entry>Ports, welche <application>Perl</application> - Version 5 benötigen.</entry> - <entry/> - </row> - - <row> - <entry><filename>plan9*</filename></entry> - <entry>Verschiedene Programme von <link xlink:href="http://www.cs.bell-labs.com/plan9dist/">Plan9</link>. - </entry> - <entry/> - </row> - - <row> - <entry><filename>polish</filename></entry> - <entry>Polnische Sprachunterstützung.</entry> - <entry/> - </row> - - <row> - <entry><filename>ports-mgmt</filename></entry> - <entry>Hilfsprogramme für das Installieren und - Entwickeln von FreeBSD Ports und Paketen.</entry> - </row> - - <row> - <entry><filename>portuguese</filename></entry> - <entry>Portugiesische Sprachunterstützung. - </entry> - <entry/> - </row> - - <row> - <entry><filename>print</filename></entry> - <entry>Drucker-Software.</entry> - <entry>Desktop Veröffentlichungs-Werkzeuge (DTP, - Betrachter etc.) gehören auch hierher.</entry> - </row> - - <row> - <entry><filename>python*</filename></entry> - <entry>Software für <link xlink:href="http://www.python.org/">Python</link>. - </entry> - <entry/> - </row> - - <row> - <entry><filename>ruby*</filename></entry> - <entry>Software für <link xlink:href="http://www.ruby-lang.org/">Ruby</link>. - </entry> - <entry/> - </row> - - <row> - <entry><filename>rubygems*</filename></entry> - <entry>Ports für <link xlink:href="http://www.rubygems.org/">RubyGems</link>-Pakete. - </entry> - <entry/> - </row> - - <row> - <entry><filename>russian</filename></entry> - <entry>Russische Sprachunterstützung.</entry> - <entry/> - </row> - - <row> - <entry><filename>scheme*</filename></entry> - <entry>Software für die - Scheme-Programmiersprache.</entry> - <entry/> - </row> - - <row> - <entry><filename>science</filename></entry> - <entry>Wissenschaftliche Programme, die in keine - andere Kategorie passen wie z.B. - <filename>astro</filename>, - <filename>biology</filename> und - <filename>math</filename>.</entry> - <entry/> - </row> - - <row> - <entry><filename>security</filename></entry> - <entry>Security-Werkzeuge.</entry> - <entry/> - </row> - - <row> - <entry><filename>shells</filename></entry> - <entry>Shells.</entry> - <entry/> - </row> - - <row> - <entry><filename>spanish*</filename></entry> - <entry>Spanische Sprachunterstützung.</entry> - <entry/> - </row> - - <row> - <entry><filename>sysutils</filename></entry> - <entry>System-Werkzeuge.</entry> - <entry/> - </row> - - <row> - <entry><filename>tcl*</filename></entry> - <entry>Ports, welche Tcl benötigen.</entry> - <entry/> - </row> - - <row> - <entry><filename>textproc</filename></entry> - <entry>Textverarbeitungsprogramme.</entry> - <entry>Dies beinhaltet nicht DTP-Werkzeuge, diese - gehören in <filename>print</filename>. - </entry> - </row> - - <row> - <entry><filename>tk*</filename></entry> - <entry>Ports, welche Tk benötigen.</entry> - <entry/> - </row> - - <row> - <entry><filename>ukrainian</filename></entry> - <entry>Ukrainische Sprachunterstützung.</entry> - <entry/> - </row> - - <row> - <entry><filename>vietnamese</filename></entry> - <entry>Vietnamesische Sprachunterstützung. - </entry> - <entry/> - </row> - - <row> - <entry><filename>windowmaker*</filename></entry> - <entry>Ports für den WindowMaker Window-Manager. - </entry> - <entry/> - </row> - - <row> - <entry><filename>www</filename></entry> - <entry>Software für das World Wide Web (WWW). - </entry> - <entry>HTML-Werkzeuge gehören auch hierher. - </entry> - </row> - - <row> - <entry><filename>x11</filename></entry> - <entry>X-Window-System und dergleichen.</entry> - <entry>Diese Kategorie ist nur für Software, - welche direkt X unterstützt. - Fügen Sie keine normalen X-Applikationen hinzu. - Die meisten davon gehören in eine andere - <filename>x11-*</filename>-Kategorie (siehe unten). - Falls Ihr Port eine X-Applikation - <emphasis>ist</emphasis>, dann definieren Sie bitte - <varname>USE_XLIB</varname> (impliziert durch - <varname>USE_IMAKE</varname>) und fügen ihn der - entsprechenden Kategorie hinzu.</entry> - </row> - - <row> - <entry><filename>x11-clocks</filename></entry> - <entry>X11-Uhren.</entry> - <entry/> - </row> - - <row> - <entry><filename>x11-drivers</filename></entry> - <entry>X11-Treiber.</entry> - <entry/> - </row> - - <row> - <entry><filename>x11-fm</filename></entry> - <entry>X11-Dateimanager.</entry> - <entry/> - </row> - - <row> - <entry><filename>x11-fonts</filename></entry> - <entry>X11-Schriftarten und Werkzeuge.</entry> - <entry/> - </row> - - <row> - <entry><filename>x11-servers</filename></entry> - <entry>X11-Server.</entry> - <entry/> - </row> - - <row> - <entry><filename>x11-themes</filename></entry> - <entry>X11-Themes.</entry> - <entry/> - </row> - - <row> - <entry><filename>x11-toolkits</filename></entry> - <entry>X11-Toolkits.</entry> - <entry/> - </row> - - <row> - <entry><filename>x11-wm</filename></entry> - <entry>X11-Window-Manager.</entry> - <entry/> - </row> - - <row> - <entry><filename>xfce*</filename></entry> - <entry>Ports in Zusammenhang mit <link xlink:href="http://www.xfce.org/">Xfce</link>.</entry> - <entry/> - </row> - - <row> - <entry><filename>zope*</filename></entry> - <entry><link xlink:href="http://www.zope.org/">Zope</link>-Unterstützung. - </entry> - <entry/> - </row> - </tbody> - </tgroup> - </informaltable> - </sect2> - - <sect2 xml:id="choosing-categories"> - <title>Wählen der richtigen Kategorie</title> - - <para>Da viele der Kategorien sich überlappen, - müssen Sie oft festlegen, welches die primäre - Kategorie Ihres Ports ist. Hierzu gibt es einige Regeln, - welche diese Auswahl bestimmen. Hier ist die Liste der - Regeln mit abnehmender Wichtigkeit:</para> - - <itemizedlist> - <listitem> - <para>Die erste (primäre) Kategorie muss eine - physische (keine virtuelle, siehe <link linkend="porting-categories">oben</link>) sein. Dies - ist notwendig damit Pakete erstellt werden können. - Die nachfolgenden Kategorien können wahllos - virtuelle oder physische Kategorien sein.</para> - </listitem> - - <listitem> - <para>Sprachspezifische Kategorien kommen immer zuerst. - Wenn Ihr Port z.B. Japanische X11-Schriftarten - installiert, dann muss Ihre - <varname>CATEGORIES</varname>-Zeile - <filename>japanese x11-fonts</filename> - enthalten.</para> - </listitem> - - <listitem> - <para>Spezifische Kategorien werden vor weniger - spezifischen Kategorien aufgelistet. Ein HTML-Editor - sollte z.B. als <filename>www editors</filename> - aufgeführt werden und nicht umgekehrt. - Genauso sollten Sie keinen Port unter - <filename>net</filename> aufführen, wenn er zu - <filename>irc</filename>, <filename>mail</filename>, - <filename>news</filename>, - <filename>security</filename> oder - <filename>www</filename> passt, da - <filename>net</filename> in diesen Kategorien - bereits implizit eingeschlossen ist.</para> - </listitem> - - <listitem> - <para><filename>x11</filename> wird nur als sekundäre - Kategorie benutzt, wenn die primäre Kategorie eine - sprachspezifische ist. Keinesfalls sollten Sie - <filename>x11</filename> in die Kategorie-Zeile einer - X-Applikation setzen.</para> - </listitem> - - <listitem> - <para><application>Emacs</application> modes gehören - in die gleiche Kategorie wie die vom jeweiligen mode - unterstützte Applikation und nicht in - <filename>editors</filename>. Ein - <application>Emacs</application> mode z.B. für das - Editieren von Quelltext einer bestimmten - Programmiersprache gehört zur Kategorie - <filename>lang</filename>.</para> - </listitem> - - <listitem> - <para>Für Ports, die vom Benutzer ladbare Kernelmodule - installieren, sollte die virtuelle Kategorie - <filename>kld</filename> in die - <varname>CATEGORIES</varname>-Zeile aufgenommen - werden.</para> - </listitem> - - <listitem> - <para><filename>misc</filename> sollte nicht zusammen mit - irgendeiner anderen nicht-virtuellen Kategorie - auftreten. Falls Sie <literal>misc</literal> mit einer - anderen Kategorie in <varname>CATEGORIES</varname> haben - bedeutet dies, dass Sie gefahrlos - <literal>misc</literal> streichen und die andere - Kategorie alleine verwenden können!</para> - </listitem> - - <listitem> - <para>Falls Ihr Port wirklich in keine andere Kategorie - passt, verwenden Sie bitte - <filename>misc</filename>.</para> - </listitem> - </itemizedlist> - - <para>Falls Sie sich über die Kategorie im Unklaren sind, - hinterlassen Sie bitte einen Kommentar in Ihrem per - &man.send-pr.1; eingereichten Bericht, damit wir diese Frage - vor dem Import diskutieren können. Falls Sie ein - Committer sind, schicken Sie bitte eine Nachricht an - &a.ports;, damit die Frage im Vorhinein erörtert werden - kann. Neue Ports werden zu häufig falsch kategorisiert - und werden sofort wieder verschoben. Das bläht das - Master Source Repository unnötig auf.</para> - </sect2> - - <sect2 xml:id="proposing-categories"> - <title>Eine neue Kategorie vorschlagen</title> - - <para>Da die Ports-Sammlung über viele Jahre gewachsen - ist, wurden viele neue Kategorien hinzugefügt. Neue - Kategorien können <emphasis>virtuell</emphasis> (ohne - eigenes Unterverzeichnis in der Ports-Sammlung) oder - <emphasis>physisch</emphasis> sein. - Der nachfolgende Text führt einige Punkte auf, welche - bei der Neueinführung einer physischen Kategorie - beachtet werden müssen, damit Sie dies bei einem - eventuellen Vorschlag Ihrerseits berücksichtigen - können.</para> - - <para>Unsere bestehende Maxime ist die Vermeidung der - Neuanlage von physischen Kategorien, solange nicht eine - große Zahl von Ports zugeordnet werden können - oder falls ihr nicht Ports zugehören würden, - welche eine logisch abgegrenzte Gruppe von limitiertem - öffentlichem Interesse zugehören würden - (zum Beispiel neue Sprachkategorien) oder vorzugsweise - beides.</para> - - <para>Die Erklärung dafür ist, dass eine Neuanlage - einer physischen Kategorie einen <link xlink:href="&url.articles.committers-guide;/article.html#PORTS">erheblichen - Arbeitsaufwand</link> sowohl für die Committer als - auch diejenigen Nutzer bedeutet, welche die Änderungen - der Ports-Sammlung nachvollziehen. Zusätzlich - verursachen Vorschläge für neue Kategorien oftmals - Kontroversen (natürlich deswegen, weil es keinen klaren - Konsens darüber gibt, welche Kategorie als <quote>zu - groß</quote> betrachtet werden muss noch ob sich - bestimmte Kategorien zur einfachen Suche eignen (und wie - viele Kategorien überhaupt ideal wären) und so - weiter).</para> - - <para>Hier ist das Prozedere:</para> - - <procedure> - <step> - <para>Schlagen Sie die neue Kategorie auf &a.ports; vor. - Sie sollten eine detaillierte Begründung für - die neue Kategorie beifügen einschließlich - einer Erklärung, warum Sie meinen, die - existierenden Kategorien seien nicht ausreichend. - Zeigen Sie außerdem eine Liste der zu - verschiebenden Ports (falls neue Ports in - <application>GNATS</application> auf ihren commit - warten, die in diese Kategorie passen würden. - Listen Sie diese bitte auch mit auf). Sind Sie der - Maintainer oder Einreicher dieser Ports, erwähnen - Sie es bitte. Es verleiht Ihrem Vorschlag mehr - Gewicht.</para> - </step> - - <step> - <para>Nehmen Sie an der Diskussion teil.</para> - </step> - - <step> - <para>Falls es Unterstützung für Ihren Vorschlag - geben sollte, reichen Sie bitte einen PR ein, welcher - die Begründung und die Liste der betroffenen Ports - enthält, die verschoben werden müssen. - Idealerweise sollte der PR Patches für Folgendes - enthalten:</para> - - <itemizedlist> - <listitem> - <para><filename>Makefile</filename>s für die - neuen Ports nach dem Repocopy</para> - </listitem> - - <listitem> - <para><filename>Makefile</filename> für die neue - Kategorie</para> - </listitem> - - <listitem> - <para><filename>Makefile</filename> für die alten - Kategorien der betroffenen Ports</para> - </listitem> - - <listitem> - <para><filename>Makefile</filename>s für Ports, - welche von den alten Ports abhängen</para> - </listitem> - - <listitem> - <para>Für zusätzliches Ansehen sorgen Sie, - wenn Sie die anderen Dateien, die geändert - werden müssen, beifügen wie in der - Direktive des Committer's Guide beschrieben.</para> - </listitem> - </itemizedlist> - </step> - - <step> - <para>Da es die Ports-Infrastruktur beeinflusst und nicht - nur die Durchführung von Repocopies und - möglicherweise sogar Regressionstests auf dem Build - Cluster durchgeführt werden müssen, sollte der - PR dem Ports Management Team &a.portmgr; zugeordnet - werden.</para> - </step> - - <step> - <para>Sobald der PR bestätigt wurde muss ein - Committer den Rest der Prozedur durchführen, welche - im <link xlink:href="&url.articles.committers-guide;/#ports"> - Committers Guide</link> beschrieben ist.</para> - </step> - </procedure> - - <para>Das Vorschlagen einer neuen virtuellen Kategorie ist - ähnlich, aber wesentlich weniger aufwendig, weil - keine Ports verschoben werden müssen. In diesem Falle - müssen nur die Patches an den PR beigefügt werden, - welche die neue Kategorie zur Variable - <varname>CATEGORIES</varname> der betroffenen Ports - hinzufügen.</para> - </sect2> - - <sect2 xml:id="proposing-reorg"> - <title>Vorschlagen einer Neuorganisation aller - Kategorien</title> - - <para>Von Zeit zu Zeit schlägt jemand eine komplette - Neuorganisation aller Ports, entweder mit einer zweistufigen - Struktur oder irgendeiner Art von - Schlüsselwörtern, vor. Bis heute wurde keiner - dieser Vorschläge umgesetzt, weil sie zwar einfach - zu machen sind, aber der Aufwand zur Umsetzung und - Reorganisation der kompletten Ports-Sammlung schlichtweg - mörderisch wäre. Bitte lesen Sie die Geschichte - dieser Vorschläge in den Archiven der Mailinglisten - nach, bevor Sie diese Ideen nochmals unterbreiten. Zudem - sollten Sie gewappnet sein, dass man Sie auffordert, einen - arbeitsfähigen Prototyp vorzulegen.</para> - </sect2> - </sect1> - - <sect1 xml:id="makefile-distfiles"> - <title>Die Distributionsdateien</title> - - <para>Der zweite Teil des <filename>Makefile</filename> - beschreibt die Dateien, welche heruntergeladen werden - müssen, um den Port zu bauen und wo diese Dateien zu - finden sind.</para> - - <sect2> - <title><varname>DISTVERSION/DISTNAME</varname></title> - - <para><varname>DISTNAME</varname> ist der Name der Applikation - wie er von den Autoren vergeben wurde. - <varname>DISTNAME</varname> hat als Vorgabe - <literal>${PORTNAME}-${PORTVERSION}</literal> also - überschreiben Sie diese Vorgabe nur, wenn es notwendig - ist. <varname>DISTNAME</varname> wird nur an zwei Stellen - genutzt. Erstens: (<varname>DISTFILES</varname>) hat als - Vorgabe - <varname>${DISTNAME}</varname><varname>${EXTRACT_SUFX}</varname>. - Zweitens: Die Distributionsdatei soll in einem - Unterverzeichnis namens <varname>WRKSRC</varname> - extrahiert werden, dessen Vorgabe - <filename>work/${DISTNAME}</filename> - ist.</para> - - <para>Manche Drittanbieter-Namen, welche nicht in das Schema - <literal>${PORTNAME}-${PORTVERSION}</literal> passen, - können durch Setzen von <varname>DISTVERSION</varname> - automatisch behandelt werden. <varname>PORTVERSION</varname> - und <varname>DISTNAME</varname> werden automatisch - abgeleitet, können aber natürlich manuell - überschrieben werden. Die folgende Tabelle führt - einige Beispiele auf:</para> - - <informaltable frame="none" pgwide="1"> - <tgroup cols="2"> - <thead> - <row> - <entry><varname>DISTVERSION</varname></entry> - <entry><varname>PORTVERSION</varname></entry> - </row> - </thead> - - <tbody> - <row> - <entry>0.7.1d</entry> - <entry>0.7.1.d</entry> - </row> - - <row> - <entry>10Alpha3</entry> - <entry>10.a3</entry> - </row> - - <row> - <entry>3Beta7-pre2</entry> - <entry>3.b7.p2</entry> - </row> - - <row> - <entry>8:f_17</entry> - <entry>8f.17</entry> - </row> - </tbody> - </tgroup> - </informaltable> - - <note> - <para><varname>PKGNAMEPREFIX</varname> und - <varname>PKGNAMESUFFIX</varname> beeinflussen - <varname>DISTNAME</varname> nicht. Beachten Sie bitte - auch, dass Sie <varname>DISTNAME</varname> - unverändert lassen sollten, falls - <varname>WRKSRC</varname> denselben Wert hat wie - <filename>work/${PORTNAME}-${PORTVERSION}</filename> - und gleichzeitig dass Archiv des originalen Quelltextes - anders benannt ist als - <varname>${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}</varname>. - Es ist einfacher - <varname>DISTFILES</varname> zu definieren, als - <varname>DISTNAME</varname> und <varname>WRKSRC</varname> - (und möglicherweise <varname>EXTRACT_SUFX</varname>) - zu setzen.</para> - </note> - </sect2> - - <sect2> - <title><varname>MASTER_SITES</varname></title> - - <para>Dokumentieren Sie das Verzeichnis der FTP/HTTP-URL, - welche auf den originalen Tarball zeigt, in der Variable - <varname>MASTER_SITES</varname>. Bitte vergessen Sie - niemals den Schrägstrich (<filename>/</filename>) - am Ende!</para> - - <para>Die <command>make</command>-Makros werden versuchen, - diese Festlegung für die Aufbereitung der - Distributionsdateien mittels <varname>FETCH</varname> zu - benutzen, falls sie diese nicht schon auf dem System - finden.</para> - - <para>Es wird empfohlen, mehrere Webseiten in dieser Liste - aufzuführen, vorzugsweise auf verschiedenen - Kontinenten. Dies ist ein Schutz gegen Probleme bei - größeren Ausfällen im Internet. - Wir planen sogar Unterstützung einzubauen, - die automatisch einen Server in der Nähe zum - Herunterladen bestimmt. Die Verfügbarkeit von - vielen Webseiten wird dieses Vorhaben beträchtlich - erleichtern.</para> - - <para>Falls der originale Tarball Teil eines populären - Archivs ist, wie SourceForge, GNU oder Perl CPAN, können - Sie möglicherweise auf diese Seiten in einer einfachen - und kompakten Form mittels - <varname>MASTER_SITE_<replaceable>*</replaceable></varname> - (d.h., <varname>MASTER_SITE_SOURCEFORGE</varname>,, - <varname>MASTER_SITE_GNU</varname> und - <varname>MASTER_SITE_PERL_CPAN</varname>) referenzieren. - Setzen Sie einfach <varname>MASTER_SITES</varname> auf eine - dieser Variablen und <varname>MASTER_SITE_SUBDIR</varname> - auf den Pfad innerhalb des Archivs. Hier ist ein - Beispiel:</para> - - <programlisting>MASTER_SITES= ${MASTER_SITE_GNU} -MASTER_SITE_SUBDIR= make</programlisting> - - <para>Oder verwenden Sie ein kondensiertes Format:</para> - - <programlisting>MASTER_SITES= GNU/make</programlisting> - - <para>Diese Variablen werden in - <filename>/usr/ports/Mk/bsd.sites.mk</filename> definiert. - Es werden ständig neue Einträge hinzugefügt, - daher stellen Sie bitte unbedingt sicher, dass Sie die - neueste Version verwenden, bevor Sie einen Port - einschicken.</para> - - <para>Für beliebte Seiten existieren sogenannte - <emphasis>magic</emphasis>-Makros, die eine bestimmte - Verzeichnisstruktur erstellen. Um eines dieser Makros zu - verwenden, geben Sie dessen Abkürzung an und Ihr System - wird versuchen, das korrekte Unterverzeichnis automatisch - zu bestimmen.</para> - - <programlisting>MASTER_SITES= SF</programlisting> - - <para>Ist das Ergebnis nicht korrekt, können Sie diesen - Wert auch überschreiben.</para> - - <programlisting>MASTER_SITES= SF/stardict/WyabdcRealPeopleTTS/${PORTVERSION}</programlisting> - - <table frame="none"> - <title>Beliebte magic <varname>MASTER_SITES</varname>-Makros</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Makro</entry> - - <entry>Erwartetes Unterverzeichnis</entry> - </row> - </thead> - - <tbody> - <row> - <entry><varname>APACHE_JAKARTA</varname></entry> - - <entry><varname>/dist/jakarta/${PORTNAME:S,-,,/,}/source</varname></entry> - </row> - - <row> - <entry><varname>BERLIOS</varname></entry> - - <entry><varname>/${PORTNAME:L}</varname></entry> - </row> - - <row> - <entry><varname>CHEESESHOP</varname></entry> - - <entry><varname>/packages/source/source/${DISTNAME:C/(.).*/\1/}/${DISTNAME:C/(.*)-[0-9].*/\1/}</varname></entry> - </row> - - <row> - <entry><varname>DEBIAN</varname></entry> - - <entry><varname>/debian/pool/main/${PORTNAME:C/^((lib)?.).*$/\1/}/${PORTNAME}</varname></entry> - </row> - - <row> - <entry><varname>GCC</varname></entry> - - <entry><varname>/pub/gcc/releases/${DISTNAME}</varname></entry> - </row> - - <row> - <entry><varname>GNOME</varname></entry> - - <entry><varname>/pub/GNOME/sources/${PORTNAME}/${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/}</varname></entry> - </row> - - <row> - <entry><varname>GNU</varname></entry> - - <entry><varname>/gnu/${PORTNAME}</varname></entry> - </row> - - <row> - <entry><varname>MOZDEV</varname></entry> - - <entry><varname>/pub/mozdev/${PORTNAME:L}</varname></entry> - </row> - - <row> - <entry><varname>PERL_CPAN</varname></entry> - - <entry><varname>/pub/CPAN/modules/by-module/${PORTNAME:C/-.*//}</varname></entry> - </row> - - <row> - <entry><varname>PYTHON</varname></entry> - - <entry><varname>/ftp/python/${PYTHON_PORTVERSION:C/rc[0-9]//}</varname></entry> - </row> - - <row> - <entry><varname>RUBYFORGE</varname></entry> - - <entry><varname>/${PORTNAME:L}</varname></entry> - </row> - - <row> - <entry><varname>SAVANNAH</varname></entry> - - <entry><varname>/${PORTNAME:L}</varname></entry> - </row> - - <row> - <entry><varname>SF</varname></entry> - - <entry><varname>/project/${PORTNAME:L}/${PORTNAME:L}/${PORTVERSION}</varname></entry> - </row> - </tbody> - </tgroup> - </table> - </sect2> - - <sect2> - <title><varname>EXTRACT_SUFX</varname></title> - - <para>Falls Sie eine Distributionsdatei haben, die ein - eigentümliches Suffix nutzt, um die Art der - Kompression anzuzeigen, dann setzen Sie - <varname>EXTRACT_SUFX</varname>.</para> - - <para>Ist die Distributionsdatei zum Beispiel im Stil von - <filename>foo.tgz</filename> anstatt des normalen - <filename>foo.tar.gz</filename> benannt, würden Sie - schreiben:</para> - - <programlisting>DISTNAME= foo -EXTRACT_SUFX= .tgz</programlisting> - - <para>Falls erforderlich, setzen die Variablen - <varname>USE_BZIP2</varname> und <varname>USE_ZIP</varname> - automatisch <varname>EXTRACT_SUFX</varname> auf - <literal>.tar.bz2</literal> oder <literal>.zip</literal>. - Falls keine der beiden gesetzt ist, dann verwendet - <varname>EXTRACT_SUFX</varname> die Vorgabe - <literal>.tar.gz</literal>.</para> - - <note> - <para>Sie müssen niemals beide Variablen - <varname>EXTRACT_SUFX</varname> und - <varname>DISTFILES</varname> setzen.</para> - </note> - </sect2> - - <sect2> - <title><varname>DISTFILES</varname></title> - - <para>Manchmal haben die zu ladenden Dateien keinerlei - Ähnlichkeit mit dem Namen des Ports. Es könnte - z.B. <filename>source.tar.gz</filename> oder ähnlich - heißen. In anderen Fällen könnte der - Quelltext in mehreren Archiven sein und alle müssen - heruntergeladen werden.</para> - - <para>Falls dies der Fall ist, setzen Sie - <varname>DISTFILES</varname> als eine durch Leerzeichen - getrennte Liste aller Dateien, die geladen werden - müssen.</para> - - <programlisting>DISTFILES= source1.tar.gz source2.tar.gz</programlisting> - - <para>Wenn nicht ausdrücklich gesetzt, verwendet - <varname>DISTFILES</varname> als Vorgabe - <literal>${DISTNAME}${EXTRACT_SUFX}</literal>.</para> - </sect2> - - <sect2> - <title><varname>EXTRACT_ONLY</varname></title> - - <para>Falls nur einige der <varname>DISTFILES</varname> - extrahiert werden müssen (z.B. eine Datei ist der - Quelltext und eine andere ist ein unkomprimiertes Dokument), - dann listen Sie die zu extrahierenden Dateien in - <varname>EXTRACT_ONLY</varname> auf.</para> - - <programlisting>DISTFILES= source.tar.gz manual.html -EXTRACT_ONLY= source.tar.gz</programlisting> - - <para>Falls <emphasis>keine</emphasis> der - <varname>DISTFILES</varname> unkomprimiert sein sollte, - dann setzen Sie <varname>EXTRACT_ONLY</varname> auf einen - leeren String.</para> - - <programlisting>EXTRACT_ONLY=</programlisting> - </sect2> - - <sect2 xml:id="porting-patchfiles"> - <title><varname>PATCHFILES</varname></title> - - <para>Falls Ihr Port zusätzliche Patches benötigt, - welche per FTP oder HTTP verfügbar sind, dann setzen - Sie <varname>PATCHFILES</varname> auf den Namen der Dateien - und <varname>PATCH_SITES</varname> auf die URL des - Verzeichnisses, das diese Patches enthält (das Format - ist das gleiche wie <varname>MASTER_SITES</varname>).</para> - - <para>Falls ein Patch wegen einiger zusätzlicher - Pfadnamen nicht relativ zum Anfang des Quelltextbaumes - (d.h., <varname>WRKSRC</varname>) liegt, dann setzen Sie - bitte <varname>PATCH_DIST_STRIP</varname> entsprechend. - Wenn z.B. alle Pfadnamen in diesem Patch ein - zusätzliches <literal>foozolix-1.0/</literal> vor ihren - Dateinamen aufweisen, dann setzen Sie bitte - <literal>PATCH_DIST_STRIP=-p1</literal>.</para> - - <para>Kümmern Sie sich nicht darum, ob die Patches - komprimiert sind. Sie werden automatisch dekomprimiert, - wenn die Dateinamen auf <filename>.gz</filename> oder - <filename>.Z</filename> enden.</para> - - <para>Falls der Patch zusammen mit anderen Dateien in einem - gezippten Tarball verteilt wird (z.B. mit Dokumentation), - dann können Sie nicht <varname>PATCHFILES</varname> - verwenden. In diesem Fall fügen Sie den Namen und den - Ort dieses Tarballs zu <varname>DISTFILES</varname> und - <varname>MASTER_SITES</varname>. Benutzen Sie dann die - <varname>EXTRA_PATCHES</varname>-Variable, um auf diese - Dateien zu zeigen und <filename>bsd.port.mk</filename> - wird automatisch diese Dateien nutzen. Kopieren Sie - <emphasis>niemals</emphasis> Patch-Dateien in das - <varname>PATCHDIR</varname>-Verzeichnis, weil es - möglicherweise nicht beschreibbar ist.</para> - - <note> - <para>Der Tarball wird zusammen mit dem anderen Quelltext - extrahiert werden. Eine ausdrückliche Dekomprimierung - eines mit gzip oder compress erzeugten Tarball ist nicht - notwendig. Sollten Sie dies dennoch vorgeben, so beachten - Sie bitte peinlich genau, dass Sie nichts - überschreiben, was bereits im Verzeichnis vorhanden - ist. Vergessen Sie auch nicht den kopierten Patch im - Target von <buildtarget>pre-clean</buildtarget> zu - entfernen.</para> - </note> - </sect2> - - <sect2 xml:id="porting-master-sites-n"> - <title>Verschiedene Distributionsdateien oder Patches von - verschiedenen Seiten und Verzeichnissen - (<literal>MASTER_SITES:n</literal>)</title> - - <para>(Betrachten Sie es als in irgendeiner Form - <quote>fortgeschrittenes Thema</quote>. - Neulinge sollten möglicherweise diesen Abschnitt - beim ersten Lesen überspringen).</para> - - <para>Dieser Abschnitt stellt Informationen über - die Mechanismen zum Herunterladen von Dateien zur - Verfügung und behandelt die Variablen - <literal>MASTER_SITES:n</literal> und - <literal>MASTER_SITES_NN</literal>. - Wir beziehen uns im weiteren Text auf diese Variablen - als <literal>MASTER_SITES:n</literal>.</para> - - <para>Etwas Hintergrundinformation zu Beginn: OpenBSD - verfügt über eine sehr elegante Option - innerhalb der Variablen <varname>DISTFILES</varname> und - <varname>PATCHFILES</varname>. Sowohl Dateien als auch - Patches können mit angehängten - <literal>:n</literal>-Bezeichnern versehen werden wobei - <literal>n</literal> in beiden Fällen - <literal>[0-9]</literal> sein kann und eine - Gruppenzugehörigkeit anzeigt. Ein Beispiel - hierfür ist:</para> - - <programlisting>DISTFILES= alpha:0 beta:1</programlisting> - - <para>In OpenBSD wird die Datei <filename>alpha</filename> - mit der Variable <varname>MASTER_SITES0</varname> - verknüpft anstatt dem in FreeBSD gebräuchlichen - <varname>MASTER_SITES</varname> und - <filename>beta</filename> mit - <varname>MASTER_SITES1</varname>.</para> - - <para>Das ist eine sehr interessante Möglichkeit, - die endlose Suche nach der richtigen Download-Seite zu - verkürzen.</para> - - <para>Stellen Sie sich zwei Dateien in - <varname>DISTFILES</varname> und 20 Webseiten in der - Variable <varname>MASTER_SITES</varname> vor. Alle Seiten - sind erschreckend langsam, <filename>beta</filename> - findet sich auf allen Seiten in - <varname>MASTER_SITES</varname> und - <filename>alpha</filename> kann nur auf der zwanzigsten - Seite gefunden werden. Wäre es nicht reine - Verschwendung, wenn der Maintainer alle Seiten zuvor - überprüfen müsste? Kein guter - Start für das wundervolle Wochenende!</para> - - <para>Übertragen Sie diesen Umstand auf noch mehr - <varname>DISTFILES</varname> und mehr - <varname>MASTER_SITES</varname>. Ganz sicher würde - unser <quote>distfiles survey master</quote> die - Erleichterung sehr zu schätzen wissen, die eine - solche Verringerung der Netzwerkbelastung bringen - würde.</para> - - <para>In den nächsten Abschnitten sehen Sie die - Implementierung dieser Idee durch FreeBSD. Dabei wurde das - Konzept von OpenBSD ein wenig verbessert.</para> - - <sect3> - <title>Prinzipielle Information</title> - - <para>Dieser Abschnitt informiert Sie, wie Sie schnell - ein fein granuliertes Herunterladen von vielen Dateien - und Fehlerbereinigungen von verschiedenen Webseiten und - Unterverzeichnissen bewerkstelligen. Wir beschreiben - hier den Fall der vereinfachten Nutzung von - <literal>MASTER_SITES:n</literal>. Das ist für die - meisten Szenarien ausreichend. Falls Sie weitere - Informationen benötigen, sollten Sie den - nächsten Abschnitt lesen.</para> - - <para>Einige Programme bestehen aus mehreren Dateien, - welche von verschiedenen Webseiten heruntergeladen werden - müssen. Zum Beispiel besteht - <application>Ghostscript</application> aus dem Kern des - Programms und einer großen Zahl von Treiberdateien, - die vom Drucker des Benutzers abhängen. Einige dieser - Treiberdateien werden mit der Kernapplikation mitgeliefert - aber viele müssen von verschiedenen Webseiten - heruntergeladen werden.</para> - - <para>Um das zu unterstützen, muss jeder Eintrag in - <varname>DISTFILES</varname> mit einem Komma und - einem <quote>tag name</quote> abgeschlossen werden. - Jeder in <varname>MASTER_SITES</varname> aufgeführte - Webseite folgt ein Komma und eine Marke (tag), die - anzeigt, welche Datei von dieser Webseite heruntergeladen - werden kann.</para> - - <para>Stellen Sie sich bitte eine Applikation vor, deren - Quelltext in zwei Teile aufgeteilt ist, - <filename>source1.tar.gz</filename> - und <filename>source2.tar.gz</filename>, welche von zwei - verschiedenen Webseiten heruntergeladen werden - müssen. Das <filename>Makefile</filename> des Port - würde Zeilen enthalten wie in - <xref linkend="ports-master-sites-n-example-simple-use-one-file-per-site"/>.</para> - - <example xml:id="ports-master-sites-n-example-simple-use-one-file-per-site"> - <title>Vereinfachtes Beispiel für den Gebrauch von - <literal>MASTER_SITES:n</literal> mit einer Datei pro - Webseite</title> - - <programlisting>MASTER_SITES= ftp://ftp.example1.com/:source1 \ - ftp://ftp.example2.com/:source2 -DISTFILES= source1.tar.gz:source1 \ - source2.tar.gz:source2</programlisting> - </example> - - <para>Verschiedene Dateien können die gleiche Marke - aufweisen. Ausgehend vom vorherigen Beispiel nehmen wir - an, dass es noch eine dritte Datei gibt - (<filename>source3.tar.gz</filename>), welche von - <systemitem>ftp.example2.com</systemitem> heruntergeladen werden - soll. Das <filename>Makefile</filename> würde dann - aussehen wie <xref linkend="ports-master-sites-n-example-simple-use-more-than-one-file-per-site"/>.</para> - - <example xml:id="ports-master-sites-n-example-simple-use-more-than-one-file-per-site"> - <title>Vereinfachtes Beispiel für den Gebrauch von - <literal>MASTER_SITES:n</literal> mit mehr als einer - Datei pro Webseite</title> - - <programlisting>MASTER_SITES= ftp://ftp.example1.com/:source1 \ - ftp://ftp.example2.com/:source2 -DISTFILES= source1.tar.gz:source1 \ - source2.tar.gz:source2 \ - source3.tar.gz:source2</programlisting> - </example> - </sect3> - - <sect3> - <title>Ausführliche Information</title> - - <para>In Ordnung, das vorherige Beispiel reicht nicht - für Ihre Bedürfnisse? In diesem Abschnitt - werden wir im Detail erklären, wie der fein - granulierte Mechanismus zum Herunterladen - (<literal>MASTER_SITES:n</literal>) funktioniert - und wie Sie Ihre Ports modifizieren, um ihn zu - nutzen.</para> - - <orderedlist> - <listitem> - <para>Elemente können nachstehend bezeichnet werden - mit <literal>:n</literal> - wobei <replaceable>n</replaceable> in diesem Falle - <literal>[^:,]+</literal> ist. Das heißt - <replaceable>n</replaceable> könnte theoretisch - jede alphanumerische Zeichenkette sein, aber wir - beschränken sie auf - <literal>[a-zA-Z_][0-9a-zA-Z_]+</literal> für - diesen Moment.</para> - - <para>Zudem ist die Zeichenkette case sensitive; d.h. - <literal>n</literal> unterscheidet sich von - <literal>N</literal>.</para> - - <para>Allerdings dürfen die folgenden Wörter - nicht gebraucht werden, da sie spezielle Bedeutungen - haben: <literal>default</literal>, - <literal>all</literal> und <literal>ALL</literal> - (diese Wörter werden intern genutzt in Punkt - <xref linkend="porting-master-sites-n-what-changes-in-port-targets"/>). - Ausserdem ist <literal>DEFAULT</literal> ein - reserviertes Wort (beachten Sie <xref linkend="porting-master-sites-n-DEFAULT-group"/>).</para> - </listitem> - - <listitem> - <para>Elemente mit angehängtem - <literal>:n</literal> gehören zur Gruppe - <literal>n</literal>, <literal>:m</literal> - gehört zur Gruppe <literal>m</literal> - und so weiter.</para> - </listitem> - - <listitem xml:id="porting-master-sites-n-DEFAULT-group"> - <para>Elemente ohne Anhängsel sind gruppenlos, - d.h. sie gehören alle zu der speziellen Gruppe - <literal>DEFAULT</literal>. Falls sie an irgendeinem - Element <literal>DEFAULT</literal> hängen, ist - dies überflüssig, es sei denn Sie wollen, - dass ein Element sowohl zu <literal>DEFAULT</literal> - als auch anderen Gruppen gleichzeitig gehört - (beachten Sie <xref linkend="porting-master-sites-n-comma-operator"/>).</para> - - <para>Die folgenden Beispiele sind gleichwertig, aber - das erste Beispiel ist vorzuziehen:</para> - - <programlisting>MASTER_SITES= alpha - -MASTER_SITES= alpha:DEFAULT</programlisting> - </listitem> - - <listitem> - <para>Gruppen sind nicht ausschliessend, d.h. ein - Element kann mehreren Gruppen gleichzeitig - angehören und eine Gruppe wiederum kann entweder - mehrere Elemente oder überhaupt keine aufweisen. - Wiederholte Elemente sind schlicht nur wiederholte - Elemente.</para> - </listitem> - - <listitem xml:id="porting-master-sites-n-comma-operator"> - <para>Wenn Sie wollen, dass ein Element gleichzeitig zu - mehreren Gruppen gehört, dann können Sie - diese durch ein Komma (<literal>,</literal>) - trennen.</para> - - <para>Anstatt jedes Mal ein anderes Anhängsel zu - verwenden und Wiederholungen aufzuführen, - können Sie mehrere Gruppen auf einmal in einem - einzigen Anhängsel bestimmen. Zum Beispiel - markiert <literal>:m,n,o</literal> ein Element, - welches zu den Gruppen <literal>m</literal>, - <literal>n</literal> und <literal>o</literal> - gehört.</para> - - <para>Alle folgenden Beispiele sind gleichwertig, - aber das erste Beispiel ist vorzuziehen:</para> - - <programlisting>MASTER_SITES= alpha alpha:SOME_SITE - -MASTER_SITES= alpha:DEFAULT alpha:SOME_SITE - -MASTER_SITES= alpha:SOME_SITE,DEFAULT - -MASTER_SITES= alpha:DEFAULT,SOME_SITE</programlisting> - </listitem> - - <listitem> - <para>Alle Webseiten in einer Gruppe werden - gemäß <varname>MASTER_SORT_AWK</varname> - sortiert. Alle Gruppen innerhalb von - <varname>MASTER_SITES</varname> und - <varname>PATCH_SITES</varname> werden genauso - sortiert.</para> - </listitem> - - <listitem xml:id="porting-master-sites-n-group-semantics"> - <para>Gruppensemantik kann benutzt werden in den - folgenden Variablen: <varname>MASTER_SITES</varname>, - <varname>PATCH_SITES</varname>, - <varname>MASTER_SITE_SUBDIR</varname>, - <varname>PATCH_SITE_SUBDIR</varname>, - <varname>DISTFILES</varname> und - <varname>PATCHFILES</varname> entsprechend der - folgenden Syntax:</para> - - <orderedlist> - <listitem> - <para>Elemente mit <varname>MASTER_SITES</varname>, - <varname>PATCH_SITES</varname>, - <varname>MASTER_SITE_SUBDIR</varname> und - <varname>PATCH_SITE_SUBDIR</varname> müssen - mit einem Schrägstrich beendet werden ( - <literal>/</literal>). Falls Elemente zu - irgendwelchen Gruppen gehören, muss - <literal>:n</literal> - direkt nach dem Trenner <literal>/</literal> - stehen. Der - <literal>MASTER_SITES:n</literal>-Mechanismus - verlässt sich auf das Vorhandensein des - Trennzeichens <literal>/</literal>, um verwirrende - Elemente zu vermeiden in denen - <literal>:n</literal> ein zulässiger - Bestandteil des Elementes ist und das Auftreten - von <literal>:n</literal> die Gruppe - <literal>n</literal> anzeigt. Aus - Kompatibilitätsgründen (da der - <literal>/</literal>-Trenner sowohl in - <varname>MASTER_SITE_SUBDIR</varname> als auch - <varname>PATCH_SITE_SUBDIR</varname>-Elementen - nicht erforderlich ist) wird, falls das auf das - Anhängsel folgende nächste Zeichen kein - <literal>/</literal> ist, auch - <literal>:n</literal> als gültiger Teil des - Elementes behandelt anstatt als Gruppenzusatz, - selbst wenn ein Element ein angehängtes - <literal>:n</literal> aufweist. Beachten Sie - sowohl <xref linkend="ports-master-sites-n-example-detailed-use-master-site-subdir"/> - als auch <xref linkend="ports-master-sites-n-example-detailed-use-complete-example-master-sites"/>.</para> - - <example xml:id="ports-master-sites-n-example-detailed-use-master-site-subdir"> - <title>Ausführliches Beispiel von - <literal>MASTER_SITES:n</literal> in - <varname>MASTER_SITE_SUBDIR</varname></title> - - <programlisting>MASTER_SITE_SUBDIR= old:n new/:NEW</programlisting> - - <itemizedlist> - <listitem> - <para>Verzeichnisse innerhalb der Gruppe - <literal>DEFAULT</literal> -> - old:n</para> - </listitem> - - <listitem> - <para>Verzeichnisse innerhalb der Gruppe - <literal>NEW</literal> -> new</para> - </listitem> - </itemizedlist> - </example> - - <example xml:id="ports-master-sites-n-example-detailed-use-complete-example-master-sites"> - <title>Ausführliches Beispiel von - <literal>MASTER_SITES:n</literal> mit - Komma-Operator, mehreren Dateien, mehreren - Webseiten und mehreren - Unterverzeichnissen</title> - - <programlisting>MASTER_SITES= http://site1/%SUBDIR%/ http://site2/:DEFAULT \ - http://site3/:group3 http://site4/:group4 \ - http://site5/:group5 http://site6/:group6 \ - http://site7/:DEFAULT,group6 \ - http://site8/%SUBDIR%/:group6,group7 \ - http://site9/:group8 -DISTFILES= file1 file2:DEFAULT file3:group3 \ - file4:group4,group5,group6 file5:grouping \ - file6:group7 -MASTER_SITE_SUBDIR= directory-trial:1 directory-n/:groupn \ - directory-one/:group6,DEFAULT \ - directory</programlisting> - - <para>Das vorstehende Beispiel führt zu - einem fein granulierten Herunterladen. - Die Webseiten werden in der exakten Reihenfolge - ihrer Nutzung aufgelistet.</para> - - <itemizedlist> - <listitem> - <para><filename>file1</filename> wird - heruntergeladen von</para> - - <itemizedlist> - <listitem> - <para><varname>MASTER_SITE_OVERRIDE</varname></para> - </listitem> - - <listitem> - <para>http://site1/directory-trial:1/</para> - </listitem> - - <listitem> - <para>http://site1/directory-one/</para> - </listitem> - - <listitem> - <para>http://site1/directory/</para> - </listitem> - - <listitem> - <para>http://site2/</para> - </listitem> - - <listitem> - <para>http://site7/</para> - </listitem> - - <listitem> - <para><varname>MASTER_SITE_BACKUP</varname></para> - </listitem> - </itemizedlist> - </listitem> - - <listitem> - <para><filename>file2</filename> wird genauso - heruntergeladen wie - <filename>file1</filename>, da sie zur - gleichen Gruppe gehören</para> - - <itemizedlist> - <listitem> - <para><varname>MASTER_SITE_OVERRIDE</varname></para> - </listitem> - - <listitem> - <para>http://site1/directory-trial:1/</para> - </listitem> - - <listitem> - <para>http://site1/directory-one/</para> - </listitem> - - <listitem> - <para>http://site1/directory/</para> - </listitem> - - <listitem> - <para>http://site2/</para> - </listitem> - - <listitem> - <para>http://site7/</para> - </listitem> - - <listitem> - <para><varname>MASTER_SITE_BACKUP</varname></para> - </listitem> - </itemizedlist> - </listitem> - - <listitem> - <para><filename>file3</filename> wird - heruntergeladen von</para> - - <itemizedlist> - <listitem> - <para><varname>MASTER_SITE_OVERRIDE</varname></para> - </listitem> - - <listitem> - <para>http://site3/</para> - </listitem> - - <listitem> - <para><varname>MASTER_SITE_BACKUP</varname></para> - </listitem> - </itemizedlist> - </listitem> - - <listitem> - <para><filename>file4</filename> wird - heruntergeladen von</para> - - <itemizedlist> - <listitem> - <para><varname>MASTER_SITE_OVERRIDE</varname></para> - </listitem> - - <listitem> - <para>http://site4/</para> - </listitem> - - <listitem> - <para>http://site5/</para> - </listitem> - - <listitem> - <para>http://site6/</para> - </listitem> - - <listitem> - <para>http://site7/</para> - </listitem> - - <listitem> - <para>http://site8/directory-one/</para> - </listitem> - - <listitem> - <para><varname>MASTER_SITE_BACKUP</varname></para> - </listitem> - </itemizedlist> - </listitem> - - <listitem> - <para><filename>file5</filename> wird - heruntergeladen von</para> - - <itemizedlist> - <listitem> - <para><varname>MASTER_SITE_OVERRIDE</varname></para> - </listitem> - - <listitem> - <para><varname>MASTER_SITE_BACKUP</varname></para> - </listitem> - </itemizedlist> - </listitem> - - <listitem> - <para><filename>file6</filename> wird - heruntergeladen von</para> - - <itemizedlist> - <listitem> - <para><varname>MASTER_SITE_OVERRIDE</varname></para> - </listitem> - - <listitem> - <para>http://site8/</para> - </listitem> - - <listitem> - <para><varname>MASTER_SITE_BACKUP</varname></para> - </listitem> - </itemizedlist> - </listitem> - </itemizedlist> - </example> - </listitem> - </orderedlist> - </listitem> - - <listitem> - <para>Wie gruppiere ich eine der speziellen Variablen - aus <filename>bsd.sites.mk</filename>, d.h. - <varname>MASTER_SITE_SOURCEFORGE</varname>?</para> - - <para>Lesen Sie <xref linkend="ports-master-sites-n-example-detailed-use-master-site-sourceforge"/>.</para> - - <example xml:id="ports-master-sites-n-example-detailed-use-master-site-sourceforge"> - <title>Ausführliches Beispiel von - <literal>MASTER_SITES:n</literal> mit - <varname>MASTER_SITE_SOURCEFORGE</varname></title> - - <programlisting>MASTER_SITES= http://site1/ ${MASTER_SITE_SOURCEFORGE:S/$/:sourceforge,TEST/} -DISTFILES= something.tar.gz:sourceforge</programlisting> - </example> - - <para><filename>something.tar.gz</filename> wird von - allen Webseiten innerhalb von - <varname>MASTER_SITE_SOURCEFORGE</varname> - heruntergeladen.</para> - </listitem> - - <listitem> - <para>Wie nutze ich dies mit - <varname>PATCH*</varname>-Variablen.</para> - - <para>In allen Beispielen wurden - <varname>MASTER*</varname>-Variablen genutzt, - aber sie funktionieren exakt genauso mit - <varname>PATCH*</varname>-Variablen, wie Sie an - <xref linkend="ports-master-sites-n-example-detailed-use-patch-sites"/>. - sehen können.</para> - - <example xml:id="ports-master-sites-n-example-detailed-use-patch-sites"> - <title>Vereinfachte Nutzung von - <literal>MASTER_SITES:n</literal> mit - <varname>PATCH_SITES</varname>.</title> - - <programlisting>PATCH_SITES= http://site1/ http://site2/:test -PATCHFILES= patch1:test</programlisting> - </example> - </listitem> - </orderedlist> - </sect3> - - <sect3> - <title>Was ändert sich für die Ports? - Was ändert sich nicht?</title> - - <orderedlist numeration="lowerroman"> - <listitem> - <para>Alle bestehenden Ports bleiben gleich. Der Code - für <literal>MASTER_SITES:n</literal> wird nur - aktiviert, falls es Elemente mit angehängtem - <literal>:n</literal> - entsprechend den zuvor erwähnten Syntax-Regeln - wie in <xref linkend="porting-master-sites-n-group-semantics"/> - gezeigt gibt.</para> - </listitem> - - <listitem xml:id="porting-master-sites-n-what-changes-in-port-targets"> - <para>Das Target des Port bleibt gleich: - <buildtarget>checksum</buildtarget>, - <buildtarget>makesum</buildtarget>, - <buildtarget>patch</buildtarget>, - <buildtarget>configure</buildtarget>, - <buildtarget>build</buildtarget> etc. - Mit der offensichtlichen Ausnahme von - <buildtarget>do-fetch</buildtarget>, - <buildtarget>fetch-list</buildtarget>, - <buildtarget>master-sites</buildtarget> - und <buildtarget>patch-sites</buildtarget>.</para> - - <itemizedlist> - <listitem> - <para><buildtarget>do-fetch</buildtarget>: nutzt die - neue Gruppierung <varname>DISTFILES</varname> und - <varname>PATCHFILES</varname> mit ihren darauf - zutreffenden Gruppenelementen in - <varname>MASTER_SITES</varname> und - <varname>PATCH_SITES</varname> welche zutreffende - Gruppenelemente sowohl in - <varname>MASTER_SITE_SUBDIR</varname> als auch - <varname>PATCH_SITE_SUBDIR</varname> aufweisen. - Sehen Sie hierzu <xref linkend="ports-master-sites-n-example-detailed-use-complete-example-master-sites"/>.</para> - </listitem> - - <listitem> - <para><buildtarget>fetch-list</buildtarget>: arbeitet - wie das alte <buildtarget>fetch-list</buildtarget> - mit der Ausnahme, dass es nur wie - <buildtarget>do-fetch</buildtarget> - gruppiert.</para> - </listitem> - - <listitem> - <para><buildtarget>master-sites</buildtarget> - und <buildtarget>patch-sites</buildtarget>: - (inkompatibel zu älteren Versionen) geben - nur die Elemente der Gruppe - <literal>DEFAULT</literal> zurück. - Beziehungsweise sie führen genau genommen - die Targets von - <buildtarget>master-sites-default</buildtarget> und - <buildtarget>patch-sites-default</buildtarget> - aus.</para> - - <para>Weiterhin ist der Gebrauch des Target entweder - von <buildtarget>master-sites-all</buildtarget> oder - <buildtarget>patch-sites-all</buildtarget> der - direkten Überprüfung von - <buildtarget>MASTER_SITES</buildtarget> oder - <buildtarget>PATCH_SITES</buildtarget> vorzuziehen. - Zudem ist nicht garantiert, dass das direkte - Überprüfen in zukünftigen Versionen - funktionieren wird. Sehen Sie <xref linkend="porting-master-sites-n-new-port-targets-master-sites-all"/> - für weitere Informationen zu diesen neuen - Port-Targets.</para> - </listitem> - </itemizedlist> - </listitem> - - <listitem> - <para>Neue Port-Targets</para> - - <orderedlist> - <listitem> - <para>Es gibt - <buildtarget>master-sites-<replaceable>n</replaceable></buildtarget> - und - <buildtarget>patch-sites-<replaceable>n</replaceable></buildtarget>-Targets, - welche die Elemente der jeweiligen Gruppe - <replaceable>n</replaceable> innerhalb von - <varname>MASTER_SITES</varname> und - <varname>PATCH_SITES</varname> auflisten. - Beispielweise werden sowohl - <buildtarget>master-sites-DEFAULT</buildtarget> als - auch <buildtarget>patch-sites-DEFAULT</buildtarget> - die Elemente der Gruppe - <literal>DEFAULT</literal>, - <buildtarget>master-sites-test</buildtarget> und - <buildtarget>patch-sites-test</buildtarget> der - Gruppe <literal>test</literal> usw. - zurückgeben.</para> - </listitem> - - <listitem xml:id="porting-master-sites-n-new-port-targets-master-sites-all"> - <para>Es gibt das neue Target - <buildtarget>master-sites-all</buildtarget> und - <buildtarget>patch-sites-all</buildtarget>, - welche die Arbeit der alten Targets - <buildtarget>master-sites</buildtarget> und - <buildtarget>patch-sites</buildtarget> - übernehmen. Sie geben die Elemente aller - Gruppen zurück,als würden sie zur - gleichen Gruppe gehören - mit dem Vorbehalt, - dass sie so viele - <varname>MASTER_SITE_BACKUP</varname> und - <varname>MASTER_SITE_OVERRIDE</varname> auflisten - wie Gruppen mittels - <varname>DISTFILES</varname> oder - <varname>PATCHFILES</varname> definiert sind. - Das gleiche gilt entsprechend für - <buildtarget>master-sites-all</buildtarget> und - <buildtarget>patch-sites-all</buildtarget>.</para> - </listitem> - </orderedlist> - </listitem> - </orderedlist> - </sect3> - </sect2> - - <sect2> - <title><varname>DIST_SUBDIR</varname></title> - - <para>Verhindern Sie, dass Ihr Port das Verzeichnis - <filename>/usr/ports/distfiles</filename> in Unordnung - bringt. Falls Ihr Port eine ganze Reihe von Dateien - herunterladen muss oder eine Datei enthält, - die einen Namen hat, der möglicherweise mit - anderen Ports in Konflikt stehen könnte - (d.h.<filename>Makefile</filename>), dann setzen Sie die - Variable <varname>DIST_SUBDIR</varname> auf den Namen des - Ports (<literal>${PORTNAME}</literal> oder - <literal>${PKGNAMEPREFIX}${PORTNAME}</literal> - sollte hervorragend funktionieren). Dies wird - <varname>DISTDIR</varname> von der Vorgabe - <filename>/usr/ports/distfiles</filename> auf - <filename>/usr/ports/distfiles/DIST_SUBDIR - </filename> ändern und stellt tatsächlich alle - für Ihren Port benötigten Dateien in dieses - Unterverzeichnis.</para> - - <para>Es wird zusätzlich nach dem Unterverzeichnis mit - dem gleichen Namen auf der Sicherung der Hauptseite auf - <filename>ftp.FreeBSD.org</filename> suchen (das - ausdrückliche Setzen von <varname>DISTDIR</varname> - in Ihrem <varname>Makefile</varname> wird dies nicht - gewährleisten, also nutzen Sie bitte - <varname>DIST_SUBDIR</varname>).</para> - - <note> - <para>Dies hat keine Auswirkungen auf die Variable - <varname>MASTER_SITES</varname>, die Sie in Ihrem - <filename>Makefile</filename> definieren.</para> - </note> - </sect2> - - <sect2> - <title><varname>ALWAYS_KEEP_DISTFILES</varname></title> - - <para>Falls Ihr Port binäre Distfiles benutzt und eine - Lizenz aufweist, die verlangt, dass das der Quelltext in - Form binärer Pakete verteilt werden muss, z.B. GPL, - dann wird <varname>ALWAYS_KEEP_DISTFILES</varname> den - &os; Build Cluster anweisen eine Kopie der Dateien in - <varname>DISTFILES</varname> vorzuhalten. Nutzer dieser - Ports benötigen generell diese Dateien nicht, daher - ist es ein gutes Konzept, nur dann die Distfiles zu - <varname>DISTFILES</varname> hinzuzufügen, wenn - <varname>PACKAGE_BUILDING</varname> definiert ist.</para> - - <example xml:id="ports-master-sites-n-example-always-keep-distfiles"> - <title>Nutzung von - <varname>ALWAYS_KEEP_DISTFILES</varname>.</title> - - <programlisting>.if defined(PACKAGE_BUILDING) -DISTFILES+= <replaceable>foo.tar.gz</replaceable> -ALWAYS_KEEP_DISTFILES= yes -.endif</programlisting> - </example> - - <para>Wenn Sie zusätzliche Dateien zu - <varname>DISTFILES</varname> hinzufügen, - dann beachten Sie bitte, dass Sie diese auch in - <filename>distinfo</filename> aufführen. - Zudem werden die zusätzlichen Dateien normalerweise - ebenso in <varname>WRKDIR</varname> extrahiert, - was für einige Ports zu unbeabsichtigten - Seiteneffekten führen mag und spezielle - Behandlung erfordert.</para> - </sect2> - </sect1> - - <sect1 xml:id="makefile-maintainer"> - <title><varname>MAINTAINER</varname></title> - - <para>Fügen Sie hier Ihre E-Mailadresse ein. Bitte. - <!-- smiley --><emphasis>:-)</emphasis></para> - - <para>Beachten Sie bitte, dass nur eine einzelne E-Mailadresse - ohne Kommentar in der Variable <varname>MAINTAINER</varname> - zulässig ist. Das Format sollte - <literal>user@hostname.domain</literal> sein. - Bitte fügen Sie keinen beschreibenden Text wie z.B. Ihren - wirklichen Namen ein, dies verwirrt lediglich - <filename>bsd.port.mk</filename>.</para> - - <para>Der Maintainer ist dafür verantwortlich, dass der - Port aktuell gehalten wird und er sorgt dafür, dass der - Port korrekt arbeitet. Für eine detaillierte Beschreibung - der Verantwortlichkeiten eines Maintainers beachten Sie bitte - den Abschnitt <link xlink:href="&url.articles.contributing-ports;/maintain-port.html"> - Die Herausforderung für einen - Port-Maintainer</link>.</para> - - <para>Änderungen am Port werden dem Maintainer zur - Begutachtung und Zustimmung vorgelegt, bevor sie committed - werden. Falls der Maintainer einem Aktualisierungs-Wunsch - nicht binnen 2 Wochen (ausgenommen wichtige öffentliche - Feiertage) zustimmt, dann wird dies als Maintainer-Timeout - betrachtet und eine Aktualisierung kann ohne - ausdrückliche Zustimmung des Maintainers erfolgen. - Falls der Maintainer nicht binnen 3 Monaten zustimmt, wird er - als abwesend ohne Grund betrachtet und kann als Maintainer - des fraglichen Ports durch eine andere Person ersetzt werden. - Ausgenommen davon ist alles, was durch das &a.portmgr; oder - das &a.security-officer; betreut wird. Es dürfen niemals - committs ohne vorherige Zustimmung an solchen Ports - vorgenommen werden!</para> - - <para>Wir behalten uns das Recht vor, die Einreichungen eines - Maintainers ohne ausdrückliche Zustimmung zu ändern, - falls wir der Auffassung sind, dass dadurch die Einhaltung von - Richtlinien und stilistischen Vorgaben für die - Ports-Sammlung besser erfüllt wird. Zudem können - größere Änderungen an der Infrastruktur der - Ports zu Änderungen an einem bestimmten Port ohne - Zustimmung des Maintainers führen. - Diese Änderungen beeinflussen niemals die - Funktionalität eines Ports.</para> - - <para>Das &a.portmgr; behält sich das Recht vor, die - Maintainerschaft jedem aus irgendeinem Grund zu entziehen oder - ausser Kraft zu setzen, und das Security Officer Team - &a.security-officer; behält sich das Recht vor, jede - Maintainerschaft aus Sicherheitsgründen aufzuheben oder - ausser Kraft zu setzen.</para> - </sect1> - - <sect1 xml:id="makefile-comment"> - <title><varname>COMMENT</varname></title> - - <para>Dies ist eine einzeilige Beschreibung des Ports. - <emphasis>Bitte</emphasis> fügen Sie nicht den Paketnamen - (oder die Version der Software) in den Kommentar ein. - Der Kommentar soll mit einem Großbuchstaben beginnen - und ohne Punkt enden. Hier ist ein Beispiel:</para> - - <programlisting>COMMENT= A cat chasing a mouse all over the screen</programlisting> - - <para>Die COMMENT-Variable soll unmittelbar nach der - MAINTAINER-Variable im <filename>Makefile</filename> - stehen.</para> - - <para>Bitte versuchen Sie die COMMENT-Zeile auf weniger als 70 - Zeichen zu begrenzen, da &man.pkg.info.1; diese zur Anzeige - einer kurzen, einzeiligen Zusammenfassung des Ports - verwendet.</para> - </sect1> - - <sect1 xml:id="makefile-depend"> - <title>Abhängigkeiten (dependencies)</title> - - <para>Viele Ports hängen von anderen Ports ab. - Dies ist ein sehr praktisches und nettes Feature der meisten - Unix-ähnlichen Betriebssysteme, &os; nicht - ausgeschlossen. Es erlaubt, dass häufig vorkommende - Abhängigkeiten nicht mit jedem Port oder Paket zusammen - ausgeliefert werden müssen, da viele Ports diese - gemeinsam benutzen. - Es gibt sieben Variablen, die benutzt werden können, - um sicherzustellen, dass alle benötigten Teile auf dem - Rechner des Nutzers sind. Zusätzlich gibt es einige - vordefinierte Variablen für Abhängigkeiten in - häufigen Fällen und einige, welche das Verhalten - der Abhängigkeiten bestimmen.</para> - - <sect2> - <title><varname>LIB_DEPENDS</varname></title> - - <para>Diese Variable spezifiziert die Shared-Libraries, - von denen der Port abhängt. Es ist eine Liste von - <replaceable>lib</replaceable>:<replaceable>dir</replaceable><optional>:target</optional>-Tupeln - wobei <replaceable>lib</replaceable> den Name der gemeinsam - genutzten Bibliothek, <replaceable>dir</replaceable> das - Verzeichnis, in welchem sie zu finden ist, falls nicht - verfügbar, und <replaceable>target</replaceable> das - Target in diesem Verzeichnis angeben. Zum Beispiel wird - - <programlisting>LIB_DEPENDS= jpeg.9:${PORTSDIR}/graphics/jpeg</programlisting> - - auf eine jpeg-Bibliothek mit der Hauptversionsnummer 9 - prüfen, in das - <filename>graphics/jpeg</filename>-Unterverzeichnis Ihrer - Ports-Sammlung wechseln, es bauen und installieren, falls - es nicht gefunden wird. - Der <replaceable>target</replaceable>-Teil kann weggelassen - werden, falls er identisch mit - <varname>DEPENDS_TARGET</varname> ist (Vorgabe hierfür - ist <literal>install</literal>).</para> - - <note> - <para>Der <replaceable>lib</replaceable>-Teil ist ein - regulärer Ausdruck, welcher die Ausgabe von - <command>ldconfig -r</command> ausgewertet. Werte wie - <literal>intl.[5-7]</literal> und <literal>intl</literal> - sind zulässig. Das erste Muster, - <literal>intl.[5-7]</literal>, stimmt überein mit: - <literal>intl.5</literal>, <literal>intl.6</literal> oder - <literal>intl.7</literal>. Das zweite Muster, - <literal>intl</literal>, stimmt überein mit jeder - Version der <literal>intl</literal>-Bibliothek.</para> - </note> - - <para>Die Abhängigkeit wird zwei Mal überprüft, - einmal innerhalb des <buildtarget>extract</buildtarget>-Target - und dann innerhalb des - <buildtarget>install</buildtarget>-Target. - Zudem wird der Name der Abhängigkeit in das Paket - eingefügt, damit &man.pkg.add.1; es automatisch - installiert, falls es nicht auf dem Rechner des Nutzers - ist.</para> - </sect2> - - <sect2> - <title><varname>RUN_DEPENDS</varname></title> - - <para>Diese Variable legt Binärdateien oder Dateien, - von denen der Port abhängt, für die Laufzeit fest. - Es ist eine Liste von - <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional>:target</optional>-Tupeln, - wobei <replaceable>path</replaceable> der Name der - Binärdatei oder Datei, <replaceable>dir</replaceable> - das Verzeichnis, in welchem sie gefunden werden kann, falls - nicht vorhanden, und <replaceable>target</replaceable> das - Target in diesem Verzeichnis angeben. - Falls <replaceable>path</replaceable> mit einem Slash - (<literal>/</literal>) beginnt, wird es als Datei behandelt - und deren Vorhandensein wird mit <command>test -e</command>; - überprüft. Andernfalls wird angenommen, dass es - eine Binärdatei ist und <command>which -s</command> - wird benutzt, um zu überprüfen, ob das Programm im - Pfad vorhanden ist.</para> - - <para>Zum Beispiel wird</para> - - <programlisting>RUN_DEPENDS= ${LOCALBASE}/etc/innd:${PORTSDIR}/news/inn \ - xmlcatmgr:${PORTSDIR}/textproc/xmlcatmgr</programlisting> - - <para>überprüfen, ob die Datei oder das Verzeichnis - <filename>/usr/local/etc/innd</filename> existiert und es - erstellen und installieren aus dem - <filename>news/inn</filename>-Unterverzeichnis der - Ports-Sammlung, falls es nicht gefunden wird. Es wird zudem - überprüft, ob die Binärdatei namens - <command>xmlcatmgr</command> im Suchpfad vorhanden ist und - danach zum Unterverzeichnis - <filename>textproc/xmlcatmgr</filename> in Ihrer - Ports-Sammlung wechseln, es bauen und installieren, - falls es nicht gefunden wird.</para> - - <note> - <para>In diesem Fall ist <command>innd</command> eine - Binärdatei. Falls sich eine Binärdatei an - einem ungewöhnlichen Platz befindet, der nicht - im Suchpfad ist, dann sollten Sie die volle Pfadangabe - verwenden.</para> - </note> - - <note> - <para>Der offizielle Suchpfad <envar>PATH</envar>, - welcher im Ports Cluster benutzt wird, ist</para> - - <programlisting>/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin</programlisting> - </note> - - <para>Die Abhängigkeit wird innerhalb des - <buildtarget>install</buildtarget>-Target - überprüft. Zudem wird der Name der - Abhängigkeit in das Paket übernommen, - damit &man.pkg.add.1; es automatisch installieren wird, - falls es auf dem System des Nutzers nicht vorhanden ist. - Der <replaceable>target</replaceable>-Teil kann - weggelassen werden, wenn er der gleiche ist wie in der - Variable <varname>DEPENDS_TARGET</varname>.</para> - - <para>Es kommt recht häufig vor, dass - <varname>RUN_DEPENDS</varname> genau dasselbe enthält - wie <varname>BUILD_DEPENDS</varname>, gerade dann, wenn die - portierte Software in einer Skriptsprache geschrieben ist - oder dieselbe Umgebung, die zum Bau verwendet wurde, zur - Laufzeit gebraucht wird. In diesem Fall ist es sowohl - verlockend als auch intuitiv, den Wert der einen - Variable der anderen direkt zuzuweisen:</para> - - <programlisting>RUN_DEPENDS= ${BUILD_DEPENDS}</programlisting> - - <para>Jedoch kann eine solche Zuweisung dazu führen, dass - die Liste der Laufzeitabhängigkeiten mit - überflüssigen Einträgen belastet wird, die - sich nicht in der ursprünglichen Liste - <varname>BUILD_DEPENDS</varname> des Ports befanden, da sich - &man.make.1; bei - der Auswertung solcher Zuweisungen träge verhält. - Stellen Sie sich ein <filename>Makefile</filename> mit - <varname>USE_<replaceable>*</replaceable></varname>-Variablen - vor, die von <filename>ports/Mk/bsd.*.mk</filename> verarbeitet - werden, um initiale Bauabhängigkeiten zusammenzutragen. - Zum Beispiel fügt <literal>USE_GMAKE=yes</literal> - <package>devel/gmake</package> zu - <varname>BUILD_DEPENDS</varname> hinzu. Um zu verhindern, - dass solche zusätzlichen Abhängigkeiten - <varname>RUN_DEPENDS</varname> belasten, achten Sie darauf, - bei gleichzeitiger Auswertung zuzuweisen, d.h. der - Ausdruck wird ausgewertet, bevor er als Wert der Variablen - zugewiesen wird:</para> - - <programlisting>RUN_DEPENDS:= ${BUILD_DEPENDS}</programlisting> - </sect2> - - <sect2> - <title><varname>BUILD_DEPENDS</varname></title> - - <para>Diese Variable legt Binärdateien oder Dateien fest, - die dieser Port zur Erstellung benötigt. Wie - <varname>RUN_DEPENDS</varname> ist es eine Liste von - <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional>:target</optional>-Tupeln. - Zum Beispiel wird - - <programlisting> BUILD_DEPENDS= - unzip:${PORTSDIR}/archivers/unzip</programlisting> - - überprüfen, ob eine Binärdatei - <command>unzip</command> vorhanden ist und in das - Unterverzeichnis <filename>archivers/unzip</filename> - Ihrer Ports-Sammlung wechseln und sie erstellen und - installieren, falls sie nicht gefunden wird.</para> - - <note> - <para><quote>Erstellen</quote> bedeutet hier alles von der - Extraktion bis zur Kompilierung. Die Abhängigkeit - wird im <buildtarget>extract</buildtarget>-Target - überprüft. - Der <replaceable>target</replaceable>-Teil kann - weggelassen werden, falls er identisch mit der Variable - <varname>DEPENDS_TARGET</varname> ist.</para> - </note> - </sect2> - - <sect2> - <title><varname>FETCH_DEPENDS</varname></title> - - <para>Diese Variable legt eine Binärdatei oder Datei - fest, welche der Port benötigt, um heruntergeladen - werden zu können. Wie die vorherigen beiden Variablen - ist er eine Liste von - <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional>:target</optional>-Tupeln. - Zum Beispiel wird - - <programlisting> FETCH_DEPENDS= - ncftp2:${PORTSDIR}/net/ncftp2</programlisting> - - überprüfen, ob eine Binärdatei namens - <command>ncftp2</command> vorhanden ist, in das - Unterverzeichnis <filename>net/ncftp2</filename> Ihrer - Ports-Sammlung wechseln, sie erstellen und installieren, - falls sie nicht gefunden wird.</para> - - <para>Die Abhängigkeit wird innerhalb des - <buildtarget>fetch</buildtarget>-Target überprüft. - Der <replaceable>target</replaceable>-Teil kann weggelassen - werden, falls er identisch mit der Variable - <varname>DEPENDS_TARGET</varname> ist.</para> - </sect2> - - <sect2> - <title><varname>EXTRACT_DEPENDS</varname></title> - - <para>Diese Variable spezifiziert eine Binärdatei oder - eine Datei, welche dieser Port für die Extraktion - benötigt. Wie die vorherigen Variablen ist er eine - Liste von - <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional>:target</optional>-Tupeln. - Zum Beispiel wird - - <programlisting>EXTRACT_DEPENDS= - unzip:${PORTSDIR}/archivers/unzip</programlisting> - - überprüfen, ob eine Binärdatei namens - <command>unzip</command> vorhanden ist, in das - Unterverzeichnis <filename>archivers/unzip</filename> - Ihrer Ports-Sammlung wechseln, sie erstellen und - installieren, falls sie nicht gefunden wird.</para> - - <para>Die Abhängigkeit wird innerhalb des - <buildtarget>extract</buildtarget>-Target überprüft. - Der <replaceable>target</replaceable>-Teil kann weggelassen - werden, falls er identisch mit der Variable - <varname>DEPENDS_TARGET</varname> ist.</para> - - <note> - <para>Nutzen Sie diese Variable nur, wenn die Extraktion - nicht funktioniert (die Vorgabe nimmt - <command>gzip</command> an) und nicht mit - <varname>USE_ZIP</varname> oder - <varname>USE_BZIP2</varname> wie in <xref linkend="use-vars"/> beschrieben zum Laufen gebracht - werden kann.</para> - </note> - </sect2> - - <sect2> - <title><varname>PATCH_DEPENDS</varname></title> - - <para>Diese Variable legt eine Binärdatei oder eine - Datei fest, welche dieser Port zum Patchen benötigt. - Wie die vorhergehenden Variablen ist diese eine Liste von - <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional>:target</optional>-Tupeln. - Zum Beispiel wird - - <programlisting> PATCH_DEPENDS= - ${NONEXISTENT}:${PORTSDIR}/java/jfc:extract - </programlisting> - - in das Unterverzeichnis <filename>java/jfc</filename> Ihrer - Ports-Sammlung wechseln, um es zu entpacken.</para> - - <para>Die Abhängigkeit wird innerhalb des - <buildtarget>patch</buildtarget>-Target überprüft. - Der <replaceable>target</replaceable>-Teil kann entfallen, - falls er identisch mit der Variable - <varname>DEPENDS_TARGET</varname> ist.</para> - </sect2> - - <sect2 xml:id="use-vars"> - <title><varname>USE_<replaceable>*</replaceable></varname> - </title> - - <para>Es gibt eine Reihe von Variablen, um gebräuchliche - Abhängigkeiten einzukapseln, die viele Ports aufweisen. - Obwohl Ihre Verwendung optional ist, können sie helfen - die Übersichtlichkeit des <filename>Makefile</filename> - eines Ports zu erhöhen. Jede von ihnen ist im Stil von - <varname>USE_<replaceable>*</replaceable></varname>. - Der Gebrauch dieser Variablen ist beschränkt auf das - <filename>Makefile</filename> eines Ports und - <filename>ports/Mk/bsd.*.mk</filename>. Es ist nicht - entworfen worden, um durch den Nutzer setzbare Optionen - einzukapseln; benutzen Sie - <varname>WITH_<replaceable>*</replaceable></varname> und - <varname>WITHOUT_<replaceable>*</replaceable></varname> - für diese Zwecke.</para> - - <note> - <para>Es ist <emphasis>immer</emphasis> falsch, irgendeine - <varname>USE_<replaceable>*</replaceable></varname>-Variable - in der <filename>/etc/make.conf</filename> zu setzen. - Zum Beispiel würde das Setzen von - - <programlisting>USE_GCC=3.4</programlisting> - - eine Abhängigkeit für GCC34 für jeden Port - einschliesslich GCC34 selbst hinzufügen!</para> - </note> - - <table frame="none"> - <title>Die - <varname>USE_<replaceable>*</replaceable></varname>-Varibalen - </title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Variable</entry> - <entry>Bedeutung</entry> - </row> - </thead> - - <tbody> - <row> - <entry><varname>USE_BZIP2</varname></entry> - <entry>Der Tarball dieses Ports wird mit - <command>bzip2</command> komprimiert.</entry> - </row> - - <row> - <entry><varname>USE_ZIP</varname></entry> - <entry>Der Tarball des Ports wird mit - <command>zip</command> komprimiert.</entry> - </row> - - <row> - <entry><varname>USE_BISON</varname></entry> - <entry>Der Port benutzt <command>bison</command> - für die Erstellung.</entry> - </row> - - <row> - <entry><varname>USE_CDRTOOLS</varname></entry> - <entry>Der Port erfordert - <application>cdrecord</application> entweder von - <package>sysutils/cdrtools - </package> oder <package>sysutils/cdrtools-cjk</package>, - abhängig davon, was der Nutzer vorgibt. - </entry> - </row> - - <row> - <entry><varname>USE_GCC</varname></entry> - <entry>Dieser Port benötigt eine bestimmte - Version von <command>gcc</command> zur Erstellung. - Die genaue Version kann festgelegt werden mit - Werten wie <literal>3.4</literal>. - Mit <literal>3.4+</literal> kann die mindestens - erforderliche Version spezifiziert werden. - Der <command>gcc</command> aus - dem Basissystem wird genutzt, wenn er die - erforderliche Version erfüllt, andernfalls wird - eine geeignete Version des <command>gcc</command> - aus den Ports kompiliert und die Variablen - <varname>CC</varname> und <varname>CXX</varname> - werden angepasst.</entry> - </row> - - </tbody> - </tgroup> - </table> - - <para>Variablen zugehörig zu - <application>gmake</application> und dem - <filename>configure</filename>-Skript werden in - <xref linkend="building"/> beschrieben, währenddessen - <application>autoconf</application>, - <application>automake</application> und - <application>libtool</application> in - <xref linkend="using-autotools"/> beschrieben sind. - <application>Perl</application>-spezifische Variablen - werden in <xref linkend="using-perl"/> behandelt. - X11-Variablen sind aufgelistet in - <xref linkend="using-x11"/>. <xref linkend="using-gnome"/> - behandelt GNOME-bezogene Variablen und <xref linkend="using-kde"/> KDE-bezogene Variablen. - <xref linkend="using-java"/> dokumentiert Java-Variablen, - während <xref linkend="using-php"/>Informationen zu - <application>Apache</application>, - <application>PHP</application> und PEAR-Modulen - enthält. - <application>Python</application> wird in - <xref linkend="using-python"/> und - <application>Ruby</application> in - <xref linkend="using-ruby"/> erörtert. - <xref linkend="using-sdl"/> stellt Variablen für - <application>SDL</application>-Programme zur Verfügung - und <xref linkend="using-xfce"/> enthält schliesslich - Variablen für <application>Xfce</application>.</para> - </sect2> - - <sect2> - <title>Minimale Version einer Abhängigkeit</title> - - <para>Eine minimale Version einer Abhängigkeit kann in - jeder <varname>*_DEPENDS</varname>-Variable festgelegt - werden mit Ausnahme von <varname>LIB_DEPENDS</varname> - durch Anwendung folgender Syntax:</para> - - <programlisting>p5-Spiffy>=0.26:${PORTSDIR}/devel/p5-Spiffy</programlisting> - - <para>Das erste Feld enthält einen abhängigen - Paketnamen, welcher einem Eintrag in der Paketdatenbank - entsprechen muss und einen Vergleich mit einer - Paketversion. Die Abhängigkeit wird erfüllt, - wenn p5-Spiffy-0.26 oder eine neuere Version - auf dem System installiert ist.</para> - </sect2> - - <sect2> - <title>Anmerkungen zu Abhängigkeiten</title> - - <para>Wie vorstehend beschrieben ist das Vorgabe-Target - <buildtarget>DEPENDS_TARGET</buildtarget>, wenn eine - Abhängigkeit benötigt wird. - Die Vorgabe hierfür ist <literal>install</literal>. - Dies ist eine Nutzer-Variable; sie wird niemals im - <filename>Makefile</filename> eines Ports definiert. - Falls Ihr Port einen besonderen Weg benötigt, - um mit einer Abhängigkeit umzugehen, dann benutzen - Sie bitte den <literal>:target</literal>-Teil der - <varname>*_DEPENDS</varname>-Variablen, anstatt - <varname>DEPENDS_TARGET</varname> zu ändern.</para> - - <para>Falls Sie <command>make clean</command> schreiben, - werden dessen Abhängigkeiten auch gesäubert. - Falls Sie dies nicht wollen, definieren Sie die Variable - <varname>NOCLEANDEPENDS</varname> in Ihrer Umgebung. - Dies kann besonders erstrebenswert sein, wenn der Port - etwas in seiner Liste von Abhängigkeiten hat, - das sehr viel Zeit für einen rebuild benötigt - wie KDE, GNOME oder Mozilla.</para> - - <para>Um von einem anderen Port bedingungslos abhängig - zu sein, benutzen Sie bitte die Variable - <varname>${NONEXISTENT}</varname> als erstes Feld von - <varname>BUILD_DEPENDS</varname> oder - <varname>RUN_DEPENDS</varname>. Benutzen Sie dies nur, - wenn Sie den Quelltext eines anderen Port benötigen. - Sie können auch oft Kompilierzeit sparen, wenn Sie das - Target festlegen. Zum Beispiel wird - - <programlisting>BUILD_DEPENDS= ${NONEXISTENT}:${PORTSDIR}/graphics/jpeg:extract</programlisting> - - immer zum <literal>jpeg</literal>-Port wechseln und ihn - extrahieren.</para> - </sect2> - - <sect2> - <title>Zirkuläre Abhängigkeiten sind fatal</title> - - <important> - <para>Führen Sie niemals irgendwelche zirkulären - Abhängigkeiten in der Ports-Sammlung ein!</para> - </important> - - <para>Die Struktur für die Erstellung von Ports dulde - keinerlei zirkuläre Abhängigkeiten. Falls Sie - dennoch eine verwenden, wird es irgendjemanden irgendwo auf - der Welt geben, dessen FreeBSD-Installation nahezu sofort - zusammenbricht und vielen anderen wird es sehr schnell - genauso ergehen. - So etwas kann extrem schwer festzustellen sein. - Falls Sie Zweifel haben vor einer Änderung, - dann vergewissern Sie sich, dass Sie folgendes getan haben: - <command>cd /usr/ports; make index</command>. - Dieser Prozess kann auf alten Maschinen sehr langsam sein, - aber Sie ersparen sich und einer Vielzahl von Menschen - möglicherweise eine Menge Ärger.</para> - </sect2> - </sect1> - - <sect1 xml:id="makefile-masterdir"> - <title><varname>MASTERDIR</varname></title> - - <para>Falls Ihr Port wegen einer Variable, die verschiedene - Werte annimmt (z.B. Auflösung oder - Papiergröße), leicht unterschiedliche Versione - von Paketen erzeugen muss, dann legen Sie bitte ein - Unterverzeichnis pro Paket an, um es für den Nutzer - einfacher begreiflich zu machen, was zu machen ist. - Aber versuchen Sie dabei so viele Dateien wie möglich - zwischen diesen Ports gemeinsam zu nutzen. - Normalerweise benötigen Sie nur ein sehr kurzes - <filename>Makefile</filename> in allen ausser einem - Unterverzeichnis, wenn Sie Variablen intelligent nutzen. - In diesem einzigen <filename>Makefile</filename> können - Sie <varname>MASTERDIR</varname> verwenden, um anzugeben, - wo der Rest der Dateien liegt. Benutzen Sie bitte auch eine - Variable für <link linkend="porting-pkgname"> - <varname>PKGNAMESUFFIX</varname></link>, damit die Pakete - unterschiedliche Namen haben werden.</para> - - <para>Wir demonstrieren dies am Besten an einem Beispiel. Es ist - Teil von - <filename>japanese/xdvi300/Makefile</filename>;</para> - - <programlisting>PORTNAME= xdvi -PORTVERSION= 17 -PKGNAMEPREFIX= ja- -PKGNAMESUFFIX= ${RESOLUTION} - : -# default -RESOLUTION?= 300 -.if ${RESOLUTION} != 118 && ${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><package>japanese/xdvi300</package> - verfügt ebenfalls über alle Patches, Paket-Dateien - usw. Wenn Sie <command>make</command> eintippen, wird der Port - die Standardvorgabe für die Auflösung nehmen (300) - und den Port ganz normal erstellen.</para> - - <para>Genauso wie für alle anderen Auflösungen ist - dies das <emphasis>vollständige</emphasis> - <filename>xdvi118/Makefile</filename>:</para> - - <programlisting>RESOLUTION= 118 -MASTERDIR= ${.CURDIR}/../xdvi300 - -.include "${MASTERDIR}/Makefile"</programlisting> - - <para>(<filename>xdvi240/Makefile</filename> und - <filename>xdvi400/Makefile</filename> sind ähnlich). - Die <varname>MASTERDIR</varname>-Definition teilt dem - <filename>bsd.port.mk</filename> mit, dass die normalen - Unterverzeichnisse wie <varname>FILESDIR</varname> und - <varname>SCRIPTDIR</varname> unter - <filename>xdvi300</filename> gefunden werden können. - Die <literal>RESOLUTION=118</literal>-Zeile wird die - <literal>RESOLUTION=300</literal>-Zeile in - <filename>xdvi300/Makefile</filename> überschreiben - und der Port wird mit einer Auflösung von 118 - erstellt.</para> - </sect1> - - <sect1 xml:id="makefile-manpages"> - <title>Manualpages</title> - - <para>Die Variablen <varname>MAN[1-9LN]</varname> - werden automatisch jede Manualpage zur - <filename>pkg-plist</filename> hinzufügen - (dies bedeutet, dass Sie Manualpages - <emphasis>nicht</emphasis> in der - <filename>pkg-plist</filename> auflisten dürfen, - lesen Sie bitte <link linkend="plist-sub">Erstellung - der PLIST</link> für weitere Details). - Sie veranlassen zudem den Installationsabschnitt - dazu, die Manualpages zu Komprimieren oder zu Dekomprimieren - abhängig vom gesetzten Wert der Variable - <varname>NO_MANCOMPRESS</varname> in - <filename>/etc/make.conf</filename>.</para> - - <para>Falls Ihr Port versucht verschiedene Namen für - Manualpages unter Zuhilfenahme von Symlinks oder Hardlinks - zu installieren, müssen Sie die Variable - <varname>MLINKS</varname> nutzen, um diese zu identifizieren. - Der von Ihrem Port installierte Link wird von - <filename>bsd.port.mk</filename> gelöscht und wieder - eingefügt, um sicherzustellen, dass er auf die korrekte - Datei zeigt. Jede Manualpage, welche in - <varname>MLINKS</varname> aufgeführt ist, darf nicht in - der <filename>pkg-plist</filename> aufgenommen werden.</para> - - <para>Falls die Manualpages während der Installation - komprimiert werden sollen, müssen Sie die Variable - <varname>MANCOMPRESSED</varname> setzen. Diese Variable kann - drei Werte annehmen, <literal>yes</literal>, - <literal>no</literal> und <literal>maybe</literal>. - <literal>yes</literal> bedeutet, dass Manualpages bereits - komprimiert installiert sind, bei <literal>no</literal> sind - sie es nicht und <literal>maybe</literal> bedeutet, dass die - Software bereits den Wert von <varname>NO_MANCOMPRESS</varname> - beachtet, damit <filename>bsd.port.mk</filename> nichts - Besonderes auszuführen hat.</para> - - <para><varname>MANCOMPRESSED</varname> wird automatisch auf - <literal>yes</literal> gesetzt, wenn - <varname>USE_IMAKE</varname> vorgegeben ist und gleichzeitig - <varname>NO_INSTALL_MANPAGES</varname> nicht. Im umgekehrten - Falle ist <varname>MANCOMPRESSED</varname> auf - <literal>no</literal> gesetzt. - Sie müssen es nicht explizit angeben, außer die - Standardvorgabe ist für Ihren Port nicht passend.</para> - - <para>Wenn Ihr Port den man tree irgendwo anders als in der - Variable <varname>PREFIX</varname> verankert, können - Sie ihn mit <varname>MANPREFIX</varname> bestimmen. - Sollten zudem Manualpages nur in bestimmten Abschnitten an - einem nicht-standardkonformen Platz liegen, wie z.B. bestimmte - <literal>Perl</literal>-Modul-Ports, - dann können Sie mittels der Variable - <varname>MAN<replaceable>sect</replaceable>PREFIX</varname> - (wobei <replaceable>sect</replaceable> ein Wert aus - <literal>1-9</literal>, <literal>L</literal> oder - <literal>N</literal> ist) individuelle Pfade zu den - Manualpages festlegen.</para> - - <para>Wenn Ihre Manualpages in sprachspezifische - Unterverzeichnisse installiert werden, dann bestimmen Sie - bitte den Namen der Sprache mit der Variable - <varname>MANLANG</varname>. Der Wert dieser Variable ist - mit <literal>""</literal> vorgegeben (das bedeutet nur - Englisch).</para> - - <para>Hier ist ein Beispiel, welches alles zusammenfasst.</para> - - <programlisting>MAN1= foo.1 -MAN3= bar.3 -MAN4= baz.4 -MLINKS= foo.1 alt-name.8 -MANLANG= "" ja -MAN3PREFIX= ${PREFIX}/share/foobar -MANCOMPRESSED= yes</programlisting> - - <para>Dies zeigt an, dass sechs Dateien von diesem Port - installiert werden;</para> - - <programlisting>${MANPREFIX}/man/man1/foo.1.gz -${MANPREFIX}/man/ja/man1/foo.1.gz -${PREFIX}/share/foobar/man/man3/bar.3.gz -${PREFIX}/share/foobar/man/ja/man3/bar.3.gz -${MANPREFIX}/man/man4/baz.4.gz -${MANPREFIX}/man/ja/man4/baz.4.gz</programlisting> - - <para><filename>${MANPREFIX}/man/man8/alt-name.8.gz</filename> - kann zusätzlich von Ihrem Port installiert werden, - oder auch nicht. Unabhängig davon wird ein Symlink - erstellt, welcher die Manualpages foo(1) und alt-name(8) - einbindet.</para> - - <para>Falls nur manche Manualpages übersetzt sind, - können Sie einige dynamisch vom - <varname>MANLANG</varname>-Inhalt erzeugte Variablen - nutzen:</para> - - <programlisting>MANLANG= "" de ja -MAN1= foo.1 -MAN1_EN= bar.1 -MAN3_DE= baz.3</programlisting> - - <para>Dies führt zu folgender Liste von Dateien:</para> - - <programlisting>${MANPREFIX}/man/man1/foo.1.gz -${MANPREFIX}/man/de/man1/foo.1.gz -${MANPREFIX}/man/ja/man1/foo.1.gz -${MANPREFIX}/man/man1/bar.1.gz -${MANPREFIX}/man/de/man3/baz.3.gz</programlisting> - </sect1> - - <sect1 xml:id="makefile-info"> - <title>Info-Dateien</title> - - <para>Falls Ihr Paket GNU-Info-Dateien installiert, sollten - diese in der <varname>INFO</varname>-Variablen augelistet sein - (ohne das angehängte <literal>.info</literal>) mit einem - Eintrag für jedes Dokument. Von diesen Dateien wird - angenommen, dass sie nach - <filename>PREFIX/INFO_PATH</filename> - installiert werden. Sie können - <varname>INFO_PATH</varname> ändern, falls Ihr Paket - einen anderen Ort vorsieht. Jedoch wird dies nicht empfohlen. - Die Einträge enthalten nur den relativen Pfad zu - <filename>PREFIX/INFO_PATH</filename>. - Zum Beispiel installiert <package>lang/gcc34</package> Info-Dateien nach - <filename>PREFIX/INFO_PATH/gcc34</filename>, - wobei <varname>INFO</varname> etwa so aussieht: - - <programlisting>INFO= gcc34/cpp gcc34/cppinternals gcc34/g77 ...</programlisting> - - Entsprechende Installations-/Deinstalltions-Codes werden vor - der Paket-Registrierung automatisch der vorläufigen - <filename>pkg-plist</filename> hinzugefügt.</para> - </sect1> - - <sect1 xml:id="makefile-options"> - <title>Makefile-Optionen</title> - - <para>Einige größere Applikationen können mit - einer Reihe von Konfigurationen, die zusätzliche - Funktionalitäten hinzufügen, erstellt werden, - falls eine oder mehrere Bibliotheken oder Applikationen - verfügbar sind. Dazu gehören die Auswahl von - natürlichen Sprachen, GUI versus Kommandozeilen-Versionen - oder die Auswahl aus mehreren Datenbank-Programmen. - Da nicht alle Nutzer diese Bibliotheken oder Applikationen - wollen, stellt das Ports-System hooks (Haken) zur - Verfügung, damit der Autor des Ports bestimmen kann, - welche Konfiguration erstellt werden soll.</para> - - <sect2> - <title>KNOBS (Einstellungen)</title> - - <sect3> - <title><varname>WITH_<replaceable>*</replaceable></varname> - und - <varname>WITHOUT_<replaceable>*</replaceable></varname> - </title> - - <para>Diese Variablen sind entworfen worden, um vom - System-Administrator gesetzt zu werden. Es gibt viele, - die in <link xlink:href="http://www.freebsd.org/cgi/cvsweb.cgi/ports/KNOBS?rev=HEAD&content-type=text/x-cvsweb-markup"><filename>ports/KNOBS</filename></link> - standardisiert sind.</para> - - <para>Benennen Sie Schalter bei der Erstellung eines Ports - nicht programmspezifisch. Verwenden Sie zum Beispiel im - Avahi-Port <varname>WITHOUT_MDNS</varname> anstelle von - <varname>WITHOUT_AVAHI_MDNS</varname>.</para> - - <note> - <para>Sie sollten nicht annehmen, dass ein - <varname>WITH_<replaceable>*</replaceable></varname> - notwendigerweise eine korrespondierende <varname> - WITHOUT_<replaceable>*</replaceable></varname>-Variable - hat oder umgekehrt. Im Allgemeinen wird diese - Vorgabe einfach unterstellt.</para> - </note> - - <note> - <para>Falls nicht anderweitig festgelegt, werden diese - Variablen nur dahingehend überprüft, ob sie - gesetzt sind oder nicht – nicht darauf, - ob sie auf bestimmte Werte wie <literal>YES</literal> - oder <literal>NO</literal> gesetzt sind.</para> - </note> - - <table frame="none"> - <title>Häufige - <varname>WITH_<replaceable>*</replaceable></varname> - und <varname> - WITHOUT_<replaceable>*</replaceable></varname>-Variablen - </title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Variable</entry> - - <entry>Bedeutung</entry> - </row> - </thead> - - <tbody> - <row xml:id="knobs-without-nls"> - <entry><varname>WITHOUT_NLS</varname></entry> - - <entry>Falls gesetzt, bedeutet sie, dass eine - Internationalisierung nicht benötigt wird, - was Kompilierzeit sparen kann. Als Vorgabe - wird Internationalisierung gebraucht.</entry> - </row> - - <row> - <entry><varname>WITH_OPENSSL_BASE</varname></entry> - - <entry>Nutze die Version von OpenSSL aus dem - Basissystem.</entry> - </row> - - <row> - <entry><varname>WITH_OPENSSL_PORT</varname></entry> - - <entry>Installiert die Version von OpenSSL aus - <package>security/openssl</package>, auch - wenn das Basissystem auf aktuellem Stand - ist.</entry> - </row> - - <row> - <entry><varname>WITHOUT_X11</varname></entry> - - <entry>Falls der Port mit oder ohne - Unterstützung für X erstellt werden - kann, dann sollte normalerweise mit - X-Unterstützung erstellt werden. - Falls die Variable gesetzt ist, soll die Version - ohne X-Unterstützung erstellt werden.</entry> - </row> - </tbody> - </tgroup> - </table> - </sect3> - - <sect3> - <title>Benennung von Knobs (Einstellungen)</title> - - <para>Um die Anzahl der Knobs niedrig zu halten und zum - Vorteil des Anwenders, wird empfohlen, dass Porter - ähnliche Namen für Knobs verwenden. - Eine Liste der beliebtesten Knobs kann in der <link xlink:href="http://www.freebsd.org/cgi/cvsweb.cgi/ports/KNOBS?rev=HEAD&content-type=text/x-cvsweb-markup">KNOBS-Datei</link> - eingesehen werden.</para> - - <para>Knob-Namen sollten wiederspiegeln, was der Knob - bedeutet und was er bewirkt. Wenn ein Port einen - lib-Präfix im <varname>PORTNAME</varname> hat, - dann soll das lib-Präfix im Knob-Namen - entfallen.</para> - </sect3> - </sect2> - - <sect2> - <title><varname>OPTIONS</varname></title> - - <sect3> - <title>Hintergrund</title> - - <para>Die <varname>OPTIONS</varname>-Variable gibt dem - Nutzer, der diesen Port installiert, einen Dialog mit - auswählbaren Optionen und speichert diese in - <filename>/var/db/ports/portname/options</filename>. - Bei der nächsten Neuerstellung des Ports werden - diese Einstellungen wieder verwandt. - Sie werden sich niemals mehr an all die zwanzig - <varname>WITH_<replaceable>*</replaceable></varname> und - <varname>WITHOUT_<replaceable>*</replaceable></varname>-Optionen - erinnern müssen, die Sie benutzt haben, um diesen - Port zu erstellen!</para> - - <para>Wenn der Anwender <command>make config</command> - benutzt (oder ein <command>make build</command> das - erste Mal laufen lässt) wird das Framework auf - <filename>/var/db/ports/portname/options</filename> - die Einstellungen prüfen. Falls die Datei nicht - existiert, werden die Werte von - <varname>OPTIONS</varname> genutzt, um eine Dialogbox - zu erzeugen, in welcher die Optionen an- oder abgeschaltet - werden können. Dann wird die - <filename>options</filename>-Datei gespeichert und die - ausgewählten Variablen werden bei der Erstellung - des Ports benutzt.</para> - - <para>Falls eine neue Version des Ports - <varname>OPTIONS</varname> hinzufügt, wird der - Dialog mit den gespeicherten Werten dem Nutzer - angezeigt.</para> - - <para>Benutzen Sie <command>make showconfig</command>, - um die gespeicherte Konfiguration zu betrachten. - Benutzen Sie <command>make rmconfig</command>, um die - gespeicherte Konfiguration zu Löschen.</para> - </sect3> - - <sect3> - <title>Syntax</title> - - <para>Die Syntax für die - <varname>OPTIONS</varname>-Variable lautet: - - <programlisting>OPTIONS= OPTION "descriptive text" default ...</programlisting> - - Der Wert als Vorgabe ist entweder <literal>ON</literal> - oder <literal>OFF</literal>. Wiederholungen dieser drei - Felder sind erlaubt.</para> - - <para><varname>OPTIONS</varname>-Definitionen - müssen vor der Einbindung von - <filename>bsd.port.options.mk</filename> erscheinen. - Die <varname>WITH_*</varname> und - <varname>WITHOUT_*</varname>-Variablen können - nur nach der Einbindung von - <filename>bsd.port.options.mk</filename> getestet - werden. <filename>bsd.port.pre.mk</filename> kann auch - stattdessen eingebunden werden und wird immer noch von - vielen Ports eingebunden, die vor der Einführung von - <filename>bsd.port.options.mk</filename> erstellt wurden. - Jedoch wirken manche Variablen nicht wie gewohnt nach der - Einbindung von <filename>bsd.port.pre.mk</filename>, - typischerweise <varname>USE_*</varname>-Optionen.</para> - - <example xml:id="ports-options-simple-use"> - <title>Einfache Anwendung von - <varname>OPTIONS</varname></title> - - <para><programlisting>OPTIONS= FOO "Enable option foo" On \ - BAR "Support feature bar" Off - -.include <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 xml:id="ports-options-old-style-use"> - <title>Veraltete Anwendung von - <varname>OPTIONS</varname></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 - <varname>CONFIGURE_ARGS</varname> einzeln ab.</para> - - <example> - <title>Falsche Behandlung einer Option</title> - - <programlisting>.if defined(WITH_FOO) -LIB_DEPENDS+= foo.0:${PORTSDIR}/devel/foo -CONFIGURE_ARGS+= --enable-foo -.endif</programlisting> - </example> - - <para>Stellen Sie sich vor im obigen Beispiel ist eine - Bibliothek libfoo auf dem System installiert. Der Nutzer - will nicht, dass diese Applikation libfoo benutzt, also - hat er die Option auf "off" im - <literal>make config</literal>-Dialog umgestellt. - Aber das Konfigurationsskript der Applikation hat - erkannt, dass die Bibliothek auf dem System vorhanden ist - und fügt ihre Funktionen in die Binärdatei ein. - Falls der Nutzer sich nun entschliesst libfoo von seinem - System zu entfernen, dann wird das Ports-System nicht - protestieren (es wurde keine Abhängigkeit von libfoo - eingetragen), aber die Applikation bricht ab.</para> - - <example> - <title>Korrekte Behandlung einer Option</title> - - <programlisting>.if defined(WITH_FOO) -LIB_DEPENDS+= foo.0:${PORTSDIR}/devel/foo -CONFIGURE_ARGS+= --enable-foo -.else -CONFIGURE_ARGS+= --disable-foo -.endif</programlisting> - </example> - - <para>Im zweiten Beispiel wird die Bibliothek libfoo explizit - abgeschaltet. Das Konfigurationsskript aktiviert die - entsprechenden Funktionen nicht in der Applikation trotz - der Anwesenheit der Bibliothek auf dem System.</para> - </sect2> - </sect1> - - <sect1 xml:id="makefile-wrkdir"> - <title>Die Festlegung des Arbeitsverzeichnisses</title> - - <para>Jeder Port wird extrahiert in ein Arbeitsverzeichnis, - welches beschreibbar sein muss. Das Ports-System gibt als - Standard vor, dass die <varname>DISTFILES</varname> in - einem Verzeichnis namens <literal>${DISTNAME}</literal> - entpackt werden. Mit anderen Worten, wenn Sie:</para> - - <programlisting>PORTNAME= foo -PORTVERSION= 1.0</programlisting> - - <para>festgelegt haben, dann enthalten die Distributions-Dateien - des Ports ein Verzeichnis auf oberster Ebene, - <filename>foo-1.0</filename>, und der Rest der Dateien - befindet sich unter diesem Verzeichnis.</para> - - <para>Es gibt eine Reihe von Variablen, die Sie - überschreiben können, falls dies nicht der Fall - sein sollte.</para> - - <sect2> - <title><varname>WRKSRC</varname></title> - - <para>Diese Variable listet den Namen des Verzeichnisses, - welches erstellt wird, wenn die Distfiles der Applikation - extrahiert werden. Wenn unser vorheriges Beispiel in einem - Verzeichnis namens <filename>foo</filename> (und nicht - <filename>foo-1.0</filename>) extrahiert wurde, - würden Sie schreiben:</para> - - <programlisting>WRKSRC= ${WRKDIR}/foo</programlisting> - - <para>oder möglicherweise</para> - - <programlisting>WRKSRC= ${WRKDIR}/${PORTNAME} - </programlisting> - </sect2> - - <sect2> - <title><varname>NO_WRKSUBDIR</varname></title> - - <para>Wenn der Port überhaupt nicht in einem - Unterverzeichnis extrahiert wird, sollten Sie dies mit dem - Setzen von <varname>NO_WRKSUBDIR</varname> anzeigen.</para> - - <programlisting>NO_WRKSUBDIR= yes</programlisting> - </sect2> - </sect1> - - <sect1 xml:id="conflicts"> - <title>Konfliktbehandlung</title> - - <para>Es gibt drei verschiedene Variablen, um einen - Konflikt zwischen Paketen und Ports zu dokumentieren: - <varname>CONFLICTS</varname>, - <varname>CONFLICTS_INSTALL</varname> sowie - <varname>CONFLICTS_BUILD</varname>.</para> - - <note> - <para><varname>CONFLICTS</varname> setzt automatisch die - Variable <varname>IGNORE</varname>, die - ausführlicher in <xref linkend="dads-noinstall"/> beschrieben wird.</para> - </note> - - <para>Beim Entfernen eines von mehreren in Konflikt stehenden - Ports ist es ratsam, die - <varname>CONFLICTS</varname>-Einträge in den anderen - Ports für einige Monate beizubehalten, um Nutzer zu - unterstützen, die ihre Ports nur sporadisch - aktualisieren.</para> - - <sect2> - <title><varname>CONFLICTS_INSTALL</varname></title> - - <para>Falls Ihr Paket nicht mit anderen Paketen koexistieren - kann (wegen Dateikonflikten, Laufzeit-Inkompatibilitäten - usw.), führen Sie bitte die anderen Paketnamen in der - Variable <varname>CONFLICTS_INSTALL</varname> auf. Sie - können hier Shell-Globs wie <literal>*</literal> und - <literal>?</literal> verwenden. Paketnamen sollten in der - gleichen Weise aufgezählt werden, wie sie in - <filename>/var/db/pkg</filename> auftauchen. Bitte stellen - Sie sicher, dass <varname>CONFLICTS</varname> nicht mit dem - Paket des Ports selbst übereinstimmt, da ansonsten das - Erzwingen der Installation durch - <varname>FORCE_PKG_REGISTER</varname> nicht länger - funktionieren wird.</para> - </sect2> - - <sect2> - <title><varname>CONFLICTS_BUILD</varname></title> - - <para>Wenn Ihr Port nicht gebaut werden kann, wenn ein - bestimmter Port bereits installiert ist, geben Sie diesen in - der Variable <varname>CONFLICTS_BUILD</varname> an. Sie - können hier Shell-Globs wie <literal>*</literal> und - <literal>?</literal> verwenden. Paketnamen sollten in der - gleichen Weise aufgezählt werden, wie sie in - <filename>/var/db/pkg</filename> auftauchen. Die - CONFLICTS_BUILD-Prüfung erfolgt vor dem Bau des Ports. - Baukonflikte werden im erzeugten Paket nicht - verzeichnet.</para> - </sect2> - - <sect2> - <title><varname>CONFLICTS</varname></title> - - <para>Wenn Ihr Port nicht gebaut werden kann, wenn ein bestimmter - Port bereits installiert ist und das aus dem Port erzeugte - Paket nicht mit dem anderen Paket koexistieren kann, geben Sie - das andere Paket in der Variable <varname>CONFLICTS</varname> - an. Sie können hier Shell-Globs wie <literal>*</literal> und - <literal>?</literal> verwenden. Paketnamen sollten in der - gleichen Weise aufgezählt werden, wie sie in - <filename>/var/db/pkg</filename> auftauchen. Bitte stellen - Sie sicher, dass <varname>CONFLICTS_INSTALL</varname> nicht mit - dem Paket des Ports selbst übereinstimmt, da ansonsten das - Erzwingen der Installation durch - <varname>FORCE_PKG_REGISTER</varname> nicht länger - funktionieren wird. Die CONFLICTS-Prüfung erfolgt vor dem - Bau des Ports und vor der Installation des gebauten Ports.</para> - </sect2> - </sect1> - - <sect1 xml:id="install"> - <title>Installation von Dateien</title> - - <sect2 xml:id="install-macros"> - <title>INSTALL_* macros</title> - - <para>Nutzen Sie die Makros in - <filename>bsd.port.mk</filename>, um korrekte - Modi und Eigentümer von Dateien in Ihren - <buildtarget>*-install</buildtarget>-Targets - sicherzustellen.</para> - - <itemizedlist> - <listitem> - <para><varname>INSTALL_PROGRAM</varname> ist ein Befehl, - um binäre Binärdateien zu installieren.</para> - </listitem> - - <listitem> - <para><varname>INSTALL_SCRIPT</varname> ist ein Befehl, - um ausführbare Skripte zu installieren.</para> - </listitem> - - <listitem> - <para><varname>INSTALL_LIB</varname> ist ein Befehl - zur Installation Shared-Libraries.</para> - </listitem> - - <listitem> - <para><varname>INSTALL_KLD</varname> ist ein Befehl, mit - dem Kernelmodule installiert werden können. Einige - Architekturen haben Probleme mit stripped-Modulen. - Daher sollten Sie diesen Befehl anstelle von - <varname>INSTALL_PROGRAM</varname> verwenden.</para> - </listitem> - - <listitem> - <para><varname>INSTALL_DATA</varname> ist ein Befehl, - um gemeinsam nutzbare Daten zu installieren.</para> - </listitem> - - <listitem> - <para><varname>INSTALL_MAN</varname> ist ein Befehl, - um Manualpages oder andere Dokumentation zu - installieren (es wird nichts komprimiert).</para> - </listitem> - </itemizedlist> - - <para>Das sind grundsätzlich alle - <command>install</command>-Befehle mit - ihren passenden Flags.</para> - </sect2> - - <sect2 xml:id="install-strip"> - <title>Zerlegen von Binärdateien und - Shared-Libraries</title> - - <para>Zerlegen Sie keine Binärdateien manuell, - wenn Sie es nicht müssen. Alle Binaries sollten - gestripped werden; allerdings vermag das - <varname>INSTALL_PROGRAM</varname>-Makro gleichzeitig - eine Binärdatei zu installieren und zu strippen - (beachten Sie den nächsten Abschnitt). Das - Makro <varname>INSTALL_LIB</varname> erledigt das - gleiche für Shared-Libraries.</para> - - <para>Wenn Sie eine Datei strippen müssen, aber weder - das <varname>INSTALL_PROGRAM</varname>- noch das - <varname>INSTALL_LIB</varname>-Makro nutzen wollen, dann - kann <varname>${STRIP_CMD}</varname> Ihr Programm strippen. - Dies wird typischerweise innerhalb des - <literal>post-install</literal>-Targets gemacht. - Zum Beispiel:</para> - - <programlisting>post-install: - ${STRIP_CMD} ${PREFIX}/bin/xdl</programlisting> - - <para>Nutzen Sie &man.file.1; für die installierte - Applikation, um zu überprüfen, ob eine - Binärdatei gestripped ist oder nicht. - Wenn es nicht meldet <literal>not stripped</literal>, - dann ist es bereits gestripped. Zudem wird &man.strip.1; - nicht ein bereits gestripptes Programm nochmals versuchen - zu strippen, sondern wird stattdessen einfach sauber - beenden.</para> - </sect2> - - <sect2 xml:id="install-copytree"> - <title>Installation eines ganzen Verzeichnisbaums - inklusive Dateien</title> - - <para>Manchmal muss man eine große Zahl von Dateien - unter Erhalt ihrer hierarchischen Struktur installieren, - d.h. Kopieraktionen über einen ganzen Verzeichnisbaum - von <varname>WRKSRC</varname> zu einem Zielverzeichnis unter - <varname>PREFIX</varname>.</para> - - <para>Für diesen Fall gibt es zwei Makros. Der Vorteil - der Nutzung dieser Makros anstatt <command>cp</command> ist, - dass sie korrekte Besitzer und Berechtigungen auf den - Zieldateien garantieren. - Das erste Makro, <varname>COPYTREE_BIN</varname>, wird alle - installierten Dateien ausführbar markieren und damit - passend für die Installation in - <filename>PREFIX/bin</filename> - vorbereiten. Das zweite Makro, - <varname>COPYTREE_SHARE</varname>, setzt keine - Ausführungsberechtigungen auf Dateien und ist daher - geeignet für die Installation von Dateien im Target von - <filename>PREFIX/share</filename>.</para> - - <programlisting>post-install: - ${MKDIR} ${EXAMPLESDIR} - (cd ${WRKSRC}/examples/ && ${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>DATADIR</filename> - installieren.</para> - - <para>Zusätzliche <command>find</command>-Argumente - können mit dem dritten Argument an die - <varname>COPYTREE_*</varname>-Makros übergeben werden. - Um zum Beispiel alle Dateien aus dem 1. Beispiel ohne die - Makefiles zu installieren, kann man folgenden Befehl - benutzen.</para> - - <programlisting>post-install: - ${MKDIR} ${EXAMPLESDIR} - (cd ${WRKSRC}/examples/ && \ - ${COPYTREE_SHARE} \* ${EXAMPLESDIR} "! -name Makefile")</programlisting> - - <para>Beachten Sie bitte, dass diese Makros die installierten - Dateien nicht zur <filename>pkg-plist</filename> - hinzufügen, Sie müssen sie immer noch selbst - auflisten.</para> - </sect2> - - <sect2 xml:id="install-documentation"> - <title>Installation zusätzlicher Dokumentation</title> - - <para>Falls Ihre Software zusätzlich zu den üblichen - Manualpages und Info-Seiten weitere Dokumentation hat und - Sie diese für nützlich halten, dann installieren - Sie sie unter - <filename>PREFIX/share/doc</filename>. - Dies kann wie vorstehend im Target des - <buildtarget>post-install</buildtarget> geschehen.</para> - - <para>Legen Sie ein neues Verzeichnis für Ihren Port an. - Das Verzeichnis sollte wiederspiegeln, was der Port ist. - Das bedeutet normalerweise <varname>PORTNAME</varname>. - Wie auch immer, wenn Sie meinen, der Nutzer möchte - verschiedene Versionen des Ports zur gleichen Zeit - installiert haben, dann können Sie die gesamte Variable - <varname>PKGNAME</varname> nutzen.</para> - - <para>Machen Sie die Installation von der Variablen - <varname>NOPORTDOCS</varname> abhängig, damit die - Nutzer sie in <filename>/etc/make.conf</filename> abschalten - können:</para> - - <programlisting>post-install: -.if !defined(NOPORTDOCS) - ${MKDIR} ${DOCSDIR} - ${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${DOCSDIR} -.endif</programlisting> - - <para>Hier einige praktische Variablen und wie sie - standardmässig bei Verwendung im - <filename>Makefile</filename> expandiert werden:</para> - - <itemizedlist> - <listitem> - <para><varname>DATADIR</varname> wird expandiert zu - <filename>PREFIX/share/PORTNAME</filename>.</para> - </listitem> - - <listitem> - <para><varname>DATADIR_REL</varname> wird expandiert zu - <filename>share/PORTNAME</filename>.</para> - </listitem> - - <listitem> - <para><varname>DOCSDIR</varname> wird expandiert zu - <filename>PREFIX/share/doc/PORTNAME</filename>.</para> - </listitem> - - <listitem> - <para><varname>DOCSDIR_REL</varname> wird expandiert zu - <filename>share/doc/PORTNAME</filename>.</para> - </listitem> - - <listitem> - <para><varname>EXAMPLESDIR</varname> wird expandiert zu - <filename>PREFIX/share/examples/PORTNAME</filename>.</para> - </listitem> - - <listitem> - <para><varname>EXAMPLESDIR_REL</varname> wird expandiert zu - <filename>share/examples/PORTNAME</filename>.</para> - </listitem> - </itemizedlist> - - <note> - <para><varname>NOPORTDOCS</varname> behandelt nur - zusätzliche Dokumentation, die in - <varname>DOCSDIR</varname> installiert ist. - Für normale Manualpages und Info-Seiten - wird die Variable benutzt. - Dinge, welche in <varname>DATADIR</varname> - und <varname>EXAMPLESDIR</varname> installiert werden, - legen die Variablen <varname>NOPORTDATA</varname> und - <varname>NOPORTEXAMPLES</varname> fest.</para> - </note> - - <para>Die Variablen werden nach <varname>PLIST_SUB</varname> - exportiert. Ihre Werte erscheinen dort als Pfadnamen relativ - zu <filename>PREFIX</filename>, - falls möglich. Das bedeutet, dass - <filename>share/doc/PORTNAME</filename> - standardmässig ersetzt wird durch - <literal>%%DOCSDIR%%</literal> in der Packliste usw. - (mehr zur Ersetzung durch die - <filename>pkg-plist</filename> finden Sie - <link linkend="plist-sub">hier</link>).</para> - - <para>Alle installierten Dokumentationsdateien - und –Verzeichnisse - sollten in der <filename>pkg-plist</filename> dem - <literal>%%PORTDOCS%%</literal>-Präfix - enthalten sein, zum Beispiel:</para> - - <programlisting>%%PORTDOCS%%%%DOCSDIR%%/AUTHORS -%%PORTDOCS%%%%DOCSDIR%%/CONTACT -%%PORTDOCS%%@dirrm %%DOCSDIR%%</programlisting> - - <para>Alternativ zur Auflistung der Dokumentationsdateien in - der <filename>pkg-plist</filename> kann in einem Port auch - die Variable <varname>PORTDOCS</varname> gesetzt werden - für eine Liste von Dateien und Shell-Globs, um diese - zur endgültigen Packliste hinzuzufügen. Die Namen - werden relativ zur Variable <varname>DOCSDIR</varname> sein. - Wenn Sie also einen Port haben, welcher - <varname>PORTDOCS</varname> benutzt, und Sie haben eine vom - Standard abweichenden Platz für seine Dokumentation, - dann müssen Sie die Variable <varname>DOCSDIR</varname> - entsprechend setzen. Wenn ein Verzeichnis in - <varname>PORTDOCS</varname> aufgeführt ist, oder von - einem Shell-Glob dieser Variable abgebildet wird, dann wird - der komplette Verzeichnisbaum inklusive Dateien und - Verzeichnissen in der endgültigen Packliste - aufgenommen. Wenn die Variable <varname>NOPORTDOCS</varname> - gesetzt ist, dann werden die Dateien und Verzeichnisse, - die in <varname>PORTDOCS</varname> aufgelistet sind, - nicht installiert und werden auch nicht zur Packliste des - Ports hinzugefügt. Wie oben gezeigt bleibt es dem Port - selbst überlassen, die Dokumentation in - <varname>PORTDOCS</varname> zu installieren. Ein typisches - Beispiel für den Gebrauch von - <varname>PORTDOCS</varname> sieht wie folgt aus:</para> - - <programlisting>PORTDOCS= README.* ChangeLog docs/*</programlisting> - - <note> - <para>Die Äquivalente zu <varname>PORTDOCS</varname> - für unter <varname>DATADIR</varname> und - <varname>EXAMPLESDIR</varname> installierte Dateien sind - <varname>PORTDATA</varname> beziehungsweise - <varname>PORTEXAMPLES</varname>.</para> - - <para>Sie können auch <filename>pkg-message</filename> - benutzen, um Meldungen während der Installation - anzuzeigen. Lesen Sie <link linkend="porting-message">diesen Abschnitt über den - Gebrauch von <filename>pkg-message</filename></link> - für weitere Details. - Die <filename>pkg-message</filename>-Datei muss nicht zur - <filename>pkg-plist</filename> hinzugefügt - werden.</para> - </note> - </sect2> - - <sect2 xml:id="install-subdirs"> - <title>Unterverzeichnisse mit PREFIX</title> - - <para>Lassen Sie den Port die Dateien in die richtigen - Unterverzeichnisse von <varname>PREFIX</varname> verteilen. - Einige Ports werfen alles in einen Topf und legen es im - Unterverzeichnis mit dem Namen des Ports ab, was falsch ist. - Ausserdem legen viele Ports alles ausser Binaries, - Header-Dateien und Manualpages in ein Unterverzeichnis - von <filename>lib</filename>, was natürlich auch nicht - der BSD-Philosophie entspricht und nicht gut funktioniert. - Viele der Dateien sollten in eines der folgenden - Verzeichnisse geschoben werden: <filename>etc</filename> - (Konfigurationsdateien), <filename>libexec</filename> - (intern gestartete Binärdateien), - <filename>sbin</filename> (Binärdateien für - Superuser/Manager), <filename>info</filename> - (Dokumentation für Info-Browser) oder - <filename>share</filename> (Architektur-unabhängige - Dateien). Lesen Sie hierzu &man.hier.7;; weitestgehend - greifen die Regeln für <filename>/usr</filename> auch - für <filename>/usr/local</filename>. Die Ausnahme sind - Ports, welche mit <quote>news</quote> aus dem USENET - arbeiten. In diesem Falle sollte - <filename>PREFIX/news</filename> - als Zielort für die Dateien benutzt werden.</para> - </sect2> - </sect1> - </chapter> - - <chapter xml:id="special"> - <title>Besonderheiten</title> - - <para>Es gibt einige Dinge mehr, die zu beachten sind, - wenn man einen Port erstellt. Dieser Abschnitt - erklärt die wichtigsten.</para> - - <sect1 xml:id="porting-shlibs"> - <title>Shared-Libraries</title> - - <para>Wenn Ihr Port eine oder mehrere Shared-Libraries - installiert, dann definieren Sie bitte eine - <varname>USE_LDCONFIG</varname> make-Variable, - die <filename>bsd.port.mk</filename> anweisen wird, - <literal>${LDCONFIG} -m</literal> auf das - Verzeichnis, in das die neue Library installiert wird - (normalerweise - <filename>PREFIX/lib</filename>), - während des - <buildtarget>post-install</buildtarget>-Targets anzuwenden, - um sie im Shared-Library-Cache zu registrieren. - Diese Variable, wenn definiert, wird auch dafür sorgen, - dass ein entsprechendes - <literal>@exec /sbin/ldconfig -m</literal> und - <literal>@unexec /sbin/ldconfig -R</literal>-Paar zu Ihrer - <filename>pkg-plist</filename>-Datei hinzugefügt wird, - sodass ein Benutzer, der das Paket installiert, die - Bibliothek danach sofort benutzen kann und das System nach - deren Deinstallation nicht glaubt, die Bibliothek wäre - noch da.</para> - - <programlisting>USE_LDCONFIG= yes</programlisting> - - <para>Wenn nötig, können Sie das Standardverzeichnis - außer Kraft setzen, indem Sie den - <varname>USE_LDCONFIG</varname> Wert auf eine Liste von - Verzeichnissen setzen, in die Shared Libraries installiert - werden sollen. Wenn Ihr Port z.B. diese Bibliotheken nach - <filename>PREFIX/lib/foo</filename> und - <filename>PREFIX/lib/bar</filename> - installiert, könnten Sie folgendes in Ihrem - <filename>Makefile</filename> benutzen:</para> - - <programlisting>USE_LDCONFIG= ${PREFIX}/lib/foo ${PREFIX}/lib/bar</programlisting> - - <para>Bitte überprüfen Sie dies genau. Oft ist das - überhaupt nicht nötig oder kann durch - <literal>-rpath</literal> oder das Setzen von - <envar>LD_RUN_PATH</envar> während des Linkens umgangen - werden (s. <package>lang/moscow_ml</package> für ein - Beispiel), oder durch einen Shell-Wrapper, der - <varname>LD_LIBRARY_PATH</varname> setzt, bevor er die - Binärdatei ausführt, wie es <package>www/seamonkey</package> tut.</para> - - <para>Wenn Sie 32-Bit Libraries auf 64-Bit Systemen - installieren, benutzen Sie stattdessen - <varname>USE_LDCONFIG32</varname>.</para> - - <para>Versuchen Sie Shared-Library-Versionsnummern im - <filename>libfoo.so.0</filename> Format zu halten. - Unser Runtime-Linker kümmert sich nur um die Major - (erste) Nummer.</para> - - <para>Wenn sich die Major-Library-Versionsnummer - während der Aktualisierung zu einer neuen - Portversion erhöht, sollte auch die - <varname>PORTREVISION</varname> aller Ports, die die - Shared-Library linken, erhöht werden, damit diese - mit der neuen Version der Bibliothek neu kompiliert - werden.</para> - </sect1> - - <sect1 xml:id="porting-restrictions"> - <title>Ports mit beschränkter Verbreitung</title> - - <para>Lizenzen variieren und manche geben Restriktionen vor, - wie die Applikation gepackt werden oder ob sie - gewinnorientiert verkauft werden kann, usw.</para> - - <important> - <para>Es liegt in Ihrer Verantwortung als Porter die - Lizenzbestimmungen der Software zu lesen und - sicherzustellen, dass das FreeBSD-Projekt nicht haftbar - gemacht wird für Lizenzverletzungen durch - Weiterverbreitung des Quelltextes oder kompilierter - Binaries über FTP/HTTP oder CD-ROM. Im Zweifelsfall - kontaktieren Sie bitte die &a.ports;.</para> - </important> - - <para>In solchen Situationen können die in den folgenden - Abschnitten beschriebenen Variablen gesetzt werden.</para> - - <sect2> - <title><varname>NO_PACKAGE</varname></title> - - <para>Diese Variable zeigt an, dass wir keine binären - Pakete dieser Applikation erzeugen dürfen - z.B. wenn - die Lizenz die Weiterverteilung von binären Paketen - oder Paketen verbietet, die aus verändertem Quelltext - erzeugt wurden.</para> - - <para>Die <varname>DISTFILES</varname> des Ports dürfen - allerdings frei über FTP/HTTP Mirrors - weiterverbreitet werden. Sie dürfen auch auf CD-ROM - (oder ähnlichen Medien) weiterverbreitet werden - es - sei denn, <varname>NO_CDROM</varname> ist ebenfalls - gesetzt.</para> - - <para><varname>NO_PACKAGE</varname> sollte auch benutzt - werden, wenn das binäre Paket nicht allgemein - brauchbar ist und die Applikation immer aus dem Quelltext - kompiliert werden sollte. - Zum Beispiel, wenn die Applikation konfigurierte - Informationen über den Rechner/Installationsort bei - der Installation einkompiliert bekommt, setzen Sie - <varname>NO_PACKAGE</varname>.</para> - - <para><varname>NO_PACKAGE</varname> sollte auf eine - Zeichenkette gesetzt werden, die den Grund beschreibt, - warum kein Paket erzeugt werden soll.</para> - </sect2> - - <sect2> - <title><varname>NO_CDROM</varname></title> - - <para>Diese Variable gibt an, dassobwohl wir binäre - Pakete erzeugen dürfen – wir weder - diese Pakete noch die <varname>DISTFILES</varname> des - Ports auf einer CD-ROM (oder ähnlichen Medien) - verkaufen dürfen. Die <varname>DISTFILES</varname> - des Ports dürfen allerdings immer noch auf FTP/HTTP - Mirrors.</para> - - <para>Wenn diese Variable und auch - <varname>NO_PACKAGE</varname> gesetzt ist, dann werden - nur die <varname>DISTFILES</varname> des Ports - erhältlich sein – und das nur - mittels FTP/HTTP.</para> - - <para><varname>NO_CDROM</varname> sollte auf eine - Zeichenkette gesetzt werden, die den Grund beschreibt, - warum der Port nicht auf CD-ROM weiterverbreitet werden - kann. Das sollte z.B. gemacht werden, wenn die Lizenz - des Ports nur für - <quote>nichtkommerzielle Zwecke</quote> gilt.</para> - </sect2> - - <sect2> - <title><varname>NOFETCHFILES</varname></title> - - <para>Dateien, die in der Variable - <varname>NOFETCHFILES</varname> aufgelistet sind, - sind von keiner der <varname>MASTER_SITES</varname> - abrufbar. Ein Beispiel solch einer Datei ist eine selbige, - welche vom Anbieter auf CD-ROM bereitgestellt wird.</para> - - <para>Werkzeuge, die das Vorhandensein dieser Dateien auf - den <varname>MASTER_SITES</varname> - überprüfen, sollten diese Dateien - ignorieren und sie nicht melden.</para> - </sect2> - - <sect2> - <title><varname>RESTRICTED</varname></title> - - <para>Setzen Sie diese Variable, wenn die Lizenz der - Applikation weder das Spiegeln der - <varname>DISTFILES</varname> der Applikation noch - das Weiterverbreiten von binären Paketen in - jedweder Art erlaubt.</para> - - <para><varname>NO_CDROM</varname> oder - <varname>NO_PACKAGE</varname> sollten nicht zusammen - mit <varname>RESTRICTED</varname> gesetzt werden, weil - letztere Variable die anderen beiden impliziert.</para> - - <para><varname>RESTRICTED</varname> sollte auf eine - Zeichenkette gesetzt werden, die den Grund beschreibt, - warum der Port nicht weiterverbreitet werden kann. - Typischerweise besagt dies, dass der Port proprietäre - Software enthält und der Benutzer die - <varname>DISTFILES</varname> manuell herunterladen - muss – möglicherweise erst nachdem - er sich für die Software registriert oder die - Bedingungen eines Endbenutzer-Lizenzvertrags - (<acronym>EULA</acronym>) akzeptiert hat.</para> - </sect2> - - <sect2> - <title><varname>RESTRICTED_FILES</varname></title> - - <para>Wenn <varname>RESTRICTED</varname> oder - <varname>NO_CDROM</varname> gesetzt ist, ist diese - Variable auf <literal>${DISTFILES} - ${PATCHFILES}</literal> voreingestellt, sonst ist sie - leer. Wenn nicht jede dieser Dateien beschränkt ist, - dann führen Sie die betroffenen Dateien in dieser - Variable auf.</para> - - <para>Beachten Sie, dass der Porter für jede - aufgeführte Distributionsdatei einen Eintrag zu - <filename>/usr/ports/LEGAL</filename> hinzufügen - sollte, der genau beschreibt, was die Beschränkung - mit sich bringt.</para> - </sect2> - </sect1> - - <sect1 xml:id="building"> - <title>Build-Mechanismen</title> - - <sect2 xml:id="parallel-builds"> - <title>Paralleles Bauen von Ports</title> - - <para>Das Ports-Framework von &os; unterstützt das - parallele Bauen von Ports, indem es mehrere - <command>make</command>-Instanzen ausführt, damit - <acronym>SMP</acronym>-Systeme ihre gesamte - <acronym>CPU</acronym>-Rechenleistung ausnützen - können und so das Bauen von Ports schneller und - effektiver werden kann.</para> - - <para>Dies ermöglicht der Parameter - <varname>-jX</varname> an &man.make.1;, wenn Code von - Drittanbietern kompiliert wird. Leider können nicht - alle Ports wirklich gut mit dem Parallelbau umgehen. - Deshalb ist es erforderlich, dass dieses Feature explizit - durch <literal>MAKE_JOBS_SAFE=yes</literal> irgendwo - unterhalb des Abschnitts für Abhängigkeiten im - <filename>Makefile</filename> aktiviert wird.</para> - - <para>Eine weitere Möglichkeit im Umgang mit dieser - Option besteht für den Maintainer darin, - <varname>MAKE_JOBS_UNSAFE=yes</varname> zu setzen. Diese - Variable wird dann verwendet, wenn ein Port bekannterweise - mit <varname>-jX</varname> nicht gebaut werden kann, der - Benutzer jedoch für alle Ports den Mehrprozessorbau - durch <literal>FORCE_MAKE_JOBS=yes</literal> in - <filename>/etc/make.conf</filename> erzwingt.</para> - </sect2> - - <sect2 xml:id="using-make"> - <title><command>make</command>, <command>gmake</command> - und <command>imake</command></title> - - <para>Wenn Ihr Port <application>GNU make</application> - benutzt, dann setzen Sie bitte - <literal>USE_GMAKE=yes</literal>.</para> - - <table frame="none"> - <title>Port-Variablen im Zusammenhang mit - <application>gmake</application></title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Variable</entry> - - <entry>Bedeutung</entry> - </row> - </thead> - - <tbody> - <row> - <entry><varname>USE_GMAKE</varname></entry> - - <entry>Der Port benötigt <command>gmake</command> - für den Build.</entry> - </row> - - <row> - <entry><varname>GMAKE</varname></entry> - - <entry>Der ganze Pfad zu <command>gmake</command>, - wenn es nicht im <envar>PATH</envar> ist.</entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Wenn Ihr Port eine X-Applikation ist, die - <filename>Makefile</filename>-Dateien aus - <filename>Imakefile</filename>-Dateien mit - <application>imake</application> erzeugt, dann setzen Sie - <literal>USE_IMAKE=yes</literal>. Das sorgt dafür, - dass die Konfigurationsphase automatisch ein - <command>xmkmf -a</command> ausführt. - Wenn das Flag <option>-a</option> ein Problem für - Ihren Port darstellt, setzen Sie - <literal>XMKMF=xmkmf</literal>. Wenn der Port - <application>imake</application> benutzt, aber das - <buildtarget>install.man</buildtarget>-Target nicht versteht, - dann sollte <literal>NO_INSTALL_MANPAGES=yes</literal> - gesetzt werden.</para> - - <para>Wenn das <filename>Makefile</filename> - im Quelltext Ihres Ports etwas anderes als - <buildtarget>all</buildtarget> als Haupt-Build-Target - hat, setzen Sie <varname>ALL_TARGET</varname> - entsprechend. Das Gleiche gilt für - <buildtarget>install</buildtarget> und - <varname>INSTALL_TARGET</varname>.</para> - </sect2> - - <sect2 xml:id="using-configure"> - <title><command>configure</command> Skript</title> - - <para>Wenn Ihr Port ein <command>configure</command>-Skript - benutzt, um <filename>Makefile</filename>-Dateien aus - <filename>Makefile.in</filename>-Dateien zu erzeugen, - setzen Sie <literal>GNU_CONFIGURE=yes</literal>. - Wenn Sie dem <command>configure</command>-Skript - zusätzliche Argumente übergeben wollen (das - Vorgabeargument ist <literal>--prefix=${PREFIX} - --infodir=${PREFIX}/${INFO_PATH} - --mandir=${MANPREFIX}/man - --build=${CONFIGURE_TARGET}</literal>), setzen Sie diese - zusätzlichen Argumente in - <varname>CONFIGURE_ARGS</varname>. - Zusätzliche Umgebungsvariablen können - überdie Variable <varname>CONFIGURE_ENV</varname> - übergeben werden.</para> - - <table frame="none"> - <title>Variablen für Ports, die - <command>configure</command> benutzen</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Variable</entry> - - <entry>Bedeutung</entry> - </row> - </thead> - - <tbody> - <row> - <entry><varname>GNU_CONFIGURE</varname></entry> - - <entry>Der Port benutzt ein - <command>configure</command>-Skript, um das Bauen - vorzubereiten.</entry> - </row> - - <row> - <entry><varname>HAS_CONFIGURE</varname></entry> - - <entry>Wie <varname>GNU_CONFIGURE</varname>, nur - dass kein Standard-Konfigurations-Target zu - <varname>CONFIGURE_ARGS</varname> hinzugefügt - wird.</entry> - </row> - - <row> - <entry><varname>CONFIGURE_ARGS</varname></entry> - - <entry>Zusätzliche Argumente für das - <command>configure</command>-Skript.</entry> - </row> - - <row> - <entry><varname>CONFIGURE_ENV</varname></entry> - - <entry>Zusätzliche Umgebungsvariablen - für die Abarbeitung des - <command>configure</command>-Skriptes.</entry> - </row> - - <row> - <entry><varname>CONFIGURE_TARGET</varname></entry> - - <entry>Ersetzt das Standard-Konfigurations-Target. - Vorgabewert ist - <literal>${MACHINE_ARCH}-portbld-freebsd${OSREL}</literal>.</entry> - </row> - </tbody> - </tgroup> - </table> - </sect2> - - <sect2 xml:id="using-scons"> - <title>Benutzung von <command>scons</command></title> - - <para>Wenn Ihr Port <application>SCons</application> - benutzt, definieren Sie - <literal>USE_SCONS=yes</literal>.</para> - - <table frame="none"> - <title>Variablen für Ports, die - <command>scons</command> benutzen</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Variable</entry> - - <entry>Bedeutung</entry> - </row> - </thead> - - <tbody> - <row> - <entry><varname>SCONS_ARGS</varname></entry> - - <entry>Port-spezifische SCons-Argumente, die der - SCons-Umgebung übergeben werden.</entry> - </row> - - <row> - <entry><varname>SCONS_BUILDENV</varname></entry> - - <entry>Variablen, die in der System-Umgebung - gesetzt werden sollen.</entry> - </row> - - <row> - <entry><varname>SCONS_ENV</varname></entry> - - <entry>Variablen, die in der SCons-Umgebung - gesetzt werden sollen.</entry> - </row> - - <row> - <entry><varname>SCONS_TARGET</varname></entry> - - <entry>Letztes Argument, das SCons übergeben - wird – ähnlich - <varname>MAKE_TARGET</varname>.</entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Um <filename>SConstruct</filename> im Quelltext alles, - was SCons in <varname>SCONS_ENV</varname> übergeben - wird, respektieren zu lassen (das ist hauptsächlich - <varname>CC/CXX/CFLAGS/CXXFLAGS</varname>), patchen Sie - <filename>SConstruct</filename>, sodass das Build - <literal>Environment</literal> wie folgt konstruiert - wird:</para> - - <programlisting>env = Environment(**ARGUMENTS)</programlisting> - - <para>Es kann dann mit <literal>env.Append</literal> und - <literal>env.Replace</literal> modifiziert werden.</para> - </sect2> - </sect1> - - <sect1 xml:id="using-autotools"> - <title>Benutzung von GNU autotools</title> - - <sect2 xml:id="using-autotools-introduction"> - <title>Einführung</title> - - <para>Die verschiedenen GNU autotools stellen einen - Abstraktionsmechanismus bereit für das Kompilieren - von Software für eine Vielfalt von Betriebssystemen - und Maschinenarchitekturen. Innerhalb der Ports-Sammlung - kann ein einzelner Port diese Werkzeuge mit Hilfe eines - einfachen Konstrukts benutzen:</para> - - <programlisting>USE_AUTOTOOLS= <replaceable>tool</replaceable>:<replaceable>version</replaceable>[:<replaceable>operation</replaceable>] ...</programlisting> - - <para>Als dies geschrieben wurde konnte - <replaceable>tool</replaceable> eins von - <literal>libtool</literal>, <literal>libltdl</literal>, - <literal>autoconf</literal>, - <literal>autoheader</literal>, - <literal>automake</literal> oder - <literal>aclocal</literal> sein.</para> - - <para><replaceable>version</replaceable> gibt die einzelne - Werkzeug-Revision an, die benutzt werden soll (siehe - <literal>devel/{automake,autoconf,libtool}[0-9]+</literal> - für mögliche Versionen).</para> - - <para><replaceable>operation</replaceable> ist eine - optionale Angabe, die modifiziert, wie das Werkzeug - benutzt wird.</para> - - <para>Es können auch mehrere Werkzeuge angegeben - werden – entweder durch Angabe aller in - einer einzigen Zeile oder durch Benutzung des - <literal>+=</literal> Makefile-Konstrukts.</para> - - <para>Schliesslich gibt es das spezielle Tool, genannt - <literal>autotools</literal>, das der Einfachheit dient - indem es von alle verfügbaren Versionen der Autotools - abhängt, was sinnvoll für Cross-Development ist. - Dies kann auch erreicht werden, indem man den Port - <literal>devel/autotools</literal> installiert.</para> - </sect2> - - <sect2 xml:id="using-libtool"> - <title><command>libtool</command></title> - - <para>Shared-Libraries, die das GNU Build-System benutzen, - verwenden normalerweise - <command>libtool</command>, um die Kompilierung und - Installation solcher Bibliotheken anzupassen. - Die übliche Praxis ist, eine Kopie von - <command>libtool</command>, die mit dem Quelltext - geliefert wird, zu benutzen. Falls Sie ein externes - <command>libtool</command> benötigen, können - Sie die Version, die von der Ports-Sammlung bereitgestellt - wird, benutzen:</para> - - <programlisting>USE_AUTOTOOLS= libtool:<replaceable>version</replaceable>[:env]</programlisting> - - <para>Ohne zusätzliche Angaben sagt - <literal>libtool:version - </literal> dem Build-System, dass es das - Konfigurationsskript mit der auf dem System - installierten Kopie von <command>libtool</command> - patchen soll. - Die Variable <varname>GNU_CONFIGURE</varname> ist - impliziert. Außerdem werden einige - make– und shell-Variablen zur - weiteren Benutzung durch den Port gesetzt. - Für Genaueres siehe - <filename>bsd.autotools.mk</filename>.</para> - - <para>Mit der Angabe <literal>:env</literal> wird nur die - Umgebung vorbereitet.</para> - - <para>Schließlich können optional - <varname>LIBTOOLFLAGS</varname> und - <varname>LIBTOOLFILES</varname> gesetzt werden, um die - häufigsten Argumente und durch - <command>libtool</command> gepatchten Dateien außer - Kraft zu setzen. Die meisten Ports werden das aber nicht - brauchen. Für Weiteres siehe - <filename>bsd.autotools.mk</filename>.</para> - </sect2> - - <sect2 xml:id="using-libltdl"> - <title><command>libltdl</command></title> - - <para>Einige Ports benutzen das - <command>libltdl</command>-Bibliothekspaket, - welches Teil der <command>libtool</command>-Suite ist. - Der Gebrauch dieser Bibliothek macht nicht automatisch - den Gebrauch von <command>libtool</command> selbst - nötig, deshalb wird ein separates Konstrukt zur - Verfügung gestellt.</para> - - <programlisting>USE_AUTOTOOLS= libltdl:<replaceable>version</replaceable></programlisting> - - <para>Im Moment sorgt dies nur für eine - <varname>LIB_DEPENDS</varname>-Abhängigkeit von dem - entsprechenden <command>libltdl</command>-Port und wird - zur Vereinfachung zur Verfügung gestellt, - um Abhängigkeiten von den Autotools-Ports - ausserhalb des <varname>USE_AUTOTOOLS</varname>-Systems - zu eliminieren. Es gibt keine weiteren Angaben für - dieses Werkzeug.</para> - </sect2> - - <sect2 xml:id="using-autoconf"> - <title><command>autoconf</command> und - <command>autoheader</command></title> - - <para>Manche Ports enthalten kein Konfigurationsskript, - sondern eine autoconf-Vorlage in der - <filename>configure.ac</filename>-Datei. - Sie können die folgenden Zuweisungen benutzen, - um <command>autoconf</command> das Konfigurationsskript - erzeugen zu lassen, und auch <command>autoheader</command> - Header-Vorlagen zur Benutzung durch das - Konfigurationsskript erzeugen zu lassen.</para> - - <programlisting>USE_AUTOTOOLS= autoconf:<replaceable>version</replaceable>[:env]</programlisting> - - <para>und</para> - - <programlisting>USE_AUTOTOOLS= autoheader:<replaceable>version</replaceable></programlisting> - - <para>welches auch die Benutzung von - <literal>autoconf:version - </literal> impliziert.</para> - - <para>Ähnlich wie bei <command>libtool</command>, - bereitet die Angabe des optionalen - <literal>:env</literal> nur die Umgebung für weitere - Benutzung vor. Ohne dieses wird der Port auch gepatched - und erneut konfiguriert.</para> - - <para>Die zusätzlichen optionalen Variablen - <varname>AUTOCONF_ARGS</varname> und - <varname>AUTOHEADER_ARGS</varname> können durch das - <filename>Makefile</filename> des Ports ausser Kraft - gesetzt werden, wenn erforderlich. Wie bei den - <command>libtool</command>-Äquivalenten werden die - meisten Ports dies aber nicht benötigen.</para> - </sect2> - - <sect2 xml:id="using-automake"> - <title><command>automake</command> und - <command>aclocal</command></title> - - <para>Manche Pakete enthalten nur - <filename>Makefile.am</filename>-Dateien. Diese - müssen durch <command>automake</command> in - <filename>Makefile.in</filename>-Dateien konvertiert - und dann durch <command>configure</command> - weiterbearbeitet werden, um schließlich ein - <filename>Makefile</filename> zu erzeugen.</para> - - <para>Ähnliches gilt für Pakete, die gelegentlich - keine <filename>aclocal.m4</filename>-Dateien mitliefern, - welche ebenfalls zum Erstellen der Software benötigt - werden. Diese können durch <command>aclocal</command> - erzeugt werden, welches <filename>configure.ac</filename> - oder <filename>configure.in</filename> durchsucht.</para> - - <para><command>aclocal</command> hat eine ähnliche - Beziehung zu <command>automake</command> wie - <command>autoheader</command> zu - <command>autoconf</command> – beschrieben - im vorherigen Abschnitt. <command>aclocal</command> - impliziert die Benutzung von <command>automake</command>, - also haben wir:</para> - - <programlisting>USE_AUTOTOOLS= automake:<replaceable>version</replaceable>[:<replaceable>env</replaceable>]</programlisting> - - <para>und</para> - - <programlisting>USE_AUTOTOOLS= aclocal:<replaceable>version</replaceable></programlisting> - - <para>was auch die Benutzung von <literal> - automake:version</literal> - impliziert.</para> - - <para>Ähnlich wie bei <command>libtool</command> und - <command>autoconf</command>, bereitet die optionale Angabe - <literal>:env</literal> nur die Umgebung zur weiteren - Benutzung vor. Ohne sie wird der Port erneut - konfiguriert.</para> - - <para>Wie schon <command>autoconf</command> und - <command>autoheader</command>, hat sowohl - <command>automake</command> als auch - <command>aclocal</command> eine optionale - Argument-Variable <varname>AUTOMAKE_ARGS</varname> - bzw. <varname>ACLOCAL_ARGS</varname>, die durch das - <filename>Makefile</filename> des Ports, falls nötig, - außer Kraft gesetzt werden kann.</para> - </sect2> - </sect1> - - <sect1 xml:id="using-gettext"> - <title>Benutzung von GNU <literal>gettext</literal></title> - - <sect2> - <title>Grundlegende Benutzung</title> - - <para>Wenn Ihr Port <literal>gettext</literal> - benötigt, setzen Sie einfach - <varname>USE_GETTEXT</varname> auf <literal>yes</literal>, - und Ihr Port bekommt die Abhängigkeit von <package>devel/gettext</package>. Der Wert von - <varname>USE_GETTEXT</varname> kann auch die - benötigte Version der - <literal>libintl</literal>-Bibliothek angeben, der - grundlegenden Teil von - <literal>gettext</literal> – jedoch - wird von der Benutzung dieser Funktion - <emphasis>dringend abgeraten</emphasis>: - Ihr Port sollte einfach nur mit der aktuellen Version von - <package>devel/gettext</package> - funktionieren.</para> - - <para>Ein ziemlich häufiger Fall ist, dass ein Port - <literal>gettext</literal> und - <command>configure</command> benutzt. Normalerweise sollte - GNU <command>configure</command> - <literal>gettext</literal> automatisch finden können. - Sollte das einmal nicht funktionieren, können - Hinweise über den Ort von <literal>gettext</literal> - in <envar>CPPFLAGS</envar> und <envar>LDFLAGS</envar> wie - folgt übergeben werden:</para> - - <programlisting>USE_GETTEXT= yes -CPPFLAGS+= -I${LOCALBASE}/include -LDFLAGS+= -L${LOCALBASE}/lib - -GNU_CONFIGURE= yes -CONFIGURE_ENV= CPPFLAGS="${CPPFLAGS}" \ - LDFLAGS="${LDFLAGS}"</programlisting> - - <para>Natürlich kann der Code kompakter sein, - wenn es keine weiteren Flags gibt, die - <command>configure</command> übergeben werden - müssen:</para> - - <programlisting>USE_GETTEXT= yes -GNU_CONFIGURE= yes -CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include" \ - LDFLAGS="-L${LOCALBASE}/lib"</programlisting> - </sect2> - - <sect2> - <title>Optionale Benutzung</title> - - <para>Manche Softwareprodukte erlauben die Deaktivierung - von NLS - z.B. durch Übergeben von - <option>--disable-nls</option> an - <command>configure</command>. In diesem Fall sollte Ihr - Port <literal>gettext</literal> abhängig vom Status - von <link linkend="knobs-without-nls"><varname>WITHOUT_NLS</varname></link> - benutzen. Für Ports mit niedriger bis mittlerer - Komplexität können Sie sich auf das folgende - Idiom verlassen:</para> - - <programlisting>GNU_CONFIGURE= yes - -.if !defined(WITHOUT_NLS) -USE_GETTEXT= yes -PLIST_SUB+= NLS="" -.else -CONFIGURE_ARGS+= --disable-nls -PLIST_SUB+= NLS="@comment " -.endif</programlisting> - - <para>Der nächste Punkt auf Ihrer Todo-Liste ist - dafür zu sorgen, dass die Message-Catalog-Dateien - nur bedingt in der Packliste aufgeführt werden. Der - <filename>Makefile</filename>-Teil dieser Aufgabe ist - schon durch obiges Idiom erledigt. - Das wird im Abschnitt über <link linkend="plist-sub">Fortgeschrittene - <filename>pkg-plist</filename>-Methoden</link> - erklärt. - Kurz gesagt, jedes Vorkommen von - <literal>%%NLS%%</literal> in - <filename>pkg-plist</filename> wird durch - <quote><literal>@comment </literal></quote>, wenn NLS - abgeschaltet ist, oder durch eine leere Zeichenkette, - wenn NLS aktiviert ist, ersetzt. Folglich werden die - Zeilen, denen <literal>%%NLS%%</literal> vorangestellt - ist, zu reinen Kommentaren in der endgültigen - Packliste, wenn NLS abgeschaltet ist; - andernfalls wird der Prefix einfach nur ausgelassen. - Alles, was Sie jetzt noch machen müssen, ist - <literal>%%NLS%%</literal> vor jedem Pfad zu einer - Message-Catalog-Datei in <filename>pkg-plist</filename> - einzufügen. Zum Beispiel:</para> - - <programlisting>%%NLS%%share/locale/fr/LC_MESSAGES/foobar.mo -%%NLS%%share/locale/no/LC_MESSAGES/foobar.mo</programlisting> - - <para>In sehr komplexen Fällen müssen Sie - eventuell fortgeschrittenere Techniken als die hier - vorgestellte benutzen - wie z.B. <link linkend="plist-dynamic">Dynamische - Packlistenerzeugung</link>.</para> - </sect2> - - <sect2> - <title>Behandlung von Message-Catalog-Verzeichnissen</title> - - <para>Bei der Installation von Message-Catalog-Dateien - gibt es einen Punkt zu beachten. Ihr Zielverzeichnis, - das unter <filename> - LOCALBASE/share/locale</filename> - liegt, sollte nur selten von Ihrem Port erzeugt und - gelöscht werden. Die Verzeichnisse für die - gebräuchlichsten Sprachen sind in - <filename>/etc/mtree/BSD.local.dist</filename> - aufgelistet; das heisst, sie sind Teil des Systems. - Die Verzeichnisse für viele andere Sprachen sind - Teil des Ports <package>devel/gettext</package>. Sie wollen - vielleicht dessen <filename>pkg-plist</filename> - zur Hand nehmen, um festzustellen, ob Ihr Port eine - Message-Catalog-Datei für eine seltene Sprache - installiert.</para> - </sect2> - </sect1> - - <sect1 xml:id="using-perl"> - <title>Die Benutzung von <literal>perl</literal></title> - - <para>Wenn <varname>MASTER_SITES</varname> auf - <varname>MASTER_SITE_PERL_CPAN</varname> gesetzt ist, - dann ist der bevorzugte Wert von - <varname>MASTER_SITE_SUBDIR</varname> der Top-Level-Name - der Hierarchie. Zum Beispiel ist der empfohlene Wert - für - <literal>p5-Module-Name</literal>-<literal>Module</literal>. - Die Top-Level-Hierarchie kann unter <link xlink:href="http://cpan.org/modules/by-module/">cpan.org</link> - angeschaut werden. Dies sorgt dafür, dass der Port - weiter funktioniert, wenn sich der Autor des Moduls - ändert.</para> - - <para>Die Ausnahme dieser Regel ist, dass das entsprechende - Verzeichnis selber oder das Distfile in diesem Verzeichnis - nicht existiert. In solchen Fällen ist die Benutzung - der Id des Autors als <varname>MASTER_SITE_SUBDIR</varname> - erlaubt.</para> - - <para>Jede der Einstellungen unten kann sowohl auf - <literal>YES</literal> als auch auf eine - Versionszeichenkette wie <literal>5.8.0+</literal> gesetzt - werden. Wenn <literal>YES</literal> benutzt wird, bedeutet - das, dass der Port mit jeder der unterstützten - <application>Perl</application>-Versionen funktioniert. - Falls ein Port nur mit einer bestimmten - <application>Perl</application>-Version funktioniert, kann - darauf mit einer Versionszeichenkette hingewiesen werden, - die entweder eine Mindest- (z.B. <literal>5.7.3+</literal>), - Maximal- (z.B. <literal>5.8.0-</literal>) oder - Absolutversion (z.B. <literal>5.8.3</literal>) - festlegt.</para> - - <table frame="none"> - <title>Variablen für Ports, die <literal>perl</literal> - benutzen</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Variable</entry> - <entry>Bedeutung</entry> - </row> - </thead> - - <tbody> - <row> - <entry><varname>USE_PERL5</varname></entry> - <entry>Bedeutet, dass der Port <literal>perl 5</literal> - zum Erstellen und zum Ausführen benutzt.</entry> - </row> - - <row> - <entry><varname>USE_PERL5_BUILD</varname></entry> - <entry>Bedeutet, dass der Port <literal>perl 5</literal> - zum Erstellen benutzt.</entry> - </row> - - <row> - <entry><varname>USE_PERL5_RUN</varname></entry> - <entry>Bedeutet, dass der Port <literal>perl 5</literal> - zur Laufzeit benutzt.</entry> - </row> - - <row> - <entry><varname>PERL</varname></entry> - <entry>Der gesamte Pfad zu - <literal>perl 5</literal> – 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><varname>PERL_CONFIGURE</varname></entry> - <entry>Perls MakeMaker für die Konfiguration - benutzen. Dies impliziert - <varname>USE_PERL5</varname>.</entry> - </row> - - <row> - <entry><varname>PERL_MODBUILD</varname></entry> - <entry>Module::Build für configure, build und install - benutzen. Dies impliziert - <varname>PERL_CONFIGURE</varname>.</entry> - </row> - </tbody> - </tgroup> - - <tgroup cols="2"> - <thead> - <row> - <entry>Nur lesbare Variablen</entry> - <entry>Bedeutung</entry> - </row> - </thead> - - <tbody> - <row> - <entry><varname>PERL_VERSION</varname></entry> - <entry>Die volle Version des installierten - <literal>perl</literal> (z.B. - <literal>5.8.9</literal>).</entry> - </row> - - <row> - <entry><varname>PERL_LEVEL</varname></entry> - <entry>Die installierte <literal>perl</literal>-Version - als ein Integer der Form <literal>MNNNPP</literal> - (z.B. <literal>500809</literal>).</entry> - </row> - - <row> - <entry><varname>PERL_ARCH</varname></entry> - <entry>Wo <literal>perl</literal> architektur - abhängige Bibliotheken ablegt. Vorgabe ist - <literal>${ARCH}-freebsd</literal>.</entry> - </row> - - <row> - <entry><varname>PERL_PORT</varname></entry> - <entry>Name des <literal>perl</literal>-Ports, der - installiert ist (z.B. <literal>perl5</literal>).</entry> - </row> - - <row> - <entry><varname>SITE_PERL</varname></entry> - <entry>Verzeichnis, in das die Site-spezifischen - <literal>perl</literal>-Pakete kommen. Dieser Wert - wird zu PLIST_SUB hinzugefügt.</entry> - </row> - </tbody> - </tgroup> - </table> - - <note> - <para>Ports von Perl-Modulen, die keine offizielle - Webseite haben, sollen in der WWW-Zeile ihrer - <filename>pkg-descr</filename>-Datei auf - <systemitem>cpan.org</systemitem> verlinken. - Die bevorzugte URL-Form ist <literal> - http://search.cpan.org/dist/Module-Name/</literal> - (inklusive des Slash am Ende).</para> - </note> - </sect1> - - <sect1 xml:id="using-x11"> - <title>Benutzung von X11</title> - - <sect2 xml:id="x11-variables"> - <title>X.Org-Komponenten</title> - - <para>Die X11-Implementierung, welche die Ports-Sammlung - bereitstellt, ist X.Org. Wenn Ihre Applikation von - X-Komponenten abhängt, listen Sie die benötigten - Komponenten in <varname>USE_XORG</varname> auf. Als dies - geschrieben wurde, wurden die folgenden Komponenten - bereitgestellt:</para> - - <para><literal>bigreqsproto compositeproto damageproto dmx - dmxproto evieproto fixesproto fontcacheproto fontenc - fontsproto fontutil glproto ice inputproto kbproto libfs - oldx printproto randrproto recordproto renderproto - resourceproto scrnsaverproto sm trapproto videoproto x11 - xau xaw xaw6 xaw7 xaw8 xbitmaps xcmiscproto xcomposite - xcursor xdamage xdmcp xevie xext xextproto - xf86bigfontproto xf86dgaproto xf86driproto xf86miscproto - xf86rushproto xf86vidmodeproto xfixes xfont xfontcache xft - xi xinerama xineramaproto xkbfile xkbui xmu xmuu - xorg-server xp xpm xprintapputil xprintutil xpr oto - xproxymngproto xrandr xrender xres xscrnsaver xt xtrans - xtrap xtst xv xvmc xxf86dga xxf86misc - xxf86vm</literal>.</para> - - <para>Die aktuelle Liste finden Sie immer in - <filename>/usr/ports/Mk/bsd.xorg.mk</filename>.</para> - - <para>Das Mesa Projekt ist ein Versuch, eine freie OpenGL - Implementierung bereitzustellen. Sie können eine - Abhängigkeit von verschiedenen Komponenten diese - Projektes in der Variable <varname>USE_GL</varname> - spezifizieren. ouml;gliche Optionen sind: <literal>glut, - glu, glw, glew, gl</literal> und <literal>linux</literal>. - Für Abwärtskompatibilität gilt der - Wert <literal>yes</literal> als - <literal>glu</literal>.</para> - - <example xml:id="use-xorg-example"> - <title>Beispiel für USE_XORG</title> - - <programlisting>USE_XORG= xrender xft xkbfile xt xaw -USE_GL= glu</programlisting> - </example> - - <para>Viele Ports definieren <varname>USE_XLIB</varname>, - was dafür sorgt, dass der Port von allen (rund 50) - Bibliotheken abhängt. Diese Variable existiert, um - Abwärtskompatibilität sicherzustellen (sie - stammt noch aus der Zeit vor dem modularem X.Org), und - sollte bei neuen Ports nicht mehr benutzt werden.</para> - - <table frame="none"> - <title>Variablen für Ports, die X benutzen</title> - - <tgroup cols="2"> - <tbody> - - <row> - <entry><varname>USE_XLIB</varname></entry> - <entry>Der Port benutzt die X-Bibliotheken. Soll - nicht mehr verwendet werden - benutzen Sie - stattdessen eine Liste von Komponenten in - <varname>USE_XORG</varname>.</entry> - </row> - - <row> - <entry><varname>USE_X_PREFIX</varname></entry> - <entry>Soll nicht mehr benutzt werden, ist jetzt - äquivalent zu <varname>USE_XLIB</varname> und - kann einfach durch letzteres ersetzt - werden.</entry> - </row> - - <row> - <entry><varname>USE_IMAKE</varname></entry> - <entry>Der Port benutzt <command>imake</command>. - Impliziert <varname>USE_X_PREFIX</varname>.</entry> - </row> - - <row> - <entry><varname>XMKMF</varname></entry> - <entry>Ist auf den Pfad zu <command>xmkmf</command> - gesetzt, wenn nicht in <envar>PATH</envar>. Vorgabe - ist <literal>xmkmf -a</literal>.</entry> - </row> - </tbody> - </tgroup> - </table> - - <table frame="none"> - <title>Variablen bei Abhängigkeit von einzelnen - Teilen von X11</title> - - <tgroup cols="2"> - <tbody> - <row> - <entry><varname>X_IMAKE_PORT</varname></entry> - <entry>Ein Port, der <command>imake</command> und einige - andere Werkzeuge, die zum Erstellen von X11 benutzt - werden, bereitstellt.</entry> - </row> - - <row> - <entry><varname>X_LIBRARIES_PORT</varname></entry> - <entry>Ein Port, der die X11-Bibliotheken - bereitstellt.</entry> - </row> - - <row> - <entry><varname>X_CLIENTS_PORT</varname></entry> - <entry>Ein Port, der X11-Clients bereitstellt.</entry> - </row> - - <row> - <entry><varname>X_SERVER_PORT</varname></entry> - <entry>Ein Port, der den X11-Server bereitstellt.</entry> - </row> - - <row> - <entry><varname>X_FONTSERVER_PORT</varname></entry> - <entry>Ein Port, der den Fontserver bereitstellt.</entry> - </row> - - <row> - <entry><varname>X_PRINTSERVER_PORT</varname></entry> - <entry>Ein Port, der den Printserver bereitstellt.</entry> - </row> - - <row> - <entry><varname>X_VFBSERVER_PORT</varname></entry> - <entry>Ein Port, der den virtuellen Framebuffer-Server - bereitstellt.</entry> - </row> - - <row> - <entry><varname>X_NESTSERVER_PORT</varname></entry> - <entry>Ein Port, der einen nested X-Server - bereitstellt.</entry> - </row> - - <row> - <entry><varname>X_FONTS_ENCODINGS_PORT</varname></entry> - <entry>Ein Port, der Kodierungen für Schriftarten - bereitstellt.</entry> - </row> - - <row> - <entry><varname>X_FONTS_MISC_PORT</varname></entry> - <entry>Ein Port, der verschiedene Bitmap-Schriftarten - bereitstellt.</entry> - </row> - - <row> - <entry><varname>X_FONTS_100DPI_PORT</varname></entry> - <entry>Ein Port, der 100dpi Bitmap-Schriftarten - bereitstellt.</entry> - </row> - - <row> - <entry><varname>X_FONTS_75DPI_PORT</varname></entry> - <entry>Ein Port, der 75dpi Bitmap-Schriftarten - bereitstellt.</entry> - </row> - - <row> - <entry><varname>X_FONTS_CYRILLIC_PORT</varname></entry> - <entry>Ein Port, der kyrillische Bitmap-Schriftarten - bereitstellt.</entry> - </row> - - <row> - <entry><varname>X_FONTS_TTF_PORT</varname></entry> - <entry>Ein Port, der &truetype;-Schriftarten - bereitstellt.</entry> - </row> - - <row> - <entry><varname>X_FONTS_TYPE1_PORT</varname></entry> - <entry>Ein Port, der Type1-Schriftarten bereitstellt.</entry> - </row> - - <row> - <entry><varname>X_MANUALS_PORT</varname></entry> - <entry>Ein Port, der entwicklerorientierte Manualpages - bereitstellt.</entry> - </row> - </tbody> - </tgroup> - </table> - - <example xml:id="using-x11-vars"> - <title>Benutzung von X11-bezogenen Variablen in einem - Port</title> - - <programlisting># Port benutzt X11-Bibliotheken und hängt vom Font-Server sowie -# von kyrillischen Schriftarten ab. -RUN_DEPENDS= ${LOCALBASE}/bin/xfs:${X_FONTSERVER_PORT} \ - ${LOCALBASE}/lib/X11/fonts/cyrillic/crox1c.pcf.gz:${X_FONTS_CYRILLIC_PORT} - -USE_XORG= x11 xpm</programlisting> - </example> - </sect2> - - <sect2 xml:id="x11-motif"> - <title>Ports, die Motif benötigen</title> - - <para>Wenn Ihr Port eine Motif-Bibliothek benötigt, - definieren Sie <varname>USE_MOTIF</varname> im - <filename>Makefile</filename>. - Die Standard-Motif-Implementierung ist <package>x11-toolkits/open-motif</package>. - Benutzer können stattdessen <package>x11-toolkits/lesstif</package> wählen, - indem Sie die <varname>WANT_LESSTIF</varname>-Variable - setzen.</para> - - <para>Die Variable <varname>MOTIFLIB</varname> wird von - <filename>bsd.port.mk</filename> auf die entsprechende - Motif-Bibliothek gesetzt. Bitte patchen Sie den Quelltext - Ihres Ports, sodass er überall - <literal>${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: <varname>MOTIFLIB</varname> expandiert - (normalerweise) zu <literal>-L/usr/X11R6/lib - -lXm</literal> oder <literal>/usr/X11R6/lib/libXm.a - </literal> - d.h. Sie müssen kein - <literal>-L</literal> oder <literal>-l</literal> davor - einfügen.</para> - </sect2> - - <sect2> - <title>X11 Schriftarten</title> - - <para>Wenn Ihr Port Schriftarten für das - X-Window-System installiert, legen Sie diese nach - <filename> - LOCALBASE/lib/X11/fonts/local</filename>.</para> - </sect2> - - <sect2> - <title>Erzeugen eines künstlichen - <envar>DISPLAY</envar> durch Xvfb</title> - - <para>Manche Applikationen benötigen ein - funktionierendes X11-Display, damit die Kompilierung - funktioniert. Das stellt für Systeme, die ohne - Display laufen, ein Problem dar. Wenn die folgende - Variable benutzt wird, startet die Bauumgebung den - virtuellen Framebuffer-X-Server, und ein funktionierendes - <envar>DISPLAY</envar> wird dem Build - übergeben.</para> - - <programlisting>USE_DISPLAY= yes</programlisting> - </sect2> - - <sect2 xml:id="desktop-entries"> - <title>Desktop-Einträge</title> - - <para>Desktop-Einträge (<link xlink:href="http://standards.freedesktop.org/desktop-entry-spec/latest/">Freedesktop - Standard</link>) können in Ihrem Port einfach - über die <varname>DESKTOP_ENTRIES</varname>-Variable - erzeugt werden. Diese Einträge erscheinen dann im - Applikationsmenü von standardkonformen - Desktop-Umgebungen wie GNOME oder KDE. Die - <filename>.desktop</filename>-Datei wird dann - automatisch erzeugt, installiert und der - <filename>pkg-plist</filename> hinzugefügt. - Die Syntax ist:</para> - - <programlisting>DESKTOP_ENTRIES= "NAME" "COMMENT" "ICON" "COMMAND" "CATEGORY" StartupNotify</programlisting> - - <para>Die Liste der möglichen Kategorien ist auf der - <link xlink:href="http://standards.freedesktop.org/menu-spec/latest/apa.html">Freedesktop - Webseite</link> abrufbar. - <varname>StartupNotify</varname> zeigt an, ob die - Applikation den Status in Umgebungen, die - Startup-Notifications kennen, löschen wird.</para> - - <para>Beispiel:</para> - - <programlisting>DESKTOP_ENTRIES= "ToME" "Roguelike game based on JRR Tolkien's work" \ - "${DATADIR}/xtra/graf/tome-128.png" \ - "tome -v -g" "Application;Game;RolePlaying;" \ - false</programlisting> - </sect2> - </sect1> - - <sect1 xml:id="using-gnome"> - <title>Benutzung von GNOME</title> - - <para>Das FreeBSD/GNOME-Projekt benutzt seine eigene - Gruppe von Variablen, um zu definieren, welche - GNOME-Komponenten ein bestimmter Port benutzt. Eine - <link xlink:href="http://www.FreeBSD.org/gnome/docs/porting.html"> - umfassende Liste dieser Variablen</link> existiert innerhalb - der Webseite des FreeBSD/GNOME-Projektes.</para> - </sect1> - - <sect1 xml:id="using-qt"> - <title>Benutzung von Qt</title> - - <sect2 xml:id="qt-common"> - <title>Ports, die Qt benötigen</title> - - <table frame="none"> - <title>Variablen für Ports, die Qt - benötigen</title> - - <tgroup cols="2"> - <tbody> - <row> - <entry><varname>USE_QT_VER</varname></entry> - <entry>Der Port benutzt das Qt-Toolkit. Mögliche - Werte sind <literal>3</literal> und - <literal>4</literal>; diese spezifizieren die Major - Version von Qt, die benutzt werden soll. - Entsprechende Parameter werden an das - <command>configure</command>-Skript und - <command>make</command> übergeben.</entry> - </row> - - <row> - <entry><varname>QT_PREFIX</varname></entry> - <entry>Enthält den Pfad, wohin Qt installiert ist - (nur lesbare Variable).</entry> - </row> - - <row> - <entry><varname>MOC</varname></entry> - <entry>Enthält den Pfad von <command>moc</command> - (nur lesbare Variable). Voreingestellt entsprechend des - <varname>USE_QT_VER</varname>-Werts.</entry> - </row> - - <row> - <entry><varname>QTCPPFLAGS</varname></entry> - <entry>Zusätzliche Compiler-Flags, die über - <varname>CONFIGURE_ENV</varname> an das Qt-Toolkit - übergeben werden. Voreingestellt entsprechend des - <varname>USE_QT_VER</varname>-Wertes.</entry> - </row> - - <row> - <entry><varname>QTCFGLIBS</varname></entry> - <entry>Zusätzliche Bibliotheken, die über - <varname>CONFIGURE_ENV</varname> für das Qt-Toolkit - gelinkt werden sollen. Voreingestellt entsprechend des - <varname>USE_QT_VER</varname>-Wertes.</entry> - </row> - - <row> - <entry><varname>QTNONSTANDARD</varname></entry> - <entry>Änderungen von - <varname>CONFIGURE_ENV</varname>, - <varname>CONFIGURE_ARGS</varname> und - <varname>MAKE_ENV</varname> sollen unterdrückt - werden.</entry> - </row> - </tbody> - </tgroup> - </table> - - <table frame="none"> - <title>Zusätzliche Variablen für Ports, - die Qt 4.xi benutzen</title> - - <tgroup cols="2"> - <tbody> - <row> - <entry><varname>QT_COMPONENTS</varname></entry> - <entry>Spezifiziert Tool– und - Bibliothek-Abhängigkeiten für Qt4. - Siehe unten für Details.</entry> - </row> - - <row> - <entry><varname>UIC</varname></entry> - <entry>Enthält den Pfad von <command>uic</command> - (nur lesbare Variable). Voreingestellt entsprechend des - <varname>USE_QT_VER</varname>-Wertes.</entry> - </row> - - <row> - <entry><varname>QMAKE</varname></entry> - <entry>Enthält den Pfad von <command>qmake</command> - (nur lesbare Variable). Voreingestellt entsprechend des - <varname>USE_QT_VER</varname>-Wertes.</entry> - </row> - - <row> - <entry><varname>QMAKESPEC</varname></entry> - <entry>Enthält den Pfad der Konfigurationsdatei - für <command>qmake</command> - (nur lesbare Variable). Voreingestellt entsprechend des - <varname>USE_QT_VER</varname>-Wertes.</entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Wenn <varname>USE_QT_VER</varname> gesetzt ist, - werden dem <command>configure</command>-Skript einige - nützliche Einstellungen übergeben:</para> - - <programlisting>CONFIGURE_ARGS+= --with-qt-includes=${QT_PREFIX}/include \ - --with-qt-libraries=${QT_PREFIX}/lib \ - --with-extra-libs=${LOCALBASE}/lib \ - --with-extra-includes=${LOCALBASE}/include -CONFIGURE_ENV+= MOC="${MOC}" CPPFLAGS="${CPPFLAGS} ${QTCPPFLAGS}" LIBS="${QTCFGLIBS}" \ - QTDIR="${QT_PREFIX}" KDEDIR="${KDE_PREFIX}"</programlisting> - - <para>Wenn <varname>USE_QT_VER</varname> auf - <literal>4</literal> gesetzt ist, werden auch die folgenden - Einstellungen übergeben:</para> - - <programlisting>CONFIGURE_ENV+= UIC="${UIC}" QMAKE="${QMAKE}" QMAKESPEC="${QMAKESPEC}" -MAKE_ENV+= QMAKESPEC="${QMAKESPEC}"</programlisting> - </sect2> - <sect2 xml:id="qt4-components"> - <title>Komponentenauswahl (nur bei Qt 4.x)</title> - - <para>Wenn <varname>USE_QT_VER</varname> auf 4 gesetzt ist, - können individuelle Qt4-Tool- und - Bibliotheksabhängigkeiten in der Variable - <varname>QT_COMPONENTS</varname> angegeben werden. An jede - Komponente kann <literal>_build</literal> oder - <literal>_run</literal> als Suffix angehängt werden, - was eine Abhängigkeit zur Build- bzw. Laufzeit angibt. - Ohne Suffix gilt die Abhängigkeit sowohl zur Build- - als auch zur Laufzeit. Bibliothekskomponenten sollten - normalerweise ohne Suffix angegeben werden, - Tool-Komponenten mit <literal>_build</literal> und - Plugin-Komponenten mit <literal>_run</literal>. Die - gebräuchlichsten Komponenten werden im Folgenden - angegeben (alle verfügbaren Komponenten sind in - <varname>_QT_COMPONENTS_ALL</varname> in - <filename>/usr/ports/Mk/bsd.qt.mk</filename> - aufgelistet):</para> - - <table frame="none"> - <title>Verfügbare Qt4-Bibliothekskomponenten</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Name</entry> - <entry>Beschreibung</entry> - </row> - </thead> - - <tbody> - <row> - <entry><literal>corelib</literal></entry> - <entry>Kern-Bibliothek (kann weggelassen - werden– es sei denn, der Port benutzt nichts - außer <literal>corelib</literal>)</entry> - </row> - - <row> - <entry><literal>gui</literal></entry> - <entry>Graphische - Benutzeroberflächen-Bibliothek</entry> - </row> - - <row> - <entry><literal>network</literal></entry> - <entry>Netzwerk-Bibliothek</entry> - </row> - - <row> - <entry><literal>opengl</literal></entry> - <entry>OpenGL-Bibliothek</entry> - </row> - - <row> - <entry><literal>qt3support</literal></entry> - <entry>Qt3-Kompatibilitäts-Bibliothek</entry> - </row> - - <row> - <entry><literal>qtestlib</literal></entry> - <entry>Modultest-Bibliothek</entry> - </row> - - <row> - <entry><literal>script</literal></entry> - <entry>Skript-Bibliothek</entry> - </row> - - <row> - <entry><literal>sql</literal></entry> - <entry>SQL-Bibliothek</entry> - </row> - - <row> - <entry><literal>xml</literal></entry> - <entry>XML-Bibliothek</entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Sie können herausfinden, welche Bibliotheken die - Applikation benötigt, indem Sie nach erfolgreicher - Kompilierung <command>ldd</command> auf die - Hauptbinärdatei anwenden.</para> - - <table frame="none"> - <title>Verfügbare Qt4-Tool-Komponenten</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Name</entry> - <entry>Beschreibung</entry> - </row> - </thead> - - <tbody> - <row> - <entry><literal>moc</literal></entry> - <entry>meta object compiler (wird zum Build fast - jeder Qt-Applikation benötigt)</entry> - </row> - - <row> - <entry><literal>qmake</literal></entry> - <entry>Makefile-Generator / Build-Werkzeug</entry> - </row> - - <row> - <entry><literal>rcc</literal></entry> - <entry>Resource-Compiler (wird benötigt, falls - die Applikation <filename>*.rc</filename> oder - <filename>*.qrc</filename> Dateien - enthält)</entry> - </row> - - <row> - <entry><literal>uic</literal></entry> - <entry>User-Interface-Compiler (wird benötigt, - falls die Applikation von Qt-Designer erzeugte - <filename>*.ui</filename> Dateien enthält - - gilt für praktisch jede Qt-Applikation mit - einer GUI)</entry> - </row> - </tbody> - </tgroup> - </table> - - <table frame="none"> - <title>Verfügbare Qt4-Plugin-Komponenten</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Name</entry> - <entry>Beschreibung</entry> - </row> - </thead> - - <tbody> - <row> - <entry><literal>iconengines</literal></entry> - <entry>SVG-Icon-Engine Plugin (wenn die Applikation - SVG-Icons mitliefert)</entry> - </row> - - <row> - <entry><literal>imageformats</literal></entry> - <entry>Bildformatplugins für GIF, JPEG, MNG und - SVG (wenn die Applikation Bilddateien - mitliefert)</entry> - </row> - </tbody> - </tgroup> - </table> - - <example xml:id="qt4-components-example"> - <title>Qt4-Komponenten auswählen</title> - - <para>In diesem Beispiel benutzt die portierte Applikation - die Qt4 GUI-Bibliothek, die Qt4-Core-Bibliothek, alle - Qt4-Codeerzeugungstools und Qt4's Makefile Generator. Da - die GUI-Bibliothek eine Abhängigkeit von der - Core-Bibliothek impliziert, muss corelib nicht angegeben - werden. Die Qt4-Codeerzeugungstools moc, uic und rcc, - sowie der Makefile Generator qmake werden nur für den - Build benötigt, deshalb bekommen die den Suffix - <literal>_build</literal>:</para> - - <programlisting>USE_QT_VER= 4 -QT_COMPONENTS= gui moc_build qmake_build rcc_build uic_build</programlisting> - </example> - </sect2> - - <sect2 xml:id="qt-additional"> - <title>Zusätzliche Besonderheiten</title> - - <para>Wenn die Applikation keine - <filename>configure</filename> Datei, sondern eine - <filename>.pro</filename> Datei hat, können Sie das - Folgende benutzen:</para> - - <programlisting>HAS_CONFIGURE= yes - -do-configure: - @cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} \ - ${QMAKE} -unix PREFIX=${PREFIX} texmaker.pro</programlisting> - - <para>Beachten Sie die Ähnlichkeit mit der - <command>qmake</command>-Zeile im mitgelieferten - <filename>BUILD.sh</filename>-Skript. Die - Übergabe von <varname>CONFIGURE_ENV</varname> - stellt sicher, dass <command>qmake</command> die - <varname>QMAKESPEC</varname>-Variable übergeben - bekommt, ohne die es nicht funktioniert. - <command>qmake</command> erzeugt Standard-Makefiles, - sodass es nicht nötig ist ein eigenes neues - <buildtarget>build</buildtarget>-Target zu schreiben.</para> - - <para>Qt-Applikationen sind oft so geschrieben, dass sie - plattformübergreifend sind, und oft ist X11/Unix - nicht die Plattform, auf der sie entwickelt werden. - Das sorgt oft für bestimmte fehlende - Kleinigkeiten wie z.B.:</para> - - <itemizedlist> - <listitem> - <para><emphasis>Fehlende zusätzliche - Include-Pfade.</emphasis> - Viele Applikationen kommen mit System-Tray-Icon - Support– unterlassen es aber Includes - oder Bibliotheken in den X11 Verzeichnissen zu suchen. - Sie können <command>qmake</command> über die - Kommandozeile sagen, es soll Verzeichnisse zu den - Include- und Bibliotheks-Suchpfaden - hinzufügen - z.B.:</para> - - <programlisting>${QMAKE} -unix PREFIX=${PREFIX} INCLUDEPATH+=${LOCALBASE}/include \ - LIBS+=-L${LOCALBASE}/lib sillyapp.pro</programlisting> - </listitem> - - <listitem> - <para><emphasis>Falsche Installations-Pfade.</emphasis> - Manchmal werden Daten wie Icons oder .desktop-Dateien - per Vorgabe in Verzeichnisse installiert, die nicht von - XDG-kompatiblen Applikationen durchsucht werden. - <package>editors/texmaker</package> - ist hierfür ein Beispiel– siehe - <filename>patch-texmaker.pro</filename> im - <filename>files</filename>-Verzeichnis dieses Ports - als eine Vorlage, die zeigt, wie man dies direkt in der - Qmake Projektdatei löst.</para> - </listitem> - </itemizedlist> - </sect2> - </sect1> - - <sect1 xml:id="using-kde"> - <title>Benutzung von KDE</title> - - <sect2 xml:id="kde-variables"> - <title>Variablen-Definitionen (KDE 3)</title> - - <table frame="none"> - <title>Variablen für Ports, die KDE 3 benutzen</title> - - <tgroup cols="2"> - <tbody> - <row> - <entry><varname>USE_KDELIBS_VER</varname></entry> - <entry>Der Port benutzt KDE-Bibliotheken. Die Variable - spezifiziert die Major Version von KDE, die benutzt - werden soll, und impliziert - <varname>USE_QT_VER</varname> der entsprechenden - Version. Der einzig mögliche Wert ist - <literal>3</literal>.</entry> - </row> - - <row> - <entry><varname>USE_KDEBASE_VER</varname></entry> - <entry>Der Port benutzt die KDE-Base. Die Variable - spezifiziert die Major Version von KDE, die benutzt - werden soll, und impliziert - <varname>USE_QT_VER</varname> der entsprechenden - Version. Der einzig mögliche Wert ist - <literal>3</literal>.</entry> - </row> - </tbody> - </tgroup> - </table> - </sect2> - - <sect2 xml:id="kde4-variables"> - <title>Variablen-Definitionen (KDE 4)</title> - - <para>Falls Ihre Anwendung von KDE 4 abhängt, weisen Sie - <varname>USE_KDE4</varname> eine Liste mit benötigten - Komponenten zu. Die am häufigsten gebrauchten sind - unten aufgelistet (<varname>_USE_KDE4_ALL</varname> in - <filename>/usr/ports/Mk/bsd.kde4.mk</filename> enthält - stets die aktuelle Liste):</para> - - <table frame="none"> - <title>Verfügbare KDE 4-Komponenten</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Name</entry> - <entry>Beschreibung</entry> - </row> - </thead> - - <tbody> - <row> - <entry><literal>akonadi</literal></entry> - <entry>Personal Information Management - (PIM)-Speicherdienst</entry> - </row> - - <row> - <entry><literal>automoc4</literal></entry> - <entry>Lässt den Port das Bauwerkzeug automoc4 - verwenden.</entry> - </row> - - <row> - <entry><literal>kdebase</literal></entry> - <entry>Grundlegende KDE-Anwendungen (Konqueror, - Dolphin, Konsole)</entry> - </row> - - <row> - <entry><literal>kdeexp</literal></entry> - <entry>Experimentelle KDE-Bibliotheken (mit einer API, - die als non-stable eingestuft ist)</entry> - </row> - - <row> - <entry><literal>kdehier</literal></entry> - <entry>Stellt allgemeine KDE-Verzeichnisse - bereit</entry> - </row> - - <row> - <entry><literal>kdelibs</literal></entry> - <entry>Die grundlegenden KDE-Bibliotheken</entry> - </row> - - <row> - <entry><literal>kdeprefix</literal></entry> - <entry>Falls in der Liste vorhanden, wird der Port - unter <literal>${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 <varname>PREFIX</varname> überschreibt. Die - Ports übernehmen jedoch, jeden über die - Umgebungsvariable <envar>MAKEFLAGS</envar> oder - <application>make</application>-Parameter festgelegten Wert - für <varname>PREFIX</varname>.</para> - - <para>Es könnte bei der Installation von KDE 4-Ports zu - Konflikten mit KDE 3-Ports kommen, sodass diese bei - aktivierter <literal>kdeprefix</literal>-Komponente unter - <literal>${KDE4_PREFIX}</literal> installiert werden. - Der Standardwert von <literal>KDE4_PREFIX</literal> ist zur - Zeit <filename>/usr/local/kde4</filename>. Es ist auch - möglich, KDE 4-Ports unter einem angepassten - <literal>PREFIX</literal> zu installieren. Wenn - <literal>PREFIX</literal> als - <envar>MAKEFLAGS</envar>-Umgebungsvariable oder als - <application>make</application>-Parameter gesetzt wird, - überschreibt dies den von <literal>kdeprefix</literal> - festgelegten Wert.</para> - - <example xml:id="kde4-components-example"> - <title><varname>USE_KDE4</varname>-Beispiel</title> - - <para>Dies ist ein einfaches Beispiel für einen KDE - 4-Port. <varname>USE_CMAKE</varname> weist den Port an, - <application>CMake</application>, ein unter KDE - 4-Projekten weit verbreitetes Konfigurationswerkzeug, zu - verwenden. <varname>USE_KDE4</varname> legt die - Abhängigkeit von KDE-Bibliotheken und die Verwendung - von <application>automoc4</application> während der - Kompilierung fest. Mit Hilfe des configure-Protokolls - können die KDE-Komponenten und andere - Abhängigkeiten festgestellt werden. - <varname>USE_KDE4</varname> impliziert - <varname>USE_QT_VER</varname> nicht. Falls der Port Qt - 4-Komponenten benötigt, sollten - <varname>USE_QT_VER</varname> gesetzt und verlangte - Komponenten festgelegt werden.</para> - - <programlisting>USE_CMAKE= yes -USE_KDE4= automoc4 kdelibs kdeprefix -USE_QT_VER= 4 -QT_COMPONENTS= qmake_build moc_build rcc_build uic_build</programlisting> - </example> - </sect2> - </sect1> - - <sect1 xml:id="using-java"> - <title>Benutzung von Java</title> - - <sect2 xml:id="java-variables"> - <title>Variablen-Definitionen</title> - - <para>Wenn Ihr Port ein Java™ Development Kit (JDK™) - benötigt, entweder zum Bauen, zur Laufzeit oder - sogar, um das Distfile auszupacken, dann sollten Sie - <varname>USE_JAVA</varname> setzen.</para> - - <para>Es gibt mehrere JDKs in der - Ports-Sammlung– von verschiedenen Anbietern - und in verschiedenen Versionen. - Wenn Ihr Port eine bestimmte dieser Versionen - benötigt, können Sie definieren welche. - Die aktuelle Version ist <package>java/jdk16</package>.</para> - - <table frame="none"> - <title>Variablen, die von Ports, die Java benutzen, gesetzt - werden müssen</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Variable</entry> - <entry>Bedeutung</entry> - </row> - </thead> - - <tbody> - <row> - <entry><varname>USE_JAVA</varname></entry> - <entry>Sollte definiert sein, damit die übrigen - Variablen irgendeinen Effekt haben.</entry> - </row> - - <row> - <entry><varname>JAVA_VERSION</varname></entry> - <entry>Durch Leerzeichen getrennte Liste von geeigneten - Java-Versionen für den Port. Ein optionales - <literal>"+"</literal> ermöglicht die Angabe eines - Bereiches von Versionen (mögliche Werte: - <literal>1.5[+] 1.6[+] 1.7[+]</literal>).</entry> - </row> - - <row> - <entry><varname>JAVA_OS</varname></entry> - <entry>Durch Leerzeichen getrennte Liste von geeigneten - JDK-Port-Betriebssystemen für den Port. (erlaubte - Werte: <literal>native linux</literal>).</entry> - </row> - - <row> - <entry><varname>JAVA_VENDOR</varname></entry> - <entry>Durch Leerzeichen getrennte Liste von geeigneten - JDK-Port-Anbietern für den Port. (erlaubte Werte: - <literal>freebsd bsdjava sun openjdk</literal>).</entry> - </row> - - <row> - <entry><varname>JAVA_BUILD</varname></entry> - <entry>Bedeutet, falls gesetzt, dass der ausgewählte - JDK-Port zu den Build-Abhängigkeiten des Ports - hinzugefügt werden soll.</entry> - </row> - - <row> - <entry><varname>JAVA_RUN</varname></entry> - <entry>Bedeutet, falls gesetzt, dass der ausgewählte - JDK-Port zu den Laufzeit-Abhängigkeiten des Ports - hinzugefügt werden soll.</entry> - </row> - - <row> - <entry><varname>JAVA_EXTRACT</varname></entry> - <entry>Bedeutet, falls gesetzt, dass der ausgewählte - JDK-Port zu den Extract-Abhängigkeiten des Ports - hinzugefügt werden soll.</entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Das Folgende ist eine Liste aller Variablen, die ein - Port bekommt, nachdem er <varname>USE_JAVA</varname> - gesetzt hat:</para> - - <table frame="none"> - <title>Bereitgestellte Variablen für Ports, - die Java benutzen</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Variable</entry> - <entry>Wert</entry> - </row> - </thead> - - <tbody> - <row> - <entry><varname>JAVA_PORT</varname></entry> - <entry>Der Name des JDK-Ports (z.B. - <literal>'java/diablo-jdk16'</literal>).</entry> - </row> - - <row> - <entry><varname>JAVA_PORT_VERSION</varname></entry> - <entry>Die volle Version des JDK Ports (z.B. - <literal>'1.6.0'</literal>). Wenn Sie nur die ersten - beiden Stellen dieser Versionsnummer benötigen, - benutzen Sie <varname> - ${JAVA_PORT_VERSION:C/^([0-9])\.([0-9])(.*)$/\1.\2/}</varname>.</entry> - </row> - - <row> - <entry><varname>JAVA_PORT_OS</varname></entry> - <entry>Das vom JDK-Port benutzte Betriebssystem (z.B. - <literal>'native'</literal>).</entry> - </row> - - <row> - <entry><varname>JAVA_PORT_VENDOR</varname></entry> - <entry>Der Anbieter des JDK-Ports (z.B. - <literal>'freebsd'</literal>).</entry> - </row> - - <row> - <entry><varname>JAVA_PORT_OS_DESCRIPTION</varname></entry> - <entry>Beschreibung des vom JDK-Port benutzten - Betriebssystems (z.B. - <literal>'Native'</literal>).</entry> - </row> - - <row> - <entry><varname>JAVA_PORT_VENDOR_DESCRIPTION</varname></entry> - <entry>Beschreibung des Anbieters des JDK-Ports (z.B. - <literal>'FreeBSD Foundation'</literal>).</entry> - </row> - - <row> - <entry><varname>JAVA_HOME</varname></entry> - <entry>Pfad zum Installationsverzeichnis des JDK (z.B. - <filename>'/usr/local/diablo-jdk1.6.0'</filename>).</entry> - </row> - - <row> - <entry><varname>JAVAC</varname></entry> - <entry>Pfad zum Java-Compiler, der benutzt werden soll - (z.B. <filename>'/usr/local/diablo-jdk1.6.0/bin/javac'</filename>.</entry> - </row> - - <row> - <entry><varname>JAR</varname></entry> - <entry>Pfad zum <command>jar</command>-Werkzeug, das - benutzt werden soll - (z.B.'<filename>'/usr/local/diablo-jdk1.6.0/bin/jar</filename> oder - <filename>'/usr/local/bin/fastjar'</filename>).</entry> - </row> - - <row> - <entry><varname>APPLETVIEWER</varname></entry> - <entry>Pfad zum <command>appletviewer</command>-Werkzeug - (z.B. <filename>'/usr/local/diablo-jdk1.6.0/bin/appletviewer'</filename>).</entry> - </row> - - <row> - <entry><varname>JAVA</varname></entry> - <entry>Pfad zur <command>java</command> Binärdatei. - Benutzen Sie dies, um Java-Programme auszuführen - (z.B.<filename>'/usr/local/diablo-jdk1.6.0/bin/java'</filename>).</entry> - </row> - - <row> - <entry><varname>JAVADOC</varname></entry> - <entry>Pfad zum - <command>javadoc</command>-Werkzeug.</entry> - </row> - - <row> - <entry><varname>JAVAH</varname></entry> - <entry>Pfad zum <command>javah</command>-Programm.</entry> - </row> - - <row> - <entry><varname>JAVAP</varname></entry> - <entry>Pfad zum <command>javap</command>-Programm.</entry> - </row> - - <row> - <entry><varname>JAVA_KEYTOOL</varname></entry> - <entry>Pfad zum <command>keytool</command>-Werkzeug.</entry> - </row> - - <row> - <entry><varname>JAVA_N2A</varname></entry> - <entry>Pfad zum - <command>native2ascii</command>-Werkzeug.</entry> - </row> - - <row> - <entry><varname>JAVA_POLICYTOOL</varname></entry> - <entry>Pfad zum <command>policytool</command> Programm.</entry> - </row> - - <row> - <entry><varname>JAVA_SERIALVER</varname></entry> - <entry>Pfad zum - <command>serialver</command>-Werkzeug.</entry> - </row> - - <row> - <entry><varname>RMIC</varname></entry> - <entry>Pfad zum RMI Stub/Skeleton-Generator, - <command>rmic</command>.</entry> - </row> - - <row> - <entry><varname>RMIREGISTRY</varname></entry> - <entry>Pfad zum RMI Registry-Werkzeug, - <command>rmiregistry</command>.</entry> - </row> - - <row> - <entry><varname>RMID</varname></entry> - <entry>Pfad zum RMI Daemon <command>rmid</command>.</entry> - </row> - - <row> - <entry><varname>JAVA_CLASSES</varname></entry> - <entry>Pfad zum Archiv, das die JDK-Klassendateien - enthält, <filename>${JAVA_HOME}/jre/lib/rt.jar</filename>.</entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Sie können das <literal>java-debug</literal> - make-Target benutzen, um Information zum Debuggen - Ihres Ports zu erhalten. Es wird die Werte vieler - der obenangegebenen Variablen anzeigen.</para> - - <para>Zusätzlich sind die folgenden Konstanten - definiert, damit alle Java-Ports auf eine konsistente - Art installiert werden können:</para> - - <table frame="none"> - <title>Konstanten, die für Ports, welche Java benutzen, - definiert sind</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Konstante</entry> - <entry>Wert</entry> - </row> - </thead> - - <tbody> - <row> - <entry><varname>JAVASHAREDIR</varname></entry> - <entry>Das Basis-Verzeichnis für alles, was mit Java - zusammenhängt. Standardmäßig - <filename>${PREFIX}/share/java</filename>.</entry> - </row> - - <row> - <entry><varname>JAVAJARDIR</varname></entry> - <entry>Das Verzeichnis, wohin JAR-Dateien installiert - werden sollen. Standardmäßig - <filename>${JAVASHAREDIR}/classes</filename>.</entry> - </row> - - <row> - <entry><varname>JAVALIBDIR</varname></entry> - <entry>Das Verzeichnis, in dem JAR-Dateien, die von - anderen Ports installiert wurden, liegen. - Standardmäßig <filename> - ${LOCALBASE}/share/java/classes</filename>.</entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Die entsprechenden Einträge sind sowohl in - <varname>PLIST_SUB</varname> (dokumentiert in - <xref linkend="plist-sub"/>) als auch in - <varname>SUB_LIST</varname> definiert.</para> - </sect2> - - <sect2 xml:id="java-building-with-ant"> - <title>Kompilieren mit Ant</title> - - <para>Wenn der Port mit Apache Ant kompiliert werden soll, - muss er <varname>USE_ANT</varname> setzen. Ant wird dann - als das sub-make-Kommando betrachtet. Wenn kein - <literal>do-build</literal>-Target vom Port definiert ist, - wird eine Standardvorgabe benutzt, die einfach Ant - entsprechend <varname>MAKE_ENV</varname>, - <varname>MAKE_ARGS</varname> und - <varname>ALL_TARGET</varname> aufruft. Das ähnelt dem - <varname>USE_GMAKE</varname>-Mechanismus, der in <xref linkend="building"/> dokumentiert ist.</para> - </sect2> - - <sect2 xml:id="java-best-practices"> - <title>Optimales Verfahren</title> - - <para>Wenn Sie eine Java-Bibliothek portieren, sollte Ihr Port - die JAR-Datei(en) in <filename>${JAVAJARDIR}</filename> - installieren, und alles andere unter - <filename>${JAVASHAREDIR}/${PORTNAME}</filename> - (ausgenommen die Dokumentation - siehe unten). Um die - Größe der Packlistendatei zu reduzieren, - können die JAR-Datei(en) direkt im - <filename>Makefile</filename> angegeben werden. Benutzen - Sie einfach die folgende Anweisung (wobei - <filename>myport.jar</filename> der Name der JAR-Datei ist, - die als Teil des Ports installiert wird):</para> - - <programlisting>PLIST_FILES+= %%JAVAJARDIR%%/myport.jar</programlisting> - - <para>Beim Portieren einer Java-Applikation installiert der - Port normalerweise alles unter einem einzigen Verzeichnis - (inklusive seiner JAR-Abhängigkeiten). Die Benutzung - von <filename>${JAVASHAREDIR}/${PORTNAME}</filename> - wird in dieser Beziehung dringend empfohlen. Es liegt - im Entscheidungsbereich des Portierenden, ob der Port - die zusätzlichen JAR-Abhängigkeiten unter - diesem Verzeichnis installieren oder direkt die schon - installierten (aus <filename>${JAVAJARDIR}</filename>) - benutzen soll.</para> - - <para>Unabhängig von der Art Ihres Ports (Bibliothek - oder Applikation), sollte die zusätzliche Dokumentation - an die <link linkend="install-documentation">gleiche Stelle</link> - installiert werden wie bei jedem anderen Port auch. - Das JavaDoc-Werkzeug ist dafür bekannt einen - unterschiedlichen Satz von Dateien abhängig von der - Version des benutzten JDKs zu erstellen. Für Ports, - die nicht die Benutzung eines bestimmten JDKs vorgeben, - ist es deshalb eine komplexe Aufgabe die Packliste - (<filename>pkg-plist</filename>) festzulegen. Dies ist - ein Grund, warum dringend angeraten wird, das - <varname>PORTDOCS</varname>-Makro zu benutzen. - Außerdem, selbst wenn Sie den Satz von Dateien, - den <command>javadoc</command> erzeugen wird, - voraussagen können, die Größe der - resultierenden <filename>pkg-plist</filename> - befürwortet die Benutzung von - <varname>PORTDOCS</varname>.</para> - - <para>Der Vorgabewert für <varname>DATADIR</varname> ist - <filename>${PREFIX}/share/${PORTNAME}</filename>. Es ist - eine gute Idee, <varname>DATADIR</varname> für - Java-Ports stattdessen auf - <filename>${JAVASHAREDIR}/${PORTNAME}</filename> zu setzen. - In der Tat wird <varname>DATADIR</varname> automatisch zu - <varname>PLIST_SUB</varname> (dokumentiert in <xref linkend="plist-sub"/>) hinzugefügt, d.h. Sie können - <literal>%%DATADIR%%</literal> direkt in - <filename>pkg-plist</filename> benutzen.</para> - - <para>Zu der Frage, ob Java-Ports aus dem Quelltext gebaut - werden, oder direkt bereitgestellte binäre - Distributionen benutzt werden sollten, gab es, als dies - geschrieben wurde, keine definierte Richtlinie. Allerdings - ermutigen Mitglieder des <link xlink:href="http://www.freebsd.org/java/">&os; - Java-Projekts</link> Porter dazu, Ihre Ports aus dem - Quelltext kompilieren zu lassen, wann immer dies kein - Problem darstellt.</para> - - <para>Alle Eigenschaften, die in diesem Abschnitt - präsentiert wurden sind in - <filename>bsd.java.mk</filename> implementiert. - Sollten Sie jemals der Meinung sein, dass Ihr Port - ausgefeiltere Java-Unterstützung benötigt, - schauen Sie bitte erst in das <link xlink:href="http://www.freebsd.org/cgi/cvsweb.cgi/ports/Mk/bsd.java.mk"> - bsd.java.mk CVS Log</link>, weil es normalerweise immer - etwas Zeit braucht bis die neuesten Eigenschaften - dokumentiert sind. Wenn Sie glauben, dass der fehlende - Support auch für viele andere Java Ports nützlich - sein könnte, wenden Sie sich bitte an die - &a.java;.</para> - - <para>Obwohl es eine <literal>java</literal>-Kategorie - für Fehlerberichte gibt, bezieht sich diese auf die - JDK-Portierungsbemühungen des &os; Java-Projektes. - Deshalb sollten Sie Ihren Java-Port in der - <literal>ports</literal>-Kategorie einreichen wie bei - jeden anderen Port auch - es sei denn, die Angelegenheit, - die Sie zu klären versuchen, steht in Zusammenhang - entweder mit einer JDK-Implementierung oder - <filename>bsd.java.mk</filename>.</para> - - <para>Gleichermaßen gibt es eine definierte Richtlinie - für die <varname>CATEGORIES</varname> eines Java-Ports, - die in <xref linkend="makefile-categories"/> erklärt - wird.</para> - </sect2> - </sect1> - - <sect1 xml:id="using-php"> - <title>Webanwendungen, Apache und PHP</title> - - <sect2 xml:id="using-apache"> - <title>Apache</title> - - <table frame="none"> - <title>Variablen für Ports, die Apache - verwenden</title> - - <tgroup cols="2"> - <tbody> - <row> - <entry><varname>USE_APACHE</varname></entry> - <entry>Der Port benötigt Apache. Mögliche Werte: - <literal>yes</literal> (beliebige Version), - <literal>1.3</literal>, <literal>2.0</literal>, - <literal>2.2</literal>, <literal>2.0+</literal>, - etc. – Standard ist Version - <literal>1.3</literal>.</entry> - </row> - - <row> - <entry><varname>WITH_APACHE2</varname></entry> - <entry>Der Port benötigt Apache 2.0. Ist diese - Variable nicht gesetzt, so benötigt der Port - Apache 1.3. Diese Variable ist veraltet und sollte - nicht mehr verwendet werden.</entry> - </row> - - <row> - <entry><varname>APXS</varname></entry> - <entry>Vollständiger Pfad zu der - <command>apxs</command> Binärdatei. Die Variable - kann neu gesetzt werden.</entry> - </row> - - <row> - <entry><varname>HTTPD</varname></entry> - <entry>Vollständiger Pfad zu der - <command>httpd</command> Binärdatei. - Die Variable kann neu gesetzt werden.</entry> - </row> - - <row> - <entry><varname>APACHE_VERSION</varname></entry> - <entry>Beinhaltet die Versionsnummer des aktuell - installierten Apache (nur lesbare Variable). - Diese Variable ist nach Einbinden der Datei - <filename>bsd.port.pre.mk</filename> - verfügbar. Mögliche Werte: - <literal>13</literal>, <literal>20</literal>, - <literal>22</literal>.</entry> - </row> - - <row> - <entry><varname>APACHEMODDIR</varname></entry> - <entry>Verzeichnis der Apache-Module. Diese Variable wird - automatisch in pkg-plist ersetzt.</entry> - </row> - - <row> - <entry><varname>APACHEINCLUDEDIR</varname></entry> - <entry>Verzeichnis der Apache Header-Dateien. Diese - Variable wird automatisch in pkg-plist ersetzt.</entry> - </row> - - <row> - <entry><varname>APACHEETCDIR</varname></entry> - <entry> Verzeichnis der Apache-Konfigurationsdateien. - Diese Variable wird automatisch in pkg-plist - ersetzt.</entry> - </row> - </tbody> - </tgroup> - </table> - - <table frame="none"> - <title>Nützliche Variablen für Ports von - Apache-Modulen</title> - - <tgroup cols="2"> - <tbody> - <row> - <entry><varname>MODULENAME</varname></entry> - <entry>Name des Moduls. Standardwert ist - <varname>PORTNAME</varname>. Beispiel: - <literal>mod_hello</literal></entry> - </row> - - <row> - <entry><varname>SHORTMODNAME</varname></entry> - <entry>Der gekürzte Name des Moduls. - Standardmäßig - wird der Wert von <varname>MODULENAME</varname> - übernommen. - Beispiel: <literal>hello</literal></entry> - </row> - - <row> - <entry><varname>AP_FAST_BUILD</varname></entry> - <entry>Verwende <command>apxs</command> zum Kompilieren - und Installieren des Moduls.</entry> - </row> - - <row> - <entry><varname>AP_GENPLIST</varname></entry> - <entry>Eine <filename>pkg-plist</filename> wird - automatisch erzeugt.</entry> - </row> - - <row> - <entry><varname>AP_INC</varname></entry> - <entry>Verzeichnis für zusätzliche - Header-Dateien, die beim Kompilieren mitverwendet - werden.</entry> - </row> - - <row> - <entry><varname>AP_LIB</varname></entry> - <entry>Verzeichnis für zusätzliche - Bibliothek-Dateien, welche beim Kompilieren - mitverwendet werden.</entry> - </row> - - <row> - <entry><varname>AP_EXTRAS</varname></entry> - <entry>Zusätzliche Flags für - <command>apxs</command>.</entry> - </row> - </tbody> - </tgroup> - </table> - </sect2> - - <sect2 xml:id="web-apps"> - <title>Webanwendungen</title> - - <para>Webanwendungen sollten nach <filename> - PREFIX/www/programmname - </filename> installiert werden. - Der Einfachheit halber ist dieser Pfad sowohl im - <filename>Makefile</filename> als auch in - <filename>pkg-plist</filename> als - <varname>WWWDIR</varname> verfügbar. Der relative - Pfad <varname>PREFIX</varname> ist hingegen im - <filename>Makefile</filename> durch die Variable - <varname>WWWDIR_REL</varname> festgelegt.</para> - - <para>Der Benutzername und die Benutzergruppe, - mit deren Rechte Webanwendungen laufen, sind in - <varname>WWWOWN</varname> und <varname>WWWGRP</varname> - festgelegt. Standardwert ist bei beiden - <literal>www</literal>. Falls ein Port mit anderen - Rechten gestartet werden soll, so sollte die Anweisung - <literal>WWWOWN?= myuser</literal> verwendet werden. Dies - vereinfacht dem Benutzer eine Anpassung dieser Werte.</para> - - <para>Falls die Webanwendung nicht explizit Apache - benötigt, so sollte dieser auch nicht als - Abhängigkeit des Ports aufgeführt werden. - Dadurch bleibt es dem Benutzer überlassen - Apache oder einen anderen Webserver zu verwenden.</para> - </sect2> - - <sect2 xml:id="php-variables"> - <title>PHP</title> - - <table frame="none"> - <title>Variablen für Ports, die PHP verwenden</title> - - <tgroup cols="2"> - <tbody> - <row> - <entry><varname>USE_PHP</varname></entry> - <entry>Der Port benötigt PHP. Der Wert - <literal>yes</literal> bewirkt eine Abhängigkeit - des Ports von PHP. Es kann auch eine Liste der - benötigten PHP-Erweiterungen angegeben - werden. Beispiel: - <literal>pcre xml gettext</literal></entry> - </row> - - <row> - <entry><varname>DEFAULT_PHP_VER</varname></entry> - <entry>Legt die Version von PHP fest, die - standardmäßig installiert wird, falls noch - kein PHP vorhanden ist. Standardwert ist - <literal>4</literal>. Mögliche Werte sind: - <literal>4</literal>,<literal>5</literal></entry> - </row> - - <row> - <entry><varname>IGNORE_WITH_PHP</varname></entry> - <entry>Der Port funktioniert nicht mit der angegebenen - Version von PHP. Mögliche Werte: - <literal>4</literal>, <literal>5</literal></entry> - </row> - - <row> - <entry><varname>USE_PHPIZE</varname></entry> - <entry>Der Port wird als PHP-Erweiterung gebaut.</entry> - </row> - - <row> - <entry><varname>USE_PHPEXT</varname></entry> - <entry>Der Port wird wie eine PHP-Erweiterung - behandelt – Installation und - Eintragung in die PHP-Registry für - Erweiterungen.</entry> - </row> - - <row> - <entry><varname>USE_PHP_BUILD</varname></entry> - <entry>Setzt PHP als build-Anhängigkeit.</entry> - </row> - - <row> - <entry><varname>WANT_PHP_CLI</varname></entry> - <entry>Benötigt die Kommandozeilen-Version von - PHP.</entry> - </row> - - <row> - <entry><varname>WANT_PHP_CGI</varname></entry> - <entry>Benötigt die CGI-Version von PHP.</entry> - </row> - - <row> - <entry><varname>WANT_PHP_MOD</varname></entry> - <entry>Benötigt das Apache-Modul von PHP.</entry> - </row> - - <row> - <entry><varname>WANT_PHP_SCR</varname></entry> - <entry>Benötigt die Kommandozeilen- oder die - CGI-Version von PHP.</entry> - </row> - - <row> - <entry><varname>WANT_PHP_WEB</varname></entry> - <entry>Benötigt das Apache-Modul oder die CGI-Version - von PHP.</entry> - </row> - </tbody> - </tgroup> - </table> - </sect2> - - <sect2> - <title>PEAR Module</title> - - <para>Das Portieren von PEAR-Modulen ist sehr einfach.</para> - - <para>Mit Hilfe der Variablen <varname>FILES</varname>, - <varname>TESTS</varname>, <varname>DATA</varname>, - <varname>SQLS</varname>, <varname>SCRIPTFILES</varname>, - <varname>DOCS</varname> und <varname>EXAMPLES</varname> - können die zu installierenden Dateien angegeben werden. - Alle aufgeführten Dateien werden automatisch in die - jeweiligen Verzeichnisse installiert und der Datei - <filename>pkg-plist</filename> hinzugefügt.</para> - - <para>Die Datei <filename> - ${PORTSDIR}/devel/pear/bsd.pear.mk</filename> - muss am Ende des <filename>Makefile</filename>s - eingebunden werden.</para> - - <example xml:id="pear-makefile"> - <title>Beispiel eines Makefiles für eine PEAR - Klasse</title> - - <programlisting>PORTNAME= Date -PORTVERSION= 1.4.3 -CATEGORIES= devel www pear - -MAINTAINER= example@domain.com -COMMENT= PEAR Date and Time Zone Classes - -BUILD_DEPENDS= ${PEARDIR}/PEAR.php:${PORTSDIR}/devel/pear-PEAR -RUN_DEPENDS= ${BUILD_DEPENDS} - -FILES= Date.php Date/Calc.php Date/Human.php Date/Span.php \ - Date/TimeZone.php -TESTS= test_calc.php test_date_methods_span.php testunit.php \ - testunit_date.php testunit_date_span.php wknotest.txt \ - bug674.php bug727_1.php bug727_2.php bug727_3.php \ - bug727_4.php bug967.php weeksinmonth_4_monday.txt \ - weeksinmonth_4_sunday.txt weeksinmonth_rdm_monday.txt \ - weeksinmonth_rdm_sunday.txt -DOCS= TODO -_DOCSDIR= . - -.include <bsd.port.pre.mk> -.include "${PORTSDIR}/devel/pear/bsd.pear.mk" -.include <bsd.port.post.mk></programlisting> - - </example> - </sect2> - </sect1> - - <sect1 xml:id="using-python"> - <title>Python benutzen</title> - - <para>Die Ports unterstützen parallele Installationen - mehrerer Python-Versionen. Ports sollten sicherstellen, - dass der richtige <command>python</command>-Interpreter - verwendet wird – entsprechend der durch den - Benutzer definierbaren Variable - <varname>PYTHON_VERSION</varname>. Häufig bedeutet - dies, dass der Pfad zum <command>python</command>-Interpreter - durch den Wert der Variablen <varname>PYTHON_CMD</varname> - ersetzt werden muss.</para> - - <para>Ports, die Dateien unter - <varname>PYTHON_SITELIBDIR</varname> installieren, sollten - <literal>pyXY-</literal> als Präfix des Paketnamens - haben, sodass in deren Paketname die zugehörige - Python Version aufgeführt wird.</para> - - <programlisting>PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}</programlisting> - - <table frame="none"> - <title>Nützliche Variablen für Ports, - die Python verwenden</title> - - <tgroup cols="2"> - <tbody> - <row> - <entry><varname>USE_PYTHON</varname></entry> - <entry>Der Port benötigt Python. Die minimal - benötigte Version kann durch Werte wie - <literal>2.3+</literal> angegeben werden. - Bereiche von Versionsnummern können durch Angabe der - minimalen und maximalen Versionsnummer, getrennt durch - einen Gedankenstrich, festgelegt werden, z.B.: - <literal>2.1-2.3</literal></entry> - </row> - - <row> - <entry><varname>USE_PYDISTUTILS</varname></entry> - <entry>Verwende Python-distutils zum Konfigurieren, - Kompilieren und Installieren. Dies ist erforderlich, - falls der Port eine <filename>setup.py</filename>-Datei - beinhaltet. Dadurch werden die - <buildtarget>do-build</buildtarget> und - <buildtarget>do-install</buildtarget>-Ziele und eventuell - auch das <buildtarget>do-configure</buildtarget>-Ziel - übergangen, falls <varname>GNU_CONFIGURE</varname> - nicht definiert ist.</entry> - </row> - - <row> - <entry><varname>PYTHON_PKGNAMEPREFIX</varname></entry> - <entry>Wird als <varname>PKGNAMEPREFIX</varname> verwendet, - um Pakete für unterschiedliche Python-Versionen zu - trennen. Beispiel: <literal>py24-</literal></entry> - </row> - - <row> - <entry><varname>PYTHON_SITELIBDIR</varname></entry> - <entry>Verzeichnis des site-Pakete Baums, der das - Installationsverzeichnis von Python (üblicherweise - <varname>LOCALBASE</varname>) beinhaltet. Die - <varname>PYTHON_SITELIBDIR</varname>-Variable kann - sehr nützlich bei der Installation von - Python-Modulen sein.</entry> - </row> - - <row> - <entry><varname>PYTHONPREFIX_SITELIBDIR</varname></entry> - <entry>Die präfix-freie Variante von - <varname>PYTHON_SITELIBDIR</varname>. Benutzen Sie immer - <literal>%%PYTHON_SITELIBDIR%%</literal> in - <filename>pkg-plist</filename>, wenn möglich. Der - Standardwert von <literal>%%PYTHON_SITELIBDIR%%</literal> - ist <literal> - lib/python%%PYTHON_VERSION%%/site-packages - </literal></entry> - </row> - - <row> - <entry><varname>PYTHON_CMD</varname></entry> - <entry>Kommandozeilen-Interpreter für Python mit - Versionsnummer.</entry> - </row> - - <row> - <entry><varname>PYNUMERIC</varname></entry> - <entry>Liste der Abhängigkeiten für numerische - Erweiterungen.</entry> - </row> - - <row> - <entry><varname>PYNUMPY</varname></entry> - <entry>Liste der Abhängigkeiten für die neue - numerische Erweiterung numpy. - (<varname>PYNUMERIC</varname> ist vom Anbieter als - veraltet deklariert)</entry> - </row> - - <row> - <entry><varname>PYXML</varname></entry> - <entry>Liste der Abhängigkeiten für - XML-Erweiterungen (wird ab Python 2.0 nicht mehr - benötigt, da im Basispaket enthalten).</entry> - </row> - - <row> - <entry><varname>USE_TWISTED</varname></entry> - <entry>Setzt die Abhängigkeit des Ports von - twistedCore. Die Liste der erforderlichen Komponenten - kann als Wert spezifiziert werden. Beispiel: - <literal>web lore pair flow</literal></entry> - </row> - - <row> - <entry><varname>USE_ZOPE</varname></entry> - <entry>Setzt Zope, eine Plattform für Webanwendungen, - als Abhängigkeit des Ports. Setzt die - Versionsabhängigkeit von Python auf 2.3. Setzt - <varname>ZOPEBASEDIR</varname> auf das Verzeichnis, - in welches Zope installiert wurde.</entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Eine vollständige Liste aller verfügbaren - Variablen ist in <filename>/usr/ports/Mk/bsd.python.mk - </filename> zu finden.</para> - </sect1> - - <sect1 xml:id="using-tcl"> - <title>Benutzung von <application>Tcl/Tk</application></title> - - <para>Die Ports-Sammlung unterstützt die parallele - Installation mehrerer - <application>Tcl/Tk</application>-Versionen. Ports sollten - mindestens die vorgegebene - <application>Tcl/Tk</application>-Version oder höher zu - unterstützen versuchen anhand der Variablen - <varname>USE_TCL</varname> und <varname>USE_TK</varname>. Es - ist möglich, die gewünschte Version von - <command>tcl</command> mit der Variable - <varname>WITH_TCL_VER</varname> vorzuschreiben.</para> - - <table frame="none"> - <title>Äußerst nützliche Variablen für - Ports, die <application>Tcl/Tk</application> - benutzen</title> - - <tgroup cols="2"> - <tbody> - <row> - <entry><varname>USE_TCL</varname></entry> - - <entry>Der Port benötigt die - <application>Tcl</application>-Bibliothek (nicht die - Shell). Eine notwendige Mindestversion kann mit Werten - wie 84+ angegeben werden. Einzelne nicht - unterstützte Versionen können mit der - Variable <varname>INVALID_TCL_VER</varname> festgelegt - werden.</entry> - </row> - - <row> - <entry><varname>USE_TCL_BUILD</varname></entry> - - <entry>Der Port benötigt - <application>Tcl</application> nur während der - Zeit, in der er gebaut wird.</entry> - </row> - - <row> - <entry><varname>USE_TCL_WRAPPER</varname></entry> - - <entry>Ports, welche zwar die - <application>Tcl</application>-Shell, aber nicht eine - bestimmte Version von <literal>tclsh</literal> - verlangen, sollten diese neue Variable verwenden. Ein - Wrapperskript für <literal>tclsh</literal> wird - auf dem System installiert. Der Benutzer kann - festlegen, welche <command>tcl</command>-Shell - gewünscht ist bzw. verwendet werden soll.</entry> - </row> - - <row> - <entry><varname>WITH_TCL_VER</varname></entry> - - <entry>Benutzerdefinierte Variable, welche die - gewünschte <application>Tcl</application>-Version - bestimmt.</entry> - </row> - - <row> - <entry><varname><replaceable>PORTNAME</replaceable>_WITH_TCL_VER</varname></entry> - - <entry>Gleich wie <varname>WITH_TCL_VER</varname>, nur - portspezifisch.</entry> - </row> - - <row> - <entry><varname>USE_TCL_THREADS</varname></entry> - - <entry>Fordere threadfähiges - <application>Tcl/Tk</application>.</entry> - </row> - - <row> - <entry><varname>USE_TK</varname></entry> - - <entry>Der Port benötigt die - <application>Tk</application>-Bibliothek (nicht die - Wish-Shell). Impliziert <varname>USE_TCL</varname> mit - dem gleichen Wert. Für weitere Informationen - siehe die Beschreibung der Variable - <varname>USE_TCL</varname>.</entry> - </row> - - <row> - <entry><varname>USE_TK_BUILD</varname></entry> - - <entry>Analog zur Variable - <varname>USE_TCL_BUILD</varname>.</entry> - </row> - - <row> - <entry><varname>USE_TK_WRAPPER</varname></entry> - - <entry>Analog zur Variable - <varname>USE_TCL_WRAPPER</varname>.</entry> - </row> - - <row> - <entry><varname>WITH_TK_VER</varname></entry> - - <entry>Analog zur Variable - <varname>WITH_TCL_VER</varname> und impliziert - <varname>WITH_TCL_VER</varname> mit dem gleichen - Wert.</entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Eine vollständige Liste der zur Verfügung - stehenden Variablen befindet sich in - <filename>/usr/ports/Mk/bsd.tcl.mk</filename>.</para> - </sect1> - - <sect1 xml:id="using-emacs"> - <title>Emacs benutzen</title> - - <para>Dieser Abschnitt muss noch geschrieben werden.</para> - </sect1> - - <sect1 xml:id="using-ruby"> - <title>Ruby benutzen</title> - - <table frame="none"> - <title>Nützliche Variablen für Ports, - die Ruby verwenden</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Variable</entry> - <entry>Description</entry> - </row> - </thead> - - <tbody> - <row> - <entry><varname>USE_RUBY</varname></entry> - <entry>Der Port benötigt Ruby.</entry> - </row> - - <row> - <entry><varname>USE_RUBY_EXTCONF</varname></entry> - <entry>Der Port verwendet <filename>extconf.rb</filename> - für die Konfiguration.</entry> - </row> - - <row> - <entry><varname>USE_RUBY_SETUP</varname></entry> - <entry>Der Port verwendet <filename>setup.rb</filename> - für die Konfiguration.</entry> - </row> - - <row> - <entry><varname>RUBY_SETUP</varname></entry> - <entry>Legt den alternativen Namen von - <filename>setup.rb</filename> fest. Üblich ist der - Wert <filename>install.rb</filename>.</entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Die folgende Tabelle listet ausgewählte Variablen - auf, die Portautoren über die Port-Infrastruktur zur - Verfügung stehen. Diese Variablen sollten für die - Installation von Dateien in die entsprechenden Verzeichnisse - verwendet werden. Sie sollten in - <filename>pkg-plist</filename> so häufig wie möglich - verwendet und in einem Port nicht neu definiert werden.</para> - - <table frame="none"> - <title>Ausgewählte read-only-Variablen für Ports, - die Ruby verwenden</title> - - <tgroup cols="3"> - <thead> - <row> - <entry>Variable</entry> - <entry>Beschreibung</entry> - <entry>Beispiel</entry> - </row> - </thead> - - <tbody> - <row> - <entry><varname>RUBY_PKGNAMEPREFIX</varname></entry> - <entry>Wird als <varname>PKGNAMEPREFIX</varname> verwendet, - um Pakete für verschiedene Versionen von Ruby zu - unterscheiden.</entry> - <entry><literal>ruby18-</literal></entry> - </row> - - <row> - <entry><varname>RUBY_VERSION</varname></entry> - <entry>Vollständige Version von Ruby in der Form - <literal>x.y.z</literal>.</entry> - <entry><literal>1.8.2</literal></entry> - </row> - - <row> - <entry><varname>RUBY_SITELIBDIR</varname></entry> - <entry>Installationsverzeichnis der von der - Rechnerarchitektur unabhängigen - Bibliotheken.</entry> - <entry><literal>/usr/local/lib/ruby/site_ruby/1.8</literal></entry> - </row> - - <row> - <entry><varname>RUBY_SITEARCHLIBDIR</varname></entry> - <entry>Installationsverzeichnis der von der Rechnerarchitektur - abhängigen Bibliotheken.</entry> - <entry><literal>/usr/local/lib/ruby/site_ruby/1.8/amd64-freebsd6</literal></entry> - </row> - - <row> - <entry><varname>RUBY_MODDOCDIR</varname></entry> - <entry>Installationsverzeichnis für die Dokumentation - der Module.</entry> - <entry><literal>/usr/local/share/doc/ruby18/patsy</literal></entry> - </row> - - <row> - <entry><varname>RUBY_MODEXAMPLESDIR</varname></entry> - <entry>Installationsverzeichnis für die Beispiele der - Module.</entry> - <entry><literal>/usr/local/share/examples/ruby18/patsy</literal></entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Eine vollständige Liste der verfügbarenVariablen - kann in <filename>/usr/ports/Mk/bsd.ruby.mk</filename> - eingesehen werden.</para> - </sect1> - - <sect1 xml:id="using-sdl"> - <title>SDL verwenden</title> - - <para>Die Variable <varname>USE_SDL</varname> wird für die - automatische Konfiguration der Abhängigkeiten für Ports - benutzt, die auf SDL basierende Bibliotheken wie - <package>devel/sdl12</package> und - <package>x11-toolkits/sdl_gui</package> - verwenden.</para> - - <para>Die folgenden SDL-Bibliotheken sind derzeit - bekannt:</para> - - <itemizedlist> - <listitem> - <para>sdl: <package>devel/sdl12</package></para> - </listitem> - - <listitem> - <para>gfx: <package>graphics/sdl_gfx</package></para> - </listitem> - - <listitem> - <para>gui: <package>x11-toolkits/sdl_gui</package></para> - </listitem> - - <listitem> - <para>image: <package>graphics/sdl_image</package></para> - </listitem> - - <listitem> - <para>ldbad: <package>devel/sdl_ldbad</package></para> - </listitem> - - <listitem> - <para>mixer: <package>audio/sdl_mixer</package></para> - </listitem> - - <listitem> - <para>mm: <package>devel/sdlmm</package></para> - </listitem> - - <listitem> - <para>net: <package>net/sdl_net</package></para> - </listitem> - - <listitem> - <para>sound: <package>audio/sdl_sound</package></para> - </listitem> - - <listitem> - <para>ttf: <package>graphics/sdl_ttf</package></para> - </listitem> - </itemizedlist> - - <para>Falls ein Port z.B. von - <package>net/sdl_net</package> und - <package>audio/sdl_mixer</package> - abhängt, so wäre die Syntax:</para> - - <programlisting>USE_SDL= net mixer</programlisting> - - <para>Die Abhängigkeit von - <package>devel/sdl12</package>, die durch - <package>net/sdl_net</package> und - <package>audio/sdl_mixer</package> entsteht, - wird automatisch zum Port hinzugefügt.</para> - - <para>Falls <varname>USE_SDL</varname> im Port verwendet wird, - so wird automatisch:</para> - - <itemizedlist> - <listitem> - <para>die Abhängigkeit von - <application>sdl12-config</application> zu - <varname>BUILD_DEPENDS</varname> hinzugefügt</para> - </listitem> - - <listitem> - <para>die Variable <varname>SDL_CONFIG</varname> zu - <varname>CONFIGURE_ENV</varname> hinzugefügt</para> - </listitem> - - <listitem> - <para>die Abhängigkeit der ausgewählten - Bibliotheken zu <varname>LIB_DEPENDS</varname> - hinzugefügt</para> - </listitem> - </itemizedlist> - - <para>Um zu überprüfen, ob die SDL-Bibliotheken - verfügbar sind, kann die Variable - <varname>WANT_SDL</varname> verwendet werden:</para> - - <programlisting>WANT_SDL=yes - -.include <bsd.port.pre.mk> - -.if ${HAVE_SDL:Mmixer}!="" -USE_SDL+= mixer -.endif - -.include <bsd.port.post.mk></programlisting> - - </sect1> - - <sect1 xml:id="using-wx"> - <title><application>wxWidgets</application> verwenden</title> - - <para>Dieser Abschnitt beschreibt den Status der - <application>wxWidgets</application>-Bibliotheken in den Ports - und deren Einbindung in das Ports-System.</para> - - <sect2 xml:id="wx-introduction"> - <title>Einführung</title> - - <para>Es gibt viele Probleme bei der gleichzeitigen Verwendung - unterschiedlicher Versionen von - <application>wxWidgets</application>-Bibliotheken (Dateien - unterschiedlicher - <application>wxWidgets</application>-Versionen haben - denselben Dateinamen). In den Ports wurde das Problem - dadurch gelöst, dass jede Version unter einem eigenen - Namen installiert wird, der die Versionsnummer als Suffix - beinhaltet.</para> - - <para>Der offensichtliche Nachteil dabei ist, dass jede - Anwendung so verändert werden muss, dass sie die - erwartete Version vorfindet. Die meisten solcher - Anwendungen benutzen das - <command>wx-config</command>-Skript, um die benötigten - Compiler- und Linkerflags zu erhalten. Dieses Skript hat - für jede verfügbare Version einen anderen Namen. - Die meisten Anwendungen beachten eine Umgebungsvariable oder - ein Argument beim <command>configure</command>-Skript, um - das gewünschte <command>wx-config</command>-Skript - festzulegen. Ansonsten müssen sie gepatcht - werden.</para> - </sect2> - - <sect2 xml:id="wx-version"> - <title>Auswahl der Version</title> - - <para>Um festzulegen, welche Version der - <application>wxWidgets</application> verwendet werden soll, - gibt es zwei Variablen (falls nur eine der beiden definiert - wird, so wird die andere auf einen Standardwert - gesetzt):</para> - - <table xml:id="wx-ver-sel-table" frame="none"> - <title>Variablen, um die - <application>wxWidgets</application>-Version festzulegen</title> - - <tgroup cols="3"> - <thead> - <row> - <entry>Variable</entry> - <entry>Beschreibung</entry> - <entry>Standardwert</entry> - </row> - </thead> - - <tbody> - <row> - <entry><varname>USE_WX</varname></entry> - <entry>Liste der Versionen, die der Port verwenden - kann</entry> - <entry>Alle verfügbaren Versionen</entry> - </row> - - <row> - <entry><varname>USE_WX_NOT</varname></entry> - <entry>Liste der Versionen, die der Port nicht verwenden - kann</entry> - <entry>Nichts</entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Es folgt eine Liste an möglichen - <application>wxWidgets</application>-Versionen und deren - zugehöriger Port:</para> - - <table frame="none"> - <title>Verfügbare - <application>wxWidgets</application>-Versionen</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Version</entry> - <entry>Port</entry> - </row> - </thead> - - <tbody> - <row> - <entry><literal>2.4</literal></entry> - <entry><package>x11-toolkits/wxgtk24</package></entry> - </row> - - <row> - <entry><literal>2.6</literal></entry> - <entry><package>x11-toolkits/wxgtk26</package></entry> - </row> - - <row> - <entry><literal>2.8</literal></entry> - <entry><package>x11-toolkits/wxgtk28</package></entry> - </row> - </tbody> - </tgroup> - </table> - - <note> - <para>Ab Version <literal>2.5</literal> werden auch Versionen in - Unicode unterstützt und über einen Unterport - mit dem Suffix <literal>-unicode</literal> installiert. - Dies kann aber auch über Variablen gehandhabt - werden (siehe <xref linkend="wx-unicode"/>).</para> - </note> - - <para>Die Variablen in <xref linkend="wx-ver-sel-table"/> - können auf einen oder mehrere (durch Leerzeichen - getrennt) der folgenden Werte gesetzt werden:</para> - - <table frame="none"> - <title>Spezifikationen der - <application>wxWidgets</application>-Versionen</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Beschreibung</entry> - <entry>Beispiel</entry> - </row> - </thead> - - <tbody> - <row> - <entry>Einzelne Version</entry> - <entry><literal>2.4</literal></entry> - </row> - - <row> - <entry>Aufsteigende Versionsnummern</entry> - <entry><literal>2.4+</literal></entry> - </row> - - <row> - <entry>Absteigende Versionsnummern</entry> - <entry><literal>2.6-</literal></entry> - </row> - - <row> - <entry>Versionsinterval (muss aufsteigend sein)</entry> - <entry><literal>2.4-2.6</literal></entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Desweiteren gibt es Variablen, über die eine - bevorzugte Version festgelegt werden kann. Die Versionen - können als Liste angegeben werden, wobei die - Reihenfolge der Priorisierung entspricht.</para> - - <table frame="none"> - <title>Variablen zur Festlegung der bevorzugten - <application>wxWidgets</application>-Version</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Name</entry> - <entry>Bestimmt für</entry> - </row> - </thead> - - <tbody> - <row> - <entry><varname>WANT_WX_VER</varname></entry> - <entry>den Port</entry> - </row> - - <row> - <entry><varname>WITH_WX_VER</varname></entry> - <entry>den Benutzer</entry> - </row> - </tbody> - </tgroup> - </table> - </sect2> - - <sect2 xml:id="wx-components"> - <title>Komponentenauswahl</title> - - <para>Desweiteren gibt es Anwendungen, die nicht direkt - <application>wxWidgets</application>-Bibliotheken sind, aber - trotzdem mit diesen zusammenhängen. Diese Anwendungen - können über die Variable - <varname>WX_COMPS</varname> festgelegt werden. Die folgenden - Komponenten sind verfügbar:</para> - - <table frame="none"> - <title>Verfügbare - <application>wxWidgets</application>-Komponenten</title> - - <tgroup cols="3"> - <thead> - <row> - <entry>Name</entry> - <entry>Beschreibung</entry> - <entry>Versionsbeschränkungen</entry> - </row> - </thead> - - <tbody> - <row> - <entry><literal>wx</literal></entry> - <entry>Hauptbibliothek</entry> - <entry><literal>Nichts</literal></entry> - </row> - - <row> - <entry><literal>contrib</literal></entry> - <entry>Beigesteuerte Bibliothek</entry> - <entry><literal>Nichts</literal></entry> - </row> - - <row> - <entry><literal>python</literal></entry> - <entry><application>wxPython</application> - (<application>Python</application>-Bindungen)</entry> - <entry><literal>2.4-2.6</literal></entry> - </row> - - <row> - <entry><literal>mozilla</literal></entry> - <entry><application>wxMozilla</application></entry> - <entry><literal>2.4</literal></entry> - </row> - - <row> - <entry><literal>svg</literal></entry> - <entry><application>wxSVG</application></entry> - <entry><literal>2.6</literal></entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Der Typ der Abhängigkeit kann für jede - Komponente durch hinzufügen eines Suffix (durch - Strichpunkt getrennt) festgelegt werden. Falls der Typ nicht - angegeben wird, wird ein Standardwert verwendet (siehe <xref linkend="wx-def-dep-types"/>). Die folgenden Typen sind - verfügbar:</para> - - <table frame="none"> - <title>Verfügbare Typen von - <application>wxWidgets</application>-Abhängigkeiten</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Name</entry> - <entry>Beschreibung</entry> - </row> - </thead> - - <tbody> - <row> - <entry><literal>build</literal></entry> - <entry>Komponente wird zum Bau - benötigt – äquivalent zu - <varname>BUILD_DEPENDS</varname></entry> - </row> - - <row> - <entry><literal>run</literal></entry> - <entry>Komponente wird zum Ausführen - benötigt – äquivalent zu - <varname>RUN_DEPENDS</varname></entry> - </row> - - <row> - <entry><literal>lib</literal></entry> - <entry>Komponente wird zum Bau und Ausführen - benötigt – äquivalent zu - <varname>LIB_DEPENDS</varname></entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Die Standardwerte für die einzelnen Komponenten - sind in der folgenden Tabelle aufgeführt:</para> - - <table xml:id="wx-def-dep-types" frame="none"> - <title>Standardtypen der - <application>wxWidgets</application>-Abhängigkeiten</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Komponente</entry> - <entry>Typ der Abhängigkeit</entry> - </row> - </thead> - - <tbody> - <row> - <entry><literal>wx</literal></entry> - <entry><literal>lib</literal></entry> - </row> - - <row> - <entry><literal>contrib</literal></entry> - <entry><literal>lib</literal></entry> - </row> - - <row> - <entry><literal>python</literal></entry> - <entry><literal>run</literal></entry> - </row> - - <row> - <entry><literal>mozilla</literal></entry> - <entry><literal>lib</literal></entry> - </row> - - <row> - <entry><literal>svg</literal></entry> - <entry><literal>lib</literal></entry> - </row> - </tbody> - </tgroup> - </table> - - <example xml:id="wx-components-example"> - <title>Auswahl von - <application>wxWidgets</application>-Komponenten</title> - - <para>Der folgende Ausschnitt entspricht einem Port, der - die <application>wxWidgets</application>-Version - <literal>2.4</literal> und die zugehörigen - Bibliotheken verwendet.</para> - - <programlisting>USE_WX= 2.4 -WX_COMPS= wx contrib</programlisting> - </example> - </sect2> - - <sect2 xml:id="wx-unicode"> - <title>Unicode</title> - - <para>Die <application>wxWidgets</application>-Bibliotheken - unterstützen Unicode seit der Version - <literal>2.5</literal>. In den Ports sind beide Versionen - verfügbar und können über die folgenden - Variablen ausgewählt werden:</para> - - <table xml:id="wx-unicode-var-table" frame="none"> - <title>Variablen, um Unicode in den - <application>wxWidgets</application>-Versionen - auszuwählen</title> - - <tgroup cols="3"> - <thead> - <row> - <entry>Variable</entry> - <entry>Beschreibung</entry> - <entry>Bestimmt für</entry> - </row> - </thead> - - <tbody> - <row> - <entry><varname>WX_UNICODE</varname></entry> - <entry>Der Port funktioniert - <emphasis>ausschließlich</emphasis> mit der - Unicode-Version</entry> - <entry>den Port</entry> - </row> - - <row> - <entry><varname>WANT_UNICODE</varname></entry> - <entry>Der Port funktioniert in beiden - Versionen – bevorzugt wird jedoch - Unicode</entry> - <entry>den Port</entry> - </row> - - <row> - <entry><varname>WITH_UNICODE</varname></entry> - <entry>Der Port verwendet die Unicode-Version</entry> - <entry>den Benutzer</entry> - </row> - - <row> - <entry><varname>WITHOUT_UNICODE</varname></entry> - <entry>Der Port verwendet, falls unterstützt, die - normale Version (falls <varname>WX_UNICODE</varname> - nicht definiert ist)</entry> - <entry>den Benutzer</entry> - </row> - </tbody> - </tgroup> - </table> - - <warning> - <para>Die Variable <varname>WX_UNICODE</varname> darf - nicht bei Ports benutzt werden, die sowohl die Version mit - als auch ohne Unterstützung für Unicode - verwenden können. Falls der Port - standardmäßig Unterstützung für - Unicode bieten soll, verwenden Sie - <varname>WANT_UNICODE</varname> stattdessen.</para> - </warning> - </sect2> - - <sect2 xml:id="wx-version-detection"> - <title>Feststellen der installierten Version</title> - - <para>Um eine bereits installierte Version zu finden, muss - <varname>WANT_WX</varname> definiert werden. Falls diese - Variable nicht auf eine bestimmte Versionsnummer gesetzt - wird, werden die Komponenten einen Suffix mit der - Versionsnummer tragen. Die Variable - <varname>HAVE_WX</varname> wird gesetzt, falls eine - installierte Version vorgefunden wurde.</para> - - <example xml:id="wx-ver-det-example"> - <title>Installierte - <application>wxWidgets</application>-Versionen - und –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 xml:id="wx-defined-variables"> - <title>Vordefinierte Variablen</title> - - <para>Die folgenden Variablen sind in den Ports - verfügbar (nachdem sie entsprechend <xref linkend="wx-ver-sel-table"/> definiert wurden).</para> - - <table frame="none"> - <title>Vordefinierte Variablen für Ports, die - <application>wxWidgets</application> verwenden</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Name</entry> - <entry>Beschreibung</entry> - </row> - </thead> - - <tbody> - <row> - <entry><varname>WX_CONFIG</varname></entry> - <entry>Pfad zum <application>wxWidgets</application> - <command>wx-config</command>-Skript (mit - unterschiedlichem Namen)</entry> - </row> - - <row> - <entry><varname>WXRC_CMD</varname></entry> - <entry>Pfad zum <application>wxWidgets</application> - <command>wxrc</command>-Programm (mit - unterschiedlichem Namen)</entry> - </row> - - <row> - <entry><varname>WX_VERSION</varname></entry> - <entry>Version der <application>wxWidgets</application>, die - verwendet werden soll (z.B. <literal>2.6</literal>)</entry> - </row> - - <row> - <entry><varname>WX_UNICODE</varname></entry> - <entry>Falls Unterstützung für Unicode nicht - explizit definiert, jedoch verwendet wird, dann wird die - Unterstützung automatisch aktiviert.</entry> - </row> - </tbody> - </tgroup> - </table> - </sect2> - - <sect2 xml:id="wx-premk"> - <title>Verarbeitung in - <filename>bsd.port.pre.mk</filename></title> - - <para>Falls die Variablen gleich nach dem Importieren von - <filename>bsd.port.pre.mk</filename> benutzt werden sollen, - so muss die Variable <varname>WX_PREMK</varname> definiert - werden.</para> - - <important> - <para>Falls <varname>WX_PREMK</varname> definiert ist, so - werden Version, Abhängigkeiten, Komponenten und - vordefinierte Variablen nicht geändert, wenn die - Variablen des <application>wxWidgets</application>-Ports - <emphasis>nach</emphasis> dem Einbinden von - <filename>bsd.port.pre.mk</filename> geändert - werden.</para> - </important> - - <example xml:id="wx-premk-example"> - <title>Verwendung von - <application>wxWidgets</application>-Variablen - in Kommandos</title> - - <para>Der folgende Ausschnitt zeigt die Verwendung von - <varname>WX_PREMK</varname> durch Ausführen des - <command>wx-config</command>-Skriptes, um die - vollständige Version als Zeichenkette zu erhalten, - diese dann einer Variablen zuzuweisen und die Variable - anschließend einem Programm zu - übergeben.</para> - - <programlisting>USE_WX= 2.4 -WX_PREMK= yes - -.include <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 - <varname>WX_PREMK</varname> verwendet werden.</para> - </note> - </sect2> - - <sect2 xml:id="wx-additional-config-args"> - <title>Weitere <command>configure</command>-Argumente</title> - - <para>Einige GNU <command>configure</command>-Skripte - können <application>wxWidgets</application> nicht - auffinden, falls nur die Umgebungsvariable - <literal>WX_CONFIG</literal> gesetzt ist, sondern - benötigen zusätzliche Argumente. Dafür kann - die Variable <varname>WX_CONF_ARGS</varname> benutzt - werden.</para> - - <table frame="none"> - <title>Zulässige Werte für - <varname>WX_CONF_ARGS</varname></title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Möglicher Wert</entry> - <entry>Resultierendes Argument</entry> - </row> - </thead> - - <tbody> - <row> - <entry><literal>absolute</literal></entry> - <entry><literal>--with-wx-config=${WX_CONFIG}</literal></entry> - </row> - - <row> - <entry><literal>relative</literal></entry> - <entry><literal>--with-wx=${LOCALBASE} - --with-wx-config=${WX_CONFIG:T}</literal></entry> - </row> - </tbody> - </tgroup> - </table> - </sect2> - </sect1> - - <sect1 xml:id="using-lua"> - <title>Verwendung von <application>Lua</application></title> - - <para>Dieser Abschnitt beschreibt den Status der - <application>Lua</application>-Bibliotheken in den Ports - und deren Einbindung in das Ports System.</para> - - <sect2 xml:id="lua-introduction"> - <title>Einführung</title> - - <para>Es gibt viele Probleme bei der gleichzeitigen - Verwendung unterschiedlicher Versionen von - <application>Lua</application>-Bibliotheken (Dateien - unterschiedlicher Versionen haben denselben Dateinamen). In - den Ports wurde das Problem gelöst, indem jede Version - unter einem eigenen Namen mit der Versionsnummer als Suffix - installiert wird.</para> - - <para>Der offensichtliche Nachteil dabei ist, dass jede - Anwendung so verändert werden muss, dass sie die - erwartete Version vorfindet. Dies kann jedoch durch - zusätzliche Flags für Compiler und Linker - gelöst werden.</para> - </sect2> - - <sect2 xml:id="lua-version"> - <title>Auswahl der Version</title> - - <para>Um festzulegen, welche Version von - <application>Lua</application> verwendet werden soll, gibt - es zwei Variablen (falls nur eine der beiden definiert ist, - so wird die andere auf einen Standardwert gesetzt):</para> - - <table xml:id="lua-ver-sel-table" frame="none"> - <title>Variablen, um die - <application>Lua</application>-Version festzulegen</title> - - <tgroup cols="3"> - <thead> - <row> - <entry>Variable</entry> - <entry>Beschreibung</entry> - <entry>Standardwert</entry> - </row> - </thead> - - <tbody> - <row> - <entry><varname>USE_LUA</varname></entry> - <entry>Liste der Versionen, welche der Port verwenden - kann</entry> - <entry>Alle verfügbaren Versionen</entry> - </row> - - <row> - <entry><varname>USE_LUA_NOT</varname></entry> - <entry>Liste der Versionen, die der Port nicht verwenden - kann</entry> - <entry>Nichts</entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Es folgt eine Liste an möglichen - <application>Lua</application>-Versionen und deren - zugehöriger Port:</para> - - <table frame="none"> - <title>Verfügbare - <application>Lua</application>-Versionen</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Version</entry> - <entry>Port</entry> - </row> - </thead> - - <tbody> - <row> - <entry><literal>4.0</literal></entry> - <entry><package>lang/lua4</package></entry> - </row> - - <row> - <entry><literal>5.0</literal></entry> - <entry><package>lang/lua50</package></entry> - </row> - - <row> - <entry><literal>5.1</literal></entry> - <entry><package>lang/lua</package></entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Die Variablen in <xref linkend="lua-ver-sel-table"/> - können auf einen oder mehrere (durch Leerzeichen - getrennt) der folgenden Werte gesetzt werden:</para> - - <table frame="none"> - <title>Spezifikationen der - <application>Lua</application>-Versionen</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Beschreibung</entry> - <entry>Beispiel</entry> - </row> - </thead> - - <tbody> - <row> - <entry>Spezielle Version</entry> - <entry><literal>4.0</literal></entry> - </row> - - <row> - <entry>Aufsteigende Versionen</entry> - <entry><literal>5.0+</literal></entry> - </row> - - <row> - <entry>Absteigende Versionen</entry> - <entry><literal>5.0-</literal></entry> - </row> - - <row> - <entry>Versionenintervall (muss aufsteigend sein)</entry> - <entry><literal>5.0-5.1</literal></entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Desweiteren gibt es Variablen, über die eine - bevorzugte Version festgelegt werden kann. Die Versionen - können als Liste angegeben werden, wobei die - Reihenfolge der Priorisierung entspricht.</para> - - <table frame="none"> - <title>Variablen zur Festlegung der bevorzugten - <application>Lua</application>-Version</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Name</entry> - <entry>Bestimmt für</entry> - </row> - </thead> - - <tbody> - <row> - <entry><varname>WANT_LUA_VER</varname></entry> - <entry>den Port</entry> - </row> - - <row> - <entry><varname>WITH_LUA_VER</varname></entry> - <entry>den Benutzer</entry> - </row> - </tbody> - </tgroup> - </table> - - <example xml:id="lua-version-example"> - <title>Auswahl der - <application>Lua</application>-Version</title> - - <para>Der folgende Ausschnitt entspricht einem Port, der - <application>Lua</application> in den Versionen - <literal>5.0</literal> oder <literal>5.1</literal> - verwenden kann und standardmäßig - <literal>5.0</literal> verwendet. Diese Einstellung kann - durch die benutzerdefinierte Variable - <varname>WITH_LUA_VER</varname> überschrieben - werden.</para> - - <programlisting>USE_LUA= 5.0-5.1 -WANT_LUA_VER= 5.0</programlisting> - </example> - </sect2> - - <sect2 xml:id="lua-components"> - <title>Komponentenauswahl</title> - - <para>Desweiteren gibt es Anwendungen, die nicht direkt - <application>Lua</application>-Bibliotheken sind, aber - trotzdem mit diesen zusammenhängen. Diese Anwendungen - können über die Variable - <varname>LUA_COMPS</varname> festgelegt werden. Die - folgenden Komponenten sind verfügbar:</para> - - <table frame="none"> - <title>Verfügbare - <application>Lua</application>-Komponenten</title> - - <tgroup cols="3"> - <thead> - <row> - <entry>Name</entry> - <entry>Beschreibung</entry> - <entry>Versionseinschränkungen</entry> - </row> - </thead> - - <tbody> - <row> - <entry><literal>lua</literal></entry> - <entry>Hauptbibliothek</entry> - <entry>Keine</entry> - </row> - - <row> - <entry><literal>tolua</literal></entry> - <entry>Bibliothek für die Unterstützung von C/C++-Code</entry> - <entry><literal>4.0-5.0</literal></entry> - </row> - - <row> - <entry><literal>ruby</literal></entry> - <entry>Ruby-Bindungen</entry> - <entry><literal>4.0-5.0</literal></entry> - </row> - </tbody> - </tgroup> - </table> - - <note> - <para>Es gibt weitere Komponenten, die jedoch Module - für den Interpreter sind und nicht von Anwendungen - benutzt werden (nur von anderen Modulen).</para> - </note> - - <para>Der Typ der Abhängigkeit kann für jede - Komponente durch Hinzufügen eines Suffix (durch - Strichpunkt getrennt) festgelegt werden. Falls der Typ nicht - angegeben wird, wird ein Standardwert verwendet (siehe <xref linkend="lua-def-dep-types"/>). Die folgenden Typen sind - verfügbar:</para> - - <table frame="none"> - <title>Verfügbare Typen von - <application>Lua</application>-Abhängigkeiten</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Name</entry> - <entry>Beschreibung</entry> - </row> - </thead> - - <tbody> - <row> - <entry><literal>build</literal></entry> - <entry>Komponente wird zum Bau - benötigt – äquivalent zu - <varname>BUILD_DEPENDS</varname></entry> - </row> - - <row> - <entry><literal>run</literal></entry> - <entry>Komponente wird zum Ausführen - benötigt – äquivalent zu - <varname>RUN_DEPENDS</varname></entry> - </row> - - <row> - <entry><literal>lib</literal></entry> - <entry>Komponente wird zum Bau und zum Ausführen - benötigt – äquivalent zu - <varname>LIB_DEPENDS</varname></entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Die Standardwerte für die einzelnen Komponenten - sind in der folgenden Tabelle aufgeführt:</para> - - <table xml:id="lua-def-dep-types" frame="none"> - <title>Standardtypen für - <application>Lua</application>-Abhängigkeiten</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Komponente</entry> - <entry>Typ der Abhängigkeit</entry> - </row> - </thead> - - <tbody> - <row> - <entry><literal>lua</literal></entry> - <entry><literal>lib</literal> für - <literal>4.0-5.0</literal> (shared) und - <literal>build</literal> für <literal>5.1</literal> - (static)</entry> - </row> - - <row> - <entry><literal>tolua</literal></entry> - <entry><literal>build</literal> (static)</entry> - </row> - - <row> - <entry><literal>ruby</literal></entry> - <entry><literal>lib</literal> (shared)</entry> - </row> - </tbody> - </tgroup> - </table> - - <example xml:id="lua-components-example"> - <title>Auswahl von - <application>Lua</application>-Komponenten</title> - - <para>Der folgende Ausschnitt entspricht einem Port, - welcher die <application>Lua</application>-Version - <literal>4.0</literal> und die zugehörigen - <application>Ruby</application>-Bindungen - verwendet.</para> - - <programlisting>USE_LUA= 4.0 -LUA_COMPS= lua ruby</programlisting> - </example> - </sect2> - - <sect2 xml:id="lua-version-detection"> - <title>Feststellen der installierten Version</title> - - <para>Um eine bereits installierte Version zu finden, muss - <varname>WANT_LUA</varname> definiert werden. Falls diese - Variable nicht auf eine bestimmte Versionsnummer gesetzt - wird, werden die Komponenten einen Suffix mit der - Versionsnummer tragen. Die Variable - <varname>HAVE_LUA</varname> wird gesetzt, falls eine - installierte Version vorgefunden wurde.</para> - - <example xml:id="lua-ver-det-example"> - <title>Installierte - <application>Lua</application>-Versionen - und– 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 xml:id="lua-defined-variables"> - <title>Vordefinierte Variablen</title> - - <para>Die folgenden Variablen sind in den Ports - verfügbar (nachdem sie entsprechend <xref linkend="lua-ver-sel-table"/> definiert wurden).</para> - - <table frame="none"> - <title>Vordefinierte Variablen für Ports, die - <application>Lua</application> verwenden</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Name</entry> - <entry>Beschreibung</entry> - </row> - </thead> - - <tbody> - <row> - <entry><varname>LUA_VER</varname></entry> - <entry>Die <application>Lua</application>-Version, die - verwendet wird (z.B. <literal>5.1</literal>)</entry> - </row> - - <row> - <entry><varname>LUA_VER_SH</varname></entry> - <entry>Die Hauptversion für - shared-<application>Lua</application>-Bibliotheken (z.B. - <literal>1</literal>)</entry> - </row> - - <row> - <entry><varname>LUA_VER_STR</varname></entry> - <entry>Die <application>Lua</application>-Version ohne die - Punkte (z.B. <literal>51</literal>)</entry> - </row> - - <row> - <entry><varname>LUA_PREFIX</varname></entry> - <entry>Der Präfix, unter dem - <application>Lua</application> (und Komponenten) - installiert ist</entry> - </row> - - <row> - <entry><varname>LUA_SUBDIR</varname></entry> - <entry>Das Verzeichnis unter - <filename>${PREFIX}/bin</filename>, - <filename>${PREFIX}/share</filename> und - <filename>${PREFIX}/lib</filename>, in welchem - <application>Lua</application> installiert ist</entry> - </row> - - <row> - <entry><varname>LUA_INCDIR</varname></entry> - <entry>Das Verzeichnis, in dem - <application>Lua</application>- und - <application>tolua</application>-Header-Dateien - installiert sind</entry> - </row> - - <row> - <entry><varname>LUA_LIBDIR</varname></entry> - <entry>Das Verzeichnis, in dem - <application>Lua</application>– und - <application>tolua</application>-Bibliotheken - installiert sind</entry> - </row> - - <row> - <entry><varname>LUA_MODLIBDIR</varname></entry> - <entry>Das Verzeichnis, in dem - <application>Lua</application> Modul-Bibliotheken - (<filename>.so</filename>) installiert sind</entry> - </row> - - <row> - <entry><varname>LUA_MODSHAREDIR</varname></entry> - <entry>Das Verzeichnis, in dem - <application>Lua</application>-Module - (<filename>.lua</filename>) installiert sind</entry> - </row> - - <row> - <entry><varname>LUA_PKGNAMEPREFIX</varname></entry> - <entry>Der Paketnamen-Präfix, der von - <application>Lua</application>-Modulen verwendet - wird</entry> - </row> - - <row> - <entry><varname>LUA_CMD</varname></entry> - <entry>Das Verzeichnis, in dem der - <application>Lua</application>-Interpreter liegt</entry> - </row> - - <row> - <entry><varname>LUAC_CMD</varname></entry> - <entry>Das Verzeichnis, in dem der - <application>Lua</application>-Compiler liegt</entry> - </row> - - <row> - <entry><varname>TOLUA_CMD</varname></entry> - <entry>Das Verzeichnis, in dem das - <application>tolua</application>-Programm liegt</entry> - </row> - </tbody> - </tgroup> - </table> - - <example xml:id="lua-variables-example"> - <title>Einem Port mitteilen, in welchem Verzeichnis - <application>Lua</application> liegt</title> - - <para>Der folgende Ausschnitt zeigt, wie einem Port, - welcher ein configure-Skript verwendet, mitgeteilt werden - kann, wo die <application>Lua</application>-Header-Dateien - und Bibliotheken liegen.</para> - - <programlisting> -USE_LUA= 4.0 -GNU_CONFIGURE= yes -CONFIGURE_ENV= CPPFLAGS="-I${LUA_INCDIR}" LDFLAGS="-L${LUA_LIBDIR}"</programlisting> - </example> - </sect2> - - <sect2 xml:id="lua-premk"> - <title>Verarbeitung in - <filename>bsd.port.pre.mk</filename></title> - - <para>Falls die Variablen gleich nach dem Einbinden von - <filename>bsd.port.pre.mk</filename> benutzt werden sollen, - so muss die Variable <varname>LUA_PREMK</varname> definiert - werden.</para> - - <important> - <para>Falls <varname>LUA_PREMK</varname> definiert ist, so - werden Version, Abhängigkeiten, Komponenten und - vordefinierte Variablen nicht geändert, wenn die - Variablen des <application>Lua</application>-Ports - <emphasis>nach</emphasis> dem Einbinden von - <filename>bsd.port.pre.mk</filename> geändert - werden.</para> - </important> - - <example xml:id="lua-premk-example"> - <title>Verwendung von - <application>Lua</application>-Variablen in - Kommandos</title> - - <para>Der folgende Ausschnitt zeigt die Verwendung von - <varname>LUA_PREMK</varname> durch Ausführen des - <application>Lua</application>-Interpreters, um die - vollständige Version als Zeichenkette zu erhalten, - diese dann einer Variablen zuzuweisen und die Variable - schließlich einem Programm zu übergeben.</para> - - <programlisting>USE_LUA= 5.0 -LUA_PREMK= yes - -.include <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 - <varname>LUA_PREMK</varname> verwendet werden.</para> - </note> - </sect2> - </sect1> - - <sect1 xml:id="using-xfce"> - <title>Xfce verwenden</title> - - <para>Die <varname>USE_XFCE</varname>-Variable wird für - die automatische Konfiguration der Abhängigkeiten - eingesetzt, welche die Xfce-Basisbibliotheken oder Anwendungen - wie <package>x11-toolkits/libxfce4gui</package> und - <package>x11-wm/xfce4-panel</package> - verwenden.</para> - - <para>Die folgenden Xfce-Bibliotheken und -Anwendungen werden - derzeit unterstützt:</para> - - <itemizedlist> - <listitem> - <para>libexo: <package>x11/libexo</package></para> - </listitem> - - <listitem> - <para>libgui: <package>x11-toolkits/libxfce4gui</package></para> - </listitem> - - <listitem> - <para>libutil: <package>x11/libxfce4util</package></para> - </listitem> - - <listitem> - <para>libmcs: <package>x11/libxfce4mcs</package></para> - </listitem> - - <listitem> - <para>mcsmanager: <package>sysutils/xfce4-mcs-manager</package></para> - </listitem> - - <listitem> - <para>panel: <package>x11-wm/xfce4-panel</package></para> - </listitem> - - <listitem> - <para>thunar: <package>x11-fm/thunar</package></para> - </listitem> - - <listitem> - <para>wm: <package>x11-wm/xfce4-wm</package></para> - </listitem> - - <listitem> - <para>xfdev: <package>dev/xfce4-dev-tools</package></para> - </listitem> - </itemizedlist> - - <para>Die folgenden zusätzlichen Parameter werden - unterstützt:</para> - - <itemizedlist> - <listitem> - <para>configenv: Benutzen Sie dies, wenn Ihr Port eine - speziell angepasste - <varname>CONFIGURE_ENV</varname>-Variable benötigt, - um seine erforderlichen Bibliotheken zu finden. - <programlisting>-I${LOCALBASE}/include - -L${LOCALBASE}/lib</programlisting> wird CPPFLAGS - hinzugefügt und ergibt - <varname>CONFIGURE_ENV</varname>.</para> - </listitem> - </itemizedlist> - - <para>Wenn also ein Port von <package>sysutils/xfce4-mcs-manager</package> - abhängt und die speziellen CPPFLAGS in seiner - configure-Umgebung verlangt, dann würde die Syntax wie - folgt aussehen:</para> - - <programlisting>USE_XFCE= mcsmanager configenv</programlisting> - </sect1> - - <sect1 xml:id="using-mozilla"> - <title>Mozilla verwenden</title> - - <table frame="none"> - <title>Variablen für Ports, die Mozilla verwenden</title> - - <tgroup cols="2"> - <tbody> - <row> - <entry><varname>USE_GECKO</varname></entry> - - <entry>Vom Port unterstützte Gecko-Backends. Mögliche - Werte sind: - <literal>libxul</literal> (<filename>libxul.so</filename>), - <literal>seamonkey</literal> (<filename>libgtkembedmoz.so</filename>, - (veraltet, sollte daher nicht mehr verwendet werden).</entry> - </row> - - <row> - <entry><varname>USE_FIREFOX</varname></entry> - - <entry>Der Port benötigt Firefox, um korrekt - zu funktionieren. Mögliche Werte sind: - <literal>yes</literal> (verwendet die Standardversion), - <literal>40</literal>, <literal>36</literal>, - <literal>35</literal>. Die Standardversion ist derzeit - <literal>40</literal>.</entry> - </row> - - <row> - <entry><varname>USE_FIREFOX_BUILD</varname></entry> - - <entry>Um den Port zu bauen, muss Firefox installiert - sein. Wird diese Variable gesetzt, wird - automatisch auch <varname>USE_FIREFOX</varname> - gesetzt.</entry> - </row> - - <row> - <entry><varname>USE_SEAMONKEY</varname></entry> - - <entry>Der Port benötigt Seamonkey, um korrekt - zu funktionieren. Mögliche Werte sind: - <literal>yes</literal> (verwendet die Standardversion), - <literal>20</literal>, <literal>11</literal> - (veraltet, sollte daher nicht mehr verwendet werden). - Die Standardversion ist <literal>20</literal>.</entry> - </row> - - <row> - <entry><varname>USE_SEAMONKEY_BUILD</varname></entry> - - <entry>Um den Port zu bauen, muss Seamonkey installiert - sein. Wird diese Variable gesetzt, wird - automatisch auch <varname>USE_SEAMONKEY</varname> - gesetzt.</entry> - </row> - - <row> - <entry><varname>USE_THUNDERBIRD</varname></entry> - - <entry>Dieser Port benötigt Thunderbird, um korrekt - zu funktionieren. Mögliche Werte sind: - <literal>yes</literal> (verwendet die Standardversion), - <literal>31</literal>, <literal>30</literal> - (veraltet, sollte daher nicht mehr verwendet werden). - Die Standardversion ist <literal>31</literal>.</entry> - </row> - - <row> - <entry><varname>USE_THUNDERBIRD_BUILD</varname></entry> - - <entry>Um den Port zu bauen, muss Thunderbird installiert - sein. Wird diese Variable gesetzt, wird - automatisch auch <varname>USE_THUNDERBIRD</varname> - gesetzt.</entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Eine komplette Liste aller verfügbaren Variablen finden - Sie in der Datei - <filename>/usr/ports/Mk/bsd.gecko.mk</filename>.</para> - </sect1> - - <sect1 xml:id="using-databases"> - <title>Benutzung von Datenbanken</title> - - <table frame="none"> - <title>Variablen für Ports, die Datenbanken - benutzen</title> - - <tgroup cols="2"> - <thead> - <row> - <entry>Variable</entry> - - <entry>Bedeutung</entry> - </row> - </thead> - - <tbody> - <row> - <entry><varname>USE_BDB</varname></entry> - - <entry>Falls die Variable auf <literal>yes</literal> - gesetzt ist, füge eine Abhängigkeit von - <package>databases/db41</package> - hinzu. Die Variable kann auch folgende Werte - annehmen: 40, 41, 42, 43, 44, 46, 47, 48 oder 51. - Sie können eine Folge akzeptierter Werte - angeben - <varname>USE_BDB</varname>=42+ stellt die - höchste installierte Version fest und greift - auf 42 zurück, falls sonst nichts installiert - ist.</entry> - </row> - - <row> - <entry><varname>USE_MYSQL</varname></entry> - - <entry>Falls die Variable auf <literal>yes</literal> - gesetzt ist, füge <package>databases/mysql55-server</package> - als Abhängigkeit hinzu. Die damit - verknüpfte Variable - <varname>WANT_MYSQL_VER</varname> kann Werte wie - 323, 40, 41, 50, 51, 52, 55, oder 60 annehmen.</entry> - </row> - - <row> - <entry><varname>USE_PGSQL</varname></entry> - - <entry>Falls die Variable auf <literal>yes</literal> - gesetzt ist, füge eine Abhängigkeit von - <package>databases/postgresql84</package> - hinzu. Die damit verknüpfte Variable - <varname>WANT_PGSQL_VER</varname> kann Werte wie 73, - 74, 80, 81, 82, 83, oder 90 annehmen.</entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Weitere Informationen zu diesem Thema finden sich in der - Datei <link xlink:href="http://www.freebsd.org/cgi/cvsweb.cgi/ports/Mk/bsd.database.mk"> - bsd.database.mk</link>.</para> - </sect1> - - <sect1 xml:id="rc-scripts"> - <title>Starten und Anhalten von Diensten (rc Skripten)</title> - - <para><filename>rc.d</filename>-Skripten werden zum Starten - von Diensten während des Systemstarts verwendet und um - den Administratoren einen Standardweg zum Anhalten und Starten - von Diensten zu bieten. Ports halten sich an dieses - systemweite <filename>rc.d</filename>-Framework. Details zu - deren Benutzung können im <link xlink:href="&url.books.handbook;/configtuning-rcd.html">rc.d Kapitel - des Handbuchs</link> nachgelesen werden. Ausführliche - Beschreibungen der verfügbaren Befehle stehen in - &man.rc.8; und &man.rc.subr.8;. Desweiteren gibt es <link xlink:href="&url.articles.rc-scripting.en;">einen Artikel</link> zu - praktischen Aspekten bezüglich - <filename>rc.d</filename>-Skripten.</para> - - <para>Ein oder mehrere <filename>rc.d</filename>-Skripten können installiert - werden mittels:</para> - - <programlisting>USE_RC_SUBR= doormand</programlisting> - - <para>Skripten müssen im Unterverzeichnis - <filename>files</filename> abgelegt und jeder Skript-Datei - muss ein <literal>.in</literal>-Suffix hinzugefügt - werden. Standardmäßige - <varname>SUB_LIST</varname>-Ersetzungen werden für diese - Dateien unterstützt. Die Verwendung von - <literal>%%PREFIX%%</literal> und - <literal>%%LOCALBASE%%</literal> wird dringend empfohlen. - Näheres zu <varname>SUB_LIST</varname> kann im <link linkend="using-sub-files">zugehörigen Kapitel</link> - nachgelesen werden.</para> - - <para>Für &os;-Versionen, die älter als 6.1-RELEASE - sind, ist die Integration mittels &man.rcorder.8; - möglich, indem <varname>USE_RCORDER</varname> anstatt - <varname>USE_RC_SUBR</varname> verwendet wird. Die Verwendung - dieser Methode ist jedoch nur notwendig, wenn der Port in die - Verzeichnisstruktur des Basissystems installiert werden kann - oder der Dienst vor den - <filename>FILESYSTEMS</filename>-Skripten in - <filename>rc.d</filename> des Basissystems gestartet sein - muss.</para> - - <para>Seit &os; 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 - <varname>USE_RC_SUBR</varname>-Variablen - übereinstimmen.</para> - </sect2> - </sect1> - - <sect1 xml:id="users-and-groups"> - <title>Hinzufügen von Benutzern und Gruppen</title> - - <para>Manche Ports setzen voraus, dass ein bestimmter Benutzer - auf dem System angelegt ist. Wählen Sie in einem solchen - Fall eine freie Kennnummer zwischen 50 und 999 aus und tragen - Sie diese in <filename>ports/UIDs</filename> (für - Benutzer) oder <filename>ports/GIDs</filename> (für - Gruppen) ein. Stellen Sie dabei sicher, dass Sie keine - Kennnummer auswählen, die bereits vom System oder von - anderen Ports verwendet wird.</para> - - <para>Erstellen Sie bitte eine entsprechende Patch-Datei - für diese beiden Dateien, wenn für Ihren Port ein - neuer Benutzer oder eine neue Gruppe angelegt werden - muss.</para> - - <para>Sie können dann die Variablen - <varname>USERS</varname> und <varname>GROUPS</varname> im - <filename>Makefile</filename> benutzen, um bei der - Port-Installation das automatische Anlegen des Benutzers zu - veranlassen.</para> - - <programlisting>USERS= pulse -GROUPS= pulse pulse-access pulse-rt</programlisting> - - <para>Die Liste mit den momentan belegten UIDs (GIDs) befindet - sich in <filename>ports/UIDs</filename> - (<filename>ports/GIDs</filename>).</para> - </sect1> - - <sect1> - <title>Von Kernelquellen abhängige Ports</title> - - <para>Einige Ports (beispielsweise vom Kernel ladbare Module) - benötigen die Kernelsourcen, damit sie gebaut werden - können. Die folgenden Zeilen beschreiben den korrekten - Weg, wie Sie feststellen können, ob der Benutzer die - Kernelsourcen installiert hat:</para> - - <programlisting>.if !exists(${SRC_BASE}/sys/Makefile) - -IGNORE= requires kernel sources to be installed -.endif</programlisting> - </sect1> - </chapter> - - <chapter xml:id="plist"> - <title>Fortgeschrittene - <filename>pkg-plist</filename>-Methoden</title> - - <sect1 xml:id="plist-sub"> - <title>Änderungen an <filename>pkg-plist</filename> mit - Hilfe von make-Variablen</title> - - <para>Einige Ports, insbesondere die - <literal>p5-</literal>-Ports, müssen, abhängig von - ihren Konfigurationsoptionen (oder im Falle der p5-Ports von - der <literal>perl</literal>-Version), die - <filename>pkg-plist</filename> verändern. Um dies zu - vereinfachen, werden für jeden Eintrag in - <filename>pkg-plist</filename> die Variablen - <literal>%%OSREL%%</literal>, <literal>%%PERL_VER%%</literal> - und <literal>%%PERL_VERSION%%</literal> durch die jeweiligen - Werte ersetzt. Der Wert von <literal>%%OSREL%%</literal> ist - die Revisionsnummer des Betriebssystems (z.B. - <literal>4.9</literal>). <literal>%%PERL_VERSION%%</literal> - und <literal>%%PERL_VER%%</literal> geben die - vollständige Versionsnummer von <command>perl</command> - (z.B. <literal>5.8.9</literal>) an. Weitere, die - Dokumentationsdateien des Ports betreffende - <literal>%%VARS%%</literal>, werden - im <link linkend="install-documentation">entsprechenden - Abschnitt</link> erläutert.</para> - - <para>Falls Sie weitere Ersetzungen von Variablen - durchführen müssen, können Sie in der Variable - <varname>PLIST_SUB</varname> eine Liste von - <literal>VAR=VALUE</literal>-Paaren - angeben, wobei in der <filename>pkg-plist</filename> - <literal>%%VAR%%</literal> durch - <replaceable>VALUE</replaceable> ersetzt wird.</para> - - <para>Wenn Sie z.B. einen Port haben, der viele Dateien in ein - versionsspezifisches Unterverzeichnis installiert, dann - können Sie etwas wie</para> - - <programlisting>OCTAVE_VERSION= 2.0.13 -PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION}</programlisting> - - <para>in das <filename>Makefile</filename> schreiben und - <literal>%%OCTAVE_VERSION%%</literal> verwenden, - unabhängig davon, wo die Variable in - <filename>pkg-plist</filename> verwendet wird. In diesem Fall - müssen Sie bei einem Upgrade des Ports nicht dutzende - (oder manchmal sogar hunderte) Zeilen in - <filename>pkg-plist</filename> anpassen.</para> - - <para>Falls Ihr Port in Abhängigkeit von den - ausgewählten Optionen Dateien installiert, ist es - üblich, den entsprechenden Zeilen in der - <filename>pkg-plist</filename> eine Zeichenfolge - <literal>%%TAG%%</literal> voranzustellen, wobei der - Platzhalter <literal>TAG</literal> der Variablen - <varname>PLIST_SUB</varname> im <filename>Makefile</filename> - bei gleichzeitiger Zuweisung des speziellen Werts - <literal>@comment</literal> hinzugefügt wird, der die - Paket-Werkzeuge die Zeile ignorieren lässt:</para> - - <programlisting>.if defined(WITH_X11) -PLIST_SUB+= X11="" -.else -PLIST_SUB+= X11="@comment " -.endif</programlisting> - - <para>und in der <filename>pkg-plist</filename>:</para> - - <programlisting>%%X11%%bin/foo-gui</programlisting> - - <para>Diese Ersetzung (ebenso wie das Hinzufügen weiterer - <link linkend="makefile-manpages">Manualpages</link>) wird - zwischen den <buildtarget>pre-install</buildtarget>- und - <buildtarget>do-install</buildtarget>-Targets ausgeführt, - indem aus <filename>PLIST</filename> - gelesen und in - <filename>TMPPLIST</filename> geschrieben - wird (Standard: - <filename>WRKDIR/.PLIST.mktmp</filename>). - Falls Ihr Port also - <filename>PLIST</filename> während dem - Erstellen generiert, so sollte dies vor oder in - <buildtarget>pre-install</buildtarget> geschehen. Muss Ihr Port - die resultierende Datei verändern, so sollte dies in - <buildtarget>post-install</buildtarget> mit der Ausgabedatei - <filename>TMPPLIST</filename> - erfolgen.</para> - - <para>Eine weitere Möglichkeit, die Paketliste eines - Ports zu verändern, besteht darin die Variablen - <varname>PLIST_FILES</varname> und - <varname>PLIST_DIRS</varname> zu setzen. Der Wert jeder der - beiden Variablen stellt eine Liste von Pfadnamen dar, die - zusammen mit dem Inhalt von - <filename>PLIST</filename> in - <filename>TMPPLIST</filename> geschrieben - wird. Dabei unterliegen die Namen in - <varname>PLIST_FILES</varname> und - <varname>PLIST_DIRS</varname> der weiter oben beschriebenen - Substitution von - <literal>%%VAR%%</literal>. Die - Namen aus <varname>PLIST_FILES</varname> werden ansonsten - unverändert in die endgültige Paketliste - übernommen, während den Namen aus - <varname>PLIST_DIRS</varname> noch der Wert von - <literal>@dirrm</literal> vorangestellt wird. Damit die - Verwendung von <varname>PLIST_FILES</varname> und - <varname>PLIST_DIRS</varname> überhaupt möglich - ist, müssen diese gesetzt werden, bevor - <filename>TMPPLIST</filename> geschrieben - wird – z.B. in - <buildtarget>pre-install</buildtarget> oder vorher.</para> - </sect1> - - <sect1 xml:id="plist-cleaning"> - <title>Leere Verzeichnisse</title> - - <sect2 xml:id="plist-dir-cleaning"> - <title>Aufräumen leerer Verzeichnisse</title> - - <para>Bitte sorgen Sie dafür, dass ihre Ports bei der - Deinstallation leere Verzeichnisse löschen. Dazu wird - für jedes Verzeichnis, das der Port erzeugt hat, eine - <literal>@dirrm</literal>-Zeile angegeben. Um ein - Verzeichnis zu löschen müssen Sie zuerst dessen - Unterverzeichnisse entfernen.</para> - - <programlisting> : -lib/X11/oneko/pixmaps/cat.xpm -lib/X11/oneko/sounds/cat.au - : -@dirrm lib/X11/oneko/pixmaps -@dirrm lib/X11/oneko/sounds -@dirrm lib/X11/oneko</programlisting> - - <para>Es kann allerdings auch vorkommen, dass - <literal>@dirrm</literal> Fehler ausgibt, da andere Ports - ein Verzeichnis ebenfalls nutzen. Deshalb können Sie - <literal>@dirrmtry</literal> verwenden, um nur Verzeichnisse - zu löschen, die wirklich leer sind, und damit - Warnhinweise vermeiden.</para> - - <programlisting>@dirrmtry share/doc/gimp</programlisting> - - <para>Dadurch wird es weder eine Fehlermeldung geben noch - wird &man.pkg.delete.1; abnormal beendet werden - auch dann - nicht, wenn - <filename>${PREFIX}/share/doc/gimp</filename> - nicht leer ist, da andere Ports hier ebenfalls Dateien - installiert haben.</para> - </sect2> - - <sect2 xml:id="plist-dir-empty"> - <title>Erstellen leerer Verzeichnisse</title> - - <para>Um leere Verzeichnisse während der Installation - eines Ports zu erstellen, bedarf es etwas Aufmerksamkeit. - Diese Verzeichnisse werden nicht erstellt, wenn das Paket - installiert wird, da Pakete nur die Dateien speichern und - &man.pkg.add.1; nur die Verzeichnisse erstellt, die - dafür benötigt werden. Um sicher zu gehen, dass - das leere Verzeichnis erstellt wird, wenn ein Paket - installiert wird, muss die folgende Zeile in - <filename>pkg-plist</filename> über der entsprechenden - <literal>@dirrm</literal> Zeile eingetragen werden:</para> - - <programlisting>@exec mkdir -p %D/share/foo/templates</programlisting> - </sect2> - </sect1> - - <sect1 xml:id="plist-config"> - <title>Konfigurationsdateien</title> - - <para>Sollte Ihr Port Konfigurationsdateien in - <filename>PREFIX/etc</filename> - benötigen, so sollten Sie diese - <emphasis>nicht</emphasis> einfach installieren und in - <filename>pkg-plist</filename> auflisten. Dies würde - &man.pkg.delete.1; veranlassen, diese Dateien zu löschen, - selbst wenn wenn sie vom Benutzer editiert wurden.</para> - - <para>Stattdessen sollten Beispieldateien mit einem - entsprechenden Suffix (beispielsweise - <filename>filename.sample</filename>) - versehen werden. Ist die Konfigurationsdatei nicht vorhanden, - so sollte die Beispieldatei an deren Platz kopiert werden. Bei - der Deinstallation sollte die Konfigurationsdatei - gelöscht werden, aber nur, wenn sie nicht vom Benutzer - verändert wurde. Das alles muss sowohl im - <filename>Makefile</filename> des Ports als auch in der - <filename>pkg-plist</filename> (für die Installation aus - einem Paket) sichergestellt werden.</para> - - <para>Beispiel aus einem <filename>Makefile</filename>:</para> - - <programlisting>post-install: - @if [ ! -f ${PREFIX}/etc/orbit.conf ]; then \ - ${CP} -p ${PREFIX}/etc/orbit.conf.sample ${PREFIX}/etc/orbit.conf ; \ - fi</programlisting> - - <para>Beispiel aus einer <filename>pkg-plist</filename>:</para> - - <programlisting>@unexec if cmp -s %D/etc/orbit.conf.sample %D/etc/orbit.conf; then rm -f %D/etc/orbit.conf; fi -etc/orbit.conf.sample -@exec if [ ! -f %D/etc/orbit.conf ] ; then cp -p %D/%F %B/orbit.conf; fi</programlisting> - - <para>Wahlweise können Sie auch eine <link linkend="porting-message">Nachricht</link> ausgegeben lassen, - in der Sie den Nutzer auffordern, die Datei an die richtige - Stelle zu kopieren und zu bearbeiten, bevor das Programm - ausgeführt werden kann.</para> - </sect1> - - <sect1 xml:id="plist-dynamic"> - <title>Dynamische oder statische Paketliste</title> - - <para>Eine <emphasis>statische Paketliste</emphasis> ist eine - Paketliste, die in der Ports-Sammlung, entweder in Form der - <filename>pkg-plist</filename> (mit oder ohne der Ersetzung - von Variablen) oder durch <varname>PLIST_FILES</varname> und - <varname>PLIST_DIRS</varname> im <filename>Makefile</filename> - eingebettet, verfügbar ist. Selbst wenn der Inhalt durch - ein Werkzeug oder ein Target im Makefile automatisch erzeugt - wird, <emphasis>bevor</emphasis> die Datei von einem Committer - in die Ports-Sammlung aufgenommen wird, so ist dies immer noch - eine statische Liste, da es möglich ist den Dateiinhalt - zu betrachten ohne ein Distfile Herunterladen oder Kompilieren - zu müssen.</para> - - <para>Eine <emphasis>dynamische Paketliste</emphasis> ist eine - Paketliste, die beim Kompilieren des Ports erstellt wird, - abhängig davon, welche Dateien und Verzeichnisse - installiert werden. Es ist nicht möglich diese Liste zu - betrachten, bevor der Quelltext heruntergeladen und kompiliert - oder nachdem ein <literal>make clean</literal> ausgeführt - wurde.</para> - - <para>Der Einsatz dynamischer Paketlisten ist zwar nicht - untersagt, aber Sie sollten, wann immer das möglich ist, - statische Paketlisten verwenden, da die Nutzer dann - &man.grep.1; auf alle verfügbaren Ports anwenden - können, um z.B. herauszufinden, von welchem eine - bestimmte Datei installiert wurde. Dynamische Paketlisten - sollten für komplexe Ports verwendet werden, bei denen - sich die Liste abhängig von den gewählten Funktionen - sehr stark ändern kann (wodurch die Pflege von statischen - Listen unmöglich wird), oder Ports, welche die Paketliste - abhängig von den Versionen verwendeter - Abhängigkeiten verändern (z.B. Ports, die Ihre - Dokumentation mit <application>Javadoc</application> - erzeugen).</para> - - <para>Maintainer, die dynamische Paketlisten bevorzugen, - werden dazu aufgefordert, neue Targets zu Ihren Ports - hinzuzufügen, welche die - <filename>pkg-plist</filename>-Datei erzeugen, sodass Benutzer - den Inhalt überprüfen können.</para> - </sect1> - - <sect1 xml:id="plist-autoplist"> - <title>Automatisiertes Erstellen von Paketlisten</title> - - <para>Als Erstes sollten Sie sich vergewissern, dass der Port - bis auf <filename>pkg-plist</filename> vollständig - ist.</para> - - <para>Als Nächstes erstellen Sie einen temporären - Verzeichnisbaum, in welchem Ihr Port installiert werden kann, - und installieren Sie alle Abhängigkeiten.</para> - - <screen>&prompt.root; <userinput>mkdir /var/tmp/`make -V PORTNAME`</userinput> -&prompt.root; <userinput>mtree -U -f `make -V MTREE_FILE` -d -e -p /var/tmp/`make -V PORTNAME`</userinput> -&prompt.root; <userinput>make depends PREFIX=/var/tmp/`make -V PORTNAME`</userinput></screen> - - <para>Speichern Sie die Verzeichnisstruktur in einer neuen - Datei.</para> - - <screen>&prompt.root; <userinput>(cd /var/tmp/`make -V PORTNAME` && 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 <varname>PREFIX</varname> achtet (was - er machen sollte), so kann der Port nun installiert und die - Paketliste erstellt werden.</para> - - <screen>&prompt.root; <userinput>make install PREFIX=/var/tmp/`make -V PORTNAME`</userinput> -&prompt.root; <userinput>(cd /var/tmp/`make -V PORTNAME` && 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 - <varname>MAN<replaceable>n</replaceable></varname> - aufgeführt sein und nicht in der Paketliste. - Konfigurationsdateien des Benutzers sollten entfernt oder als - <filename>filename.sample</filename> - installiert werden. Die <filename>info/dir</filename>-Datei - sollte nicht aufgeführt sein und die zugehörigen - <filename>install-info</filename>-Zeilen sollten - hinzugefügt werden, wie im <link linkend="makefile-info">info files</link>-Abschnitt - beschrieben. Alle Bibliotheken, die der Port installiert, - sollten aufgelistet werden, wie es im <link linkend="porting-shlibs">Shared Libraries</link>-Abschnitt - festgelegt ist.</para> - - <para>Alternativ dazu können Sie das - <command>plist</command>-Skript in - <filename>/usr/ports/Tools/scripts/</filename> verwenden, um - die Paketliste automatisch zu erstellen. Das - <filename>plist</filename>-Skript ist ein - <application>Ruby</application>-Skript, das die meisten der in - den vorangehenden Absätzen kurz dargestellten manuellen - Schritte automatisiert.</para> - - <para>Der erste Schritt ist - derselbe wie oben: Nehmen Sie die ersten drei Zeilen, also - <command>mkdir</command>, <command>mtree</command> und - <command>make depends</command>. Installieren und bauen Sie - dann den Port:</para> - - <screen>&prompt.root; <userinput>make install PREFIX=/var/tmp/`make -V PORTNAME`</userinput></screen> - - <para>Und lassen Sie <command>plist</command> die - <filename>pkg-plist</filename>-Datei erstellen:</para> - - <screen>&prompt.root; <userinput>/usr/ports/Tools/scripts/plist -Md -m `make -V MTREE_FILE` /var/tmp/`make -V PORTNAME` > pkg-plist</userinput></screen> - - <para>Die Paketliste muss immer noch von Hand aufgeräumt - werden, wie es oben erklärt wurde.</para> - - <para>Ein weiteres Werkzeug zur Erzeugung einer ersten - <filename>pkg-plist</filename>-Datei ist <package>ports-mgmt/genplist</package>. Wie bei jedem - automatisierten Hilfswerkzeug, sollte die erzeugte - <filename>pkg-plist</filename>-Datei überprüft und - bei Bedarf von Hand nachbearbeitet werden.</para> - </sect1> - </chapter> - - <chapter xml:id="pkg-files"> - <title>Die <filename>pkg-*</filename> - Dateien</title> - - <para>Es gibt noch einige Tricks mit - <filename>pkg-*</filename>, die wir - noch nicht erwähnt haben, die aber oft sehr praktisch - sind.</para> - - <sect1 xml:id="porting-message"> - <title><filename>pkg-message</filename></title> - - <para>Wenn Sie dem Anwender bei der Installation weitere - Informationen anzeigen wollen, so können Sie diese - Nachricht in <filename>pkg-message</filename> speichern. - Diese Vorgehensweise ist oft nützlich, um - zusätzliche Schritte anzuzeigen, die nach &man.pkg.add.1; - durchgeführt werden müssen. Dadurch können Sie - auch Lizenzinformationen darstellen.</para> - - <para>Wollen Sie nur ein paar Zeilen über die - Einstellungen zum Erstellen des Ports oder Warnungen ausgeben, - benutzen Sie <varname>ECHO_MSG</varname>. - <filename>pkg-message</filename> ist nur für Schritte - nach der Installation vorgesehen. Sie sollten den Unterschied - zwischen <varname>ECHO_MSG</varname> und - <varname>ECHO_CMD</varname> beachten: Ersteres wird benutzt, - um Informationen auf dem Bildschirm auszugeben, während - Letzteres für Kommando-Pipelining bestimmt ist.</para> - - <para>Ein gutes Beispiel für die Benutzung der beiden - Befehle ist in <filename>shells/bash2/Makefile</filename> zu - finden:</para> - - <programlisting>update-etc-shells: - @${ECHO_MSG} "updating /etc/shells" - @${CP} /etc/shells /etc/shells.bak - @( ${GREP} -v ${PREFIX}/bin/bash /etc/shells.bak; \ - ${ECHO_CMD} ${PREFIX}/bin/bash) >/etc/shells - @${RM} /etc/shells.bak</programlisting> - - <note> - <para>Die <filename>pkg-message</filename> wird nicht zur - <filename>pkg-plist</filename> hinzugefügt. Sie wird - auch nicht automatisch angezeigt, falls ein Anwender den - Port installiert. Sie müssen also die Ausgabe selbst im - <buildtarget>post-install</buildtarget>-Ziel des Make-Vorgangs - veranlassen.</para> - </note> - </sect1> - - <sect1 xml:id="pkg-install"> - <title><filename>pkg-install</filename></title> - - <para>Sollte es nötig sein, dass Ihr Port bei der - Installation des Binärpakets mit &man.pkg.add.1; Befehle - ausführt, können Sie das Skript - <filename>pkg-install</filename> benutzen. Dieses Skript wird - automatisch dem Paket hinzugefügt und zweimal von - &man.pkg.add.1; ausgeführt: Zuerst als - <literal>${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 xml:id="pkg-deinstall"> - <title><filename>pkg-deinstall</filename></title> - - <para>Dieses Skript wird ausgeführt, wenn ein Paket - deinstalliert wird.</para> - - <para>Es wird zweimal von &man.pkg.delete.1; aufgerufen. Das - erste Mal als <literal>${SH} pkg-deinstall - ${PKGNAME} DEINSTALL</literal> und dann als - <literal>${SH} pkg-deinstall ${PKGNAME} - POST-DEINSTALL.</literal></para> - </sect1> - - <sect1 xml:id="pkg-req"> - <title><filename>pkg-req</filename></title> - - <para>Muss Ihr Port entscheiden, ob er installiert werden - soll oder nicht, können Sie ein - <filename>pkg-req</filename>-<quote>Bedingungsskript</quote> - verwenden. Dieses wird automatisch bei der Installation/ - Deinstallation aufgerufen, um zu entscheiden, ob die - Installation/ Deinstallation fortgesetzt werden soll.</para> - - <para>Das Skript wird während der Installation von - &man.pkg.add.1; als <literal>pkg-req ${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 xml:id="pkg-names"> - <title xml:id="porting-pkgfiles">Ändern der Namen der - <filename>pkg-*</filename> - Dateien</title> - -<!-- Hier muss noch mal überarbeitet werden --> - - <para>Alle Namen der - <filename>pkg-*</filename> Dateien - werden durch Variablen festgelegt. Sie können sie bei - Bedarf also im <filename>Makefile</filename> des Ports - ändern. Das ist besonders nützlich, wenn Sie die - gleichen <filename>pkg-*</filename> - Dateien in mehreren Ports nutzen oder in eine der oben genannten - Dateien schreiben wollen. Schreiben Sie niemals außerhalb - des Unterverzeichnisses <varname>WRKDIR</varname> - <filename>pkg-*</filename>, eine Erklärung hierzu finden - Sie in <link linkend="porting-wrkdir"> Schreiben ausserhalb von - <varname>WRKDIR</varname></link>.</para> - - <para>Hier ist eine Liste von Variablennamen und ihren - Standardwerten (<varname>PKGDIR</varname> ist - standardmäßig - <varname>${MASTERDIR}</varname>).</para> - - <informaltable frame="none" pgwide="1"> - <tgroup cols="2"> - <thead> - <row> - <entry>Variable</entry> - <entry>Standardwert</entry> - </row> - </thead> - - <tbody> - <row> - <entry><varname>DESCR</varname></entry> - <entry><literal>${PKGDIR}/pkg-descr</literal></entry> - </row> - - <row> - <entry><varname>PLIST</varname></entry> - <entry><literal>${PKGDIR}/pkg-plist</literal></entry> - </row> - - <row> - <entry><varname>PKGINSTALL</varname></entry> - <entry><literal>${PKGDIR}/pkg-install</literal></entry> - </row> - - <row> - <entry><varname>PKGDEINSTALL</varname></entry> - <entry><literal>${PKGDIR}/pkg-deinstall</literal></entry> - </row> - - <row> - <entry><varname>PKGREQ</varname></entry> - <entry><literal>${PKGDIR}/pkg-req</literal></entry> - </row> - - <row> - <entry><varname>PKGMESSAGE</varname></entry> - <entry><literal>${PKGDIR}/pkg-message</literal></entry> - </row> - </tbody> - </tgroup> - </informaltable> - - <para>Bitte benutzen Sie diese Variablen anstatt - <varname>PKG_ARGS</varname> zu ändern. Wenn Sie - <varname>PKG_ARGS</varname> modifizieren, werden diese Dateien - bei der Installation des Ports nicht korrekt in - <filename>/var/db/pkg</filename> installiert.</para> - </sect1> - - <sect1 xml:id="using-sub-files"> - <title>Nutzung von <varname>SUB_FILES</varname> und - <varname>SUB_LIST</varname></title> - - <para>Die Variablen <varname>SUB_FILES</varname> und - <varname>SUB_LIST</varname> sind nützlich, um dynamische - Werte in Port-Dateien zu verwenden, wie beispielsweise der - Installations-<varname>PREFIX</varname> in - <filename>pkg-message</filename>.</para> - - <para>Die Variable <varname>SUB_FILES</varname> enthält - eine Liste von Dateien, die automatisch verändert werden. - Jede <replaceable>Datei</replaceable> in - <varname>SUB_FILES</varname> muss ein entsprechendes Pendant - <replaceable>datei.in</replaceable> im Verzeichnis - <varname>FILESDIR</varname> haben. Die modifizierte Version - wird in <varname>WRKDIR</varname> angelegt. Dateien, die als - Werte von <varname>USE_RC_SUBR</varname> (oder veraltet in - <varname>USE_RCORDER</varname>) gespeichert werden, werden - automatisch zu <varname>SUB_FILES</varname> hinzugefügt. - Für die Dateien <filename>pkg-message</filename>, - <filename>pkg-install</filename>, - <filename>pkg-deinstall</filename> und - <filename>pkg-req</filename> werden die jeweiligen - Makefile-Variablen selbsttätig auf die geänderte - Version der Datei gesetzt.</para> - - <para>Die Variable <varname>SUB_LIST</varname> ist eine Liste - von <literal>VAR=WERT</literal>-Paaren. Jedes Paar - <literal>%%VAR%%</literal> in den Dateien von - <varname>SUB_FILES</varname> wird mit <literal>WERT</literal> - ersetzt. Einige gebräuchliche Paare werden automatisch - definiert: <varname>PREFIX</varname>, - <varname>LOCALBASE</varname>, - <varname>DATADIR</varname>, <varname>DOCSDIR</varname>, - <varname>EXAMPLESDIR</varname>. Jede Zeile, die mit - <literal>@comment</literal> beginnt, wird nach der - Variablen-Ersetzung aus der neu erstellten Datei - gelöscht.</para> - - <para>Im folgenden Beispiel wird <literal>%%ARCH%%</literal> - mit der Systemarchitektur in <filename>pkg-message</filename> - ersetzt:</para> - - <programlisting>SUB_FILES= pkg-message -SUB_LIST= ARCH=${ARCH}</programlisting> - - <para>Beachten Sie bitte, dass in diesem Beispiel die Datei - <filename>pkg-message.in</filename> im Verzeichnis - <varname>FILESDIR</varname> vorhanden sein muss.</para> - - <para>Hier ein Beispiel für eine gute - <filename>pkg-message.in</filename>:</para> - - <programlisting>Now it is time to configure this package. -Copy %%PREFIX%%/share/examples/putsy/%%ARCH%%.conf into your home directory -as .putsy.conf and edit it.</programlisting> - </sect1> - </chapter> - - <chapter xml:id="testing"> - <title>Ihren Port testen</title> - - <sect1 xml:id="make-describe"> - <title><command>make describe</command> ausführen</title> - - <para>Einige der &os;-Werkzeuge zur Pflege von Ports, wie zum - Beispiel &man.portupgrade.1;, verwenden eine Datenbank names - <filename>/usr/ports/INDEX</filename>, welche Eigenschaften, - wie z.B. Port-Abhängigkeiten, verfolgt. - <filename>INDEX</filename> wird vom Makefile der höchsten - Ebene, <filename>ports/Makefile</filename>, mittels - <command>make index</command> erstellt, welches in das - Unterverzeichnis jedes Ports wechselt und dort <command>make - describe</command> ausführt. Wenn also <command>make - describe</command> bei einem Port fehlschlägt, kann - <filename>INDEX</filename> nicht generiert werden und schnell - werden viele Leute darüber unzufrieden sein.</para> - - <note> - <para>Es ist wichtig diese Datei erzeugen zu können, - unabhängig davon, welche Optionen in - <filename>make.conf</filename> vorhanden sind. Bitte - vermeiden Sie es daher beispielsweise - <literal>.error</literal>-Anweisungen zu benutzen, wenn zum - Beispiel eine Abhängigkeit nicht erfüllt wird - (Lesen Sie dazu bitte <xref linkend="dads-dot-error"/>).</para> - </note> - - <para>Wenn <command>make describe</command> eine Zeichenkette - anstatt einer Fehlermeldung erzeugt, sind Sie wahrscheinlich - auf der sicheren Seite. Vergleichen Sie die erzeugte - Zeichenkette mit <filename>bsd.port.mk</filename>, um mehr - über deren Bedeutung zu erfahren.</para> - - <para>Beachten Sie bitte außerdem, dass die Benutzung - einer aktuellen Version von <command>portlint</command> (wie - im nächsten Abschnitt beschrieben) automatisch - <command>make describe</command> startet.</para> - </sect1> - - <sect1 xml:id="testing-portlint"> - <title>Portlint</title> - - <para>Bitte überprüfen Sie Ihre Arbeit stets mit - <link linkend="porting-portlint"><command>portlint</command></link>, - bevor Sie diese einreichen oder committen. - <command>portlint</command> warnt Sie bei häufigen - Fehlern, sowohl funktionaler als auch stilistischer Natur. - Für einen neuen (oder repokopierten) Port ist - <command>portlint -A</command> die gründlichste Variante; - für einen bereits existierenden Port ist - <command>portlint -C</command> ausreichend.</para> - - <para>Da <command>portlint</command> heuristische Methoden zur - Fehlersuche benutzt, kann es vorkommen, dass Warnungen - für Fehler erzeugt werden, die keine sind. Gelegentlich - kann etwas, das als Problem angezeigt wird, aufgrund von - Einschränkungen im Port-System nicht anders gelöst - werden. Wenn es Zweifel gibt, fragen Sie am besten auf - &a.ports; nach.</para> - </sect1> - - <sect1 xml:id="testing-porttools"> - <title>Port Tools</title> - - <para>Das Programm <package>ports-mgmt/porttools</package> ist Teil der - Ports-Sammlung.</para> - - <para><command>port</command> ist das Front-End-Skript, das - Ihnen dabei behilflich sein kann Ihre Arbeit als Tester zu - vereinfachen. Um einen neuen Port zu testen oder einen bereits - bestehenden Port zu aktualisieren, können Sie - <command>port test</command> verwenden, damit die Tests, - inklusive der <link linkend="testing-portlint"><command>portlint</command></link>-Überprüfung, - durchgeführt werden. Dieser Befehl spürt ausserdem - alle nicht in <filename>pkg-plist</filename> enthaltenen - Dateien auf und gibt eine Liste dieser aus. Hier ein - Beispiel:</para> - - <screen>&prompt.root; <userinput>port test /usr/ports/net/csup</userinput></screen> - </sect1> - - - <sect1 xml:id="porting-prefix"> - <title><varname>PREFIX</varname> und - <varname>DESTDIR</varname></title> - - <para><varname>PREFIX</varname> bestimmt, an welche Stelle der - Port installiert werden soll. In der Regel ist - dies<filename>/usr/local</filename> oder - <filename>/opt</filename>, was jedoch anpassbar ist. Ihr Port - muss sich an diese Variable halten.</para> - - <para><varname>DESTDIR</varname>, wenn es vom Benutzer gesetzt - wird, bestimmt die alternative Umgebung (in der Regel eine - Jail oder ein installiertes System, welches an anderer Stelle - als <filename>/</filename> eingehängt ist). - Ein Port wird unter - <varname>DESTDIR</varname>/<varname>PREFIX</varname> - installiert und registriert sich in der Paket-Datenbank unter - <varname>DESTDIR</varname>/var/db/pkg. - Da <varname>DESTDIR</varname> mittels eines - &man.chroot.8;-Aufrufs vom Ports-System automatisch gesetzt - wird, brauchen Sie keine Änderungen oder besondere Pflege - für <varname>DESTDIR</varname>-konforme Ports.</para> - - <para>Der Wert von <varname>PREFIX</varname> wird auf - <varname>LOCALBASE</varname> gesetzt (Standard ist - <filename>/usr/local</filename>). - Falls <varname>USE_LINUX_PREFIX</varname> gesetzt ist, wird - <varname>PREFIX</varname> <varname>LINUXBASE</varname> - annehmen (Standard ist - <filename>/compat/linux</filename>).</para> - - <para>Die Vermeidung der hart kodierten Angaben von - <filename>/usr/local</filename> oder - <filename>/usr/X11R6</filename> im Quelltext wird den Port - viel flexibler machen und erleichtert es die Anforderungen - anderer Einsatzorte zu erfüllen. Für X-Ports, die - <command>imake</command> benutzen, geschieht dies automatisch; - andernfalls kann dies erreicht werden, indem alle Angaben von - <filename>/usr/local</filename> (oder - <filename>/usr/X11R6</filename> für X-Ports, die nicht - imake benutzen) in den verschiedenen - <filename>Makefile</filename>s im Port ersetzt werden, um - <varname>${PREFIX}</varname> zu lesen, da diese Variable - automatisch an jede Stufe des Build- und Install-Prozesses - übergeben wird.</para> - - <para>Vergewissern Sie sich bitte, dass Ihre Anwendung nichts - unter <filename>/usr/local</filename> an Stelle von - <varname>PREFIX</varname> installiert. Um dies festzustellen, - können Sie folgendes machen:</para> - - <screen>&prompt.root; <userinput>make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`</userinput></screen> - - <para>Wenn etwas außerhalb von <varname>PREFIX</varname> - installiert wird, so gibt der Prozess der Paketerstellung eine - Meldung aus, dass es die Dateien nicht finden kann.</para> - - <para>Dies prüft nicht das Vorhandensein eines internen - Verweises oder die richtige Verwendung von - <varname>LOCALBASE</varname> für Verweise auf Dateien - anderer Ports. Das Testen der Installation in - <filename>/var/tmp/`make -V PORTNAME`</filename> würde - dies erledigen.</para> - - <para>Die Variable <varname>PREFIX</varname> kann in Ihrem - <filename>Makefile</filename> oder der Umgebung des Benutzers - neu gesetzt werden. Allerdings wird für einzelne Ports - dringend davon abgeraten diese Variable in den - <filename>Makefile</filename>s direkt zu setzen.</para> - - <para>Verweisen Sie bitte außerdem auf Programme/Dateien - von anderen Ports durch die oben erwähnten Variablen und - nicht mit den eindeutigen Pfadnamen. Wenn Ihr Port zum - Beispiel vom Makro <literal>PAGER</literal> erwartet, dass es - den vollständigen Pfadnamen von <command>less</command> - enthält, benutzen Sie folgendes Compiler-Flag: - - <programlisting>-DPAGER=\"${LOCALBASE}/bin/less\"</programlisting> - - anstatt <literal>-DPAGER=\"/usr/local/bin/less\"</literal>. - Somit ist die Wahrscheinlichkeit höher, dass es auch - funktioniert, wenn der Administrator den ganzen - <filename>/usr/local</filename>-Baum an eine andere Stelle - verschoben hat.</para> - </sect1> - - <sect1 xml:id="testing-tinderbox"> - <title>Die Tinderbox</title> - - <para>Wenn Sie ein begeisterter Ports-Entwickler sind - möchten Sie vielleicht einen Blick auf die - <application>Tinderbox</application> werfen. Es ist ein - leistungsstarkes System zur Erstellung und zum Testen von - Ports, welches auf Skripten basiert, die auf <link linkend="build-cluster">Pointyhat</link> verwendet werden. Sie - können <application>Tinderbox</application> installieren, - indem Sie den Port <package>ports-mgmt/tinderbox</package> benutzen. - Bitte lesen Sie die mitgelieferte Dokumentation - gründlich, da die Konfiguration nicht einfach ist.</para> - - - <para>Um Näheres darüber zu erfahren, besuchen Sie - bitte die <link xlink:href="http://tinderbox.marcuscom.com/">Tinderbox - Homepage</link>.</para> - </sect1> - </chapter> - - <chapter xml:id="port-upgrading"> - <title>Einen existierenden Port aktualisieren</title> - - <para>Wenn Sie feststellen, dass ein Port verglichen mit der - neuesten Version des Originalautors nicht mehr auf dem aktuellen - Stand ist, sollten Sie als Erstes sicherstellen, dass Sie die - aktuellste Version des Ports haben. Diese finden Sie im - Verzeichnis <filename>ports/ports-current</filename> der FreeBSD - FTP-Spiegelseiten. Wenn Sie allerdings mit mehr als ein paar - Ports arbeiten, werden Sie es wahrscheinlich einfacher finden - <application>CVSup</application> zu benutzen, um Ihre gesamte - Ports-Sammlung aktuell zu halten, wie es im <link xlink:href="&url.books.handbook;/synching.html#CVSUP-CONFIG">Handbuch</link> - beschrieben wird. Das hat zusätzlich den Vorteil, dass Sie - so auch alle Abhängigkeiten des Ports aktuell - halten.</para> - - <para>Der nächste Schritt besteht darin festzustellen, ob - bereits eine Aktualisierung des Ports darauf wartet committet zu - werden. Um das sicherzustellen haben Sie folgende - Möglichkeiten. Es gibt eine durchsuchbare Schnittstelle zur - <link xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query">FreeBSD - Problembericht Datenbank (PR - Problem Report)</link> (auch - bekannt als <literal>GNATS</literal>). Wählen Sie dazu - <literal>Ports</literal> im Drop-Down-Menü und geben Sie - den Namen des Ports ein.</para> - - <para>Allerdings wird manchmal vergessen den Namen des Ports - eindeutig im Feld für die Zusammenfassung anzugeben. In - diesem Fall können Sie das <link linkend="portsmon">FreeBSD - Ports Monitoring System</link> (auch bekannt als - <literal>portsmon</literal>) nutzen. Dieses versucht PRs von - Ports nach Portname zu sortieren. Um PRs nach einem bestimmten - Port zu durchsuchen können Sie die <link xlink:href="http://portsmon.FreeBSD.org/portoverview.py">Übersicht - eines Ports</link> verwenden.</para> - - <para>Wenn es keine wartenden PRs gibt, ist der nächste - Schritt eine E-Mail an den Maintainer des Ports zu schicken, wie - von <command>make maintainer</command> gezeigt wird. Diese - Person arbeitet vielleicht schon an einer Aktualisierung, oder - hat einen guten Grund den Port im Moment nicht zu aktualisieren - (z.B. wegen Stabilitätsproblemen der neuen Version). Sie - wollen sicher nicht die Arbeit des Maintainers doppelt machen. - Beachten Sie bitte, dass für Ports ohne Maintainer - <literal>ports@FreeBSD.org</literal> eingetragen ist. Das ist - nur die allgemeine &a.ports;-Mailingliste, deshalb wird es in - diesem Fall wahrscheinlich nicht helfen eine E-Mail dorthin zu - schicken.</para> - - <para>Wenn Sie der Maintainer bittet die Aktualisierung zu - erledigen, oder falls es keinen Maintainer gibt, haben Sie - Gelegenheit, FreeBSD zu helfen, indem Sie die Aktualisierung - selbst bereitstellen. Dazu verwenden Sie &man.diff.1;, das - bereits im Basissystem enthalten ist.</para> - - <para>Um einen brauchbaren <command>diff</command> für einen - einzelne Datei zu erstellen, kopieren Sie die zu patchende - Datei nach <replaceable>dateiname.orig</replaceable> und speichern - Ihre Änderungen in die Datei - <replaceable>dateiname</replaceable>. Danach erzeugen Sie den - Patch:</para> - - <informalexample> - <screen>&prompt.user; <userinput>/usr/bin/diff dateiname.orig dateiname > dateiname.diff</userinput></screen> - </informalexample> - - <para>Soll mehr als eine Datei gepatcht werden, können Sie - entweder <command>cvs diff</command> verwenden (siehe dazu <xref linkend="cvs-diff"/>) oder Sie kopieren - den kompletten Port in ein neues Verzeichnis und speichern die - Ausgabe des rekursiven &man.diff.1; auf das neue und alte - Portverzeichniss (wenn Ihr verändertes Portverzeichnis z.B. - <filename>superedit</filename> und das Original - <filename>superedit.bak</filename> heißt, dann speichern - Sie bitte die Ergebnisse von <command>diff -ruN superedit.bak - superedit</command>). Sowohl vereinheitlichendes als auch - kontextabhängiges diff (Auflistung der Unterschiede zweier - Dateien) sind akzeptabel, aber im Allgemeinen bevorzugen - Port-Committer vereinheitlichende <command>diff</command>s. - Bitte beachten Sie die Verwendung der - <literal>-N</literal>-Option. Dies ist der gebräuchliche - Weg <command>diff</command> dazu zu bewegen korrekt damit - umzugehen, neue Dateien anzulegen und alte zu löschen. - Bevor Sie das diff einsenden überprüfen Sie bitte die - Ausgabe, um sicherzugehen, dass die Änderungen sinnvoll - sind. Stellen Sie insbesondere sicher, dass Sie das - Arbeitsverzeichnis mit <command>make clean</command> - aufgerät haben).</para> - - <para>Um gängige Operationen mit Korrekturdateien zu - vereinfachen, können Sie - <filename>/usr/ports/Tools/scripts/patchtool.py</filename> - benutzen. Aber lesen Sie bitte vorher - <filename>/usr/ports/Tools/scripts/README.patchtool</filename>.</para> - - <para>Falls der Port keinen Maintainer hat und Sie ihn selbst - aktiv benutzen, ziehen Sie bitte in Erwägung sich als - Maintainer zu melden. &os; hat mehr als 4000 Ports ohne - Maintainer und in diesem Bereich werden immer zusätzliche - Freiwillige benötigt (Für eine ausführliche - Beschreibung der Verantwortlichkeiten eines Maintainers lesen - Sie bitte im <link xlink:href="&url.books.developers-handbook;/policies.html#POLICIES-MAINTAINER"> - Developer's Handbook</link> nach).</para> - - <para>Der beste Weg uns das diff zu schicken ist mittels - &man.send-pr.1; (Kategorie Ports). Wenn Sie der Maintainer des - Ports sind, fügen Sie bitte <literal>[maintainer - update]</literal> an den Anfang Ihrer Zusammenfassung und setzen - Sie die <quote>Klasse</quote> des PR auf - <literal>maintainer-update</literal>. Ansonsten sollte die - <quote>Klasse</quote> des PR <literal>change-request</literal> - sein. Bitte erwähnen Sie alle hinzugefügten oder - gelöschten Dateien in der Nachricht, da diese beim Commit - ausdrücklich an &man.cvs.1; übergeben werden - müssen. Wenn das diff größer ist als 20 Kilobyte - komprimieren und uuencoden Sie es bitte. Ansonsten können - Sie es in den PR einfügen wie es ist.</para> - - <para>Bevor Sie den PR mit &man.send-pr.1; abschicken, sollten - Sie den Abschnitt <link xlink:href="&url.articles.problem-reports;/pr-writing.html"> Den - Problembericht schreiben</link> im Artikel über - Problemberichte lesen. Dieser enthält sehr viel mehr - Informationen darüber, wie man nützliche - Problemberichte verfasst.</para> - - <important> - <para>Wenn Sie Ihre Aktualisierung aufgrund von - Sicherheitsbedenken oder eines schwerwiegenden Fehlers - bereitstellen wollen, informieren Sie bitte das &a.portmgr;, - um einen sofortigen Rebuild und eine Neuverteilung des Pakets - Ihres Ports durchzuführen. Sonst werden ahnungslose - Nutzer von &man.pkg.add.1; über mehrere Wochen die alte - Version durch <command>pkg_add -r</command> - installieren.</para> - </important> - - <note> - <para>Noch einmal: Bitte verwenden Sie &man.diff.1; und nicht - &man.shar.1;, um Aktualisierungen existierender Ports zu - senden. Sie erleichtern es damit den Ports-Committern, - Ihre Änderungen nachzuvollziehen.</para> - </note> - - <para>Nun, da Sie all das geschafft haben, können Sie in <xref linkend="keeping-up"/> nachlesen, wie Sie den Port - aktuell halten.</para> - - <sect1 xml:id="cvs-diff"> - <title>Patches mit CVS erstellen</title> - - <para>Wenn möglich, sollten Sie stets eine &man.cvs.1;-Differenz - einreichen. Diese sind leichter zu bearbeiten als Differenzen - zwischen <quote>neuen und alten</quote> Verzeichnissen. Außerdem - könenn Sie so einfacher feststellen, welche Änderungen Sie - vorgenommen haben oder Ihren Patch modifizieren, falls dies durch - Änderungen in einem anderen Bereich der Ports-Sammlung notwendig - wird oder Sie vom Committer um eine Korrektur Ihres Patches gebeten - werden.</para> - - <screen>&prompt.user; <userinput>cd ~/my_wrkdir</userinput> <co xml:id="my-wrkdir"/> -&prompt.user; <userinput>cvs -d R_CVSROOT co pdnsd</userinput> <co xml:id="R-CVSROOT"/> <co xml:id="module-name"/> -&prompt.user; <userinput>cd ~/my_wrkdir/pdnsd</userinput></screen> - - <calloutlist> - <callout arearefs="my-wrkdir"> - <para>Das Verzeichnis, in dem Sie den Port bauen wollen. Dieses - Arbeitsverzeichnis kann sich auch außerhalb von - <filename>/usr/ports/</filename> befinden.</para> - </callout> - - <callout arearefs="R-CVSROOT"> - <para>R_CVSROOT steht für einen öffentlichen CVS-Server. - Eine Liste aller verfügbaren Server finden Sie im <link xlink:href="&url.books.handbook;/cvsup.html">&os; Handbuch</link>.</para> - </callout> - - <callout arearefs="module-name"> - <para>Ersetzen Sie <quote>pdnsd</quote> durch den Modulnamen des - Ports. Dieser entspricht in der Regel dem Namen des Ports. - Allerdings gibt es einige Ausnahmen von dieser Regel, insbesondere - bei sprachspezifischen Ports (beispielsweise lautet der Modulname - für den Port <package>german/selfhtml</package> - de-selfhtml). Um den Namen des Moduls herauszufinden, können - Sie entweder die <link xlink:href="&url.base;/cgi/cvsweb.cgi/ports">cvsweb-Schnittstelle</link> - verwenden oder den kompletten Pfad des Ports angeben (in unserem - Beispiel wäre der komplette Pfad also <filename>ports/dns/pdnsd</filename>).</para> - </callout> - </calloutlist> - - <para>Danach modifizieren Sie den Port in gewohnter Weise. Falls Sie - Dateien hinzufügen oder entfernen, sollten Sie dies mit - <command>cvs</command> protokollieren:</para> - - <screen>&prompt.user; <userinput>cvs add new_file</userinput> -&prompt.user; <userinput>cvs remove deleted_file</userinput></screen> - - <para>Überprüfen Sie die Funktion Ihres Ports anhand der - Checklisten in <xref linkend="porting-testing"/> und - <xref linkend="porting-portlint"/>.</para> - - <screen>&prompt.user; <userinput>cvs status</userinput> -&prompt.user; <userinput>cvs update</userinput> <co xml:id="cvs-update"/></screen> - - <calloutlist> - <callout arearefs="cvs-update"> - <para>Dadurch wird versucht, die Differenz zwischen Ihrer - geänderten Version und dem aktuellen Stand im CVS zu - kombinieren. Achten Sie dabei unbedingt auf die Ausgabe dieses - Befehls. Vor jeder Datei wird ein Buchstabe angezeigt, der - Ihnen mitteilt, was mit dieser Datei passiert ist. Eine - vollständige Liste dieser Präfixe finden Sie in - <xref linkend="table-cvs-up"/>.</para> - </callout> - </calloutlist> - - <table pgwide="1" frame="none" xml:id="table-cvs-up"> - <title>Von cvs update verwendete Präfixe</title> - - <tgroup cols="2"> - <tbody> - <row> - <entry>U</entry> - <entry>Die Datei wurde aktualisiert. Es traten dabei keine - Probleme auf.</entry> - </row> - - <row> - <entry>P</entry> - <entry>Die Datei wurde ohne Probleme aktualisiert (dieses - Präfix wird nur verwendet, wenn Sie mit einem - entfernten Repository arbeiten).</entry> - </row> - - <row> - <entry>M</entry> - <entry>Die Datei wurde modifiziert. Es traten keine Konflikte - auf.</entry> - </row> - - <row> - <entry>C</entry> - <entry>Die Datei wurde modifiziert, allerdings kam es dabei zu - Konflikten zwischen Ihrer geänderten Version und der - aktuellen Version im CVS.</entry> - </row> - </tbody> - </tgroup> - </table> - - <para>Wird das Präfix <literal>C</literal> nach einem - <literal>cvs update</literal> angezeigt, bedeutet dies, dass im CVS - etwas geändert wurde und &man.cvs.1; daher nicht in der Lage war, - Ihre Änderungen und die Änderungen im CVS zu kombinieren. - Es ist immer sinnvoll, sich die Änderungen anzusehen, da - <command>cvs</command> keine Informationen darüber hat, wie ein - Port aufgebaut sein soll. Es kann (und wird wahrscheinlich) daher - vorkommen, dass sich manchmal Änderungen ergeben, die keinen - Sinn machen.</para> - - <para>Im letzten Schritt erzeugen Sie einen <quote>unified - &man.diff.1;</quote> gegen die derzeit im CVS vorhandenen Dateien:</para> - - <screen>&prompt.user; <userinput>cvs diff -uN > ../`basename ${PWD}`.diff</userinput></screen> - - <note> - <para>Verwenden Sie unbedingt die Option <option>-N</option>, um - sicherzustellen, dass von hinzugefügte oder gelöschte - Dateien im Patch erfasst sind. Der Patch enthät auch - von Ihnen gelöschte Dateien (allerdings ohne Inhalt). Dies - ist wichtig, da nur so der Committer wissen kann, welche Dateien - er entfernen muss.</para> - </note> - - <para>Zuletzt reichen Sie Ihren Patch ein, indem Sie der Anleitung in - <xref linkend="port-upgrading"/> folgen.</para> - </sect1> - - <sect1 xml:id="moved-and-updating-files"> - <title>Die Dateien UPDATING und MOVED</title> - - <para>Wenn die Aktualisierung des Ports spezielle Schritte wie - die Anpassung von Konfigurationsdateien oder die - Ausführung eines speziellen Programms erfordert, sollten - Sie diesen Umstand in der Datei - <filename>/usr/ports/UPDATING</filename> dokumentieren. - Einträge in dieser Datei haben das folgende - Format:</para> - - <programlisting>YYYYMMDD: - AFFECTS: users of portcategory/portname - AUTHOR: Your name <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 xml:id="security"> - <title>Sicherheit der Ports</title> - - <sect1 xml:id="security-intro"> - <title>Warum Sicherheit so wichtig ist</title> - - <para>Es finden sich immer wieder Fehler in Software. Die - gefährlichsten davon sind wohl jene, die - Sicherheitslücken öffnen. Technisch gesehen - müssen diese Lücken geschlossen werden, indem die - Fehler, die Sie verursacht haben, beseitigt werden. Aber die - Vorgehensweisen, wie mit bloßen Fehlern und - Sicherheitslücken umgegangen wird, sind sehr - unterschiedlich.</para> - - <para>Ein typischer kleiner Fehler betrifft nur Nutzer, die - eine bestimmte Kombination von Optionen aktiviert haben, die - den Fehler auslöst. Der Entwickler wird letztendlich - einen Patch herausgeben, gefolgt von einer neuen Version des - Programms, die den Fehler nicht mehr - enthält – 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 xml:id="security-fix"> - <title>Sicherheitslücken schliessen</title> - - <para>Bei Ports und Paketen kann eine Sicherheitslücke im - ursprünglichen Programm oder in den Port-Dateien - verursacht werden. Im ersten Fall wird der ursprüngliche - Entwickler den Fehler wahrscheinlich umgehend korrigieren oder - eine neue Version herausgeben und Sie müssen den Port nur - aktualisieren und die Korrekturen des Autors beachten. Falls - sich die Korrektur aus irgendeinem Grund verzögert, - sollten Sie <link linkend="dads-noinstall">den Port als - <varname>FORBIDDEN</varname> markieren</link> oder selbst den - Fehler für den Port korrigieren. Falls die - Sicherheitslücke im Port verursacht wird, sollten Sie ihn - sobald wie möglich berichtigen. In jedem Fall sollte - <link linkend="port-upgrading">die Standardvorgehensweise zum - Einreichen von Änderungen</link> beachtet - werden – 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. <varname>PORTREVISION</varname> sollte - erhöht werden – es sei denn, - <varname>PORTREVISION</varname> hat sich im Laufe der - Korrektur des Fehlers geändert. Das heißt, Sie - sollten <varname>PORTREVISION</varname> erhöhen, wenn Sie - eine Korrektur hinzugefügt haben. Sie sollten diese aber - nicht erhöhen, wenn Sie den Port auf die neueste Version - des Programms gebracht haben und <varname>PORTREVISION - </varname> somit schon verändert wurde. Bitte beachten - Sie den <link linkend="makefile-naming-revepoch">betreffenden - Abschnitt</link> für weitere Informationen.</para> - </sect1> - - <sect1 xml:id="security-notify"> - <title>Die Community informiert halten</title> - - <sect2 xml:id="security-notify-vuxml-db"> - <title>Die VuXML-Datenbank</title> - - <para>Ein sehr wichtiger und dringender Schritt, den man - unternehmen muss, sobald eine Sicherheitslücke entdeckt - wurde, ist die Gemeinschaft der Anwender des Ports über - die Gefahr zu informieren. Diese Benachrichtigung hat zwei - Gründe. Erstens wird es sinnvoll sein, wenn die Gefahr - wirklich so groß ist, sofort Abhilfe zu schaffen, - indem man z.B. den betreffenden Netzwerkdienst beendet oder - den Port komplett deinstalliert, bis die Lücke - geschlossen wurde. Und Zweitens pflegen viele Nutzer - installierte Pakete nur gelegentlich zu aktualisieren. Sie - werden aus der Mitteilung erfahren, dass Sie das Paket, - sobald eine Korrektur verfügbar ist, sofort - aktualisieren <emphasis>müssen</emphasis>.</para> - - <para>Angesichts der riesigen Zahl an Ports kann nicht - für jeden Vorfall ein Sicherheitshinweis erstellt - werden, ohne durch die Flut an Nachrichten die - Aufmerksamkeit der Empfänger zu verlieren, im Laufe der - Zeit kommt es so zu ernsten Problemen. Deshalb werden - Sicherheitslücken von Ports in <link xlink:href="http://vuxml.freebsd.org/">der FreeBSD - VuXML-Datenbank</link> aufgezeichnet. Das Team der - Sicherheitsverantwortlichen beobachtet diese wegen - Angelegenheiten, die Ihr Eingreifen erfordern.</para> - - <para>Wenn Sie Committerrechte haben, können Sie die - VuXML-Datenbank selbst aktualisieren. Auf diese Weise helfen - Sie den Sicherheitsverantwortlichen und liefern die - kritischen Informationen frühzeitig an die Community. - Aber auch wenn Sie kein Committer sind und glauben, Sie - haben eine außergewöhnlich schwerwiegende - Lücke gefunden – egal - welche – zögern Sie bitte nicht die - Sicherheitsverantwortlichen zu kontaktieren, wie es in den - <link xlink:href="http://www.freebsd.org/security/#how"> FreeBSD - Sicherheitsinformationen</link> beschrieben wird.</para> - - <para>Wie vielleicht aus dem Titel hervorgeht, handelt es sich - bei der VuXMl-Datenbank um ein - XML-Dokument. Die Quelldatei <filename>vuln.xml</filename> - können Sie im Port <package>security/vuxml</package> finden. Deshalb - wird der komplette Pfadname <filename> - PORTSDIR/security/vuxml/vuln.xml</filename> - lauten. Jedes Mal, wenn Sie eine Sicherheitslücke in - einem Port entdecken, fügen Sie bitte einen Eintrag - dafür in diese Datei ein. Solange Sie nicht mit VuXML - vertraut sind, ist es das Beste, was Sie machen können, - einen vorhandenen Eintrag, der zu Ihrem Fall passt, zu - kopieren und als Vorlage zu verwenden.</para> - </sect2> - - <sect2 xml:id="security-notify-vuxml-intro"> - <title>Eine kurze Einführung in VuXML</title> - - <para>Das komplette XML ist komplex und würde den - Rahmen dieses Buches sprengen. Allerdings benötigen Sie - für einen grundlegenden Einblick in die Struktur eines - VuXML-Eintrags nur eine Vorstellung der Tags. XML-Tags - bestehen aus Namen, die in spitzen Klammern eingeschlossen - sind. Zu jedem öffnenden <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 xml:id="co-vx-vid"/> - <topic>Several vulnerabilities found in Foo</topic> <co xml:id="co-vx-top"/> - <affects> - <package> - <name>foo</name> <co xml:id="co-vx-nam"/> - <name>foo-devel</name> - <name>ja-foo</name> - <range><ge>1.6</ge><lt>1.9</lt></range> <co xml: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 xml:id="co-vx-nm2"/> - <range><lt>1.10_7</lt></range> <co xml: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 xml: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 xml:id="co-vx-ref"/> - <freebsdsa>SA-10:75.foo</freebsdsa> <co xml:id="co-vx-fsa"/> - <freebsdpr>ports/987654</freebsdpr> <co xml:id="co-vx-fpr"/> - <cvename>CAN-2010-0201</cvename> <co xml:id="co-vx-cve"/> - <cvename>CAN-2010-0466</cvename> - <bid>96298</bid> <co xml:id="co-vx-bid"/> - <certsa>CA-2010-99</certsa> <co xml:id="co-vx-cts"/> - <certvu>740169</certvu> <co xml:id="co-vx-ctv"/> - <uscertsa>SA10-99A</uscertsa> <co xml:id="co-vx-ucs"/> - <uscertta>SA10-99A</uscertta> <co xml:id="co-vx-uct"/> - <mlist msgid="201075606@hacker.com">http://marc.theaimsgroup.com/?l=bugtraq&amp;m=203886607825605</mlist> <co xml:id="co-vx-mls"/> - <url>http://j.r.hacker.com/advisories/1</url> <co xml:id="co-vx-url"/> - </references> - <dates> - <discovery>2010-05-25</discovery> <co xml:id="co-vx-dsc"/> - <entry>2010-07-13</entry> <co xml:id="co-vx-ent"/> - <modified>2010-09-17</modified> <co xml: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 <varname>PORTEPOCH</varname> als auch <varname> - PORTREVISION</varname> erlauben. Bitte denken Sie - daran, dass gemäß der Vergleichsregeln eine - Version mit einer <varname>PORTEPOCH</varname>, die - nicht Null ist, größer ist als jede Version - ohne <varname>PORTEPOCH</varname>. Das heißt, - <literal> 3.0,1</literal> ist größer als - <literal>3.1 </literal> oder sogar - <literal>8.9</literal>.</para> - </callout> - - <callout arearefs="co-vx-bdy"> - <para>Das ist die Zusammenfassung des Problems. In - diesem Feld wird XHTML verwendet. Zumindest - umschließende <literal><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 <link xlink:href="http://www.freebsd.org/security/#adv">FreeBSD - Sicherheitshinweis</link>.</para> - </callout> - - <callout arearefs="co-vx-fpr"> - <para>Das ist ein <link xlink:href="http://www.freebsd.org/support.html#gnats"> - FreeBSD Problembericht</link>.</para> - </callout> - - <callout arearefs="co-vx-cve"> - <para>Das ist eine <link xlink:href="http://www.cve.mitre.org/">Mitre CVE</link> - Kennung.</para> - </callout> - - <callout arearefs="co-vx-bid"> - <para>Das ist eine <link xlink:href="http://www.securityfocus.com/bid">SecurityFocus - Fehler-Kennung</link>.</para> - </callout> - - <callout arearefs="co-vx-cts"> - <para>Das ist ein Sicherheitshinweis von <link xlink:href="http://www.cert.org/">US-CERT</link>.</para> - </callout> - - <callout arearefs="co-vx-ctv"> - <para>Das ist eine Mitteilung über eine - Schwachstelle von <link xlink:href="http://www.cert.org/">US-CERT</link>.</para> - </callout> - - <callout arearefs="co-vx-ucs"> - <para>Das ist ein Cyber-Sicherheitsalarm von <link xlink:href="http://www.cert.org/">US-CERT</link>.</para> - </callout> - - <callout arearefs="co-vx-uct"> - <para>Das ist ein technischer Cyber-Sicherheitsalarm - von <link xlink:href="http://www.cert.org/">US-CERT</link>.</para> - </callout> - - <callout arearefs="co-vx-mls"> - <para>Das ist eine URL zu einem archivierten Posting - auf einer Mailingliste. Das Attribut - <literal>msgid</literal> ist optional und gibt die - Nachrichtenkennung des Postings an.</para> - </callout> - - <callout arearefs="co-vx-url"> - <para>Das ist eine gewöhnliche URL. Sie sollte - nur verwendet werden, wenn keine der anderen - Referenzkategorien verfügbar ist.</para> - </callout> - - <callout arearefs="co-vx-dsc"> - <para>Das ist das Datum, an dem die - Sicherheitslücke bekannt wurde - (<replaceable>JJJJ-MM-TT</replaceable>).</para> - </callout> - - <callout arearefs="co-vx-ent"> - <para>Das ist das Datum, an dem der Eintrag - hinzugefügt wurde - (<replaceable>JJJJ-MM-TT</replaceable>).</para> - </callout> - - <callout arearefs="co-vx-mod"> - <para>Das ist das Datum, an dem zuletzt irgendeine - Information des Eintrags verändert wurde - (<replaceable>JJJJ-MM-TT</replaceable>). Neue - Einträge dürfen dieses Feld nicht enthalten. - Es sollte beim Editieren eines existierenden Eintrags - eingefügt werden.</para> - </callout> - </calloutlist> - </sect2> - - <sect2 xml:id="security-notify-vuxml-testing"> - <title>Ihre Änderungen an der VuXML-Datenbank - testen</title> - - <para>Nehmen wir an, Sie haben gerade einen Eintrag - für eine Sicherheitslücke in dem Paket - <literal>clamav</literal> geschrieben oder - ausgefüllt, die in der Version - <literal>0.65_7</literal> korrigiert wurde.</para> - - <para>Als Voraussetzung müssen Sie die aktuellen Versionen - der Ports <package>ports-mgmt/portaudit</package>, <package>ports-mgmt/portaudit-db</package> sowie - <package>security/vuxml</package> - <emphasis>installieren</emphasis>.</para> - - <note> - <para>Um <command>packaudit</command> auszuführen, - müssen Sie die Berechtigung haben - <filename>DATABASEDIR</filename> zu - schreiben – üblicherweise ist das - <filename>/var/db/portaudit</filename>.</para> - - <para>Durch Setzen der Umgebungsvariable - <filename>DATABASEDIR</filename> können - Sie hier auch ein anderes Verzeichnis angeben.</para> - - <para>Arbeiten Sie nicht aus dem Verzeichnis - <filename>${PORTSDIR}/security/vuxml</filename> heraus, - müssen Sie zusätzlich die Umgebungsvariable - <filename>VUXMLDIR</filename> setzen, um - anzugeben, in welchem Verzeichnis sich die Datei - <filename>vuln.xml</filename> befindet.</para> - </note> - - <para>Zuerst überprüfen Sie bitte, ob bereits - ein Eintrag für diese Schwachstelle existiert. Wenn - es einen solchen Eintrag gibt, sollte er auf die vorige - Version <literal>0.65_6</literal> zutreffen:</para> - - <screen>&prompt.user; <userinput>packaudit</userinput> -&prompt.user; <userinput>portaudit clamav-0.65_6</userinput></screen> - - <para>Wenn keine vorhandenen Einträge gefunden werden - haben Sie grünes Licht, einen neuen Eintrag für - diese Sicherheitslücke anzulegen. Sie können nun - eine neue UUID erzeugen (wir nehmen an, diese lautet - <literal>74a9541d-5d6c-11d8-80e3-0020ed76ef5a</literal>) - und einen neuen Eintrag in der VuXML-Datenbank anlegen. - Bitte überprüfen Sie danach die Syntax mit - folgendem Befehl:</para> - - <screen>&prompt.user; <userinput>cd ${PORTSDIR}/security/vuxml && make validate</userinput></screen> - - <note> - <para>Sie werden zumindest eines der folgenden Pakete - benötigen: <package>textproc/libxml2</package>, <package>textproc/jade</package>.</para> - </note> - - <para>Jetzt bauen Sie bitte die - <command>portaudit</command>-Datenbank aus der VuXML-Datei - neu:</para> - - <screen>&prompt.user; <userinput>packaudit</userinput></screen> - - <para>Um sicherzustellen, dass der Abschnitt - <literal><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 xml:id="porting-dads"> - <title>Was man machen respektive vermeiden sollte</title> - - <sect1 xml:id="dads-intro"> - <title>Einführung</title> - - <para>Hier ist eine Liste von gebräuchlichen Dos and - Don'ts (Dinge, die man machen oder vermeiden sollte), welchen - Sie während des Portierungsprozesses begegnen werden. - Sie sollten Ihren Port anhand dieser Liste - überprüfen. Sie können auch Ports in der <link xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query">PR - Datenbank</link>, welche andere Menschen eingereicht haben, - kontrollieren. Senden Sie bitte Kommentare zu Ports, die Sie - verifizieren wie unter <link xlink:href="&url.articles.contributing;/contrib-how.html#CONTRIB-GENERAL">Bug - Reports and General Commentary</link> beschrieben. Der - Abgleich von Ports aus der PR-Datenbank hilft uns diese - schneller zu committen, und zeigt auch, dass Sie wissen, worum - es geht.</para> - </sect1> - - <sect1 xml:id="porting-wrkdir"> - <title><varname>WRKDIR</varname></title> - - <para>Schreiben Sie in keine Dateien außerhalb von - <varname>WRKDIR</varname>. <varname>WRKDIR</varname> ist der - einzige Ort, welcher während des Erstellen des Ports - garantiert beschreibbar ist (siehe <link xlink:href="&url.books.handbook;/ports-using.html#PORTS-CD"> Ports - Installieren von CDROM</link> für ein Beispiel, um Ports - in einem schreibgeschützen Zweig zu erstellen). Wenn Sie - eine der <filename>pkg-*</filename> - Dateien modifizieren müssen, sollten Sie <link linkend="porting-pkgfiles">eine Variable erneut - definieren</link>, anstatt die Datei zu - überschreiben.</para> - </sect1> - - <sect1 xml:id="porting-wrkdirprefix"> - <title><varname>WRKDIRPREFIX</varname></title> - - <para>Vergewissern Sie sich, dass Ihr Port - <varname>WRKDIRPREFIX</varname> beachtet. Die meisten Ports - sollten sich darüber keine Sorgen machen. Beachten Sie - bitte, falls auf <varname>WRKDIR</varname> eines anderen Ports - verwiesen wird, dass die korrekte Position - <filename>WRKDIRPREFIXPORTSDIR/subdir/name/work</filename>, - und nicht etwa - <filename>PORTSDIR/subdir/name/work</filename>, - <filename>.CURDIR/../../subdir/name/work</filename> - oder ähnliches ist.</para> - - <para>Falls Sie <varname>WRKDIR</varname> selbst definieren, - sollten Sie sicherstellen, dass Sie - <literal>${WRKDIRPREFIX}${.CURDIR}</literal> am - Anfang anfügen.</para> - </sect1> - - <sect1 xml:id="porting-versions"> - <title>Unterschiedliche Betriebssysteme und - Betriebssystemversionen</title> - - <para>Sie können auf Quelltext treffen, welcher - Modifizierungen oder bedingtes Kompilieren, abhängig - davon, unter welcher Unix-Version er läuft, - benötigt. Falls Sie Änderungen an solch einem - Quelltext vornehmen müssen, stellen Sie bitte sicher, - dass Sie Ihre Änderungen so allgemein wie möglich - halten, damit wir den Quelltext auf ältere - FreeBSD-Systeme portieren und zur Quer-Portierung auf andere - BSD-Systeme, wie etwa 4.4BSD von CSRG, BSD/386, 386BSD, NetBSD - und OpenBSD verwenden können.</para> - - <para>Der bevorzugte Weg, um 4.3BSD/Reno (1990) und neuere - Versionen des BSD-Quelltextes zu unterscheiden, ist das - <literal>BSD</literal>-Makro zu nutzen, welches in <link xlink:href="http://cvsweb.freebsd.org/src/sys/sys/param.h">sys/param.h</link> - definiert ist. Hoffentlich ist diese Datei schon - enthalten – 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 - <varname>CFLAGS</varname> im <filename>Makefile</filename> - hinzuzufügen, falls Sie diese Methode benutzen - sollten.</para> - - <para>Sobald Sie <filename>sys/param.h</filename> - hinzugefügt haben, können Sie mit Hilfe von</para> - - <programlisting>#if (defined(BSD) && (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 xml:id="freebsd-versions"> - <title>__FreeBSD_version Werte</title> - - <para>Hier ist eine praktische Liste von - <literal>__FreeBSD_version</literal>-Werten wie in <link xlink:href="http://cvsweb.freebsd.org/src/sys/sys/param.h">sys/param.h</link> - definiert:</para> - - <table frame="none"> - <title>__FreeBSD_version-Werte</title> - - <tgroup cols="3"> - <thead> - <row> - <entry>Wert</entry> - <entry>Datum</entry> - <entry>Release</entry> - </row> - </thead> - - <tbody> - <row> - <entry>119411</entry> - <entry/> - <entry>2.0-RELEASE</entry> - </row> - - <row> - <entry>199501, 199503</entry> - <entry>19. 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>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>2.2.1-RELEASE</entry> - </row> - - <row> - <entry>(nicht geändert)</entry> - <entry/> - <entry>2.2-STABLE nach 2.2.1-RELEASE</entry> - </row> - - <row> - <entry>221001</entry> - <entry>15. 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>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>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>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>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 <link xlink:href="http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/kern/kern_mbuf.c#rev1.35">Änderungen - am Jumbo Frame Allocator</link>.</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 - <filename>/dev/psm%d</filename> 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>900040</entry> - <entry>19. Juli 2011</entry> - <entry>Standardmäßige Erhöhung von MAXCPU für &os; auf - 64 für amd64 und ia64 und auf 128 für XLP - (mips).</entry> - </row> - - <row> - <entry>900041</entry> - <entry>13. 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> - - <row> - <entry>900042</entry> - <entry>28. August 2011</entry> - <entry>Versionssprünge für Shared-Libraries deren ABI - sich geändert hat, in Vorbereitung für 9.0.</entry> - </row> - - <row> - <entry>900043</entry> - <entry>2. September 2011</entry> - <entry>Automatische Erkennung von USB-Massenspeicher - Geräten, die das no synchronize cache SCSI Kommando - nicht unterstützen.</entry> - </row> - - <row> - <entry>900044</entry> - <entry>10. September 2011</entry> - <entry>Re-factor auto-quirk.</entry> - </row> - - <row> - <entry>900045</entry> - <entry>13. Oktober 2011</entry> - <entry>Allen nicht-kompatiblen - Systemaufruf-Einstiegspunkten wurde ein sys_ - vorangestellt.</entry> - </row> - - </tbody> - </tgroup> - </table> - - <note> - <para>Beachten Sie, dass 2.2-STABLE sich nach dem - 2.2.5-RELEASE manchmal als <quote>2.2.5-STABLE</quote> - identifiziert. Das Muster war früher das Jahr gefolgt - von dem Monat, aber wir haben uns entschieden, ab 2.2. einen - geradlinigeren Ansatz mit major/minor-Nummern zu benutzen. - Dies liegt daran, dass gleichzeitiges Entwickeln an mehreren - Zweigen es unmöglich macht, die Versionen nur mit Hilfe - des Datums des Releases zu unterteilen. Wenn Sie jetzt einen - Port erstellen brauchen Sie sich nicht um alte -CURRENTs zu - kümmern; diese sind hier nur als Referenz - augeführt.</para> - </note> - </sect1> - - <sect1 xml:id="dads-after-port-mk"> - <title>Etwas hinter die - <filename>bsd.port.mk</filename>-Anweisung schreiben</title> - - <para>Schreiben Sie bitte nichts hinter die <literal>.include - <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><varname>ARCH</varname></entry> - <entry>Die Architektur, wie von <command>uname - -m</command> zurückgegeben (z.B. - <literal>i386</literal>)</entry> - </row> - - <row> - <entry><varname>OPSYS</varname></entry> - <entry>Der Typ des Betriebsystems, wie von <command>uname - -s</command> zurückgegeben (z.B. - <literal>FreeBSD</literal>)</entry> - </row> - - <row> - <entry><varname>OSREL</varname></entry> - <entry>Die Release Version des Betriebssystems (z.B., - <literal>2.1.5</literal> oder - <literal>2.2.7</literal>)</entry> - </row> - - <row> - <entry><varname>OSVERSION</varname></entry> - <entry>Die numerische Version des Betriebssystems; - gleichbedeutend mit <link linkend="freebsd-versions"><literal>__FreeBSD_version</literal></link>.</entry> - </row> - - <row> - <entry><varname>PORTOBJFORMAT</varname></entry> - <entry>Das Objektformat des Systems - (<literal>elf</literal> oder <literal>aout</literal>; - beachten Sie, dass für <quote>moderne</quote> - Versionen von FreeBSD <literal>aout</literal> veraltet - ist).</entry> - </row> - - <row> - <entry><varname>LOCALBASE</varname></entry> - <entry>Die Basis des <quote>local</quote> - Verzeichnisbaumes (z.B. - <literal>/usr/local/</literal>)</entry> - </row> - - <row> - <entry><varname>PREFIX</varname></entry> - <entry>Wo der Port sich selbst installiert (siehe <link linkend="porting-prefix"> Mehr Informationen über - <varname>PREFIX</varname></link>).</entry> - </row> - </tbody> - </tgroup> - </informaltable> - - <note> - <para>Falls Sie die Variablen <varname>USE_IMAKE</varname>, - <varname>USE_X_PREFIX</varname>, oder - <varname>MASTERDIR</varname> definieren müssen, sollten - Sie dies vor dem Einfügen von - <filename>bsd.port.pre.mk</filename> machen.</para> - </note> - - <para>Hier sind ein paar Beispiele von Dingen, die Sie hinter - die Anweisung <filename>bsd.port.pre.mk</filename> schreiben - können:</para> - - <programlisting># lang/perl5 muss nicht kompliliert werden, falls perl5 schon auf dem System ist -.if ${OSVERSION} > 300003 -BROKEN= perl ist im System -.endif - -# nur eine Versionsnummer für die ELF Version der shlib -.if ${PORTOBJFORMAT} == "elf" -TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR} -.else -TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR}.${SHLIB_MINOR} -.endif - -# die Software erstellt schon eine Verknüpfung fü ELF, aber nicht fü a.out -post-install: -.if ${PORTOBJFORMAT} == "aout" - ${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so -.endif</programlisting> - - <para>Sie haben sich daran erinnert Tabulator statt - Leerzeichen nach <literal>BROKEN=</literal> und - <literal>TCL_LIB_FILE=</literal> zu benutzen, oder? - <!-- smiley -->:-).</para> - </sect1> - - <sect1 xml:id="dads-sh-exec"> - <title>Benutzen Sie die <function>exec</function>-Anweisung in - Wrapper-Skripten</title> - - <para>Falls der Port ein Shellskript installiert, dessen Zweck - es ist ein anderes Programm zu starten, und falls das Starten - des Programmes die letzte Aktion des Skripts ist, sollten Sie - sicherstellen, dass Sie die Funktion <function>exec</function> - dafür benutzen; zum Beispiel:</para> - - <programlisting>#!/bin/sh -exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting> - - <para>Die Funktion <function>exec</function> ersetzt den - Shell-Prozess mit dem angegebenen Programm. Falls - <function>exec</function> ausgelassen wird, verbleibt der - Shell-Prozess im Speicher während das Programm - ausgefährt wird und verbraucht unnötig - Systemressourcen.</para> - </sect1> - - <sect1 xml:id="dads-rational"> - <title>Aufgaben vernünftig lösen</title> - - <para>Das <filename>Makefile</filename> sollte die - nötigen Schritte einfach und vernünftig - durchführen. Wenn Sie ein einige Zeilen einsparen oder - die Lesbarkeit verbessern können, dann machen Sie dies - bitte. Beispiele sind: Ein make-Konstrukt - <literal>.if</literal> anstatt eines Shellkonstrukt - <literal>if</literal> zu verwenden, anstatt - <buildtarget>do-extract</buildtarget> neu zu definieren, dies - mit <varname>EXTRACT*</varname> machen, oder - <varname>GNU_CONFIGURE</varname> anstelle von - <literal>CONFIGURE_ARGS += --prefix=${PREFIX}</literal> - zu verwenden.</para> - - <para>Falls Sie sich in einer Situation wiederfinden, in der - Sie viel Code neu schreiben müssen, um etwas zu testen, - sollten Sie zuerst <filename>bsd.port.mk</filename> erneut - konsultieren und nachprüfen ob es nicht bereits eine - Lösung für Ihr Problem enthält. Es ist zwar - schwer zu lesen, beinhaltet jedoch eine Menge kurzer - Lösungen für viele scheinbar schwierige - Probleme.</para> - </sect1> - - <sect1 xml:id="dads-cc"> - <title>Berücksichtigen Sie sowohl <varname>CC</varname> als - auch <varname>CXX</varname></title> - - <para>Der Port sollte sowohl die <varname>CC</varname>- wie - auch die <varname>CXX</varname>-Variable berücksichtigen. - Damit ist gemeint, dass der Port diese Variablen nicht ohne - Rücksicht auf eventuell schon gesetzte Werte einfach - überschreiben sollte; stattdessen sollten neue Werte an - schon existierende angehängt werden. Dadurch können - Build-Optionen, die alle Ports betreffen, global definiert - werden.</para> - - <para>Falls der Port diese Variablen nicht - berücksichtigt, sollte <literal>NO_PACKAGE=ignores either - cc or cxx</literal> ins <filename>Makefile</filename> - eingefügt werden.</para> - - <para>Im Folgenden wird ein Beispiel eines - <filename>Makefile</filename>s gezeigt, welches die beiden - Variablen <varname>CC</varname> und <varname>CXX</varname> - berücksichtigt. Beachten Sie das - <varname>?=</varname>:</para> - - <programlisting>CC?= gcc</programlisting> - <programlisting>CXX?= g++</programlisting> - - <para>Nachfolgend ein Beispiel, welches weder - <varname>CC</varname> noch <varname>CXX</varname> - berücksichtigt:</para> - - <programlisting>CC= gcc</programlisting> - <programlisting>CXX= g++</programlisting> - - <para>Die Variablen <varname>CC</varname> und - <varname>CXX</varname> können auf FreeBSD-Systemen in - <filename>/etc/make.conf</filename> definiert werden. Im - ersten Beispiel wird ein Wert nur dann gesetzt, falls dieser - vorher noch nicht gesetzt war, um so systemweite Definitionen - zu berücksichtigen. Im zweiten Beispiel werden die - Variablen ohne Rücksicht überschrieben.</para> - </sect1> - - <sect1 xml:id="dads-cflags"> - <title>Berücksichtigen Sie - <varname>CFLAGS</varname></title> - - <para>Der Port sollte die Variable <varname>CFLAGS</varname> - berücksichtigen. Damit ist gemeint, dass der Port den - Wert dieser Variablen nicht absolut setzen und damit - existierende Werte überschreiben sollte; stattdessen - sollte er weitere Werte der Variablen durch Anhängen - hinzufügen. Dadurch können Build-Optionen, die alle - Ports betreffen, global definiert werden.</para> - - <para>Falls der Port diese Variablen nicht - berücksichtigt, sollte <literal>NO_PACKAGE=ignores - cflags</literal> ins <filename>Makefile</filename> - eingefügt werden.</para> - - <para>Im Folgenden wird ein Beispiel eines - <filename>Makefile</filename>s gezeigt, welches die Variable - <varname>CFLAGS</varname> berücksichtigt. Beachten Sie - das <varname>+=</varname>:</para> - - <programlisting>CFLAGS+= -Wall -Werror</programlisting> - - <para>Nachfolgend finden Sie ein Beispiel, welches die - <varname>CFLAGS</varname>-Variable nicht - berücksichtigt:</para> - - <programlisting>CFLAGS= -Wall -Werror</programlisting> - - <para>Die Variable <varname>CFLAGS</varname> wird auf - FreeBSD-Systemen in <filename>/etc/make.conf</filename> - definiert. Im ersten Beispiel werden weitere Flags an die - Variable <varname>CFLAGS</varname> angehängt und somit - der bestehende Wert nicht gelöscht. Im zweiten Beispiel - wird die Variable ohne Rücksicht - überschrieben.</para> - - <para>Sie sollten Optimierungsflags aus - <filename>Makefile</filename>s Dritter entfernen. Die - <varname>CFLAGS</varname> des Systems beinhalten systemweite - Optimierungsflags. Ein Beispiel eines unveränderten - <filename>Makefile</filename>s:</para> - - <programlisting>CFLAGS= -O3 -funroll-loops -DHAVE_SOUND</programlisting> - - <para>Werden nun systemweite Optimierungsflags verwendet so - würde das <filename>Makefile</filename> in etwa - folgendermaßen aussehen:</para> - - <programlisting>CFLAGS+= -DHAVE_SOUND</programlisting> - </sect1> - - <sect1 xml:id="dads-pthread"> - <title>Threading-Bibliotheken</title> - - <para>Die Threading-Bibliothek muss mit Hilfe eines speziellen - Linker-Flags <literal>-pthread</literal> in die - Binärdateien unter &os; gebunden werden. Falls ein Port - auf ein direktes Verlinken gegen <literal>-lpthread</literal> - oder <literal>-lc_r</literal> besteht, passen Sie den Port - bitte so an, dass er die durch das Port-Framework - bereitgestellte Variable <varname>PTHREAD_LIBS</varname> - verwendet. Diese Variable hat üblicherweise den Wert - <literal>-pthread</literal>, kann aber auf einigen - Architekturen und &os;-Versionen abweichende Werte haben und - daher sollte nie <literal>-pthread</literal> direkt in Patches - geschrieben werden, sondern immer - <varname>PTHREAD_LIBS</varname>.</para> - - <note> - <para>Falls durch das Setzen von - <varname>PTHREAD_LIBS</varname> der Bau des Ports mit der - Fehlermeldung <literal>unrecognized option - '-pthread'</literal> abbricht, kann die Verwendung des - <command>gcc</command> als Linker durch setzen von - <varname>CONFIGURE_ENV</varname> auf - <literal>LD=${CC}</literal> helfen. Die Option - <literal>-pthread</literal> wird nicht direkt von - <command>ld</command> unterstützt.</para> - </note> - </sect1> - - <sect1 xml:id="dads-freedback"> - <title>Rückmeldungen</title> - - <para>Brauchbare Änderungen/Patches sollten an den - ursprünglichen Autor/Maintainer der Software geschickt - werden, damit diese in der nächsten Version der Software - mit aufgenommen werden können. Dadurch wird Ihre Aufgabe - für die nächste Version der Software deutlich - einfacher.</para> - </sect1> - - <sect1 xml:id="dads-readme"> - <title><filename>README.html</filename></title> - - <para>Nehmen Sie bitte keine <filename>README.html</filename> - in den Port auf. Diese Datei ist kein Bestandteil der - CVS-Sammlung sondern wird durch <command>make readme</command> - erzeugt.</para> - </sect1> - - <sect1 xml:id="dads-noinstall"> - <title>Einen Port durch <varname>BROKEN</varname>, - <varname>FORBIDDEN</varname> oder <varname>IGNORE</varname> als - nicht installierbar markieren</title> - - <para>In manchen Fällen sollten Benutzer davon abgehalten - werden einen Port zu installieren. Um einem Benutzer - mitzuteilen, dass ein Port nicht installiert werden sollte, - gibt es mehrere Variablen für <command>make</command>, - die im <filename>Makefile</filename> des Ports genutzt werden - können. Der Wert der folgenden - <command>make</command>-Variablen wird dem Benutzer als Grund - für die Ablehnung der Installation des Ports - zurückgegeben. Bitte benutzen Sie die richtige - <command>make</command>-Variable, denn jede enthält eine - völlig andere Bedeutung für den Benutzer und das - automatische System, das von dem <filename>Makefile</filename> - abhängt, wie <link linkend="build-cluster">der - Ports-Build-Custer</link>, <link linkend="freshports">FreshPorts</link> und <link linkend="portsmon">portsmon</link>.</para> - - <sect2 xml:id="dads-noinstall-variables"> - <title>Variablen</title> - - <itemizedlist> - <listitem> - <para><varname>BROKEN</varname> ist reserviert für - Ports, welche momentan nicht korrekt kompiliert, - installiert oder deinstalliert werden. Es sollte - für Ports benutzt werden, von denen man annimmt, - dass dies ein temporäres Problem ist.</para> - - <para>Falls angegeben, wird der Build-Cluster dennoch - versuchen den Port zu bauen, um zu sehen, ob das - zugrunde liegende Problem behoben wurde (das ist jedoch - im Allgemeinen nicht der Fall).</para> - - <para>Benutzen Sie <varname>BROKEN</varname> zum - Beispiel, wenn ein Port:</para> - - <itemizedlist> - <listitem> - <para>nicht kompiliert</para> - </listitem> - - <listitem> - <para>beim Konfiguration- oder Installation-Prozess - scheitert</para> - </listitem> - - <listitem> - <para>Dateien außerhalb von - <filename>${LOCALBASE}</filename> installiert</para> - </listitem> - - <listitem> - <para>beim Deinstallieren nicht alle seine Dateien - sauber entfernt (jedoch kann es akzeptable und - wünschenswert sein, Dateien, die vom Nutzer - verändert wurden, nicht zu entfernen)</para> - </listitem> - </itemizedlist> - </listitem> - - <listitem> - <para><varname>FORBIDDEN</varname> wird für Ports - verwendet, die Sicherheitslücken enthalten oder die - ernste Sicherheitsbedenken für das FreeBSD-System - aufwerfen, wenn sie installiert sind (z.B. ein als - unsicher bekanntes Programm, oder ein Programm, das - einen Dienst zur Verfügung stellt, der leicht - kompromittiert werden kann). Ports sollten als - <varname>FORBIDDEN</varname> gekennzeichnet werden, - sobald ein Programm eine Schwachstelle hat und kein - Update veröffentlicht wurde. Idealerweise sollten - Ports so bald wie möglich aktualisiert werden wenn - eine Sicherheitslücke entdeckt wurde, um die Zahl - verwundbarer FreeBSD-Hosts zu verringern (wir - schätzen es für unsere Sicherheit bekannt zu - sein), obwohl es manchmal einen beachtlichen Zeitabstand - zwischen der Bekanntmachung einer Schwachstelle und dem - entsprechenden Update gibt. Bitte kennzeichnen Sie einen - Port nicht aus irgendeinem Grund außer Sicherheit - als <varname>FORBIDDEN</varname>.</para> - </listitem> - - <listitem> - <para><varname>IGNORE</varname> ist für Ports - reserviert, die aus anderen Gründen nicht gebaut - werden sollten. Es sollte für Ports verwendet - werden, in denen ein strukturelles Problem vermutet - wird. Der Build-Cluster wird unter keinen Umständen - Ports, die mit <varname>IGNORE</varname> markiert sind, - erstellen. Verwenden Sie <varname>IGNORE</varname> zum - Beispiel, wenn ein Port:</para> - - <itemizedlist> - <listitem> - <para>kompiliert, aber nicht richtig läuft</para> - </listitem> - - <listitem> - <para>nicht auf der installierten Version von &os; - läuft</para> - </listitem> - - <listitem> - <para>&os; Kernelquelltext zum Bauen benötigt, - aber der Benutzer diese nicht installiert hat</para> - </listitem> - - <listitem> - <para>ein Distfile benötigt, welches aufgrund - von Lizenzbeschränkungen nicht automatisch - abgerufen werden kann</para> - </listitem> - - <listitem> - <para>nicht korrekt mit einem momentan installiertem - Port arbeitet (der Port hängt zum Beispiel von - <package>www/apache21</package> ab, - aber <package>www/apache13</package> ist - installiert)</para> - </listitem> - </itemizedlist> - - <note> - <para>Wenn ein Port mit einem momentan installiertem - Port kollidiert (zum Beispiel, wenn beide eine Datei - an die selbe Stelle installieren, diese aber eine - andere Funktion hat), benutzen Sie stattdessen - <varname>CONFLICTS</varname>. - <varname>CONFLICTS</varname> setzt - <varname>IGNORE</varname> dann - selbstständig.</para> - </note> - </listitem> - - <listitem> - <para>Um einen Port nur auf bestimmte - Systemarchitekturen mit <varname>IGNORE</varname> zu - markieren, gibt es zwei Variablen, die automatisch - <varname>IGNORE</varname> für Sie setzen: - <varname>ONLY_FOR_ARCHS</varname> und - <varname>NOT_FOR_ARCHS</varname>. Beispiele:</para> - - <programlisting>ONLY_FOR_ARCHS= i386 amd64</programlisting> - - <programlisting>NOT_FOR_ARCHS= alpha ia64 sparc64</programlisting> - - <para>Eine eigene <varname>IGNORE</varname>-Ausgabe kann - mit <varname>ONLY_FOR_ARCHS_REASON</varname> und - <varname>NOT_FOR_ARCHS_REASON</varname> festgelegt - werden. Für eine bestimmte Architektur sind - Angaben durch - <varname>ONLY_FOR_ARCHS_REASON_<replaceable>ARCH</replaceable></varname> - und - <varname>NOT_FOR_ARCHS_REASON_<replaceable>ARCH</replaceable></varname> - möglich.</para> - </listitem> - - <listitem> - <para>Wenn ein Port i386-Binärdateien - herunterlädt und installiert, sollte - <varname>IA32_BINARY_PORT</varname> gesetzt werden. Wenn - die Variable gesetzt ist, wird überprüft, ob - das Verzeichnis <filename>/usr/lib32</filename> für - IA32-Versionen der Bibliotheken vorhanden ist, und ob - der Kernel mit IA32-Kompatibilität gebaut wurde. - Wenn eine dieser zwei Voraussetzungen nicht erfüllt - ist, wird <varname>IGNORE</varname> automatisch - gesetzt.</para> - </listitem> - </itemizedlist> - </sect2> - - <sect2 xml:id="dads-noinstall-notes"> - <title>Anmerkungen zur Implementierung</title> - - <para>Zeichenketten sollten nicht in Anführungszeichen - gesetzt werden. Auch die Wortwahl der Zeichenketten sollte - die Art und Weise beachten, wie die Informationen dem Nutzer - angezeigt werden. Beispiele:</para> - - <programlisting>BROKEN= this port is unsupported on FreeBSD 5.x</programlisting> - - <programlisting>IGNORE= is unsupported on FreeBSD 5.x</programlisting> - - <para>resultieren in den folgenden Ausgaben von - <command>make describe</command>:</para> - - <programlisting>===> 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 xml:id="dads-deprecated"> - <title>Kennzeichnen eines Ports zur Entfernung durch - <varname>DEPRECATED</varname> oder - <varname>EXPIRATION_DATE</varname></title> - - <para>Denken Sie bitte daran, dass <varname>BROKEN</varname> - und <varname>FORBIDDEN</varname> nur als temporärer - Ausweg verwendet werden sollten, wenn ein Port nicht - funktioniert. Dauerhaft defekte Ports sollten komplett aus der - Ports-Sammlung entfernt werden.</para> - - <para>Wenn es sinnvoll ist, können Benutzer vor der - anstehenden Entfernung eines Ports mit - <varname>DEPRECATED</varname> und - <varname>EXPIRATION_DATE</varname> gewarnt werden. Ersteres - ist einfach eine Zeichenkette, die angibt, warum der Port - entfernt werden soll. Letzteres ist eine Zeichenkette im ISO - 8601-Format (JJJJ-MM-TT). Beides wird dem Benutzer - gezeigt.</para> - - <para>Es ist möglich <varname>DEPRECATED</varname> ohne - <varname>EXPIRATION_DATE</varname> zu setzen (zum Beispiel, um - eine neuere Version des Ports zu empfehlen), aber das - Gegenteil ist sinnlos.</para> - - <para>Es gibt keine Vorschrift wie lange die Vorwarnzeit sein - muss. Gegenwärtig ist es üblich einen Monat für - sicherheitsrelevante Probleme und zwei Monate für - Build-Probleme anzusetzen. Dies gibt allen interessierten - Committern ein wenig Zeit die Probleme zu beheben.</para> - </sect1> - - <sect1 xml:id="dads-dot-error"> - <title>Vermeiden Sie den Gebrauch des - <literal>.error</literal>-Konstruktes</title> - - <para>Der korrekte Weg eines <filename>Makefile</filename> - anzuzeigen, dass der Port aufgrund eines externen Grundes - nicht installiert werden kann (zum Beispiel, weil der Benutzer - eine ungültige Kombination von Build-Optionen angegeben - hat), ist <varname>IGNORE</varname> auf einen nicht leeren - Wert zu setzen. Dieser wird dann formatiert und dem Benutzer - von <command>make install</command> ausgegeben.</para> - - <para>Es ist ein verbreiteter Fehler <literal>.error</literal> - für diesem Zweck zu verwenden. Das Problem dabei ist, - dass viele automatisierte Werkzeuge, die mit dem Ports-Baum - arbeiten, in dieser Situation fehlschlagen. Am Häufigsten - tritt das Problem beim Versuch - <filename>/usr/ports/INDEX</filename> zu bauen auf (siehe - <xref linkend="make-describe"/>). Jedoch schlagen auch - trivialere Befehle wie <command>make maintainer</command> - in diesem Fall fehl. Dies ist nicht akzeptabel!</para> - - <example xml:id="dot-error-breaks-index"> - <title>Wie vermeidet man die Verwendung von - <literal>.error</literal></title> - - <para>Nehmen Sie an, dass die Zeile - <programlisting>USE_POINTYHAT=yes</programlisting> in - <filename>make.conf</filename> enthalten ist. Der erste der - folgenden zwei <filename>Makefile</filename>-Schnipsel - lässt <command>make index</command> fehlschlagen, - während der zweite dies nicht tut.</para> - - <programlisting>.if USE_POINTYHAT -.error "POINTYHAT is not supported" -.endif</programlisting> - <programlisting>.if USE_POINTYHAT -IGNORE=POINTYHAT is not supported -.endif</programlisting> - </example> - </sect1> - - <sect1 xml:id="dads-sysctl"> - <title>Verwendung von <filename>sysctl</filename></title> - - <para>Vom Gebrauch von sysctl wird, außer in Targets, - abgeraten. Das liegt daran, dass die Auswertung aller - <literal>makevar</literal>s, wie sie während - <command>make index</command> verwendet werden, dann den - Befehl ausführen muss, welches den Prozess weiter - verlangsamt.</para> - - <para>Die Verwendung von &man.sysctl.8; sollte immer durch die - Variable <varname>SYSCTL</varname> erfolgen, da diese den - vollständigen Pfad enthält und überschrieben - werden kann, so dies als notwendig erachtet wird.</para> - </sect1> - - <sect1 xml:id="dads-rerolling-distfiles"> - <title>Erneutes Ausliefern von Distfiles</title> - - <para>Manchmal ändern die Autoren der Software den Inhalt - veröffentlichter Distfiles, ohne den Dateinamen zu - ändern. Sie müssen überprüfen, ob die - Änderungen offizell sind und vom Autor durchgeführt - wurden. Es ist in der Vergangenheit vorgekommen, dass - Distfiles still und heimlich auf dem Download-Server - geändert wurden, um Schaden zu verursachen oder die - Sicherheit der Nutzer zu kompromittieren.</para> - - <para>Verschieben Sie das alte Distfile und laden Sie das neue - herunter. Entpacken Sie es und vergleichen Sie den Inhalt - mittels &man.diff.1;. Wenn Sie nichts Verdächtiges sehen - können Sie <filename>distinfo</filename> aktualisieren. - Stellen Sie sicher, dass die Änderungen in Ihrem PR oder - Commit-Protokoll zusammengefasst sind, um zu - Gewährleisten, dass nichts Negatives passiert ist.</para> - - <para>Sie können auch mit den Autoren der Software in - Verbindung treten und sich die Änderungen bestätigen - lassen.</para> - </sect1> - - <sect1 xml:id="dads-misc"> - <title>Verschiedenes</title> - - <para>Die Dateien <filename>pkg-descr</filename> und - <filename>pkg-plist</filename> sollten beide doppelt - kontrolliert werden. Wenn Sie einen Port nachprüfen und - glauben, dass man es besser machen kann, dann verbessern Sie - ihn bitte.</para> - - <para>Bitte kopieren Sie nicht noch mehr Exemplare der - GNU General Public License in unser System.</para> - - <para>Bitte überprüfen Sie alle gesetzlichen Punkte - gründlich! Lassen Sie uns bitte keine illegale Software - verbreiten!</para> - </sect1> - </chapter> - - <chapter xml:id="porting-samplem"> - <title>Beispiel eines <filename>Makefile</filename></title> - - <para>Hier ein Beispiel für ein - <filename>Makefile</filename>, welches als Vorlage für - einen neuen Port dienen kann. Alle zusätzlichen Kommentare - in eckigen Klammern müssen entfernt werden!</para> - - <para>Es wird empfohlen, die hier gezeigte Formatierung zu - übernehmen (Reihenfolge der Variablen, Leerzeichen zwischen - einzelnen Abschnitten, usw.). Dadurch werden die wichtigen - Informationen sofort ersichtlich. Zur Überprüfung - Ihres <filename>Makefile</filename>s sollten Sie <link linkend="porting-portlint">portlint</link> verwenden.</para> - - <programlisting>[the header...just to make it easier for us to identify the ports.] -# New ports collection makefile for: xdvi -[the "version required" line is only needed when the PORTVERSION - variable is not specific enough to describe the port.] -# Date created: 26 May 1995 -[this is the person who did the original port to FreeBSD, in particular, the -person who wrote the first version of this Makefile. Remember, this should -not be changed when upgrading the port later.] -# Whom: Satoshi Asami <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 xml:id="keeping-up"> - <title>Auf dem Laufenden bleiben</title> - - <para>Die &os; Ports-Sammlung verändert sich ständig. - Hier finden Sie einige Informationen, wie Sie auf dem Laufenden - bleiben.</para> - - <sect1 xml:id="freshports"> - <title>FreshPorts</title> - - <para>Einer der einfachsten Wege, um sich über - Aktualisierungen, die bereits durchgeführt wurden, zu - informieren, ist sich bei <link xlink:href="http://www.FreshPorts.org/">FreshPorts</link> - anzumelden. Sie können dort beliebige Ports - auswählen, die Sie beobachten möchten. Maintainern - wird ausdrücklich empfohlen sich anzumelden, da Sie nicht - nur über Ihre eigenen Änderungen informiert werden, - sondern auch über die aller anderen Committer (Diese sind - oft nötig, um über Änderungen des zugrunde - liegenden Frameworks informiert zu bleiben. Obwohl es - höflich wäre, vorher über solche - Änderungen benachrichtigt zu werden, wird es manchmal - vergessen oder ist einfach nicht möglich. Außerdem - sind die Änderungen manchmal nur sehr klein. Wir erwarten - von jedem in solchen Fällen nach bestem Gewissen zu - urteilen).</para> - - <para>Wenn Sie Fresh-Ports benutzen möchten, - benötigen Sie nur einen Account. Falls Sie sich mit einer - <literal>@FreeBSD.org</literal> E-Mailadresse registriert - haben, werden Sie den Anmeldelink am rechten Rand der Seite - finden. Diejenigen, die bereits einen FeshPorts-Account - haben, aber nicht Ihre <literal>@FreeBSD.org</literal> - E-Mailadresse benutzen, können einfach Ihre E-Mailadresse - auf <literal>@FreeBSD.org</literal> ändern, sich - anmelden, und dann die Änderung rückgängig - machen.</para> - - <para>FreshPorts bietet auch eine - Überprüfungsfunktion, die automatisch alle Committs - zum &os; Ports-Baum testet. Wenn Sie sich für diesen - Dienst anmelden, werden Sie über alle Fehler, die bei der - Überprüfung Ihres Committs auftreten, - informiert.</para> - </sect1> - - <sect1 xml:id="cvsweb"> - <title>Die Webschnittstelle zum Quelltext-Repository</title> - - <para>Es ist möglich die Dateien des Quellen-Repositories - mit Hilfe einer Webschnittstelle durchzusehen. - Änderungen, die das gesamte Ports-System betreffen, - werden jetzt in der Datei <link xlink:href="http://cvsweb.FreeBSD.org/ports/CHANGES">CHANGES</link> - dokumentiert. Solche, die nur bestimmte Ports betreffen, in - der Datei <link xlink:href="http://cvsweb.FreeBSD.org/ports/UPDATING">UPDATING</link>. - Aber die maßgebliche Antwort auf alle Fragen liegt - zweifellos darin, den Quelltext von <link xlink:href="http://cvsweb.FreeBSD.org/ports/Mk/bsd.port.mk">bsd.port.mk</link> - und dazugehörige Dateien zu lesen.</para> - </sect1> - - <sect1 xml:id="ports-mailling-list"> - <title>Die &os; Ports-Mailingliste</title> - - <para>Wenn Sie Maintainer sind, sollten Sie in Erwägung - ziehen die &a.ports;-Mailingliste zu verfolgen. Wichtige - Änderungen an der grundlegenden Funktionsweise von Ports - werden dort angekündigt und dann in - <filename>CHANGES</filename> committet.</para> - </sect1> - - <sect1 xml:id="build-cluster"> - <title>Der Cluster zum Bauen von &os;-Ports auf <systemitem class="fqdomainname">pointyhat.FreeBSD.org</systemitem></title> - - <para>Eine der weniger bekannten Stärken von &os; ist es, - dass ein ganzer Cluster von Maschinen nur dafür - reserviert ist, andauernd die Ports-Sammlung zu bauen, und - zwar für jedes große &os; Release und jede - Tier-1-Architektur. Die Ergebnisse können Sie unter - <link xlink:href="http://pointyhat.FreeBSD.org/">package building - logs and errors</link> finden.</para> - - <para>Alle Ports ausser denjenigen, die als - <varname>IGNORE</varname> markiert sind, werden gebaut. Ports, - die als <varname>BROKEN</varname> markiert sind, werden - dennoch ausprobiert, um zu sehen, ob das zugrunde liegende - Problem gelöst wurde (Dies wird erreicht, indem - <varname>TRYBROKEN</varname> an das - <filename>Makefile</filename> des Ports übergeben - wird).</para> - </sect1> - - <sect1 xml:id="distfile-survey"> - <title>Der &os; Ports-Distfile-Scanner</title> - - <para>Der Build-Cluster ist dazu bestimmt, das neueste Release - jedes Ports aus bereits heruntergeladenden Distfiles zu bauen. - Da sich das Internet aber ständig verändert, können Distfiles - schnell verloren gehen. Der <link - xlink:href="https://portscout.freebsd.org">FreeBSD - Ports-Distfile-Scanner</link> versucht jeden - Download-Standort für jeden Port anzufragen, um - herauszufinden, ob jedes Distfile noch verfügbar ist. - Maintainer werden gebeten diesen Bericht regelmäßig - durchzusehen, nicht nur, um den Build-Prozess für die - Nutzer zu beschleunigen, sondern auch um zu vermeiden, dass - auf den Maschinen, die freiwillig zur Verfügung gestellt - werden, um all diese Dateien anzubieten, Ressourcen - verschwendet werden.</para> - </sect1> - - <sect1 xml:id="portsmon"> - <title>Das &os; Ports-Monitoring-System</title> - - <para>Eine weitere praktische Ressource ist das <link xlink:href="http://portsmon.FreeBSD.org">FreeBSD - Ports-Monitoring-System</link> (auch bekannt als - <literal>portsmon</literal>). Dieses System besteht aus einer - Datenbank, die Informationen von mehreren Quellen bezieht und - es erlaubt diese über ein Webinterface abzufragen. - Momentan werden die Ports-Problemberichte (PRs), die - Fehlerprotokolle des Build-Clusters und die einzelnen Dateien - der Ports-Sammlung verwendet. In Zukunft soll das auf die - Distfile-Prüfung und weitere Informationsquellen - ausgedehnt werden.</para> - - <para>Als Ausgangspunkt können Sie alle Informationen - eines Ports mit Hilfe der <link xlink:href="http://portsmon.FreeBSD.org/portoverview.py">Übersicht - eines Ports</link> betrachten.</para> - - <para>Zum Zeitpunkt des Schreibens ist dies die einzige - Quelle, die GNATS PR-Einträge auf Portnamen abbildet - (PR-Einreicher geben den Portnamen nicht immer in der - Zusammenfassung an, obwohl wir uns das wünschen - würden). Also ist <literal>portsmon</literal> ein guter - Anlaufpunkt, wenn Sie herausfinden wollen, ob zu einem - existierenden Port PRs oder Buildfehler eingetragen sind. Oder - um herauszufinden, ob ein neuer Port, den Sie erstellen - wollen, bereits eingereicht wurde.</para> - </sect1> - </chapter> -</book> |