Index: head/de_DE.ISO8859-1/books/porters-handbook/book.xml
===================================================================
--- head/de_DE.ISO8859-1/books/porters-handbook/book.xml (revision 52709)
+++ head/de_DE.ISO8859-1/books/porters-handbook/book.xml (revision 52710)
@@ -1,16632 +1,16633 @@
Das FreeBSD Porter-HandbuchThe FreeBSD German Documentation ProjectApril 20002000200120022003200420052006200720082009201020112012201320142015The FreeBSD German
Documentation Project
&trademarks;
&legalnotice;
$FreeBSD$EinfhrungDie Ports-Sammlung von FreeBSD ist der gebruchlichste
Weg, um Anwendungen ("Ports") unter FreeBSD zu installieren.
Wie alles andere in FreeBSD auch, ist sie hauptschlich
das Ergebnis der Arbeit von Freiwilligen. Es ist wichtig,
diesen Aspekt beim Lesen im Hinterkopf zu behalten.In FreeBSD kann jeder einen neuen Port einsenden oder sich
dazu bereit erklren, einen bereits vorhandenen Port zu
pflegen, sofern der Port derzeit keinen Maintainer
hat – dazu sind keine besonderen Rechte
ntig.Einen neuen Port erstellenSie sind also daran interessiert, einen neuen Port zu
erstellen oder einen vorhandenen zu aktualisieren?
Groartig!Die folgenden Kapitel beinhalten einige Richtlinien, um
einen neuen Port fr FreeBSD zu erstellen. Wenn Sie
einen vorhandenen Port auf den neuesten Stand bringen
wollen, sollten Sie mit
fortfahren.Wenn Ihnen dieses Dokument nicht detailliert genug ist,
sollten Sie einen Blick in
/usr/ports/Mk/bsd.port.mk werfen. Das
Makefile jedes Ports bindet diese Datei ein. Auch wenn Sie
nicht tglich mit Makefiles arbeiten, sollten Sie gut
damit zurecht kommen, da die Datei gut dokumentiert ist und
Sie eine Menge Wissen daraus erlangen knnen.
Zustzlich knnen Sie speziellere Fragen an die
&a.ports;-Mailingliste stellen.Nur ein Bruchteil der Variablen
(VAR), die von
Ihnen gesetzt werden knnen, finden hier
Erwhnung. Die meisten von ihnen (wenn nicht sogar
alle) sind am Anfang von
/usr/ports/Mk/bsd.port.mk
erlutert. Beachten Sie bitte, dass diese Datei eine
nicht standardkonforme Tabulator-Einstellung
verwendet. Emacs und
Vim sollten diese Einstellung
jedoch automatisch beim ffnen der Datei setzen. Sowohl
&man.vi.1; als auch &man.ex.1; knnen mit dem Befehl
:set tabstop=4 dazu gebracht werden, die
Datei richtig anzuzeigen, wenn sie geffnet wird.Sind Sie auf der Suche nach einer neuen Aufgabe? Dann sehen
Sie sich bitte die Ports-Wunschliste
an und prfen Sie, ob Sie an einem dieser Ports arbeiten
knnen.Einen neuen Port erstellenDieser Abschnitt beschreibt, wie Sie schnell einen neuen
Port erstellen knnen. In vielen Fllen ist dies
allerdings nicht ausreichend, dann werden Sie in diesem Buch
weiterlesen mssen.Als Erstes besorgen Sie sich das Original-Tarball
(komprimiertes Archiv) und legen es im
DISTDIR ab, welches
standardmig
/usr/ports/distfiles ist.Im Folgenden wird angenommen, dass die Software
unverndert kompiliert werden konnte, dass also keinerlei
nderungen ntig waren, um den Port auf Ihrem
FreeBSD-Rechner zum Laufen zu bringen. Falls Sie
nderungen vornehmen mussten, werden Sie auch den
nchsten Abschnitt beachten mssen.Das Makefile schreibenEin minimales Makefile sieht in etwa
so aus:# 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>Versuchen Sie es zu verstehen. Machen Sie sich keine
Gedanken um die
$FreeBSD$-Zeile, diese wird
automatisch vom CVS eingefgt, wenn der Port in den
Haupt-Ports-Tree importiert wird. Ein detailliertes Beispiel
finden Sie im Abschnitt
sample Makefile.Die Beschreibungsdateien erstellenEs gibt zwei Beschreibungsdateien, die fr jeden Port
bentigt werden, ob sie tatschlich im Paket
enthalten sind oder nicht. Dies sind
pkg-descr und
pkg-plist. Der pkg-
Prfix unterscheidet sie von anderen Dateien.pkg-descrDiese enthlt eine lngere Beschreibung des
Ports. Einer oder mehrere Abstze, die kurz und
prgnant erklren, was der Port macht, sind
ausreichend.pkg-descr enthlt
keine Anleitung oder detaillierte
Beschreibung wie der Port benutzt oder kompiliert wird!
Bitte seien Sie vorsichtig, wenn Sie aus dem
README oder der Manualpage kopieren
; Diese sind oft keine prgnanten
Beschreibungen des Ports oder sie sind in einem
ungnstigen Format (Manualpages haben z.B.
bndige Zwischenrume). Wenn es fr die
portierte Software eine offizielle Webseite gibt, sollten
Sie diese hier angeben. Fgen Sie hierzu
eine der Webseiten mit dem
Prfix WWW: ein, damit
automatische Werkzeuge korrekt arbeiten.Das folgende Beispiel zeigt wie Ihre
pkg-descr aussehen sollte:This is a port of oneko, in which a cat chases a poor mouse all over
the screen.
:
(etc.)
WWW: http://www.oneko.org/pkg-plistDiese Datei enthlt eine Liste aller Dateien, die
von diesem Port installiert werden. Sie wird auch die
Packliste genannt, da das Paket durch die
hier aufgefhrten Dateien erstellt wird. Die
Pfadangaben sind relativ zum Installationsprfix
(fr gewhnlich /usr/local
oder /usr/X11R6). Wenn Sie die
MANn-Variablen
verwenden (was Sie auch machen sollten), fhren Sie hier
keine Manualpages auf. Wenn der Port whrend der
Installation Verzeichnisse erstellt, stellen Sie sicher
entsprechende @dirrm-Zeilen
einzufgen, um die Verzeichnisse zu entfernen, wenn das
Paket gelscht wird.Hier ist ein kleines Beispiel: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/onekoFr weitere Details zur Packliste lesen Sie in der
&man.pkg.create.1; Manualpage nach.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 berprfen.Eine Packlist von Hand zu erzeugen kann eine sehr
mhsame Aufgabe sein. Wenn der Port eine groe
Anzahl Dateien installiert, kann es Zeit sparen,
eine Packliste automatisch
zu erstellen.Es gibt nur einen Fall, in dem
pkg-plist weggelassen werden kann.
Wenn der Port nur eine handvoll Dateien und Verzeichnisse
installiert, knnen diese in den Variablen
PLIST_FILES und
PLIST_DIRS im
Makefile aufgelistet werden. Zum
Beispiel knnten wir im obigen Beispiel ohne
pkg-plist fr den
oneko-Port auskommen, indem wir die
folgenden Zeilen ins Makefile
einfgen: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/onekoNatrlich sollte PLIST_DIRS
ungesetzt bleiben, wenn der Port keine eigenen Verzeichnisse
installiert.Der Preis fr diese Art die Dateien eines Ports
anzugeben ist, dass man keine Befehlsfolgen wie in
&man.pkg.create.1; nutzen kann. Deshalb ist es nur
fr 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 Erwgung,
bevor Sie pkg-plist benutzen.Spter werden wir uns ansehen, wie
pkg-plist und
PLIST_FILES benutzt werden knnen,
um anspruchsvollere Aufgaben zu
erfllen.Die Checksummendatei erzeugenGeben Sie einfach make makesum ein.
Die Regeln von Make sorgen dafr, dass die Datei
distinfo automatisch erstellt
wird.Wenn sich die Checksumme einer heruntergeladenen Datei
regelmig ndert und Sie sicher sind, dass
Sie der Quelle trauen knnen (weil sie z.B. von einer
Hersteller-CD oder tglich erstellter Dokumentation
stammt), sollten Sie diese Dateien in der Variable
IGNOREFILES angeben. Dann wird die
Checksumme fr diese Datei bei
make makesum nicht berechnet, sondern auf
IGNORE gesetzt.Den Port testenSie 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
berprfen sollten.pkg-plist enthlt nichts,
das nicht von Ihrem Port installiert wurde.pkg-plist enthlt alles,
was von Ihrem Port installiert wurde.Ihr Port kann mit Hilfe von
make reinstall mehrmals installiert
werden.Ihr Port
rumt bei der
Deinstallation hinter sich auf.Empfohlene Testreihenfolgemake installmake packagemake deinstallpkg_add Paket-Name
make deinstallmake reinstallmake packageStellen Sie bitte sicher, dass whrend
make package und
make deinstall keine Warnungen ausgegeben
werden. Nach Schritt 3 berprfen 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.Der grndlichste Weg diese Schritte zu automatisieren
ist eine Tinderbox zu installieren.
Diese verwaltet Jails, in denen Sie alle
oben genannten Schritte durchfhren knnen, ohne den
Zustand Ihres laufenden Systems zu verndern. Mehr
Informationen hierzu entlt
ports/ports-mgmt/tinderboxIhren Port mit portlint
berprfenBitte verwenden Sie portlint, um
festzustellen, ob Ihr Port unseren Richtlinien entspricht.
Das Programm
ports-mgmt/portlint ist
Teil der Ports-Sammlung. Stellen Sie vor allem sicher, dass
das Makefile in der
richtigen Form und das
Paket passend benannt
ist.Den neuen Port einreichenBevor Sie den neuen Port einreichen, lesen Sie bitte
unbedingt den Abschnitt DOs and DON'Ts.Nun, da Sie mit Ihrem Port zufrieden sind, mssen Sie
ihn nur noch in den Haupt-Ports-Tree von &os; einbringen,
damit alle daran teilhaben knnen. Wir bentigen
nicht Ihr work-Verzeichnis oder Ihr
pkgname.tgz-Paket – diese
knnen Sie nun lschen. Wenn Ihr Port beispielsweise
oneko heit, wechseln Sie in das
Verzeichnis, in dem sich das Verzeichnis
oneko befindet und fhren
den Befehl shar `find oneko` > oneko.shar
aus.Fgen Sie Ihre Datei oneko.shar
einem Fehlerbericht an und senden Sie diesen mit Hilfe des
Programms &man.send-pr.1; (unter
Bug Reports and General Commentary finden Sie weitere
Informationen ber &man.send-pr.1;). Ordnen Sie den
Fehlerbericht bitte in die Kategorie Ports
mit der Klasse Change-Request ein
(Markieren Sie den Bericht nicht als
vertraulich
(confidential)!). Fgen Sie bitte eine
kurze Beschreibung des Programms, das Sie portiert haben, in
das Beschreibungs-Feld des Problemberichts und
die shar-Datei in das Fix-Feld
ein (bespielsweise eine kurze Version des
COMMENT).Sie knnen uns die Arbeit um einiges vereinfachen,
wenn Sie eine gute Beschreibung in der Zusammenfassung des
Problemberichtes verwenden. Wir bevorzugen etwas wie
Neuer Port:
<Kategorie>/<Portname><Kurzbeschreibung des
Ports> fr neue Ports. Wenn Sie sich an
dieses Schema halten, ist die
Chance, dass sich jemand bald Ihren Bericht ansieht,
deutlich besser.Noch einmal: Bitte fgen Sie nicht das
distfile der Originalquelle, das
work-Verzeichnis oder das Paket, das Sie
mit make package erstellt haben,
ein. Und verwenden Sie &man.shar.1; fr
neue Ports (und NICHT &man.diff.1;).Haben Sie bitte etwas Geduld, nachdem Sie den Port
eingereicht haben. Manchmal kann es einige Monate dauern,
bevor ein Port in &os; eingefgt wird, obwohl es
wahrscheinlich nur ein paar Tage dauert. Sie knnen sich
die
Liste der PRs, die darauf warten, in &os; committet zu
werden, ansehen.Nachdem wir einen Blick auf Ihren Port geworfen haben,
werden wir, wenn ntig, bei Ihnen nachfragen und ihn in
die Ports-Sammlung bernehmen. Ihr Name taucht dann auch
in der Liste der Additional
FreeBSD Contributors und in anderen Dateien auf.
Ist das nicht toll?! :-)Einen Port in aller Ruhe erstellenOk, das war nicht ganz einfach und der Port hat einige
Vernderungen erfordert, um funktionieren zu knnen.
In diesem Abschnitt werden wir Schritt fr Schritt
erklren, wie man den funktionierenden Port den Vorgaben
der Ports entsprechend anpasst.Die FunktionsweiseBeginnen wir mit der Abfolge der Ereignisse, die
eintreten, wenn der Nutzer das erste make
in Ihrem Portsverzeichnis ausfhrt. Sie empfinden es
fr das Verstndnis vielleicht hilfreich
bsd.port.mk in einem anderen Fenster
offen zu haben, whrend Sie diesen Abschnitt
lesen.Aber machen Sie sich keine Sorgen, falls Sie nicht
wirklich verstehen, was bsd.port.mk
macht, die Wenigsten begreifen dies...
:>Das Target fetch wird
aufgerufen. Es ist dafr verantwortlich
sicherzustellen, dass der Tarball lokal im
DISTDIR verfgbar ist. Falls
fetch die bentigten Dateien
in DISTDIR nicht finden kann,
durchsucht es die URL MASTER_SITES,
welche im Makefile gesetzt ist, ebenso wie unsere
Haupt-FTP-Seite unter
ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/
, wo wir genehmigte Distfiles als Backup
aufbewahren. Danach wird versucht, so eine direkte
Internetverbindung besteht, dass genannte Distfile mit
FETCH herunterzuladen. Falls dies
gelingt, wird die Datei in DISTDIR
fr weitere Nutzung abgelegt und fhrt
fort.Das Target extract wird
aufgerufen. Es sucht nach den Distfiles Ihres Ports
(normalerweise ein gzip-komprimierter Tarball) in
DISTDIR und entpackt diese in ein
temporres Unterverzeichnis, welches von
WRKDIR festgelegt wird (standardmig
work).Das Target patch wird
aufgerufen. Zuerst werden alle in
PATCHFILES festgelegten Patches
eingespielt. Anschlieend werden, falls Patches der
Form
patch-* in
PATCHDIR (standardmig das
files-Unterverzeichnis) gefunden
werden, diese in alphabetischer Reihenfolge
eingespielt.Das Target configure wird
aufgerufen. Dieses kann viele verschiedene Dinge
machen.Existiert scripts/configure,
so wird es aufgerufen.Falls HAS_CONFIGURE oder
GNU_CONFIGURE gesetzt sind, wird
WRKSRC/configure
ausgefhrt.Falls USE_IMAKE gesetzt ist,
wird XMKMF
(standardmig xmkmf -a)
ausgefhrt.Das Target build wird
aufgerufen. Es ist fr das Wechseln in das private
Arbeitsverzeichnis (WRKSRC) und das
Bauen des Ports zustndig. Ist
USE_GMAKE gesetzt, so wird GNU
make verwendet, sonst das
System-make.Die oben genannten Schritte sind die Standardaktionen.
Zustzlich knnen Sie pre-
irgendwas oder
post-irgendwas als Targets definieren oder Skripten mit diesen
Namen in das scripts-Unterverzeichnis
legen. Sie werden dann vor bzw. nach den Standardaktionen
aufgerufen.Angenommen Sie haben das Target post-extract
in Ihrem Makefile
definiert und eine Datei pre-build im
scripts Unterverzeichnis, so wird das
Target post-extract nach dem normalen
Entpacken aufgerufen und das Skript
pre-build
ausgefhrt, bevor die vordefinierten Bau-Regeln
abgearbeitet sind. Es wird empfohlen, dass Sie
Makefile-Targets verwenden, falls die
Aktionen es erlauben, da es so fr jemanden einfacher
sein wird herauszufinden, was fr eine
nicht-standardmige Aktion der Port
bentigt.Die Standardaktionen werden aus den Targets
bsd.port.mkdo-irgendwas bernommen. Zum Beispiel sind die Befehle
zum Entpacken eines Ports im Target
do-extract zu finden. Falls Sie mit
einem vorgegebenen Target nicht zufrieden sind, knnen
Sie es verndern, indem Sie das Target
do-irgendwas in Ihrem Makefile neu
definieren.Die Haupt-Targets (z.B.
extract,
configure 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 gendert werden. Falls Sie das Entpacken
verndern wollen, verndern Sie
do-extract, aber niemals die Art,
wie extract arbeitet!Jetzt, da Sie verstehen, was geschieht, wenn der Benutzer
make eingibt, lassen Sie uns durch die
empfohlenen Schritte gehen, um den perfekten Port zu
erstellen.Den originalen Quelltext besorgenNormalerweise liegt der original Quelltext als gepackte
Datei (foo.tar.gz
oder
foo.tar.Z)
vor. Kopieren Sie diese nach DISTDIR.
Nutzen Sie, soweit mglich, immer die Quellen aus dem
Hauptzweig.Es ist notwendig die Variable
MASTER_SITES anzupassen, um anzugeben, wo
sich der originale Quelltext befindet. In
bsd.sites.mk finden sich hilfreiche
Definitionen fr die gebruchlichsten Seiten. Bitte
nutzen Sie diese Seiten und die zugehrigen Definitionen,
soweit dies mglich ist. Damit wird vermieden, immer und
immer wieder dieselben Informationen zu wiederholen. Da die
Hauptseiten regelmig angepasst werden
mssen, vereinfacht dieses Vorgehen die Pflege der
Dateien fr jeden Beteiligten.Falls keine zuverlssige 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 zuverlssigen Seite abgelegt
werden. Dies knnte z.B. die eigene Internetseite
sein.Ist kein geeigneter Ort zum Ablegen des Quelltextes
auffindbar, ist es mglich diesen intern
auf ftp.FreeBSD.org abzulegen; dies sollte
jedoch als letzte Mglichkeit angesehen werden. Das
Distfile muss in diesem Fall in ~/public_distfiles/
eines freefall-Accounts abgelegt
werden. Bitten Sie den Committer Ihres Ports dies zu erledigen.
Er wird auerdem MASTER_SITES nach
MASTER_SITE_LOCAL und
MASTER_SITE_SUBDIR auf den
freefall-Benutzernamen angepasst.Sollte sich das Distfile des Ports regelmig
ohne Versionsanpassungen des Autors ndern, sollte
berlegt werden, das Disfile auf der eigenen
Internetseite abzulegen und diese in der Liste der
MASTER_SITES an die erste Stelle zu setzen.
Falls mglich, sollte der Autor des Ports gebeten werden,
dies zu erledigen; hierber wird die Kontrolle des Quelltextes
verbessert. Wird eine eigene Version des Quelltextes auf
eigenen Internetseiten verfgbar gemacht, verhindert dies
Warnungen von checksum mismatch und
reduziert den Arbeitsaufwand der Maintainer der FTP-Seiten.
Auch wenn nur eine Quelle fr den Quelltext des Ports zur
Verfgung steht, ist es empfohlen, ein Backup auf einer
weiteren Seite abzulegen und diese als zweiten Eintrag in
MASTER_SITES aufzunehmen.Sind fr den Port zustzlich aus dem Internet
verfgbare Patches erforderlich, sollten diese ebenfalls
in DISTDIR 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 PATCHFILES
).Den Port bearbeitenEntpacken Sie eine Kopie des Tarballs in ein privates
Verzeichnis und nehmen Sie alle nderungen
vor, die ntig sind, um den Port unter einer aktuellen
&os;-Version kompilieren zu knnen.
Protokollieren Sie sorgfltig alle
Schritte, die Sie vornehmen, da Sie den Prozess in Krze
automatisieren werden. Alles, auch das Entfernen,
Hinzufgen oder Bearbeiten von Dateien, sollte von einem
automatisierten Skript oder einer Patch-Datei machbar sein,
wenn Ihr Port fertig ist.Falls Ihr Port bedeutende Interaktionen/Vernderungen
durch den Benutzer bentigt, um ihn zu Kompilieren oder
zu Installieren, sollten Sie einen Blick auf Larry Walls
klassische Configure-Skripte werfen
oder vielleicht etwas hnliches selbst erstellen. Das
Ziel der Ports-Sammlung ist es, jeden Port so
plug-and-play-fhig wie mglich
fr den Endbenutzer zu machen, whrend ein Minimum
an Speicherplatz gebraucht wird.Solange nicht anders angegeben wird von Patch-Dateien,
Skripten und anderen Dateien, die Sie erstellt und der &os;
Ports-Sammlung hinzugefgt haben, angenommen, dass Sie
unter den standardmigen BSD-Copyright-Bedingungen
stehen.Fehlerbehebung (Patches)Bei der Vorbereitung eines Ports knnen die Dateien,
die hinzugefgt oder verndert wurden, mittels
&man.diff.1; abgefangen werden, um Sie spter an
&man.patch.1; zu bergeben. Jeder Patch, der dem
Quelltext bergeben werden soll, sollte in einer Datei
patch-*
abgelegt werden, wobei * dem
Pfadnamen der zu korrigierenden Datei entspricht, wie er auch
in patch-Imakefile oder im
patch-src-config.h erscheint. Diese
Dateien sollten in PATCHDIR (normalerweise
files) abgelegt sein, von wo sie
automatisch bernommen werden. Alle Patches mssen
sich relativ zur WRKSRC-Variable
(normalerweise dem Verzeichnis, in dem sich der Quelltext des
Ports entpackt und wo auch der Bau stattfindet)
befinden.Um Korrekturen und Updates zu vereinfachen, sollte es
vermieden werden, mehr als einen Patch fr eine Datei zu
nutzen (z.B. patch-file und
patch-file2, welche beide
WRKSRC/foobar.c
verndern). Beachten Sie, dass, falls der Pfad einer zu
korrigierenden Datei einen Unterstrich (_)
enthlt, der Patch stattdessen zwei Unterstriche im Namen
haben muss. Zum Beispiel muss der Patch, der eine Datei namens
src/freeglut_joystick.c korrigieren soll,
patch-src-freeglut__joystick.c genannt
werden.Fr die Benennung der Patches sollten nur die Zeichen
[-+._a-zA-Z0-9] genutzt werden. Bitte
verwenden Sie keine weiteren Zeichen als die angegebenen. Die
Namensvergabe sollte nicht patch-aa oder
patch-ab etc. entsprechen, erwhnen
Sie immer den Pfad und Dateinamen.RCS-Zeichenketten sollten vermieden werden, da CVS diese
verstmmeln wrde, sobald wir diese Dateien in die
Ports-Sammlung einpflegen. Wenn wir die Dateien wieder abrufen
wren diese verndert und der Patch wrde
fehlschlagen. RCS-Zeichenketten sind in Dollar-Zeichen
($) eingefgte Zeichen und
beginnen blicherweise mit $Id
oder $RCS.Die Option rekursiv () zu nutzen
&man.diff.1;, um Patches zu erstellen, ist zulssig,
jedoch sollte der Patch anschlieend geprft
werden, um Unntiges aus dem Patch zu entfernen. Im
Einzelnen bedeutet dies, dass Diffs zwischen zwei
Backup-Dateien, Makefiles oder wenn der
Port Imake oder GNU
configure usw. nutzt, berflssig
sind und entfernt werden sollten. Falls es es notwendig war,
configure.in zu bearbeiten und es soll
autoconf zum Neuerstellen von
configure genutzt werden, sollten die Diffs
aus configure nicht genutzt werden (diese
werden oft einige tausend Zeilen
gro!); – hier sollte
USE_AUTOTOOLS=autoconf:261 definiert und
das Diff aus configure.in genutzt
werden.Zustzlich sollte man unntige
Markup-nderungen in Patches/nderungen mglichst
vermeiden. In der Open Source-Welt teilen sich Projekte
hufig groe Teile des Quellcodes. Allerdings
verwenden die einzelnen Projekte oft unterschiedliche
Programmierstile und Vorgaben fr Einrckungen. Wenn
man also einen funktionierenden Teil einer Funktion aus einem
Projekt verwendet, um ein hnliches Problem in einem anderen
Projekt zu lsen, sollte man besonders vorsichtig sein, weil
sich ansonsten die CVS-nderungseintrge mit
berflssigen Eintrgen fllen, die nur
das Markup des Quellcodes betreffen, ohne dass sich an der
Funktion des eigentlichen Quellcode etwas ndert
(withspace-only changes). Solche nderungen
vergrern nicht nur das CVS-Repository, sondern
erschweren es auch die Ursache fr eventuell auftretende
Probleme zu finden.War es notwendig eine Datei zu entfernen, wird dies besser
mittels des post-extract-Targets als
ber den Patch selbst realisiert.Ein einfacher Austausch kann direkt ber das
Makefile 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:post-patch:
@${REINPLACE_CMD} -e 's|for Linux|for FreeBSD|g' ${WRKSRC}/README
@${REINPLACE_CMD} -e 's|-pthread|${PTHREAD_LIBS}|' ${WRKSRC}/configure
Relativ hufig ergibt sich die Situation, in der die
portierte Software die CR/LF-Konventionen fr Zeilenenden
nutzt (dies ist bei unter &windows; entwickelter Software
hufig der Fall). Dies kann bei weiteren Patches Probleme
(Compiler-Warnungen, Fehlermeldungen bei der Ausfhrung
von Skripten wie z.B. /bin/sh^M not found)
und anderes ergeben. Um schnell alle Dateien von CR/LF
nach LF zu konvertieren, kann
USE_DOS2UNIX=yes in das
Makefile des Ports geschrieben werden.
Hierzu kann eine Liste der zu konvertierenden Dateien erstellt
werden:USE_DOS2UNIX= util.c util.hSollen Gruppen von Dateien ber verschiedene
Unterverzeichnisse konvertiert werden, kann
DOS2UNIX_REGEX genutzt werden, dessen
Argumente find-kompatible, regulre
Ausdrcke 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 binre Dateien unberhrt bleiben,
sinnvoll:USE_DOS2UNIX= yes
DOS2UNIX_REGEX= .*\.(c|cpp|h)Wenn Sie einen Patch zu einer bereits existierenden Datei
erstellen wollen, knnen Sie von ihr eine Kopie mit der
Endung .orig erstellen und
anschlieend die Originaldatei bearbeiten. Das make-Ziel
makepatch fhrt dann zu
einer entsprechenden Patch-Datei im Verzeichnis files des Ports.KonfigurierenFgen Sie alle zustzlichen
Vernderungsbefehle Ihrem Skript
configure hinzu und speichern Sie es im
scripts-Unterverzeichnis. Wie vorstehend
schon erwhnt, knnen Sie dies auch mit den Targets
Makefile und/oder Skripte mit dem Namen
pre-configure oder
post-configure erledigen.Handhabung von BenutzereingabenSollte der Port Eingaben vom Benutzer bentigen,
muss IS_INTERACTIVE im
Makefile des Ports gesetzt werden. Dies
erlaubt overnight builds Ihren Port zu
berspringen, falls der Nutzer die Variable
BATCH setzt (setzt der Nutzer hingegen die
Variable INTERACTIVE, werden
nur Ports gebaut, die Interaktion vom
Nutzer erwarten). Dies erspart den Rechnern, welche
kontinuierlich Ports bauen, eine Menge Zeit (siehe
unten).Zudem ist es empfohlen, falls sinnvolle Vorgaben fr
interaktive Optionen gesetzt sind, die
PACKAGE_BUILDING-Variable zu prfen
und das interaktive Skript abzuschalten. Dies macht es uns
mglich, Pakete fr CDROMs und FTP-Server zu
bauen.Die Konfiguration des MakefileDas Konfigurieren des Makefile ist
sehr einfach und wir schlagen vor, dass Sie zunchst
einen Blick auf vorhandene Beispiele werfen. Zustzlich
gibt es ein
Beispiel eines Makefile
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.Bedenken Sie bitte die folgenden Probleme in der hier
vorgegebenen Abfolge der Unterabschnitte dieses Kapitels, wenn
Sie Ihr neues Makefile erstellen:Der originale QuelltextLiegt der Quelltext in DISTDIR als eine
standardisierte und mit gzip gepackte Datei in der Art
foozolix-1.2.tar.gz? Falls ja,
knnen Sie zum nchsten Schritt bergehen.
Falls nicht, sollten Sie versuchen, die Variablen
DISTVERSION, DISTNAME,
EXTRACT_CMD,
EXTRACT_BEFORE_ARGS,
EXTRACT_AFTER_ARGS,
EXTRACT_SUFX, oder
DISTFILES zu ndern. Das hngt
davon ab, wie fremdartig das Distributionsfile Ihres Ports ist
(der hufigste Fall ist
EXTRACT_SUFX=.tar.Z, wenn der Tarball durch
ein normales compress und nicht durch
gzip gepackt wurde).Im schlimmsten Fall knnen Sie einfach Ihre eigene
Vorgabe mittels do-extract erzeugen
und die Standardvorgabe berschreiben; aber dies sollte
in den wenigsten Fllen, wenn berhaupt, notwendig
sein.BezeichnungenDer erste Teil des Makefile
beschreibt die Versionsnummer des Ports und fhrt ihn in
der richtigen Kategorie auf.PORTNAME und
PORTVERSIONSetzen Sie bitte die Variable
PORTNAME auf den Basisnamen Ihres Ports
und die Variable PORTVERSION auf dessen
Versionsnummer.PORTREVISION und
PORTEPOCHPORTREVISIONDie PORTREVISION-Variable ist ein
streng monoton wachsender Wert, welcher auf 0
zurckgesetzt wird, nachdem
PORTVERSION erhht wurde (d.h.
jedes Mal, wenn ein offizielles Release erfolgt). Sie wird
an den Namen des Pakets angehngt, wenn sie ungleich
0 ist. nderungen an PORTREVISION
werden von automatisierten Werkzeugen (z.B.
&man.pkg.version.1;) genutzt, um anzuzeigen, dass ein
neues Paket verfgbar ist.PORTREVISION sollte jedes Mal
erhht werden, wenn eine nderung am Port
erfolgt, die betrchtliche Auswirkungen auf den
Inhalt oder Struktur des aus dem Port erzeugten Pakets
zur Folge hat.Beispiele dafr, wann
PORTREVISION erhht werden
sollte:Hinzufgen von Patches, welche
Sicherheitslcken schlieen, Fehler
beseitigen oder neue Funktionalitt zum Port
hinzufgen.nderungen am Makefile
des Ports, welche compile-time-Optionen
hinzufgen oder entfernen.nderungen bezglich Packliste oder am
Verhalten whrend der Installation des Pakets
(d.h. nderungen an einem Skript, welches
Ausgangsdaten fr das Paket erzeugt, wie z.B.
SSH-Hostschlssel).Versionssprung einer Shared-Library, welche eine
Abhngigkeit dieses Ports ist (In diesem Fall
wrde ein Anwender bei der Installation des alten
Pakets scheitern, falls er eine neue Version der
Abhngigkeit bereits installiert hat, weil nach
der alten Bibliothek libfoo.x anstatt nach
libfoo.(x+1)) gesucht wird).Schleichende nderungen am Distfile, welche
bedeutende funktionale nderungen verursachen,
d.h. nderungen des Distfile erfordern eine
Korrektur an distinfo, ohne dass
damit zusammenhngend die
PORTVERSION verndert wird,
obwohl ein diff -ru zwischen der
alten und der neuen Version bedeutende
Vernderungen am Code nachweist.Beispiele fr nderungen, welche keine
Erhhung von PORTREVISION
erfordern:Stilistische nderungen am Grundgerst
des Ports ohne funktionale nderungen am daraus
resultierenden Paket.nderungen an der Variable
MASTER_SITES oder andere
funktionale nderungen, welche das resultierende
Paket nicht verndern.Marginale Patches am Distfile wie die Korrektur
von Tippfehlern, welche nicht wichtig genug sind, um
dem Benutzer die Brde eines Upgrades
aufzuerlegen.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
PORTREVISION den Inhalt des Pakets
wiederspiegelt, ist es nicht notwendig
PORTREVISION zu erhhen, wenn
das Paket vorher nicht erstellt werden konnte.Als Faustregel gilt: Stellen Sie sich die Frage, ob
die durchgefhrte nderung am Port jedem hilft
(entweder aufgrund einer Verbesserung, Beseitigung eines
Fehlers, oder der Annahme, dass das neue Paket
berhaupt erst funktioniert) und wgen Sie es
gegen den Umstand ab, dass jedermann, der seine
Ports-Sammlung regelmssig auf dem neuesten Stand
hlt, zu einer Aktualisierung gezwungen wird.
Falls Sie die Frage positiv beantworten sollten,
erhhen Sie die Variable
PORTREVISION.PORTEPOCHVon Zeit zu Zeit geschieht es, dass irgendjemand
(Drittanbieter von Software oder FreeBSD Ports Committer)
etwas Dummes tut und eine Version einer Software
verffentlicht, deren Versionsnummer niedriger ist
als die der vorherigen. Ein Beispiel hierfr ist
ein Port, der von foo-20000801 auf foo-1.0 gendert
wird (der Erstere wird flschlicherweise als neue
Version behandelt, weil 2000801 ein numerisch
grerer Wert ist als 1).In Situationen wie diesen sollte die Variable
PORTEPOCH erhht werden. Wenn
PORTEPOCH grer als 0 ist,
wird sie an den Namen des Pakets angehngt, wie in
Abschnitt 0 oberhalb bereits beschrieben.
PORTEPOCH darf niemals verringert oder
auf 0 gesetzt werden, weil der Vergleich des Pakets mit
einem frheren Zeitpunkt scheitern wrde (d.h.
das Paket wrde niemals als veraltet erkannt werden):
Die neue Versionsnummer (1.0,1 im
obigen Beispiel) ist immer noch numerisch kleiner als die
vorherige Version (2000801), aber das Suffix
,1 wird von automatisierten Werkzeugen
gesondert behandelt und wird als grer
erkannt, als das implizit angenommene Suffix
,0 im frheren Paket.Das Entfernen oder Zurcksetzen von
PORTEPOCH fhrt zu unendlichem
rger. Wenn Sie die obigen Ausfhrungen nicht
vollstndig verstanden haben, lesen Sie es bitte
unbedingt nochmals bis Sie es vollstndig
verinnerlicht haben, oder fragen Sie vor jeder
nderung auf den Mailinglisten nach!Es wird erwartet, dass PORTEPOCH
fr die weitaus berwiegende Zahl der Ports
nicht verwendet wird und der verantwortungsvolle und
vorausschauende Umgang mit PORTVERSION
macht es meist berflssig, falls ein
spteres Release die Versionsstruktur ndern
sollte. Vorsicht ist geboten, wenn ein Release einer
Drittanbieter-Software ohne eine offizielle Versionsnummer
verffentlicht wird, wie z.B. bei
Snapshot-Versionen. Man ist versucht,
das Release mit dem jeweiligen Datum zu bezeichnen,
was unweigerlich zu den oben beschriebenen Problemen
fhrt, wenn das nchste
offizielle Release erscheint.Wenn z.B. ein Snapshot zum Datum 20000917
verffentlicht wird und die vorherige Version der
Software war 1.2, dann sollte der Snapshot die
PORTVERSION 1.2.20000917 oder
hnlich erhalten und nicht 20000917, damit das
nachfolgende Release, angenommen 1.3, immer noch einen
greren numerischen Wert aufweist.Beispiel fr den Gebrauch von
PORTREVISION und
PORTEPOCHDer gtkmumble-Port, Version
0.10, befindet sich in der
Ports-Sammlung:PORTNAME= gtkmumble
PORTVERSION= 0.10PKGNAME wird zu
gtkmumble-0.10.Ein Sicherheitsloch wurde entdeckt, das einen lokalen
Patch von FreeBSD erforderlich macht.
PORTREVISION wird entsprechend
erhht.PORTNAME= gtkmumble
PORTVERSION= 0.10
PORTREVISION= 1PKGNAME wird zu
gtkmumble-0.10_1Eine neue Version wird vom Software-Drittanbieter
verffentlicht, bezeichnet mit der Version
0.2 (es stellt sich heraus, dass der
Autor beabsichtigte, dass 0.10
eigentlich 0.1.0 bedeuten sollte,
nicht was kommt nach 0.9
– Hoppla, aber nun ist es zu spt).
Da die neue Unterversion 2 numerisch
kleiner ist als die vorherige Version
10, muss PORTEPOCH
erhht werden, um sicherzustellen, dass das neue
Paket auch als neuer erkannt wird. Da es
ein neues Release des Drittanbieters ist, wird
PORTREVISION auf 0 zurckgesetzt
(oder aus dem Makefile
entfernt).PORTNAME= gtkmumble
PORTVERSION= 0.2
PORTEPOCH= 1PKGNAME wird zu
gtkmumble-0.2,1Das nchste Release ist 0.3. Da
PORTEPOCH niemals verringert wird,
sind die Versionsvariablen nun wie folgt:PORTNAME= gtkmumble
PORTVERSION= 0.3
PORTEPOCH= 1PKGNAME wird zu
gtkmumble-0.3,1Falls PORTEPOCH mit diesem
Upgrade auf 0 zurckgesetzt
worden wre, dann wrde jemand, der das Paket
gtkmumble-0.10_1 installiert
htte, das Paket gtkmumble-0.3
nicht als neuer erkennen, da 3 immer
noch numerisch kleiner ist als 10.
Bedenken Sie, dass genau dies der springende Punkt an
PORTEPOCH ist.PKGNAMEPREFIX und
PKGNAMESUFFIXZwei optionale Variablen,
PKGNAMEPREFIX und
PKGNAMESUFFIX, werden verknpft mit
PORTNAME und
PORTVERSION, um
PKGNAME zu bilden als
${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}
. Stellen Sie bitte unbedingt sicher, dass diese
Variablen den Richtlinien
fr einen guten Paketnamen entsprechen.
Insbesondere drfen Sie
keinesfalls einen Bindestrich
(-) in PORTVERSION
verwenden. Falls das Paket den
language- oder
-compiled.specifics-Teil aufweist
(siehe unten) benutzen Sie PKGNAMEPREFIX
oder PKGNAMESUFFIX respektive. Machen Sie
diese Variablen nicht zum Bestandteil von
PORTNAME!LATEST_LINKDie Umgebungsvariable LATEST_LINK wird
whrend der Paketerstellung verwendet, um einen Kurznamen
festzulegen, der danach von pkg_add -r genutzt
werden kann. Dadurch wird es beispielsweise mglich, die
aktuelle Perl-Version durch einen einfachen Aufruf von
pkg_add -r perl zu installieren (ohne die
Angabe der korrekten Versionsnummer). Dieser Name muss eindeutig
sowie offensichtlich sein.In einigen Fllen knnen mehrere Versionen
einer Applikation gleichzeitig in der Ports-Sammlung sein.
Das index build- und das package build-System mssen
nun in der Lage sein, diese als unterschiedliche Ports zu
erkennen, obwohl diese Versionen alle die gleichen Variablen
PORTNAME,
PKGNAMEPREFIX und sogar
PKGNAMESUFFIX aufweisen. In solchen
Fllen sollte die optionale Variable
LATEST_LINK auf einen unterschiedlichen
Wert fr alle Ports gesetzt werden mit Ausnahme des
Haupt-Ports. Beispiele hierfr sind die
lang/gcc46 und
lang/gcc-Ports und die
www/apache*-Familie. Wenn Sie die
Umgebungsvariable NO_LATEST_LINK setzen, wird
kein Link erzeugt, was fr alle Versionen (aber nicht fr
die Hauptversion) ntzlich sein kann. Beachten
Sie bitte, dass die Frage der Auswahl der
wichtigsten Version
(am populrsten,
am besten Untersttzt,
zuletzt gepatcht usw.) ausserhalb der
Mglichkeiten dieses Handbuches liegt. Wir sagen Ihnen
nur, wie Sie die anderen Ports spezifizieren, nachdem Sie
den Haupt-Port erkoren haben.Namensregeln fr PaketeIm Folgenden finden Sie die Regeln fr die
Benennung Ihrer Pakete. Diese sollen gewhrleisten,
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!Der Paketname soll aussehen wie
language_region-name-compiled.specifics-version.numbers.Der Paketname ist definiert als
${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}
. Stellen Sie bitte sicher, dass die Variablen
Ihres Ports diesem Format entsprechen.FreeBSD bemht sich ausserordentlich, die
Landessprachen seiner Nutzer zu untersttzen.
Die language-Variable soll
eine Abkrzung mit 2 Buchstaben sein der Sprachen
gem ISO-639, falls der Port fr eine
bestimmte Sprache spezifisch ist.
Beispiele hierfr sind ja
fr Japanisch, ru fr
Russisch, vi fr Vietnamesisch,
zh fr Chinesisch,
ko fr Koreanisch und
de fr Deutsch.Sollte der Port spezifisch sein fr eine
gewisse Region innerhalb eines Sprachraumes, dann
fgen Sie bitte auch den Lndercode mit 2
Buchstaben hinzu. Beispiele sind
en_US fr nordamerikanisches
Englisch und fr_CH fr
schweizerisches Franzsisch.Der language-Teil muss
in der PKGNAMEPREFIX-Variable gesetzt
werden.Der erste Buchstabe des
name-Teils muss kleingeschrieben
werden (der Rest des Namens kann Grobuchstaben
enthalten. Daher seien Sie bitte umsichtig, wenn Sie den
Namen einer Software konvertieren, welche
Grossbuchstaben enthlt).
Es ist Tradition, Perl 5-Module durch
ein vorstehendes p5- und durch
Umwandlung des doppelten Doppelpunktes in Bindestriche
zu bezeichnen. So wird z.B. aus dem
Data::Dumper-Modul der
p5-Data-Dumper-Port.Vergewissern Sie sich, dass der Name des Ports und
seine Versionsnummer klar getrennt sind und in den
Variablen PORTNAME und
PORTVERSION stehen. Der einzige
Grund, um in PORTNAME einen
Versionsteil aufzunehmen ist der, dass die Software
wirklich so bezeichnet wird, wie z.B. die Ports
textproc/libxml2 oder
japanese/kinput2-freewnn.
Ansonsten sollte PORTNAME keine
versionsspezifischen Bestandteile aufweisen. Es ist
vollkommen normal, dass viele Ports den gleichen
PORTNAME aufweisen wie z.B. die
www/apache*-Ports. In diesem Falle
werden unterschiedliche Versionen (und unterschiedliche
Indexeintrge) unterschieden durch die Werte von
PKGNAMEPREFIX,
PKGNAMESUFFIX und
LATEST_LINK.Falls der Port mit verschiedenen, fest kodierten
Vorgaben (blicherweise Teil des
Verzeichnisnamens in einer Familie von Ports) gebaut
werden kann, dann soll der
-compiled.specifics-Teil die
einkompilierten Vorgaben anzeigen (der Bindestrich ist
optional). Beispiele hierfr sind
Papiergren und Font-Einheiten.Der
-compiled.specifics-Teil
muss in der Variablen PKGNAMESUFFIX
gesetzt werden.Die Versionszeichenfolge sollte einen Bindestrich
(-) am Schluss haben und eine von
Punkten getrennte Liste von Integer-Zahlen und
kleingeschriebenen Buchstaben sein.
Es ist nicht zulssig, einen weiteren Bindestrich
innerhalb des Versionsstrings zu verwenden! Die einzige
Ausnahme hiervon ist die Zeichenfolge
pl (bedeutet
patchlevel), welche
nur dann gebraucht werden darf,
wenn die Applikation ber keine
Haupt– oder Unterversionsnummern
verfgt. Wenn die Versionsbezeichnung der Software
Zeichenketten wie alpha,
beta, rc oder
pre enthlt, 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.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
0.0.yyyy.mm.dd
und nicht dd.mm.yyyy
oder gar dem nicht Y2K-kompatiblen Format
yy.mm.dd
vorliegen. Es ist wichtig, dass die
Versionsnummer mit 0.0. beginnt, da die
Versionsnummer im Falle einer Verffentlichung auf jeden
Fall kleiner als
yyyy sein
wird.Hier sind einige reale Beispiele, die aufzeigen,
wie man den Namen einer Applikation zu einem
vernnftigen Paketnamen umwandelt:SoftwarenamePKGNAMEPREFIXPORTNAMEPKGNAMESUFFIXPORTVERSIONGrundmule-2.2.2(leer)mule(leer)2.2.2Keine nderung erforderlichEmiClock-1.0.2(leer)emiclock(leer)1.0.2keine Grobuchstaben fr einzelne
Applikationenrdist-1.3alpha(leer)rdist(leer)1.3.aKeine Zeichenketten wie
alpha erlaubtes-0.9-beta1(leer)es(leer)0.9.b1keine Zeichenketten wie beta
erlaubtmailman-2.0rc3(leer)mailman(leer)2.0.r3keine Zeichenketten wie rc
erlaubtv3.3beta021.src(leer)tiff(leer)3.3Was sollte denn das eigentlich sein?tvtwm(leer)tvtwm(leer)pl11Versionsstring zwingend erforderlichpiewm(leer)piewm(leer)1.0Versionsstring zwingend erforderlichxvgr-2.10pl1(leer)xvgr(leer)2.10.1pl nur erlaubt, wenn keine
Versionsnummer vorhandengawk-2.15.6ja-gawk(leer)2.15.6Japanische Sprachversionpsutils-1.13(leer)psutils-letter1.13Papergre beim Paketbau fix
kodiertpkfonts(leer)pkfonts3001.0Paket fr 300 DPI SchriftartenFalls es in der Originalquelle berhaupt keinen
Anhaltspunkt fr irgendeine Versionsbezeichnung gibt
und es unwahrscheinlich ist, dass der Autor jemals eine neue
Version verffentlichen wird, dann setzen Sie bitte die
Version einfach auf 1.0 (wie im obigen
Beispiel piewm). Sie knnen auch den
Autor fragen oder eine Datumszeichenfolge in der Art
0.0.yyyy.mm.dd
als Version verwenden.KategorisierungCATEGORIESWenn ein Paket erzeugt wird, dann wird es unter
/usr/ports/packages/All abgelegt und
von einem oder mehreren Unterverzeichnissen werden auf
/usr/ports/packages Links erstellt.
Die Namen dieser Unterverzeichnisse werden durch die
Variable CATEGORIES festgelegt.
Dies geschieht, um dem Nutzer zu helfen, eine groe
Zahl von Paketen auf einer FTP-Webseite oder einer CD/DVD
zu durchsuchen.
Bitte werfen Sie einen Blick auf die Aktuelle Liste der
Kategorien und suchen Sie die beste Kategorie
fr Ihren Port aus.Diese Liste legt auch fest, an welcher Stelle in der
Ports-Sammlung der Port eingefgt 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 unten fr weitere
Informationen darber, wie man die richtige Kategorie
bestimmt.Aktuelle Liste der KategorienHier ist die aktuelle Liste der Kategorien. Die mit
einem Asterisk (*) bezeichneten sind
virtuelle Kategorien, also solche,
welche ber kein eigenes Unterverzeichnis in der
Ports-Sammlung verfgen. Sie werden nur als
Sekundrkategorien benutzt und sind nur fr
Suchzwecke eingerichtet worden.Fr nicht-virtuelle Kategorien finden Sie eine
einzeilige Beschreibung in der Variable
COMMENT im
Makefile des jeweiligen
Unterverzeichnisses.KategorieBeschreibungAnmerkungaccessibilityPorts fr behinderte Menschen.afterstep*Ports fr den AfterStep
Window Manager.arabicArabische Sprachuntersttzung.archiversArchivierungswerkzeuge.astroPorts fr Astronomie.audioSound-Untersttzung.benchmarksBenchmarking-Werkzeuge.biologySoftware fr Biologie.cadCAD-Werkzeuge.chineseChinesische Sprachuntersttzung.commsKommunikationsprogramme.Hauptschlich Software fr serielle
Schnittstellen.convertersZeichensatz-Konverter.databasesDatenbanken.deskutilsDinge, die vor der Erfindung des Computers
auf dem Schreibtisch waren.develEntwicklungs-Werkzeuge.Legen Sie keine Bibliotheken hier ab, nur weil
es Bibliotheken sind, es sei denn, sie gehren
wirklich nirgendwo anders hin.dnsDNS-bezogene Software.docs*Meta-Ports fr die
FreeBSD-Dokumentation.editorsallgemeine Editoren.Spezielle Editoren gehren in Ihre
jeweilige Kategorie, (z.B. gehrt ein
mathematischer Formeleditor in
math).elisp*Emacs-lisp-Ports.emulatorsEmulatoren fr andere Betriebssysteme.
Terminal-Emulatoren gehren
nicht hierher; X-basierende
gehren zu x11 und
text-basierende zu comms oder
misc, abhngig von deren
genauer Funktionalitt.financeFinanz-Software und hnliches.frenchFranzsische Sprachuntersttzung.
ftpFTP Client- und Server-Werkzeuge.Falls Ihr Port sowohl FTP als auch HTTP
untersttzt, stellen Sie ihn in
ftp mit der Zweitkategorie
www.gamesSpiele.geography*geografische Software.germanDeutsche Sprachuntersttzung.gnome*Ports fr GNOMEgnustep*Software fr GNUstep.graphicsgrafische Werkzeuge.hamradio*Software fr Amateurfunk.haskell*Software fr die
Haskell-Programmiersprache.hebrewHebrische Sprachuntersttzung.
hungarianUngarische Sprachuntersttzung.ipv6*IPv6-bezogene Software.ircInternet Relay Chat (IRC)-Werkzeuge.japaneseJapanische Sprachuntersttzung.javaSoftware fr die Java™-Programmiersprache.
Die java-Kategorie sollte
nicht die Einzige fr einen Port sein mit
Ausnahme der direkt nur mit der Programmiersprache
zusammenhngenden Applikationen. Porter sollten
java nicht als Hauptkategorie
eines Ports whlen.kde*Ports fr das K Desktop Environment
(KDE)-Projekt.kld*Kernelmodule.koreanKoreanische Sprachuntersttzung.langProgrammiersprachen.linux*Linux-Applikationen und -Werkzeuge.lisp*Software fr die Lisp-Programmiersprache.
mailMail-Software.mathNumerische Berechnungen und andere
mathematische Werkzeuge.mbone*MBone-Applikationen.miscVerschiedene Werkzeuge.Hauptschlich Werkzeuge, die nicht
anderswo hingehren. Versuchen Sie, falls
irgend mglich, eine bessere Kategorie
fr Ihren Port zu finden als
misc, weil Ports hier leicht
untergehen.multimediaMultimedia-Software.netVerschiedene Netzwerk-Software.net-imInstant Messaging-Software.net-mgmtNetzwerk-Management-Software.net-p2pPeer to peer-Netzwerkprogramme.newsUSENET News-Software.palmSoftware fr Palm™.
parallel*Applikationen fr paralleles Rechnen.
pear*Ports fr das Pear PHP-Framework.perl5*Ports, welche Perl
Version 5 bentigen.plan9*Verschiedene Programme von Plan9.
polishPolnische Sprachuntersttzung.ports-mgmtHilfsprogramme fr das Installieren und
Entwickeln von FreeBSD Ports und Paketen.portuguesePortugiesische Sprachuntersttzung.
printDrucker-Software.Desktop Verffentlichungs-Werkzeuge (DTP,
Betrachter etc.) gehren auch hierher.python*Software fr Python.
ruby*Software fr Ruby.
rubygems*Ports fr RubyGems-Pakete.
russianRussische Sprachuntersttzung.scheme*Software fr die
Scheme-Programmiersprache.scienceWissenschaftliche Programme, die in keine
andere Kategorie passen wie z.B.
astro,
biology und
math.securitySecurity-Werkzeuge.shellsShells.spanish*Spanische Sprachuntersttzung.sysutilsSystem-Werkzeuge.tcl*Ports, welche Tcl bentigen.textprocTextverarbeitungsprogramme.Dies beinhaltet nicht DTP-Werkzeuge, diese
gehren in print.
tk*Ports, welche Tk bentigen.ukrainianUkrainische Sprachuntersttzung.vietnameseVietnamesische Sprachuntersttzung.
windowmaker*Ports fr den WindowMaker Window-Manager.
wwwSoftware fr das World Wide Web (WWW).
HTML-Werkzeuge gehren auch hierher.
x11X-Window-System und dergleichen.Diese Kategorie ist nur fr Software,
welche direkt X untersttzt.
Fgen Sie keine normalen X-Applikationen hinzu.
Die meisten davon gehren in eine andere
x11-*-Kategorie (siehe unten).
Falls Ihr Port eine X-Applikation
ist, dann definieren Sie bitte
USE_XLIB (impliziert durch
USE_IMAKE) und fgen ihn der
entsprechenden Kategorie hinzu.x11-clocksX11-Uhren.x11-driversX11-Treiber.x11-fmX11-Dateimanager.x11-fontsX11-Schriftarten und Werkzeuge.x11-serversX11-Server.x11-themesX11-Themes.x11-toolkitsX11-Toolkits.x11-wmX11-Window-Manager.xfce*Ports in Zusammenhang mit Xfce.zope*Zope-Untersttzung.
Whlen der richtigen KategorieDa viele der Kategorien sich berlappen,
mssen Sie oft festlegen, welches die primre
Kategorie Ihres Ports ist. Hierzu gibt es einige Regeln,
welche diese Auswahl bestimmen. Hier ist die Liste der
Regeln mit abnehmender Wichtigkeit:Die erste (primre) Kategorie muss eine
physische (keine virtuelle, siehe oben) sein. Dies
ist notwendig damit Pakete erstellt werden knnen.
Die nachfolgenden Kategorien knnen wahllos
virtuelle oder physische Kategorien sein.Sprachspezifische Kategorien kommen immer zuerst.
Wenn Ihr Port z.B. Japanische X11-Schriftarten
installiert, dann muss Ihre
CATEGORIES-Zeile
japanese x11-fonts
enthalten.Spezifische Kategorien werden vor weniger
spezifischen Kategorien aufgelistet. Ein HTML-Editor
sollte z.B. als www editors
aufgefhrt werden und nicht umgekehrt.
Genauso sollten Sie keinen Port unter
net auffhren, wenn er zu
irc, mail,
news,
security oder
www passt, da
net in diesen Kategorien
bereits implizit eingeschlossen ist.x11 wird nur als sekundre
Kategorie benutzt, wenn die primre Kategorie eine
sprachspezifische ist. Keinesfalls sollten Sie
x11 in die Kategorie-Zeile einer
X-Applikation setzen.Emacs modes gehren
in die gleiche Kategorie wie die vom jeweiligen mode
untersttzte Applikation und nicht in
editors. Ein
Emacs mode z.B. fr das
Editieren von Quelltext einer bestimmten
Programmiersprache gehrt zur Kategorie
lang.Fr Ports, die vom Benutzer ladbare Kernelmodule
installieren, sollte die virtuelle Kategorie
kld in die
CATEGORIES-Zeile aufgenommen
werden.misc sollte nicht zusammen mit
irgendeiner anderen nicht-virtuellen Kategorie
auftreten. Falls Sie misc mit einer
anderen Kategorie in CATEGORIES haben
bedeutet dies, dass Sie gefahrlos
misc streichen und die andere
Kategorie alleine verwenden knnen!Falls Ihr Port wirklich in keine andere Kategorie
passt, verwenden Sie bitte
misc.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 knnen. Falls Sie ein
Committer sind, schicken Sie bitte eine Nachricht an
&a.ports;, damit die Frage im Vorhinein errtert werden
kann. Neue Ports werden zu hufig falsch kategorisiert
und werden sofort wieder verschoben. Das blht das
Master Source Repository unntig auf.Eine neue Kategorie vorschlagenDa die Ports-Sammlung ber viele Jahre gewachsen
ist, wurden viele neue Kategorien hinzugefgt. Neue
Kategorien knnen virtuell (ohne
eigenes Unterverzeichnis in der Ports-Sammlung) oder
physisch sein.
Der nachfolgende Text fhrt einige Punkte auf, welche
bei der Neueinfhrung einer physischen Kategorie
beachtet werden mssen, damit Sie dies bei einem
eventuellen Vorschlag Ihrerseits bercksichtigen
knnen.Unsere bestehende Maxime ist die Vermeidung der
Neuanlage von physischen Kategorien, solange nicht eine
groe Zahl von Ports zugeordnet werden knnen
oder falls ihr nicht Ports zugehren wrden,
welche eine logisch abgegrenzte Gruppe von limitiertem
ffentlichem Interesse zugehren wrden
(zum Beispiel neue Sprachkategorien) oder vorzugsweise
beides.Die Erklrung dafr ist, dass eine Neuanlage
einer physischen Kategorie einen erheblichen
Arbeitsaufwand sowohl fr die Committer als
auch diejenigen Nutzer bedeutet, welche die nderungen
der Ports-Sammlung nachvollziehen. Zustzlich
verursachen Vorschlge fr neue Kategorien oftmals
Kontroversen (natrlich deswegen, weil es keinen klaren
Konsens darber gibt, welche Kategorie als zu
gro betrachtet werden muss noch ob sich
bestimmte Kategorien zur einfachen Suche eignen (und wie
viele Kategorien berhaupt ideal wren) und so
weiter).Hier ist das Prozedere:Schlagen Sie die neue Kategorie auf &a.ports; vor.
Sie sollten eine detaillierte Begrndung fr
die neue Kategorie beifgen einschlielich
einer Erklrung, warum Sie meinen, die
existierenden Kategorien seien nicht ausreichend.
Zeigen Sie auerdem eine Liste der zu
verschiebenden Ports (falls neue Ports in
GNATS auf ihren commit
warten, die in diese Kategorie passen wrden.
Listen Sie diese bitte auch mit auf). Sind Sie der
Maintainer oder Einreicher dieser Ports, erwhnen
Sie es bitte. Es verleiht Ihrem Vorschlag mehr
Gewicht.Nehmen Sie an der Diskussion teil.Falls es Untersttzung fr Ihren Vorschlag
geben sollte, reichen Sie bitte einen PR ein, welcher
die Begrndung und die Liste der betroffenen Ports
enthlt, die verschoben werden mssen.
Idealerweise sollte der PR Patches fr Folgendes
enthalten:Makefiles fr die
neuen Ports nach dem RepocopyMakefile fr die neue
KategorieMakefile fr die alten
Kategorien der betroffenen PortsMakefiles fr Ports,
welche von den alten Ports abhngenFr zustzliches Ansehen sorgen Sie,
wenn Sie die anderen Dateien, die gendert
werden mssen, beifgen wie in der
Direktive des Committer's Guide beschrieben.Da es die Ports-Infrastruktur beeinflusst und nicht
nur die Durchfhrung von Repocopies und
mglicherweise sogar Regressionstests auf dem Build
Cluster durchgefhrt werden mssen, sollte der
PR dem Ports Management Team &a.portmgr; zugeordnet
werden.Sobald der PR besttigt wurde muss ein
Committer den Rest der Prozedur durchfhren, welche
im
Committers Guide beschrieben ist.Das Vorschlagen einer neuen virtuellen Kategorie ist
hnlich, aber wesentlich weniger aufwendig, weil
keine Ports verschoben werden mssen. In diesem Falle
mssen nur die Patches an den PR beigefgt werden,
welche die neue Kategorie zur Variable
CATEGORIES der betroffenen Ports
hinzufgen.Vorschlagen einer Neuorganisation aller
KategorienVon Zeit zu Zeit schlgt jemand eine komplette
Neuorganisation aller Ports, entweder mit einer zweistufigen
Struktur oder irgendeiner Art von
Schlsselwrtern, vor. Bis heute wurde keiner
dieser Vorschlge umgesetzt, weil sie zwar einfach
zu machen sind, aber der Aufwand zur Umsetzung und
Reorganisation der kompletten Ports-Sammlung schlichtweg
mrderisch wre. Bitte lesen Sie die Geschichte
dieser Vorschlge in den Archiven der Mailinglisten
nach, bevor Sie diese Ideen nochmals unterbreiten. Zudem
sollten Sie gewappnet sein, dass man Sie auffordert, einen
arbeitsfhigen Prototyp vorzulegen.Die DistributionsdateienDer zweite Teil des Makefile
beschreibt die Dateien, welche heruntergeladen werden
mssen, um den Port zu bauen und wo diese Dateien zu
finden sind.DISTVERSION/DISTNAMEDISTNAME ist der Name der Applikation
wie er von den Autoren vergeben wurde.
DISTNAME hat als Vorgabe
${PORTNAME}-${PORTVERSION} also
berschreiben Sie diese Vorgabe nur, wenn es notwendig
ist. DISTNAME wird nur an zwei Stellen
genutzt. Erstens: (DISTFILES) hat als
Vorgabe
${DISTNAME}${EXTRACT_SUFX}.
Zweitens: Die Distributionsdatei soll in einem
Unterverzeichnis namens WRKSRC
extrahiert werden, dessen Vorgabe
work/${DISTNAME}
ist.Manche Drittanbieter-Namen, welche nicht in das Schema
${PORTNAME}-${PORTVERSION} passen,
knnen durch Setzen von DISTVERSION
automatisch behandelt werden. PORTVERSION
und DISTNAME werden automatisch
abgeleitet, knnen aber natrlich manuell
berschrieben werden. Die folgende Tabelle fhrt
einige Beispiele auf:DISTVERSIONPORTVERSION0.7.1d0.7.1.d10Alpha310.a33Beta7-pre23.b7.p28:f_178f.17PKGNAMEPREFIX und
PKGNAMESUFFIX beeinflussen
DISTNAME nicht. Beachten Sie bitte
auch, dass Sie DISTNAME
unverndert lassen sollten, falls
WRKSRC denselben Wert hat wie
work/${PORTNAME}-${PORTVERSION}
und gleichzeitig dass Archiv des originalen Quelltextes
anders benannt ist als
${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}.
Es ist einfacher
DISTFILES zu definieren, als
DISTNAME und WRKSRC
(und mglicherweise EXTRACT_SUFX)
zu setzen.MASTER_SITESDokumentieren Sie das Verzeichnis der FTP/HTTP-URL,
welche auf den originalen Tarball zeigt, in der Variable
MASTER_SITES. Bitte vergessen Sie
niemals den Schrgstrich (/)
am Ende!Die make-Makros werden versuchen,
diese Festlegung fr die Aufbereitung der
Distributionsdateien mittels FETCH zu
benutzen, falls sie diese nicht schon auf dem System
finden.Es wird empfohlen, mehrere Webseiten in dieser Liste
aufzufhren, vorzugsweise auf verschiedenen
Kontinenten. Dies ist ein Schutz gegen Probleme bei
greren Ausfllen im Internet.
Wir planen sogar Untersttzung einzubauen,
die automatisch einen Server in der Nhe zum
Herunterladen bestimmt. Die Verfgbarkeit von
vielen Webseiten wird dieses Vorhaben betrchtlich
erleichtern.Falls der originale Tarball Teil eines populren
Archivs ist, wie SourceForge, GNU oder Perl CPAN, knnen
Sie mglicherweise auf diese Seiten in einer einfachen
und kompakten Form mittels
MASTER_SITE_*
(d.h., MASTER_SITE_SOURCEFORGE,,
MASTER_SITE_GNU und
MASTER_SITE_PERL_CPAN) referenzieren.
Setzen Sie einfach MASTER_SITES auf eine
dieser Variablen und MASTER_SITE_SUBDIR
auf den Pfad innerhalb des Archivs. Hier ist ein
Beispiel:MASTER_SITES= ${MASTER_SITE_GNU}
MASTER_SITE_SUBDIR= makeOder verwenden Sie ein kondensiertes Format:MASTER_SITES= GNU/makeDiese Variablen werden in
/usr/ports/Mk/bsd.sites.mk definiert.
Es werden stndig neue Eintrge hinzugefgt,
daher stellen Sie bitte unbedingt sicher, dass Sie die
neueste Version verwenden, bevor Sie einen Port
einschicken.Fr beliebte Seiten existieren sogenannte
magic-Makros, die eine bestimmte
Verzeichnisstruktur erstellen. Um eines dieser Makros zu
verwenden, geben Sie dessen Abkrzung an und Ihr System
wird versuchen, das korrekte Unterverzeichnis automatisch
zu bestimmen.MASTER_SITES= SFIst das Ergebnis nicht korrekt, knnen Sie diesen
Wert auch berschreiben.MASTER_SITES= SF/stardict/WyabdcRealPeopleTTS/${PORTVERSION}
EXTRACT_SUFXFalls Sie eine Distributionsdatei haben, die ein
eigentmliches Suffix nutzt, um die Art der
Kompression anzuzeigen, dann setzen Sie
EXTRACT_SUFX.Ist die Distributionsdatei zum Beispiel im Stil von
foo.tgz anstatt des normalen
foo.tar.gz benannt, wrden Sie
schreiben:DISTNAME= foo
EXTRACT_SUFX= .tgzFalls erforderlich, setzen die Variablen
USE_BZIP2 und USE_ZIP
automatisch EXTRACT_SUFX auf
.tar.bz2 oder .zip.
Falls keine der beiden gesetzt ist, dann verwendet
EXTRACT_SUFX die Vorgabe
.tar.gz.Sie mssen niemals beide Variablen
EXTRACT_SUFX und
DISTFILES setzen.DISTFILESManchmal haben die zu ladenden Dateien keinerlei
hnlichkeit mit dem Namen des Ports. Es knnte
z.B. source.tar.gz oder hnlich
heien. In anderen Fllen knnte der
Quelltext in mehreren Archiven sein und alle mssen
heruntergeladen werden.Falls dies der Fall ist, setzen Sie
DISTFILES als eine durch Leerzeichen
getrennte Liste aller Dateien, die geladen werden
mssen.DISTFILES= source1.tar.gz source2.tar.gzWenn nicht ausdrcklich gesetzt, verwendet
DISTFILES als Vorgabe
${DISTNAME}${EXTRACT_SUFX}.EXTRACT_ONLYFalls nur einige der DISTFILES
extrahiert werden mssen (z.B. eine Datei ist der
Quelltext und eine andere ist ein unkomprimiertes Dokument),
dann listen Sie die zu extrahierenden Dateien in
EXTRACT_ONLY auf.DISTFILES= source.tar.gz manual.html
EXTRACT_ONLY= source.tar.gzFalls keine der
DISTFILES unkomprimiert sein sollte,
dann setzen Sie EXTRACT_ONLY auf einen
leeren String.EXTRACT_ONLY=PATCHFILESFalls Ihr Port zustzliche Patches bentigt,
welche per FTP oder HTTP verfgbar sind, dann setzen
Sie PATCHFILES auf den Namen der Dateien
und PATCH_SITES auf die URL des
Verzeichnisses, das diese Patches enthlt (das Format
ist das gleiche wie MASTER_SITES).Falls ein Patch wegen einiger zustzlicher
Pfadnamen nicht relativ zum Anfang des Quelltextbaumes
(d.h., WRKSRC) liegt, dann setzen Sie
bitte PATCH_DIST_STRIP entsprechend.
Wenn z.B. alle Pfadnamen in diesem Patch ein
zustzliches foozolix-1.0/ vor ihren
Dateinamen aufweisen, dann setzen Sie bitte
PATCH_DIST_STRIP=-p1.Kmmern Sie sich nicht darum, ob die Patches
komprimiert sind. Sie werden automatisch dekomprimiert,
wenn die Dateinamen auf .gz oder
.Z enden.Falls der Patch zusammen mit anderen Dateien in einem
gezippten Tarball verteilt wird (z.B. mit Dokumentation),
dann knnen Sie nicht PATCHFILES
verwenden. In diesem Fall fgen Sie den Namen und den
Ort dieses Tarballs zu DISTFILES und
MASTER_SITES. Benutzen Sie dann die
EXTRA_PATCHES-Variable, um auf diese
Dateien zu zeigen und bsd.port.mk
wird automatisch diese Dateien nutzen. Kopieren Sie
niemals Patch-Dateien in das
PATCHDIR-Verzeichnis, weil es
mglicherweise nicht beschreibbar ist.Der Tarball wird zusammen mit dem anderen Quelltext
extrahiert werden. Eine ausdrckliche 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 pre-clean zu
entfernen.Verschiedene Distributionsdateien oder Patches von
verschiedenen Seiten und Verzeichnissen
(MASTER_SITES:n)(Betrachten Sie es als in irgendeiner Form
fortgeschrittenes Thema.
Neulinge sollten mglicherweise diesen Abschnitt
beim ersten Lesen berspringen).Dieser Abschnitt stellt Informationen ber
die Mechanismen zum Herunterladen von Dateien zur
Verfgung und behandelt die Variablen
MASTER_SITES:n und
MASTER_SITES_NN.
Wir beziehen uns im weiteren Text auf diese Variablen
als MASTER_SITES:n.Etwas Hintergrundinformation zu Beginn: OpenBSD
verfgt ber eine sehr elegante Option
innerhalb der Variablen DISTFILES und
PATCHFILES. Sowohl Dateien als auch
Patches knnen mit angehngten
:n-Bezeichnern versehen werden wobei
n in beiden Fllen
[0-9] sein kann und eine
Gruppenzugehrigkeit anzeigt. Ein Beispiel
hierfr ist:DISTFILES= alpha:0 beta:1In OpenBSD wird die Datei alpha
mit der Variable MASTER_SITES0
verknpft anstatt dem in FreeBSD gebruchlichen
MASTER_SITES und
beta mit
MASTER_SITES1.Das ist eine sehr interessante Mglichkeit,
die endlose Suche nach der richtigen Download-Seite zu
verkrzen.Stellen Sie sich zwei Dateien in
DISTFILES und 20 Webseiten in der
Variable MASTER_SITES vor. Alle Seiten
sind erschreckend langsam, beta
findet sich auf allen Seiten in
MASTER_SITES und
alpha kann nur auf der zwanzigsten
Seite gefunden werden. Wre es nicht reine
Verschwendung, wenn der Maintainer alle Seiten zuvor
berprfen msste? Kein guter
Start fr das wundervolle Wochenende!bertragen Sie diesen Umstand auf noch mehr
DISTFILES und mehr
MASTER_SITES. Ganz sicher wrde
unser distfiles survey master die
Erleichterung sehr zu schtzen wissen, die eine
solche Verringerung der Netzwerkbelastung bringen
wrde.In den nchsten Abschnitten sehen Sie die
Implementierung dieser Idee durch FreeBSD. Dabei wurde das
Konzept von OpenBSD ein wenig verbessert.Prinzipielle InformationDieser 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
MASTER_SITES:n. Das ist fr die
meisten Szenarien ausreichend. Falls Sie weitere
Informationen bentigen, sollten Sie den
nchsten Abschnitt lesen.Einige Programme bestehen aus mehreren Dateien,
welche von verschiedenen Webseiten heruntergeladen werden
mssen. Zum Beispiel besteht
Ghostscript aus dem Kern des
Programms und einer groen Zahl von Treiberdateien,
die vom Drucker des Benutzers abhngen. Einige dieser
Treiberdateien werden mit der Kernapplikation mitgeliefert
aber viele mssen von verschiedenen Webseiten
heruntergeladen werden.Um das zu untersttzen, muss jeder Eintrag in
DISTFILES mit einem Komma und
einem tag name abgeschlossen werden.
Jeder in MASTER_SITES aufgefhrte
Webseite folgt ein Komma und eine Marke (tag), die
anzeigt, welche Datei von dieser Webseite heruntergeladen
werden kann.Stellen Sie sich bitte eine Applikation vor, deren
Quelltext in zwei Teile aufgeteilt ist,
source1.tar.gz
und source2.tar.gz, welche von zwei
verschiedenen Webseiten heruntergeladen werden
mssen. Das Makefile des Port
wrde Zeilen enthalten wie in
.Vereinfachtes Beispiel fr den Gebrauch von
MASTER_SITES:n mit einer Datei pro
WebseiteMASTER_SITES= ftp://ftp.example1.com/:source1 \
ftp://ftp.example2.com/:source2
DISTFILES= source1.tar.gz:source1 \
source2.tar.gz:source2Verschiedene Dateien knnen die gleiche Marke
aufweisen. Ausgehend vom vorherigen Beispiel nehmen wir
an, dass es noch eine dritte Datei gibt
(source3.tar.gz), welche von
ftp.example2.com heruntergeladen werden
soll. Das Makefile wrde dann
aussehen wie .Vereinfachtes Beispiel fr den Gebrauch von
MASTER_SITES:n mit mehr als einer
Datei pro WebseiteMASTER_SITES= ftp://ftp.example1.com/:source1 \
ftp://ftp.example2.com/:source2
DISTFILES= source1.tar.gz:source1 \
source2.tar.gz:source2 \
source3.tar.gz:source2Ausfhrliche InformationIn Ordnung, das vorherige Beispiel reicht nicht
fr Ihre Bedrfnisse? In diesem Abschnitt
werden wir im Detail erklren, wie der fein
granulierte Mechanismus zum Herunterladen
(MASTER_SITES:n) funktioniert
und wie Sie Ihre Ports modifizieren, um ihn zu
nutzen.Elemente knnen nachstehend bezeichnet werden
mit :n
wobei n in diesem Falle
[^:,]+ ist. Das heit
n knnte theoretisch
jede alphanumerische Zeichenkette sein, aber wir
beschrnken sie auf
[a-zA-Z_][0-9a-zA-Z_]+ fr
diesen Moment.Zudem ist die Zeichenkette case sensitive; d.h.
n unterscheidet sich von
N.Allerdings drfen die folgenden Wrter
nicht gebraucht werden, da sie spezielle Bedeutungen
haben: default,
all und ALL
(diese Wrter werden intern genutzt in Punkt
).
Ausserdem ist DEFAULT ein
reserviertes Wort (beachten Sie ).Elemente mit angehngtem
:n gehren zur Gruppe
n, :m
gehrt zur Gruppe m
und so weiter.Elemente ohne Anhngsel sind gruppenlos,
d.h. sie gehren alle zu der speziellen Gruppe
DEFAULT. Falls sie an irgendeinem
Element DEFAULT hngen, ist
dies berflssig, es sei denn Sie wollen,
dass ein Element sowohl zu DEFAULT
als auch anderen Gruppen gleichzeitig gehrt
(beachten Sie ).Die folgenden Beispiele sind gleichwertig, aber
das erste Beispiel ist vorzuziehen:MASTER_SITES= alpha
MASTER_SITES= alpha:DEFAULTGruppen sind nicht ausschliessend, d.h. ein
Element kann mehreren Gruppen gleichzeitig
angehren und eine Gruppe wiederum kann entweder
mehrere Elemente oder berhaupt keine aufweisen.
Wiederholte Elemente sind schlicht nur wiederholte
Elemente.Wenn Sie wollen, dass ein Element gleichzeitig zu
mehreren Gruppen gehrt, dann knnen Sie
diese durch ein Komma (,)
trennen.Anstatt jedes Mal ein anderes Anhngsel zu
verwenden und Wiederholungen aufzufhren,
knnen Sie mehrere Gruppen auf einmal in einem
einzigen Anhngsel bestimmen. Zum Beispiel
markiert :m,n,o ein Element,
welches zu den Gruppen m,
n und o
gehrt.Alle folgenden Beispiele sind gleichwertig,
aber das erste Beispiel ist vorzuziehen:MASTER_SITES= alpha alpha:SOME_SITE
MASTER_SITES= alpha:DEFAULT alpha:SOME_SITE
MASTER_SITES= alpha:SOME_SITE,DEFAULT
MASTER_SITES= alpha:DEFAULT,SOME_SITEAlle Webseiten in einer Gruppe werden
gem MASTER_SORT_AWK
sortiert. Alle Gruppen innerhalb von
MASTER_SITES und
PATCH_SITES werden genauso
sortiert.Gruppensemantik kann benutzt werden in den
folgenden Variablen: MASTER_SITES,
PATCH_SITES,
MASTER_SITE_SUBDIR,
PATCH_SITE_SUBDIR,
DISTFILES und
PATCHFILES entsprechend der
folgenden Syntax:Elemente mit MASTER_SITES,
PATCH_SITES,
MASTER_SITE_SUBDIR und
PATCH_SITE_SUBDIR mssen
mit einem Schrgstrich beendet werden (
/). Falls Elemente zu
irgendwelchen Gruppen gehren, muss
:n
direkt nach dem Trenner /
stehen. Der
MASTER_SITES:n-Mechanismus
verlsst sich auf das Vorhandensein des
Trennzeichens /, um verwirrende
Elemente zu vermeiden in denen
:n ein zulssiger
Bestandteil des Elementes ist und das Auftreten
von :n die Gruppe
n anzeigt. Aus
Kompatibilittsgrnden (da der
/-Trenner sowohl in
MASTER_SITE_SUBDIR als auch
PATCH_SITE_SUBDIR-Elementen
nicht erforderlich ist) wird, falls das auf das
Anhngsel folgende nchste Zeichen kein
/ ist, auch
:n als gltiger Teil des
Elementes behandelt anstatt als Gruppenzusatz,
selbst wenn ein Element ein angehngtes
:n aufweist. Beachten Sie
sowohl
als auch .Ausfhrliches Beispiel von
MASTER_SITES:n in
MASTER_SITE_SUBDIRMASTER_SITE_SUBDIR= old:n new/:NEWVerzeichnisse innerhalb der Gruppe
DEFAULT ->
old:nVerzeichnisse innerhalb der Gruppe
NEW -> newAusfhrliches Beispiel von
MASTER_SITES:n mit
Komma-Operator, mehreren Dateien, mehreren
Webseiten und mehreren
UnterverzeichnissenMASTER_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 \
directoryDas vorstehende Beispiel fhrt zu
einem fein granulierten Herunterladen.
Die Webseiten werden in der exakten Reihenfolge
ihrer Nutzung aufgelistet.file1 wird
heruntergeladen vonMASTER_SITE_OVERRIDEhttp://site1/directory-trial:1/http://site1/directory-one/http://site1/directory/http://site2/http://site7/MASTER_SITE_BACKUPfile2 wird genauso
heruntergeladen wie
file1, da sie zur
gleichen Gruppe gehrenMASTER_SITE_OVERRIDEhttp://site1/directory-trial:1/http://site1/directory-one/http://site1/directory/http://site2/http://site7/MASTER_SITE_BACKUPfile3 wird
heruntergeladen vonMASTER_SITE_OVERRIDEhttp://site3/MASTER_SITE_BACKUPfile4 wird
heruntergeladen vonMASTER_SITE_OVERRIDEhttp://site4/http://site5/http://site6/http://site7/http://site8/directory-one/MASTER_SITE_BACKUPfile5 wird
heruntergeladen vonMASTER_SITE_OVERRIDEMASTER_SITE_BACKUPfile6 wird
heruntergeladen vonMASTER_SITE_OVERRIDEhttp://site8/MASTER_SITE_BACKUPWie gruppiere ich eine der speziellen Variablen
aus bsd.sites.mk, d.h.
MASTER_SITE_SOURCEFORGE?Lesen Sie .Ausfhrliches Beispiel von
MASTER_SITES:n mit
MASTER_SITE_SOURCEFORGEMASTER_SITES= http://site1/ ${MASTER_SITE_SOURCEFORGE:S/$/:sourceforge,TEST/}
DISTFILES= something.tar.gz:sourceforgesomething.tar.gz wird von
allen Webseiten innerhalb von
MASTER_SITE_SOURCEFORGE
heruntergeladen.Wie nutze ich dies mit
PATCH*-Variablen.In allen Beispielen wurden
MASTER*-Variablen genutzt,
aber sie funktionieren exakt genauso mit
PATCH*-Variablen, wie Sie an
.
sehen knnen.Vereinfachte Nutzung von
MASTER_SITES:n mit
PATCH_SITES.PATCH_SITES= http://site1/ http://site2/:test
PATCHFILES= patch1:testWas ndert sich fr die Ports?
Was ndert sich nicht?Alle bestehenden Ports bleiben gleich. Der Code
fr MASTER_SITES:n wird nur
aktiviert, falls es Elemente mit angehngtem
:n
entsprechend den zuvor erwhnten Syntax-Regeln
wie in
gezeigt gibt.Das Target des Port bleibt gleich:
checksum,
makesum,
patch,
configure,
build etc.
Mit der offensichtlichen Ausnahme von
do-fetch,
fetch-list,
master-sites
und patch-sites.do-fetch: nutzt die
neue Gruppierung DISTFILES und
PATCHFILES mit ihren darauf
zutreffenden Gruppenelementen in
MASTER_SITES und
PATCH_SITES welche zutreffende
Gruppenelemente sowohl in
MASTER_SITE_SUBDIR als auch
PATCH_SITE_SUBDIR aufweisen.
Sehen Sie hierzu .fetch-list: arbeitet
wie das alte fetch-list
mit der Ausnahme, dass es nur wie
do-fetch
gruppiert.master-sites
und patch-sites:
(inkompatibel zu lteren Versionen) geben
nur die Elemente der Gruppe
DEFAULT zurck.
Beziehungsweise sie fhren genau genommen
die Targets von
master-sites-default und
patch-sites-default
aus.Weiterhin ist der Gebrauch des Target entweder
von master-sites-all oder
patch-sites-all der
direkten berprfung von
MASTER_SITES oder
PATCH_SITES vorzuziehen.
Zudem ist nicht garantiert, dass das direkte
berprfen in zuknftigen Versionen
funktionieren wird. Sehen Sie
fr weitere Informationen zu diesen neuen
Port-Targets.Neue Port-TargetsEs gibt
master-sites-n
und
patch-sites-n-Targets,
welche die Elemente der jeweiligen Gruppe
n innerhalb von
MASTER_SITES und
PATCH_SITES auflisten.
Beispielweise werden sowohl
master-sites-DEFAULT als
auch patch-sites-DEFAULT
die Elemente der Gruppe
DEFAULT,
master-sites-test und
patch-sites-test der
Gruppe test usw.
zurckgeben.Es gibt das neue Target
master-sites-all und
patch-sites-all,
welche die Arbeit der alten Targets
master-sites und
patch-sites
bernehmen. Sie geben die Elemente aller
Gruppen zurck,als wrden sie zur
gleichen Gruppe gehren - mit dem Vorbehalt,
dass sie so viele
MASTER_SITE_BACKUP und
MASTER_SITE_OVERRIDE auflisten
wie Gruppen mittels
DISTFILES oder
PATCHFILES definiert sind.
Das gleiche gilt entsprechend fr
master-sites-all und
patch-sites-all.DIST_SUBDIRVerhindern Sie, dass Ihr Port das Verzeichnis
/usr/ports/distfiles in Unordnung
bringt. Falls Ihr Port eine ganze Reihe von Dateien
herunterladen muss oder eine Datei enthlt,
die einen Namen hat, der mglicherweise mit
anderen Ports in Konflikt stehen knnte
(d.h.Makefile), dann setzen Sie die
Variable DIST_SUBDIR auf den Namen des
Ports (${PORTNAME} oder
${PKGNAMEPREFIX}${PORTNAME}
sollte hervorragend funktionieren). Dies wird
DISTDIR von der Vorgabe
/usr/ports/distfiles auf
/usr/ports/distfiles/DIST_SUBDIR
ndern und stellt tatschlich alle
fr Ihren Port bentigten Dateien in dieses
Unterverzeichnis.Es wird zustzlich nach dem Unterverzeichnis mit
dem gleichen Namen auf der Sicherung der Hauptseite auf
ftp.FreeBSD.org suchen (das
ausdrckliche Setzen von DISTDIR
in Ihrem Makefile wird dies nicht
gewhrleisten, also nutzen Sie bitte
DIST_SUBDIR).Dies hat keine Auswirkungen auf die Variable
MASTER_SITES, die Sie in Ihrem
Makefile definieren.ALWAYS_KEEP_DISTFILESFalls Ihr Port binre Distfiles benutzt und eine
Lizenz aufweist, die verlangt, dass das der Quelltext in
Form binrer Pakete verteilt werden muss, z.B. GPL,
dann wird ALWAYS_KEEP_DISTFILES den
&os; Build Cluster anweisen eine Kopie der Dateien in
DISTFILES vorzuhalten. Nutzer dieser
Ports bentigen generell diese Dateien nicht, daher
ist es ein gutes Konzept, nur dann die Distfiles zu
DISTFILES hinzuzufgen, wenn
PACKAGE_BUILDING definiert ist.Nutzung von
ALWAYS_KEEP_DISTFILES..if defined(PACKAGE_BUILDING)
DISTFILES+= foo.tar.gz
ALWAYS_KEEP_DISTFILES= yes
.endifWenn Sie zustzliche Dateien zu
DISTFILES hinzufgen,
dann beachten Sie bitte, dass Sie diese auch in
distinfo auffhren.
Zudem werden die zustzlichen Dateien normalerweise
ebenso in WRKDIR extrahiert,
was fr einige Ports zu unbeabsichtigten
Seiteneffekten fhren mag und spezielle
Behandlung erfordert.MAINTAINERFgen Sie hier Ihre E-Mailadresse ein. Bitte.
:-)Beachten Sie bitte, dass nur eine einzelne E-Mailadresse
ohne Kommentar in der Variable MAINTAINER
zulssig ist. Das Format sollte
user@hostname.domain sein.
Bitte fgen Sie keinen beschreibenden Text wie z.B. Ihren
wirklichen Namen ein, dies verwirrt lediglich
bsd.port.mk.Der Maintainer ist dafr verantwortlich, dass der
Port aktuell gehalten wird und er sorgt dafr, dass der
Port korrekt arbeitet. Fr eine detaillierte Beschreibung
der Verantwortlichkeiten eines Maintainers beachten Sie bitte
den Abschnitt
Die Herausforderung fr einen
Port-Maintainer.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
ausdrckliche 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 drfen niemals
committs ohne vorherige Zustimmung an solchen Ports
vorgenommen werden!Wir behalten uns das Recht vor, die Einreichungen eines
Maintainers ohne ausdrckliche Zustimmung zu ndern,
falls wir der Auffassung sind, dass dadurch die Einhaltung von
Richtlinien und stilistischen Vorgaben fr die
Ports-Sammlung besser erfllt wird. Zudem knnen
grere nderungen an der Infrastruktur der
Ports zu nderungen an einem bestimmten Port ohne
Zustimmung des Maintainers fhren.
Diese nderungen beeinflussen niemals die
Funktionalitt eines Ports.Das &a.portmgr; behlt 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; behlt sich das Recht vor, jede
Maintainerschaft aus Sicherheitsgrnden aufzuheben oder
ausser Kraft zu setzen.COMMENTDies ist eine einzeilige Beschreibung des Ports.
Bitte fgen Sie nicht den Paketnamen
(oder die Version der Software) in den Kommentar ein.
Der Kommentar soll mit einem Grobuchstaben beginnen
und ohne Punkt enden. Hier ist ein Beispiel:COMMENT= A cat chasing a mouse all over the screenDie COMMENT-Variable soll unmittelbar nach der
MAINTAINER-Variable im Makefile
stehen.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.Abhngigkeiten (dependencies)Viele Ports hngen von anderen Ports ab.
Dies ist ein sehr praktisches und nettes Feature der meisten
Unix-hnlichen Betriebssysteme, &os; nicht
ausgeschlossen. Es erlaubt, dass hufig vorkommende
Abhngigkeiten nicht mit jedem Port oder Paket zusammen
ausgeliefert werden mssen, da viele Ports diese
gemeinsam benutzen.
Es gibt sieben Variablen, die benutzt werden knnen,
um sicherzustellen, dass alle bentigten Teile auf dem
Rechner des Nutzers sind. Zustzlich gibt es einige
vordefinierte Variablen fr Abhngigkeiten in
hufigen Fllen und einige, welche das Verhalten
der Abhngigkeiten bestimmen.LIB_DEPENDSDiese Variable spezifiziert die Shared-Libraries,
von denen der Port abhngt. Es ist eine Liste von
lib:dir:target-Tupeln
wobei lib den Name der gemeinsam
genutzten Bibliothek, dir das
Verzeichnis, in welchem sie zu finden ist, falls nicht
verfgbar, und target das
Target in diesem Verzeichnis angeben. Zum Beispiel wird
LIB_DEPENDS= jpeg.9:${PORTSDIR}/graphics/jpeg
auf eine jpeg-Bibliothek mit der Hauptversionsnummer 9
prfen, in das
graphics/jpeg-Unterverzeichnis Ihrer
Ports-Sammlung wechseln, es bauen und installieren, falls
es nicht gefunden wird.
Der target-Teil kann weggelassen
werden, falls er identisch mit
DEPENDS_TARGET ist (Vorgabe hierfr
ist install).Der lib-Teil ist ein
regulrer Ausdruck, welcher die Ausgabe von
ldconfig -r ausgewertet. Werte wie
intl.[5-7] und intl
sind zulssig. Das erste Muster,
intl.[5-7], stimmt berein mit:
intl.5, intl.6 oder
intl.7. Das zweite Muster,
intl, stimmt berein mit jeder
Version der intl-Bibliothek.Die Abhngigkeit wird zwei Mal berprft,
einmal innerhalb des extract-Target
und dann innerhalb des
install-Target.
Zudem wird der Name der Abhngigkeit in das Paket
eingefgt, damit &man.pkg.add.1; es automatisch
installiert, falls es nicht auf dem Rechner des Nutzers
ist.RUN_DEPENDSDiese Variable legt Binrdateien oder Dateien,
von denen der Port abhngt, fr die Laufzeit fest.
Es ist eine Liste von
path:dir:target-Tupeln,
wobei path der Name der
Binrdatei oder Datei, dir
das Verzeichnis, in welchem sie gefunden werden kann, falls
nicht vorhanden, und target das
Target in diesem Verzeichnis angeben.
Falls path mit einem Slash
(/) beginnt, wird es als Datei behandelt
und deren Vorhandensein wird mit test -e;
berprft. Andernfalls wird angenommen, dass es
eine Binrdatei ist und which -s
wird benutzt, um zu berprfen, ob das Programm im
Pfad vorhanden ist.Zum Beispiel wirdRUN_DEPENDS= ${LOCALBASE}/etc/innd:${PORTSDIR}/news/inn \
xmlcatmgr:${PORTSDIR}/textproc/xmlcatmgrberprfen, ob die Datei oder das Verzeichnis
/usr/local/etc/innd existiert und es
erstellen und installieren aus dem
news/inn-Unterverzeichnis der
Ports-Sammlung, falls es nicht gefunden wird. Es wird zudem
berprft, ob die Binrdatei namens
xmlcatmgr im Suchpfad vorhanden ist und
danach zum Unterverzeichnis
textproc/xmlcatmgr in Ihrer
Ports-Sammlung wechseln, es bauen und installieren,
falls es nicht gefunden wird.In diesem Fall ist innd eine
Binrdatei. Falls sich eine Binrdatei an
einem ungewhnlichen Platz befindet, der nicht
im Suchpfad ist, dann sollten Sie die volle Pfadangabe
verwenden.Der offizielle Suchpfad PATH,
welcher im Ports Cluster benutzt wird, ist/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/X11R6/binDie Abhngigkeit wird innerhalb des
install-Target
berprft. Zudem wird der Name der
Abhngigkeit in das Paket bernommen,
damit &man.pkg.add.1; es automatisch installieren wird,
falls es auf dem System des Nutzers nicht vorhanden ist.
Der target-Teil kann
weggelassen werden, wenn er der gleiche ist wie in der
Variable DEPENDS_TARGET.Es kommt recht hufig vor, dass
RUN_DEPENDS genau dasselbe enthlt
wie BUILD_DEPENDS, 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:RUN_DEPENDS= ${BUILD_DEPENDS}Jedoch kann eine solche Zuweisung dazu fhren, dass
die Liste der Laufzeitabhngigkeiten mit
berflssigen Eintrgen belastet wird, die
sich nicht in der ursprnglichen Liste
BUILD_DEPENDS des Ports befanden, da sich
&man.make.1; bei
der Auswertung solcher Zuweisungen trge verhlt.
Stellen Sie sich ein Makefile mit
USE_*-Variablen
vor, die von ports/Mk/bsd.*.mk verarbeitet
werden, um initiale Bauabhngigkeiten zusammenzutragen.
Zum Beispiel fgt USE_GMAKE=yesdevel/gmake zu
BUILD_DEPENDS hinzu. Um zu verhindern,
dass solche zustzlichen Abhngigkeiten
RUN_DEPENDS belasten, achten Sie darauf,
bei gleichzeitiger Auswertung zuzuweisen, d.h. der
Ausdruck wird ausgewertet, bevor er als Wert der Variablen
zugewiesen wird:RUN_DEPENDS:= ${BUILD_DEPENDS}BUILD_DEPENDSDiese Variable legt Binrdateien oder Dateien fest,
die dieser Port zur Erstellung bentigt. Wie
RUN_DEPENDS ist es eine Liste von
path:dir:target-Tupeln.
Zum Beispiel wird
BUILD_DEPENDS=
unzip:${PORTSDIR}/archivers/unzip
berprfen, ob eine Binrdatei
unzip vorhanden ist und in das
Unterverzeichnis archivers/unzip
Ihrer Ports-Sammlung wechseln und sie erstellen und
installieren, falls sie nicht gefunden wird.Erstellen bedeutet hier alles von der
Extraktion bis zur Kompilierung. Die Abhngigkeit
wird im extract-Target
berprft.
Der target-Teil kann
weggelassen werden, falls er identisch mit der Variable
DEPENDS_TARGET ist.FETCH_DEPENDSDiese Variable legt eine Binrdatei oder Datei
fest, welche der Port bentigt, um heruntergeladen
werden zu knnen. Wie die vorherigen beiden Variablen
ist er eine Liste von
path:dir:target-Tupeln.
Zum Beispiel wird
FETCH_DEPENDS=
ncftp2:${PORTSDIR}/net/ncftp2
berprfen, ob eine Binrdatei namens
ncftp2 vorhanden ist, in das
Unterverzeichnis net/ncftp2 Ihrer
Ports-Sammlung wechseln, sie erstellen und installieren,
falls sie nicht gefunden wird.Die Abhngigkeit wird innerhalb des
fetch-Target berprft.
Der target-Teil kann weggelassen
werden, falls er identisch mit der Variable
DEPENDS_TARGET ist.EXTRACT_DEPENDSDiese Variable spezifiziert eine Binrdatei oder
eine Datei, welche dieser Port fr die Extraktion
bentigt. Wie die vorherigen Variablen ist er eine
Liste von
path:dir:target-Tupeln.
Zum Beispiel wird
EXTRACT_DEPENDS=
unzip:${PORTSDIR}/archivers/unzip
berprfen, ob eine Binrdatei namens
unzip vorhanden ist, in das
Unterverzeichnis archivers/unzip
Ihrer Ports-Sammlung wechseln, sie erstellen und
installieren, falls sie nicht gefunden wird.Die Abhngigkeit wird innerhalb des
extract-Target berprft.
Der target-Teil kann weggelassen
werden, falls er identisch mit der Variable
DEPENDS_TARGET ist.Nutzen Sie diese Variable nur, wenn die Extraktion
nicht funktioniert (die Vorgabe nimmt
gzip an) und nicht mit
USE_ZIP oder
USE_BZIP2 wie in beschrieben zum Laufen gebracht
werden kann.PATCH_DEPENDSDiese Variable legt eine Binrdatei oder eine
Datei fest, welche dieser Port zum Patchen bentigt.
Wie die vorhergehenden Variablen ist diese eine Liste von
path:dir:target-Tupeln.
Zum Beispiel wird
PATCH_DEPENDS=
${NONEXISTENT}:${PORTSDIR}/java/jfc:extract
in das Unterverzeichnis java/jfc Ihrer
Ports-Sammlung wechseln, um es zu entpacken.Die Abhngigkeit wird innerhalb des
patch-Target berprft.
Der target-Teil kann entfallen,
falls er identisch mit der Variable
DEPENDS_TARGET ist.USE_*Es gibt eine Reihe von Variablen, um gebruchliche
Abhngigkeiten einzukapseln, die viele Ports aufweisen.
Obwohl Ihre Verwendung optional ist, knnen sie helfen
die bersichtlichkeit des Makefile
eines Ports zu erhhen. Jede von ihnen ist im Stil von
USE_*.
Der Gebrauch dieser Variablen ist beschrnkt auf das
Makefile eines Ports und
ports/Mk/bsd.*.mk. Es ist nicht
entworfen worden, um durch den Nutzer setzbare Optionen
einzukapseln; benutzen Sie
WITH_* und
WITHOUT_*
fr diese Zwecke.Es ist immer falsch, irgendeine
USE_*-Variable
in der /etc/make.conf zu setzen.
Zum Beispiel wrde das Setzen von
USE_GCC=3.4
eine Abhngigkeit fr GCC34 fr jeden Port
einschliesslich GCC34 selbst hinzufgen!
Die
USE_*-Varibalen
VariableBedeutungUSE_BZIP2Der Tarball dieses Ports wird mit
bzip2 komprimiert.USE_ZIPDer Tarball des Ports wird mit
zip komprimiert.USE_BISONDer Port benutzt bison
fr die Erstellung.USE_CDRTOOLSDer Port erfordert
cdrecord entweder von
sysutils/cdrtools
oder sysutils/cdrtools-cjk,
abhngig davon, was der Nutzer vorgibt.
USE_GCCDieser Port bentigt eine bestimmte
Version von gcc zur Erstellung.
Die genaue Version kann festgelegt werden mit
Werten wie 3.4.
Mit 3.4+ kann die mindestens
erforderliche Version spezifiziert werden.
Der gcc aus
dem Basissystem wird genutzt, wenn er die
erforderliche Version erfllt, andernfalls wird
eine geeignete Version des gcc
aus den Ports kompiliert und die Variablen
CC und CXX
werden angepasst.
Variablen zugehrig zu
gmake und dem
configure-Skript werden in
beschrieben, whrenddessen
autoconf,
automake und
libtool in
beschrieben sind.
Perl-spezifische Variablen
werden in behandelt.
X11-Variablen sind aufgelistet in
.
behandelt GNOME-bezogene Variablen und KDE-bezogene Variablen.
dokumentiert Java-Variablen,
whrend Informationen zu
Apache,
PHP und PEAR-Modulen
enthlt.
Python wird in
und
Ruby in
errtert.
stellt Variablen fr
SDL-Programme zur Verfgung
und enthlt schliesslich
Variablen fr Xfce.Minimale Version einer AbhngigkeitEine minimale Version einer Abhngigkeit kann in
jeder *_DEPENDS-Variable festgelegt
werden mit Ausnahme von LIB_DEPENDS
durch Anwendung folgender Syntax:p5-Spiffy>=0.26:${PORTSDIR}/devel/p5-SpiffyDas erste Feld enthlt einen abhngigen
Paketnamen, welcher einem Eintrag in der Paketdatenbank
entsprechen muss und einen Vergleich mit einer
Paketversion. Die Abhngigkeit wird erfllt,
wenn p5-Spiffy-0.26 oder eine neuere Version
auf dem System installiert ist.Anmerkungen zu AbhngigkeitenWie vorstehend beschrieben ist das Vorgabe-Target
DEPENDS_TARGET, wenn eine
Abhngigkeit bentigt wird.
Die Vorgabe hierfr ist install.
Dies ist eine Nutzer-Variable; sie wird niemals im
Makefile eines Ports definiert.
Falls Ihr Port einen besonderen Weg bentigt,
um mit einer Abhngigkeit umzugehen, dann benutzen
Sie bitte den :target-Teil der
*_DEPENDS-Variablen, anstatt
DEPENDS_TARGET zu ndern.Falls Sie make clean schreiben,
werden dessen Abhngigkeiten auch gesubert.
Falls Sie dies nicht wollen, definieren Sie die Variable
NOCLEANDEPENDS in Ihrer Umgebung.
Dies kann besonders erstrebenswert sein, wenn der Port
etwas in seiner Liste von Abhngigkeiten hat,
das sehr viel Zeit fr einen rebuild bentigt
wie KDE, GNOME oder Mozilla.Um von einem anderen Port bedingungslos abhngig
zu sein, benutzen Sie bitte die Variable
${NONEXISTENT} als erstes Feld von
BUILD_DEPENDS oder
RUN_DEPENDS. Benutzen Sie dies nur,
wenn Sie den Quelltext eines anderen Port bentigen.
Sie knnen auch oft Kompilierzeit sparen, wenn Sie das
Target festlegen. Zum Beispiel wird
BUILD_DEPENDS= ${NONEXISTENT}:${PORTSDIR}/graphics/jpeg:extract
immer zum jpeg-Port wechseln und ihn
extrahieren.Zirkulre Abhngigkeiten sind fatalFhren Sie niemals irgendwelche zirkulren
Abhngigkeiten in der Ports-Sammlung ein!Die Struktur fr die Erstellung von Ports dulde
keinerlei zirkulre Abhngigkeiten. 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:
cd /usr/ports; make index.
Dieser Prozess kann auf alten Maschinen sehr langsam sein,
aber Sie ersparen sich und einer Vielzahl von Menschen
mglicherweise eine Menge rger.MASTERDIRFalls Ihr Port wegen einer Variable, die verschiedene
Werte annimmt (z.B. Auflsung oder
Papiergre), leicht unterschiedliche Versione
von Paketen erzeugen muss, dann legen Sie bitte ein
Unterverzeichnis pro Paket an, um es fr den Nutzer
einfacher begreiflich zu machen, was zu machen ist.
Aber versuchen Sie dabei so viele Dateien wie mglich
zwischen diesen Ports gemeinsam zu nutzen.
Normalerweise bentigen Sie nur ein sehr kurzes
Makefile in allen ausser einem
Unterverzeichnis, wenn Sie Variablen intelligent nutzen.
In diesem einzigen Makefile knnen
Sie MASTERDIR verwenden, um anzugeben,
wo der Rest der Dateien liegt. Benutzen Sie bitte auch eine
Variable fr
PKGNAMESUFFIX, damit die Pakete
unterschiedliche Namen haben werden.Wir demonstrieren dies am Besten an einem Beispiel. Es ist
Teil von
japanese/xdvi300/Makefile;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}
.endifjapanese/xdvi300
verfgt ebenfalls ber alle Patches, Paket-Dateien
usw. Wenn Sie make eintippen, wird der Port
die Standardvorgabe fr die Auflsung nehmen (300)
und den Port ganz normal erstellen.Genauso wie fr alle anderen Auflsungen ist
dies das vollstndigexdvi118/Makefile:RESOLUTION= 118
MASTERDIR= ${.CURDIR}/../xdvi300
.include "${MASTERDIR}/Makefile"(xdvi240/Makefile und
xdvi400/Makefile sind hnlich).
Die MASTERDIR-Definition teilt dem
bsd.port.mk mit, dass die normalen
Unterverzeichnisse wie FILESDIR und
SCRIPTDIR unter
xdvi300 gefunden werden knnen.
Die RESOLUTION=118-Zeile wird die
RESOLUTION=300-Zeile in
xdvi300/Makefile berschreiben
und der Port wird mit einer Auflsung von 118
erstellt.ManualpagesDie Variablen MAN[1-9LN]
werden automatisch jede Manualpage zur
pkg-plist hinzufgen
(dies bedeutet, dass Sie Manualpages
nicht in der
pkg-plist auflisten drfen,
lesen Sie bitte Erstellung
der PLIST fr weitere Details).
Sie veranlassen zudem den Installationsabschnitt
dazu, die Manualpages zu Komprimieren oder zu Dekomprimieren
abhngig vom gesetzten Wert der Variable
NO_MANCOMPRESS in
/etc/make.conf.Falls Ihr Port versucht verschiedene Namen fr
Manualpages unter Zuhilfenahme von Symlinks oder Hardlinks
zu installieren, mssen Sie die Variable
MLINKS nutzen, um diese zu identifizieren.
Der von Ihrem Port installierte Link wird von
bsd.port.mk gelscht und wieder
eingefgt, um sicherzustellen, dass er auf die korrekte
Datei zeigt. Jede Manualpage, welche in
MLINKS aufgefhrt ist, darf nicht in
der pkg-plist aufgenommen werden.Falls die Manualpages whrend der Installation
komprimiert werden sollen, mssen Sie die Variable
MANCOMPRESSED setzen. Diese Variable kann
drei Werte annehmen, yes,
no und maybe.
yes bedeutet, dass Manualpages bereits
komprimiert installiert sind, bei no sind
sie es nicht und maybe bedeutet, dass die
Software bereits den Wert von NO_MANCOMPRESS
beachtet, damit bsd.port.mk nichts
Besonderes auszufhren hat.MANCOMPRESSED wird automatisch auf
yes gesetzt, wenn
USE_IMAKE vorgegeben ist und gleichzeitig
NO_INSTALL_MANPAGES nicht. Im umgekehrten
Falle ist MANCOMPRESSED auf
no gesetzt.
Sie mssen es nicht explizit angeben, auer die
Standardvorgabe ist fr Ihren Port nicht passend.Wenn Ihr Port den man tree irgendwo anders als in der
Variable PREFIX verankert, knnen
Sie ihn mit MANPREFIX bestimmen.
Sollten zudem Manualpages nur in bestimmten Abschnitten an
einem nicht-standardkonformen Platz liegen, wie z.B. bestimmte
Perl-Modul-Ports,
dann knnen Sie mittels der Variable
MANsectPREFIX
(wobei sect ein Wert aus
1-9, L oder
N ist) individuelle Pfade zu den
Manualpages festlegen.Wenn Ihre Manualpages in sprachspezifische
Unterverzeichnisse installiert werden, dann bestimmen Sie
bitte den Namen der Sprache mit der Variable
MANLANG. Der Wert dieser Variable ist
mit "" vorgegeben (das bedeutet nur
Englisch).Hier ist ein Beispiel, welches alles zusammenfasst.MAN1= foo.1
MAN3= bar.3
MAN4= baz.4
MLINKS= foo.1 alt-name.8
MANLANG= "" ja
MAN3PREFIX= ${PREFIX}/share/foobar
MANCOMPRESSED= yesDies zeigt an, dass sechs Dateien von diesem Port
installiert werden;${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${MANPREFIX}/man/man8/alt-name.8.gz
kann zustzlich von Ihrem Port installiert werden,
oder auch nicht. Unabhngig davon wird ein Symlink
erstellt, welcher die Manualpages foo(1) und alt-name(8)
einbindet.Falls nur manche Manualpages bersetzt sind,
knnen Sie einige dynamisch vom
MANLANG-Inhalt erzeugte Variablen
nutzen:MANLANG= "" de ja
MAN1= foo.1
MAN1_EN= bar.1
MAN3_DE= baz.3Dies fhrt zu folgender Liste von Dateien:${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.gzInfo-DateienFalls Ihr Paket GNU-Info-Dateien installiert, sollten
diese in der INFO-Variablen augelistet sein
(ohne das angehngte .info) mit einem
Eintrag fr jedes Dokument. Von diesen Dateien wird
angenommen, dass sie nach
PREFIX/INFO_PATH
installiert werden. Sie knnen
INFO_PATH ndern, falls Ihr Paket
einen anderen Ort vorsieht. Jedoch wird dies nicht empfohlen.
Die Eintrge enthalten nur den relativen Pfad zu
PREFIX/INFO_PATH.
Zum Beispiel installiert lang/gcc34 Info-Dateien nach
PREFIX/INFO_PATH/gcc34,
wobei INFO etwa so aussieht:
INFO= gcc34/cpp gcc34/cppinternals gcc34/g77 ...
Entsprechende Installations-/Deinstalltions-Codes werden vor
der Paket-Registrierung automatisch der vorlufigen
pkg-plist hinzugefgt.Makefile-OptionenEinige grere Applikationen knnen mit
einer Reihe von Konfigurationen, die zustzliche
Funktionalitten hinzufgen, erstellt werden,
falls eine oder mehrere Bibliotheken oder Applikationen
verfgbar sind. Dazu gehren die Auswahl von
natrlichen 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
Verfgung, damit der Autor des Ports bestimmen kann,
welche Konfiguration erstellt werden soll.KNOBS (Einstellungen)WITH_*
und
WITHOUT_*Diese Variablen sind entworfen worden, um vom
System-Administrator gesetzt zu werden. Es gibt viele,
die in ports/KNOBS
standardisiert sind.Benennen Sie Schalter bei der Erstellung eines Ports
nicht programmspezifisch. Verwenden Sie zum Beispiel im
Avahi-Port WITHOUT_MDNS anstelle von
WITHOUT_AVAHI_MDNS.Sie sollten nicht annehmen, dass ein
WITH_*
notwendigerweise eine korrespondierende
WITHOUT_*-Variable
hat oder umgekehrt. Im Allgemeinen wird diese
Vorgabe einfach unterstellt.Falls nicht anderweitig festgelegt, werden diese
Variablen nur dahingehend berprft, ob sie
gesetzt sind oder nicht – nicht darauf,
ob sie auf bestimmte Werte wie YES
oder NO gesetzt sind.
Hufige
WITH_*
und
WITHOUT_*-Variablen
VariableBedeutungWITHOUT_NLSFalls gesetzt, bedeutet sie, dass eine
Internationalisierung nicht bentigt wird,
was Kompilierzeit sparen kann. Als Vorgabe
wird Internationalisierung gebraucht.WITH_OPENSSL_BASENutze die Version von OpenSSL aus dem
Basissystem.WITH_OPENSSL_PORTInstalliert die Version von OpenSSL aus
security/openssl, auch
wenn das Basissystem auf aktuellem Stand
ist.WITHOUT_X11Falls der Port mit oder ohne
Untersttzung fr X erstellt werden
kann, dann sollte normalerweise mit
X-Untersttzung erstellt werden.
Falls die Variable gesetzt ist, soll die Version
ohne X-Untersttzung erstellt werden.
Benennung von Knobs (Einstellungen)Um die Anzahl der Knobs niedrig zu halten und zum
Vorteil des Anwenders, wird empfohlen, dass Porter
hnliche Namen fr Knobs verwenden.
Eine Liste der beliebtesten Knobs kann in der KNOBS-Datei
eingesehen werden.Knob-Namen sollten wiederspiegeln, was der Knob
bedeutet und was er bewirkt. Wenn ein Port einen
lib-Prfix im PORTNAME hat,
dann soll das lib-Prfix im Knob-Namen
entfallen.OPTIONSHintergrundDie OPTIONS-Variable gibt dem
Nutzer, der diesen Port installiert, einen Dialog mit
auswhlbaren Optionen und speichert diese in
/var/db/ports/portname/options.
Bei der nchsten Neuerstellung des Ports werden
diese Einstellungen wieder verwandt.
Sie werden sich niemals mehr an all die zwanzig
WITH_* und
WITHOUT_*-Optionen
erinnern mssen, die Sie benutzt haben, um diesen
Port zu erstellen!Wenn der Anwender make config
benutzt (oder ein make build das
erste Mal laufen lsst) wird das Framework auf
/var/db/ports/portname/options
die Einstellungen prfen. Falls die Datei nicht
existiert, werden die Werte von
OPTIONS genutzt, um eine Dialogbox
zu erzeugen, in welcher die Optionen an- oder abgeschaltet
werden knnen. Dann wird die
options-Datei gespeichert und die
ausgewhlten Variablen werden bei der Erstellung
des Ports benutzt.Falls eine neue Version des Ports
OPTIONS hinzufgt, wird der
Dialog mit den gespeicherten Werten dem Nutzer
angezeigt.Benutzen Sie make showconfig,
um die gespeicherte Konfiguration zu betrachten.
Benutzen Sie make rmconfig, um die
gespeicherte Konfiguration zu Lschen.SyntaxDie Syntax fr die
OPTIONS-Variable lautet:
OPTIONS= OPTION "descriptive text" default ...
Der Wert als Vorgabe ist entweder ON
oder OFF. Wiederholungen dieser drei
Felder sind erlaubt.OPTIONS-Definitionen
mssen vor der Einbindung von
bsd.port.options.mk erscheinen.
Die WITH_* und
WITHOUT_*-Variablen knnen
nur nach der Einbindung von
bsd.port.options.mk getestet
werden. bsd.port.pre.mk kann auch
stattdessen eingebunden werden und wird immer noch von
vielen Ports eingebunden, die vor der Einfhrung von
bsd.port.options.mk erstellt wurden.
Jedoch wirken manche Variablen nicht wie gewohnt nach der
Einbindung von bsd.port.pre.mk,
typischerweise USE_*-Optionen.Einfache Anwendung von
OPTIONSOPTIONS= 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>Veraltete Anwendung von
OPTIONSOPTIONS= 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>Automatische Aktivierung von FunktionenWenn 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 mchten,
ausdrcklich durch Verwendung von
--without-xxx oder
--disable-xxx in der Variable
CONFIGURE_ARGS einzeln ab.Falsche Behandlung einer Option.if defined(WITH_FOO)
LIB_DEPENDS+= foo.0:${PORTSDIR}/devel/foo
CONFIGURE_ARGS+= --enable-foo
.endifStellen 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
make config-Dialog umgestellt.
Aber das Konfigurationsskript der Applikation hat
erkannt, dass die Bibliothek auf dem System vorhanden ist
und fgt ihre Funktionen in die Binrdatei ein.
Falls der Nutzer sich nun entschliesst libfoo von seinem
System zu entfernen, dann wird das Ports-System nicht
protestieren (es wurde keine Abhngigkeit von libfoo
eingetragen), aber die Applikation bricht ab.Korrekte Behandlung einer Option.if defined(WITH_FOO)
LIB_DEPENDS+= foo.0:${PORTSDIR}/devel/foo
CONFIGURE_ARGS+= --enable-foo
.else
CONFIGURE_ARGS+= --disable-foo
.endifIm 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.Die Festlegung des ArbeitsverzeichnissesJeder Port wird extrahiert in ein Arbeitsverzeichnis,
welches beschreibbar sein muss. Das Ports-System gibt als
Standard vor, dass die DISTFILES in
einem Verzeichnis namens ${DISTNAME}
entpackt werden. Mit anderen Worten, wenn Sie:PORTNAME= foo
PORTVERSION= 1.0festgelegt haben, dann enthalten die Distributions-Dateien
des Ports ein Verzeichnis auf oberster Ebene,
foo-1.0, und der Rest der Dateien
befindet sich unter diesem Verzeichnis.Es gibt eine Reihe von Variablen, die Sie
berschreiben knnen, falls dies nicht der Fall
sein sollte.WRKSRCDiese Variable listet den Namen des Verzeichnisses,
welches erstellt wird, wenn die Distfiles der Applikation
extrahiert werden. Wenn unser vorheriges Beispiel in einem
Verzeichnis namens foo (und nicht
foo-1.0) extrahiert wurde,
wrden Sie schreiben:WRKSRC= ${WRKDIR}/foooder mglicherweiseWRKSRC= ${WRKDIR}/${PORTNAME}
NO_WRKSUBDIRWenn der Port berhaupt nicht in einem
Unterverzeichnis extrahiert wird, sollten Sie dies mit dem
Setzen von NO_WRKSUBDIR anzeigen.NO_WRKSUBDIR= yesKonfliktbehandlungEs gibt drei verschiedene Variablen, um einen
Konflikt zwischen Paketen und Ports zu dokumentieren:
CONFLICTS,
CONFLICTS_INSTALL sowie
CONFLICTS_BUILD.CONFLICTS setzt automatisch die
Variable IGNORE, die
ausfhrlicher in beschrieben wird.Beim Entfernen eines von mehreren in Konflikt stehenden
Ports ist es ratsam, die
CONFLICTS-Eintrge in den anderen
Ports fr einige Monate beizubehalten, um Nutzer zu
untersttzen, die ihre Ports nur sporadisch
aktualisieren.CONFLICTS_INSTALLFalls Ihr Paket nicht mit anderen Paketen koexistieren
kann (wegen Dateikonflikten, Laufzeit-Inkompatibilitten
usw.), fhren Sie bitte die anderen Paketnamen in der
Variable CONFLICTS_INSTALL auf. Sie
knnen hier Shell-Globs wie * und
? verwenden. Paketnamen sollten in der
gleichen Weise aufgezhlt werden, wie sie in
/var/db/pkg auftauchen. Bitte stellen
Sie sicher, dass CONFLICTS nicht mit dem
Paket des Ports selbst bereinstimmt, da ansonsten das
Erzwingen der Installation durch
FORCE_PKG_REGISTER nicht lnger
funktionieren wird.CONFLICTS_BUILDWenn Ihr Port nicht gebaut werden kann, wenn ein
bestimmter Port bereits installiert ist, geben Sie diesen in
der Variable CONFLICTS_BUILD an. Sie
knnen hier Shell-Globs wie * und
? verwenden. Paketnamen sollten in der
gleichen Weise aufgezhlt werden, wie sie in
/var/db/pkg auftauchen. Die
CONFLICTS_BUILD-Prfung erfolgt vor dem Bau des Ports.
Baukonflikte werden im erzeugten Paket nicht
verzeichnet.CONFLICTSWenn 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 CONFLICTS
an. Sie knnen hier Shell-Globs wie * und
? verwenden. Paketnamen sollten in der
gleichen Weise aufgezhlt werden, wie sie in
/var/db/pkg auftauchen. Bitte stellen
Sie sicher, dass CONFLICTS_INSTALL nicht mit
dem Paket des Ports selbst bereinstimmt, da ansonsten das
Erzwingen der Installation durch
FORCE_PKG_REGISTER nicht lnger
funktionieren wird. Die CONFLICTS-Prfung erfolgt vor dem
Bau des Ports und vor der Installation des gebauten Ports.Installation von DateienINSTALL_* macrosNutzen Sie die Makros in
bsd.port.mk, um korrekte
Modi und Eigentmer von Dateien in Ihren
*-install-Targets
sicherzustellen.INSTALL_PROGRAM ist ein Befehl,
um binre Binrdateien zu installieren.INSTALL_SCRIPT ist ein Befehl,
um ausfhrbare Skripte zu installieren.INSTALL_LIB ist ein Befehl
zur Installation Shared-Libraries.INSTALL_KLD ist ein Befehl, mit
dem Kernelmodule installiert werden knnen. Einige
Architekturen haben Probleme mit stripped-Modulen.
Daher sollten Sie diesen Befehl anstelle von
INSTALL_PROGRAM verwenden.INSTALL_DATA ist ein Befehl,
um gemeinsam nutzbare Daten zu installieren.INSTALL_MAN ist ein Befehl,
um Manualpages oder andere Dokumentation zu
installieren (es wird nichts komprimiert).Das sind grundstzlich alle
install-Befehle mit
ihren passenden Flags.Zerlegen von Binrdateien und
Shared-LibrariesZerlegen Sie keine Binrdateien manuell,
wenn Sie es nicht mssen. Alle Binaries sollten
gestripped werden; allerdings vermag das
INSTALL_PROGRAM-Makro gleichzeitig
eine Binrdatei zu installieren und zu strippen
(beachten Sie den nchsten Abschnitt). Das
Makro INSTALL_LIB erledigt das
gleiche fr Shared-Libraries.Wenn Sie eine Datei strippen mssen, aber weder
das INSTALL_PROGRAM- noch das
INSTALL_LIB-Makro nutzen wollen, dann
kann ${STRIP_CMD} Ihr Programm strippen.
Dies wird typischerweise innerhalb des
post-install-Targets gemacht.
Zum Beispiel:post-install:
${STRIP_CMD} ${PREFIX}/bin/xdlNutzen Sie &man.file.1; fr die installierte
Applikation, um zu berprfen, ob eine
Binrdatei gestripped ist oder nicht.
Wenn es nicht meldet not stripped,
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.Installation eines ganzen Verzeichnisbaums
inklusive DateienManchmal muss man eine groe Zahl von Dateien
unter Erhalt ihrer hierarchischen Struktur installieren,
d.h. Kopieraktionen ber einen ganzen Verzeichnisbaum
von WRKSRC zu einem Zielverzeichnis unter
PREFIX.Fr diesen Fall gibt es zwei Makros. Der Vorteil
der Nutzung dieser Makros anstatt cp ist,
dass sie korrekte Besitzer und Berechtigungen auf den
Zieldateien garantieren.
Das erste Makro, COPYTREE_BIN, wird alle
installierten Dateien ausfhrbar markieren und damit
passend fr die Installation in
PREFIX/bin
vorbereiten. Das zweite Makro,
COPYTREE_SHARE, setzt keine
Ausfhrungsberechtigungen auf Dateien und ist daher
geeignet fr die Installation von Dateien im Target von
PREFIX/share.post-install:
${MKDIR} ${EXAMPLESDIR}
(cd ${WRKSRC}/examples/ && ${COPYTREE_SHARE} \* ${EXAMPLESDIR})Dieses Beispiel wird den Inhalt des
examples-Verzeichnisses im Distfile
des Drittanbieters in das Beispielverzeichnis Ihres Ports
kopieren.post-install:
${MKDIR} ${DATADIR}/summer
(cd ${WRKSRC}/temperatures/ && ${COPYTREE_SHARE} "June July August" ${DATADIR}/summer/)Und dieses Beispiel wird die Daten der Sommermonate in
das summer-Unterverzeichnis eines
DATADIR
installieren.Zustzliche find-Argumente
knnen mit dem dritten Argument an die
COPYTREE_*-Makros bergeben werden.
Um zum Beispiel alle Dateien aus dem 1. Beispiel ohne die
Makefiles zu installieren, kann man folgenden Befehl
benutzen.post-install:
${MKDIR} ${EXAMPLESDIR}
(cd ${WRKSRC}/examples/ && \
${COPYTREE_SHARE} \* ${EXAMPLESDIR} "! -name Makefile")Beachten Sie bitte, dass diese Makros die installierten
Dateien nicht zur pkg-plist
hinzufgen, Sie mssen sie immer noch selbst
auflisten.Installation zustzlicher DokumentationFalls Ihre Software zustzlich zu den blichen
Manualpages und Info-Seiten weitere Dokumentation hat und
Sie diese fr ntzlich halten, dann installieren
Sie sie unter
PREFIX/share/doc.
Dies kann wie vorstehend im Target des
post-install geschehen.Legen Sie ein neues Verzeichnis fr Ihren Port an.
Das Verzeichnis sollte wiederspiegeln, was der Port ist.
Das bedeutet normalerweise PORTNAME.
Wie auch immer, wenn Sie meinen, der Nutzer mchte
verschiedene Versionen des Ports zur gleichen Zeit
installiert haben, dann knnen Sie die gesamte Variable
PKGNAME nutzen.Machen Sie die Installation von der Variablen
NOPORTDOCS abhngig, damit die
Nutzer sie in /etc/make.conf abschalten
knnen:post-install:
.if !defined(NOPORTDOCS)
${MKDIR} ${DOCSDIR}
${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${DOCSDIR}
.endifHier einige praktische Variablen und wie sie
standardmssig bei Verwendung im
Makefile expandiert werden:DATADIR wird expandiert zu
PREFIX/share/PORTNAME.DATADIR_REL wird expandiert zu
share/PORTNAME.DOCSDIR wird expandiert zu
PREFIX/share/doc/PORTNAME.DOCSDIR_REL wird expandiert zu
share/doc/PORTNAME.EXAMPLESDIR wird expandiert zu
PREFIX/share/examples/PORTNAME.EXAMPLESDIR_REL wird expandiert zu
share/examples/PORTNAME.NOPORTDOCS behandelt nur
zustzliche Dokumentation, die in
DOCSDIR installiert ist.
Fr normale Manualpages und Info-Seiten
wird die Variable benutzt.
Dinge, welche in DATADIR
und EXAMPLESDIR installiert werden,
legen die Variablen NOPORTDATA und
NOPORTEXAMPLES fest.Die Variablen werden nach PLIST_SUB
exportiert. Ihre Werte erscheinen dort als Pfadnamen relativ
zu PREFIX,
falls mglich. Das bedeutet, dass
share/doc/PORTNAME
standardmssig ersetzt wird durch
%%DOCSDIR%% in der Packliste usw.
(mehr zur Ersetzung durch die
pkg-plist finden Sie
hier).Alle installierten Dokumentationsdateien
und –Verzeichnisse
sollten in der pkg-plist dem
%%PORTDOCS%%-Prfix
enthalten sein, zum Beispiel:%%PORTDOCS%%%%DOCSDIR%%/AUTHORS
%%PORTDOCS%%%%DOCSDIR%%/CONTACT
%%PORTDOCS%%@dirrm %%DOCSDIR%%Alternativ zur Auflistung der Dokumentationsdateien in
der pkg-plist kann in einem Port auch
die Variable PORTDOCS gesetzt werden
fr eine Liste von Dateien und Shell-Globs, um diese
zur endgltigen Packliste hinzuzufgen. Die Namen
werden relativ zur Variable DOCSDIR sein.
Wenn Sie also einen Port haben, welcher
PORTDOCS benutzt, und Sie haben eine vom
Standard abweichenden Platz fr seine Dokumentation,
dann mssen Sie die Variable DOCSDIR
entsprechend setzen. Wenn ein Verzeichnis in
PORTDOCS aufgefhrt ist, oder von
einem Shell-Glob dieser Variable abgebildet wird, dann wird
der komplette Verzeichnisbaum inklusive Dateien und
Verzeichnissen in der endgltigen Packliste
aufgenommen. Wenn die Variable NOPORTDOCS
gesetzt ist, dann werden die Dateien und Verzeichnisse,
die in PORTDOCS aufgelistet sind,
nicht installiert und werden auch nicht zur Packliste des
Ports hinzugefgt. Wie oben gezeigt bleibt es dem Port
selbst berlassen, die Dokumentation in
PORTDOCS zu installieren. Ein typisches
Beispiel fr den Gebrauch von
PORTDOCS sieht wie folgt aus:PORTDOCS= README.* ChangeLog docs/*Die quivalente zu PORTDOCS
fr unter DATADIR und
EXAMPLESDIR installierte Dateien sind
PORTDATA beziehungsweise
PORTEXAMPLES.Sie knnen auch pkg-message
benutzen, um Meldungen whrend der Installation
anzuzeigen. Lesen Sie diesen Abschnitt ber den
Gebrauch von pkg-message
fr weitere Details.
Die pkg-message-Datei muss nicht zur
pkg-plist hinzugefgt
werden.Unterverzeichnisse mit PREFIXLassen Sie den Port die Dateien in die richtigen
Unterverzeichnisse von PREFIX 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 lib, was natrlich auch nicht
der BSD-Philosophie entspricht und nicht gut funktioniert.
Viele der Dateien sollten in eines der folgenden
Verzeichnisse geschoben werden: etc
(Konfigurationsdateien), libexec
(intern gestartete Binrdateien),
sbin (Binrdateien fr
Superuser/Manager), info
(Dokumentation fr Info-Browser) oder
share (Architektur-unabhngige
Dateien). Lesen Sie hierzu &man.hier.7;; weitestgehend
greifen die Regeln fr /usr auch
fr /usr/local. Die Ausnahme sind
Ports, welche mit news aus dem USENET
arbeiten. In diesem Falle sollte
PREFIX/news
als Zielort fr die Dateien benutzt werden.BesonderheitenEs gibt einige Dinge mehr, die zu beachten sind,
wenn man einen Port erstellt. Dieser Abschnitt
erklrt die wichtigsten.Shared-LibrariesWenn Ihr Port eine oder mehrere Shared-Libraries
installiert, dann definieren Sie bitte eine
USE_LDCONFIG make-Variable,
die bsd.port.mk anweisen wird,
${LDCONFIG} -m auf das
Verzeichnis, in das die neue Library installiert wird
(normalerweise
PREFIX/lib),
whrend des
post-install-Targets anzuwenden,
um sie im Shared-Library-Cache zu registrieren.
Diese Variable, wenn definiert, wird auch dafr sorgen,
dass ein entsprechendes
@exec /sbin/ldconfig -m und
@unexec /sbin/ldconfig -R-Paar zu Ihrer
pkg-plist-Datei hinzugefgt wird,
sodass ein Benutzer, der das Paket installiert, die
Bibliothek danach sofort benutzen kann und das System nach
deren Deinstallation nicht glaubt, die Bibliothek wre
noch da.USE_LDCONFIG= yesWenn ntig, knnen Sie das Standardverzeichnis
auer Kraft setzen, indem Sie den
USE_LDCONFIG Wert auf eine Liste von
Verzeichnissen setzen, in die Shared Libraries installiert
werden sollen. Wenn Ihr Port z.B. diese Bibliotheken nach
PREFIX/lib/foo und
PREFIX/lib/bar
installiert, knnten Sie folgendes in Ihrem
Makefile benutzen:USE_LDCONFIG= ${PREFIX}/lib/foo ${PREFIX}/lib/barBitte berprfen Sie dies genau. Oft ist das
berhaupt nicht ntig oder kann durch
-rpath oder das Setzen von
LD_RUN_PATH whrend des Linkens umgangen
werden (s. lang/moscow_ml fr ein
Beispiel), oder durch einen Shell-Wrapper, der
LD_LIBRARY_PATH setzt, bevor er die
Binrdatei ausfhrt, wie es www/seamonkey tut.Wenn Sie 32-Bit Libraries auf 64-Bit Systemen
installieren, benutzen Sie stattdessen
USE_LDCONFIG32.Versuchen Sie Shared-Library-Versionsnummern im
libfoo.so.0 Format zu halten.
Unser Runtime-Linker kmmert sich nur um die Major
(erste) Nummer.Wenn sich die Major-Library-Versionsnummer
whrend der Aktualisierung zu einer neuen
Portversion erhht, sollte auch die
PORTREVISION aller Ports, die die
Shared-Library linken, erhht werden, damit diese
mit der neuen Version der Bibliothek neu kompiliert
werden.Ports mit beschrnkter VerbreitungLizenzen variieren und manche geben Restriktionen vor,
wie die Applikation gepackt werden oder ob sie
gewinnorientiert verkauft werden kann, usw.Es liegt in Ihrer Verantwortung als Porter die
Lizenzbestimmungen der Software zu lesen und
sicherzustellen, dass das FreeBSD-Projekt nicht haftbar
gemacht wird fr Lizenzverletzungen durch
Weiterverbreitung des Quelltextes oder kompilierter
Binaries ber FTP/HTTP oder CD-ROM. Im Zweifelsfall
kontaktieren Sie bitte die &a.ports;.In solchen Situationen knnen die in den folgenden
Abschnitten beschriebenen Variablen gesetzt werden.NO_PACKAGEDiese Variable zeigt an, dass wir keine binren
Pakete dieser Applikation erzeugen drfen - z.B. wenn
die Lizenz die Weiterverteilung von binren Paketen
oder Paketen verbietet, die aus verndertem Quelltext
erzeugt wurden.Die DISTFILES des Ports drfen
allerdings frei ber FTP/HTTP Mirrors
weiterverbreitet werden. Sie drfen auch auf CD-ROM
(oder hnlichen Medien) weiterverbreitet werden - es
sei denn, NO_CDROM ist ebenfalls
gesetzt.NO_PACKAGE sollte auch benutzt
werden, wenn das binre 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
NO_PACKAGE.NO_PACKAGE sollte auf eine
Zeichenkette gesetzt werden, die den Grund beschreibt,
warum kein Paket erzeugt werden soll.NO_CDROMDiese Variable gibt an, dassobwohl wir binre
Pakete erzeugen drfen – wir weder
diese Pakete noch die DISTFILES des
Ports auf einer CD-ROM (oder hnlichen Medien)
verkaufen drfen. Die DISTFILES
des Ports drfen allerdings immer noch auf FTP/HTTP
Mirrors.Wenn diese Variable und auch
NO_PACKAGE gesetzt ist, dann werden
nur die DISTFILES des Ports
erhltlich sein – und das nur
mittels FTP/HTTP.NO_CDROM 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 fr
nichtkommerzielle Zwecke gilt.NOFETCHFILESDateien, die in der Variable
NOFETCHFILES aufgelistet sind,
sind von keiner der MASTER_SITES
abrufbar. Ein Beispiel solch einer Datei ist eine selbige,
welche vom Anbieter auf CD-ROM bereitgestellt wird.Werkzeuge, die das Vorhandensein dieser Dateien auf
den MASTER_SITES
berprfen, sollten diese Dateien
ignorieren und sie nicht melden.RESTRICTEDSetzen Sie diese Variable, wenn die Lizenz der
Applikation weder das Spiegeln der
DISTFILES der Applikation noch
das Weiterverbreiten von binren Paketen in
jedweder Art erlaubt.NO_CDROM oder
NO_PACKAGE sollten nicht zusammen
mit RESTRICTED gesetzt werden, weil
letztere Variable die anderen beiden impliziert.RESTRICTED sollte auf eine
Zeichenkette gesetzt werden, die den Grund beschreibt,
warum der Port nicht weiterverbreitet werden kann.
Typischerweise besagt dies, dass der Port proprietre
Software enthlt und der Benutzer die
DISTFILES manuell herunterladen
muss – mglicherweise erst nachdem
er sich fr die Software registriert oder die
Bedingungen eines Endbenutzer-Lizenzvertrags
(EULA) akzeptiert hat.RESTRICTED_FILESWenn RESTRICTED oder
NO_CDROM gesetzt ist, ist diese
Variable auf ${DISTFILES}
${PATCHFILES} voreingestellt, sonst ist sie
leer. Wenn nicht jede dieser Dateien beschrnkt ist,
dann fhren Sie die betroffenen Dateien in dieser
Variable auf.Beachten Sie, dass der Porter fr jede
aufgefhrte Distributionsdatei einen Eintrag zu
/usr/ports/LEGAL hinzufgen
sollte, der genau beschreibt, was die Beschrnkung
mit sich bringt.Build-MechanismenParalleles Bauen von PortsDas Ports-Framework von &os; untersttzt das
parallele Bauen von Ports, indem es mehrere
make-Instanzen ausfhrt, damit
SMP-Systeme ihre gesamte
CPU-Rechenleistung ausntzen
knnen und so das Bauen von Ports schneller und
effektiver werden kann.Dies ermglicht der Parameter
-jX an &man.make.1;, wenn Code von
Drittanbietern kompiliert wird. Leider knnen nicht
alle Ports wirklich gut mit dem Parallelbau umgehen.
Deshalb ist es erforderlich, dass dieses Feature explizit
durch MAKE_JOBS_SAFE=yes irgendwo
unterhalb des Abschnitts fr Abhngigkeiten im
Makefile aktiviert wird.Eine weitere Mglichkeit im Umgang mit dieser
Option besteht fr den Maintainer darin,
MAKE_JOBS_UNSAFE=yes zu setzen. Diese
Variable wird dann verwendet, wenn ein Port bekannterweise
mit -jX nicht gebaut werden kann, der
Benutzer jedoch fr alle Ports den Mehrprozessorbau
durch FORCE_MAKE_JOBS=yes in
/etc/make.conf erzwingt.make, gmake
und imakeWenn Ihr Port GNU make
benutzt, dann setzen Sie bitte
USE_GMAKE=yes.
Port-Variablen im Zusammenhang mit
gmakeVariableBedeutungUSE_GMAKEDer Port bentigt gmake
fr den Build.GMAKEDer ganze Pfad zu gmake,
wenn es nicht im PATH ist.
Wenn Ihr Port eine X-Applikation ist, die
Makefile-Dateien aus
Imakefile-Dateien mit
imake erzeugt, dann setzen Sie
USE_IMAKE=yes. Das sorgt dafr,
dass die Konfigurationsphase automatisch ein
xmkmf -a ausfhrt.
Wenn das Flag ein Problem fr
Ihren Port darstellt, setzen Sie
XMKMF=xmkmf. Wenn der Port
imake benutzt, aber das
install.man-Target nicht versteht,
dann sollte NO_INSTALL_MANPAGES=yes
gesetzt werden.Wenn das Makefile
im Quelltext Ihres Ports etwas anderes als
all als Haupt-Build-Target
hat, setzen Sie ALL_TARGET
entsprechend. Das Gleiche gilt fr
install und
INSTALL_TARGET.configure SkriptWenn Ihr Port ein configure-Skript
benutzt, um Makefile-Dateien aus
Makefile.in-Dateien zu erzeugen,
setzen Sie GNU_CONFIGURE=yes.
Wenn Sie dem configure-Skript
zustzliche Argumente bergeben wollen (das
Vorgabeargument ist --prefix=${PREFIX}
--infodir=${PREFIX}/${INFO_PATH}
--mandir=${MANPREFIX}/man
--build=${CONFIGURE_TARGET}), setzen Sie diese
zustzlichen Argumente in
CONFIGURE_ARGS.
Zustzliche Umgebungsvariablen knnen
berdie Variable CONFIGURE_ENV
bergeben werden.
Variablen fr Ports, die
configure benutzenVariableBedeutungGNU_CONFIGUREDer Port benutzt ein
configure-Skript, um das Bauen
vorzubereiten.HAS_CONFIGUREWie GNU_CONFIGURE, nur
dass kein Standard-Konfigurations-Target zu
CONFIGURE_ARGS hinzugefgt
wird.CONFIGURE_ARGSZustzliche Argumente fr das
configure-Skript.CONFIGURE_ENVZustzliche Umgebungsvariablen
fr die Abarbeitung des
configure-Skriptes.CONFIGURE_TARGETErsetzt das Standard-Konfigurations-Target.
Vorgabewert ist
${MACHINE_ARCH}-portbld-freebsd${OSREL}.
Benutzung von sconsWenn Ihr Port SCons
benutzt, definieren Sie
USE_SCONS=yes.
Variablen fr Ports, die
scons benutzenVariableBedeutungSCONS_ARGSPort-spezifische SCons-Argumente, die der
SCons-Umgebung bergeben werden.SCONS_BUILDENVVariablen, die in der System-Umgebung
gesetzt werden sollen.SCONS_ENVVariablen, die in der SCons-Umgebung
gesetzt werden sollen.SCONS_TARGETLetztes Argument, das SCons bergeben
wird – hnlich
MAKE_TARGET.
Um SConstruct im Quelltext alles,
was SCons in SCONS_ENV bergeben
wird, respektieren zu lassen (das ist hauptschlich
CC/CXX/CFLAGS/CXXFLAGS), patchen Sie
SConstruct, sodass das Build
Environment wie folgt konstruiert
wird:env = Environment(**ARGUMENTS)Es kann dann mit env.Append und
env.Replace modifiziert werden.Benutzung von GNU autotoolsEinfhrungDie verschiedenen GNU autotools stellen einen
Abstraktionsmechanismus bereit fr das Kompilieren
von Software fr eine Vielfalt von Betriebssystemen
und Maschinenarchitekturen. Innerhalb der Ports-Sammlung
kann ein einzelner Port diese Werkzeuge mit Hilfe eines
einfachen Konstrukts benutzen:USE_AUTOTOOLS= tool:version[:operation] ...Als dies geschrieben wurde konnte
tool eins von
libtool, libltdl,
autoconf,
autoheader,
automake oder
aclocal sein.version gibt die einzelne
Werkzeug-Revision an, die benutzt werden soll (siehe
devel/{automake,autoconf,libtool}[0-9]+
fr mgliche Versionen).operation ist eine
optionale Angabe, die modifiziert, wie das Werkzeug
benutzt wird.Es knnen auch mehrere Werkzeuge angegeben
werden – entweder durch Angabe aller in
einer einzigen Zeile oder durch Benutzung des
+= Makefile-Konstrukts.Schliesslich gibt es das spezielle Tool, genannt
autotools, das der Einfachheit dient
indem es von alle verfgbaren Versionen der Autotools
abhngt, was sinnvoll fr Cross-Development ist.
Dies kann auch erreicht werden, indem man den Port
devel/autotools installiert.libtoolShared-Libraries, die das GNU Build-System benutzen,
verwenden normalerweise
libtool, um die Kompilierung und
Installation solcher Bibliotheken anzupassen.
Die bliche Praxis ist, eine Kopie von
libtool, die mit dem Quelltext
geliefert wird, zu benutzen. Falls Sie ein externes
libtool bentigen, knnen
Sie die Version, die von der Ports-Sammlung bereitgestellt
wird, benutzen:USE_AUTOTOOLS= libtool:version[:env]Ohne zustzliche Angaben sagt
libtool:version
dem Build-System, dass es das
Konfigurationsskript mit der auf dem System
installierten Kopie von libtool
patchen soll.
Die Variable GNU_CONFIGURE ist
impliziert. Auerdem werden einige
make– und shell-Variablen zur
weiteren Benutzung durch den Port gesetzt.
Fr Genaueres siehe
bsd.autotools.mk.Mit der Angabe :env wird nur die
Umgebung vorbereitet.Schlielich knnen optional
LIBTOOLFLAGS und
LIBTOOLFILES gesetzt werden, um die
hufigsten Argumente und durch
libtool gepatchten Dateien auer
Kraft zu setzen. Die meisten Ports werden das aber nicht
brauchen. Fr Weiteres siehe
bsd.autotools.mk.libltdlEinige Ports benutzen das
libltdl-Bibliothekspaket,
welches Teil der libtool-Suite ist.
Der Gebrauch dieser Bibliothek macht nicht automatisch
den Gebrauch von libtool selbst
ntig, deshalb wird ein separates Konstrukt zur
Verfgung gestellt.USE_AUTOTOOLS= libltdl:versionIm Moment sorgt dies nur fr eine
LIB_DEPENDS-Abhngigkeit von dem
entsprechenden libltdl-Port und wird
zur Vereinfachung zur Verfgung gestellt,
um Abhngigkeiten von den Autotools-Ports
ausserhalb des USE_AUTOTOOLS-Systems
zu eliminieren. Es gibt keine weiteren Angaben fr
dieses Werkzeug.autoconf und
autoheaderManche Ports enthalten kein Konfigurationsskript,
sondern eine autoconf-Vorlage in der
configure.ac-Datei.
Sie knnen die folgenden Zuweisungen benutzen,
um autoconf das Konfigurationsskript
erzeugen zu lassen, und auch autoheader
Header-Vorlagen zur Benutzung durch das
Konfigurationsskript erzeugen zu lassen.USE_AUTOTOOLS= autoconf:version[:env]undUSE_AUTOTOOLS= autoheader:versionwelches auch die Benutzung von
autoconf:version
impliziert.hnlich wie bei libtool,
bereitet die Angabe des optionalen
:env nur die Umgebung fr weitere
Benutzung vor. Ohne dieses wird der Port auch gepatched
und erneut konfiguriert.Die zustzlichen optionalen Variablen
AUTOCONF_ARGS und
AUTOHEADER_ARGS knnen durch das
Makefile des Ports ausser Kraft
gesetzt werden, wenn erforderlich. Wie bei den
libtool-quivalenten werden die
meisten Ports dies aber nicht bentigen.automake und
aclocalManche Pakete enthalten nur
Makefile.am-Dateien. Diese
mssen durch automake in
Makefile.in-Dateien konvertiert
und dann durch configure
weiterbearbeitet werden, um schlielich ein
Makefile zu erzeugen.hnliches gilt fr Pakete, die gelegentlich
keine aclocal.m4-Dateien mitliefern,
welche ebenfalls zum Erstellen der Software bentigt
werden. Diese knnen durch aclocal
erzeugt werden, welches configure.ac
oder configure.in durchsucht.aclocal hat eine hnliche
Beziehung zu automake wie
autoheader zu
autoconf – beschrieben
im vorherigen Abschnitt. aclocal
impliziert die Benutzung von automake,
also haben wir:USE_AUTOTOOLS= automake:version[:env]undUSE_AUTOTOOLS= aclocal:versionwas auch die Benutzung von
automake:version
impliziert.hnlich wie bei libtool und
autoconf, bereitet die optionale Angabe
:env nur die Umgebung zur weiteren
Benutzung vor. Ohne sie wird der Port erneut
konfiguriert.Wie schon autoconf und
autoheader, hat sowohl
automake als auch
aclocal eine optionale
Argument-Variable AUTOMAKE_ARGS
bzw. ACLOCAL_ARGS, die durch das
Makefile des Ports, falls ntig,
auer Kraft gesetzt werden kann.Benutzung von GNU gettextGrundlegende BenutzungWenn Ihr Port gettext
bentigt, setzen Sie einfach
USE_GETTEXT auf yes,
und Ihr Port bekommt die Abhngigkeit von devel/gettext. Der Wert von
USE_GETTEXT kann auch die
bentigte Version der
libintl-Bibliothek angeben, der
grundlegenden Teil von
gettext – jedoch
wird von der Benutzung dieser Funktion
dringend abgeraten:
Ihr Port sollte einfach nur mit der aktuellen Version von
devel/gettext
funktionieren.Ein ziemlich hufiger Fall ist, dass ein Port
gettext und
configure benutzt. Normalerweise sollte
GNU configuregettext automatisch finden knnen.
Sollte das einmal nicht funktionieren, knnen
Hinweise ber den Ort von gettext
in CPPFLAGS und LDFLAGS wie
folgt bergeben werden:USE_GETTEXT= yes
CPPFLAGS+= -I${LOCALBASE}/include
LDFLAGS+= -L${LOCALBASE}/lib
GNU_CONFIGURE= yes
CONFIGURE_ENV= CPPFLAGS="${CPPFLAGS}" \
LDFLAGS="${LDFLAGS}"Natrlich kann der Code kompakter sein,
wenn es keine weiteren Flags gibt, die
configure bergeben werden
mssen:USE_GETTEXT= yes
GNU_CONFIGURE= yes
CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include" \
LDFLAGS="-L${LOCALBASE}/lib"Optionale BenutzungManche Softwareprodukte erlauben die Deaktivierung
von NLS - z.B. durch bergeben von
an
configure. In diesem Fall sollte Ihr
Port gettext abhngig vom Status
von WITHOUT_NLS
benutzen. Fr Ports mit niedriger bis mittlerer
Komplexitt knnen Sie sich auf das folgende
Idiom verlassen:GNU_CONFIGURE= yes
.if !defined(WITHOUT_NLS)
USE_GETTEXT= yes
PLIST_SUB+= NLS=""
.else
CONFIGURE_ARGS+= --disable-nls
PLIST_SUB+= NLS="@comment "
.endifDer nchste Punkt auf Ihrer Todo-Liste ist
dafr zu sorgen, dass die Message-Catalog-Dateien
nur bedingt in der Packliste aufgefhrt werden. Der
Makefile-Teil dieser Aufgabe ist
schon durch obiges Idiom erledigt.
Das wird im Abschnitt ber Fortgeschrittene
pkg-plist-Methoden
erklrt.
Kurz gesagt, jedes Vorkommen von
%%NLS%% in
pkg-plist wird durch
@comment , wenn NLS
abgeschaltet ist, oder durch eine leere Zeichenkette,
wenn NLS aktiviert ist, ersetzt. Folglich werden die
Zeilen, denen %%NLS%% vorangestellt
ist, zu reinen Kommentaren in der endgltigen
Packliste, wenn NLS abgeschaltet ist;
andernfalls wird der Prefix einfach nur ausgelassen.
Alles, was Sie jetzt noch machen mssen, ist
%%NLS%% vor jedem Pfad zu einer
Message-Catalog-Datei in pkg-plist
einzufgen. Zum Beispiel:%%NLS%%share/locale/fr/LC_MESSAGES/foobar.mo
%%NLS%%share/locale/no/LC_MESSAGES/foobar.moIn sehr komplexen Fllen mssen Sie
eventuell fortgeschrittenere Techniken als die hier
vorgestellte benutzen - wie z.B. Dynamische
Packlistenerzeugung.Behandlung von Message-Catalog-VerzeichnissenBei der Installation von Message-Catalog-Dateien
gibt es einen Punkt zu beachten. Ihr Zielverzeichnis,
das unter
LOCALBASE/share/locale
liegt, sollte nur selten von Ihrem Port erzeugt und
gelscht werden. Die Verzeichnisse fr die
gebruchlichsten Sprachen sind in
/etc/mtree/BSD.local.dist
aufgelistet; das heisst, sie sind Teil des Systems.
Die Verzeichnisse fr viele andere Sprachen sind
Teil des Ports devel/gettext. Sie wollen
vielleicht dessen pkg-plist
zur Hand nehmen, um festzustellen, ob Ihr Port eine
Message-Catalog-Datei fr eine seltene Sprache
installiert.Die Benutzung von perlWenn MASTER_SITES auf
MASTER_SITE_PERL_CPAN gesetzt ist,
dann ist der bevorzugte Wert von
MASTER_SITE_SUBDIR der Top-Level-Name
der Hierarchie. Zum Beispiel ist der empfohlene Wert
fr
p5-Module-Name-Module.
Die Top-Level-Hierarchie kann unter cpan.org
angeschaut werden. Dies sorgt dafr, dass der Port
weiter funktioniert, wenn sich der Autor des Moduls
ndert.Die Ausnahme dieser Regel ist, dass das entsprechende
Verzeichnis selber oder das Distfile in diesem Verzeichnis
nicht existiert. In solchen Fllen ist die Benutzung
der Id des Autors als MASTER_SITE_SUBDIR
erlaubt.Jede der Einstellungen unten kann sowohl auf
YES als auch auf eine
Versionszeichenkette wie 5.8.0+ gesetzt
werden. Wenn YES benutzt wird, bedeutet
das, dass der Port mit jeder der untersttzten
Perl-Versionen funktioniert.
Falls ein Port nur mit einer bestimmten
Perl-Version funktioniert, kann
darauf mit einer Versionszeichenkette hingewiesen werden,
die entweder eine Mindest- (z.B. 5.7.3+),
Maximal- (z.B. 5.8.0-) oder
Absolutversion (z.B. 5.8.3)
festlegt.
Variablen fr Ports, die perl
benutzenVariableBedeutungUSE_PERL5Bedeutet, dass der Port perl 5
zum Erstellen und zum Ausfhren benutzt.USE_PERL5_BUILDBedeutet, dass der Port perl 5
zum Erstellen benutzt.USE_PERL5_RUNBedeutet, dass der Port perl 5
zur Laufzeit benutzt.PERLDer gesamte Pfad zu
perl 5 – entweder
im Basissystem oder nachinstalliert ber einen
Port – ohne die Versionsnummer. Benutzen
Sie diese Variable, wenn Sie #!-Zeilen in Skripten
ersetzen mssen.PERL_CONFIGUREPerls MakeMaker fr die Konfiguration
benutzen. Dies impliziert
USE_PERL5.PERL_MODBUILDModule::Build fr configure, build und install
benutzen. Dies impliziert
PERL_CONFIGURE.Nur lesbare VariablenBedeutungPERL_VERSIONDie volle Version des installierten
perl (z.B.
5.8.9).PERL_LEVELDie installierte perl-Version
als ein Integer der Form MNNNPP
(z.B. 500809).PERL_ARCHWo perl architektur
abhngige Bibliotheken ablegt. Vorgabe ist
${ARCH}-freebsd.PERL_PORTName des perl-Ports, der
installiert ist (z.B. perl5).SITE_PERLVerzeichnis, in das die Site-spezifischen
perl-Pakete kommen. Dieser Wert
wird zu PLIST_SUB hinzugefgt.
Ports von Perl-Modulen, die keine offizielle
Webseite haben, sollen in der WWW-Zeile ihrer
pkg-descr-Datei auf
cpan.org verlinken.
Die bevorzugte URL-Form ist
http://search.cpan.org/dist/Module-Name/
(inklusive des Slash am Ende).Benutzung von X11X.Org-KomponentenDie X11-Implementierung, welche die Ports-Sammlung
bereitstellt, ist X.Org. Wenn Ihre Applikation von
X-Komponenten abhngt, listen Sie die bentigten
Komponenten in USE_XORG auf. Als dies
geschrieben wurde, wurden die folgenden Komponenten
bereitgestellt: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.Die aktuelle Liste finden Sie immer in
/usr/ports/Mk/bsd.xorg.mk.Das Mesa Projekt ist ein Versuch, eine freie OpenGL
Implementierung bereitzustellen. Sie knnen eine
Abhngigkeit von verschiedenen Komponenten diese
Projektes in der Variable USE_GL
spezifizieren. ouml;gliche Optionen sind: glut,
glu, glw, glew, gl und linux.
Fr Abwrtskompatibilitt gilt der
Wert yes als
glu.Beispiel fr USE_XORGUSE_XORG= xrender xft xkbfile xt xaw
USE_GL= gluViele Ports definieren USE_XLIB,
was dafr sorgt, dass der Port von allen (rund 50)
Bibliotheken abhngt. Diese Variable existiert, um
Abwrtskompatibilitt sicherzustellen (sie
stammt noch aus der Zeit vor dem modularem X.Org), und
sollte bei neuen Ports nicht mehr benutzt werden.
Variablen fr Ports, die X benutzenUSE_XLIBDer Port benutzt die X-Bibliotheken. Soll
nicht mehr verwendet werden - benutzen Sie
stattdessen eine Liste von Komponenten in
USE_XORG.USE_X_PREFIXSoll nicht mehr benutzt werden, ist jetzt
quivalent zu USE_XLIB und
kann einfach durch letzteres ersetzt
werden.USE_IMAKEDer Port benutzt imake.
Impliziert USE_X_PREFIX.XMKMFIst auf den Pfad zu xmkmf
gesetzt, wenn nicht in PATH. Vorgabe
ist xmkmf -a.
Variablen bei Abhngigkeit von einzelnen
Teilen von X11X_IMAKE_PORTEin Port, der imake und einige
andere Werkzeuge, die zum Erstellen von X11 benutzt
werden, bereitstellt.X_LIBRARIES_PORTEin Port, der die X11-Bibliotheken
bereitstellt.X_CLIENTS_PORTEin Port, der X11-Clients bereitstellt.X_SERVER_PORTEin Port, der den X11-Server bereitstellt.X_FONTSERVER_PORTEin Port, der den Fontserver bereitstellt.X_PRINTSERVER_PORTEin Port, der den Printserver bereitstellt.X_VFBSERVER_PORTEin Port, der den virtuellen Framebuffer-Server
bereitstellt.X_NESTSERVER_PORTEin Port, der einen nested X-Server
bereitstellt.X_FONTS_ENCODINGS_PORTEin Port, der Kodierungen fr Schriftarten
bereitstellt.X_FONTS_MISC_PORTEin Port, der verschiedene Bitmap-Schriftarten
bereitstellt.X_FONTS_100DPI_PORTEin Port, der 100dpi Bitmap-Schriftarten
bereitstellt.X_FONTS_75DPI_PORTEin Port, der 75dpi Bitmap-Schriftarten
bereitstellt.X_FONTS_CYRILLIC_PORTEin Port, der kyrillische Bitmap-Schriftarten
bereitstellt.X_FONTS_TTF_PORTEin Port, der &truetype;-Schriftarten
bereitstellt.X_FONTS_TYPE1_PORTEin Port, der Type1-Schriftarten bereitstellt.X_MANUALS_PORTEin Port, der entwicklerorientierte Manualpages
bereitstellt.
Benutzung von X11-bezogenen Variablen in einem
Port# Port benutzt X11-Bibliotheken und hngt 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 xpmPorts, die Motif bentigenWenn Ihr Port eine Motif-Bibliothek bentigt,
definieren Sie USE_MOTIF im
Makefile.
Die Standard-Motif-Implementierung ist x11-toolkits/open-motif.
Benutzer knnen stattdessen x11-toolkits/lesstif whlen,
indem Sie die WANT_LESSTIF-Variable
setzen.Die Variable MOTIFLIB wird von
bsd.port.mk auf die entsprechende
Motif-Bibliothek gesetzt. Bitte patchen Sie den Quelltext
Ihres Ports, sodass er berall
${MOTIFLIB} benutzt, wo die
Motif-Bibliothek im Original Makefile
oder Imakefile referenziert
wird.Es gibt zwei verbreitete Flle:Wenn sich der Port in seinem
Makefile oder
Imakefile auf die
Motif-Bibliothek als -lXm bezieht,
ersetzen Sie das einfach durch
${MOTIFLIB}.Wenn der Port in seinem
ImakefileXmClientLibs benutzt, ersetzen Sie
das durch ${MOTIFLIB}
${XTOOLLIB} ${XLIB}.Anmerkung: MOTIFLIB expandiert
(normalerweise) zu -L/usr/X11R6/lib
-lXm oder /usr/X11R6/lib/libXm.a
- d.h. Sie mssen kein
-L oder -l davor
einfgen.X11 SchriftartenWenn Ihr Port Schriftarten fr das
X-Window-System installiert, legen Sie diese nach
LOCALBASE/lib/X11/fonts/local.Erzeugen eines knstlichen
DISPLAY durch XvfbManche Applikationen bentigen ein
funktionierendes X11-Display, damit die Kompilierung
funktioniert. Das stellt fr 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
DISPLAY wird dem Build
bergeben.USE_DISPLAY= yesDesktop-EintrgeDesktop-Eintrge (Freedesktop
Standard) knnen in Ihrem Port einfach
ber die DESKTOP_ENTRIES-Variable
erzeugt werden. Diese Eintrge erscheinen dann im
Applikationsmen von standardkonformen
Desktop-Umgebungen wie GNOME oder KDE. Die
.desktop-Datei wird dann
automatisch erzeugt, installiert und der
pkg-plist hinzugefgt.
Die Syntax ist:DESKTOP_ENTRIES= "NAME" "COMMENT" "ICON" "COMMAND" "CATEGORY" StartupNotifyDie Liste der mglichen Kategorien ist auf der
Freedesktop
Webseite abrufbar.
StartupNotify zeigt an, ob die
Applikation den Status in Umgebungen, die
Startup-Notifications kennen, lschen wird.Beispiel:DESKTOP_ENTRIES= "ToME" "Roguelike game based on JRR Tolkien's work" \
"${DATADIR}/xtra/graf/tome-128.png" \
"tome -v -g" "Application;Game;RolePlaying;" \
falseBenutzung von GNOMEDas FreeBSD/GNOME-Projekt benutzt seine eigene
Gruppe von Variablen, um zu definieren, welche
GNOME-Komponenten ein bestimmter Port benutzt. Eine
umfassende Liste dieser Variablen existiert innerhalb
der Webseite des FreeBSD/GNOME-Projektes.Benutzung von QtPorts, die Qt bentigen
Variablen fr Ports, die Qt
bentigenUSE_QT_VERDer Port benutzt das Qt-Toolkit. Mgliche
Werte sind 3 und
4; diese spezifizieren die Major
Version von Qt, die benutzt werden soll.
Entsprechende Parameter werden an das
configure-Skript und
make bergeben.QT_PREFIXEnthlt den Pfad, wohin Qt installiert ist
(nur lesbare Variable).MOCEnthlt den Pfad von moc
(nur lesbare Variable). Voreingestellt entsprechend des
USE_QT_VER-Werts.QTCPPFLAGSZustzliche Compiler-Flags, die ber
CONFIGURE_ENV an das Qt-Toolkit
bergeben werden. Voreingestellt entsprechend des
USE_QT_VER-Wertes.QTCFGLIBSZustzliche Bibliotheken, die ber
CONFIGURE_ENV fr das Qt-Toolkit
gelinkt werden sollen. Voreingestellt entsprechend des
USE_QT_VER-Wertes.QTNONSTANDARDnderungen von
CONFIGURE_ENV,
CONFIGURE_ARGS und
MAKE_ENV sollen unterdrckt
werden.
Zustzliche Variablen fr Ports,
die Qt 4.xi benutzenQT_COMPONENTSSpezifiziert Tool– und
Bibliothek-Abhngigkeiten fr Qt4.
Siehe unten fr Details.UICEnthlt den Pfad von uic
(nur lesbare Variable). Voreingestellt entsprechend des
USE_QT_VER-Wertes.QMAKEEnthlt den Pfad von qmake
(nur lesbare Variable). Voreingestellt entsprechend des
USE_QT_VER-Wertes.QMAKESPECEnthlt den Pfad der Konfigurationsdatei
fr qmake
(nur lesbare Variable). Voreingestellt entsprechend des
USE_QT_VER-Wertes.
Wenn USE_QT_VER gesetzt ist,
werden dem configure-Skript einige
ntzliche Einstellungen bergeben: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}"Wenn USE_QT_VER auf
4 gesetzt ist, werden auch die folgenden
Einstellungen bergeben:CONFIGURE_ENV+= UIC="${UIC}" QMAKE="${QMAKE}" QMAKESPEC="${QMAKESPEC}"
MAKE_ENV+= QMAKESPEC="${QMAKESPEC}"Komponentenauswahl (nur bei Qt 4.x)Wenn USE_QT_VER auf 4 gesetzt ist,
knnen individuelle Qt4-Tool- und
Bibliotheksabhngigkeiten in der Variable
QT_COMPONENTS angegeben werden. An jede
Komponente kann _build oder
_run als Suffix angehngt werden,
was eine Abhngigkeit zur Build- bzw. Laufzeit angibt.
Ohne Suffix gilt die Abhngigkeit sowohl zur Build-
als auch zur Laufzeit. Bibliothekskomponenten sollten
normalerweise ohne Suffix angegeben werden,
Tool-Komponenten mit _build und
Plugin-Komponenten mit _run. Die
gebruchlichsten Komponenten werden im Folgenden
angegeben (alle verfgbaren Komponenten sind in
_QT_COMPONENTS_ALL in
/usr/ports/Mk/bsd.qt.mk
aufgelistet):
Verfgbare Qt4-BibliothekskomponentenNameBeschreibungcorelibKern-Bibliothek (kann weggelassen
werden– es sei denn, der Port benutzt nichts
auer corelib)guiGraphische
Benutzeroberflchen-BibliotheknetworkNetzwerk-BibliothekopenglOpenGL-Bibliothekqt3supportQt3-Kompatibilitts-BibliothekqtestlibModultest-BibliothekscriptSkript-BibliotheksqlSQL-BibliothekxmlXML-Bibliothek
Sie knnen herausfinden, welche Bibliotheken die
Applikation bentigt, indem Sie nach erfolgreicher
Kompilierung ldd auf die
Hauptbinrdatei anwenden.
Verfgbare Qt4-Tool-KomponentenNameBeschreibungmocmeta object compiler (wird zum Build fast
jeder Qt-Applikation bentigt)qmakeMakefile-Generator / Build-WerkzeugrccResource-Compiler (wird bentigt, falls
die Applikation *.rc oder
*.qrc Dateien
enthlt)uicUser-Interface-Compiler (wird bentigt,
falls die Applikation von Qt-Designer erzeugte
*.ui Dateien enthlt -
gilt fr praktisch jede Qt-Applikation mit
einer GUI)
Verfgbare Qt4-Plugin-KomponentenNameBeschreibungiconenginesSVG-Icon-Engine Plugin (wenn die Applikation
SVG-Icons mitliefert)imageformatsBildformatplugins fr GIF, JPEG, MNG und
SVG (wenn die Applikation Bilddateien
mitliefert)
Qt4-Komponenten auswhlenIn 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 Abhngigkeit von der
Core-Bibliothek impliziert, muss corelib nicht angegeben
werden. Die Qt4-Codeerzeugungstools moc, uic und rcc,
sowie der Makefile Generator qmake werden nur fr den
Build bentigt, deshalb bekommen die den Suffix
_build:USE_QT_VER= 4
QT_COMPONENTS= gui moc_build qmake_build rcc_build uic_buildZustzliche BesonderheitenWenn die Applikation keine
configure Datei, sondern eine
.pro Datei hat, knnen Sie das
Folgende benutzen:HAS_CONFIGURE= yes
do-configure:
@cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} \
${QMAKE} -unix PREFIX=${PREFIX} texmaker.proBeachten Sie die hnlichkeit mit der
qmake-Zeile im mitgelieferten
BUILD.sh-Skript. Die
bergabe von CONFIGURE_ENV
stellt sicher, dass qmake die
QMAKESPEC-Variable bergeben
bekommt, ohne die es nicht funktioniert.
qmake erzeugt Standard-Makefiles,
sodass es nicht ntig ist ein eigenes neues
build-Target zu schreiben.Qt-Applikationen sind oft so geschrieben, dass sie
plattformbergreifend sind, und oft ist X11/Unix
nicht die Plattform, auf der sie entwickelt werden.
Das sorgt oft fr bestimmte fehlende
Kleinigkeiten wie z.B.:Fehlende zustzliche
Include-Pfade.
Viele Applikationen kommen mit System-Tray-Icon
Support– unterlassen es aber Includes
oder Bibliotheken in den X11 Verzeichnissen zu suchen.
Sie knnen qmake ber die
Kommandozeile sagen, es soll Verzeichnisse zu den
Include- und Bibliotheks-Suchpfaden
hinzufgen - z.B.:${QMAKE} -unix PREFIX=${PREFIX} INCLUDEPATH+=${LOCALBASE}/include \
LIBS+=-L${LOCALBASE}/lib sillyapp.proFalsche Installations-Pfade.
Manchmal werden Daten wie Icons oder .desktop-Dateien
per Vorgabe in Verzeichnisse installiert, die nicht von
XDG-kompatiblen Applikationen durchsucht werden.
editors/texmaker
ist hierfr ein Beispiel– siehe
patch-texmaker.pro im
files-Verzeichnis dieses Ports
als eine Vorlage, die zeigt, wie man dies direkt in der
Qmake Projektdatei lst.Benutzung von KDEVariablen-Definitionen (KDE 3)
Variablen fr Ports, die KDE 3 benutzenUSE_KDELIBS_VERDer Port benutzt KDE-Bibliotheken. Die Variable
spezifiziert die Major Version von KDE, die benutzt
werden soll, und impliziert
USE_QT_VER der entsprechenden
Version. Der einzig mgliche Wert ist
3.USE_KDEBASE_VERDer Port benutzt die KDE-Base. Die Variable
spezifiziert die Major Version von KDE, die benutzt
werden soll, und impliziert
USE_QT_VER der entsprechenden
Version. Der einzig mgliche Wert ist
3.
Variablen-Definitionen (KDE 4)Falls Ihre Anwendung von KDE 4 abhngt, weisen Sie
USE_KDE4 eine Liste mit bentigten
Komponenten zu. Die am hufigsten gebrauchten sind
unten aufgelistet (_USE_KDE4_ALL in
/usr/ports/Mk/bsd.kde4.mk enthlt
stets die aktuelle Liste):
Verfgbare KDE 4-KomponentenNameBeschreibungakonadiPersonal Information Management
(PIM)-Speicherdienstautomoc4Lsst den Port das Bauwerkzeug automoc4
verwenden.kdebaseGrundlegende KDE-Anwendungen (Konqueror,
Dolphin, Konsole)kdeexpExperimentelle KDE-Bibliotheken (mit einer API,
die als non-stable eingestuft ist)kdehierStellt allgemeine KDE-Verzeichnisse
bereitkdelibsDie grundlegenden KDE-BibliothekenkdeprefixFalls in der Liste vorhanden, wird der Port
unter ${KDE4_PREFIX} statt
${LOCALBASE}
installiertpimlibsPIM-BibliothekenworkspaceAnwendungen und Bibliotheken, welche die
Desktopumgebung gestalten (Plasma, KWin)
KDE 4-Ports werden unter
${KDE4_PREFIX}, zur Zeit
/usr/local/kde4, installiert, um
Konflikte mit KDE 3-Ports zu verhindern. Dies wird durch
Auflisten der Komponente kdeprefix
erreicht, welche die standardmig gesetzte
Variable PREFIX berschreibt. Die
Ports bernehmen jedoch, jeden ber die
Umgebungsvariable MAKEFLAGS oder
make-Parameter festgelegten Wert
fr PREFIX.Es knnte bei der Installation von KDE 4-Ports zu
Konflikten mit KDE 3-Ports kommen, sodass diese bei
aktivierter kdeprefix-Komponente unter
${KDE4_PREFIX} installiert werden.
Der Standardwert von KDE4_PREFIX ist zur
Zeit /usr/local/kde4. Es ist auch
mglich, KDE 4-Ports unter einem angepassten
PREFIX zu installieren. Wenn
PREFIX als
MAKEFLAGS-Umgebungsvariable oder als
make-Parameter gesetzt wird,
berschreibt dies den von kdeprefix
festgelegten Wert.USE_KDE4-BeispielDies ist ein einfaches Beispiel fr einen KDE
4-Port. USE_CMAKE weist den Port an,
CMake, ein unter KDE
4-Projekten weit verbreitetes Konfigurationswerkzeug, zu
verwenden. USE_KDE4 legt die
Abhngigkeit von KDE-Bibliotheken und die Verwendung
von automoc4 whrend der
Kompilierung fest. Mit Hilfe des configure-Protokolls
knnen die KDE-Komponenten und andere
Abhngigkeiten festgestellt werden.
USE_KDE4 impliziert
USE_QT_VER nicht. Falls der Port Qt
4-Komponenten bentigt, sollten
USE_QT_VER gesetzt und verlangte
Komponenten festgelegt werden.USE_CMAKE= yes
USE_KDE4= automoc4 kdelibs kdeprefix
USE_QT_VER= 4
QT_COMPONENTS= qmake_build moc_build rcc_build uic_buildBenutzung von JavaVariablen-DefinitionenWenn Ihr Port ein Java™ Development Kit (JDK™)
bentigt, entweder zum Bauen, zur Laufzeit oder
sogar, um das Distfile auszupacken, dann sollten Sie
USE_JAVA setzen.Es gibt mehrere JDKs in der
Ports-Sammlung– von verschiedenen Anbietern
und in verschiedenen Versionen.
Wenn Ihr Port eine bestimmte dieser Versionen
bentigt, knnen Sie definieren welche.
Die aktuelle Version ist java/jdk16.
Variablen, die von Ports, die Java benutzen, gesetzt
werden mssenVariableBedeutungUSE_JAVASollte definiert sein, damit die brigen
Variablen irgendeinen Effekt haben.JAVA_VERSIONDurch Leerzeichen getrennte Liste von geeigneten
Java-Versionen fr den Port. Ein optionales
"+" ermglicht die Angabe eines
Bereiches von Versionen (mgliche Werte:
1.5[+] 1.6[+] 1.7[+]).JAVA_OSDurch Leerzeichen getrennte Liste von geeigneten
JDK-Port-Betriebssystemen fr den Port. (erlaubte
Werte: native linux).JAVA_VENDORDurch Leerzeichen getrennte Liste von geeigneten
JDK-Port-Anbietern fr den Port. (erlaubte Werte:
freebsd bsdjava sun openjdk).JAVA_BUILDBedeutet, falls gesetzt, dass der ausgewhlte
JDK-Port zu den Build-Abhngigkeiten des Ports
hinzugefgt werden soll.JAVA_RUNBedeutet, falls gesetzt, dass der ausgewhlte
JDK-Port zu den Laufzeit-Abhngigkeiten des Ports
hinzugefgt werden soll.JAVA_EXTRACTBedeutet, falls gesetzt, dass der ausgewhlte
JDK-Port zu den Extract-Abhngigkeiten des Ports
hinzugefgt werden soll.
Das Folgende ist eine Liste aller Variablen, die ein
Port bekommt, nachdem er USE_JAVA
gesetzt hat:
Bereitgestellte Variablen fr Ports,
die Java benutzenVariableWertJAVA_PORTDer Name des JDK-Ports (z.B.
'java/diablo-jdk16').JAVA_PORT_VERSIONDie volle Version des JDK Ports (z.B.
'1.6.0'). Wenn Sie nur die ersten
beiden Stellen dieser Versionsnummer bentigen,
benutzen Sie
${JAVA_PORT_VERSION:C/^([0-9])\.([0-9])(.*)$/\1.\2/}.JAVA_PORT_OSDas vom JDK-Port benutzte Betriebssystem (z.B.
'native').JAVA_PORT_VENDORDer Anbieter des JDK-Ports (z.B.
'freebsd').JAVA_PORT_OS_DESCRIPTIONBeschreibung des vom JDK-Port benutzten
Betriebssystems (z.B.
'Native').JAVA_PORT_VENDOR_DESCRIPTIONBeschreibung des Anbieters des JDK-Ports (z.B.
'FreeBSD Foundation').JAVA_HOMEPfad zum Installationsverzeichnis des JDK (z.B.
'/usr/local/diablo-jdk1.6.0').JAVACPfad zum Java-Compiler, der benutzt werden soll
(z.B. '/usr/local/diablo-jdk1.6.0/bin/javac'.JARPfad zum jar-Werkzeug, das
benutzt werden soll
(z.B.''/usr/local/diablo-jdk1.6.0/bin/jar oder
'/usr/local/bin/fastjar').APPLETVIEWERPfad zum appletviewer-Werkzeug
(z.B. '/usr/local/diablo-jdk1.6.0/bin/appletviewer').JAVAPfad zur java Binrdatei.
Benutzen Sie dies, um Java-Programme auszufhren
(z.B.'/usr/local/diablo-jdk1.6.0/bin/java').JAVADOCPfad zum
javadoc-Werkzeug.JAVAHPfad zum javah-Programm.JAVAPPfad zum javap-Programm.JAVA_KEYTOOLPfad zum keytool-Werkzeug.JAVA_N2APfad zum
native2ascii-Werkzeug.JAVA_POLICYTOOLPfad zum policytool Programm.JAVA_SERIALVERPfad zum
serialver-Werkzeug.RMICPfad zum RMI Stub/Skeleton-Generator,
rmic.RMIREGISTRYPfad zum RMI Registry-Werkzeug,
rmiregistry.RMIDPfad zum RMI Daemon rmid.JAVA_CLASSESPfad zum Archiv, das die JDK-Klassendateien
enthlt, ${JAVA_HOME}/jre/lib/rt.jar.
Sie knnen das java-debug
make-Target benutzen, um Information zum Debuggen
Ihres Ports zu erhalten. Es wird die Werte vieler
der obenangegebenen Variablen anzeigen.Zustzlich sind die folgenden Konstanten
definiert, damit alle Java-Ports auf eine konsistente
Art installiert werden knnen:
Konstanten, die fr Ports, welche Java benutzen,
definiert sindKonstanteWertJAVASHAREDIRDas Basis-Verzeichnis fr alles, was mit Java
zusammenhngt. Standardmig
${PREFIX}/share/java.JAVAJARDIRDas Verzeichnis, wohin JAR-Dateien installiert
werden sollen. Standardmig
${JAVASHAREDIR}/classes.JAVALIBDIRDas Verzeichnis, in dem JAR-Dateien, die von
anderen Ports installiert wurden, liegen.
Standardmig
${LOCALBASE}/share/java/classes.
Die entsprechenden Eintrge sind sowohl in
PLIST_SUB (dokumentiert in
) als auch in
SUB_LIST definiert.Kompilieren mit AntWenn der Port mit Apache Ant kompiliert werden soll,
muss er USE_ANT setzen. Ant wird dann
als das sub-make-Kommando betrachtet. Wenn kein
do-build-Target vom Port definiert ist,
wird eine Standardvorgabe benutzt, die einfach Ant
entsprechend MAKE_ENV,
MAKE_ARGS und
ALL_TARGET aufruft. Das hnelt dem
USE_GMAKE-Mechanismus, der in dokumentiert ist.Optimales VerfahrenWenn Sie eine Java-Bibliothek portieren, sollte Ihr Port
die JAR-Datei(en) in ${JAVAJARDIR}
installieren, und alles andere unter
${JAVASHAREDIR}/${PORTNAME}
(ausgenommen die Dokumentation - siehe unten). Um die
Gre der Packlistendatei zu reduzieren,
knnen die JAR-Datei(en) direkt im
Makefile angegeben werden. Benutzen
Sie einfach die folgende Anweisung (wobei
myport.jar der Name der JAR-Datei ist,
die als Teil des Ports installiert wird):PLIST_FILES+= %%JAVAJARDIR%%/myport.jarBeim Portieren einer Java-Applikation installiert der
Port normalerweise alles unter einem einzigen Verzeichnis
(inklusive seiner JAR-Abhngigkeiten). Die Benutzung
von ${JAVASHAREDIR}/${PORTNAME}
wird in dieser Beziehung dringend empfohlen. Es liegt
im Entscheidungsbereich des Portierenden, ob der Port
die zustzlichen JAR-Abhngigkeiten unter
diesem Verzeichnis installieren oder direkt die schon
installierten (aus ${JAVAJARDIR})
benutzen soll.Unabhngig von der Art Ihres Ports (Bibliothek
oder Applikation), sollte die zustzliche Dokumentation
an die gleiche Stelle
installiert werden wie bei jedem anderen Port auch.
Das JavaDoc-Werkzeug ist dafr bekannt einen
unterschiedlichen Satz von Dateien abhngig von der
Version des benutzten JDKs zu erstellen. Fr Ports,
die nicht die Benutzung eines bestimmten JDKs vorgeben,
ist es deshalb eine komplexe Aufgabe die Packliste
(pkg-plist) festzulegen. Dies ist
ein Grund, warum dringend angeraten wird, das
PORTDOCS-Makro zu benutzen.
Auerdem, selbst wenn Sie den Satz von Dateien,
den javadoc erzeugen wird,
voraussagen knnen, die Gre der
resultierenden pkg-plist
befrwortet die Benutzung von
PORTDOCS.Der Vorgabewert fr DATADIR ist
${PREFIX}/share/${PORTNAME}. Es ist
eine gute Idee, DATADIR fr
Java-Ports stattdessen auf
${JAVASHAREDIR}/${PORTNAME} zu setzen.
In der Tat wird DATADIR automatisch zu
PLIST_SUB (dokumentiert in ) hinzugefgt, d.h. Sie knnen
%%DATADIR%% direkt in
pkg-plist benutzen.Zu der Frage, ob Java-Ports aus dem Quelltext gebaut
werden, oder direkt bereitgestellte binre
Distributionen benutzt werden sollten, gab es, als dies
geschrieben wurde, keine definierte Richtlinie. Allerdings
ermutigen Mitglieder des &os;
Java-Projekts Porter dazu, Ihre Ports aus dem
Quelltext kompilieren zu lassen, wann immer dies kein
Problem darstellt.Alle Eigenschaften, die in diesem Abschnitt
prsentiert wurden sind in
bsd.java.mk implementiert.
Sollten Sie jemals der Meinung sein, dass Ihr Port
ausgefeiltere Java-Untersttzung bentigt,
schauen Sie bitte erst in das
bsd.java.mk CVS Log, weil es normalerweise immer
etwas Zeit braucht bis die neuesten Eigenschaften
dokumentiert sind. Wenn Sie glauben, dass der fehlende
Support auch fr viele andere Java Ports ntzlich
sein knnte, wenden Sie sich bitte an die
&a.java;.Obwohl es eine java-Kategorie
fr Fehlerberichte gibt, bezieht sich diese auf die
JDK-Portierungsbemhungen des &os; Java-Projektes.
Deshalb sollten Sie Ihren Java-Port in der
ports-Kategorie einreichen wie bei
jeden anderen Port auch - es sei denn, die Angelegenheit,
die Sie zu klren versuchen, steht in Zusammenhang
entweder mit einer JDK-Implementierung oder
bsd.java.mk.Gleichermaen gibt es eine definierte Richtlinie
fr die CATEGORIES eines Java-Ports,
die in erklrt
wird.Webanwendungen, Apache und PHPApache
Variablen fr Ports, die Apache
verwendenUSE_APACHEDer Port bentigt Apache. Mgliche Werte:
yes (beliebige Version),
1.3, 2.0,
2.2, 2.0+,
etc. – Standard ist Version
1.3.WITH_APACHE2Der Port bentigt Apache 2.0. Ist diese
Variable nicht gesetzt, so bentigt der Port
Apache 1.3. Diese Variable ist veraltet und sollte
nicht mehr verwendet werden.APXSVollstndiger Pfad zu der
apxs Binrdatei. Die Variable
kann neu gesetzt werden.HTTPDVollstndiger Pfad zu der
httpd Binrdatei.
Die Variable kann neu gesetzt werden.APACHE_VERSIONBeinhaltet die Versionsnummer des aktuell
installierten Apache (nur lesbare Variable).
Diese Variable ist nach Einbinden der Datei
bsd.port.pre.mk
verfgbar. Mgliche Werte:
13, 20,
22.APACHEMODDIRVerzeichnis der Apache-Module. Diese Variable wird
automatisch in pkg-plist ersetzt.APACHEINCLUDEDIRVerzeichnis der Apache Header-Dateien. Diese
Variable wird automatisch in pkg-plist ersetzt.APACHEETCDIR Verzeichnis der Apache-Konfigurationsdateien.
Diese Variable wird automatisch in pkg-plist
ersetzt.
Ntzliche Variablen fr Ports von
Apache-ModulenMODULENAMEName des Moduls. Standardwert ist
PORTNAME. Beispiel:
mod_helloSHORTMODNAMEDer gekrzte Name des Moduls.
Standardmig
wird der Wert von MODULENAME
bernommen.
Beispiel: helloAP_FAST_BUILDVerwende apxs zum Kompilieren
und Installieren des Moduls.AP_GENPLISTEine pkg-plist wird
automatisch erzeugt.AP_INCVerzeichnis fr zustzliche
Header-Dateien, die beim Kompilieren mitverwendet
werden.AP_LIBVerzeichnis fr zustzliche
Bibliothek-Dateien, welche beim Kompilieren
mitverwendet werden.AP_EXTRASZustzliche Flags fr
apxs.
WebanwendungenWebanwendungen sollten nach
PREFIX/www/programmname
installiert werden.
Der Einfachheit halber ist dieser Pfad sowohl im
Makefile als auch in
pkg-plist als
WWWDIR verfgbar. Der relative
Pfad PREFIX ist hingegen im
Makefile durch die Variable
WWWDIR_REL festgelegt.Der Benutzername und die Benutzergruppe,
mit deren Rechte Webanwendungen laufen, sind in
WWWOWN und WWWGRP
festgelegt. Standardwert ist bei beiden
www. Falls ein Port mit anderen
Rechten gestartet werden soll, so sollte die Anweisung
WWWOWN?= myuser verwendet werden. Dies
vereinfacht dem Benutzer eine Anpassung dieser Werte.Falls die Webanwendung nicht explizit Apache
bentigt, so sollte dieser auch nicht als
Abhngigkeit des Ports aufgefhrt werden.
Dadurch bleibt es dem Benutzer berlassen
Apache oder einen anderen Webserver zu verwenden.PHP
Variablen fr Ports, die PHP verwendenUSE_PHPDer Port bentigt PHP. Der Wert
yes bewirkt eine Abhngigkeit
des Ports von PHP. Es kann auch eine Liste der
bentigten PHP-Erweiterungen angegeben
werden. Beispiel:
pcre xml gettextDEFAULT_PHP_VERLegt die Version von PHP fest, die
standardmig installiert wird, falls noch
kein PHP vorhanden ist. Standardwert ist
4. Mgliche Werte sind:
4,5IGNORE_WITH_PHPDer Port funktioniert nicht mit der angegebenen
Version von PHP. Mgliche Werte:
4, 5USE_PHPIZEDer Port wird als PHP-Erweiterung gebaut.USE_PHPEXTDer Port wird wie eine PHP-Erweiterung
behandelt – Installation und
Eintragung in die PHP-Registry fr
Erweiterungen.USE_PHP_BUILDSetzt PHP als build-Anhngigkeit.WANT_PHP_CLIBentigt die Kommandozeilen-Version von
PHP.WANT_PHP_CGIBentigt die CGI-Version von PHP.WANT_PHP_MODBentigt das Apache-Modul von PHP.WANT_PHP_SCRBentigt die Kommandozeilen- oder die
CGI-Version von PHP.WANT_PHP_WEBBentigt das Apache-Modul oder die CGI-Version
von PHP.
PEAR ModuleDas Portieren von PEAR-Modulen ist sehr einfach.Mit Hilfe der Variablen FILES,
TESTS, DATA,
SQLS, SCRIPTFILES,
DOCS und EXAMPLES
knnen die zu installierenden Dateien angegeben werden.
Alle aufgefhrten Dateien werden automatisch in die
jeweiligen Verzeichnisse installiert und der Datei
pkg-plist hinzugefgt.Die Datei
${PORTSDIR}/devel/pear/bsd.pear.mk
muss am Ende des Makefiles
eingebunden werden.Beispiel eines Makefiles fr eine PEAR
KlassePORTNAME= 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>Python benutzenDie Ports untersttzen parallele Installationen
mehrerer Python-Versionen. Ports sollten sicherstellen,
dass der richtige python-Interpreter
verwendet wird – entsprechend der durch den
Benutzer definierbaren Variable
PYTHON_VERSION. Hufig bedeutet
dies, dass der Pfad zum python-Interpreter
durch den Wert der Variablen PYTHON_CMD
ersetzt werden muss.Ports, die Dateien unter
PYTHON_SITELIBDIR installieren, sollten
pyXY- als Prfix des Paketnamens
haben, sodass in deren Paketname die zugehrige
Python Version aufgefhrt wird.PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
Ntzliche Variablen fr Ports,
die Python verwendenUSE_PYTHONDer Port bentigt Python. Die minimal
bentigte Version kann durch Werte wie
2.3+ angegeben werden.
Bereiche von Versionsnummern knnen durch Angabe der
minimalen und maximalen Versionsnummer, getrennt durch
einen Gedankenstrich, festgelegt werden, z.B.:
2.1-2.3USE_PYDISTUTILSVerwende Python-distutils zum Konfigurieren,
Kompilieren und Installieren. Dies ist erforderlich,
falls der Port eine setup.py-Datei
beinhaltet. Dadurch werden die
do-build und
do-install-Ziele und eventuell
auch das do-configure-Ziel
bergangen, falls GNU_CONFIGURE
nicht definiert ist.PYTHON_PKGNAMEPREFIXWird als PKGNAMEPREFIX verwendet,
um Pakete fr unterschiedliche Python-Versionen zu
trennen. Beispiel: py24-PYTHON_SITELIBDIRVerzeichnis des site-Pakete Baums, der das
Installationsverzeichnis von Python (blicherweise
LOCALBASE) beinhaltet. Die
PYTHON_SITELIBDIR-Variable kann
sehr ntzlich bei der Installation von
Python-Modulen sein.PYTHONPREFIX_SITELIBDIRDie prfix-freie Variante von
PYTHON_SITELIBDIR. Benutzen Sie immer
%%PYTHON_SITELIBDIR%% in
pkg-plist, wenn mglich. Der
Standardwert von %%PYTHON_SITELIBDIR%%
ist
lib/python%%PYTHON_VERSION%%/site-packages
PYTHON_CMDKommandozeilen-Interpreter fr Python mit
Versionsnummer.PYNUMERICListe der Abhngigkeiten fr numerische
Erweiterungen.PYNUMPYListe der Abhngigkeiten fr die neue
numerische Erweiterung numpy.
(PYNUMERIC ist vom Anbieter als
veraltet deklariert)PYXMLListe der Abhngigkeiten fr
XML-Erweiterungen (wird ab Python 2.0 nicht mehr
bentigt, da im Basispaket enthalten).USE_TWISTEDSetzt die Abhngigkeit des Ports von
twistedCore. Die Liste der erforderlichen Komponenten
kann als Wert spezifiziert werden. Beispiel:
web lore pair flowUSE_ZOPESetzt Zope, eine Plattform fr Webanwendungen,
als Abhngigkeit des Ports. Setzt die
Versionsabhngigkeit von Python auf 2.3. Setzt
ZOPEBASEDIR auf das Verzeichnis,
in welches Zope installiert wurde.
Eine vollstndige Liste aller verfgbaren
Variablen ist in /usr/ports/Mk/bsd.python.mk
zu finden.Benutzung von Tcl/TkDie Ports-Sammlung untersttzt die parallele
Installation mehrerer
Tcl/Tk-Versionen. Ports sollten
mindestens die vorgegebene
Tcl/Tk-Version oder hher zu
untersttzen versuchen anhand der Variablen
USE_TCL und USE_TK. Es
ist mglich, die gewnschte Version von
tcl mit der Variable
WITH_TCL_VER vorzuschreiben.
uerst ntzliche Variablen fr
Ports, die Tcl/Tk
benutzenUSE_TCLDer Port bentigt die
Tcl-Bibliothek (nicht die
Shell). Eine notwendige Mindestversion kann mit Werten
wie 84+ angegeben werden. Einzelne nicht
untersttzte Versionen knnen mit der
Variable INVALID_TCL_VER festgelegt
werden.USE_TCL_BUILDDer Port bentigt
Tcl nur whrend der
Zeit, in der er gebaut wird.USE_TCL_WRAPPERPorts, welche zwar die
Tcl-Shell, aber nicht eine
bestimmte Version von tclsh
verlangen, sollten diese neue Variable verwenden. Ein
Wrapperskript fr tclsh wird
auf dem System installiert. Der Benutzer kann
festlegen, welche tcl-Shell
gewnscht ist bzw. verwendet werden soll.WITH_TCL_VERBenutzerdefinierte Variable, welche die
gewnschte Tcl-Version
bestimmt.PORTNAME_WITH_TCL_VERGleich wie WITH_TCL_VER, nur
portspezifisch.USE_TCL_THREADSFordere threadfhiges
Tcl/Tk.USE_TKDer Port bentigt die
Tk-Bibliothek (nicht die
Wish-Shell). Impliziert USE_TCL mit
dem gleichen Wert. Fr weitere Informationen
siehe die Beschreibung der Variable
USE_TCL.USE_TK_BUILDAnalog zur Variable
USE_TCL_BUILD.USE_TK_WRAPPERAnalog zur Variable
USE_TCL_WRAPPER.WITH_TK_VERAnalog zur Variable
WITH_TCL_VER und impliziert
WITH_TCL_VER mit dem gleichen
Wert.
Eine vollstndige Liste der zur Verfgung
stehenden Variablen befindet sich in
/usr/ports/Mk/bsd.tcl.mk.Emacs benutzenDieser Abschnitt muss noch geschrieben werden.Ruby benutzen
Ntzliche Variablen fr Ports,
die Ruby verwendenVariableDescriptionUSE_RUBYDer Port bentigt Ruby.USE_RUBY_EXTCONFDer Port verwendet extconf.rb
fr die Konfiguration.USE_RUBY_SETUPDer Port verwendet setup.rb
fr die Konfiguration.RUBY_SETUPLegt den alternativen Namen von
setup.rb fest. blich ist der
Wert install.rb.
Die folgende Tabelle listet ausgewhlte Variablen
auf, die Portautoren ber die Port-Infrastruktur zur
Verfgung stehen. Diese Variablen sollten fr die
Installation von Dateien in die entsprechenden Verzeichnisse
verwendet werden. Sie sollten in
pkg-plist so hufig wie mglich
verwendet und in einem Port nicht neu definiert werden.
Ausgewhlte read-only-Variablen fr Ports,
die Ruby verwendenVariableBeschreibungBeispielRUBY_PKGNAMEPREFIXWird als PKGNAMEPREFIX verwendet,
um Pakete fr verschiedene Versionen von Ruby zu
unterscheiden.ruby18-RUBY_VERSIONVollstndige Version von Ruby in der Form
x.y.z.1.8.2RUBY_SITELIBDIRInstallationsverzeichnis der von der
Rechnerarchitektur unabhngigen
Bibliotheken./usr/local/lib/ruby/site_ruby/1.8RUBY_SITEARCHLIBDIRInstallationsverzeichnis der von der Rechnerarchitektur
abhngigen Bibliotheken./usr/local/lib/ruby/site_ruby/1.8/amd64-freebsd6RUBY_MODDOCDIRInstallationsverzeichnis fr die Dokumentation
der Module./usr/local/share/doc/ruby18/patsyRUBY_MODEXAMPLESDIRInstallationsverzeichnis fr die Beispiele der
Module./usr/local/share/examples/ruby18/patsy
Eine vollstndige Liste der verfgbarenVariablen
kann in /usr/ports/Mk/bsd.ruby.mk
eingesehen werden.SDL verwendenDie Variable USE_SDL wird fr die
automatische Konfiguration der Abhngigkeiten fr Ports
benutzt, die auf SDL basierende Bibliotheken wie
devel/sdl12 und
x11-toolkits/sdl_gui
verwenden.Die folgenden SDL-Bibliotheken sind derzeit
bekannt:sdl: devel/sdl12gfx: graphics/sdl_gfxgui: x11-toolkits/sdl_guiimage: graphics/sdl_imageldbad: devel/sdl_ldbadmixer: audio/sdl_mixermm: devel/sdlmmnet: net/sdl_netsound: audio/sdl_soundttf: graphics/sdl_ttfFalls ein Port z.B. von
net/sdl_net und
audio/sdl_mixer
abhngt, so wre die Syntax:USE_SDL= net mixerDie Abhngigkeit von
devel/sdl12, die durch
net/sdl_net und
audio/sdl_mixer entsteht,
wird automatisch zum Port hinzugefgt.Falls USE_SDL im Port verwendet wird,
so wird automatisch:die Abhngigkeit von
sdl12-config zu
BUILD_DEPENDS hinzugefgtdie Variable SDL_CONFIG zu
CONFIGURE_ENV hinzugefgtdie Abhngigkeit der ausgewhlten
Bibliotheken zu LIB_DEPENDS
hinzugefgtUm zu berprfen, ob die SDL-Bibliotheken
verfgbar sind, kann die Variable
WANT_SDL verwendet werden:WANT_SDL=yes
.include <bsd.port.pre.mk>
.if ${HAVE_SDL:Mmixer}!=""
USE_SDL+= mixer
.endif
.include <bsd.port.post.mk>wxWidgets verwendenDieser Abschnitt beschreibt den Status der
wxWidgets-Bibliotheken in den Ports
und deren Einbindung in das Ports-System.EinfhrungEs gibt viele Probleme bei der gleichzeitigen Verwendung
unterschiedlicher Versionen von
wxWidgets-Bibliotheken (Dateien
unterschiedlicher
wxWidgets-Versionen haben
denselben Dateinamen). In den Ports wurde das Problem
dadurch gelst, dass jede Version unter einem eigenen
Namen installiert wird, der die Versionsnummer als Suffix
beinhaltet.Der offensichtliche Nachteil dabei ist, dass jede
Anwendung so verndert werden muss, dass sie die
erwartete Version vorfindet. Die meisten solcher
Anwendungen benutzen das
wx-config-Skript, um die bentigten
Compiler- und Linkerflags zu erhalten. Dieses Skript hat
fr jede verfgbare Version einen anderen Namen.
Die meisten Anwendungen beachten eine Umgebungsvariable oder
ein Argument beim configure-Skript, um
das gewnschte wx-config-Skript
festzulegen. Ansonsten mssen sie gepatcht
werden.Auswahl der VersionUm festzulegen, welche Version der
wxWidgets verwendet werden soll,
gibt es zwei Variablen (falls nur eine der beiden definiert
wird, so wird die andere auf einen Standardwert
gesetzt):
Variablen, um die
wxWidgets-Version festzulegenVariableBeschreibungStandardwertUSE_WXListe der Versionen, die der Port verwenden
kannAlle verfgbaren VersionenUSE_WX_NOTListe der Versionen, die der Port nicht verwenden
kannNichts
Es folgt eine Liste an mglichen
wxWidgets-Versionen und deren
zugehriger Port:
Ab Version 2.5 werden auch Versionen in
Unicode untersttzt und ber einen Unterport
mit dem Suffix -unicode installiert.
Dies kann aber auch ber Variablen gehandhabt
werden (siehe ).Die Variablen in
knnen auf einen oder mehrere (durch Leerzeichen
getrennt) der folgenden Werte gesetzt werden:
Spezifikationen der
wxWidgets-VersionenBeschreibungBeispielEinzelne Version2.4Aufsteigende Versionsnummern2.4+Absteigende Versionsnummern2.6-Versionsinterval (muss aufsteigend sein)2.4-2.6
Desweiteren gibt es Variablen, ber die eine
bevorzugte Version festgelegt werden kann. Die Versionen
knnen als Liste angegeben werden, wobei die
Reihenfolge der Priorisierung entspricht.
Variablen zur Festlegung der bevorzugten
wxWidgets-VersionNameBestimmt frWANT_WX_VERden PortWITH_WX_VERden Benutzer
KomponentenauswahlDesweiteren gibt es Anwendungen, die nicht direkt
wxWidgets-Bibliotheken sind, aber
trotzdem mit diesen zusammenhngen. Diese Anwendungen
knnen ber die Variable
WX_COMPS festgelegt werden. Die folgenden
Komponenten sind verfgbar:
Der Typ der Abhngigkeit kann fr jede
Komponente durch hinzufgen eines Suffix (durch
Strichpunkt getrennt) festgelegt werden. Falls der Typ nicht
angegeben wird, wird ein Standardwert verwendet (siehe ). Die folgenden Typen sind
verfgbar:
Verfgbare Typen von
wxWidgets-AbhngigkeitenNameBeschreibungbuildKomponente wird zum Bau
bentigt – quivalent zu
BUILD_DEPENDSrunKomponente wird zum Ausfhren
bentigt – quivalent zu
RUN_DEPENDSlibKomponente wird zum Bau und Ausfhren
bentigt – quivalent zu
LIB_DEPENDS
Die Standardwerte fr die einzelnen Komponenten
sind in der folgenden Tabelle aufgefhrt:
Standardtypen der
wxWidgets-AbhngigkeitenKomponenteTyp der Abhngigkeitwxlibcontriblibpythonrunmozillalibsvglib
Auswahl von
wxWidgets-KomponentenDer folgende Ausschnitt entspricht einem Port, der
die wxWidgets-Version
2.4 und die zugehrigen
Bibliotheken verwendet.USE_WX= 2.4
WX_COMPS= wx contribUnicodeDie wxWidgets-Bibliotheken
untersttzen Unicode seit der Version
2.5. In den Ports sind beide Versionen
verfgbar und knnen ber die folgenden
Variablen ausgewhlt werden:
Variablen, um Unicode in den
wxWidgets-Versionen
auszuwhlenVariableBeschreibungBestimmt frWX_UNICODEDer Port funktioniert
ausschlielich mit der
Unicode-Versionden PortWANT_UNICODEDer Port funktioniert in beiden
Versionen – bevorzugt wird jedoch
Unicodeden PortWITH_UNICODEDer Port verwendet die Unicode-Versionden BenutzerWITHOUT_UNICODEDer Port verwendet, falls untersttzt, die
normale Version (falls WX_UNICODE
nicht definiert ist)den Benutzer
Die Variable WX_UNICODE darf
nicht bei Ports benutzt werden, die sowohl die Version mit
als auch ohne Untersttzung fr Unicode
verwenden knnen. Falls der Port
standardmig Untersttzung fr
Unicode bieten soll, verwenden Sie
WANT_UNICODE stattdessen.Feststellen der installierten VersionUm eine bereits installierte Version zu finden, muss
WANT_WX definiert werden. Falls diese
Variable nicht auf eine bestimmte Versionsnummer gesetzt
wird, werden die Komponenten einen Suffix mit der
Versionsnummer tragen. Die Variable
HAVE_WX wird gesetzt, falls eine
installierte Version vorgefunden wurde.Installierte
wxWidgets-Versionen
und –Komponenten feststellenDer folgende Ausschnitt kann in einem Port verwendet
werden, der wxWidgets
verwendet, falls es installiert ist, oder falls eine
Option dafr ausgewhlt wurde.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
.endifDer folgende Ausschnitt kann verwendet werden, um
die Untersttzung fr
wxPython zustzlich zu der
von wxWidgets zu aktivieren
(beide in Version 2.6), wenn das
installiert ist, oder die Option ausgewhlt
wurde.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
.endifVordefinierte VariablenDie folgenden Variablen sind in den Ports
verfgbar (nachdem sie entsprechend definiert wurden).
Vordefinierte Variablen fr Ports, die
wxWidgets verwendenNameBeschreibungWX_CONFIGPfad zum wxWidgetswx-config-Skript (mit
unterschiedlichem Namen)WXRC_CMDPfad zum wxWidgetswxrc-Programm (mit
unterschiedlichem Namen)WX_VERSIONVersion der wxWidgets, die
verwendet werden soll (z.B. 2.6)WX_UNICODEFalls Untersttzung fr Unicode nicht
explizit definiert, jedoch verwendet wird, dann wird die
Untersttzung automatisch aktiviert.
Verarbeitung in
bsd.port.pre.mkFalls die Variablen gleich nach dem Importieren von
bsd.port.pre.mk benutzt werden sollen,
so muss die Variable WX_PREMK definiert
werden.Falls WX_PREMK definiert ist, so
werden Version, Abhngigkeiten, Komponenten und
vordefinierte Variablen nicht gendert, wenn die
Variablen des wxWidgets-Ports
nach dem Einbinden von
bsd.port.pre.mk gendert
werden.Verwendung von
wxWidgets-Variablen
in KommandosDer folgende Ausschnitt zeigt die Verwendung von
WX_PREMK durch Ausfhren des
wx-config-Skriptes, um die
vollstndige Version als Zeichenkette zu erhalten,
diese dann einer Variablen zuzuweisen und die Variable
anschlieend einem Programm zu
bergeben.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}"
.endifDie wxWidgets-Variablen
knnen problemlos in Kommandos benutzt werden, falls
diese in Targets ohne gesetztes
WX_PREMK verwendet werden.Weitere configure-ArgumenteEinige GNU configure-Skripte
knnen wxWidgets nicht
auffinden, falls nur die Umgebungsvariable
WX_CONFIG gesetzt ist, sondern
bentigen zustzliche Argumente. Dafr kann
die Variable WX_CONF_ARGS benutzt
werden.
Verwendung von LuaDieser Abschnitt beschreibt den Status der
Lua-Bibliotheken in den Ports
und deren Einbindung in das Ports System.EinfhrungEs gibt viele Probleme bei der gleichzeitigen
Verwendung unterschiedlicher Versionen von
Lua-Bibliotheken (Dateien
unterschiedlicher Versionen haben denselben Dateinamen). In
den Ports wurde das Problem gelst, indem jede Version
unter einem eigenen Namen mit der Versionsnummer als Suffix
installiert wird.Der offensichtliche Nachteil dabei ist, dass jede
Anwendung so verndert werden muss, dass sie die
erwartete Version vorfindet. Dies kann jedoch durch
zustzliche Flags fr Compiler und Linker
gelst werden.Auswahl der VersionUm festzulegen, welche Version von
Lua verwendet werden soll, gibt
es zwei Variablen (falls nur eine der beiden definiert ist,
so wird die andere auf einen Standardwert gesetzt):
Variablen, um die
Lua-Version festzulegenVariableBeschreibungStandardwertUSE_LUAListe der Versionen, welche der Port verwenden
kannAlle verfgbaren VersionenUSE_LUA_NOTListe der Versionen, die der Port nicht verwenden
kannNichts
Es folgt eine Liste an mglichen
Lua-Versionen und deren
zugehriger Port:
Die Variablen in
knnen auf einen oder mehrere (durch Leerzeichen
getrennt) der folgenden Werte gesetzt werden:
Spezifikationen der
Lua-VersionenBeschreibungBeispielSpezielle Version4.0Aufsteigende Versionen5.0+Absteigende Versionen5.0-Versionenintervall (muss aufsteigend sein)5.0-5.1
Desweiteren gibt es Variablen, ber die eine
bevorzugte Version festgelegt werden kann. Die Versionen
knnen als Liste angegeben werden, wobei die
Reihenfolge der Priorisierung entspricht.
Variablen zur Festlegung der bevorzugten
Lua-VersionNameBestimmt frWANT_LUA_VERden PortWITH_LUA_VERden Benutzer
Auswahl der
Lua-VersionDer folgende Ausschnitt entspricht einem Port, der
Lua in den Versionen
5.0 oder 5.1
verwenden kann und standardmig
5.0 verwendet. Diese Einstellung kann
durch die benutzerdefinierte Variable
WITH_LUA_VER berschrieben
werden.USE_LUA= 5.0-5.1
WANT_LUA_VER= 5.0KomponentenauswahlDesweiteren gibt es Anwendungen, die nicht direkt
Lua-Bibliotheken sind, aber
trotzdem mit diesen zusammenhngen. Diese Anwendungen
knnen ber die Variable
LUA_COMPS festgelegt werden. Die
folgenden Komponenten sind verfgbar:
Verfgbare
Lua-KomponentenNameBeschreibungVersionseinschrnkungenluaHauptbibliothekKeinetoluaBibliothek fr die Untersttzung von C/C++-Code4.0-5.0rubyRuby-Bindungen4.0-5.0
Es gibt weitere Komponenten, die jedoch Module
fr den Interpreter sind und nicht von Anwendungen
benutzt werden (nur von anderen Modulen).Der Typ der Abhngigkeit kann fr jede
Komponente durch Hinzufgen eines Suffix (durch
Strichpunkt getrennt) festgelegt werden. Falls der Typ nicht
angegeben wird, wird ein Standardwert verwendet (siehe ). Die folgenden Typen sind
verfgbar:
Verfgbare Typen von
Lua-AbhngigkeitenNameBeschreibungbuildKomponente wird zum Bau
bentigt – quivalent zu
BUILD_DEPENDSrunKomponente wird zum Ausfhren
bentigt – quivalent zu
RUN_DEPENDSlibKomponente wird zum Bau und zum Ausfhren
bentigt – quivalent zu
LIB_DEPENDS
Die Standardwerte fr die einzelnen Komponenten
sind in der folgenden Tabelle aufgefhrt:
Standardtypen fr
Lua-AbhngigkeitenKomponenteTyp der Abhngigkeitlualib fr
4.0-5.0 (shared) und
build fr 5.1
(static)toluabuild (static)rubylib (shared)
Auswahl von
Lua-KomponentenDer folgende Ausschnitt entspricht einem Port,
welcher die Lua-Version
4.0 und die zugehrigen
Ruby-Bindungen
verwendet.USE_LUA= 4.0
LUA_COMPS= lua rubyFeststellen der installierten VersionUm eine bereits installierte Version zu finden, muss
WANT_LUA definiert werden. Falls diese
Variable nicht auf eine bestimmte Versionsnummer gesetzt
wird, werden die Komponenten einen Suffix mit der
Versionsnummer tragen. Die Variable
HAVE_LUA wird gesetzt, falls eine
installierte Version vorgefunden wurde.Installierte
Lua-Versionen
und– Komponenten feststellenDer folgende Ausschnitt kann in einem Port verwendet
werden, der Lua benutzt, falls
es installiert ist oder eine Option dafr
ausgewhlt wurde.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
.endifDer folgende Ausschnitt kann verwendet werden, um
die Untersttzung fr
tolua zustzlich zu der
von Lua zu aktivieren (beide in
Version 4.0), wenn dies installiert ist oder die Option
ausgewhlt wurde.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
.endifVordefinierte VariablenDie folgenden Variablen sind in den Ports
verfgbar (nachdem sie entsprechend definiert wurden).
Vordefinierte Variablen fr Ports, die
Lua verwendenNameBeschreibungLUA_VERDie Lua-Version, die
verwendet wird (z.B. 5.1)LUA_VER_SHDie Hauptversion fr
shared-Lua-Bibliotheken (z.B.
1)LUA_VER_STRDie Lua-Version ohne die
Punkte (z.B. 51)LUA_PREFIXDer Prfix, unter dem
Lua (und Komponenten)
installiert istLUA_SUBDIRDas Verzeichnis unter
${PREFIX}/bin,
${PREFIX}/share und
${PREFIX}/lib, in welchem
Lua installiert istLUA_INCDIRDas Verzeichnis, in dem
Lua- und
tolua-Header-Dateien
installiert sindLUA_LIBDIRDas Verzeichnis, in dem
Lua– und
tolua-Bibliotheken
installiert sindLUA_MODLIBDIRDas Verzeichnis, in dem
Lua Modul-Bibliotheken
(.so) installiert sindLUA_MODSHAREDIRDas Verzeichnis, in dem
Lua-Module
(.lua) installiert sindLUA_PKGNAMEPREFIXDer Paketnamen-Prfix, der von
Lua-Modulen verwendet
wirdLUA_CMDDas Verzeichnis, in dem der
Lua-Interpreter liegtLUAC_CMDDas Verzeichnis, in dem der
Lua-Compiler liegtTOLUA_CMDDas Verzeichnis, in dem das
tolua-Programm liegt
Einem Port mitteilen, in welchem Verzeichnis
Lua liegtDer folgende Ausschnitt zeigt, wie einem Port,
welcher ein configure-Skript verwendet, mitgeteilt werden
kann, wo die Lua-Header-Dateien
und Bibliotheken liegen.
USE_LUA= 4.0
GNU_CONFIGURE= yes
CONFIGURE_ENV= CPPFLAGS="-I${LUA_INCDIR}" LDFLAGS="-L${LUA_LIBDIR}"Verarbeitung in
bsd.port.pre.mkFalls die Variablen gleich nach dem Einbinden von
bsd.port.pre.mk benutzt werden sollen,
so muss die Variable LUA_PREMK definiert
werden.Falls LUA_PREMK definiert ist, so
werden Version, Abhngigkeiten, Komponenten und
vordefinierte Variablen nicht gendert, wenn die
Variablen des Lua-Ports
nach dem Einbinden von
bsd.port.pre.mk gendert
werden.Verwendung von
Lua-Variablen in
KommandosDer folgende Ausschnitt zeigt die Verwendung von
LUA_PREMK durch Ausfhren des
Lua-Interpreters, um die
vollstndige Version als Zeichenkette zu erhalten,
diese dann einer Variablen zuzuweisen und die Variable
schlielich einem Programm zu bergeben.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}"
.endifDie Lua-Variablen
knnen problemlos in Befehlen benutzt werden, falls
diese in Targets ohne gesetztes
LUA_PREMK verwendet werden.Xfce verwendenDie USE_XFCE-Variable wird fr
die automatische Konfiguration der Abhngigkeiten
eingesetzt, welche die Xfce-Basisbibliotheken oder Anwendungen
wie x11-toolkits/libxfce4gui und
x11-wm/xfce4-panel
verwenden.Die folgenden Xfce-Bibliotheken und -Anwendungen werden
derzeit untersttzt:libexo: x11/libexolibgui: x11-toolkits/libxfce4guilibutil: x11/libxfce4utillibmcs: x11/libxfce4mcsmcsmanager: sysutils/xfce4-mcs-managerpanel: x11-wm/xfce4-panelthunar: x11-fm/thunarwm: x11-wm/xfce4-wmxfdev: dev/xfce4-dev-toolsDie folgenden zustzlichen Parameter werden
untersttzt:configenv: Benutzen Sie dies, wenn Ihr Port eine
speziell angepasste
CONFIGURE_ENV-Variable bentigt,
um seine erforderlichen Bibliotheken zu finden.
-I${LOCALBASE}/include
-L${LOCALBASE}/lib wird CPPFLAGS
hinzugefgt und ergibt
CONFIGURE_ENV.Wenn also ein Port von sysutils/xfce4-mcs-manager
abhngt und die speziellen CPPFLAGS in seiner
configure-Umgebung verlangt, dann wrde die Syntax wie
folgt aussehen:USE_XFCE= mcsmanager configenvMozilla verwenden
Variablen fr Ports, die Mozilla verwendenUSE_GECKOVom Port untersttzte Gecko-Backends. Mgliche
Werte sind:
libxul (libxul.so),
seamonkey (libgtkembedmoz.so,
(veraltet, sollte daher nicht mehr verwendet werden).USE_FIREFOXDer Port bentigt Firefox, um korrekt
zu funktionieren. Mgliche Werte sind:
yes (verwendet die Standardversion),
40, 36,
35. Die Standardversion ist derzeit
40.USE_FIREFOX_BUILDUm den Port zu bauen, muss Firefox installiert
sein. Wird diese Variable gesetzt, wird
automatisch auch USE_FIREFOX
gesetzt.USE_SEAMONKEYDer Port bentigt Seamonkey, um korrekt
zu funktionieren. Mgliche Werte sind:
yes (verwendet die Standardversion),
20, 11
(veraltet, sollte daher nicht mehr verwendet werden).
Die Standardversion ist 20.USE_SEAMONKEY_BUILDUm den Port zu bauen, muss Seamonkey installiert
sein. Wird diese Variable gesetzt, wird
automatisch auch USE_SEAMONKEY
gesetzt.USE_THUNDERBIRDDieser Port bentigt Thunderbird, um korrekt
zu funktionieren. Mgliche Werte sind:
yes (verwendet die Standardversion),
31, 30
(veraltet, sollte daher nicht mehr verwendet werden).
Die Standardversion ist 31.USE_THUNDERBIRD_BUILDUm den Port zu bauen, muss Thunderbird installiert
sein. Wird diese Variable gesetzt, wird
automatisch auch USE_THUNDERBIRD
gesetzt.
Eine komplette Liste aller verfgbaren Variablen finden
Sie in der Datei
/usr/ports/Mk/bsd.gecko.mk.Benutzung von Datenbanken
Variablen fr Ports, die Datenbanken
benutzenVariableBedeutungUSE_BDBFalls die Variable auf yes
gesetzt ist, fge eine Abhngigkeit von
databases/db41
hinzu. Die Variable kann auch folgende Werte
annehmen: 40, 41, 42, 43, 44, 46, 47, 48 oder 51.
Sie knnen eine Folge akzeptierter Werte
angeben - USE_BDB=42+ stellt die
hchste installierte Version fest und greift
auf 42 zurck, falls sonst nichts installiert
ist.USE_MYSQLFalls die Variable auf yes
gesetzt ist, fge databases/mysql55-server
als Abhngigkeit hinzu. Die damit
verknpfte Variable
WANT_MYSQL_VER kann Werte wie
323, 40, 41, 50, 51, 52, 55, oder 60 annehmen.USE_PGSQLFalls die Variable auf yes
gesetzt ist, fge eine Abhngigkeit von
databases/postgresql84
hinzu. Die damit verknpfte Variable
WANT_PGSQL_VER kann Werte wie 73,
74, 80, 81, 82, 83, oder 90 annehmen.
Weitere Informationen zu diesem Thema finden sich in der
Datei
bsd.database.mk.Starten und Anhalten von Diensten (rc Skripten)rc.d-Skripten werden zum Starten
von Diensten whrend des Systemstarts verwendet und um
den Administratoren einen Standardweg zum Anhalten und Starten
von Diensten zu bieten. Ports halten sich an dieses
systemweite rc.d-Framework. Details zu
deren Benutzung knnen im rc.d Kapitel
des Handbuchs nachgelesen werden. Ausfhrliche
Beschreibungen der verfgbaren Befehle stehen in
&man.rc.8; und &man.rc.subr.8;. Desweiteren gibt es einen Artikel zu
praktischen Aspekten bezglich
rc.d-Skripten.Ein oder mehrere rc.d-Skripten knnen installiert
werden mittels:USE_RC_SUBR= doormandSkripten mssen im Unterverzeichnis
files abgelegt und jeder Skript-Datei
muss ein .in-Suffix hinzugefgt
werden. Standardmige
SUB_LIST-Ersetzungen werden fr diese
Dateien untersttzt. Die Verwendung von
%%PREFIX%% und
%%LOCALBASE%% wird dringend empfohlen.
Nheres zu SUB_LIST kann im zugehrigen Kapitel
nachgelesen werden.Fr &os;-Versionen, die lter als 6.1-RELEASE
sind, ist die Integration mittels &man.rcorder.8;
mglich, indem USE_RCORDER anstatt
USE_RC_SUBR 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
FILESYSTEMS-Skripten in
rc.d des Basissystems gestartet sein
muss.Seit &os; 6.1-RELEASE sind lokale
rc.d-Skripten (inklusive der durch Ports
installierten) im allgemeinen &man.rcorder.8; des
Basissystems.Beispiel eines einfachen
rc.d-Skripts:#!/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"Solange kein guter Grund dafr besteht, einen Dienst
frher starten zu lassen, sollten alle Ports-Skripten
REQUIRE: LOGIN verwenden.
Falls der Port von einem bestimmten Benutzer (auer
root) ausgefhrt wird, ist dies zwingend.
KEYWORD: shutdown 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, wre dies
nicht notwendig.Fr 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
doormand_flags="" in seiner
rc.conf.local-Datei stehen haben, und
eine Variablenzuweisung mittels ":=" wrde in
diesem Fall die Benutzerdefinition berschreiben.Es sollten keine weiteren Skripten mit der
.sh-Endung hinzugefgt werden.
Irgendwann wird es ein Massenumbenennen aller Skripten im
Repository geben, die immer noch diese Endung haben.Anhalten und Deinstallieren von DienstenEs ist mglich, dass ein Dienst whrend 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.Der Datei pkg-plist sollte eine
Zeile wie folgt zugefgt werden:@stopdaemon doormandDas Argument muss dabei mit dem Inhalt der
USE_RC_SUBR-Variablen
bereinstimmen.Hinzufgen von Benutzern und GruppenManche Ports setzen voraus, dass ein bestimmter Benutzer
auf dem System angelegt ist. Whlen Sie in einem solchen
Fall eine freie Kennnummer zwischen 50 und 999 aus und tragen
Sie diese in ports/UIDs (fr
Benutzer) oder ports/GIDs (fr
Gruppen) ein. Stellen Sie dabei sicher, dass Sie keine
Kennnummer auswhlen, die bereits vom System oder von
anderen Ports verwendet wird.Erstellen Sie bitte eine entsprechende Patch-Datei
fr diese beiden Dateien, wenn fr Ihren Port ein
neuer Benutzer oder eine neue Gruppe angelegt werden
muss.Sie knnen dann die Variablen
USERS und GROUPS im
Makefile benutzen, um bei der
Port-Installation das automatische Anlegen des Benutzers zu
veranlassen.USERS= pulse
GROUPS= pulse pulse-access pulse-rtDie Liste mit den momentan belegten UIDs (GIDs) befindet
sich in ports/UIDs
(ports/GIDs).Von Kernelquellen abhngige PortsEinige Ports (beispielsweise vom Kernel ladbare Module)
bentigen die Kernelsourcen, damit sie gebaut werden
knnen. Die folgenden Zeilen beschreiben den korrekten
Weg, wie Sie feststellen knnen, ob der Benutzer die
Kernelsourcen installiert hat:.if !exists(${SRC_BASE}/sys/Makefile)
IGNORE= requires kernel sources to be installed
.endifFortgeschrittene
pkg-plist-Methodennderungen an pkg-plist mit
Hilfe von make-VariablenEinige Ports, insbesondere die
p5--Ports, mssen, abhngig von
ihren Konfigurationsoptionen (oder im Falle der p5-Ports von
der perl-Version), die
pkg-plist verndern. Um dies zu
vereinfachen, werden fr jeden Eintrag in
pkg-plist die Variablen
%%OSREL%%, %%PERL_VER%%
und %%PERL_VERSION%% durch die jeweiligen
Werte ersetzt. Der Wert von %%OSREL%% ist
die Revisionsnummer des Betriebssystems (z.B.
4.9). %%PERL_VERSION%%
und %%PERL_VER%% geben die
vollstndige Versionsnummer von perl
(z.B. 5.8.9) an. Weitere, die
Dokumentationsdateien des Ports betreffende
%%VARS%%, werden
im entsprechenden
Abschnitt erlutert.Falls Sie weitere Ersetzungen von Variablen
durchfhren mssen, knnen Sie in der Variable
PLIST_SUB eine Liste von
VAR=VALUE-Paaren
angeben, wobei in der pkg-plist%%VAR%% durch
VALUE ersetzt wird.Wenn Sie z.B. einen Port haben, der viele Dateien in ein
versionsspezifisches Unterverzeichnis installiert, dann
knnen Sie etwas wieOCTAVE_VERSION= 2.0.13
PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION}in das Makefile schreiben und
%%OCTAVE_VERSION%% verwenden,
unabhngig davon, wo die Variable in
pkg-plist verwendet wird. In diesem Fall
mssen Sie bei einem Upgrade des Ports nicht dutzende
(oder manchmal sogar hunderte) Zeilen in
pkg-plist anpassen.Falls Ihr Port in Abhngigkeit von den
ausgewhlten Optionen Dateien installiert, ist es
blich, den entsprechenden Zeilen in der
pkg-plist eine Zeichenfolge
%%TAG%% voranzustellen, wobei der
Platzhalter TAG der Variablen
PLIST_SUB im Makefile
bei gleichzeitiger Zuweisung des speziellen Werts
@comment hinzugefgt wird, der die
Paket-Werkzeuge die Zeile ignorieren lsst:.if defined(WITH_X11)
PLIST_SUB+= X11=""
.else
PLIST_SUB+= X11="@comment "
.endifund in der pkg-plist:%%X11%%bin/foo-guiDiese Ersetzung (ebenso wie das Hinzufgen weiterer
Manualpages) wird
zwischen den pre-install- und
do-install-Targets ausgefhrt,
indem aus PLIST
gelesen und in
TMPPLIST geschrieben
wird (Standard:
WRKDIR/.PLIST.mktmp).
Falls Ihr Port also
PLIST whrend dem
Erstellen generiert, so sollte dies vor oder in
pre-install geschehen. Muss Ihr Port
die resultierende Datei verndern, so sollte dies in
post-install mit der Ausgabedatei
TMPPLIST
erfolgen.Eine weitere Mglichkeit, die Paketliste eines
Ports zu verndern, besteht darin die Variablen
PLIST_FILES und
PLIST_DIRS zu setzen. Der Wert jeder der
beiden Variablen stellt eine Liste von Pfadnamen dar, die
zusammen mit dem Inhalt von
PLIST in
TMPPLIST geschrieben
wird. Dabei unterliegen die Namen in
PLIST_FILES und
PLIST_DIRS der weiter oben beschriebenen
Substitution von
%%VAR%%. Die
Namen aus PLIST_FILES werden ansonsten
unverndert in die endgltige Paketliste
bernommen, whrend den Namen aus
PLIST_DIRS noch der Wert von
@dirrm vorangestellt wird. Damit die
Verwendung von PLIST_FILES und
PLIST_DIRS berhaupt mglich
ist, mssen diese gesetzt werden, bevor
TMPPLIST geschrieben
wird – z.B. in
pre-install oder vorher.Leere VerzeichnisseAufrumen leerer VerzeichnisseBitte sorgen Sie dafr, dass ihre Ports bei der
Deinstallation leere Verzeichnisse lschen. Dazu wird
fr jedes Verzeichnis, das der Port erzeugt hat, eine
@dirrm-Zeile angegeben. Um ein
Verzeichnis zu lschen mssen Sie zuerst dessen
Unterverzeichnisse entfernen. :
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/onekoEs kann allerdings auch vorkommen, dass
@dirrm Fehler ausgibt, da andere Ports
ein Verzeichnis ebenfalls nutzen. Deshalb knnen Sie
@dirrmtry verwenden, um nur Verzeichnisse
zu lschen, die wirklich leer sind, und damit
Warnhinweise vermeiden.@dirrmtry share/doc/gimpDadurch wird es weder eine Fehlermeldung geben noch
wird &man.pkg.delete.1; abnormal beendet werden - auch dann
nicht, wenn
${PREFIX}/share/doc/gimp
nicht leer ist, da andere Ports hier ebenfalls Dateien
installiert haben.Erstellen leerer VerzeichnisseUm leere Verzeichnisse whrend 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
dafr bentigt werden. Um sicher zu gehen, dass
das leere Verzeichnis erstellt wird, wenn ein Paket
installiert wird, muss die folgende Zeile in
pkg-plist ber der entsprechenden
@dirrm Zeile eingetragen werden:@exec mkdir -p %D/share/foo/templatesKonfigurationsdateienSollte Ihr Port Konfigurationsdateien in
PREFIX/etc
bentigen, so sollten Sie diese
nicht einfach installieren und in
pkg-plist auflisten. Dies wrde
&man.pkg.delete.1; veranlassen, diese Dateien zu lschen,
selbst wenn wenn sie vom Benutzer editiert wurden.Stattdessen sollten Beispieldateien mit einem
entsprechenden Suffix (beispielsweise
filename.sample)
versehen werden. Ist die Konfigurationsdatei nicht vorhanden,
so sollte die Beispieldatei an deren Platz kopiert werden. Bei
der Deinstallation sollte die Konfigurationsdatei
gelscht werden, aber nur, wenn sie nicht vom Benutzer
verndert wurde. Das alles muss sowohl im
Makefile des Ports als auch in der
pkg-plist (fr die Installation aus
einem Paket) sichergestellt werden.Beispiel aus einem Makefile:post-install:
@if [ ! -f ${PREFIX}/etc/orbit.conf ]; then \
${CP} -p ${PREFIX}/etc/orbit.conf.sample ${PREFIX}/etc/orbit.conf ; \
fiBeispiel aus einer pkg-plist:@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; fiWahlweise knnen Sie auch eine Nachricht ausgegeben lassen,
in der Sie den Nutzer auffordern, die Datei an die richtige
Stelle zu kopieren und zu bearbeiten, bevor das Programm
ausgefhrt werden kann.Dynamische oder statische PaketlisteEine statische Paketliste ist eine
Paketliste, die in der Ports-Sammlung, entweder in Form der
pkg-plist (mit oder ohne der Ersetzung
von Variablen) oder durch PLIST_FILES und
PLIST_DIRS im Makefile
eingebettet, verfgbar ist. Selbst wenn der Inhalt durch
ein Werkzeug oder ein Target im Makefile automatisch erzeugt
wird, bevor die Datei von einem Committer
in die Ports-Sammlung aufgenommen wird, so ist dies immer noch
eine statische Liste, da es mglich ist den Dateiinhalt
zu betrachten ohne ein Distfile Herunterladen oder Kompilieren
zu mssen.Eine dynamische Paketliste ist eine
Paketliste, die beim Kompilieren des Ports erstellt wird,
abhngig davon, welche Dateien und Verzeichnisse
installiert werden. Es ist nicht mglich diese Liste zu
betrachten, bevor der Quelltext heruntergeladen und kompiliert
oder nachdem ein make clean ausgefhrt
wurde.Der Einsatz dynamischer Paketlisten ist zwar nicht
untersagt, aber Sie sollten, wann immer das mglich ist,
statische Paketlisten verwenden, da die Nutzer dann
&man.grep.1; auf alle verfgbaren Ports anwenden
knnen, um z.B. herauszufinden, von welchem eine
bestimmte Datei installiert wurde. Dynamische Paketlisten
sollten fr komplexe Ports verwendet werden, bei denen
sich die Liste abhngig von den gewhlten Funktionen
sehr stark ndern kann (wodurch die Pflege von statischen
Listen unmglich wird), oder Ports, welche die Paketliste
abhngig von den Versionen verwendeter
Abhngigkeiten verndern (z.B. Ports, die Ihre
Dokumentation mit Javadoc
erzeugen).Maintainer, die dynamische Paketlisten bevorzugen,
werden dazu aufgefordert, neue Targets zu Ihren Ports
hinzuzufgen, welche die
pkg-plist-Datei erzeugen, sodass Benutzer
den Inhalt berprfen knnen.Automatisiertes Erstellen von PaketlistenAls Erstes sollten Sie sich vergewissern, dass der Port
bis auf pkg-plist vollstndig
ist.Als Nchstes erstellen Sie einen temporren
Verzeichnisbaum, in welchem Ihr Port installiert werden kann,
und installieren Sie alle Abhngigkeiten.&prompt.root; mkdir /var/tmp/`make -V PORTNAME`
&prompt.root; mtree -U -f `make -V MTREE_FILE` -d -e -p /var/tmp/`make -V PORTNAME`
&prompt.root; make depends PREFIX=/var/tmp/`make -V PORTNAME`Speichern Sie die Verzeichnisstruktur in einer neuen
Datei.&prompt.root; (cd /var/tmp/`make -V PORTNAME` && find -d * -type d) | sort > OLD-DIRSErstellen Sie eine leere
pkg-plist-Datei:&prompt.root; :>pkg-plistWenn Ihr Port auf PREFIX achtet (was
er machen sollte), so kann der Port nun installiert und die
Paketliste erstellt werden.&prompt.root; make install PREFIX=/var/tmp/`make -V PORTNAME`
&prompt.root; (cd /var/tmp/`make -V PORTNAME` && find -d * \! -type d) | sort > pkg-plistSie mssen auch alle neu erstellten Verzeichnisse in
die Paketliste aufnehmen.&prompt.root; (cd /var/tmp/`make -V PORTNAME` && find -d * -type d) | sort | comm -13 OLD-DIRS - | sort -r | sed -e 's#^#@dirrm #' >> pkg-plistZu guter Letzt muss die Paketliste noch manuell
aufgerumt werden - es funktioniert eben nicht
alles automatisch. Manualpages sollten im
Makefile des Ports unter
MANn
aufgefhrt sein und nicht in der Paketliste.
Konfigurationsdateien des Benutzers sollten entfernt oder als
filename.sample
installiert werden. Die info/dir-Datei
sollte nicht aufgefhrt sein und die zugehrigen
install-info-Zeilen sollten
hinzugefgt werden, wie im info files-Abschnitt
beschrieben. Alle Bibliotheken, die der Port installiert,
sollten aufgelistet werden, wie es im Shared Libraries-Abschnitt
festgelegt ist.Alternativ dazu knnen Sie das
plist-Skript in
/usr/ports/Tools/scripts/ verwenden, um
die Paketliste automatisch zu erstellen. Das
plist-Skript ist ein
Ruby-Skript, das die meisten der in
den vorangehenden Abstzen kurz dargestellten manuellen
Schritte automatisiert.Der erste Schritt ist
derselbe wie oben: Nehmen Sie die ersten drei Zeilen, also
mkdir, mtree und
make depends. Installieren und bauen Sie
dann den Port:&prompt.root; make install PREFIX=/var/tmp/`make -V PORTNAME`Und lassen Sie plist die
pkg-plist-Datei erstellen:&prompt.root; /usr/ports/Tools/scripts/plist -Md -m `make -V MTREE_FILE` /var/tmp/`make -V PORTNAME` > pkg-plistDie Paketliste muss immer noch von Hand aufgerumt
werden, wie es oben erklrt wurde.Ein weiteres Werkzeug zur Erzeugung einer ersten
pkg-plist-Datei ist ports-mgmt/genplist. Wie bei jedem
automatisierten Hilfswerkzeug, sollte die erzeugte
pkg-plist-Datei berprft und
bei Bedarf von Hand nachbearbeitet werden.Die pkg-*
DateienEs gibt noch einige Tricks mit
pkg-*, die wir
noch nicht erwhnt haben, die aber oft sehr praktisch
sind.pkg-messageWenn Sie dem Anwender bei der Installation weitere
Informationen anzeigen wollen, so knnen Sie diese
Nachricht in pkg-message speichern.
Diese Vorgehensweise ist oft ntzlich, um
zustzliche Schritte anzuzeigen, die nach &man.pkg.add.1;
durchgefhrt werden mssen. Dadurch knnen Sie
auch Lizenzinformationen darstellen.Wollen Sie nur ein paar Zeilen ber die
Einstellungen zum Erstellen des Ports oder Warnungen ausgeben,
benutzen Sie ECHO_MSG.
pkg-message ist nur fr Schritte
nach der Installation vorgesehen. Sie sollten den Unterschied
zwischen ECHO_MSG und
ECHO_CMD beachten: Ersteres wird benutzt,
um Informationen auf dem Bildschirm auszugeben, whrend
Letzteres fr Kommando-Pipelining bestimmt ist.Ein gutes Beispiel fr die Benutzung der beiden
Befehle ist in shells/bash2/Makefile zu
finden: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.bakDie pkg-message wird nicht zur
pkg-plist hinzugefgt. Sie wird
auch nicht automatisch angezeigt, falls ein Anwender den
Port installiert. Sie mssen also die Ausgabe selbst im
post-install-Ziel des Make-Vorgangs
veranlassen.pkg-installSollte es ntig sein, dass Ihr Port bei der
Installation des Binrpakets mit &man.pkg.add.1; Befehle
ausfhrt, knnen Sie das Skript
pkg-install benutzen. Dieses Skript wird
automatisch dem Paket hinzugefgt und zweimal von
&man.pkg.add.1; ausgefhrt: Zuerst als
${SH} pkg-install ${PKGNAME}
PRE-INSTALL und beim zweiten Mal als
${SH} pkg-install ${PKGNAME}
POST-INSTALL. $2 kann also
getestet werden, um festzustellen, in welchem Modus das Skript
ausgefhrt wird. Die Umgebungsvariable
PKG_PREFIX wird auf das Verzeichnis gesetzt, in
welches das Paket installiert wird. Siehe &man.pkg.add.1;
fr weiterfhrende Informationen.Das Skript wird nicht automatisch ausgefhrt,
wenn Sie den Port mit make install
installieren. Wenn Sie es ausfhren lassen wollen, dann
mssen Sie es im Makefile aufrufen:
PKG_PREFIX=${PREFIX} ${SH}
${PKGINSTALL} ${PKGNAME}
PRE-INSTALL.pkg-deinstallDieses Skript wird ausgefhrt, wenn ein Paket
deinstalliert wird.Es wird zweimal von &man.pkg.delete.1; aufgerufen. Das
erste Mal als ${SH} pkg-deinstall
${PKGNAME} DEINSTALL und dann als
${SH} pkg-deinstall ${PKGNAME}
POST-DEINSTALL.pkg-reqMuss Ihr Port entscheiden, ob er installiert werden
soll oder nicht, knnen Sie ein
pkg-req-Bedingungsskript
verwenden. Dieses wird automatisch bei der Installation/
Deinstallation aufgerufen, um zu entscheiden, ob die
Installation/ Deinstallation fortgesetzt werden soll.Das Skript wird whrend der Installation von
&man.pkg.add.1; als pkg-req ${PKGNAME}
INSTALL aufgerufen. Bei der Deinstallation wird es
von &man.pkg.delete.1; als pkg-req ${PKGNAME}
DEINSTALL ausgefhrt.ndern der Namen der
pkg-*
DateienAlle Namen der
pkg-* Dateien
werden durch Variablen festgelegt. Sie knnen sie bei
Bedarf also im Makefile des Ports
ndern. Das ist besonders ntzlich, wenn Sie die
gleichen pkg-*
Dateien in mehreren Ports nutzen oder in eine der oben genannten
Dateien schreiben wollen. Schreiben Sie niemals auerhalb
des Unterverzeichnisses WRKDIRpkg-*, eine Erklrung hierzu finden
Sie in Schreiben ausserhalb von
WRKDIR.Hier ist eine Liste von Variablennamen und ihren
Standardwerten (PKGDIR ist
standardmig
${MASTERDIR}).VariableStandardwertDESCR${PKGDIR}/pkg-descrPLIST${PKGDIR}/pkg-plistPKGINSTALL${PKGDIR}/pkg-installPKGDEINSTALL${PKGDIR}/pkg-deinstallPKGREQ${PKGDIR}/pkg-reqPKGMESSAGE${PKGDIR}/pkg-messageBitte benutzen Sie diese Variablen anstatt
PKG_ARGS zu ndern. Wenn Sie
PKG_ARGS modifizieren, werden diese Dateien
bei der Installation des Ports nicht korrekt in
/var/db/pkg installiert.Nutzung von SUB_FILES und
SUB_LISTDie Variablen SUB_FILES und
SUB_LIST sind ntzlich, um dynamische
Werte in Port-Dateien zu verwenden, wie beispielsweise der
Installations-PREFIX in
pkg-message.Die Variable SUB_FILES enthlt
eine Liste von Dateien, die automatisch verndert werden.
Jede Datei in
SUB_FILES muss ein entsprechendes Pendant
datei.in im Verzeichnis
FILESDIR haben. Die modifizierte Version
wird in WRKDIR angelegt. Dateien, die als
Werte von USE_RC_SUBR (oder veraltet in
USE_RCORDER) gespeichert werden, werden
automatisch zu SUB_FILES hinzugefgt.
Fr die Dateien pkg-message,
pkg-install,
pkg-deinstall und
pkg-req werden die jeweiligen
Makefile-Variablen selbstttig auf die genderte
Version der Datei gesetzt.Die Variable SUB_LIST ist eine Liste
von VAR=WERT-Paaren. Jedes Paar
%%VAR%% in den Dateien von
SUB_FILES wird mit WERT
ersetzt. Einige gebruchliche Paare werden automatisch
definiert: PREFIX,
LOCALBASE,
DATADIR, DOCSDIR,
EXAMPLESDIR. Jede Zeile, die mit
@comment beginnt, wird nach der
Variablen-Ersetzung aus der neu erstellten Datei
gelscht.Im folgenden Beispiel wird %%ARCH%%
mit der Systemarchitektur in pkg-message
ersetzt:SUB_FILES= pkg-message
SUB_LIST= ARCH=${ARCH}Beachten Sie bitte, dass in diesem Beispiel die Datei
pkg-message.in im Verzeichnis
FILESDIR vorhanden sein muss.Hier ein Beispiel fr eine gute
pkg-message.in: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.Ihren Port testenmake describe ausfhrenEinige der &os;-Werkzeuge zur Pflege von Ports, wie zum
Beispiel &man.portupgrade.1;, verwenden eine Datenbank names
/usr/ports/INDEX, welche Eigenschaften,
wie z.B. Port-Abhngigkeiten, verfolgt.
INDEX wird vom Makefile der hchsten
Ebene, ports/Makefile, mittels
make index erstellt, welches in das
Unterverzeichnis jedes Ports wechselt und dort make
describe ausfhrt. Wenn also make
describe bei einem Port fehlschlgt, kann
INDEX nicht generiert werden und schnell
werden viele Leute darber unzufrieden sein.Es ist wichtig diese Datei erzeugen zu knnen,
unabhngig davon, welche Optionen in
make.conf vorhanden sind. Bitte
vermeiden Sie es daher beispielsweise
.error-Anweisungen zu benutzen, wenn zum
Beispiel eine Abhngigkeit nicht erfllt wird
(Lesen Sie dazu bitte ).Wenn make describe eine Zeichenkette
anstatt einer Fehlermeldung erzeugt, sind Sie wahrscheinlich
auf der sicheren Seite. Vergleichen Sie die erzeugte
Zeichenkette mit bsd.port.mk, um mehr
ber deren Bedeutung zu erfahren.Beachten Sie bitte auerdem, dass die Benutzung
einer aktuellen Version von portlint (wie
im nchsten Abschnitt beschrieben) automatisch
make describe startet.PortlintBitte berprfen Sie Ihre Arbeit stets mit
portlint,
bevor Sie diese einreichen oder committen.
portlint warnt Sie bei hufigen
Fehlern, sowohl funktionaler als auch stilistischer Natur.
Fr einen neuen (oder repokopierten) Port ist
portlint -A die grndlichste Variante;
fr einen bereits existierenden Port ist
portlint -C ausreichend.Da portlint heuristische Methoden zur
Fehlersuche benutzt, kann es vorkommen, dass Warnungen
fr Fehler erzeugt werden, die keine sind. Gelegentlich
kann etwas, das als Problem angezeigt wird, aufgrund von
Einschrnkungen im Port-System nicht anders gelst
werden. Wenn es Zweifel gibt, fragen Sie am besten auf
&a.ports; nach.Port ToolsDas Programm ports-mgmt/porttools ist Teil der
Ports-Sammlung.port 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, knnen Sie
port test verwenden, damit die Tests,
inklusive der portlint-berprfung,
durchgefhrt werden. Dieser Befehl sprt ausserdem
alle nicht in pkg-plist enthaltenen
Dateien auf und gibt eine Liste dieser aus. Hier ein
Beispiel:&prompt.root; port test /usr/ports/net/csupPREFIX und
DESTDIRPREFIX bestimmt, an welche Stelle der
Port installiert werden soll. In der Regel ist
dies/usr/local oder
/opt, was jedoch anpassbar ist. Ihr Port
muss sich an diese Variable halten.DESTDIR, wenn es vom Benutzer gesetzt
wird, bestimmt die alternative Umgebung (in der Regel eine
Jail oder ein installiertes System, welches an anderer Stelle
als / eingehngt ist).
Ein Port wird unter
DESTDIR/PREFIX
installiert und registriert sich in der Paket-Datenbank unter
DESTDIR/var/db/pkg.
Da DESTDIR mittels eines
&man.chroot.8;-Aufrufs vom Ports-System automatisch gesetzt
wird, brauchen Sie keine nderungen oder besondere Pflege
fr DESTDIR-konforme Ports.Der Wert von PREFIX wird auf
LOCALBASE gesetzt (Standard ist
/usr/local).
Falls USE_LINUX_PREFIX gesetzt ist, wird
PREFIXLINUXBASE
annehmen (Standard ist
/compat/linux).Die Vermeidung der hart kodierten Angaben von
/usr/local oder
/usr/X11R6 im Quelltext wird den Port
viel flexibler machen und erleichtert es die Anforderungen
anderer Einsatzorte zu erfllen. Fr X-Ports, die
imake benutzen, geschieht dies automatisch;
andernfalls kann dies erreicht werden, indem alle Angaben von
/usr/local (oder
/usr/X11R6 fr X-Ports, die nicht
imake benutzen) in den verschiedenen
Makefiles im Port ersetzt werden, um
${PREFIX} zu lesen, da diese Variable
automatisch an jede Stufe des Build- und Install-Prozesses
bergeben wird.Vergewissern Sie sich bitte, dass Ihre Anwendung nichts
unter /usr/local an Stelle von
PREFIX installiert. Um dies festzustellen,
knnen Sie folgendes machen:&prompt.root; make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`Wenn etwas auerhalb von PREFIX
installiert wird, so gibt der Prozess der Paketerstellung eine
Meldung aus, dass es die Dateien nicht finden kann.Dies prft nicht das Vorhandensein eines internen
Verweises oder die richtige Verwendung von
LOCALBASE fr Verweise auf Dateien
anderer Ports. Das Testen der Installation in
/var/tmp/`make -V PORTNAME` wrde
dies erledigen.Die Variable PREFIX kann in Ihrem
Makefile oder der Umgebung des Benutzers
neu gesetzt werden. Allerdings wird fr einzelne Ports
dringend davon abgeraten diese Variable in den
Makefiles direkt zu setzen.Verweisen Sie bitte auerdem auf Programme/Dateien
von anderen Ports durch die oben erwhnten Variablen und
nicht mit den eindeutigen Pfadnamen. Wenn Ihr Port zum
Beispiel vom Makro PAGER erwartet, dass es
den vollstndigen Pfadnamen von less
enthlt, benutzen Sie folgendes Compiler-Flag:
-DPAGER=\"${LOCALBASE}/bin/less\"
anstatt -DPAGER=\"/usr/local/bin/less\".
Somit ist die Wahrscheinlichkeit hher, dass es auch
funktioniert, wenn der Administrator den ganzen
/usr/local-Baum an eine andere Stelle
verschoben hat.Die TinderboxWenn Sie ein begeisterter Ports-Entwickler sind
mchten Sie vielleicht einen Blick auf die
Tinderbox werfen. Es ist ein
leistungsstarkes System zur Erstellung und zum Testen von
Ports, welches auf Skripten basiert, die auf Pointyhat verwendet werden. Sie
knnen Tinderbox installieren,
indem Sie den Port ports-mgmt/tinderbox benutzen.
Bitte lesen Sie die mitgelieferte Dokumentation
grndlich, da die Konfiguration nicht einfach ist.Um Nheres darber zu erfahren, besuchen Sie
bitte die Tinderbox
Homepage.Einen existierenden Port aktualisierenWenn 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 ports/ports-current der FreeBSD
FTP-Spiegelseiten. Wenn Sie allerdings mit mehr als ein paar
Ports arbeiten, werden Sie es wahrscheinlich einfacher finden
CVSup zu benutzen, um Ihre gesamte
Ports-Sammlung aktuell zu halten, wie es im Handbuch
beschrieben wird. Das hat zustzlich den Vorteil, dass Sie
so auch alle Abhngigkeiten des Ports aktuell
halten.Der nchste Schritt besteht darin festzustellen, ob
bereits eine Aktualisierung des Ports darauf wartet committet zu
werden. Um das sicherzustellen haben Sie folgende
Mglichkeiten. Es gibt eine durchsuchbare Schnittstelle zur
FreeBSD
Problembericht Datenbank (PR - Problem Report) (auch
bekannt als GNATS). Whlen Sie dazu
Ports im Drop-Down-Men und geben Sie
den Namen des Ports ein.Allerdings wird manchmal vergessen den Namen des Ports
eindeutig im Feld fr die Zusammenfassung anzugeben. In
diesem Fall knnen Sie das FreeBSD
Ports Monitoring System (auch bekannt als
portsmon) nutzen. Dieses versucht PRs von
Ports nach Portname zu sortieren. Um PRs nach einem bestimmten
Port zu durchsuchen knnen Sie die bersicht
eines Ports verwenden.Wenn es keine wartenden PRs gibt, ist der nchste
Schritt eine E-Mail an den Maintainer des Ports zu schicken, wie
von make maintainer 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 Stabilittsproblemen der neuen Version). Sie
wollen sicher nicht die Arbeit des Maintainers doppelt machen.
Beachten Sie bitte, dass fr Ports ohne Maintainer
ports@FreeBSD.org 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.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.Um einen brauchbaren diff fr einen
einzelne Datei zu erstellen, kopieren Sie die zu patchende
Datei nach dateiname.orig und speichern
Ihre nderungen in die Datei
dateiname. Danach erzeugen Sie den
Patch:&prompt.user; /usr/bin/diff dateiname.orig dateiname > dateiname.diffSoll mehr als eine Datei gepatcht werden, knnen Sie
entweder cvs diff verwenden (siehe dazu ) 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 verndertes Portverzeichnis z.B.
superedit und das Original
superedit.bak heit, dann speichern
Sie bitte die Ergebnisse von diff -ruN superedit.bak
superedit). Sowohl vereinheitlichendes als auch
kontextabhngiges diff (Auflistung der Unterschiede zweier
Dateien) sind akzeptabel, aber im Allgemeinen bevorzugen
Port-Committer vereinheitlichende diffs.
Bitte beachten Sie die Verwendung der
-N-Option. Dies ist der gebruchliche
Weg diff dazu zu bewegen korrekt damit
umzugehen, neue Dateien anzulegen und alte zu lschen.
Bevor Sie das diff einsenden berprfen Sie bitte die
Ausgabe, um sicherzugehen, dass die nderungen sinnvoll
sind. Stellen Sie insbesondere sicher, dass Sie das
Arbeitsverzeichnis mit make clean
aufgert haben).Um gngige Operationen mit Korrekturdateien zu
vereinfachen, knnen Sie
/usr/ports/Tools/scripts/patchtool.py
benutzen. Aber lesen Sie bitte vorher
/usr/ports/Tools/scripts/README.patchtool.Falls der Port keinen Maintainer hat und Sie ihn selbst
aktiv benutzen, ziehen Sie bitte in Erwgung sich als
Maintainer zu melden. &os; hat mehr als 4000 Ports ohne
Maintainer und in diesem Bereich werden immer zustzliche
Freiwillige bentigt (Fr eine ausfhrliche
Beschreibung der Verantwortlichkeiten eines Maintainers lesen
Sie bitte im
Developer's Handbook nach).Der beste Weg uns das diff zu schicken ist mittels
&man.send-pr.1; (Kategorie Ports). Wenn Sie der Maintainer des
Ports sind, fgen Sie bitte [maintainer
update] an den Anfang Ihrer Zusammenfassung und setzen
Sie die Klasse des PR auf
maintainer-update. Ansonsten sollte die
Klasse des PR change-request
sein. Bitte erwhnen Sie alle hinzugefgten oder
gelschten Dateien in der Nachricht, da diese beim Commit
ausdrcklich an &man.cvs.1; bergeben werden
mssen. Wenn das diff grer ist als 20 Kilobyte
komprimieren und uuencoden Sie es bitte. Ansonsten knnen
Sie es in den PR einfgen wie es ist.Bevor Sie den PR mit &man.send-pr.1; abschicken, sollten
Sie den Abschnitt Den
Problembericht schreiben im Artikel ber
Problemberichte lesen. Dieser enthlt sehr viel mehr
Informationen darber, wie man ntzliche
Problemberichte verfasst.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 durchzufhren. Sonst werden ahnungslose
Nutzer von &man.pkg.add.1; ber mehrere Wochen die alte
Version durch pkg_add -r
installieren.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.Nun, da Sie all das geschafft haben, knnen Sie in nachlesen, wie Sie den Port
aktuell halten.Patches mit CVS erstellenWenn mglich, sollten Sie stets eine &man.cvs.1;-Differenz
einreichen. Diese sind leichter zu bearbeiten als Differenzen
zwischen neuen und alten Verzeichnissen. Auerdem
knenn 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.&prompt.user; cd ~/my_wrkdir
&prompt.user; cvs -d R_CVSROOT co pdnsd
&prompt.user; cd ~/my_wrkdir/pdnsdDas Verzeichnis, in dem Sie den Port bauen wollen. Dieses
Arbeitsverzeichnis kann sich auch auerhalb von
/usr/ports/ befinden.R_CVSROOT steht fr einen ffentlichen CVS-Server.
Eine Liste aller verfgbaren Server finden Sie im &os; Handbuch.Ersetzen Sie pdnsd 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
fr den Port german/selfhtml
de-selfhtml). Um den Namen des Moduls herauszufinden, knnen
Sie entweder die cvsweb-Schnittstelle
verwenden oder den kompletten Pfad des Ports angeben (in unserem
Beispiel wre der komplette Pfad also ports/dns/pdnsd).Danach modifizieren Sie den Port in gewohnter Weise. Falls Sie
Dateien hinzufgen oder entfernen, sollten Sie dies mit
cvs protokollieren:&prompt.user; cvs add new_file
&prompt.user; cvs remove deleted_fileberprfen Sie die Funktion Ihres Ports anhand der
Checklisten in und
.&prompt.user; cvs status
&prompt.user; cvs updateDadurch wird versucht, die Differenz zwischen Ihrer
genderten 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
vollstndige Liste dieser Prfixe finden Sie in
.
Von cvs update verwendete PrfixeUDie Datei wurde aktualisiert. Es traten dabei keine
Probleme auf.PDie Datei wurde ohne Probleme aktualisiert (dieses
Prfix wird nur verwendet, wenn Sie mit einem
entfernten Repository arbeiten).MDie Datei wurde modifiziert. Es traten keine Konflikte
auf.CDie Datei wurde modifiziert, allerdings kam es dabei zu
Konflikten zwischen Ihrer genderten Version und der
aktuellen Version im CVS.
Wird das Prfix C nach einem
cvs update angezeigt, bedeutet dies, dass im CVS
etwas gendert 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
cvs keine Informationen darber hat, wie ein
Port aufgebaut sein soll. Es kann (und wird wahrscheinlich) daher
vorkommen, dass sich manchmal nderungen ergeben, die keinen
Sinn machen.Im letzten Schritt erzeugen Sie einen unified
&man.diff.1; gegen die derzeit im CVS vorhandenen Dateien:&prompt.user; cvs diff -uN > ../`basename ${PWD}`.diffVerwenden Sie unbedingt die Option , um
sicherzustellen, dass von hinzugefgte oder gelschte
Dateien im Patch erfasst sind. Der Patch entht auch
von Ihnen gelschte Dateien (allerdings ohne Inhalt). Dies
ist wichtig, da nur so der Committer wissen kann, welche Dateien
er entfernen muss.Zuletzt reichen Sie Ihren Patch ein, indem Sie der Anleitung in
folgen.Die Dateien UPDATING und MOVEDWenn die Aktualisierung des Ports spezielle Schritte wie
die Anpassung von Konfigurationsdateien oder die
Ausfhrung eines speziellen Programms erfordert, sollten
Sie diesen Umstand in der Datei
/usr/ports/UPDATING dokumentieren.
Eintrge in dieser Datei haben das folgende
Format:YYYYMMDD:
AFFECTS: users of portcategory/portname
AUTHOR: Your name <Your email address>
Special instructionsWenn Sie exakte Portmaster oder Portupgrade-Meldungen
einfgen wollen, stellen Sie bitte sicher, dass alle
Sonderzeichen korrekt dargestellt werden.Wurde der Port gelscht oder umbenannt, sollten
Sie dies in der Datei
/usr/ports/MOVED vermerken. Eintrge
in dieser Datei haben das folgende Format:old name|new name (blank for deleted)|date of move|reasonSicherheit der PortsWarum Sicherheit so wichtig istEs finden sich immer wieder Fehler in Software. Die
gefhrlichsten davon sind wohl jene, die
Sicherheitslcken ffnen. Technisch gesehen
mssen diese Lcken geschlossen werden, indem die
Fehler, die Sie verursacht haben, beseitigt werden. Aber die
Vorgehensweisen, wie mit bloen Fehlern und
Sicherheitslcken umgegangen wird, sind sehr
unterschiedlich.Ein typischer kleiner Fehler betrifft nur Nutzer, die
eine bestimmte Kombination von Optionen aktiviert haben, die
den Fehler auslst. Der Entwickler wird letztendlich
einen Patch herausgeben, gefolgt von einer neuen Version des
Programms, die den Fehler nicht mehr
enthlt – jedoch wird die Mehrheit der
Nutzer nicht sofort aktualisieren, da sie von diesem Fehler
nicht betroffen sind. Ein kritischer Fehler, der zu
Datenverlust fhren 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.Bei einer Sicherheitslcke ist dies ganz anders.
Erstens wird sie vielleicht jahrelang nicht entdeckt, da dies
oftmals keine Fehlfunktion im Programm verursacht. Zweitens
kann eine bswillige Person unerlaubten Zugriff auf ein
unsicheres System erlangen, um empfindliche Daten zu
verndern oder zu zerstren; 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 gefhrdet wre. Deshalb reicht es
nicht aus eine Sicherheitslcke nur zu schlieen:
Die Zielgruppe sollte mglichst genau und umfassend
darber informiert werden, damit sie die Gefahr
einschtzen und passende Manahmen ergreifen
knnen.Sicherheitslcken schliessenBei Ports und Paketen kann eine Sicherheitslcke im
ursprnglichen Programm oder in den Port-Dateien
verursacht werden. Im ersten Fall wird der ursprngliche
Entwickler den Fehler wahrscheinlich umgehend korrigieren oder
eine neue Version herausgeben und Sie mssen den Port nur
aktualisieren und die Korrekturen des Autors beachten. Falls
sich die Korrektur aus irgendeinem Grund verzgert,
sollten Sie den Port als
FORBIDDEN markieren oder selbst den
Fehler fr den Port korrigieren. Falls die
Sicherheitslcke im Port verursacht wird, sollten Sie ihn
sobald wie mglich berichtigen. In jedem Fall sollte
die Standardvorgehensweise zum
Einreichen von nderungen beachtet
werden – es sei denn, Sie haben das Recht
diese direkt in den Ports-Baum zu committen.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.Bitte stellen Sie sicher, dass die Revision des Ports
erhht wird, sobald die Sicherheitslcke geschlossen
wurde. Dadurch sehen die Nutzer, die installierte Pakete
regelmig aktualisieren, dass es an der Zeit ist
eine Aktualisierung durchzufhren. Auerdem wird
ein neues Paket gebaut, ber FTP– und
WWW-Spiegel verteilt und die unsichere Version damit
verdrngt. PORTREVISION sollte
erhht werden – es sei denn,
PORTREVISION hat sich im Laufe der
Korrektur des Fehlers gendert. Das heit, Sie
sollten PORTREVISION erhhen, wenn Sie
eine Korrektur hinzugefgt haben. Sie sollten diese aber
nicht erhhen, wenn Sie den Port auf die neueste Version
des Programms gebracht haben und PORTREVISION
somit schon verndert wurde. Bitte beachten
Sie den betreffenden
Abschnitt fr weitere Informationen.Die Community informiert haltenDie VuXML-DatenbankEin sehr wichtiger und dringender Schritt, den man
unternehmen muss, sobald eine Sicherheitslcke entdeckt
wurde, ist die Gemeinschaft der Anwender des Ports ber
die Gefahr zu informieren. Diese Benachrichtigung hat zwei
Grnde. 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 Lcke
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 verfgbar ist, sofort
aktualisieren mssen.Angesichts der riesigen Zahl an Ports kann nicht
fr jeden Vorfall ein Sicherheitshinweis erstellt
werden, ohne durch die Flut an Nachrichten die
Aufmerksamkeit der Empfnger zu verlieren, im Laufe der
Zeit kommt es so zu ernsten Problemen. Deshalb werden
Sicherheitslcken von Ports in der FreeBSD
VuXML-Datenbank aufgezeichnet. Das Team der
Sicherheitsverantwortlichen beobachtet diese wegen
Angelegenheiten, die Ihr Eingreifen erfordern.Wenn Sie Committerrechte haben, knnen Sie die
VuXML-Datenbank selbst aktualisieren. Auf diese Weise helfen
Sie den Sicherheitsverantwortlichen und liefern die
kritischen Informationen frhzeitig an die Community.
Aber auch wenn Sie kein Committer sind und glauben, Sie
haben eine auergewhnlich schwerwiegende
Lcke gefunden – egal
welche – zgern Sie bitte nicht die
Sicherheitsverantwortlichen zu kontaktieren, wie es in den
FreeBSD
Sicherheitsinformationen beschrieben wird.Wie vielleicht aus dem Titel hervorgeht, handelt es sich
bei der VuXMl-Datenbank um ein
XML-Dokument. Die Quelldatei vuln.xml
knnen Sie im Port security/vuxml finden. Deshalb
wird der komplette Pfadname
PORTSDIR/security/vuxml/vuln.xml
lauten. Jedes Mal, wenn Sie eine Sicherheitslcke in
einem Port entdecken, fgen Sie bitte einen Eintrag
dafr in diese Datei ein. Solange Sie nicht mit VuXML
vertraut sind, ist es das Beste, was Sie machen knnen,
einen vorhandenen Eintrag, der zu Ihrem Fall passt, zu
kopieren und als Vorlage zu verwenden.Eine kurze Einfhrung in VuXMLDas komplette XML ist komplex und wrde den
Rahmen dieses Buches sprengen. Allerdings bentigen Sie
fr 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 knnen geschachtelt
werden. Wenn sie geschachtelt werden mssen die inneren
Tags vor den ueren geschlossen werden. Es gibt
eine Hierarchie von Tags – das heit
komplexere Regeln zur Schachtelung. Klingt so hnlich
wie HTML, oder? Der grte Unterschied ist: XML
ist erweiterbar
(eXtensible) – das
heit es basiert darauf mageschneiderte Tags zu
definieren. Aufgrund seiner wesentlichen Struktur bringt
XML ansonsten formlose Daten in eine bestimmte Form. VuXML
ist speziell darauf zugeschnitten Beschreibungen von
Sicherheitslcken zu verwalten.Lassen Sie uns nun einen realistischen VuXML-Eintrag
betrachten:<vuln vid="f4bc80f4-da62-11d8-90ea-0004ac98a7b9">
<topic>Several vulnerabilities found in Foo</topic>
<affects>
<package>
<name>foo</name>
<name>foo-devel</name>
<name>ja-foo</name>
<range><ge>1.6</ge><lt>1.9</lt></range>
<range><ge>2.*</ge><lt>2.4_1</lt></range>
<range><eq>3.0b1</eq></range>
</package>
<package>
<name>openfoo</name>
<range><lt>1.10_7</lt></range>
<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>
<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>
<freebsdsa>SA-10:75.foo</freebsdsa>
<freebsdpr>ports/987654</freebsdpr>
<cvename>CAN-2010-0201</cvename>
<cvename>CAN-2010-0466</cvename>
<bid>96298</bid>
<certsa>CA-2010-99</certsa>
<certvu>740169</certvu>
<uscertsa>SA10-99A</uscertsa>
<uscertta>SA10-99A</uscertta>
<mlist msgid="201075606@hacker.com">http://marc.theaimsgroup.com/?l=bugtraq&m=203886607825605</mlist>
<url>http://j.r.hacker.com/advisories/1</url>
</references>
<dates>
<discovery>2010-05-25</discovery>
<entry>2010-07-13</entry>
<modified>2010-09-17</modified>
</dates>
</vuln>Die Namen der Tags sollten selbsterklrend sein
– also werfen wir einen genaueren Blick auf
die Felder, die Sie selbst ausfllen
mssen:Dies ist die hchste Tag-Ebene eines
VuXML-Eintrags. Es ist ein vorgeschriebenes Attribut
vid, welches eine allgemein
einzigartige Kennung (universally unique identifier,
UUID) in Anfhrungszeichen fr diesen
Eintrag festlegt. Sie sollten eine UUID fr
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
knnen &man.uuidgen.1; verwenden, um eine VuXML
UUID zu erzeugen.Dies ist eine einzeilige Beschreibung des
gefundenen Fehlers.Hier werden die Namen betroffener Pakete
aufgefhrt. Es knnen mehrere Namen
angegeben werden, da mehrere Pakete von einem einzigen
Master-Port oder Software-Produkt abhngen
knnen. Das schliet Stable– und
Developement-Zweige, lokalisierte Versionen und
Slave-Ports ein, die verschiedene
Auswahlmglichkeiten wichtiger
Kompilierungszeit-Optionen bieten.Es liegt in Ihrer Verantwortung all diese
betroffenen Pakete zu finden, wenn Sie den
VuXML-Eintrag schreiben.Behalten Sie im
Hinterkopf, dass make search
name=foo Ihr Freund ist. Die wichtigsten
Punkte, auf die Sie achten sollten, sind die
folgenden:die foo-devel
Variante eines foo
Ports;andere Varianten mit einem Suffix wie
-a4 (fr
Druck-betreffende Pakete),
-without-gui (fr Pakete
mit deaktivierter X-Untersttzung) oder
hnlichejp-,
ru-, zh-
und andere, eventuell lokalisierte, Varianten in
den entsprechenden Lnderkategorien der
Ports-SammlungBetroffene Versionen der Pakete werden hier als
ein Bereich oder mehrere durch eine Kombination aus
<lt>, <le>
, <eq>,
<ge>, und
<gt>-Elementen ausgegeben.
Die angegebenen Bereiche sollten sich nicht
berschneiden.In einer Bereichsangabe steht
* (Asterisk) fr die kleinste
Versionsnummer. Insbesondere ist
2.* kleiner als
2.a. Deshalb kann ein Stern benutzt
werden, um auf alle mglichen Alpha
-, Beta– und
RC -Versionen zuzutreffen. Zum
Beispiel passt
<ge>2.*</ge><lt>3.*
</lt> auf alle Versionen der Form
2.x, whrend
<ge>
2.0</ge><lt>3.0</lt> das
nicht erfllt, da es nicht auf 2.r3
passt, auf 3.b aber
schon.Das obige Beispiel legt fest, dass Versionen von
1.6 bis 1.9
betroffen sind – auerdem
Versionen 2.x vor
2.4_1 und Version
3.0b1.Mehrere zusammenhngende Gruppen von
Paketen (im wesentlichen Ports) knnen im
Abschnitt <affected>
aufgefhrt 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 Sicherheitslcken teilen.
Beachten Sie den Unterschied zum Anfhren
mehrerer Namen innerhalb eines <package>
Abschnittes.Die Versionsbereiche sollten, wenn mglich,
sowohl PORTEPOCH als auch
PORTREVISION erlauben. Bitte denken Sie
daran, dass gem der Vergleichsregeln eine
Version mit einer PORTEPOCH, die
nicht Null ist, grer ist als jede Version
ohne PORTEPOCH. Das heit,
3.0,1 ist grer als
3.1 oder sogar
8.9.Das ist die Zusammenfassung des Problems. In
diesem Feld wird XHTML verwendet. Zumindest
umschlieende <p> und
</p> sollten auftauchen.
Komplexere Tags sind zwar mglich, aber sollten
nur um der Genauigkeit und Klarheit willen verwendet
werden: Bitte verwenden Sie hier kein
Eye-Candy.Dieser Abschnitt enthlt Verweise auf
relevante Dokumente. Es wird empfohlen so viele
Referenzen wie ntig aufzufhren.Das ist ein FreeBSD
Sicherheitshinweis.Das ist ein
FreeBSD Problembericht.Das ist eine Mitre CVE
Kennung.Das ist eine SecurityFocus
Fehler-Kennung.Das ist ein Sicherheitshinweis von US-CERT.Das ist eine Mitteilung ber eine
Schwachstelle von US-CERT.Das ist ein Cyber-Sicherheitsalarm von US-CERT.Das ist ein technischer Cyber-Sicherheitsalarm
von US-CERT.Das ist eine URL zu einem archivierten Posting
auf einer Mailingliste. Das Attribut
msgid ist optional und gibt die
Nachrichtenkennung des Postings an.Das ist eine gewhnliche URL. Sie sollte
nur verwendet werden, wenn keine der anderen
Referenzkategorien verfgbar ist.Das ist das Datum, an dem die
Sicherheitslcke bekannt wurde
(JJJJ-MM-TT).Das ist das Datum, an dem der Eintrag
hinzugefgt wurde
(JJJJ-MM-TT).Das ist das Datum, an dem zuletzt irgendeine
Information des Eintrags verndert wurde
(JJJJ-MM-TT). Neue
Eintrge drfen dieses Feld nicht enthalten.
Es sollte beim Editieren eines existierenden Eintrags
eingefgt werden.Ihre nderungen an der VuXML-Datenbank
testenNehmen wir an, Sie haben gerade einen Eintrag
fr eine Sicherheitslcke in dem Paket
clamav geschrieben oder
ausgefllt, die in der Version
0.65_7 korrigiert wurde.Als Voraussetzung mssen Sie die aktuellen Versionen
der Ports ports-mgmt/portaudit, ports-mgmt/portaudit-db sowie
security/vuxmlinstallieren.Um packaudit auszufhren,
mssen Sie die Berechtigung haben
DATABASEDIR zu
schreiben – blicherweise ist das
/var/db/portaudit.Durch Setzen der Umgebungsvariable
DATABASEDIR knnen
Sie hier auch ein anderes Verzeichnis angeben.Arbeiten Sie nicht aus dem Verzeichnis
${PORTSDIR}/security/vuxml heraus,
mssen Sie zustzlich die Umgebungsvariable
VUXMLDIR setzen, um
anzugeben, in welchem Verzeichnis sich die Datei
vuln.xml befindet.Zuerst berprfen Sie bitte, ob bereits
ein Eintrag fr diese Schwachstelle existiert. Wenn
es einen solchen Eintrag gibt, sollte er auf die vorige
Version 0.65_6 zutreffen:&prompt.user; packaudit
&prompt.user; portaudit clamav-0.65_6Wenn keine vorhandenen Eintrge gefunden werden
haben Sie grnes Licht, einen neuen Eintrag fr
diese Sicherheitslcke anzulegen. Sie knnen nun
eine neue UUID erzeugen (wir nehmen an, diese lautet
74a9541d-5d6c-11d8-80e3-0020ed76ef5a)
und einen neuen Eintrag in der VuXML-Datenbank anlegen.
Bitte berprfen Sie danach die Syntax mit
folgendem Befehl:&prompt.user; cd ${PORTSDIR}/security/vuxml && make validateSie werden zumindest eines der folgenden Pakete
bentigen: textproc/libxml2, textproc/jade.Jetzt bauen Sie bitte die
portaudit-Datenbank aus der VuXML-Datei
neu:&prompt.user; packauditUm sicherzustellen, dass der Abschnitt
<affected> Ihres Eintrags die
richtigen Pakete betrifft, verwenden Sie bitte den
folgenden Befehl:&prompt.user; portaudit -f /usr/ports/INDEX -r 74a9541d-5d6c-11d8-80e3-0020ed76ef5aBitte lesen Sie in &man.portaudit.1; nach, um ein
besseres Verstndnis der Befehlssyntax zu
entwickeln.Bitte stellen Sie sicher, dass Ihr Eintrag keine
falschen Treffer in der Ausgabe erzeugt.Jetzt berprfen Sie bitte, dass Ihr
Eintrag die richtigen Versionen des Pakets angibt:&prompt.user; portaudit clamav-0.65_6 clamav-0.65_7
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.Offensichtlich sollte die erste Version ausgegeben
werden – die zweite jedoch nicht.Abschlieend berprfen Sie bitte,
ob die Webseite, die aus der VuXML-Datenbank erzeugt wird,
wie erwartet aussieht:&prompt.user; mkdir -p ~/public_html/portaudit
&prompt.user; packaudit
&prompt.user; lynx ~/public_html/portaudit/74a9541d-5d6c-11d8-80e3-0020ed76ef5a.htmlWas man machen respektive vermeiden sollteEinfhrungHier ist eine Liste von gebruchlichen Dos and
Don'ts (Dinge, die man machen oder vermeiden sollte), welchen
Sie whrend des Portierungsprozesses begegnen werden.
Sie sollten Ihren Port anhand dieser Liste
berprfen. Sie knnen auch Ports in der PR
Datenbank, welche andere Menschen eingereicht haben,
kontrollieren. Senden Sie bitte Kommentare zu Ports, die Sie
verifizieren wie unter Bug
Reports and General Commentary beschrieben. Der
Abgleich von Ports aus der PR-Datenbank hilft uns diese
schneller zu committen, und zeigt auch, dass Sie wissen, worum
es geht.WRKDIRSchreiben Sie in keine Dateien auerhalb von
WRKDIR. WRKDIR ist der
einzige Ort, welcher whrend des Erstellen des Ports
garantiert beschreibbar ist (siehe Ports
Installieren von CDROM fr ein Beispiel, um Ports
in einem schreibgeschtzen Zweig zu erstellen). Wenn Sie
eine der pkg-*
Dateien modifizieren mssen, sollten Sie eine Variable erneut
definieren, anstatt die Datei zu
berschreiben.WRKDIRPREFIXVergewissern Sie sich, dass Ihr Port
WRKDIRPREFIX beachtet. Die meisten Ports
sollten sich darber keine Sorgen machen. Beachten Sie
bitte, falls auf WRKDIR eines anderen Ports
verwiesen wird, dass die korrekte Position
WRKDIRPREFIXPORTSDIR/subdir/name/work,
und nicht etwa
PORTSDIR/subdir/name/work,
.CURDIR/../../subdir/name/work
oder hnliches ist.Falls Sie WRKDIR selbst definieren,
sollten Sie sicherstellen, dass Sie
${WRKDIRPREFIX}${.CURDIR} am
Anfang anfgen.Unterschiedliche Betriebssysteme und
BetriebssystemversionenSie knnen auf Quelltext treffen, welcher
Modifizierungen oder bedingtes Kompilieren, abhngig
davon, unter welcher Unix-Version er luft,
bentigt. Falls Sie nderungen an solch einem
Quelltext vornehmen mssen, stellen Sie bitte sicher,
dass Sie Ihre nderungen so allgemein wie mglich
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 knnen.Der bevorzugte Weg, um 4.3BSD/Reno (1990) und neuere
Versionen des BSD-Quelltextes zu unterscheiden, ist das
BSD-Makro zu nutzen, welches in sys/param.h
definiert ist. Hoffentlich ist diese Datei schon
enthalten – falls nicht, so fgen Sie
folgenden Quelltext:#if (defined(__unix__) || defined(unix)) && !defined(USG)
#include <sys/param.h>
#endifan der richtigen Stelle in der .c
Datei hinzu. Wir glauben, dass jedes System, welches diese
beiden Symbole definiert, die Datei
sys/param.h besitzt. Wenn Sie auf
Systeme stoen, wo dies nicht so ist, wrden wir
gerne davon erfahren. Bitte senden Sie eine E-Mail an
&a.ports;.Eine andere Mglichkeit zur Unterscheidung ist der
GNU Autoconf-Stil:#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endifVergessen Sie nicht
-DHAVE_SYS_PARAM_H zu den
CFLAGS im Makefile
hinzuzufgen, falls Sie diese Methode benutzen
sollten.Sobald Sie sys/param.h
hinzugefgt haben, knnen Sie mit Hilfe von#if (defined(BSD) && (BSD >= 199103))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.Benutzen Sie:#if (defined(BSD) && (BSD >= 199306))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 hher) kompiliert werden wird.Der Wert des BSD-Makros ist
199506 fr 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
__FreeBSD__ Makro sollte stattdessen
verwandt werden.Sparsam sollte eingesetzt werden:__FreeBSD__ ist in allen Versionen
von FreeBSD definiert. Benutzen Sie dieses Makro, falls
die nderung(en), die Sie machen,
nur FreeBSD betrifft.
Portierungsfallen, wie der Gebrauch von
sys_errlist[] gegenber
strerror() sind Berkeley-Eigenheiten,
keine FreeBSD nderungen.In FreeBSD 2.x, ist __FreeBSD__
auf 2 definiert. In lteren
Versionen, ist es 1. Alle spteren
Versionen erhhen es, damit es mit der
Haupt-Versionsnummer bereinstimmt.Falls Sie zwischen einem FreeBSD 1.x und einem
FreeBSD 2.x (oder hher) System unterscheiden
mssen, ist es normalerweise richtig, die
BSD-Makros (wie oben beschrieben) zu
benutzen. Gibt es tatschlich eine
FreeBSD-spezifische nderung (wie z.B. spezielle
Optionen von Shared-Libraries fr
ld), ist es nicht zu beanstanden
__FreeBSD__ und #if
__FreeBSD__ > 1 zu nutzen, um FreeBSD 2.x und
sptere Systeme zu erkennen. Falls Sie eine
hhere Genauigkeit bentigen, um FreeBSD Systeme
seit 2.0-RELEASE zu erkennen, knnen Sie folgendes
nutzen:#if __FreeBSD__ >= 2
#include <osreldate.h>
# if __FreeBSD_version >= 199504
/* 2.0.5+ release specific code here */
# endif
#endifIn den Tausenden von Ports, die bis jetzt erstellt
wurden, gab es nur ein oder zwei Flle, in denen
__FreeBSD__ htte benutzt werden
sollen. Nur weil ein frherer Port es an der falschen
Stelle benutzt hatte, bedeutet das nicht, dass Sie dies auch
machen sollten.__FreeBSD_version WerteHier ist eine praktische Liste von
__FreeBSD_version-Werten wie in sys/param.h
definiert:
__FreeBSD_version-WerteWertDatumRelease1194112.0-RELEASE199501, 19950319. Mrz 19952.1-CURRENT1995049. April 19952.0.5-RELEASE19950826. August 19952.2-CURRENT vor 2.119951110. November 19952.1.0-RELEASE19951210. November 19952.2-CURRENT vor 2.1.519960710. Juli 19962.1.5-RELEASE19960812. Juli 19962.2-CURRENT vor 2.1.619961215. November 19962.1.6-RELEASE1996122.1.7-RELEASE22000019. Februar 19972.2-RELEASE(nicht gendert)2.2.1-RELEASE(nicht gendert)2.2-STABLE nach 2.2.1-RELEASE22100115. April 19972.2-STABLE nach texinfo-3.922100230. April 19972.2-STABLE nach top22200016. Mai 19972.2.2-RELEASE22200119. Mai 19972.2-STABLE nach 2.2.2-RELEASE2250002. Oktober 19972.2.5-RELEASE22500120. November 19972.2-STABLE nach 2.2.5-RELEASE22500227. Dezember 19972.2-STABLE nach der Aufnahme von ldconfig -R22600024. Mrz 19982.2.6-RELEASE22700021. Juli 19982.2.7-RELEASE22700121. Juli 19982.2-STABLE nach 2.2.7-RELEASE22700219. September 19982.2-STABLE nach &man.semctl.2; nderung22800029. November 19982.2.8-RELEASE22800129. November 19982.2-STABLE nach 2.2.8-RELEASE30000019. Februar 19963.0-CURRENT vor &man.mount.2; nderung30000124. September 19973.0-CURRENT nach &man.mount.2; nderung3000022. Juni 19983.0-CURRENT nach &man.semctl.2; nderung3000037. Juni 19983.0-CURRENT nach ioctl arg nderungen3000043. September 19983.0-CURRENT nach ELF-Konvertierung30000516. Oktober 19983.0-RELEASE30000616. Oktober 19983.0-CURRENT nach 3.0-RELEASE30000722. Januar 19993.0-STABLE nach 3/4 Zweig3100009. Februar 19993.1-RELEASE31000127. Mrz 19993.1-STABLE nach 3.1-RELEASE31000214. April 19993.1-STABLE nach nderung der C++
Konstruktor/Destruktor-Reihenfolge3200003.2-RELEASE3200018. Mai 19993.2-STABLE32000229. August 19993.2-STABLE nach binr-inkompatibler IPFW und
Socket-nderungen3300002. September 19993.3-RELEASE33000116. September 19993.3-STABLE33000224. November 19993.3-STABLE nach Hinzufgen von &man.mkstemp.3;
zur libc3400005. Dezember 19993.4-RELEASE34000117. Dezember 19993.4-STABLE35000020. Juni 20003.5-RELEASE35000112. Juli 20003.5-STABLE40000022. Januar 19994.0-CURRENT nach 3.4 Zweig40000120. Februar 19994.0-CURRENT nach der nderung im Verhalten des
dynamischen Linkers.40000213. Mrz 19994.0-CURRENT nach nderung der C++
Konstruktor/Destruktor Reihenfolge.40000327. Mrz 19994.0-CURRENT nach funktionierendem &man.dladdr.3;.4000045. April 19994.0-CURRENT nach der __deregister_frame_info
Fehlerbehebung fr den dynamischen Linker (auch
4.0-CURRENT nach EGCS 1.1.2 Integration).40000527. April 19994.0-CURRENT nach &man.suser.9; API nderung
(auch 4.0-CURRENT nach newbus).40000631. Mai 19994.0-CURRENT nach nderung der
cdevsw-Registrierung.40000717. Juni 19994.0-CURRENT nach Hinzufgen von so_cred
fr Zugangsberechtigungen auf Socket-Ebene.40000820. Juni 19994.0-CURRENT nach Hinzufgen eines poll
Syscall-Wrappers zur libc_r.40000920. Juli 19994.0-CURRENT nach der nderung des Kernel
dev_t-Typs zum struct
specinfo-Zeiger.40001025. September 19994.0-CURRENT nach dem Beseitigen eines Fehlers in
&man.jail.2;.40001129. September 19994.0-CURRENT nach der sigset_t
Datentyp nderung.40001215. November 19994.0-CURRENT nach dem Wechsel zum GCC
2.95.2-Compiler.4000134. Dezember 19994.0-CURRENT nach Hinzufgen der erweiterbaren
Linux Mode ioctl-Routinen.40001418. Januar 20004.0-CURRENT nach dem OpenSSL-Import.40001527. Januar 20004.0-CURRENT nach der C++ ABI nderung in GCC
2.95.2 von -fvtable-thunks zu -fno-vtable-thunks als
Standard.40001627. Februar 20004.0-CURRENT nach OpenSSH-Import.40001713. Mrz 20004.0-RELEASE40001817. Mrz 20004.0-STABLE nach 4.0-RELEASE4000195. Mai 20004.0-STABLE nach der Einfhrung von
verzgerten Prfsummen.4000204. Juni 20004.0-STABLE nach dem Einpflegen des
libxpg4-Quelltextes in die libc.4000218. Juli 20004.0-STABLE nach der Aktualisierung von Binutils auf
2.10.0, nderungen der binren ELF-Markierungen,
Aufnahme von tcsh ins Basissystem.41000014. Juli 20004.1-RELEASE41000129. Juli 20004.1-STABLE nach 4.1-RELEASE41000216. September 20004.1-STABLE nachdem &man.setproctitle.3; von der
libutil in die libc verschoben wurde.41100025. September 20004.1.1-RELEASE4110014.1.1-STABLE nach 4.1.1-RELEASE42000031. Oktober 20004.2-RELEASE42000110. Januar 20014.2-STABLE nach Kombinaion von libgcc.a und
libgcc_r.a und zugehrigen nderungen der
GCC-Bindungen.4300006. Mrz 20014.3-RELEASE43000118. Mai 20014.3-STABLE nach der Einfhrung von
wint_t.43000222. Juli 20014.3-STABLE nach dem Einpflegen der PCI
Stromstatus-API.4400001. August 20014.4-RELEASE44000123. Oktober 20014.4-STABLE nach der Einfhrung von
d_thread_t.4400024. November 20014.4-STABLE nach den nderungen der
mount-Struktur (betrifft Dateisystem-Kernelmodule).
44000318. Dezember 20014.4-STABLE nachdem die Userland-Komponenten von
smbfs importiert worden sind.45000020. Dezember 20014.5-RELEASE45000124. Februar 20024.5-STABLE nach der Umbenennung von Elementen der
USB-Struktur.45000416. April 20024.5-STABLE nachdem die
sendmail_enable &man.rc.conf.5;
Variable gendert worden ist, um den Wert
NONE zu akzeptieren.45000527. April 20024.5-STABLE nachdem XFree86 4 als Standard zum Bauen
der Pakete benutzt wird.4500061. Mai 20024.5-STABLE nach dem Reparieren des Empfangsfilters,
welcher anfllig fr einfache DoS-Attacken
war.46000021. Juni 20024.6-RELEASE46000121. Juni 20024.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.46000219. Juli 20024.6.2-RELEASE46010026. Juni 20024.6-STABLE46010126. Juni 20024.6-STABLE nach dem Einflieen von `sed -i' aus
CURRENT.4601021. September 20024.6-STABLE nach dem Einflieen von vielen
neuen pkg_install-Funktionen aus HEAD (HEAD = die
aktuellste und letzte Version des
Quellverzeichnisbaumes).4700008. Oktober 20024.7-RELEASE4701009. Oktober 20024.7-STABLE47010110. November 2002Beginn von generierten __std{in,out,err}p
Referenzen statt __sF. Dies ndert std{in,out,err}
von einem Ausdruck whrend des Kompilierens zu einem
Laufzeitausdruck.47010223. Januar 20034.7-STABLE nach dem Einfliessen von
mbuf-nderungen, um m_aux mbufs mit denen von m_tag
zu ersetzen47010314. Februar 20034.7-STABLE erhlt OpenSSL 0.9.748000030. Mrz 20034.8-RELEASE4801005. April 20034.8-STABLE48010122. Mai 20034.8-STABLE nachdem &man.realpath.3; Thread-sicher
gemacht wurde.48010210. August 20034.8-STABLE nderung der 3ware-API in twe.49000027. Oktober 20034.9-RELEASE49010027. Oktober 20034.9-STABLE4901018. Januar 20044.9-STABLE nachdem e_sid zu der Struktur
kinfo_eproc hinzugefgt wurde.4901024. Februar 20044.9-STABLE nach dem Einfliessen der
libmap-Funktionalitt fr rtld.49100025. Mai 20044.10-RELEASE4911001. Juni 20044.10-STABLE49110111. August 20044.10-STABLE nach dem Einfliessen von Revision
20040629 der Paket-Werkzeuge aus CURRENT.49110216. November 20044.10-STABLE nach der Fehlerbehebung in der VM, um
das Freigeben von fiktiven Speicherseiten korrekt zu
handhaben.49200017. Dezember 20044.11-RELEASE49210017. Dezember 20044.11-STABLE49210118. April 20064.11-STABLE nach dem Hinzufgen von
libdata/ldconfig Verzeichnissen zu den
mtree-Dateien.50000013. Mrz 20005.0-CURRENT50000118. April 20005.0-CURRENT nach Hinzufgen von
zustzlichen Feldern in den ELF-Headern und
ndern der Methode zur ELF-Markierung von
Binrdateien.5000022. Mai 20005.0-CURRENT nach kld-Metadaten
nderungen.50000318. Mai 20005.0-CURRENT nach buf/bio nderungen.50000426. Mai 20005.0-CURRENT nach binutils Aktualisierung.5000053. Juni 20005.0-CURRENT nach dem Einfliessen des libxpg4
Quelltextes in die libc und der Einfhrung der
TASKQ-Schnittstelle.50000610. Juni 20005.0-CURRENT nach dem Hinzufgen der
AGP-Schnittstellen.50000729. Juni 20005.0-CURRENT nach der Aktualisierung von Perl auf
Version 5.6.0.5000087. Juli 20005.0-CURRENT nach der Aktualisierung des
KAME-Quelltextes zu den 2000/07-Quellen.50000914. Juli 20005.0-CURRENT nach ether_ifattach() und
ether_ifdetach() nderungen.50001016. Juli 20005.0-CURRENT nachdem die mtree-Standards zurck
zur ursprnglichen Variante gendert wurden; -L
hinzugefgt, um Symlinks zu folgen.50001118. Juli 20005.0-CURRENT nachdem die kqueue-API gendert
worden ist.5000122. September 20005.0-CURRENT nachdem &man.setproctitle.3; von
libutil nach libc verschoben worden ist.50001310. September 20005.0-CURRENT nach dem ersten SMPng-Commit.5000144. Januar 20015.0-CURRENT nachdem <sys/select.h> nach
<sys/selinfo.h> verschoben worden ist.50001510. Januar 20015.0-CURRENT nach dem Kombinieren von libgcc.a und
libgcc_r.a und damit verbundene nderungen an
GCC-Bindungen.50001624. Januar 20015.0-CURRENT nach der nderung das
Zusammenbinden von libc und libc_r zu erlauben, womit die
-pthread Option veraltet ist.50001718. Februar 20015.0-CURRENT nach dem Umschalten von struct ucred zu
struct xucred, um die vom Kernel exportierte API fr
mount u.a.zu stabilisieren.50001824. Februar 20015.0-CURRENT nach dem Hinzufgen der CPUTYPE
make Variable zum Kontrollieren von CPU-spezifischen
Optimierungen.5000199. Juni 20015.0-CURRENT nach dem Verschieben von
machine/ioctl_fd.h nach sys/fdcio.h50002015. Juni 20015.0-CURRENT nach der Umbenennung der
locale-Namen.50002122. Juni 20015.0-CURRENT nach dem Bzip2-Import. Kennzeichnet
auch, dass S/Key entfernt wurde.50002212. Juli 20015.0-CURRENT nach SSE Untersttzung.50002314. September 20015.0-CURRENT nach KSE-Meilenstein 2.5000241. Oktober 20015.0-CURRENT nach d_thread_t, und nachdem UUCP in
die Ports verschoben worden ist.5000254. Oktober 20015.0-CURRENT nach nderungen in der ABI bei der
Weitergabe von Deskriptoren und Berechtigungen auf 64 Bit
Plattformen.5000269. Oktober 20015.0-CURRENT nachdem XFree86 4 als Standard zum
Erstellen der Pakete benutzt wird und die neue libc
strnstr()-Funktion hinzugefgt wurde.50002710. Oktober 20015.0-CURRENT nachdem die neue libc
strcasestr()-Funktion hinzugefgt wurde.50002814. Dezember 20015.0-CURRENT nachdem die Userland-Komponenten von
smbfs importiert wurden.(nicht gendert)5.0-CURRENT nachdem die neuen C99-Ganzzahlen mit
spezifischer Breite hinzugefgt wurden.50002929. Januar 20025.0-CURRENT nachdem eine nderung im
Rckgabewert von &man.sendfile.2; gemacht
wurde.50003015. Februar 20025.0-CURRENT nach der Einfhrung des Types
fflags_t, welches die passende
Gre fr Dateiflags hat.50003124. Februar 20025.0-CURRENT nach der Umbenennung der USB
elements-Struktur.50003216. Mrz 20025.0-CURRENT nach der Einfhrung von Perl
5.6.1.5000333. April 20025.0-CURRENT nachdem die
sendmail_enable &man.rc.conf.5;
Variable gendert worden ist, um den Wert
NONE zu akzeptieren.50003430. April 20025.0-CURRENT nachdem mtx_init() einen dritten
Parameter entgegen nimmt.50003513. Mai 20025.0-CURRENT mit GCC 3.1.50003617. Mai 20025.0-CURRENT ohne Perl in /usr/src50003729. Mai 20025.0-CURRENT nach dem Hinzufgen von
&man.dlfunc.3;50003824. Juli 20025.0-CURRENT nachdem die Typen von einigen Elementen
der sockbuf-Struktur gendert wurden und nachdem die
Struktur neu geordnet wurde.5000391. September 20025.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 Schtzung fr den Beginn der
Untersttzung des &man.bzip2.1; Pakets verwendet
werden.50004020. September 20025.0-CURRENT nachdem verschiedene nderungen an
Plattenfunktionen gemacht wurden, um die Anhngigkeit
von Interna der disklabel-Struktur zu entfernen.5000411. Oktober 20025.0-CURRENT nach dem Hinzufgen von
&man.getopt.long.3; zur libc.50004215. Oktober 20025.0-CURRENT nach der Aktualisierung von Binutils
auf 2.13, bei denen die FreeBSD-Emulation, vec und das
Ausgabeformat gendert wurden.5000431. November 20025.0-CURRENT nach dem Hinzufgen schwacher
pthread_XXX Stubs zur libc, womit libXThrStub.so veraltet
ist. 5.0-RELEASE.50010017. Januar 20035.0-CURRENT nach dem Erstellen des
RELENG_5_0-Zweiges50010119. Februar 2003<sys/dkstat.h> ist leer und sollte nicht
inkludiert werden.50010225. Februar 20035.0-CURRENT nach der nderung in der
d_mmap_t-Schnittstelle.50010326. Februar 20035.0-CURRENT nachdem taskqueue_swi gedert
wurde, um ohne Giant zu arbeiten, und taskqueue_swi_giant
hinzugefgt wurde, um Giant zu verwenden.50010427. Februar 2003cdevsw_add() und cdevsw_remove() gibt es nicht
lnger. Auftauchen der
MAJOR_AUTO-Allokationsmglichkeit.5001054. Mrz 20035.0-CURRENT nach der neuen
cdevsw-Initialisierungsmethode.5001068. Mrz 2003devstat_add_entry() wurde durch
devstat_new_entry() ersetzt.50010715. Mrz 2003Devstat Schnittstellennderung; siehe
sys/sys/param.h 1.149.50010815. Mrz 2003Token-Ring Schnittstellennderungen.50010925. Mrz 2003Hinzufgen von vm_paddr_t.50011028. Mrz 20035.0-CURRENT nachdem &man.realpath.3;
Thread-sicher gemacht wurde.5001119. April 20035.0-CURRENT nachdem &man.usbhid.3; mit
NetBSD synchronisiert wurde.50011217. April 20035.0-CURRENT nach der neuen NSS Implementierung
und Hinzufgen der POSIX.1 getpw*_r, getgr*_r
Funktionen.5001132. Mai 20035.0-CURRENT nach Entfernen des alten
rc-Systems.5010004. Juni 20035.1-RELEASE.5011002. Juni 20035.1-CURRENT nach dem Erstellen des RELENG_5_1
Zweiges.50110129. Juni 20035.1-CURRENT nachdem die Semantik von
sigtimedwait(2) and sigwaitinfo(2) korrigiert
wurden.5011023. Juli 20035.1-CURRENT nach dem Hinzufgen der lockfunc und
lockfuncarg-Felder zu &man.bus.dma.tag.create.9;.50110331. Juli 20035.1-CURRENT nach der Integration des GCC 3.3.1-pre
20030711 Snapshots.5011045. August 20035.1-CURRENT 3ware-API nderungen in twe.50110517. August 20035.1-CURRENT Untersttzung von dynamisch
gebundenen /bin und /sbin und Verschieben von Bibliotheken
nach /lib.5011068. September 20035.1-CURRENT nachdem im Kernel Untersttzung
fr Coda 6.x hinzugefgt wurden.50110717. September 20035.1-CURRENT nachdem die 16550 UART-Konstanten von
<dev/sio/sioreg.h> nach
<dev/ic/ns16550.h> verschoben
wurden. Und nachdem die libmap Funktionalitt
vorbehaltlos vom rtld untersttzt wurde.50110823. September 20035.1-CURRENT nach Aktualisierung der PFIL_HOOKS API.50110927. September 20035.1-CURRENT nachdem kiconv(3) hinzugefgt
wurde.50111028. September 20035.1-CURRENT nachdem der standardmige
Ablauf von open und close in cdevsw gendert
wurde.50111116. Oktober 20035.1-CURRENT nachdem das Layout von cdevsw
gendert wurde.50111216. Oktober 20035.1-CURRENT nach dem Hinzufgen von
Mehrfachvererbung in kobj.50111331. Oktober 20035.1-CURRENT nach der if_xname nderung in der
Struktur ifnet50111416. November 20035.1-CURRENT nachdem /bin und /sbin gendert
wurden, um sie dynamisch zu binden.5020007. Dezember 20035.2-RELEASE50201023. Februar 20045.2.1-RELEASE5021007. Dezember 20035.2-CURRENT nach dem Erstellen des RELENG_5_2-Zweiges.50210119. Dezember 20035.2-CURRENT nachdem die
__cxa_atexit/__cxa_finalize Funktionen zur libc
hinzugefgt wurden.50210230. Januar 20045.2-CURRENT nachdem die Standard-Thread Bibliothek
von libc_r zu libpthread gendert wurde.50210321. Februar 20045.2-CURRENT nach dem Gertetreiber API
Megapatch.50210425. Februar 20045.2-CURRENT nachdem getopt_long_only()
hinzugefgt wurde.5021055. Mrz 20045.2-CURRENT nachdem NULL fr C in ((void *)0)
gendert wurde, was mehr Warnungen erzeugt.5021068. Mrz 20045.2-CURRENT nachdem pf beim Bauen und Installieren
mit eingebunden wird.50210710. Mrz 20045.2-CURRENT nachdem time_t auf der sparc64-Plattform
in einen 64-bit Wert gendert wurde.50210812. Mrz 20045.2-CURRENT nachdem sich die Untersttzung
fr den Intel C/C++-Compiler in einigen Headern und
execve(2) gendert hat, um sich strikter an POSIX zu
halten.50210922. Mrz 20045.2-CURRENT nach der Einfhrung der
bus_alloc_resource_any API50211027. Mrz 20045.2-CURRENT nach dem Hinzufgen von UTF-8
locales50211111. April 20045.2-CURRENT nach dem Entfernen der getvfsent(3)
API50211213. April 20045.2-CURRENT nach dem Hinzufgen der .warning
Directive fr make.5021134. Juni 20045.2-CURRENT nachdem ttyioctl() zwingend erforderlich
fr serielle Treiber gemacht wurde.50211413. Juni 20045.2-CURRENT nach dem Import des
ALTQ-Frameworks.50211514. Juni 20045.2-CURRENT nachdem sema_timedwait(9) gendert
wurde, 0 bei Erfolg und einen von 0 verschiedenen
Fehlercode im Falle eines Fehlers
zurckzuliefern.50211616. Juni 20045.2-CURRENT nach dem ndern der Kernel
Struktur dev_t, in ein Zeiger auf die Struktur cdev *50211717. Juni 20045.2-CURRENT nach dem ndern der Kernelstruktur
udev_t in dev_t.50211817. Juni 20045.2-CURRENT nachdem Untersttzung fr
CLOCK_VIRTUAL und CLOCK_PROF zu clock_gettime(2) und
clock_getres(2) hinzugefgt wurde.50211922. Juni 20045.2-CURRENT nachdem die berprfung des
Klonens von Netzwerk-Schnittstellen gendert
wurde.5021202. Juli 20045.2-CURRENT nach dem Einfliessen von Revision
20040629 der Paket-Werkzeuge.5021219. Juli 20045.2-CURRENT nachdem Bluetooth-Quelltext als nicht
i386-spezifisch markiert wurde.50212211. Juli 20045.2-CURRENT nach der Einfhrung des KDB
Debugger Frameworks, der Umwandlung des DDB in ein Backend
und der Einfhrung des GDB-Backends.50212312. Juli 20045.2-CURRENT nachdem VFS_ROOT gendert wurde,
eine Struktur thread als Argument zu aktzeptieren, wie
vflush. Die Struktur kinfo_proc enthlt nun einen
Zeiger auf Benutzer Daten. Der Umstieg auf
xorg als standardmige X
Implementierung wurde auch zu dieser Zeit
durchgefhrt.50212424. Juli 20045.2-CURRENT nachdem die Art und Weise, wie rc.d-Skripte
von Ports und Altlasten gestartet werden, getrennt wurde.50212528. Juli 20045.2-CURRENT nachdem die vorherige nderung
rckgngig gemacht wurde.50212631. Juli 20045.2-CURRENT nach dem Entfernen von
kmem_alloc_pageable() und dem Import von GCC 3.4.2.5021272. August 20045.2-CURRENT nachdem die UMA Kernel API
gendert wurde, um Konstruktoren und
Initialisierungsmethoden zu erlauben
fehlzuschlagen.5021288. August 20045.2-CURRENT nach der nderung in der vfs_mount
Signatur sowie allgemeines Ersetzen von PRISON_ROOT durch
SUSER_ALLOWJAIL in der suser(9) API.50300023. August 20045.3-BETA/RC vor der nderung der pfil-API.50300122. September 20045.3-RELEASE50310016. Oktober 20045.3-STABLE nach dem Erstellen des RELENG_5_3-Zweiges.5031013. Dezember 20045.3-STABLE nach dem Hinzufgen von
Flloptionen im Stile der libc zu
&man.strftime.3;.50310213. Februar 20055.3-STABLE nachdem OpenBSD's nc(1) von CURRENT
importiert wurde.50310327. Februar 20055.4-PRERELEASE nach dem Einfliessen der Reparaturen
aus CURRENT, in
<src/include/stdbool.h> und
<src/sys/i386/include/_types.h>,
um die GCC-Kompatibilitt des Intel C/C++-Compilers
zu benutzen.50310428. Februar 20055.4-PRERELEASE nach dem Einfliessen der
nderung aus CURRENT in ifi_epoch statt der lokalen
Zeit die Betriebszeit des Systems zu benutzen.5031052. Mrz 20055.4-PRERELEASE nach dem Einfliessen der Reparaturen
von EOVERFLOW in vswprintf(3) aus CURRENT.5040003. April 20055.4-RELEASE.5041003. April 20055.4-STABLE nach dem Erstellen des
RELENG_5_4-Zweiges.50410111. Mai 20055.4-STABLE nach dem Vergrern der
standardmigen Stackgre fr
Threads.50410224. Juni 20055.4-STABLE nach dem Hinzufgen von sha256.5041033. Oktober 20055.4-STABLE nach dem Einfliessen von if_bridge aus
CURRENT.50410413. November 20055.4-STABLE nach dem Einfliessen von bsdiff und
portsnap aus CURRENT.50410517. Januar 20065.4-STABLE nach dem Einfliessen der nderung
von ldconfig_local_dirs aus CURRENT.50500012. Mai 20065.5-RELEASE.50510012. Mai 20065.5-STABLE nach dem Erstellen des RELENG_5_5-Zweiges.60000018. August 20046.0-CURRENT60000127. August 20046.0-CURRENT nach der festen Aktivierung von
PFIL_HOOKS im Kernel.60000230. August 20046.0-CURRENT nach der anfnglichen
Einfhrung von ifi_epoch zur Struktur if_data. Wurde
nach ein paar Tagen wieder rckgngig gemacht.
Benutzen Sie diesen Wert bitte nicht.6000038. September 20046.0-CURRENT nach dem erneuten Hinzufgen des
Elements ifi_epoch zur Struktur if_data.60000429. September 20046.0-CURRENT nach dem Hinzufgen der Struktur
inpcb als Argument in der pfil API.6000055. Oktober 20046.0-CURRENT nach dem Hinzufgen des "-d
DESTDIR" Schalters zu newsyslog.6000064. November 20046.0-CURRENT nach dem Hinzufgen von
Flloptionen im Style der libc zu
&man.strftime.3;.60000712. Dezember 20046.0-CURRENT nach dem Hinzufgen von 802.11
Framework Neuerungen.60000825. Januar 20056.0-CURRENT nderung an den VOP_*VOBJECT()
Funktionen und Einfhrung des MNTK_MPSAFE Schalters
fr Dateisysteme, welche ohne Giant arbeiten.6000094. Februar 20056.0-CURRENT nach dem Hinzufgen von cpufreq
Framework und Treibern.6000106. Februar 20056.0-CURRENT nachdem OpenBSD's nc(1) importiert
wurde.60001112. Februar 20056.0-CURRENT nachdem der Anschein von
matherr() Untersttzung in SVID2
entfernt wurde.60001215. Februar 20056.0-CURRENT nach dem Vergrern der
standardmigen Stackgre fr
Threads.60001319. Februar 20056.0-CURRENT nach dem Einfliessen der Reparaturen in
<src/include/stdbool.h> und
<src/sys/i386/include/_types.h>,
um die GCC-Kompatibilitt des Intel C/C++-Compilers
zu benutzen.60001421. Februar 20056.0-CURRENT nachdem die berprfungen auf
EOVERFLOW in vswprintf(3) korrigiert wurden.60001525. Februar 20056.0-CURRENT nach dem Einfliessen der nderung,
in ifi_epoch, statt der lokalen Zeit, die Betriebzeit des
Systems zu benutzen.60001626. Februar 20056.0-CURRENT nachdem das Format von LC_CTYPE auf der
Festplatte verndert wurde.60001727. Februar 20056.0-CURRENT nachdem das Format der NLS-Kataloge auf
der Festplatte verndert wurde.60001827. Februar 20056.0-CURRENT nachdem das Format von LC_COLLATE auf
der Festplatte verndert wurde.60001928. Februar 2005Installation der acpica Include-Dateien in
/usr/include.6000209. Mrz 2005Hinzufgen des MSG_NOSIGNAL Schalters zur
send(2) API.60002117. Mrz 2005Hinzufgen von Feldern zu cdevsw60002221. Mrz 2005gtar wurde aus dem Basissystem entfernt.60002313. April 2005Die Optionen LOCAL_CREDS, LOCAL_CONNWAIT fr
Sockets wurde zu unix(4) hinzugefgt.60002419. April 2005&man.hwpmc.4; und zugehrige Werkzeuge wurden
zu 6.0-CURRENT hinzugefgt.60002526. April 2005Die Struktur icmphdr wurden zu 6.0-CURRENT
hinzugefgt.6000263. Mai 2005pf Aktualisierung auf 3.7.6000276. Mai 2005Kernel libalias und ng_nat wurden
eingefhrt.60002813. Mai 2005POSIX ttyname_r(3) wurde ber unistd.h und
libc zur Verfgung gestellt.60002929. Mai 20056.0-CURRENT nachdem libpcap zu Version v0.9.1 alpha
096 aktualisiert wurde.6000305. Juni 20056.0-CURRENT nach dem Import von NetBSDs
if_bridge(4).60003110. Juni 20056.0-CURRENT nachdem die Struktur ifnet aus dem
Treiber softcs herausgelst wurde.60003211. Juli 20056.0-CURRENT nach dem Import von libpcap
v0.9.1.60003325. Juli 20056.0-STABLE nachdem die Versionen aller gemeinsam
genutzten Bibliotheken, welche seit RELENG_5 nicht
gendert wurden, erhht wurden.60003413. August 20056.0-STABLE nachdem das Argument credential zu der
dev_clone-Ereignisbehandlung hinzugefgt wurde.
6.0-RELEASE.6001001. November 20056.0-STABLE nach dem Erstellen des
6.0-RELEASE-Zweiges.60010121. Dezember 20056.0-STABLE nach dem Aufnehmen von Skripten aus den
local_startup-Verzeichnissen in &man.rcorder.8; des
Basissystems.60010230. Dezember 20056.0-STABLE nach dem Aktualisieren der ELF-Typen und
Konstanten.60010315. Januar 20066.0-STABLE nach dem Einfliessen der pidfile(3)-API
aus CURRENT.60010417. Januar 20066.0-STABLE nach dem Einfliessen der nderung
von ldconfig_local_dirs aus CURRENT.60010526. Februar 20066.0-STABLE nach der NLS-Kataloguntersttzung
von csh(1).6010006. Mai 20066.1-RELEASE6011006. Mai 20066.1-STABLE nach 6.1-RELEASE.60110122. Juni 20066.1-STABLE nach dem Import von csup.60110211. Juli 20066.1-STABLE nach der iwi(4)-Aktualisierung.60110317. Juli 20066.1-STABLE nach der Aktualisierung der
Namensauflsung zu BIND9 und Aufnahme der
ablaufinvarianten Versionen der netdb-Funktionen.6011048. August 20066.1-STABLE nachdem Untersttzung fr DSO
(dynamic shared objects - gemeinsam genutzte, dynamische
Objekte) in OpenSSL aktiviert wurde.6011052. September 20066.1-STABLE nachdem 802.11 Reparaturen die API der
IEEE80211_IOC_STA_INFO ioctl gendert haben.60200015. November 20066.2-RELEASE60210015. September 20066.2-STABLE nach 6.2-RELEASE.60210112. Dezember 20066.2-STABLE nach dem Hinzufgen der Wi-Spy
Eigenart.60210228. Dezember 20066.2-STABLE nachdem pci_find_extcap() hinzugefgt
wurde.60210316. Januar 20076.2-STABLE nach dem Einpflegen der dlsym
nderung aus CURRENT, ein angefordertes Symbol sowohl
in der spezifizierten dso, als auch in den impliziten
Abhngigkeiten nachzuschlagen.60210428. Januar 20076.2-STABLE nach dem Einpflegen von ng_deflate(4)
und ng_pred1(4) netgraph Knoten und neuen Kompressions-
und -Verschlsselungmodi fr den ng_ppp(4)
Knoten aus CURRENT.60210520. Februar 20076.2-STABLE nach dem Einpflegen der BSD lizensierten
Version von &man.gzip.1;, welche von NetBSD portiert wurde
aus CURRENT.60210631. Mrz 20076.2-STABLE nach dem Einpflegen der PCI MSI und
MSI-X Untersttzung aus CURRENT.6021076. April 20076.2-STABLE nach dem Einpflegen von ncurses 5.6 und
Untersttzung fr Multibyte-Zeichen aus
CURRENT.60210811. April 20076.2-STABLE nach dem Einpflegen des 'SG'
Peripheriegertes aus CURRENT in CAM, welches einen
Teil der SCSI SG passthrough Gerte API von Linux
enthlt.60210917. April 20076.2-STABLE nach dem Einpflegen von readline 5.2
Patchset 002 aus CURRENT.6021102. Mai 20076.2-STABLE nach dem Einpflegen von
pmap_invalidate_cache(), pmap_change_attr(),
pmap_mapbios(), pmap_mapdev_attr(), und pmap_unmapbios()
fr amd64 und i386 aus CURRENT.60211111. Juni 20076.2-STABLE nach dem Einpflegen von BOP_BDFLUSH aus
CURRENT und dem daraus resultierendem Bruch mit dem
Dateisystemmodul KBI.60211221. September 20076.2-STABLE nach dem Einpflegen von libutil(3) aus
CURRENT.60211325. Oktober 20076.2-STABLE, nach der Trennung in "wide und
single byte ctype". Neu kompilierte Binrdateien,
die ctype.h referenzieren, erfordern mglicherweise
ein neues Symbol, __mb_sb_limit, das auf lteren
Systemen nicht verfgbar ist.60211430. Oktober 20076.2-STABLE, nachdem die ctype
ABI-Aufwrtskompatibilitt wiederhergestellt
wurde.60211521. November 2007FreeBSD 6.2-STABLE nach der Entfernung/Eliminierung
der wide und single Byte ctype-Trennung60300025. November 20076.3-RELEASE60310025. November 20076.3-STABLE nach 6.3-RELEASE.6031017. Dezember 20076.3-STABLE, nachdem der Support fr den
Multibyte-Datentyp im Bit-Makro gefixt wurde.60310224. April 20086.3-STABLE nach Hinzufgen von l_sysid zu
struct flock.60310327. Mai 20086.3-STABLE nach Einflieen der
memrchr-Funktion.60310415. Juni 20086.3-STABLE nach bernahme der
Untersttzung von :u als
Variablenwandler in make(1).6040004. Oktober 20086.4-RELEASE6041004. Oktober 20086.4-STABLE nach 6.4-RELEASE.70000011. Juli 20057.0-CURRENT.70000123. Juli 20057.0-CURRENT nachdem die Versionen aller gemeinsam
genutzten Bibliotheken, welche seit RELENG_5 nicht
gendert wurden, erhht wurden.70000213. August 20057.0-CURRENT nachdem ein Berechtigungs-Argument zur
dev_clone-Ereignisroutine hinzugefgt wurde.70000325. August 20057.0-CURRENT nachdem memmem(3) zur libc
hinzugefgt wurde.70000430. Oktober 20057.0-CURRENT nachdem die Argumente der
Kernelfunktion solisten(9) modifiziert wurden, um einen
Backlog-Parameter (Anzahl der maximalen wartenden
Verbindungen) zu akzeptieren.70000511. November 20057.0-CURRENT nachdem IFP2ENADDR() gendert
wurde, einen Zeiger auf IF_LLADDR()
zurckzugeben.70000611. November 20057.0-CURRENT nach dem Hinzufgen des
if_addr-Elements zur Struktur
ifnet und dem Entfernen von
IFP2ENADDR().7000072. Dezember 20057.0-CURRENT nach dem Aufnehmen von Skripten aus den
local_startup Verzeichnissen in &man.rcorder.8; des
Basissystems.7000085. Dezember 20057.0-CURRENT nach dem Entfernen der MNT_NODEV
mount-Option.70000919. Dezember 20057.0-CURRENT nach ELF-64 Typen nderungen und
Symbol Versionierung.70001020. Dezember 20057.0-CURRENT nach Hinzufgen der hostb und
vgapci Treiber, Hinzufgen von pci_find_extcap() und
nderung der AGP Treiber die Apertur nicht
lnger abzubilden.70001131. Dezember 20057.0-CURRENT nachdem auf allen Plattformen
auer Alpha tv_sec in time_t umgewandelt
wurde.7000128. Januar 20067.0-CURRENT nach nderung von
ldconfig_local_dirs.70001312. Januar 20067.0-CURRENT nach nderung in
/etc/rc.d/abi um
/compat/linux/etc/ld.so.cache als
Symlink in ein schreibgeschtztes Dateisystem zu
untersttzen.70001426. Januar 20067.0-CURRENT nach pts Import.70001526. Mrz 20067.0-CURRENT nach Einfhrung von Version 2 der
&man.hwpmc.4;'s ABI.70001622. April 20067.0-CURRENT nach dem Hinzufgen von
&man.fcloseall.3; zur libc.70001713. Mai 20067.0-CURRENT nach dem Entfernen von ip6fw.70001815. Juli 20067.0-CURRENT nach dem Import von snd_emu10kx.70001929. Juli 20067.0-CURRENT nach dem Import von OpenSSL
0.9.8b.7000203. September 20067.0-CURRENT nach dem Hinzufgen der
bus_dma_get_tag-Funktion7000214. September 20067.0-CURRENT nach dem Import von libpcap 0.9.4 und
tcpdump 3.9.4.7000229. September 20067.0-CURRENT nach der dlsym nderung, ein
angefordertes Symbol sowohl in der spezifizierten dso, als
auch in den impliziten Abhngigkeiten
nachzuschlagen.70002323. September 20067.0-CURRENT nach dem Hinzufgen neuer
Sound-IOCTLs fr die OSSv4-Mixer-API.70002428. September 20067.0-CURRENT nach dem Import von OpenSSL
0.9.8d.70002511. November 20067.0-CURRENT nach dem Hinzufgen der
libelf.70002626. November 20067.0-CURRENT nach greren
nderungen an den Sound sysctls.70002730. November 20067.0-CURRENT nach dem Hinzufgen der
Wi-Spy-Eigenart.70002815. Dezember 20067.0-CURRENT nach dem Hinzufgen von
sctp-Aufrufen zur libc.70002926. Januar 20077.0-CURRENT nach dem Ersetzen von GNU &man.gzip.1;
durch eine von NetBSD portierte Version, die unter
BSD-Lizenz steht.7000307. Februar 20077.0-CURRENT nach dem Entfernen der IPIP
Tunnelkapselung (VIFF_TUNNEL) aus dem IPv4
Multicast-Forwarding-Quelltext.70003123. Februar 20077.0-CURRENT nach den Modifizierungen an
bus_setup_intr() (newbus).7000322. Mrz 20077.0-CURRENT nach der Aufnahme der Firmware fr
ipw(4) und iwi(4).7000339. Mrz 20077.0-CURRENT nach Untersttzung fr
Multibyte-Zeichen.70003419. Mrz 20077.0-CURRENT nach nderungen, wie insmntque(),
getnewvnode() und vfs_hash_insert() arbeiten.70003526. Mrz 20077.0-CURRENT nach Hinzufgen eines
Benachrichtigungsmechanismus fr CPU
Frequenznderungen.7000366. April 20077.0-CURRENT nach dem Import des ZFS
Dateisystemes.7000378. April 20077.0-CURRENT nach dem Einpflegen des 'SG'
Peripheriegertes in CAM, welches einen Teil der SCSI
SG passthrough Gerte API von Linux
enthlt.70003830. April 20077.0-CURRENT nachdem &man.getenv.3;, &man.putenv.3;,
&man.setenv.3; und &man.unsetenv.3; gendert wurden,
um POSIX konform zu sein.7000391. Mai 20077.0-CURRENT nachdem die nderungen von 700038
rckgngig gemacht wurden.70004010. Mai 20077.0-CURRENT nach dem Hinzufgen von
&man.flopen.3; zur libutil.70004113. Mai 20077.0-CURRENT nachdem Symbol Versionierung aktiviert
und die standardmige Thread-Bibliothek zu
libthr gendert wurde.70004219. Mai 20077.0-CURRENT nach dem Import von GCC 4.2.0.70004321. Mai 20077.0-CURRENT nachdem die Versionen aller
Shared-Libraries, welche seit RELENG_6 nicht gendert
wurden, erhht worden sind.7000447. Juni 20077.0-CURRENT nachdem das Argument fr
vn_open()/VOP_OPEN() vom Dateideskriptorindex zur Struktur
file * gedert wurde.70004510. Juni 20077.0-CURRENT nachdem &man.pam.nologin.8;
gedert wurde, eine Kontoverwaltungs-Funktion statt
einer Authentifizierungsfunktion fr das
PAM-Framework zur Verfgung zu stellen.70004611. Juni 20077.0-CURRENT nach aktualisierter 802.11 wireless
Untersttzung.70004711. Juni 20077.0-CURRENT, nachdem
TCP-LRO-Schnittstellen-Ressourcen hinzugefgt
wurden.70004812. Juni 20077.0-CURRENT, nachdem die RFC 3678
API-Untersttzung zum IPv4-Stack hinzugefgt
wurde. Veraltetes RFC 1724-Verhalten
des IP_MULTICAST_IF ioctl wurde entfernt;
0.0.0.0/8 darf nicht lnger als Schnittstellen-Index
benutzt werden. Stattdessen sollte die Struktur ipmreqn
verwendet werden.7000493. Juli 20077.0-CURRENT, nachdem pf von OpenBSD 4.1
importiert wurde(nicht gendert)7.0-CURRENT, nachdem die IPv6-Untersttzung
um FAST_IPSEC erweitert, KAME IPSEC entfernt und
FAST_IPSEC in IPSEC umbenannt wurde.7000504. Juli 20077.0-CURRENT, nachdem Aufrufe von
setenv/putenv/usw. von der traditionellen
BSD-Art und Weise nach POSIX konvertiert
wurden.7000514. Juli 20077.0-CURRENT, nachdem neue Systemaufrufe
(mmap/lseek/usw.) implementiert wurden.7000526. Juli 20077.0-CURRENT, nachdem die I4B-Header nach
include/i4b verschoben wurden.70005330. September 20077.0-CURRENT, nachdem die Untersttzung
fr PCI Domnen hinzugefgt
wurde.70005425. Oktober 20077.0-CURRENT, nach der Trennung in "wide und
single byte ctype".70005528. Oktober 20077.0-RELEASE sowie 7.0-CURRENT, nachdem die
ABI-Abwrtskompatibilitt fr die
FreeBSD 4/5/6-Versionen der PCIOCGETCONF-, PCIOCREAD-
sowie PCIOCWRITE IOCTLs hinzugefgt wurde. Damit
verbunden war, dass die ABI der PCIOCGETCONF IOCTL
erneut deaktiviert werden musste.70010022. Dezember 20077.0-STABLE nach 7.0-RELEASE.7001018. Februar 20087.0-STABLE nach Einfhrung von
m_collapse().70010230. Mrz 20087.0-STABLE nach Einflieen von
kdb_enter_why().70010310. April 20087.0-STABLE nach Hinzufgen von l_sysid zu
struct flock.70010411. April 20087.0-STABLE nach bernahme von
procstat(1).70010511. April 20087.0-STABLE nach Einfhrung von
umtx-Features.70010615. April 20087.0-STABLE nach Hinzufgen der
Untersttzung von &man.write.2; zu
&man.psm.4;.70010720. April 20087.0-STABLE nach Hinzufgen des Befehls
F_DUP2FD zu &man.fcntl.2;.7001085. Mai 20087.0-STABLE nach einigen nderungen an
&man.lockmgr.9;, welche die Einbindung von
sys/lock.h zur Verwendung von
&man.lockmgr.9; voraussetzen.70010927. Mai 20087.0-STABLE nach Einflieen der
memrchr-Funktion.7001105. August 20087.0-STABLE nach Einfhrung eines Clients
fr den Kernel NFS lockd.70011120. August 20087.0-STABLE nach Hinzufgen einer
Untersttzung von physisch fortlaufender
Jumbo Frames.70011227. August 20087.0-STABLE nach Einflieen einer
Kerneluntersttzung fr DTrace.70100025. November 20087.1-RELEASE70110025. November 20087.1-STABLE nach 7.1-RELEASE.70110110. Januar 20097.1-STABLE nach bernahme von
strndup.70110217. Januar 20097.1-STABLE nach Hinzufgen einer
Untersttzung von cpuctl(4).7011037. Februar 20097.1-STABLE nach Einflieen der
Untersttzung von Jails mit keinen oder mehreren
IPv4-/IPv6-Adressen.70110414. Februar 20097.1-STABLE, nachdem der Besitzer des Suspend in
struct mount gespeichert wird und die Funktion
vfs_susp_clean in struct vfsops aufgenommen
ist.70110512. Mrz 20097.1-STABLE nach der inkompatiblen nderung
am sysctl kern.ipc.shmsegs, um die Anforderung
grerer Segmente von gemeinsam genutzten
SysV-Speicher auf 64bit-Architekturen zu
erlauben.70110614. Mrz 20097.1-STABLE nach der bernahme einer
Fehlerbehebung fr Warteoperationen, die
POSIX-Semaphore verwenden.70200015. April 20097.2-RELEASE70210015. April 20097.2-STABLE nach 7.2-RELEASE.70210115. Mai 20097.2-STABLE, nachdem ichsmb(4) dahingehend
gendert wurde, dass es links-ausgerichtete
Adressierung von Slaves verwendet, um anderen
SMBus-Kontrollertreibern zu entsprechen.70210228. Mai 20097.2-STABLE nach dem Einflieen der Funktion
fdopendir.70210306. Juni 20097.2-STABLE nach dem Einflieen von PmcTools.70210414. Juli 20097.2-STABLE nach dem Einflieen des
Systemaufrufs closefrom.70210531. Juli 20097.2-STABLE nach dem Einflieen der
nderung an der SYSVIPC-ABI.70210614. September 20097.2-STABLE nach dem Einflieen der
PAT-Verbesserungen fr x86-Prozessoren sowie dem
Hinzufgen von d_mmap_single() und des
VM-Objekttyps fr scatter/gather-Listen.7030009. Februar 20107.3-RELEASE7031009. Februar 20107.3-STABLE nach 7.3-RELEASE.70400022. Dezember 20107.4-RELEASE70410022. Dezember 20107.4-STABLE, nachdem 7.4-RELEASE erzeugt
wurde.80000011. Oktober 20078.0-CURRENT. Nach der Trennung in "wide und
single byte ctype".80000116. Oktober 20078.0-CURRENT, nachdem libpcap 0.9.8 und
tcpdump 3.9.8 importiert wurden.80000221. Oktober 20078.0-CURRENT, nachdem kthread_create() und
Konsorten in kproc_create() usw. umbenannt
wurden.80000324. Oktober 20078.0-CURRENT, nachdem die
ABI-Abwrtskompatibilitt fr die
FreeBSD 4/5/6-Versionen der PCIOCGETCONF-, PCIOCREAD-
sowie PCIOCWRITE IOCTLs hinzugefgt wurde. Damit
verbunden war, dass die ABI der PCIOCGETCONF IOCTL
erneut deaktiviert werden musste.80000412. November 20078.0-CURRENT, nachdem der agp(4) Treiber verschoben
wurde von src/sys/pci nach src/sys/dev/agp.8000054. Dezember 20078.0-CURRENT nach nderungen
am Jumbo Frame Allocator.8000067. Dezember 20078.0-CURRENT, nach dem Hinzufgen der
callgraph capture Funktionalitt zu &man.hwpmc.4;.80000725. Dezember 20078.0-CURRENT nach dem Hinzufgen von "why"
als Argument in kdb_enter().80000828. Dezember 20078.0-CURRENT nach Entfernen der Option
LK_EXCLUPGRADE.8000099. Januar 20088.0-CURRENT nach Einfhrung von
&man.lockmgr.disown.9;80001010. Januar 20088.0-CURRENT nach nderungen am
&man.vn.lock.9;-Prototyp.80001113. Januar 20088.0-CURRENT nach nderungen an den
Prototypen von &man.VOP.LOCK.9; und
&man.VOP.UNLOCK.9;.80001219. Januar 20088.0-CURRENT nach Einfhrung von
&man.lockmgr.recursed.9;, &man.BUF.RECURSED.9; und
&man.BUF.ISLOCKED.9; sowie Entfernung von
BUF_REFCNT().80001323. Januar 20088.0-CURRENT nach Einfhrung der
ASCII-Kodierung.80001424. Januar 20088.0-CURRENT nach nderungen am
&man.lockmgr.9;-Prototyp und Entfernung von
lockcount() sowie
LOCKMGR_ASSERT().80001526. Januar 20088.0-CURRENT nach Erweiterung der Datentypen der
&man.fts.3;-Strukturen.8000161. Februar 20088.0-CURRENT nach Hinzufgen eines neuen
Parameters zu MEXTADD(9).8000176. Februar 20088.0-CURRENT nach Einfhrung der Optionen
LK_NODUP und LK_NOWITNESS in die
&man.lockmgr.9;-Umgebung.8000188. Februar 20088.0-CURRENT nach Hinzufgen von
m_collapse.8000199. Februar 20088.0-CURRENT nach Hinzufgen einer Arbeits-,
Wurzel- und Jailverzeichnisuntersttzung zur
sysctl-Variable kern.proc.filedesc.80002013. Februar 20088.0-CURRENT nach Einfhrung der Funktionen
&man.lockmgr.assert.9; und
BUF_ASSERT.80002115. Februar 20088.0-CURRENT nach Einfhrung von
&man.lockmgr.args.9; und Entfernung der Option
LK_INTERNAL.800022(zurckgezogen)8.0-CURRENT nach Setzen von BSD &man.ar.1;
als Systemstandard.80002325. Februar 20088.0-CURRENT nach Prototypennderungen an
&man.lockstatus.9; und &man.VOP.ISLOCKED.9;, eigens zur
Abschaffung des Parameters
struct thread.8000241. Mrz 20088.0-CURRENT nach Beseitigung der Funktionen
lockwaiters und
BUF_LOCKWAITERS, nderung
des Rckgabewerts der Funktion
brelvp von void nach int sowie
Einfhrung neuer Optionen fr
&man.lockinit.9;.8000258. Mrz 20088.0-CURRENT nach Hinzufgen des Kommandos
F_DUP2FD zu &man.fcntl.2;.80002612. Mrz 20088.0-CURRENT nach nderung des Parameters
fr die Prioritt an cv_broadcastpri, sodass
0 fr keine Prioritt steht.80002724. Mrz 20088.0-CURRENT nach nderung der
Monitoring ABI von BPF, als Zero-Copy Puffer
hinzugefgt wurden.80002826. Mrz 20088.0-CURRENT nach Hinzufgen von l_sysid zu
struct flock.80002928. Mrz 20088.0-CURRENT nach Wiedereingliederung der Funktion
BUF_LOCKWAITERS und
Hinzufgen von &man.lockmgr.waiters.9;.8000301. April 20088.0-CURRENT nach Einfhrung der Funktionen
&man.rw.try.rlock.9; und &man.rw.try.wlock.9;.8000316. April 20088.0-CURRENT nach Einfhrung der Funktionen
lockmgr_rw und
lockmgr_args_rw.8000328. April 20088.0-CURRENT nach Implementierung des
Systemaufrufs openat und seiner Verwandten,
Einfhrung der Option O_EXEC in &man.open.2; und
Bereitstellung der entsprechenden Systemaufrufe
innerhalb der
&linux;-Kompatibilittsumgebung.8000338. April 20088.0-CURRENT nach Hinzufgen der
Untersttzung von &man.write.2; in der nativen
Operationsebene von &man.psm.4;. Es knnen nun
beliebig Kommandos nach
/dev/psm%d geschrieben und
der Status dann von dort gelesen werden.80003410. April 20088.0-CURRENT nach Einfhrung der Funktion
memrchr.80003516. April 20088.0-CURRENT nach Einfhrung der Funktion
fdopendir.80003620. April 20088.0-CURRENT nach Umstellung des Standards 802.11
auf Untersttzung von Multi-BSS (auch
vaps).8000379. Mai 20088.0-CURRENT nach Hinzufgen einer
Untersttzung fr
Multi Routing-Tabellen (siehe setfib(1),
setfib(2)).80003826. Mai 20088.0-CURRENT nach Entfernen von netatm und
ISDN4BSD sowie dem Hinzufgen der
Compact C Type (CTF)-Tools.80003914. Juni 20088.0-CURRENT nach Entfernen von sgtty.80004026. Juni 20088.0-CURRENT nach Einfhrung eines Clients
fr den Kernel NFS lockd.80004122. Juli 20088.0-CURRENT nach Hinzufgen von
arc4random_buf(3) und arc4random_uniform(3).8000428. August 20088.0-CURRENT nach Hinzufgen von
cpuctl(4).80004313. August 20088.0-CURRENT nach nderung von bpf(4) zur
Verwendung einer einzelnen Gertedatei anstatt
von Klonierung.80004417. August 20088.0-CURRENT nach bernahme des ersten Teils
aus dem vimage-Projekt durch Erweitern globaler
Variablen um den Prfix V_. Zuknftig werden
die virtualisierten Variablen dann mit Hilfe von
Makros in ihre globalen Namen aufgelst.80004520. August 20088.0-CURRENT nach Eingliederung des
MPSAFE TTY-Layers, einschlielich
nderungen an diversen Treibern und Werkzeugen,
die mit ihm kommunizieren.8000468. September 20088.0-CURRENT nach Abschottung der GDT pro CPU auf
der AMD64-Architektur.80004710. September 20088.0-CURRENT nach Entfernen von VSVTX, VSGID und
VSUID.80004816. September 20088.0-CURRENT nach Anpassung des Codes fr
Kernel NFS mount, sodass einzelne
Mountoptionen im Parameter struct iovec an
nmount() akzeptiert werden und nicht nur ein
groes struct nfs_args.80004917. September 20088.0-CURRENT nach Entfernen von &man.suser.9; und
&man.suser.cred.9;.80005020. Oktober 20088.0-CURRENT nach API-nderungen im Umgang
mit dem Buffer Cache.80005123. Oktober 20088.0-CURRENT nach Entfernen der Makros
&man.MALLOC.9; und &man.FREE.9;.80005228. Oktober 20088.0-CURRENT nach Einfhrung von accmode_t
und Umbennung des Parameters a_mode an VOP_ACCESS nach
a_accmode.8000532. November 20088.0-CURRENT nach nderung des Prototyps von
&man.vfs.busy.9; und Einfhrung der Optionen
MBF_NOWAIT sowie MBF_MNTLSTLOCK.80005422. November 20088.0-CURRENT nach Hinzufgen von Funktionen
im Bereich buf_ring, Memory Barriers und ifnet,
um mehrere Sendeschlangen auf Hardwareebene fr
Karten zu ermglichen, die dies
untersttzen, sowie einer
Ring Buffer-Implementierung ohne Lock, um
Treibern zu ermglichen, Paketschlangen
effizienter zu verwalten.80005527. November 20088.0-CURRENT nach Hinzufgen einer
Untersttzung fr &intel; Core, Core2
und Atom zu &man.hwpmc.4;.80005629. November 20088.0-CURRENT nach Einfhrung von Jails mit
mehreren oder gar keinen IPv4-/IPv6-Adressen.8000571. Dezember 20088.0-CURRENT nach Wechsel zum
ath_hal Quellcode.80005812. Dezember 20088.0-CURRENT nach Einfhrung der Funktion
VOP_VPTOCNP.80005915. Dezember 20088.0-CURRENT gliedert das neue ARPv2 ein.80006019. Dezember 20088.0-CURRENT nach Hinzufgen von
makefs.80006115. Januar 20098.0-CURRENT nach Umsetzung von
TCP Appropriate Byte Counting.80006228. Januar 20098.0-CURRENT nach Entfernen von minor(),
minor2unit(), unit2minor() usw.80006318. Februar 20098.0-CURRENT nach nderung der
GENERIC-Konfiguration zur Verwendung des
USB2-Stack und Hinzufgen von fdevname(3).80006423. Februar 20098.0-CURRENT, nachdem der USB2-Stack nach dev/usb
verschoben wurde, um es zu ersetzen.80006526. Februar 20098.0-CURRENT nach Umbenennen aller Funktionen in
libmp(3).80006627. Februar 20098.0-CURRENT nach Anpassung des devfs-Verhaltens
im Zusammenhang mit USB.80006728. Februar 20098.0-CURRENT nach Hinzufgen von getdelim(),
getline(), stpncpy(), strnlen(), wcsnlen(),
wcscasecmp() und wcsncasecmp().8000682. Mrz 20098.0-CURRENT nach Umbenennen der Gerteklasse
ushub in uhub.8000699. Mrz 20098.0-CURRENT nach Umbenennen von libusb20.so.1 in
libusb.so.1.8000709. Mrz 20098.0-CURRENT nach der Einfhrung von IGMPv3
und Source-Specific-Multicast (SSM) in den
IPv4-Stack.80007114. Mrz 20098.0-CURRENT nach der Anpassung von gcc zur
Verwendung der C99-Inline-Semantik in den Modi c99 und
gnu99.80007215. Mrz 20098.0-CURRENT, nachdem die Option IFF_NEEDSGIANT
entfernt wurde; Netzwerktreiber, die nicht MPSAFE
sind, werden nicht mehr untersttzt.80007318. Mrz 20098.0-CURRENT, nachdem die dynamische Ersetzung von
Zeichenkettenkrzeln fr rpath und
bentigte Pfade implementiert wurde.80007424. Mrz 20098.0-CURRENT nach dem Einflieen von
tcpdump 4.0.0 und libpcap 1.0.0.8000756. April 20098.0-CURRENT, nachdem die Deklarationen von
struct vnet_net, struct vnet_inet und
struct vnet_ipfw gendert wurden.8000769. April 20098.0-CURRENT nach dem Hinzufgen von
Laufzeitprofilen in dummynet.80007714. April 20098.0-CURRENT nach dem Entfernen von VOP_LEASE()
und vop_vector.vop_lease.80007815. April 20098.0-CURRENT, nachdem die Felder aus
struct rt_weight zu struct rt_metrics und
struct rt_metrics_lite hinzugefgt wurden,
wobei die Deklaration von struct rt_metrics_lite
gendert wurde. RTM_VERSION wurde
hochgezhlt (zurckgezogen).80007915. April 20098.0-CURRENT, nachdem Pointer auf
struct llentry zu struct route und
struct route_in6 hinzugefgt wurden.80008015. April 20098.0-CURRENT nach nderung der Deklaration
von struct inpcb.80008119. April 20098.0-CURRENT nach nderung der Deklaration
von struct malloc_type.80008221. April 20098.0-CURRENT nach nderung der Deklaration
von struct ifnet und Hinzufgen von if_ref()
und if_rele() zur Verwaltung von Referenzen auf
ifnet.80008322. April 20098.0-CURRENT nach der Implementierung einer
systemnahen Bluetooth-HCI-API.80008429. April 20098.0-CURRENT nach nderungen an IPv6-SSM und
MLDv2.80008530. April 20098.0-CURRENT, nachdem der Bau von VIMAGE-Kernel
mit einem aktiven Image untersttzt wird.8000868. Mai 20098.0-CURRENT nach Hinzufgen der
Untersttzung fr Eingabezeilen mit
beliebiger Lnge durch patch(1).80008711. Mai 20098.0-CURRENT nach einigen nderungen im
Zusammenhang mit dem VFS-KPI. Der Thread-Parameter
wurde von den FSD-Teilen des VFS entfernt.
VFS_*-Funktionen bentigen
den Kontext nicht mehr, da er sich immer auf
curthread bezieht. In wenigen
Sonderfllen ist das bisherige Verhalten nicht
gendert worden.80008820. Mai 20098.0-CURRENT nach nderungen am
net80211-Monitormodus.80008923. Mai 20098.0-CURRENT nach dem Hinzufgen der
Untersttzung von UDP-Kontrollblocks.80009023. Mai 20098.0-CURRENT nach der Virtualisierung der
Schnittstellenklonierung.80009127. Mai 20098.0-CURRENT nach dem Hinzufgen von
hierarchischen Jails und dem Entfernen des globalen
securelevel.80009229. Mai 20098.0-CURRENT nach der nderung des
sx_init_flags()-KPI.
SX_ADAPTIVESPIN wurde
zurckgezogen und eine neue Option
SX_NOADAPTIVE wurde
eingefhrt, um die umgekehrte Logik zu
behandeln.80009329. Mai 20098.0-CURRENT nach dem Hinzufgen von
mnt_xflag zu struct mount.80009430. Mai 20098.0-CURRENT nach dem Hinzufgen von
&man.VOP.ACCESSX.9;.80009530. Mai 20098.0-CURRENT nach der nderung des
Polling-KPI. Die Polling-Handler liefern nun die Zahl
der verarbeiteten Pakete zurck. Die neue Option
IFCAP_POLLING_NOCOUNT wurde
weiter eingefhrt, um anzugeben, dass der
Rckgabewert nicht von Bedeutung ist und das
Zhlen der Pakete ausgelassen werden
soll.8000961. Juni 20098.0-CURRENT nach der Aktualisierung der
netisr-Implementierung und nachdem die Weise, wie FIBs
gespeichert werden und wie auf sie zugegriffen wird,
gendert wurde.8000978. Juni 20098.0-CURRENT nach Einfhrung der
Destruktor-Infrastruktur fr vnet
einschlielich Hooks.80009711. Juni 20098.0-CURRENT nach Einfhrung eines
Erkennungssystems fr ausgehende Pakete, die
direkt wieder in netgraph gelangen und deswegen
eingereiht werden. Dabei wurde auch die Definition von
struct thread gendert.80009814. Juni 20098.0-CURRENT nach dem Einflieen von OpenSSL
0.9.8k.80009922. Juni 20098.0-CURRENT nach der Aktualisierung von NGROUPS
und dem Verschieben der Routing-Virtualisierung in ein
eigenes VImage-Modul.80010024. Juni 20098.0-CURRENT nach nderung der
SYSVIPC-ABI.80010129. Juni 20098.0-CURRENT nach dem Entfernen der
zeichenorientierten Gerte aus /dev/net, von
denen fr jede Schnittstelle eines
existiert.80010212. Juli 20098.0-CURRENT, nachdem struct sackhint, struct
tcpcb und struct tcpstat mit Padding-Bytes
aufgefllt wurden.80010313. Juli 20098.0-CURRENT, nachdem struct tcpopt durch struct
toeopt in der Schnittstelle zwischen dem TOE-Treiber
und dem TCP-SYN-Cache ersetzt wurde.80010419. Juli 20098.0-CURRENT nach dem Hinzufgen einer
vnet-spezifischen Speicherzuweisung, die auf dem
Linker-Set-Verfahren basiert.80010519. Juli 20098.0-CURRENT nach der Inkrementierung der
Versionsnummer aller Shared-Libraries, die
Symbol-Versioning nicht aktiviert haben.80010624. Juli 20098.0-CURRENT nach Einfhrung des
VM-Objekttyps OBJT_SG.8001072. August 20098.0-CURRENT nach Befreiung des Newbus-Subsystems
von Giant durch Hinzufgen von sxlock und
8.0-RELEASE.80010821. November 20098.0-CURRENT nach Implementierung des
kevent-Filters EVFILT_USER.8005007. Januar 20108.0-STABLE nach Erhhung von
__FreeBSD_version, damit
pkg_add -r packages-8-stable
verwendet.80050124. Januar 20108.0-STABLE, nachdem die Prototypen von
scandir(3) und
alphasort(3) gendert
wurden, um der SUSv4 zu entsprechen.80050231. Januar 20108.0-STABLE nach Hinzufgen von
sigpause(3).80050325. Februar 20108.0-STABLE nach dem Hinzufgen der ioctls
SIOCGIFDESCR und SIOCSIFDESCR fr
Netzwerk-Schnittstellen. Diese ioctls knnen,
nach dem Vorbild von OpenBSD, dazu verwendet werden,
Schnittstellenbeschreibungen zu bearbeiten und
auszulesen.8005041. Mrz 20108.0-STABLE, nachdem x86emu, ein Software-Emulator
von OpenBSD fr x86-Prozessoren im Real-Mode, von
CURRENT bernommen wurde.80050518. Mai 20108.0-STABLE nach dem Einflieen von liblzma,
xz, xzdec und lzmainfo.80100014. Juni 20108.1-RELEASE80150014. Juni 20108.1-STABLE nach 8.1-RELEASE.801501November 3, 20108.1-STABLE nach der KBI-nderung in
struct sysentve und der Implementierung von
PL_FLAG_SCE/SCX/EXEC/SI und
pl_siginfo fr ptrace(PT_LWPINFO) .80200022. Dezember 20108.2-RELEASE80250022. Dezember 20108.2-STABLE, nachdem 8.2-RELEASE erzeugt
wurde.80250128. Februar 20118.2-STABLE, nachdem DTrace aktualisiert wurde (so wird
nun auch Userland-Tracing untersttzt).8025026. Mrz 20118.2-STABLE, nachdem log2 und log2f in libm aufgenommen
wurden.8025031. Mai 20118.2-STABLE, nachdem gcc auf die letzte unter der GPLv2
stehenden Version (aus dem FSF gcc-4_2-Zweig) aktualisiert
wurde.80250428. Mai 20118.2-STABLE, nachdem KPI sowie die Infrastruktur zur
Untersttzung von modular congestion
control implementiert wurden.80250528. Mai 20118.2-STABLE, nachdem die KPIs Hhook und Khelp
implementiert wurden.802506M28. Mai 20118.2-STABLE, nachdem OSD in die Struktur tcpcb
eingebaut wurde.8025076. Juni 20118.2-STABLE nach dem Import von ZFS v28.8025088. Juni 20118.2-STABLE, nach dem Entfernen der Methode
sv_schedtail struct sysvec.80250914. Juli 20118.2-STABLE, nachdem die binutils um die
SSSE3-Untersttzung erweitert wurden.80251019. Juli 20118.2-STABLE, nach dem Hinzufgen des Flags
RFTSIGZMB zu rfork(2).90000022. August 20099.0-CURRENT.9000018. September 20099.0-CURRENT nach dem Import von x86emu, einem
Software-Emulator von OpenBSD fr x86-Prozessoren
im Real-Mode.90000223. September 20099.0-CURRENT nach Implementierung des
kevent-Filters EVFILT_USER.9000032. Dezember 20099.0-CURRENT nach Hinzufgen von
sigpause(3) und der
PIE-Untersttzung zu csu.9000046. Dezember 20099.0-CURRENT nach Hinzufgen von libulog und
dessen
libutempter-Kompatibilittsschnittstelle.90000512. Dezember 20099.0-CURRENT nach Hinzufgen von
sleepq_sleepcnt(), das dazu
verwendet werden kann, die Anzahl der in einer
bestimmten Warteschlange eingereihten Threads
abzufragen.9000064. Januar 20109.0-CURRENT, nachdem die Prototypen von
scandir(3) und
alphasort(3) gendert
wurden, um der SUSv4 zu entsprechen.90000713. Januar 20109.0-CURRENT nach dem Entfernen von utmp(5) und
dem Hinzufgen von utmpx (siehe
getutxent(3)) zur besseren
Erfassung von Benutzeranmeldungen und
Systemereignissen.90000820. Januar 20109.0-CURRENT nach der Einfhrung von BSDL
bc/dc zur Ersetzung von GNU bc/dc.90000926. Januar 20109.0-CURRENT nach dem Hinzufgen der ioctls
SIOCGIFDESCR und SIOCSIFDESCR fr
Netzwerk-Schnittstellen. Diese ioctls knnen,
nach dem Vorbild von OpenBSD, dazu verwendet werden,
Schnittstellenbeschreibungen zu bearbeiten und
auszulesen.90001022. Mrz 20109.0-CURRENT nach dem Import von zlib
1.2.4.90001124. April 20109.0-CURRENT nach Hinzufgen von Soft Updates
Journaling.90001210. Mai 20109.0-CURRENT nach Hinzufgen von liblzma, xz,
xzdec und lzmainfo.90001324. Mai 20109.0-CURRENT nach Einbringen von
USB-Fehlerbehebungen in linux(4).90001410. Juni 20109.0-CURRENT nach Hinzufgen von
Clang.90001522. Juli 20109.0-CURRENT nach dem Import von BSD grep.90001628. Juli 20109.0-CURRENT, nachdem mti_zone zu
struct malloc_type_internal hinzugefgt
wurde.90001723. August 20109.0-CURRENT nach dem Zurckkehren zu GNU
grep als Standard und Hinzufgen der Option
WITH_BSD_GREP.90001824. August 20109.0-CURRENT, nachdem das von
pthread_kill(3) generierte Signal
in si_code als SI_LWP bezeichnet wird. Zuvor war
si_code SI_USER.90001928. August 20109.0-CURRENT nach Hinzufgen des Schalters
MAP_PREFAULT_READ zu
mmap(2).9000209. September 20109.0-CURRENT, nachdem
drain-Funktionalitt
in sbufs integriert wurde (wodurch sich auch das
Layout von struct sbuf gendert hat).90002113. September 20109.0-CURRENT, nachdem Userland
tracing in DTrace eingefhrt
wurde.9000222. Oktober 20109.0-CURRENT nach Hinzufgen der
BSDL man-Utilities (und gleichzeitigem
Entfernen der GNU/GPL man-Utilities).90002311. Oktober 20109.0-CURRENT nach der Aktualisierung von
xz auf den git-Snapshot 20101010.90002411. November 20109.0-CURRENT, nachdem libgcc.a durch
libcompiler_rt.a.90002512. November 20109.0-CURRENT nach der Einfhrung
von modularised congestion
control.90002630. November 20109.0-CURRENT nach der Einfhrung von
Serial Management Protocol (SMP)
passthrough sowie den XPT_SMP_IO und
XPT_GDEV_ADVINFO CAM CCBs.9000275. Dezember 20109.0-CURRENT, nachdem log2 zu libm
hinzugefgt wurde.90002821. Dezember 20109.0-CURRENT, nach dem HInzufgen von Hhook
(Helper Hook), Khelp (Kernel Helpers) und Object Specific
Data (OSD) KPIs.90002928. Dezember 20109.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.90003012. Januar 20119.0-CURRENT, nachdem libdialog auf die Version
20100428 aktualisiert wurde.9000317. Februar 20119.0-CURRENT, nach dem Hinzufgen von
pthread_getthreadid_np(3).9000328. Februar 20119.0-CURRENT, nachdem Prototyp und Symbol fr
uio_yield entfernt wurden.90003318. Februar 20119.0-CURRENT, nachdem die binutils auf Version
2.17.50 aktualisiert wurden.9000348. Mrz 20119.0-CURRENT, nachdem die Struktur
sysvec (sv_schedtail) modifiziert wurde.90003529. Mrz 201119.0-CURRENT, nach dem Update des im
Basissystem enthaltenen gcc sowie von libstdc++
auf die letzten unter GPLv2 lizenzierten Versionen.90003618. April 20119.0-CURRENT, nachdem libobjc und die Untersttzung
fr Objective-C aus dem Basissystem entfernt
wurden.90003713. Mai 20119.0-CURRENT, nach dem Import der
libprocstat(3)-Bibliothek sowie von fuser(1) in das
Basissystem.90003822. Mai 20119.0-CURRENT, nachdem ein Lock-Flag zu VFS_FHTOVP(9)
hinzugefgt wurde.90003928. Juni 20119.0-CURRENT, nachdem pf von OpenBSD 4.5 importiert
wurde.90004019. Juli 2011Standardmige Erhhung von MAXCPU fr &os; auf
64 fr amd64 und ia64 und auf 128 fr XLP
(mips).90004113. August 20119.0-CURRENT, nachdem Capsicum-Funktionalitten
implementiert wurden. Zustzlich wurde fget(9) um ein
Rechte-Argument erweitert.90004228. August 2011Versionssprnge fr Shared-Libraries deren ABI
sich gendert hat, in Vorbereitung fr 9.0.9000432. September 2011Automatische Erkennung von USB-Massenspeicher
Gerten, die das no synchronize cache SCSI Kommando
nicht untersttzen.90004410. September 2011Re-factor auto-quirk.90004513. Oktober 2011Allen nicht-kompatiblen
Systemaufruf-Einstiegspunkten wurde ein sys_
vorangestellt.
Beachten Sie, dass 2.2-STABLE sich nach dem
2.2.5-RELEASE manchmal als 2.2.5-STABLE
identifiziert. Das Muster war frher 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 unmglich 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
kmmern; diese sind hier nur als Referenz
augefhrt.Etwas hinter die
bsd.port.mk-Anweisung schreibenSchreiben Sie bitte nichts hinter die .include
<bsd.port.mk>-Zeile. Normalerweise kann dies
vermieden werden, indem Sie die Datei
bsd.port.pre.mk irgendwo in der Mitte
Ihres Makefiles und
bsd.port.post.mk am Ende
einfgen.Sie drfen entweder nur das
bsd.port.pre.mk/bsd.port.post.mk-Paar
oder bsd.port.mk alleine
hinzufgen; vermischen Sie diese Verwendungen
nicht!bsd.port.pre.mk definiert nur
einige Variablen, welche in Tests im
Makefile benutzt werden knnen,
bsd.port.post.mk definiert den
Rest.Hier sind einige wichtige Variablen, welche in
bsd.port.pre.mk definiert sind (dies ist
keine vollstndige Liste, lesen Sie bitte
bsd.port.mk fr eine
vollstndige Auflistung).VariableBeschreibungARCHDie Architektur, wie von uname
-m zurckgegeben (z.B.
i386)OPSYSDer Typ des Betriebsystems, wie von uname
-s zurckgegeben (z.B.
FreeBSD)OSRELDie Release Version des Betriebssystems (z.B.,
2.1.5 oder
2.2.7)OSVERSIONDie numerische Version des Betriebssystems;
gleichbedeutend mit __FreeBSD_version.PORTOBJFORMATDas Objektformat des Systems
(elf oder aout;
beachten Sie, dass fr moderne
Versionen von FreeBSD aout veraltet
ist).LOCALBASEDie Basis des local
Verzeichnisbaumes (z.B.
/usr/local/)PREFIXWo der Port sich selbst installiert (siehe Mehr Informationen ber
PREFIX).Falls Sie die Variablen USE_IMAKE,
USE_X_PREFIX, oder
MASTERDIR definieren mssen, sollten
Sie dies vor dem Einfgen von
bsd.port.pre.mk machen.Hier sind ein paar Beispiele von Dingen, die Sie hinter
die Anweisung bsd.port.pre.mk schreiben
knnen:# 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 fr 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 Verknpfung f ELF, aber nicht f a.out
post-install:
.if ${PORTOBJFORMAT} == "aout"
${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so
.endifSie haben sich daran erinnert Tabulator statt
Leerzeichen nach BROKEN= und
TCL_LIB_FILE= zu benutzen, oder?
:-).Benutzen Sie die exec-Anweisung in
Wrapper-SkriptenFalls 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 exec
dafr benutzen; zum Beispiel:#!/bin/sh
exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"Die Funktion exec ersetzt den
Shell-Prozess mit dem angegebenen Programm. Falls
exec ausgelassen wird, verbleibt der
Shell-Prozess im Speicher whrend das Programm
ausgefhrt wird und verbraucht unntig
Systemressourcen.Aufgaben vernnftig lsenDas Makefile sollte die
ntigen Schritte einfach und vernnftig
durchfhren. Wenn Sie ein einige Zeilen einsparen oder
die Lesbarkeit verbessern knnen, dann machen Sie dies
bitte. Beispiele sind: Ein make-Konstrukt
.if anstatt eines Shellkonstrukt
if zu verwenden, anstatt
do-extract neu zu definieren, dies
mit EXTRACT* machen, oder
GNU_CONFIGURE anstelle von
CONFIGURE_ARGS += --prefix=${PREFIX}
zu verwenden.Falls Sie sich in einer Situation wiederfinden, in der
Sie viel Code neu schreiben mssen, um etwas zu testen,
sollten Sie zuerst bsd.port.mk erneut
konsultieren und nachprfen ob es nicht bereits eine
Lsung fr Ihr Problem enthlt. Es ist zwar
schwer zu lesen, beinhaltet jedoch eine Menge kurzer
Lsungen fr viele scheinbar schwierige
Probleme.Bercksichtigen Sie sowohl CC als
auch CXXDer Port sollte sowohl die CC- wie
auch die CXX-Variable bercksichtigen.
Damit ist gemeint, dass der Port diese Variablen nicht ohne
Rcksicht auf eventuell schon gesetzte Werte einfach
berschreiben sollte; stattdessen sollten neue Werte an
schon existierende angehngt werden. Dadurch knnen
Build-Optionen, die alle Ports betreffen, global definiert
werden.Falls der Port diese Variablen nicht
bercksichtigt, sollte NO_PACKAGE=ignores either
cc or cxx ins Makefile
eingefgt werden.Im Folgenden wird ein Beispiel eines
Makefiles gezeigt, welches die beiden
Variablen CC und CXX
bercksichtigt. Beachten Sie das
?=:CC?= gccCXX?= g++Nachfolgend ein Beispiel, welches weder
CC noch CXX
bercksichtigt:CC= gccCXX= g++Die Variablen CC und
CXX knnen auf FreeBSD-Systemen in
/etc/make.conf definiert werden. Im
ersten Beispiel wird ein Wert nur dann gesetzt, falls dieser
vorher noch nicht gesetzt war, um so systemweite Definitionen
zu bercksichtigen. Im zweiten Beispiel werden die
Variablen ohne Rcksicht berschrieben.Bercksichtigen Sie
CFLAGSDer Port sollte die Variable CFLAGS
bercksichtigen. 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 Anhngen
hinzufgen. Dadurch knnen Build-Optionen, die alle
Ports betreffen, global definiert werden.Falls der Port diese Variablen nicht
bercksichtigt, sollte NO_PACKAGE=ignores
cflags ins Makefile
eingefgt werden.Im Folgenden wird ein Beispiel eines
Makefiles gezeigt, welches die Variable
CFLAGS bercksichtigt. Beachten Sie
das +=:CFLAGS+= -Wall -WerrorNachfolgend finden Sie ein Beispiel, welches die
CFLAGS-Variable nicht
bercksichtigt:CFLAGS= -Wall -WerrorDie Variable CFLAGS wird auf
FreeBSD-Systemen in /etc/make.conf
definiert. Im ersten Beispiel werden weitere Flags an die
Variable CFLAGS angehngt und somit
der bestehende Wert nicht gelscht. Im zweiten Beispiel
wird die Variable ohne Rcksicht
berschrieben.Sie sollten Optimierungsflags aus
Makefiles Dritter entfernen. Die
CFLAGS des Systems beinhalten systemweite
Optimierungsflags. Ein Beispiel eines unvernderten
Makefiles:CFLAGS= -O3 -funroll-loops -DHAVE_SOUNDWerden nun systemweite Optimierungsflags verwendet so
wrde das Makefile in etwa
folgendermaen aussehen:CFLAGS+= -DHAVE_SOUNDThreading-BibliothekenDie Threading-Bibliothek muss mit Hilfe eines speziellen
Linker-Flags -pthread in die
Binrdateien unter &os; gebunden werden. Falls ein Port
auf ein direktes Verlinken gegen -lpthread
oder -lc_r besteht, passen Sie den Port
bitte so an, dass er die durch das Port-Framework
bereitgestellte Variable PTHREAD_LIBS
verwendet. Diese Variable hat blicherweise den Wert
-pthread, kann aber auf einigen
Architekturen und &os;-Versionen abweichende Werte haben und
daher sollte nie -pthread direkt in Patches
geschrieben werden, sondern immer
PTHREAD_LIBS.Falls durch das Setzen von
PTHREAD_LIBS der Bau des Ports mit der
Fehlermeldung unrecognized option
'-pthread' abbricht, kann die Verwendung des
gcc als Linker durch setzen von
CONFIGURE_ENV auf
LD=${CC} helfen. Die Option
-pthread wird nicht direkt von
ld untersttzt.RckmeldungenBrauchbare nderungen/Patches sollten an den
ursprnglichen Autor/Maintainer der Software geschickt
werden, damit diese in der nchsten Version der Software
mit aufgenommen werden knnen. Dadurch wird Ihre Aufgabe
fr die nchste Version der Software deutlich
einfacher.README.htmlNehmen Sie bitte keine README.html
in den Port auf. Diese Datei ist kein Bestandteil der
CVS-Sammlung sondern wird durch make readme
erzeugt.Einen Port durch BROKEN,
FORBIDDEN oder IGNORE als
nicht installierbar markierenIn manchen Fllen sollten Benutzer davon abgehalten
werden einen Port zu installieren. Um einem Benutzer
mitzuteilen, dass ein Port nicht installiert werden sollte,
gibt es mehrere Variablen fr make,
die im Makefile des Ports genutzt werden
knnen. Der Wert der folgenden
make-Variablen wird dem Benutzer als Grund
fr die Ablehnung der Installation des Ports
zurckgegeben. Bitte benutzen Sie die richtige
make-Variable, denn jede enthlt eine
vllig andere Bedeutung fr den Benutzer und das
automatische System, das von dem Makefile
abhngt, wie der
Ports-Build-Custer, FreshPorts und portsmon.VariablenBROKEN ist reserviert fr
Ports, welche momentan nicht korrekt kompiliert,
installiert oder deinstalliert werden. Es sollte
fr Ports benutzt werden, von denen man annimmt,
dass dies ein temporres Problem ist.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).Benutzen Sie BROKEN zum
Beispiel, wenn ein Port:nicht kompiliertbeim Konfiguration- oder Installation-Prozess
scheitertDateien auerhalb von
${LOCALBASE} installiertbeim Deinstallieren nicht alle seine Dateien
sauber entfernt (jedoch kann es akzeptable und
wnschenswert sein, Dateien, die vom Nutzer
verndert wurden, nicht zu entfernen)FORBIDDEN wird fr Ports
verwendet, die Sicherheitslcken enthalten oder die
ernste Sicherheitsbedenken fr das FreeBSD-System
aufwerfen, wenn sie installiert sind (z.B. ein als
unsicher bekanntes Programm, oder ein Programm, das
einen Dienst zur Verfgung stellt, der leicht
kompromittiert werden kann). Ports sollten als
FORBIDDEN gekennzeichnet werden,
sobald ein Programm eine Schwachstelle hat und kein
Update verffentlicht wurde. Idealerweise sollten
Ports so bald wie mglich aktualisiert werden wenn
eine Sicherheitslcke entdeckt wurde, um die Zahl
verwundbarer FreeBSD-Hosts zu verringern (wir
schtzen es fr 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 auer Sicherheit
als FORBIDDEN.IGNORE ist fr Ports
reserviert, die aus anderen Grnden nicht gebaut
werden sollten. Es sollte fr Ports verwendet
werden, in denen ein strukturelles Problem vermutet
wird. Der Build-Cluster wird unter keinen Umstnden
Ports, die mit IGNORE markiert sind,
erstellen. Verwenden Sie IGNORE zum
Beispiel, wenn ein Port:kompiliert, aber nicht richtig luftnicht auf der installierten Version von &os;
luft&os; Kernelquelltext zum Bauen bentigt,
aber der Benutzer diese nicht installiert hatein Distfile bentigt, welches aufgrund
von Lizenzbeschrnkungen nicht automatisch
abgerufen werden kannnicht korrekt mit einem momentan installiertem
Port arbeitet (der Port hngt zum Beispiel von
www/apache21 ab,
aber www/apache13 ist
installiert)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
CONFLICTS.
CONFLICTS setzt
IGNORE dann
selbststndig.Um einen Port nur auf bestimmte
Systemarchitekturen mit IGNORE zu
markieren, gibt es zwei Variablen, die automatisch
IGNORE fr Sie setzen:
ONLY_FOR_ARCHS und
NOT_FOR_ARCHS. Beispiele:ONLY_FOR_ARCHS= i386 amd64NOT_FOR_ARCHS= alpha ia64 sparc64Eine eigene IGNORE-Ausgabe kann
mit ONLY_FOR_ARCHS_REASON und
NOT_FOR_ARCHS_REASON festgelegt
werden. Fr eine bestimmte Architektur sind
Angaben durch
ONLY_FOR_ARCHS_REASON_ARCH
und
NOT_FOR_ARCHS_REASON_ARCH
mglich.Wenn ein Port i386-Binrdateien
herunterldt und installiert, sollte
IA32_BINARY_PORT gesetzt werden. Wenn
die Variable gesetzt ist, wird berprft, ob
das Verzeichnis /usr/lib32 fr
IA32-Versionen der Bibliotheken vorhanden ist, und ob
der Kernel mit IA32-Kompatibilitt gebaut wurde.
Wenn eine dieser zwei Voraussetzungen nicht erfllt
ist, wird IGNORE automatisch
gesetzt.Anmerkungen zur ImplementierungZeichenketten sollten nicht in Anfhrungszeichen
gesetzt werden. Auch die Wortwahl der Zeichenketten sollte
die Art und Weise beachten, wie die Informationen dem Nutzer
angezeigt werden. Beispiele:BROKEN= this port is unsupported on FreeBSD 5.xIGNORE= is unsupported on FreeBSD 5.xresultieren in den folgenden Ausgaben von
make describe:===> foobar-0.1 is marked as broken: this port is unsupported on FreeBSD 5.x.===> foobar-0.1 is unsupported on FreeBSD 5.x.Kennzeichnen eines Ports zur Entfernung durch
DEPRECATED oder
EXPIRATION_DATEDenken Sie bitte daran, dass BROKEN
und FORBIDDEN nur als temporrer
Ausweg verwendet werden sollten, wenn ein Port nicht
funktioniert. Dauerhaft defekte Ports sollten komplett aus der
Ports-Sammlung entfernt werden.Wenn es sinnvoll ist, knnen Benutzer vor der
anstehenden Entfernung eines Ports mit
DEPRECATED und
EXPIRATION_DATE 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.Es ist mglich DEPRECATED ohne
EXPIRATION_DATE zu setzen (zum Beispiel, um
eine neuere Version des Ports zu empfehlen), aber das
Gegenteil ist sinnlos.Es gibt keine Vorschrift wie lange die Vorwarnzeit sein
muss. Gegenwrtig ist es blich einen Monat fr
sicherheitsrelevante Probleme und zwei Monate fr
Build-Probleme anzusetzen. Dies gibt allen interessierten
Committern ein wenig Zeit die Probleme zu beheben.Vermeiden Sie den Gebrauch des
.error-KonstruktesDer korrekte Weg eines Makefile
anzuzeigen, dass der Port aufgrund eines externen Grundes
nicht installiert werden kann (zum Beispiel, weil der Benutzer
eine ungltige Kombination von Build-Optionen angegeben
hat), ist IGNORE auf einen nicht leeren
Wert zu setzen. Dieser wird dann formatiert und dem Benutzer
von make install ausgegeben.Es ist ein verbreiteter Fehler .error
fr diesem Zweck zu verwenden. Das Problem dabei ist,
dass viele automatisierte Werkzeuge, die mit dem Ports-Baum
arbeiten, in dieser Situation fehlschlagen. Am Hufigsten
tritt das Problem beim Versuch
/usr/ports/INDEX zu bauen auf (siehe
). Jedoch schlagen auch
trivialere Befehle wie make maintainer
in diesem Fall fehl. Dies ist nicht akzeptabel!Wie vermeidet man die Verwendung von
.errorNehmen Sie an, dass die Zeile
USE_POINTYHAT=yes in
make.conf enthalten ist. Der erste der
folgenden zwei Makefile-Schnipsel
lsst make index fehlschlagen,
whrend der zweite dies nicht tut..if USE_POINTYHAT
.error "POINTYHAT is not supported"
.endif.if USE_POINTYHAT
IGNORE=POINTYHAT is not supported
.endifVerwendung von sysctlVom Gebrauch von sysctl wird, auer in Targets,
abgeraten. Das liegt daran, dass die Auswertung aller
makevars, wie sie whrend
make index verwendet werden, dann den
Befehl ausfhren muss, welches den Prozess weiter
verlangsamt.Die Verwendung von &man.sysctl.8; sollte immer durch die
Variable SYSCTL erfolgen, da diese den
vollstndigen Pfad enthlt und berschrieben
werden kann, so dies als notwendig erachtet wird.Erneutes Ausliefern von DistfilesManchmal ndern die Autoren der Software den Inhalt
verffentlichter Distfiles, ohne den Dateinamen zu
ndern. Sie mssen berprfen, ob die
nderungen offizell sind und vom Autor durchgefhrt
wurden. Es ist in der Vergangenheit vorgekommen, dass
Distfiles still und heimlich auf dem Download-Server
gendert wurden, um Schaden zu verursachen oder die
Sicherheit der Nutzer zu kompromittieren.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 Verdchtiges sehen
knnen Sie distinfo aktualisieren.
Stellen Sie sicher, dass die nderungen in Ihrem PR oder
Commit-Protokoll zusammengefasst sind, um zu
Gewhrleisten, dass nichts Negatives passiert ist.Sie knnen auch mit den Autoren der Software in
Verbindung treten und sich die nderungen besttigen
lassen.VerschiedenesDie Dateien pkg-descr und
pkg-plist sollten beide doppelt
kontrolliert werden. Wenn Sie einen Port nachprfen und
glauben, dass man es besser machen kann, dann verbessern Sie
ihn bitte.Bitte kopieren Sie nicht noch mehr Exemplare der
GNU General Public License in unser System.Bitte berprfen Sie alle gesetzlichen Punkte
grndlich! Lassen Sie uns bitte keine illegale Software
verbreiten!Beispiel eines MakefileHier ein Beispiel fr ein
Makefile, welches als Vorlage fr
einen neuen Port dienen kann. Alle zustzlichen Kommentare
in eckigen Klammern mssen entfernt werden!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 berprfung
Ihres Makefiles sollten Sie portlint verwenden.[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>Auf dem Laufenden bleibenDie &os; Ports-Sammlung verndert sich stndig.
Hier finden Sie einige Informationen, wie Sie auf dem Laufenden
bleiben.FreshPortsEiner der einfachsten Wege, um sich ber
Aktualisierungen, die bereits durchgefhrt wurden, zu
informieren, ist sich bei FreshPorts
anzumelden. Sie knnen dort beliebige Ports
auswhlen, die Sie beobachten mchten. Maintainern
wird ausdrcklich empfohlen sich anzumelden, da Sie nicht
nur ber Ihre eigenen nderungen informiert werden,
sondern auch ber die aller anderen Committer (Diese sind
oft ntig, um ber nderungen des zugrunde
liegenden Frameworks informiert zu bleiben. Obwohl es
hflich wre, vorher ber solche
nderungen benachrichtigt zu werden, wird es manchmal
vergessen oder ist einfach nicht mglich. Auerdem
sind die nderungen manchmal nur sehr klein. Wir erwarten
von jedem in solchen Fllen nach bestem Gewissen zu
urteilen).Wenn Sie Fresh-Ports benutzen mchten,
bentigen Sie nur einen Account. Falls Sie sich mit einer
@FreeBSD.org E-Mailadresse registriert
haben, werden Sie den Anmeldelink am rechten Rand der Seite
finden. Diejenigen, die bereits einen FeshPorts-Account
haben, aber nicht Ihre @FreeBSD.org
E-Mailadresse benutzen, knnen einfach Ihre E-Mailadresse
auf @FreeBSD.org ndern, sich
anmelden, und dann die nderung rckgngig
machen.FreshPorts bietet auch eine
berprfungsfunktion, die automatisch alle Committs
zum &os; Ports-Baum testet. Wenn Sie sich fr diesen
Dienst anmelden, werden Sie ber alle Fehler, die bei der
berprfung Ihres Committs auftreten,
informiert.Die Webschnittstelle zum Quelltext-RepositoryEs ist mglich die Dateien des Quellen-Repositories
mit Hilfe einer Webschnittstelle durchzusehen.
nderungen, die das gesamte Ports-System betreffen,
werden jetzt in der Datei CHANGES
dokumentiert. Solche, die nur bestimmte Ports betreffen, in
der Datei UPDATING.
Aber die magebliche Antwort auf alle Fragen liegt
zweifellos darin, den Quelltext von bsd.port.mk
und dazugehrige Dateien zu lesen.Die &os; Ports-MailinglisteWenn Sie Maintainer sind, sollten Sie in Erwgung
ziehen die &a.ports;-Mailingliste zu verfolgen. Wichtige
nderungen an der grundlegenden Funktionsweise von Ports
werden dort angekndigt und dann in
CHANGES committet.Der Cluster zum Bauen von &os;-Ports auf pointyhat.FreeBSD.orgEine der weniger bekannten Strken von &os; ist es,
dass ein ganzer Cluster von Maschinen nur dafr
reserviert ist, andauernd die Ports-Sammlung zu bauen, und
zwar fr jedes groe &os; Release und jede
Tier-1-Architektur. Die Ergebnisse knnen Sie unter
package building
logs and errors finden.Alle Ports ausser denjenigen, die als
IGNORE markiert sind, werden gebaut. Ports,
die als BROKEN markiert sind, werden
dennoch ausprobiert, um zu sehen, ob das zugrunde liegende
Problem gelst wurde (Dies wird erreicht, indem
TRYBROKEN an das
Makefile des Ports bergeben
wird).Der &os; Ports-Distfile-ScannerDer Build-Cluster ist dazu bestimmt, das neueste Release
jedes Ports aus bereits heruntergeladenden Distfiles zu bauen.
- Da sich das Internet aber stndig verndert,
- knnen Distfiles schnell verloren gehen. Der FreeBSD
- Ports-Distfile-Scanner versucht jeden
+ Da sich das Internet aber stndig verndert, knnen Distfiles
+ schnell verloren gehen. Der FreeBSD
+ Ports-Distfile-Scanner versucht jeden
Download-Standort fr jeden Port anzufragen, um
herauszufinden, ob jedes Distfile noch verfgbar ist.
Maintainer werden gebeten diesen Bericht regelmig
durchzusehen, nicht nur, um den Build-Prozess fr die
Nutzer zu beschleunigen, sondern auch um zu vermeiden, dass
auf den Maschinen, die freiwillig zur Verfgung gestellt
werden, um all diese Dateien anzubieten, Ressourcen
verschwendet werden.Das &os; Ports-Monitoring-SystemEine weitere praktische Ressource ist das FreeBSD
Ports-Monitoring-System (auch bekannt als
portsmon). 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-Prfung und weitere Informationsquellen
ausgedehnt werden.Als Ausgangspunkt knnen Sie alle Informationen
eines Ports mit Hilfe der bersicht
eines Ports betrachten.Zum Zeitpunkt des Schreibens ist dies die einzige
Quelle, die GNATS PR-Eintrge auf Portnamen abbildet
(PR-Einreicher geben den Portnamen nicht immer in der
Zusammenfassung an, obwohl wir uns das wnschen
wrden). Also ist portsmon 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.
Index: head/zh_CN.UTF-8/books/porters-handbook/book.xml
===================================================================
--- head/zh_CN.UTF-8/books/porters-handbook/book.xml (revision 52709)
+++ head/zh_CN.UTF-8/books/porters-handbook/book.xml (revision 52710)
@@ -1,14227 +1,14227 @@
FreeBSD Porter 手册The FreeBSD Documentation Project2000 年 4 月200020012002200320042005200620072008200920102011The FreeBSD Documentation
Project&cnproj.freebsd.org;2005 年 11 月2005200620072008200920102011&cnproj.freebsd.org;
&trademarks;
&legalnotice;
$FreeBSD$介绍几乎每个人都是通过 FreeBSD Ports Collection
在 FreeBSD 上面装应用程序 (“ports”)的。
就像FreeBSD的其它部分一样, 它主要来自于志愿者的努力。
所以在阅读这份文档的时候请务必记住这些。在 FreeBSD 的世界里, 任何人都能提交新的 port,
或志愿地维护一个已有的 port, 如果那个 port 没人维护的话 —
不需要任何特殊的权限来做这件事情。自行制作新 port那么, 您有兴趣创建自己的 port 或升级现有的 port?
太好了。下面的内容将会提供一些创建FreeBSD port的指导。
如果想升级一个现有的 port, 那么您应该在看完这些内容并阅读
。因为这份文档不是十分详细, 您还应该再参考一下
/usr/ports/Mk/bsd.port.mk, 所有 port
的 Makefile 文件都会包含它。 即使不是每天都去摆弄 Makefile,
您也会从那个文件里面获得很多知识, 里面的注释非常详细。
还有要补充一下,如果您有其它的问题, 可以给&a.ports;
这个 mailing list 发信。在这份文档里提到的大部分的变量
(VAR)
是不能修改的。 大多 (但不是全部) 都在
/usr/ports/Mk/bsd.port.mk
的开始部分进行了介绍; 其它一些也应该可以在那里找到。
注意这些文件使用了非标准的制表符:
Emacs 和
Vim 应该能在打开文件的时候自动识别它,
而 &man.vi.1; 和 &man.ex.1; 则需要在打开文件的时候通过
:set tabstop=4 来修正默认的设置。
想练练手吗? 请参阅我们的
希望移植的软件列表
来看看您是否有兴趣完成其中的任务。
简单的 port这一章将介绍如何快速创建一个全新的 port。
很多时候, 这点内容是不够的,
您需要阅读这份文档中更深入的内容。首先, 需要取得包含源代码的 tar包, 并把它放到
DISTDIR变量所指的地方。 默认的情况下, 这应该是
/usr/ports/distfiles。下面的内容假定您不需要修改软件的源代码就能在 FreeBSD
上编译通过。 如果需要修改代码, 就需要参考下一章的内容了。编写 Makefile最简单的 Makefile
应该是这个样子的:# 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>看看您是否能够看懂。 不必担心
$FreeBSD$
那一行, 当这个 port 被导入到 ports 树里的时候,
CVS 会自动填写它。 您可以在
示范的 Makefile那章找到更多的细节。创建描述文件有 2 个描述文件对于任何一个 port 来说是必须的,
不论它是不是打算成为 package。 它们是
pkg-descr 和
pkg-plist。 这两个文件使用 pkg-
前缀以区别于其它文件。pkg-descr (关于 port 的冗长描述文件)这是 port 里一个较长的描述文件。
使用一段或几段文件文字来简明的描述这个 ports 是用来做什么的。这 不是 手册或者对如何
深入使用/编译这个port的说明! 要是您从
README 或者联机手册里面中复制文字的话,
请务必小心; 通常, 它们不是对这个 port
简明扼要的描述, 或者用了难以使用的格式 (比如,
联机手册里有迫使两端对齐的空格)。
如果要移植的软件有官方的WWW网页, 您应该在这里列出来。
使用 WWW: 作为前缀来表示
一个网站,
这样其它的自动工具就能正常工作了。下面是一个简单的
pkg-descr 例子:This is a port of oneko, in which a cat chases a poor mouse all over
the screen.
:
(etc.)
WWW: http://www.oneko.org/pkg-plist (port 的装箱单)这份文件列出了 port 所要安装的所有文件。 由于 package
也是据此进行打包, 因此它也被称作 装箱单(packing list).
这个文件中, 路径是相对于安装的路径的 (通常是
/usr/local 或
/usr/X11R6)。 如果您使用
MANn
变量的话, 请不要在这里列出任何联机手册。 假如 port
在安装过程中会创建一些目录, 请务必增加对应的
@dirrm 行,
以便在 package 被卸载时予以自动删除。下面是一个简单的例子: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参考 &man.pkg.create.1; 的联机手册以获得更多有关装箱单的细节建议您将这个文件里的所有的文件名按字母排序。
这样, 在升级这个port的时候就能够更方便地核实所做的修改。手工创建这样一份列表可能是一件非常枯燥的事情。
如果您的 port 需要安装大量的文件, 自动创建装箱单
会帮您省下不少时间。只有一种情况可以不用 pkg-plist文件。
如果这个 port 只安装很少量的一些文件或目录的话,
这些文件和目录就可以分别列在 Makefile 的
PLIST_FILES和PLIST_DIRS
变量里。 举个例子来说, 我们可以在上面那个
oneko port 里面不用
pkg-plist, 而把下面的这几行加到
Makefile 里面: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当然, 如果一个 port 不需要给它自己创建目录的话,
就不用设置 PLIST_DIRS 变量了。不过, 如果用这种方式来列出 port 要安装的文件和目录的话,
也就无法利用在 &man.pkg.create.1; 里介绍的命令来制作 package 了。
因此, 这种方法只适用于那些简单的 port, 使它们更为简化。 同时,
这种做法也有助于减少 ports collection 中的文件数量。
在采用 pkg-plist 之前,
请考虑一下使用这种方法。稍后我们将看到 pkg-plist
以及 PLIST_FILES 如何处理
更复杂的任务。创建校验和文件只要键入 make makesum,
port 便会自动创建 distinfo文件。如果下载的文件的校验和经常变化,
而您又能确保它们的来源可靠 (比如, 来自于CD制造商,
或每天联编生成的文档文件), 就应该在 IGNOREFILES
里面标明这些文件。 这样, 再运行
make makesum 的时候便不会把这些标记
IGNORE 的文件计算在内了。测试 port应当确定您的 port 确实做了您希望它们做的事情,
包括打包。下面是需要重点检查的一些重要的工作。pkg-plist 中没有包括任何不想安装的文件pkg-plist 包含了所有应该安装的文件您的 port 能够使用 reinstall
多次安装。您的 port 能在卸载 (deinstall) 时,
自动完成 清理推荐的测试顺序make installmake packagemake deinstallpkg_add package-name
make deinstallmake reinstallmake package确信在 package 和
deinstall 阶段没有任何警告。
第三步以后, 检查是否所有新建的目录都被正确删除了。
在第四步以后, 试着运行一下所装的软件,
确保当它以 package 方式安装的时候也能正常工作。自动化这些步骤最简单的方法是通过 ports tinderbox
来进行测试。 它可以维护 jails 并在其中完成全部测试工作,
而不会破坏正在运行的系统的状态。 请参见
ports/ports-mgmt/tinderbox
以了解更多的信息。用 portlint 来检查 port请使用 portlint 命令来检查您的 port
是否符合我们的规范。 ports-mgmt/portlint
程序是 ports 套件的一部分。
这个程序的主要功能是帮助您检查
Makefile 的样式是否符合规范,
以及 package 的命名是否得体。提交新 port在提交新 port 之前, 应先阅读 该做什么和不该做什么 一节。既然已经对所制作的 port 相当满意了, 剩下的工作,
便是将它放进 &os; 的主 ports 树, 以便让更多的人从中受益。
我们并不需要您的 work
目录以及 pkgname.tgz 包, 因此现在可以删除它们了。
假定您的 port 的名字是 oneko, 接下来要做的是
cd 到
oneko 所在的目录, 然后输入命令:
shar `find oneko` > oneko.shar将这个 oneko.shar 文件作为附件,
使用 &man.send-pr.1; 程序提交 (请参阅
Bug
Reports and General Commentary 以了解关于
&man.send-pr.1; 的进一步详情) 将其送出。 请务必将您的 bug 报告分类 (category) 为
ports 并把子分类 (class) 设置为
change-request (不要把报告表及为机密的, 即
confidential!)。 此外, 在 PR
的描述 (Description) 一栏中的内容应该是 port 的简要介绍
(例如 COMMENT 内容的简化版本),
而 shar 文件则应填入修正 (Fix)
栏中。在问题报告里面使用了一段好的描述,
能使我们的工作变得更容易。 习惯上, 我们会使用类似:
New port: <category>/<portname>
<short description of the port>
这样的标题来说明这是新的 port。 如果您也使用这样的习惯,
那么我们将更容易更方便地阅读您的 PR,
从而加快处理速度。再次声明, 不要包含原始的distfile,
work目录, 或者您用
make package 制作的包;
此外, 对于新的 port 请务必使用 &man.shar.1;
而不是 &man.diff.1;。在您提交的您的 port 以后请耐心等待。
有时在一个 port 正式加入 &os; 之前需要花费好几个月,
尽管也有可能是几天。 您可以查看
正等待被 commit 到 &os; 的 port PR。一旦我们看过了您的报告, 有必要的话我们会联系您,
并把它放到 ports 树里。 您的名字也会出现在
Additional FreeBSD Contributors
和其它的文件。 不是很棒吗!?
:-)复杂的 Porting好了, 也许工作没那么简单, port 需要做些修改才能够在
FreeBSD 上跑起来。 在这一章里,
我们将会一步步举例来介绍应该如何修改来使您的
port 能在 FreeBSD 上面运行。整个系统是如何运转的?首先, 这一系列的动作是由用户在您的
port 目录里敲入 make 后发生的。
您也许会发现在另外的一个窗口里阅读一下
bsd.port.mk 将会有助于您的理解。要是您不是非常明白 bsd.port.mk
是做什么的话, 也不用太担心, 很多人都不知道的...
:->fetch 会首先被执行。
fetch 将检查在本地的
DISTDIR 目录里是否存在
tar 包。 如果 fetch
没有找到就会查找 Makefile 中定义的
MASTER_SITES URL, 还有我们的主
FTP 站点 ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/,
在那里我们备份了所有被认可的 distfile。 假设那个
MASTER_SITES 站点是直接连在 Internet 上的,
就会试着用 FETCH 指定的程序取回
distfile。 如果成功的话, 文件会被保存在DISTDIR
所指定的目录以备稍后使用。接下来会执行 extract。
它会在 DISTDIR 中寻找您的
tar 包 (通常是用 gzip 压缩的 tar 包),然后解压缩到由
WRKDIR 所指定的临时目录里
(默认为work目录)。下一步是执行 patch。
首先任何在 PATCHFILES 中定义的补丁都会被打上。
然后, 在由 PATCHDIR 指定的目录
(默认为 files目录)
中发现的patch-*,
它们将会以文件名的字母顺序被先后打上。configure会被执行。
这一步骤可能会有以下几种情形。如果存在 scripts/configure,
就会执行它如果定义了 HAS_CONFIGURE
或者 GNU_CONFIGURE, 就会执行
WRKSRC/configure。如果定义了USE_IMAGE, 就会执行
XMKMF (默认为: xmkmf
-a)。build会被执行。
这一步将会进入ports的工作目录
(WRKSRC)
然后进行编译。如果定义了USE_GMAKE,
就会使用 GNU make, 反之,
则会使用系统默认的 make。以上都是系统默认的步骤。 您也可以定义
pre-something 或者
post-something,
或者把以此命名的脚本放到
scripts 目录,
它们会在默认的动作之前或之后被执行。举个例子, 如果您在您的 Makefile
里定义了post-extract, 并在
script 目录里放了一个
pre-build 脚本,
那么在 tar 包解开之后
post-extract 将被调用,
pre-build 脚本会在默认的编译之前被执行。
我们推荐您在 Makefile
定义所有的动作, 如果不是十分复杂的话,
这样, 别人能更容易明白您的 port
需要执行哪些非默认的动作。默认的行为都是由 bsd.port.mk 定义的
do-something
来表示的。 例如, port 中用来解压缩的命令是由
do-extract 来定义的。
如果您对默认的设置不满意, 可以通过在
Makefile 重新定义
do-someting
来做些改变。主 动作 (例如
extract、
configure, 等等)
仅仅是用来确定所有相应的阶段都完成了,
以及调用真实的动作或脚本, 它们不应被修改。
如果您想要修改解压缩这个动作,
可以修改 do-extract,
但永远都不要改变 extract
的操作!我们已经介绍了在用户敲入 make
之后会发生哪些事情了。 接下来我们将进行进一步的学习,
来看一看如何创建一个理想的 port。获取源代码获取源代码的 tar 包 (通常是
foo.tar.gz 或者
foo.tar.Z) 并把它们放进
DISTDIR。 最好使用 主流 的版本。您需要设置变量 MASTER_SITES
来指向原始 tar 包的获取位置。 您可以在
bsd.sites.mk
里找到一些速度较快的主流站点。 请使用这些站点 —
和相关的定义 — 如果可能的话,
应尽量避免在同一个源代码树里出现大量重复的信息。
这些站点会随着时间而变化,
如果每个人都随意加入的话会使维护变得非常困难。如果您找不到一个有很好网络连接的
FTP/HTTP 站点, 或者它们使用了非标准的格式,
您也许就会想在您自己的 FTP 或 HTTP
服务器上放上一份副本。如果您找不到可靠的地方放置 distfiles,
我们也可以提供给您一些空间来保存它。
我们自己的 ftp.FreeBSD.org;
然而这只是一个折衷的办法。 distfile 必须放进某人在
freefall 上的
~/public_distfiles/
目录中。 可以要求帮助您 commit port 的人来放这个
distfile, 而这个人也需要把 MASTER_SITES、
MASTER_SITE_LOCAL 以及
MASTER_SITE_SUBDIR 的设置,
改为在 freefall 上的用户名。如果您的 port 的 distfile 一直在变化,
而作者拒绝改变其版本号, 您可以考虑把 distfiles
放在自己的主页, 并在 MASTER_SITES
里把原作者的列为首选位置。 如果可能, 试着与 port
的作者沟通一下让他不要这么做, 这将有助于建立对源代码的控制。
在您的主页上放置您自己的 distfile 会避免用户得到
checksum mismatch
的错误, 而且能减轻我们 FTP 站点维护人员的工作量。
如果您的port只有一个主站点的话, 我们建议您在自己的网站上做一份备份,
并他列为 MASTER_SITES的第2项。如果您的 port 需要来自网络上的一些补丁, 请把它们放到
DISTDIR里。 不用担心它们跟源代码不是来自同一站点。
我们有办法处理 (参阅下面的
补丁文件)。修改 port解开 tar 包, 对源代码做出合理的修改使得这个 port
能在最新版本的 &os; 上面运行。
一定要 仔细记录 您所做的每处改动,
包括删除、添加、修改的文件等等, 这些修改以后会在您的 port
中以脚本或补丁的方式出现, 并且能通过运行它们来自动完成您对
port 的改动要求。如果您的 port 要求用与用户交互/配置来完成编译或安装的话,
您可以看一下 Larry Wall 的经典的 Configure
脚本, 适当地模仿一下。 Port collection 的目的,
就是使每个 port 占用最少的空间,
并做到软件的 即插即用。除非明确地声明, 否则您提交给
&os; ports collection 的补丁,
脚本和其它的文件都将以标准的 BSD 版权发布。打补丁在您准备制作 port 的过程中, 增加或修改的文件,
都可以通过 &man.diff.1; 来做成补丁。 希望应用到源代码上的每个补丁,
都应保存为单独的文件, 并命名为
patch-*, 其中
* 表示将要修改的文件的完整路径名,
例如 patch-Imakefile 或
patch-src-config.h。 这些文件,
都应保存在 PATCHDIR
(通常是 files/), 这里的补丁都会自动应用到源代码上。
所有的补丁必须是相对于
WRKSRC 的 (一般而言, 您的 port 会将其
tarball 解压缩在那里, 并完成余下的工作)。 为了让修正和升级更容易,
您应避免使用多个 patch 去修改同一个文件 (例如,
patch-file 以及
patch-file2 都修改
WRKSRC/foobar.c) 这种情况。
需要注意的是, 如果修改的文件的路径中包含下划线
(_) 字符, 则在补丁文件名中应使用两个下划线来代替。
例如, 如果需要修改名为 src/freeglut_joystick.c 的文件,
补丁文件的名字应为
patch-src-freeglut__joystick.c。只有 [-+._a-zA-Z0-9] 这些字符,
可以出现在补丁的文件名中, 请务必不要使用除这些字符以外的其它字符。
不要把您的补丁命名成 patch-aa
或 patch-ab 等这样的名字,
最好能在补丁名中提到路径和文件名。不要把 RCS 字符串放进补丁。 我们把文件放进 ports
树的时候, CVS 会损坏它们, 当我们再 check out 出来的时候,
它们就会和原来的不一样, 从而导致打补丁失败。 RCS 字符串
是由美元符号 ($) 围绕的,
通常由 $Id 或
$RCS 开头。使用 &man.diff.1; 的递归选项()
很好, 但是请检查一下最后输出的 patch,
确保没有任何的垃圾信息。 特别地, 有 2 种文件不需要 diff,
并且应该删除: 一种是 Makefile,
当您的port使用了Imake,
或者 GNU configure 等等的话。
如果您不得不编辑configure.in
以使 autoconf 去生成
configure, 不要使用
configure 来做 diff
(这常常会有好几千行长!); 请定义
USE_AUTOTOOLS=autoconf:261 并对应
configure.in 来制作 diff。另外, 您还应尽量减少补丁中非功能性的空格及空白变动。
在开源世界中, 遵循不同的编码规范的项目共享大量代码是很常见的事情。
如果您从某个项目中提取一部分功能用来修正另一个程序中的问题时,
请务必小心: 补丁中很可能到处都是非功能性的变动行。 这不仅会导致 CVS
库的膨胀, 而且也会让导致问题的故障点, 以及您到底修改了什么变得不甚清晰。假如需要删除文件, 则应在
post-extract target,
而不是作为补丁的一部分来完成。除此之外, port 的
Makefile 还可以通过 in-place 模式的
&man.sed.1; 来直接进行简单的替换操作。 如果补丁需要使用变量值,
这就非常有用了。 例如:post-patch:
@${REINPLACE_CMD} -e 's|for Linux|for FreeBSD|g' ${WRKSRC}/README
@${REINPLACE_CMD} -e 's|-pthread|${PTHREAD_LIBS}|' ${WRKSRC}/configure往往在移植某些软件的时候会遇到这样一种情况,
特别是这个软件是在 &windows; 上开发的时候,
大多数的源代码都需要进行CR/LF的转换。
这很可能会给以后打补丁带来问题, 还可能触发编译警告,
并给脚本的执行带来麻烦 (/bin/sh^M not found),
等等。 要迅速将所有文件中的 CR/LF 改为只用 LF, 可以在 port 的
Makefile 中加入
USE_DOS2UNIX=yes。 除此之外,
还可以指定一个需要执行这种转换操作的文件列表:USE_DOS2UNIX= util.c util.h如果希望转换一系列目录中的一组文件, 也可以使用
DOS2UNIX_REGEX。 它的参数是与
find 兼容的正则表达式。
关于这种格式的说明, 请参阅 &man.re.format.7;。
这个选项对转换所有指定扩展名的文件, 例如只转换源代码文件这样的应用非常有用:USE_DOS2UNIX= yes
DOS2UNIX_REGEX= .*\.(c|cpp|h)如果您希望基于现存的文件创建补丁, 可以把文件复制为带
.orig 扩展名的名字, 然后修改原文件。
然后使用 makepatch
目标根据修改在 port 的 files 目录中生成补丁文件。配置把任何附加的配置命令加进您的
configure 脚本并把它保存到
scripts 子目录。 如前面提到的那样,
您也能在 Makefile 和/或
使用 pre-configure 或
post-configure 的脚本来做同样的事情。处理用户输入如果您的 port 要求用户的输入以便配置编译、 或安装配置过程,
就必须在 Makefile 里设置
IS_INTERACTIVE 变量。
如果用户设置了 BATCH 的话,
这将让用户能跳过您的 port 来完成
通宵编译 (如果用户设置了
INTERACTIVE的话, 那么 只有
那些要求互动的 port 才会被编译)
这将给那些不停编译 ports 的机器省下很多时间。通常我们还建议,
如果对于那些问题能有合理的缺省答案的话, 应检查一下
PACKAGE_BUILDING 变量,
并根据其设置决定是否执行关闭交互脚本。
这将允许我们为 CDROM 和 FTP 来编译 package。配置 Makefile配置 Makefile 是相当简单的,
我们在此建议您在开始之前看一下现有的例子。
在这份手册里也有一个
Makefile例子,
照着里面变量的顺序来写能使得您的 port
更容易地被其它人看懂。现在, 当您开始编写您新的Makefile
的时候, 可以依次思考一下以下的问题:作者发布的代码放在 DISTDIR 中的是不是标准的用 gzip 压缩的
tar 包, 例如 foozolix-1.2.tar.gz?
如果是, 可以先略过这一节。 如果不是,
您应当看看是不是要覆盖这些变量: DISTVERSION、
DISTNAME、
EXTRACT_CMD、
EXTRACT_BEFORE_ARGS、
EXTRACT_AFTER_ARGS、
EXTRACT_SUFX,
DISTFILES,取决于您 port 的 distfile
格式有多么怪异。 (最常见的一个例子便是
EXTRACT_SUFX=.tar.Z, 一般这是因为 tar
包是用 compress 而不是
gzip 压缩的时候。)最糟的情况是, 您需要自己编写
do-extract
来覆盖默认的定义, 尽管这不常见,
但如果遇到了, 还是需要这么做。命名Makefile 的第一部分便是 port
的名字、 版本号, 以及它所属的分类。PORTNAME 和 PORTVERSION您应该把 PORTNAME 设置为您
port 的名字, PORTVERSION
则是 port 的版本号。PORTREVISION 和
PORTEPOCHPORTREVISION (port 的修订版本号)PORTEREVISION
变量是一个单调递增的值, 如果不为
0, 就会被加到包名的后面,
当 PORTVERSION 增加
的时候应被置 0 (也就是当官方有新版本发布的时候)。
PORTREVISION
会被自动化工具 (比如 &man.pkg.version.1;)
用来检测是否存在可用的新版本。每当 port 发生变化并对生成的
package 的内容或结构有显著影响时,
都应增加 PORTREVISION
值。下面是一些应当修改 PORTREVISION
的情况:有新的补丁用来修正安全漏洞、
错误, 或给 port 添加了新的功能。修改了 Makefile
里编译时开启或禁用的选项。修改了要安装文件的列表或安装时的行为
(例如, 修改了一个用来给 package
初始化数据的脚本, 如 ssh host keys)。一个port依赖的共享库版本改变
(在这种情况下, 当安装了新版本的共享库,
后再去安装较早的软件就会出错,
因为它们要依赖老的 libfoo.x
而不是libfoo.(x+1))。原作者修改了 port distfile, 并且 distfile
的新老版本之间用
diff -ru 只能发现一些细微的变化,
这时我们只需要对
distinfo 做相应的修正,
而不需要修改
PORTVERSION。不需要修改
PORTREVISION 的例子:port 结构风格的改变,
但对于打成的包没有功能的上的变化。MASTER_SITES
发生变化, 或进行了对 port 功能的修改,
但不致影响最后打成的包。对 distfiles 诸如修正拼写错误之类的补丁,
对用户而言没有升级上的麻烦。对一个原本编译失败的包的修改,
使其可编译, 而没有加入新功能。 因为
PORTREVISION
表示包的内容发生了变化,
如果先前没有可编译的包, 也就不需要修改
PORTREVISION
来表示变化。一个修改并提交 port 的原则是:
使得别人能从中受益 (改进、 修改已有错误,
或使新的 package 能够运行),
您还要权衡一下这是否应让那些经常更新
ports 树的人升级,
如果回答是 是 的话,
PORTREVISION
就应该修改了。PORTEPOCH (port 的加权版本号)有时软件商或 FreeBSD 的
porter 会使用比旧版的版本号小的数字做为新版本号的情况。
举例来说, 从
foo-20000801 到 foo-1.0 (从形式上来说这是不对的,
因为 20000801 在数值上比1大很多)。在这种情况下, PORTEPOCH
应当增加。 如果
PORTEPOCH 非 0,
就应当加到包名字的后面。
PORTEPOCH
永远不能被减少或清零,
因为那样会导致与前一时期的 package
比较版本时产生不正确的结果。
(就是说, 那个 package 就不会被检测到已经过时了。)
新的版本号 (比如前面在前面那个例子中的
1.0,1) 在数值上比前一个版本
(20000801) 小, 但多数自动化的工具会认为
,1
后缀意味着比前一个包的后缀 ,0 大。错误的去除或重置
PORTEPOCH
会导致很多不幸发生; 如果您还不明白前面的讨论,
请多阅读几次直至明白为止,
或到邮件列表上来提问。大多数 port 都不会用到
PORTEPOCH,
并且如果某个软件的下一个版本改变了版本号结构的话,
用巧妙的方法来设定 PORTVERSION
也能避免使用 PORTEPOCH。 然而,
FreeBSD porter 也需要注意, 当有新版本的软件发布,
但并非正式版本时 — 比如
snapshot 版本,
原作者可能会使用当时的日期来命名,
这在新的 官方 版本发布的时候,
就很容易引起前面提到的问题。举个例子, 如果 snapshot 版本的发布日期是
20000917, 这个软件的上一个版本是1.2,
那么这个版本的 PORTVERSIN 应该设为
1.2.20000917 或类似的样子, 而不是20000917,
这样在 1.3 发布以后,
新版本就可以在数值上大于旧的版本了。关于 PORTREVISION 和
PORTEPOCH 的用例gtkmumble port,版本号
0.10, 被提交到
ports collection:PORTNAME= gtkmumble
PORTVERSION= 0.10PKGNAME 变成
gtkmumble-0.10。然后有人发现了一个安全漏洞,
需要用一个FreeBSD的补丁。 PORTREVISION
就要相应的增加。PORTNAME= gtkmumble
PORTVERSION= 0.10
PORTREVISION= 1PKGNAME变成了
gtkmumble-0.10_1软件的作者发布了新的版本, 版本为
0.2 (作者本来的意思是,
用 0.10 表示
0.1.0,而不是指
0.9 之后的那个版本 - 但是现在太迟了)。
因为现在的次版本号 2
在数值上比上一个版本 10 小,
PORTEPOCH 必须增加,
以使新的 package 被认为是 更新的。
由于那是作者发布的一个新版本, 因此
PORTREVISION 应被置0 (或者从
Makefile 里面删除它)。PORTNAME= gtkmumble
PORTVERSION= 0.2
PORTEPOCH= 1PKGNAME 变成了
gtkmumble-0.2,1下一个版本将会是 0.3。
由于 PORTEPOCH 从不减少,
那么就无须改动:PORTNAME= gtkmumble
PORTVERSION= 0.3
PORTEPOCH= 1PKGNAME 变成
gtkmumble-0.3,1如果在这次升级中 PORTEPOCH
被置为了0, 那么在装了
gtkmumble-0.10_1 包的机器上就无法检测到
gtkmumble-0.3 包的更新,
因为 3 在数值上比
10 小。 记住, 这是
PORTEPOCH 最重要的地方。PKGNAMEPREFIX 和 PKGNAMESUFFIX2 个可选的变量, PKGNAMEPREFIX 和
PKGNAMESUFFIX 可以和
PORTNAME 还有
PORTVERSION 配合使用,
形成像这样的 PKGNAME:
${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}。
请确定符合我们的
包命名规则。
当然, 不 允许在
PORTVERSION
中使用连字符 (-)。 如果包名有
language- 或
-compiled.specifics 部分 (见下文),
请分别用 PKGNAMEPREFIX 和
PKGNAMESUFFIX, 不要直接加到
PORTNAME 中。LATEST_LINKLATEST_LINK 在编译包的过程中用于确定可以为
pkg_add -r 使用的缩短的名字。 举例来说,
在安装最新版本的 perl 的时候, 只需指定
pkg_add -r perl 而无需知道具体的版本号。
这个名字应该是独一无二的, 并且对用户而言应该是显而易见的名字。有时, 在 ports 套件中可能会存在同一程序的多个版本。
索引和预编译包的联编系统都需要能够将它们视为不同的软件包, 尽管其
PORTNAME、 PKGNAMEPREFIX, 甚至
PKGNAMESUFFIX 可能是一模一样的。 遇到这种情况时,
就需要将除了 主 port 之外的其他 port
中的 LATEST_LINK 变量设为不同的值
— 请参见 lang/gcc46 和
lang/gcc port, 以及
www/apache* 系列, 以了解它的用法。
如果设置了 NO_LATEST_LINK,
则系统便不会生成对应的连接, 对于非
主 port 来说是一个可行的选择。
需要注意的是, 如何确定 主 版本 —
最流行、 受支持最好,
变动最少, 等等 — 已经超过了本书能够给出的建议范围;
这里只是向您介绍在选定了一个
主 port 之后如何指定其他 port 的版本。包命名规则以下是您在命名您的包时应当遵守的规则。
这将使得我们放包的目录更利于浏览,
因为我们已经有数以万计的包了,
如果用户觉得查看包名很困难的话,
他们会很快走开的。一个包的名字应该看起来像这样:
language_region-name-compiled.specifics-version.numbers。要像这样来定义包的名字:
${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}。
确保所有的变量符合上面的格式。FreeBSD 会尽力去支持用户当地的语言。
如果这个 port 是某种语言专用的, 那么
language- 部分应该是
由 ISO-639 定义的自然语言的 2 个字母缩写。 比如,
ja是表示日本, ru
是表示俄罗斯, vi 表示越南,
zh 表示中国, ko
表示韩国, de 表示德国。如果是针对某种语言的某一地区的话,
再要加上2个字母的国家代码。 例如,
en_US 表示美国英语,
fr_CH 表示瑞士法语。language- 部分应该在
PKGNAMEPREFIX 变量里设置。name 部分的首字母应该
小写。 (余下的部分可以包含大写字母, 所以当您
要转换一个包含大写字母软件的名字时, 您需要
自己做出判断。) 对于 Perl 5
模块的命名, 有个传统的规则是, 在前面
加上 p5-
并把两个冒号的部分改为连字号, 如:
Data::Dumper 模块对应的名字, 就应该是
p5-Data-Dumper。确认 port 的名字和版本之间有清晰的分隔, 并放入 PORTNAME 和
PORTVERSION 变量。 在
PORTNAME 中包含版本部分的唯一理由是上游软件包真的采用这样的命名方式,
类似 textproc/libxml2 或
japanese/kinput2-freewnn port 这样。 否则,
在 PORTNAME 中就不应包含任何版本信息。
许多 port 采用同样的 PORTNAME 名字是很正常的,
www/apache* port 便是如此; 在这种情况下,
不同的版本 (以及不同的索引项) 是由 PKGNAMEPREFIX、
PKGNAMESUFFIX, 以及
LATEST_LINK 的值的不同而有所区别的。如果 port 可以使用不同的 硬编码默认配置
进行联编 (通常是一系列 port 的一部分目录名), 则
-compiled.specifics
部分就应该明示编译进去的默认值 (此处连字号是可选的)。
通常的用例包括纸型和不同的字体尺寸。-compiled.specifics
部分应该通过 PKGNAMESUFFIX
变量来设置。版本号应该紧随在连字号
(-) 后面并由数字和字母组成。
特别指出, 另外的连字号是不允许出现在版本号里的。
唯一例外的是字符串 pl
(表示 patchlevel),
只能
用在软件没有主版本号和次版本号的情况下。
如果软件的版本号里出现了像
alpha, beta,
rc, pre,
取第一个字母把它放在小数点的后面。
如果在版本号里一直出现那些名字,
那么在数字和字母之间不应有多余的小数点。这个方法是为了更容易得凭版本号来排序 port。
特别注意的是, 确保版本号之间的每部分都由小数点来分隔,
如果日期也是版本号的一部分, 就用这样的格式,
0.0.yyyy.mm.dd
这样的格式, 而非
dd.mm.yyyy
甚至
yy.mm.dd
这种不适合表示千年的格式。 在版本号上使用
0.0. 前缀十分重要, 因为当软件发行正式的版本时,
其版本号数字很可能会小于表示年份的
yyyy 数字。这里是一些真实的例子,
我们藉此说明如何把软件作者对软件的命名,
转换为适合我们包的命名方式:发行版的名字PKGNAMEPREFIXPORTNAMEPKGNAMESUFFIXPORTVERSION说明mule-2.2.2(空)mule(空)2.2.2没什么需要修改的EmiClock-1.0.2(空)emiclock(空)1.0.2程序的名字不能使用大写字母rdist-1.3alpha(空)rdist(空)1.3.a像 alpha
这样的字符串是不允许出现的es-0.9-beta1(空)es(空)0.9.b1像 beta
这样的字符串是不允许出现的mailman-2.0rc3(空)mailman(空)2.0.r3像 rc
这样的字符串是不允许出现的v3.3beta021.src(空)tiff(空)3.3那个是啥鬼东西?tvtwm(空)tvtwm(空)pl11总需要有个版本号吧piewm(空)piewm(空)1.0总需要有个版本号吧xvgr-2.10pl1(空)xvgr(空)2.10.1pl 只允许在没有
主/次 版本号的情况下才能出现gawk-2.15.6ja-gawk(空)2.15.6日文版psutils-1.13(空)psutils-letter1.13纸张大小已经在编译的时候被硬编码到程序里了pkfonts(空)pkfonts3001.0300dpi 字体的包如果在原始的代码里没有版本号,
或者原作者并不打算开发另外的版本,
就应把版本号设成 1.0 (就像前面
piewm 的例子那样)。 否则,
要求原始的作者加上版本号或使用日期
(0.0.yyyy.mm.dd)
来作为版本号。分类CATEGORIES (所属分类)在包制作完成之后,
它会被放在 /usr/ports/packages/All,
并建立一系列来自
/usr/ports/packages
下子目录的符号连接。 这些子目录的名称是由
CATEGORIES
指定的。 这将方便于那些用户在 FTP 站点或 CDROM
的一大堆包里面寻找自己想要的包。 请查看一下
目前的分类表,
并找出一个适合您 port 的分类。此列表也会决定您的 port 在 port
目录中的位置。 如果您在这里设定了 1 个以上的分类,
则认为您 port 文件应放到以第一个分类命名的子目录中。 请参阅
后面
关于如何选择正确分类的更多讨论。目前的分类表这是目前 port 中的分类。 那些用星号
(*) 标记的是
虚拟分类 —
它们在ports树里没有相应的子目录,
因而只用来做为次要的分类, 用以方便搜索。对于非虚拟的分类来说,
您会看到在相对应子目录中的 Makefile
里有写在 COMMENT 里的单行描述。分类描述注意事项accessibility帮助残障人士的 port。afterstep*对于
AfterStep
窗口管理器的支持。arabic阿拉伯语言支持。archivers压缩与备份工具。astro有关天文学的 port。audio声音支持。benchmarks测评程序。biology生物学相关的软件。cad计算机辅助设计工具。chinese中文语言支持。comms通讯软件。大部分是用于串口通讯的。converters字符编码转换。databases数据库。deskutils在发明计算机以前就已经在桌面上使用的东西。devel程序开发工具。不要把开发库放在这里 —
除非您再也找不到更合适的分类,
否则就不该放在这个分类里。dnsDNS 相关的软件。docs*有关 FreeBSD 文档的 Meta-ports。editors通用编辑器。有特殊用途的编辑器应该被置于相应的分类中
(比如, 数学-方程式
编辑器应该放在 math 分类里。elisp*Emacs-lisp相关的port。emulators其它操作系统的模拟器。终端模拟器 不应该
属于这个分类 — 基于 X 的应该放在
x11 而基于文本模式的应该放到
comms 或 misc
中去, 取决于具体的功能。finance货币、 金融以及相关的应用程序。french法语语言支持。ftpFTP 客户端和服务器端的程序。如果您的 port 同时支持 FTP 和 HTTP 的话,
把它放进 ftp 并把
www 做为第二分类。games游戏。geography*与地理学有关的软件。german德语语言支持。gnome*关于
GNOME
项目的支持。gnustep*与 GNUstep 桌面环境有关的软件。graphics图形图象程序。hamradio*业余无线电爱好者使用的软件。haskell*有关 Haskell 编程语言的软件。hebrew希伯来语语言支持。hungarian匈牙利语语言支持。ipv6*IPv6 相关软件。ircIRC 相关程序japanese日语语言支持。java与 Java™ 编程语言有关的软件。java 分类对 port 而言不应是其唯一的分类。
除了直接与 Java 语言相关的 port 之外,
开发人员应尽量避免使用 java 作为
port 的主分类。kde*K 桌面环境 (KDE)
相关的软件。kld*可加载内核模块。korean韩语语言支持。lang编程语言。linux*Linux 相关的应用程序。lisp*和 Lisp 编程语言有关的软件。mail电子邮件软件。math数值计算和其它数学相关的软件。mbone*MBone 应用程序。misc各式各样的实用程序。通常不属于其它的任何分类,
如果可能的话, 尽量为您的 port 选择
misc
以外的分类, 因为在这里的
port 比较容易被人忽略。multimedia多媒体软件。net各种网络相关的软件。net-im即时消息软件。net-mgmt网络管理软件。net-p2p对等网 (Peer to peer network) 应用程序。newsUSENET新闻组相关软件。palmPalm™ 系列相关软件。parallel*并行计算相关软件。pear*Pear PHP 架构相关软件。perl5*Perl5 相关的软件。plan9*Plan9 相关程序。polish波兰语语言语言支持。ports-mgmt用于管理、 安装和开发 FreeBSD ports 和预编译包的 port。portuguese葡萄牙语语言支持。print打印相关的软件。桌面出版工具 (打印预览工具等等)
也可以放在此分类里。python*Python 编程语言相关的软件。ruby*Ruby 编程语言相关的软件。rubygems*移植版本的 RubyGems 软件包。russian俄语语言支持。scheme*与 Scheme 语言有关的 port。science科学相关但不适合放在
astro、
biology, 以及
math 分类的 port。security安全相关的实用程序。shells命令行 shell。spanish*西班牙语支持sysutils系统相关的实用程序。tcl*依赖于 Tcl 运行的 port。textproc文本处理的实用程序。这个分类并不适合于那些应该放到
print 的桌面出版工具。tk*依赖于 Tk 运行的 port。ukrainian乌克兰语语言支持。vietnamese越南语语言支持。windowmaker*WindowMaker 窗口管理器的相关支持。wwwWord Wide Web的相关软件。HTML语言相关的支持也可以放在这个分类里。x11X Window System以及相关软件。这个分类是给那些直接支持X Window System
的软件的。 不要把常规的 X 应用程序也放进这里;
它们中的大多数都应被归类到
x11-* (参见下文)。
如果您的 port 是
X 应用程序, 应定义 USE_XLIB
(使用 USER_IMAKE 隐含包括它),
然后把它放到合适的分类里。x11-clocksX11 下的时钟程序。x11-driversX11 驱动程序。x11-fmX11 下的文件管理器。x11-fontsX11 下的字体以及相关工具。x11-serversX11 服务器。x11-themesX11 主题。x11-toolkitsX11 工具包。x11-wmX11 窗口管理器。xfce*与
Xfce
桌面环境有关的 port。zope*Zope 相关的支持。选择正确的分类由于不少分类是重复的, 您通常在用哪个分类作为您
port 的主分类上做出选择。 下面有几条规则能帮您解决这个问题。
这是一个带优先级的表, 按优先级降序罗列:第一个分类必须是个物理的分类 (参阅
前面)。
这对于制作包是必要的。
虚拟分类和物理分类可能在包制作完成后混合在一起。对于特定语言的分类通常放在第一位。
例如, 如果您的 port 会安装一些 X11 的日文字体,
那么 CATEGORIES那行
就应该是 japanese x11-fonts。有特定意义的分类应当被列在无特定意义的前面。
例如, HTML 编辑器应该是这样的 www
editors, 而不是其它的什么。 同样地,
您不应该列出 net, 如果 port 属于
irc、 mail、
news、
security, 或是 www,
因为 net 可以表示它们的超集。只有当主要的分类是一门自然语言的时候,
x11 能被做为第二分类。
需要特别指出的是, 您不应把 X 的应用程序也归类为
x11。Emacs
模式应当于相应的应用程序放在同一个分类里, 而不是
editors 分类。 举例来说,
一个用于编辑某种编程语言源代码的
Emacs
模式应该被归为
lang 一类。
需要安装可加载内核模块的 port 应在其 CATEGORIES
中归入虚拟分类 kld。
misc
分类的 port 不能有其它非虚拟的分类。
如果您在您的 CATEGORIES
里设了 misc 和另外的分类,
那意味着可以安全地删除 misc
并把 port 放到其它的子目录中了!如果您的 port 确实不属于现有的分类,
才把它放到 misc。如果您不能确定使用哪个分类, 请在您提交的
&man.send-pr.1; 里加上一行注释,
这样我们就能在导入进 port 树之前讨论一下。
如果您是 committer, 发一份备忘到 &a.ports;
先讨论一下。 很多情况是新的 port 被加到错误的分类里,
然后又立即被移走。这会造成源代码库不必要和不良的膨胀。如何提议建立新的分类由于 Ports Collection 在持续增长, 已经引入了许多新的分类。
新的分类既可以是 虚拟的 分类 —
这些分类在整个 ports 目录中没有属于自己的子目录 —
或 物理的 分类 — 它们有自己的子目录。
接下来我们将讨论与建立新的物理分类有关的事项,
以便帮助您理解如何提议建立新的分类。我们目前的做法是避免建立新的物理分类, 除非有非常多的 port
应被归入这一分类, 或者 port 属于某一特定的小团体 (例如,
与某种人类语言相关), 或两者皆是。这样做的原因是这类修改会让 committer 和用户都不得不进行 许多工作
来在 Ports Collection 进行或追踪修改。 此外,
提议新的分类通常都会引起争论。 (可能这是因为关于某个分类是否
太大 一直没有非常一致的意见的缘故,
另一方面, 分类是否能够能够有助于浏览 (以及多少个分类是合适的),
等等, 也都是问题。)下面是具体的步骤:在 &a.ports; 提议新的分类。 您应提供建立新分类的详细依据,
包括为什么认为现有的分类不够, 以及希望移动位置的一系列 port
的名字。 (如果有尚在
GNATS 而未 commit 的 port,
也应一一列出。) 如果您是相关 port 的监护人或提交者,
说明这一情况可能有助于您的提议得到通过。参与讨论。如果有人支持您的建议, 应及时提交一个 PR,
其中包括提议 PR 的理由, 以及需要移动的 port 的列表。
理想情况下, 这个 PR 也应包含针对下列文件的补丁:进行 repocopy 之后对 Makefile
进行的修改新分类的 Makefile旧分类的 Makefile依赖于旧 port 的 port 的
Makefile(此外, 作为一项加分因素,
您还可以按照 Committer 指南所介绍的流程,
提供一些其它需要修改的文件。)由于这是一项影响 ports 基础设施的变动,
它不仅涉及 repo-copy 的使用,
而且也可能会影响联编集群的回归测试操作,
因此这类 PR 应分派给 &a.portmgr;。如果这一 PR 得到批准, 某个 committer 将按照在
Committer 指南 中所介绍的步骤来完成余下的工作。提议新的虚拟分类和上述过程类似, 但会容易许多,
因为不需要实际地移动任何 port。 这种情况下, PR 应附带的补丁,
就只需要修改影响到的 port 的 Makefile, 以便在其中的
CATEGORIES 中加入新的分类了。如何提议对分类进行重新组织有些时候会有一些人提议重新将分类组织为 2-层 或某种基于关键字的结构。
目前为止, 还没有进行任何相关的改变, 因为尽管这些修改比较容易完成,
但修改整个 Ports Collection 所需要进行的工作, 至少也是令人生畏的。
在发表您的观点之前, 请阅读在邮件列表存档中历史上所进行过的提议;
此外, 您也会被要求提供一个可用的原形。源码包文件在 Makefile 中的第二部分是描述用于联编 port
所必需下载的文件, 以及到什么地方去下载它们。DISTVERSION/DISTNAME (源码包版本号/名称)DISTNAME 是作者称呼您所 port 软件的名字。
DISTNAME 的默认值是
${PORTNAME}-${PORTVERSION},
因此只有在需要时才应手工指定。
DISTNAME 只在两个地方用到。 第一处是源码包文件列表
(DISTFILES), 其默认值是
${DISTNAME}${EXTRACT_SUFX}。
第二处是源码包应被展开到的目录名,
即 WRKSRC 所指定的目录,
其默认值是 work/${DISTNAME}。某些软件作者发布源码包的时候并不采取
${PORTNAME}-${PORTVERSION} 这样的模式,
这可以通过设置 DISTVERSION 来自动处理。
PORTVERSION 和 DISTNAME
会自动地展开, 当然, 也可以改掉它。 下表给出了一些例子:DISTVERSIONPORTVERSION0.7.1d0.7.1.d10Alpha310.a33Beta7-pre23.b7.p28:f_178f.17PKGNAMEPREFIX 和
PKGNAMESUFFIX 并不影响
DISTNAME。 此外还应注意
WRKSRC 等于
work/${PORTNAME}-${PORTVERSION},
而源代码的压缩包则可能是
${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}
以外的其它名字。 一般情况下应该保持 DISTNAME
不变 — 更好的方法是定义
DISTFILES 而不是同时设置
DISTNAME 和 WRKSRC
(可能还有 EXTRACT_SUFX)。MASTER_SITES (主流下载站点)记录 FTP/HTTP-URL 指向 MASTER_SITES
中原始压缩档的目录部分。 不要忘了结尾的斜线
(/)!make 宏将尝试使用
FETCH 来抓取所指定的源码包文件,
如果无法在本地系统中找到这些文件的话。建议您指定多个镜像站点, 最好是在不同的大洲上的。
这样将有效地防止由于大范围网络问题所导致无法下载的问题。
我们甚至打算增加自动检测距离最近的站点并从那里下载的功能;
使用多个站点是这样做的重要一步。如果原始的源码包可以从比较流行的软件下载站点,
例如 SourceForge、 GNU 或是 Perl CPAN 等等来获得,
您可能会希望使用类似
MASTER_SITE_*
这样的缩写来表示它们
(例如 MASTER_SITE_SOURCEFORGE、
MASTER_SITE_GNU 以及
MASTER_SITE_PERL_CPAN)。 只需将
MASTER_SITES 设为这些变量, 并使用
MASTER_SITE_SUBDIR 来指定路径就可以了。
下面是一个例子:MASTER_SITES= ${MASTER_SITE_GNU}
MASTER_SITE_SUBDIR= make此外, 您还可以用更为简略的格式:MASTER_SITES= GNU/make这些变量是在
/usr/ports/Mk/bsd.sites.mk 中定义的。
新项目会随时增加, 因此在您提交 port 之前,
应先看一看这个文件的最新版本。针对常用软件下载站的许多 暗黑魔法 宏,
还能够自动判断目录的结构。 对于这些站点,
只要使用与之对应的缩写, 系统便会自动为您生成相关的子目录配置。MASTER_SITES= SF如果系统猜测的路径不对, 则可以使用下面这样的配置来替换。MASTER_SITES= SF/stardict/WyabdcRealPeopleTTS/${PORTVERSION}
用于使用 KDE 3.x 的 port 的变量USE_KDELIBS_VER表示 port 用到了 KDE 库。
这个变量可以指定希望使用的 KDE 主版本号,
如果设置了这个变量, 则系统也会将
USE_QT_VER 设为适当的版本。
该变量目前唯一有效的值是
3。USE_KDEBASE_VER表示 port 用到了 KDE 的基本系统。
这个变量可以指定希望使用的 KDE 主版本号,
如果设置了这个变量, 则系统也会将
USE_QT_VER 设为适当的版本。
该变量目前唯一有效的值是 3。
用于 KDE 4 的变量定义如果您的应用程序需要使用 KDE 4.x, 则应将 USE_KDE4
设为所需组件的列表。 下面列出一些最常用到的组件
(最新的组件列表位于 /usr/ports/Mk/bsd.kde4.mk
中的 _USE_KDE4_ALL):
可用的 KDE4 组件名称说明akonadi个人信息管理 (PIM)存储服务automoc4令 port 使用 automoc4 联编工具集kdebase基本的 KDE 应用程序 (Konqueror、 Dolphin、 Konsole)kdeexp试验性的 KDE 库 (包含尚未完全确定不变的 API)kdehier常用的 KDE 目录层次结构kdelibs基本 KDE 库kdeprefix如果设置了这个选项, 则 port 将安装到
${KDE4_PREFIX}
而不是 ${LOCALBASE}pimlibsPIM 函数库workspace用于组成桌面的应用程序和函数库 (Plasma、 KWin)
KDE 4.x port 会安装到 ${KDE4_PREFIX},
目前是 /usr/local/kde4,
以避免与 KDE 3.x ports 冲突。 这是通过指定 kdeprefix
组件来实现的, 它表示替换默认的 PREFIX。 不过,
port 仍会遵循通过 MAKEFLAGS 环境变量设置的
PREFIX 以及其它 make 参数。KDE 4.x ports 有可能和 KDE 3.x ports 冲突, 因此如果启用了
kdeprefix 组件, 它们会安装到
${KDE4_PREFIX}。 目前
KDE4_PREFIX 的默认值是
/usr/local/kde4。 也可以将 KDE 4.x ports
安装到自定义的 PREFIX。 当
PREFIX 是通过 MAKEFLAGS
环境变量, 或直接在 make 命令行指定时,
它会替换 kdeprefix 提供的配置。USE_KDE4 示例下面是一个简单的 KDE 4 port。 USE_CMAKE
指定 port 使用 CMake —
许多 KDE 4 项目所使用的配置工具。
USE_KDE4 则引入 KDE 函数库, 并令 port 在联编阶段使用
automoc4。 需要的 KDE 组件,
以及其他依赖的组件可以从 configure 的日志中获知。
USE_KDE4 并不会自动设置 USE_QT_VER。
如果 port 需要使用某些 Qt4 组件, 则需要设置 USE_QT_VER
并指定所需要的组件。 USE_CMAKE= yes
USE_KDE4= automoc4 kdelibs kdeprefix
USE_QT_VER= 4
QT_COMPONENTS= qmake_build moc_build rcc_build uic_build使用 Java变量定义如果您的 port 需要 Java™ 开发包 (JDK™) 来完成联编、
支持运行, 甚至完成解开源代码包这样的工作,
就应该定义 USE_JAVA。在 Ports Collection 中有许多不同的 JDK, 它们的版本各不相同,
或是来自不同的供应商。 如果您的 port 必须使用其中的某个特定的版本,
也可以予以定义。 最新的稳定版本是
java/jdk16。
用到 Java 的 port 可以使用的变量变量意义USE_JAVA只有定义它才能使其它变量生效。JAVA_VERSION用空格分开的适合 port 使用的 Java 版本。
可选的 "+" 可以用于指定某个范围的版本 (可以用:
1.5[+] 1.6[+] 1.7[+]
)。JAVA_OS用空格分开的适应 port 的 JDK port 操作系统类型 (可以用: native
linux)。JAVA_VENDOR用空格分开的适应 port 的 JDK port 供应商
(可以用: freebsd bsdjava sun
openjdk)。JAVA_BUILD设置这个变量表示所选的 JDK port 应被列入 port 的联编依赖关系。JAVA_RUN设置这个变量表示所选的 JDK port 应被列入 port 的运行环境依赖关系。JAVA_EXTRACT设置这个变量表示所选的 JDK port 应被列入 port 的解压缩支持依赖关系。
您可以使用 java-debug make target
以获取用于调试 port 的信息。 大多数前述变量的值皆会予以呈现。此外, 还会定义下述常量, 以确保所有的
Java port 均以一致之方式安装:
为使用 Java 的 port 定义的常量常量值JAVASHAREDIR所有 Java 相关资料的安装根目录。
默认值: ${PREFIX}/share/java.
JAVAJARDIR用以安装 JAR 文件的目录。 默认值:
${JAVASHAREDIR}/classes。JAVALIBDIR其它 port 安装的 JAR 文件所在的目录。 默认值:
${LOCALBASE}/share/java/classes。
相关的项也会定义在
PLIST_SUB (在
中进行介绍) 和
SUB_LIST 中。采用 Ant 进行联编如果 port 采用 Apache Ant 进行联编,
则需要定义 USE_ANT。 如是, 则 Ant
将作为 子-make 命令来使用。 如果 port 未定义 do-build
target, 则将默认依 MAKE_ENV、
MAKE_ARGS 和 ALL_TARGET。
的设置执行 Ant。 这类似于 中介绍的关于
USE_GMAKE 的机制。最佳实践如果您正移植某个 Java 库, 您的 port 应把
JAR 文件安装到 ${JAVAJARDIR}, 而其它文件则应放在
${JAVASHAREDIR}/${PORTNAME} 下
(除了文档, 参见下文)。 要减少打包文件的尺寸,
您可以直接在 Makefile 中引用这些 JAR 文件,
具体做法是使用下面的语句 (此处的 myport.jar
是作为 port 一部分安装的 JAR 文件的名字):PLIST_FILES+= %%JAVAJARDIR%%/myport.jar移植 Java 应用程序时, port 通常会希望将所有文件安装到同一目录
(包括其依赖的 JAR)。 这时强烈建议使用
${JAVASHAREDIR}/${PORTNAME}。
移植软件的开发人员, 可以自行决定是否将所依赖的其它 JAR 安装到此目录,
或直接使用已经装好的那些
(来自 ${JAVAJARDIR})。无论您正制作哪一类的 port (库或者应用程序),
附加的文档都应安装到和其它 port
同样的位置。
已经知道, JavaDoc 会根据 JDK 版本的不同而产生不同的文件。
对于那些不打算强制使用某一特定版本 JDK 的 port 而言,
这无疑提高了制作装箱单
(pkg-plist) 的难度。 这是为什么强烈建议使用
PORTDOCS 宏的原因。 更进一步, 即使您能够预测
javadoc 将要生成的文件, 所需的
pkg-plist 的尺寸, 也是鼓吹使用
PORTDOCS 的一大理由。DATADIR 的默认值是
${PREFIX}/share/${PORTNAME}。
对 Java port 而言将 DATADIR 改为
${JAVASHAREDIR}/${PORTNAME} 是一个好主意。
当然, DATADIR 会自动加到
PLIST_SUB 中 (在 有所介绍) 因此您可以在
pkg-plist 中直接使用
%%DATADIR%%。撰写本文时, 对是应该从源代码联编, 还是直接安装预编译的
Java ports 安装包并没有明确的规定。 尽管如此, &os; Java Project
的开发人员仍鼓励移植软件的开发者在不麻烦的情况下尽可能从源代码完成联编。本节中所介绍的全部特性, 均是在 bsd.java.mk
中实现的。 如果您感觉自己的 port 需要更为复杂的 Java 支持,
请首先参阅
bsd.java.mk CVS 日志, 因为通常撰文介绍最新特性需要一些时间。
此外, 如果您认为所缺少的支持对许多其它 Java port 亦属有益,
请在 &a.java; 对其进行讨论。在 PR 中的 java 类别,
主要是用于 &os; Java project 移植 JDK 本身之用。
因而, 提交您的 Java port 时, 应归入
ports 类别, 除非您正尝试解决的问题是 JDK
实现本身或 bsd.java.mk 的。类似地, 您应参考 中所详述的关于
CATEGORIES 在 Java port 中的使用规则。Web 应用, Apache 和 PHPApache
使用 Ruby 的 port 可以使用的变量变量说明USE_RUBY此 port 需要 Ruby。USE_RUBY_EXTCONF此 port 使用 extconf.rb
来完成配置。USE_RUBY_SETUP此 port 使用 setup.rb
来完成配置。RUBY_SETUP将此变量名设置为所用的
setup.rb 的文件名。 通常会是
install.rb。
下表展示了 ports 系统提供给 port 作者的一些变量。
您应使用这些变量, 以便把文件装到合适的位置。 请尽可能多地在
pkg-plist 中使用它们。 这些变量不应在 port
中重新定义。