PORTNAME= gtkmumble PORTVERSION= 0.10
This translation may be out of date. To help with the translations please access the FreeBSD translations instance .
Das Konfigurieren des Makefile ist sehr einfach und wir schlagen vor, dass Sie zunächst einen Blick auf vorhandene Beispiele werfen. Zusätzlich 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:
Liegt der Quelltext in
DISTDIR
als eine standardisierte und mit gzip gepackte Datei in der Art
foozolix-1.2.tar.gz
? Falls ja, können Sie zum nächsten 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 hängt davon ab, wie fremdartig das Distributionsfile Ihres Ports ist (der häufigste Fall ist
EXTRACT_SUFX=.tar.Z
, wenn der Tarball durch ein normales
compress
und nicht durch
gzip
gepackt wurde).
Im schlimmsten Fall können Sie einfach Ihre eigene Vorgabe mittels
do-extract
erzeugen und die Standardvorgabe überschreiben; aber dies sollte in den wenigsten Fällen, wenn überhaupt, notwendig sein.
Der erste Teil des Makefile beschreibt die Versionsnummer des Ports und führt ihn in der richtigen Kategorie auf.
PORTNAME
und
PORTVERSION
Setzen Sie bitte die Variable
PORTNAME
auf den Basisnamen Ihres Ports und die Variable
PORTVERSION
auf dessen Versionsnummer.
PORTREVISION
und
PORTEPOCH
PORTREVISION
Die
PORTREVISION
-Variable ist ein streng monoton wachsender Wert, welcher auf 0 zurückgesetzt wird, nachdem
PORTVERSION
erhöht wurde (d.h. jedes Mal, wenn ein offizielles Release erfolgt). Sie wird an den Namen des Pakets angehängt, wenn sie ungleich 0 ist. Änderungen an
PORTREVISION
werden von automatisierten Werkzeugen (z.B.
pkg_version(1)
) genutzt, um anzuzeigen, dass ein neues Paket verfügbar ist.
PORTREVISION
sollte jedes Mal erhöht werden, wenn eine Änderung am Port erfolgt, die beträchtliche Auswirkungen auf den Inhalt oder Struktur des aus dem Port erzeugten Pakets zur Folge hat.
Beispiele dafür, wann
PORTREVISION
erhöht werden sollte:
Hinzufügen von Patches, welche Sicherheitslücken schließen, Fehler beseitigen oder neue Funktionalität zum Port hinzufügen.
Änderungen am Makefile des Ports, welche compile-time-Optionen hinzufügen oder entfernen.
Änderungen bezüglich Packliste oder am Verhalten während der Installation des Pakets (d.h. Änderungen an einem Skript, welches Ausgangsdaten für das Paket erzeugt, wie z.B. SSH-Hostschlüssel).
Versionssprung einer Shared-Library, welche eine Abhängigkeit dieses Ports ist (In diesem Fall würde ein Anwender bei der Installation des alten Pakets scheitern, falls er eine neue Version der Abhängigkeit bereits installiert hat, weil nach der alten Bibliothek libfoo.x anstatt nach libfoo.(x+1)) gesucht wird).
Schleichende Änderungen am Distfile, welche bedeutende funktionale Änderungen verursachen, d.h. Änderungen des Distfile erfordern eine Korrektur an
distinfo
, ohne dass damit zusammenhängend die
PORTVERSION
verändert wird, obwohl ein
diff -ru
zwischen der alten und der neuen Version bedeutende Veränderungen am Code nachweist.
Beispiele für Änderungen, welche keine Erhöhung von
PORTREVISION
erfordern:
Stilistische Änderungen am Grundgerüst des Ports ohne funktionale Änderungen am daraus resultierenden Paket.
Änderungen an der Variable
MASTER_SITES
oder andere funktionale Änderungen, welche das resultierende Paket nicht verändern.
Marginale Patches am Distfile wie die Korrektur von Tippfehlern, welche nicht wichtig genug sind, um dem Benutzer die Bürde 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 erhöhen, wenn das Paket vorher nicht erstellt werden konnte.
Als Faustregel gilt: Stellen Sie sich die Frage, ob die durchgeführte Änderung am Port jedem hilft (entweder aufgrund einer Verbesserung, Beseitigung eines Fehlers, oder der Annahme, dass das neue Paket überhaupt erst funktioniert) und wägen Sie es gegen den Umstand ab, dass jedermann, der seine Ports-Sammlung regelmässig auf dem neuesten Stand hält, zu einer Aktualisierung gezwungen wird. Falls Sie die Frage positiv beantworten sollten, erhöhen Sie die Variable
PORTREVISION
.
PORTEPOCH
Von Zeit zu Zeit geschieht es, dass irgendjemand (Drittanbieter von Software oder FreeBSD Ports Committer) etwas Dummes tut und eine Version einer Software veröffentlicht, deren Versionsnummer niedriger ist als die der vorherigen. Ein Beispiel hierfür ist ein Port, der von foo-20000801 auf foo-1.0 geändert wird (der Erstere wird fälschlicherweise als neue Version behandelt, weil 2000801 ein numerisch größerer Wert ist als 1).
In Situationen wie diesen sollte die Variable
PORTEPOCH
erhöht werden. Wenn
PORTEPOCH
größer als 0 ist, wird sie an den Namen des Pakets angehängt, wie in Abschnitt 0 oberhalb bereits beschrieben.
PORTEPOCH
darf niemals verringert oder auf 0 gesetzt werden, weil der Vergleich des Pakets mit einem früheren Zeitpunkt scheitern würde (d.h. das Paket würde niemals als veraltet erkannt werden): Die neue Versionsnummer (
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 größer erkannt, als das implizit angenommene Suffix
,0
im früheren Paket.
Das Entfernen oder Zurücksetzen von
PORTEPOCH
führt zu unendlichem Ärger. Wenn Sie die obigen Ausführungen nicht vollständig verstanden haben, lesen Sie es bitte unbedingt nochmals bis Sie es vollständig verinnerlicht haben, oder fragen Sie vor jeder Änderung auf den Mailinglisten nach!
Es wird erwartet, dass
PORTEPOCH
für die weitaus überwiegende Zahl der Ports nicht verwendet wird und der verantwortungsvolle und vorausschauende Umgang mit
PORTVERSION
macht es meist überflüssig, falls ein späteres Release die Versionsstruktur ändern sollte. Vorsicht ist geboten, wenn ein Release einer Drittanbieter-Software ohne eine offizielle Versionsnummer veröffentlicht wird, wie z.B. bei "Snapshot-Versionen". Man ist versucht, das Release mit dem jeweiligen Datum zu bezeichnen, was unweigerlich zu den oben beschriebenen Problemen führt, wenn das nächste "offizielle" Release erscheint.
Wenn z.B. ein Snapshot zum Datum 20000917 veröffentlicht wird und die vorherige Version der Software war 1.2, dann sollte der Snapshot die
PORTVERSION
1.2.20000917 oder ähnlich erhalten und nicht 20000917, damit das nachfolgende Release, angenommen 1.3, immer noch einen größeren numerischen Wert aufweist.
PORTREVISION
und
PORTEPOCH
Der
gtkmumble
-Port, Version
0.10
, befindet sich in der Ports-Sammlung:
PORTNAME= gtkmumble PORTVERSION= 0.10
PKGNAME
wird zu
gtkmumble-0.10
.
Ein Sicherheitsloch wurde entdeckt, das einen lokalen Patch von FreeBSD erforderlich macht.
PORTREVISION
wird entsprechend erhöht.
PORTNAME= gtkmumble PORTVERSION= 0.10 PORTREVISION= 1
PKGNAME
wird zu
gtkmumble-0.10_1
Eine neue Version wird vom Software-Drittanbieter veröffentlicht, 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 spät). Da die neue Unterversion
2
numerisch kleiner ist als die vorherige Version
10
, muss
PORTEPOCH
erhöht werden, um sicherzustellen, dass das neue Paket auch als "neuer" erkannt wird. Da es ein neues Release des Drittanbieters ist, wird
PORTREVISION
auf 0 zurückgesetzt (oder aus dem
Makefile
entfernt).
PORTNAME= gtkmumble PORTVERSION= 0.2 PORTEPOCH= 1
PKGNAME
wird zu
gtkmumble-0.2,1
Das nächste Release ist 0.3. Da
PORTEPOCH
niemals verringert wird, sind die Versionsvariablen nun wie folgt:
PORTNAME= gtkmumble PORTVERSION= 0.3 PORTEPOCH= 1
PKGNAME
wird zu
gtkmumble-0.3,1
|
Falls
|
PKGNAMEPREFIX
und
PKGNAMESUFFIX
Zwei optionale Variablen,
PKGNAMEPREFIX
und
PKGNAMESUFFIX
, werden verknüpft mit
PORTNAME
und
PORTVERSION
, um
PKGNAME
zu bilden als
${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}
. Stellen Sie bitte unbedingt sicher, dass diese Variablen den
Richtlinien für einen guten Paketnamen
entsprechen. Insbesondere dürfen 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_LINK
Die Umgebungsvariable
LATEST_LINK
wird während der Paketerstellung verwendet, um einen Kurznamen festzulegen, der danach von
pkg_add -r
genutzt werden kann. Dadurch wird es beispielsweise möglich, 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 Fällen können mehrere Versionen einer Applikation gleichzeitig in der Ports-Sammlung sein. Das index build- und das package build-System müssen nun in der Lage sein, diese als unterschiedliche Ports zu erkennen, obwohl diese Versionen alle die gleichen Variablen
PORTNAME
,
PKGNAMEPREFIX
und sogar
PKGNAMESUFFIX
aufweisen. In solchen Fällen sollte die optionale Variable
LATEST_LINK
auf einen unterschiedlichen Wert für alle Ports gesetzt werden mit Ausnahme des "Haupt-Ports". Beispiele hierfür 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 für alle Versionen (aber nicht für die "Hauptversion") nützlich sein kann. Beachten Sie bitte, dass die Frage der Auswahl der "wichtigsten" Version ("am populärsten", "am besten Unterstützt", "zuletzt gepatcht" usw.) ausserhalb der Möglichkeiten dieses Handbuches liegt. Wir sagen Ihnen nur, wie Sie die anderen Ports spezifizieren, nachdem Sie den "Haupt-Port" erkoren haben.
Im Folgenden finden Sie die Regeln für die Benennung Ihrer Pakete. Diese sollen gewährleisten, dass das Paketverzeichnis leicht zu durchsuchen ist, da es bereits abertausende Pakete gibt und die Nutzer sich mit Schauder abwenden, wenn Ihre Augen überstrapaziert werden!
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 bemüht sich ausserordentlich, die Landessprachen seiner Nutzer zu unterstützen. Die _language-_Variable soll eine Abkürzung mit 2 Buchstaben sein der Sprachen gemäß ISO-639, falls der Port für eine bestimmte Sprache spezifisch ist. Beispiele hierfür sind
ja
für Japanisch,
ru
für Russisch,
vi
für Vietnamesisch,
zh
für Chinesisch,
ko
für Koreanisch und
de
für Deutsch.
Sollte der Port spezifisch sein für eine gewisse Region innerhalb eines Sprachraumes, dann fügen Sie bitte auch den Ländercode mit 2 Buchstaben hinzu. Beispiele sind
en_US
für nordamerikanisches Englisch und
fr_CH
für schweizerisches Französisch.
Der
language-
Teil muss in der
PKGNAMEPREFIX
-Variable gesetzt werden.
Der erste Buchstabe des
name
-Teils muss kleingeschrieben werden (der Rest des Namens kann Großbuchstaben enthalten. Daher seien Sie bitte umsichtig, wenn Sie den Namen einer Software konvertieren, welche Grossbuchstaben enthält). Es ist Tradition,
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 Indexeinträge) 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 hierfür sind Papiergrößen 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 zulässig, 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 verfügt. Wenn die Versionsbezeichnung der Software Zeichenketten wie "alpha", "beta", "rc" oder "pre" enthält, dann nehmen Sie bitte den ersten Buchstaben daraus und setzen ihn unmittelbar hinter einen Punkt. Falls die Versionszeichenfolge nach diesem Punkt fortgesetzt wird, sollen die Zahlen ohne einen Punkt zwischen den einzelnen Buchstaben folgen.
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 Veröffentlichung auf jeden Fall kleiner als
yyyy
sein wird.
Hier sind einige reale Beispiele, die aufzeigen, wie man den Namen einer Applikation zu einem vernünftigen Paketnamen umwandelt:
| Softwarename | PKGNAMEPREFIX | PORTNAME | PKGNAMESUFFIX | PORTVERSION | Grund |
|---|---|---|---|---|---|
|
mule-2.2.2 |
(leer) |
mule |
(leer) |
2.2.2 |
Keine Änderung erforderlich |
|
EmiClock-1.0.2 |
(leer) |
emiclock |
(leer) |
1.0.2 |
keine Großbuchstaben für einzelne Applikationen |
|
rdist-1.3alpha |
(leer) |
rdist |
(leer) |
1.3.a |
Keine Zeichenketten wie
|
|
es-0.9-beta1 |
(leer) |
es |
(leer) |
0.9.b1 |
keine Zeichenketten wie
|
|
mailman-2.0rc3 |
(leer) |
mailman |
(leer) |
2.0.r3 |
keine Zeichenketten wie
|
|
v3.3beta021.src |
(leer) |
tiff |
(leer) |
3.3 |
Was sollte denn das eigentlich sein? |
|
tvtwm |
(leer) |
tvtwm |
(leer) |
pl11 |
Versionsstring zwingend erforderlich |
|
piewm |
(leer) |
piewm |
(leer) |
1.0 |
Versionsstring zwingend erforderlich |
|
xvgr-2.10pl1 |
(leer) |
xvgr |
(leer) |
2.10.1 |
|
|
gawk-2.15.6 |
ja- |
gawk |
(leer) |
2.15.6 |
Japanische Sprachversion |
|
psutils-1.13 |
(leer) |
psutils |
-letter |
1.13 |
Papergröße beim Paketbau fix kodiert |
|
pkfonts |
(leer) |
pkfonts |
300 |
1.0 |
Paket für 300 DPI Schriftarten |
Falls es in der Originalquelle überhaupt keinen Anhaltspunkt für irgendeine Versionsbezeichnung gibt und es unwahrscheinlich ist, dass der Autor jemals eine neue Version veröffentlichen wird, dann setzen Sie bitte die Version einfach auf
1.0
(wie im obigen Beispiel
piewm
). Sie können auch den Autor fragen oder eine Datumszeichenfolge in der Art
0.0.yyyy.mm.dd
als Version verwenden.
CATEGORIES
Wenn 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 große 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 für Ihren Port aus.
Diese Liste legt auch fest, an welcher Stelle in der Ports-Sammlung der Port eingefügt wird. Falls Sie mehrere Kategorien angeben wird angenommen, dass die Dateien des Ports im Unterverzeichnis mit dem Namen der ersten angegebenen Kategorie liegen. Schauen Sie bitte unten für weitere Informationen darüber, wie man die richtige Kategorie bestimmt.
Hier 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 verfügen. Sie werden nur als Sekundärkategorien benutzt und sind nur für Suchzwecke eingerichtet worden.
|
Für nicht-virtuelle Kategorien finden Sie eine einzeilige Beschreibung in der Variable
|
| Kategorie | Beschreibung | Anmerkung |
|---|---|---|
|
accessibility |
Ports für behinderte Menschen. |
|
|
afterstep* |
Ports für den AfterStep Window Manager. |
|
|
arabic |
Arabische Sprachunterstützung. |
|
|
archivers |
Archivierungswerkzeuge. |
|
|
astro |
Ports für Astronomie. |
|
|
audio |
Sound-Unterstützung. |
|
|
benchmarks |
Benchmarking-Werkzeuge. |
|
|
biology |
Software für Biologie. |
|
|
cad |
CAD-Werkzeuge. |
|
|
chinese |
Chinesische Sprachunterstützung. |
|
|
comms |
Kommunikationsprogramme. |
Hauptsächlich Software für serielle Schnittstellen. |
|
converters |
Zeichensatz-Konverter. |
|
|
databases |
Datenbanken. |
|
|
deskutils |
Dinge, die vor der Erfindung des Computers auf dem Schreibtisch waren. |
|
|
devel |
Entwicklungs-Werkzeuge. |
Legen Sie keine Bibliotheken hier ab, nur weil es Bibliotheken sind, es sei denn, sie gehören wirklich nirgendwo anders hin. |
|
dns |
DNS-bezogene Software. |
|
|
docs* |
Meta-Ports für die FreeBSD-Dokumentation. |
|
|
editors |
allgemeine Editoren. |
Spezielle Editoren gehören in Ihre jeweilige Kategorie, (z.B. gehört ein mathematischer Formeleditor in math ). |
|
elisp* |
Emacs-lisp-Ports. |
|
|
emulators |
Emulatoren für andere Betriebssysteme. |
Terminal-Emulatoren gehören nicht hierher; X-basierende gehören zu x11 und text-basierende zu comms oder misc , abhängig von deren genauer Funktionalität. |
|
finance |
Finanz-Software und ähnliches. |
|
|
french |
Französische Sprachunterstützung. |
|
|
ftp |
FTP Client- und Server-Werkzeuge. |
Falls Ihr Port sowohl FTP als auch HTTP unterstützt, stellen Sie ihn in ftp mit der Zweitkategorie www . |
|
games |
Spiele. |
|
|
geography* |
geografische Software. |
|
|
german |
Deutsche Sprachunterstützung. |
|
|
gnome* |
Ports für GNOME |
|
|
gnustep* |
Software für GNUstep. |
|
|
graphics |
grafische Werkzeuge. |
|
|
hamradio* |
Software für Amateurfunk. |
|
|
haskell* |
Software für die Haskell-Programmiersprache. |
|
|
hebrew |
Hebräische Sprachunterstützung. |
|
|
hungarian |
Ungarische Sprachunterstützung. |
|
|
ipv6* |
IPv6-bezogene Software. |
|
|
irc |
Internet Relay Chat (IRC)-Werkzeuge. |
|
|
japanese |
Japanische Sprachunterstützung. |
|
|
java |
Software für die Java™-Programmiersprache. |
Die java -Kategorie sollte nicht die Einzige für einen Port sein mit Ausnahme der direkt nur mit der Programmiersprache zusammenhängenden Applikationen. Porter sollten java nicht als Hauptkategorie eines Ports wählen. |
|
kde* |
Ports für das K Desktop Environment (KDE) -Projekt. |
|
|
kld* |
Kernelmodule. |
|
|
korean |
Koreanische Sprachunterstützung. |
|
|
lang |
Programmiersprachen. |
|
|
linux* |
Linux-Applikationen und -Werkzeuge. |
|
|
lisp* |
Software für die Lisp-Programmiersprache. |
|
|
|
Mail-Software. |
|
|
math |
Numerische Berechnungen und andere mathematische Werkzeuge. |
|
|
mbone* |
MBone-Applikationen. |
|
|
misc |
Verschiedene Werkzeuge. |
Hauptsächlich Werkzeuge, die nicht anderswo hingehören. Versuchen Sie, falls irgend möglich, eine bessere Kategorie für Ihren Port zu finden als
|
|
multimedia |
Multimedia-Software. |
|
|
net |
Verschiedene Netzwerk-Software. |
|
|
net-im |
Instant Messaging-Software. |
|
|
net-mgmt |
Netzwerk-Management-Software. |
|
|
net-p2p |
Peer to peer-Netzwerkprogramme. |
|
|
news |
USENET News-Software. |
|
|
palm |
Software für Palm™ . |
|
|
parallel* |
Applikationen für paralleles Rechnen. |
|
|
pear* |
Ports für das Pear PHP-Framework. |
|
|
perl5* |
Ports, welche Perl Version 5 benötigen. |
|
|
plan9* |
Verschiedene Programme von Plan9 . |
|
|
polish |
Polnische Sprachunterstützung. |
|
|
ports-mgmt |
Hilfsprogramme für das Installieren und Entwickeln von FreeBSD Ports und Paketen. |
|
|
portuguese |
Portugiesische Sprachunterstützung. |
|
|
|
Drucker-Software. |
Desktop Veröffentlichungs-Werkzeuge (DTP, Betrachter etc.) gehören auch hierher. |
|
python* |
Software für Python . |
|
|
ruby* |
Software für Ruby . |
|
|
rubygems* |
Ports für RubyGems -Pakete. |
|
|
russian |
Russische Sprachunterstützung. |
|
|
scheme* |
Software für die Scheme-Programmiersprache. |
|
|
science |
Wissenschaftliche Programme, die in keine andere Kategorie passen wie z.B. astro , biology und math . |
|
|
security |
Security-Werkzeuge. |
|
|
shells |
Shells. |
|
|
spanish* |
Spanische Sprachunterstützung. |
|
|
sysutils |
System-Werkzeuge. |
|
|
tcl* |
Ports, welche Tcl benötigen. |
|
|
textproc |
Textverarbeitungsprogramme. |
Dies beinhaltet nicht DTP-Werkzeuge, diese gehören in print . |
|
tk* |
Ports, welche Tk benötigen. |
|
|
ukrainian |
Ukrainische Sprachunterstützung. |
|
|
vietnamese |
Vietnamesische Sprachunterstützung. |
|
|
windowmaker* |
Ports für den WindowMaker Window-Manager. |
|
|
www |
Software für das World Wide Web (WWW). |
HTML-Werkzeuge gehören auch hierher. |
|
x11 |
X-Window-System und dergleichen. |
Diese Kategorie ist nur für Software, welche direkt X unterstützt. Fügen Sie keine normalen X-Applikationen hinzu. Die meisten davon gehören in eine andere
x11-*
-Kategorie (siehe unten). Falls Ihr Port eine X-Applikation
ist
, dann definieren Sie bitte
|
|
x11-clocks |
X11-Uhren. |
|
|
x11-drivers |
X11-Treiber. |
|
|
x11-fm |
X11-Dateimanager. |
|
|
x11-fonts |
X11-Schriftarten und Werkzeuge. |
|
|
x11-servers |
X11-Server. |
|
|
x11-themes |
X11-Themes. |
|
|
x11-toolkits |
X11-Toolkits. |
|
|
x11-wm |
X11-Window-Manager. |
|
|
xfce* |
Ports in Zusammenhang mit Xfce . |
|
|
zope* |
Zope -Unterstützung. |
Da viele der Kategorien sich überlappen, müssen Sie oft festlegen, welches die primäre Kategorie Ihres Ports ist. Hierzu gibt es einige Regeln, welche diese Auswahl bestimmen. Hier ist die Liste der Regeln mit abnehmender Wichtigkeit:
Die erste (primäre) Kategorie muss eine physische (keine virtuelle, siehe oben ) sein. Dies ist notwendig damit Pakete erstellt werden können. Die nachfolgenden Kategorien können 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 aufgeführt werden und nicht umgekehrt. Genauso sollten Sie keinen Port unter net aufführen, wenn er zu irc , mail , news , security oder www passt, da net in diesen Kategorien bereits implizit eingeschlossen ist.
x11 wird nur als sekundäre Kategorie benutzt, wenn die primäre Kategorie eine sprachspezifische ist. Keinesfalls sollten Sie x11 in die Kategorie-Zeile einer X-Applikation setzen.
Emacs modes gehören in die gleiche Kategorie wie die vom jeweiligen mode unterstützte Applikation und nicht in editors . Ein Emacs mode z.B. für das Editieren von Quelltext einer bestimmten Programmiersprache gehört zur Kategorie lang .
Für 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 können!
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 send-pr(1) eingereichten Bericht, damit wir diese Frage vor dem Import diskutieren können. Falls Sie ein Committer sind, schicken Sie bitte eine Nachricht an FreeBSD ports , damit die Frage im Vorhinein erörtert werden kann. Neue Ports werden zu häufig falsch kategorisiert und werden sofort wieder verschoben. Das bläht das Master Source Repository unnötig auf.
Da die Ports-Sammlung über viele Jahre gewachsen ist, wurden viele neue Kategorien hinzugefügt. Neue Kategorien können virtuell (ohne eigenes Unterverzeichnis in der Ports-Sammlung) oder physisch sein. Der nachfolgende Text führt einige Punkte auf, welche bei der Neueinführung einer physischen Kategorie beachtet werden müssen, damit Sie dies bei einem eventuellen Vorschlag Ihrerseits berücksichtigen können.
Unsere bestehende Maxime ist die Vermeidung der Neuanlage von physischen Kategorien, solange nicht eine große Zahl von Ports zugeordnet werden können oder falls ihr nicht Ports zugehören würden, welche eine logisch abgegrenzte Gruppe von limitiertem öffentlichem Interesse zugehören würden (zum Beispiel neue Sprachkategorien) oder vorzugsweise beides.
Die Erklärung dafür ist, dass eine Neuanlage einer physischen Kategorie einen erheblichen Arbeitsaufwand sowohl für die Committer als auch diejenigen Nutzer bedeutet, welche die Änderungen der Ports-Sammlung nachvollziehen. Zusätzlich verursachen Vorschläge für neue Kategorien oftmals Kontroversen (natürlich deswegen, weil es keinen klaren Konsens darüber gibt, welche Kategorie als "zu groß" betrachtet werden muss noch ob sich bestimmte Kategorien zur einfachen Suche eignen (und wie viele Kategorien überhaupt ideal wären) und so weiter).
Hier ist das Prozedere:
Schlagen Sie die neue Kategorie auf FreeBSD ports vor. Sie sollten eine detaillierte Begründung für die neue Kategorie beifügen einschließlich einer Erklärung, warum Sie meinen, die existierenden Kategorien seien nicht ausreichend. Zeigen Sie außerdem eine Liste der zu verschiebenden Ports (falls neue Ports in GNATS auf ihren commit warten, die in diese Kategorie passen würden. Listen Sie diese bitte auch mit auf). Sind Sie der Maintainer oder Einreicher dieser Ports, erwähnen Sie es bitte. Es verleiht Ihrem Vorschlag mehr Gewicht.
Nehmen Sie an der Diskussion teil.
Falls es Unterstützung für Ihren Vorschlag geben sollte, reichen Sie bitte einen PR ein, welcher die Begründung und die Liste der betroffenen Ports enthält, die verschoben werden müssen. Idealerweise sollte der PR Patches für Folgendes enthalten:
Makefile s für die neuen Ports nach dem Repocopy
Makefile für die neue Kategorie
Makefile für die alten Kategorien der betroffenen Ports
Makefile s für Ports, welche von den alten Ports abhängen
Für zusätzliches Ansehen sorgen Sie, wenn Sie die anderen Dateien, die geändert werden müssen, beifügen wie in der Direktive des Committer’s Guide beschrieben.
Da es die Ports-Infrastruktur beeinflusst und nicht nur die Durchführung von Repocopies und möglicherweise sogar Regressionstests auf dem Build Cluster durchgeführt werden müssen, sollte der PR dem Ports Management Team Ports Management Team < portmgr@FreeBSD.org > zugeordnet werden.
Sobald der PR bestätigt wurde muss ein Committer den Rest der Prozedur durchführen, welche im Committers Guide beschrieben ist.
Das Vorschlagen einer neuen virtuellen Kategorie ist ähnlich, aber wesentlich weniger aufwendig, weil keine Ports verschoben werden müssen. In diesem Falle müssen nur die Patches an den PR beigefügt werden, welche die neue Kategorie zur Variable
CATEGORIES
der betroffenen Ports hinzufügen.
Von Zeit zu Zeit schlägt jemand eine komplette Neuorganisation aller Ports, entweder mit einer zweistufigen Struktur oder irgendeiner Art von Schlüsselwörtern, vor. Bis heute wurde keiner dieser Vorschläge umgesetzt, weil sie zwar einfach zu machen sind, aber der Aufwand zur Umsetzung und Reorganisation der kompletten Ports-Sammlung schlichtweg mörderisch wäre. Bitte lesen Sie die Geschichte dieser Vorschläge in den Archiven der Mailinglisten nach, bevor Sie diese Ideen nochmals unterbreiten. Zudem sollten Sie gewappnet sein, dass man Sie auffordert, einen arbeitsfähigen Prototyp vorzulegen.
Der zweite Teil des Makefile beschreibt die Dateien, welche heruntergeladen werden müssen, um den Port zu bauen und wo diese Dateien zu finden sind.
DISTVERSION/DISTNAME
DISTNAME
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, können durch Setzen von
DISTVERSION
automatisch behandelt werden.
PORTVERSION
und
DISTNAME
werden automatisch abgeleitet, können aber natürlich manuell überschrieben werden. Die folgende Tabelle führt einige Beispiele auf:
| DISTVERSION | PORTVERSION |
|---|---|
|
0.7.1d |
0.7.1.d |
|
10Alpha3 |
10.a3 |
|
3Beta7-pre2 |
3.b7.p2 |
|
8:f_17 |
8f.17 |
|
|
MASTER_SITES
Dokumentieren Sie das Verzeichnis der FTP/HTTP-URL, welche auf den originalen Tarball zeigt, in der Variable
MASTER_SITES
. Bitte vergessen Sie niemals den Schrägstrich (
/
) am Ende!
Die
make
-Makros werden versuchen, diese Festlegung für 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 aufzuführen, vorzugsweise auf verschiedenen Kontinenten. Dies ist ein Schutz gegen Probleme bei größeren Ausfällen im Internet. Wir planen sogar Unterstützung einzubauen, die automatisch einen Server in der Nähe zum Herunterladen bestimmt. Die Verfügbarkeit von vielen Webseiten wird dieses Vorhaben beträchtlich erleichtern.
Falls der originale Tarball Teil eines populären Archivs ist, wie SourceForge, GNU oder Perl CPAN, können Sie möglicherweise auf diese Seiten in einer einfachen und kompakten Form mittels
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= make
Oder verwenden Sie ein kondensiertes Format:
MASTER_SITES= GNU/make
Diese Variablen werden in /usr/ports/Mk/bsd.sites.mk definiert. Es werden ständig neue Einträge hinzugefügt, daher stellen Sie bitte unbedingt sicher, dass Sie die neueste Version verwenden, bevor Sie einen Port einschicken.
Für beliebte Seiten existieren sogenannte magic -Makros, die eine bestimmte Verzeichnisstruktur erstellen. Um eines dieser Makros zu verwenden, geben Sie dessen Abkürzung an und Ihr System wird versuchen, das korrekte Unterverzeichnis automatisch zu bestimmen.
MASTER_SITES= SF
Ist das Ergebnis nicht korrekt, können Sie diesen Wert auch überschreiben.
MASTER_SITES= SF/stardict/WyabdcRealPeopleTTS/${PORTVERSION}
| Makro | Erwartetes Unterverzeichnis |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EXTRACT_SUFX
Falls Sie eine Distributionsdatei haben, die ein eigentümliches 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, würden Sie schreiben:
DISTNAME= foo EXTRACT_SUFX= .tgz
Falls 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 müssen niemals beide Variablen
|
DISTFILES
Manchmal haben die zu ladenden Dateien keinerlei Ähnlichkeit mit dem Namen des Ports. Es könnte z.B. source.tar.gz oder ähnlich heißen. In anderen Fällen könnte der Quelltext in mehreren Archiven sein und alle müssen heruntergeladen werden.
Falls dies der Fall ist, setzen Sie
DISTFILES
als eine durch Leerzeichen getrennte Liste aller Dateien, die geladen werden müssen.
DISTFILES= source1.tar.gz source2.tar.gz
Wenn nicht ausdrücklich gesetzt, verwendet
DISTFILES
als Vorgabe
${DISTNAME}${EXTRACT_SUFX}
.
EXTRACT_ONLY
Falls nur einige der
DISTFILES
extrahiert werden müssen (z.B. eine Datei ist der Quelltext und eine andere ist ein unkomprimiertes Dokument), dann listen Sie die zu extrahierenden Dateien in
EXTRACT_ONLY
auf.
DISTFILES= source.tar.gz manual.html EXTRACT_ONLY= source.tar.gz
Falls
keine
der
DISTFILES
unkomprimiert sein sollte, dann setzen Sie
EXTRACT_ONLY
auf einen leeren String.
EXTRACT_ONLY=
PATCHFILES
Falls Ihr Port zusätzliche Patches benötigt, welche per FTP oder HTTP verfügbar sind, dann setzen Sie
PATCHFILES
auf den Namen der Dateien und
PATCH_SITES
auf die URL des Verzeichnisses, das diese Patches enthält (das Format ist das gleiche wie
MASTER_SITES
).
Falls ein Patch wegen einiger zusätzlicher 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 zusätzliches
foozolix-1.0/
vor ihren Dateinamen aufweisen, dann setzen Sie bitte
PATCH_DIST_STRIP=-p1
.
Kümmern 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 können Sie nicht
PATCHFILES
verwenden. In diesem Fall fügen 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 möglicherweise nicht beschreibbar ist.
|
Der Tarball wird zusammen mit dem anderen Quelltext extrahiert werden. Eine ausdrückliche Dekomprimierung eines mit gzip oder compress erzeugten Tarball ist nicht notwendig. Sollten Sie dies dennoch vorgeben, so beachten Sie bitte peinlich genau, dass Sie nichts überschreiben, was bereits im Verzeichnis vorhanden ist. Vergessen Sie auch nicht den kopierten Patch im Target von
|
MASTER_SITES:n
)
(Betrachten Sie es als in irgendeiner Form "fortgeschrittenes Thema". Neulinge sollten möglicherweise diesen Abschnitt beim ersten Lesen überspringen).
Dieser Abschnitt stellt Informationen über die Mechanismen zum Herunterladen von Dateien zur Verfügung 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 verfügt über eine sehr elegante Option innerhalb der Variablen
DISTFILES
und
PATCHFILES
. Sowohl Dateien als auch Patches können mit angehängten
:n
-Bezeichnern versehen werden wobei
n
in beiden Fällen
[0-9]
sein kann und eine Gruppenzugehörigkeit anzeigt. Ein Beispiel hierfür ist:
DISTFILES= alpha:0 beta:1
In OpenBSD wird die Datei
alpha
mit der Variable
MASTER_SITES0
verknüpft anstatt dem in FreeBSD gebräuchlichen
MASTER_SITES
und
beta
mit
MASTER_SITES1
.
Das ist eine sehr interessante Möglichkeit, die endlose Suche nach der richtigen Download-Seite zu verkürzen.
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. Wäre es nicht reine Verschwendung, wenn der Maintainer alle Seiten zuvor überprüfen müsste? Kein guter Start für das wundervolle Wochenende!
Übertragen Sie diesen Umstand auf noch mehr
DISTFILES
und mehr
MASTER_SITES
. Ganz sicher würde unser "distfiles survey master" die Erleichterung sehr zu schätzen wissen, die eine solche Verringerung der Netzwerkbelastung bringen würde.
In den nächsten Abschnitten sehen Sie die Implementierung dieser Idee durch FreeBSD. Dabei wurde das Konzept von OpenBSD ein wenig verbessert.
Dieser Abschnitt informiert Sie, wie Sie schnell ein fein granuliertes Herunterladen von vielen Dateien und Fehlerbereinigungen von verschiedenen Webseiten und Unterverzeichnissen bewerkstelligen. Wir beschreiben hier den Fall der vereinfachten Nutzung von
MASTER_SITES:n
. Das ist für die meisten Szenarien ausreichend. Falls Sie weitere Informationen benötigen, sollten Sie den nächsten Abschnitt lesen.
Einige Programme bestehen aus mehreren Dateien, welche von verschiedenen Webseiten heruntergeladen werden müssen. Zum Beispiel besteht Ghostscript aus dem Kern des Programms und einer großen Zahl von Treiberdateien, die vom Drucker des Benutzers abhängen. Einige dieser Treiberdateien werden mit der Kernapplikation mitgeliefert aber viele müssen von verschiedenen Webseiten heruntergeladen werden.
Um das zu unterstützen, muss jeder Eintrag in
DISTFILES
mit einem Komma und einem "tag name" abgeschlossen werden. Jeder in
MASTER_SITES
aufgeführte 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 müssen. Das
Makefile
des Port würde Zeilen enthalten wie in
Vereinfachtes Beispiel für den Gebrauch von
MASTER_SITES:n
mit einer Datei pro Webseite
.
MASTER_SITES:n
mit einer Datei pro Webseite
MASTER_SITES= ftp://ftp.example1.com/:source1 \ ftp://ftp.example2.com/:source2 DISTFILES= source1.tar.gz:source1 \ source2.tar.gz:source2
Verschiedene Dateien können 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
würde dann aussehen wie
Vereinfachtes Beispiel für den Gebrauch von
MASTER_SITES:n
mit mehr als einer Datei pro Webseite
.
MASTER_SITES:n
mit mehr als einer Datei pro Webseite
MASTER_SITES= ftp://ftp.example1.com/:source1 \ ftp://ftp.example2.com/:source2 DISTFILES= source1.tar.gz:source1 \ source2.tar.gz:source2 \ source3.tar.gz:source2
In Ordnung, das vorherige Beispiel reicht nicht für Ihre Bedürfnisse? In diesem Abschnitt werden wir im Detail erklären, wie der fein granulierte Mechanismus zum Herunterladen (
MASTER_SITES:n
) funktioniert und wie Sie Ihre Ports modifizieren, um ihn zu nutzen.
Elemente können nachstehend bezeichnet werden mit
:n
wobei
n
in diesem Falle
` ist. Das heißt _n_ könnte theoretisch jede alphanumerische Zeichenkette sein, aber wir beschränken sie auf `[a-zA-Z_][0-9a-zA-Z_]
für diesen Moment.
Zudem ist die Zeichenkette case sensitive; d.h.
n
unterscheidet sich von
N
.
Elemente mit angehängtem
:n
gehören zur Gruppe
n
,
:m
gehört zur Gruppe
m
und so weiter.
Elemente ohne Anhängsel sind gruppenlos, d.h. sie gehören alle zu der speziellen Gruppe
DEFAULT
. Falls sie an irgendeinem Element
DEFAULT
hängen, ist dies überflüssig, es sei denn Sie wollen, dass ein Element sowohl zu
DEFAULT
als auch anderen Gruppen gleichzeitig gehört (beachten Sie
5
).
Die folgenden Beispiele sind gleichwertig, aber das erste Beispiel ist vorzuziehen:
MASTER_SITES= alpha MASTER_SITES= alpha:DEFAULT
Gruppen sind nicht ausschliessend, d.h. ein Element kann mehreren Gruppen gleichzeitig angehören und eine Gruppe wiederum kann entweder mehrere Elemente oder überhaupt keine aufweisen. Wiederholte Elemente sind schlicht nur wiederholte Elemente.
Wenn Sie wollen, dass ein Element gleichzeitig zu mehreren Gruppen gehört, dann können Sie diese durch ein Komma (
,
) trennen.
Anstatt jedes Mal ein anderes Anhängsel zu verwenden und Wiederholungen aufzuführen, können Sie mehrere Gruppen auf einmal in einem einzigen Anhängsel bestimmen. Zum Beispiel markiert
:m,n,o
ein Element, welches zu den Gruppen
m
,
n
und
o
gehört.
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_SITE
Alle 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
müssen mit einem Schrägstrich beendet werden (
/
). Falls Elemente zu irgendwelchen Gruppen gehören, muss
:n
direkt nach dem Trenner
/
stehen. Der
MASTER_SITES:n
-Mechanismus verlässt sich auf das Vorhandensein des Trennzeichens
/
, um verwirrende Elemente zu vermeiden in denen
:n
ein zulässiger Bestandteil des Elementes ist und das Auftreten von
:n
die Gruppe
n
anzeigt. Aus Kompatibilitätsgründen (da der
/
-Trenner sowohl in
MASTER_SITE_SUBDIR
als auch
PATCH_SITE_SUBDIR
-Elementen nicht erforderlich ist) wird, falls das auf das Anhängsel folgende nächste Zeichen kein
/
ist, auch
:n
als gültiger Teil des Elementes behandelt anstatt als Gruppenzusatz, selbst wenn ein Element ein angehängtes
:n
aufweist. Beachten Sie sowohl
Ausführliches Beispiel von
MASTER_SITES:n
in
MASTER_SITE_SUBDIR
als auch
Ausführliches Beispiel von
MASTER_SITES:n
mit Komma-Operator, mehreren Dateien, mehreren Webseiten und mehreren Unterverzeichnissen
.
MASTER_SITES:n
in
MASTER_SITE_SUBDIR
MASTER_SITE_SUBDIR= old:n new/:NEW
Verzeichnisse innerhalb der Gruppe
DEFAULT
→ old:n
Verzeichnisse innerhalb der Gruppe
NEW
→ new
MASTER_SITES:n
mit Komma-Operator, mehreren Dateien, mehreren Webseiten und mehreren Unterverzeichnissen
MASTER_SITES= http://site1/%SUBDIR%/ http://site2/:DEFAULT \ http://site3/:group3 http://site4/:group4 \ http://site5/:group5 http://site6/:group6 \ http://site7/:DEFAULT,group6 \ http://site8/%SUBDIR%/:group6,group7 \ http://site9/:group8 DISTFILES= file1 file2:DEFAULT file3:group3 \ file4:group4,group5,group6 file5:grouping \ file6:group7 MASTER_SITE_SUBDIR= directory-trial:1 directory-n/:groupn \ directory-one/:group6,DEFAULT \ directory
Das vorstehende Beispiel führt zu einem fein granulierten Herunterladen. Die Webseiten werden in der exakten Reihenfolge ihrer Nutzung aufgelistet.
file1 wird heruntergeladen von
MASTER_SITE_OVERRIDE
MASTER_SITE_BACKUP
file2 wird genauso heruntergeladen wie file1 , da sie zur gleichen Gruppe gehören
MASTER_SITE_OVERRIDE
MASTER_SITE_BACKUP
file3 wird heruntergeladen von
MASTER_SITE_OVERRIDE
MASTER_SITE_BACKUP
file4 wird heruntergeladen von
MASTER_SITE_OVERRIDE
MASTER_SITE_BACKUP
file5 wird heruntergeladen von
MASTER_SITE_OVERRIDE
MASTER_SITE_BACKUP
file6 wird heruntergeladen von
MASTER_SITE_OVERRIDE
MASTER_SITE_BACKUP
Wie gruppiere ich eine der speziellen Variablen aus
bsd.sites.mk
, d.h.
MASTER_SITE_SOURCEFORGE
?
MASTER_SITES:n
mit
MASTER_SITE_SOURCEFORGE
MASTER_SITES= http://site1/ ${MASTER_SITE_SOURCEFORGE:S/$/:sourceforge,TEST/}
DISTFILES= something.tar.gz:sourceforge
something.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
Vereinfachte Nutzung von
MASTER_SITES:n
mit
PATCH_SITES
.
. sehen können.
MASTER_SITES:n
mit
PATCH_SITES
.
PATCH_SITES= http://site1/ http://site2/:test PATCHFILES= patch1:test
Alle bestehenden Ports bleiben gleich. Der Code für
MASTER_SITES:n
wird nur aktiviert, falls es Elemente mit angehängtem
:n
entsprechend den zuvor erwähnten Syntax-Regeln wie in
7
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
Ausführliches Beispiel von
MASTER_SITES:n
mit Komma-Operator, mehreren Dateien, mehreren Webseiten und mehreren Unterverzeichnissen
.
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
zurück. Beziehungsweise sie führen 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 Überprüfung von
MASTER_SITES
oder
PATCH_SITES
vorzuziehen. Zudem ist nicht garantiert, dass das direkte Überprüfen in zukünftigen Versionen funktionieren wird. Sehen Sie
B
für weitere Informationen zu diesen neuen Port-Targets.
Neue Port-Targets
Es 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. zurückgeben.
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 zurück,als würden sie zur gleichen Gruppe gehören - 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 für
master-sites-all
und
patch-sites-all
.
DIST_SUBDIR
Verhindern 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 enthält, die einen Namen hat, der möglicherweise mit anderen Ports in Konflikt stehen könnte (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 tatsächlich alle für Ihren Port benötigten Dateien in dieses Unterverzeichnis.
Es wird zusätzlich nach dem Unterverzeichnis mit dem gleichen Namen auf der Sicherung der Hauptseite auf
ftp.FreeBSD.org
suchen (das ausdrückliche Setzen von
DISTDIR
in Ihrem
Makefile
wird dies nicht gewährleisten, also nutzen Sie bitte
DIST_SUBDIR
).
|
Dies hat keine Auswirkungen auf die Variable
|
ALWAYS_KEEP_DISTFILES
Falls Ihr Port binäre Distfiles benutzt und eine Lizenz aufweist, die verlangt, dass das der Quelltext in Form binärer Pakete verteilt werden muss, z.B. GPL, dann wird
ALWAYS_KEEP_DISTFILES
den FreeBSD Build Cluster anweisen eine Kopie der Dateien in
DISTFILES
vorzuhalten. Nutzer dieser Ports benötigen generell diese Dateien nicht, daher ist es ein gutes Konzept, nur dann die Distfiles zu
DISTFILES
hinzuzufügen, wenn
PACKAGE_BUILDING
definiert ist.
ALWAYS_KEEP_DISTFILES
.
.if defined(PACKAGE_BUILDING) DISTFILES+= foo.tar.gz ALWAYS_KEEP_DISTFILES= yes .endif
Wenn Sie zusätzliche Dateien zu
DISTFILES
hinzufügen, dann beachten Sie bitte, dass Sie diese auch in
distinfo
aufführen. Zudem werden die zusätzlichen Dateien normalerweise ebenso in
WRKDIR
extrahiert, was für einige Ports zu unbeabsichtigten Seiteneffekten führen mag und spezielle Behandlung erfordert.
MAINTAINER
Fügen Sie hier Ihre E-Mailadresse ein. Bitte. :-)
Beachten Sie bitte, dass nur eine einzelne E-Mailadresse ohne Kommentar in der Variable
MAINTAINER
zulässig ist. Das Format sollte
user@hostname.domain
sein. Bitte fügen Sie keinen beschreibenden Text wie z.B. Ihren wirklichen Namen ein, dies verwirrt lediglich
bsd.port.mk
.
Der Maintainer ist dafür verantwortlich, dass der Port aktuell gehalten wird und er sorgt dafür, dass der Port korrekt arbeitet. Für eine detaillierte Beschreibung der Verantwortlichkeiten eines Maintainers beachten Sie bitte den Abschnitt Die Herausforderung für 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 ausdrückliche Zustimmung des Maintainers erfolgen. Falls der Maintainer nicht binnen 3 Monaten zustimmt, wird er als abwesend ohne Grund betrachtet und kann als Maintainer des fraglichen Ports durch eine andere Person ersetzt werden. Ausgenommen davon ist alles, was durch das Ports Management Team < portmgr@FreeBSD.org > oder das Security Officer Team < security-officer@FreeBSD.org > betreut wird. Es dürfen niemals committs ohne vorherige Zustimmung an solchen Ports vorgenommen werden!
Wir behalten uns das Recht vor, die Einreichungen eines Maintainers ohne ausdrückliche Zustimmung zu ändern, falls wir der Auffassung sind, dass dadurch die Einhaltung von Richtlinien und stilistischen Vorgaben für die Ports-Sammlung besser erfüllt wird. Zudem können größere Änderungen an der Infrastruktur der Ports zu Änderungen an einem bestimmten Port ohne Zustimmung des Maintainers führen. Diese Änderungen beeinflussen niemals die Funktionalität eines Ports.
Das Ports Management Team < portmgr@FreeBSD.org > behält sich das Recht vor, die Maintainerschaft jedem aus irgendeinem Grund zu entziehen oder ausser Kraft zu setzen, und das Security Officer Team Security Officer Team < security-officer@FreeBSD.org > behält sich das Recht vor, jede Maintainerschaft aus Sicherheitsgründen aufzuheben oder ausser Kraft zu setzen.
COMMENT
Dies ist eine einzeilige Beschreibung des Ports. Bitte fügen Sie nicht den Paketnamen (oder die Version der Software) in den Kommentar ein. Der Kommentar soll mit einem Großbuchstaben beginnen und ohne Punkt enden. Hier ist ein Beispiel:
COMMENT= A cat chasing a mouse all over the screen
Die 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 pkg_info(1) diese zur Anzeige einer kurzen, einzeiligen Zusammenfassung des Ports verwendet.
Viele Ports hängen von anderen Ports ab. Dies ist ein sehr praktisches und nettes Feature der meisten Unix-ähnlichen Betriebssysteme, FreeBSD nicht ausgeschlossen. Es erlaubt, dass häufig vorkommende Abhängigkeiten nicht mit jedem Port oder Paket zusammen ausgeliefert werden müssen, da viele Ports diese gemeinsam benutzen. Es gibt sieben Variablen, die benutzt werden können, um sicherzustellen, dass alle benötigten Teile auf dem Rechner des Nutzers sind. Zusätzlich gibt es einige vordefinierte Variablen für Abhängigkeiten in häufigen Fällen und einige, welche das Verhalten der Abhängigkeiten bestimmen.
LIB_DEPENDS
Diese Variable spezifiziert die Shared-Libraries, von denen der Port abhängt. 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 verfügbar, 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 prüfen, 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 hierfür ist
install
).
|
Der
lib
-Teil ist ein regulärer Ausdruck, welcher die Ausgabe von
|
Die Abhängigkeit wird zwei Mal überprüft, einmal innerhalb des
extract
-Target und dann innerhalb des
install
-Target. Zudem wird der Name der Abhängigkeit in das Paket eingefügt, damit
pkg_add(1)
es automatisch installiert, falls es nicht auf dem Rechner des Nutzers ist.
RUN_DEPENDS
Diese Variable legt Binärdateien oder Dateien, von denen der Port abhängt, für die Laufzeit fest. Es ist eine Liste von path:dir:target-Tupeln, wobei
path
der Name der Binärdatei 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
; überprüft. Andernfalls wird angenommen, dass es eine Binärdatei ist und
which -s
wird benutzt, um zu überprüfen, ob das Programm im Pfad vorhanden ist.
Zum Beispiel wird
RUN_DEPENDS= ${LOCALBASE}/etc/innd:${PORTSDIR}/news/inn \
xmlcatmgr:${PORTSDIR}/textproc/xmlcatmgr
überprüfen, 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 überprüft, ob die Binärdatei 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
|
|
Der offizielle Suchpfad
/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin |
Die Abhängigkeit wird innerhalb des
install
-Target überprüft. Zudem wird der Name der Abhängigkeit in das Paket übernommen, damit
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 häufig vor, dass
RUN_DEPENDS
genau dasselbe enthält 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 führen, dass die Liste der Laufzeitabhängigkeiten mit überflüssigen Einträgen belastet wird, die sich nicht in der ursprünglichen Liste
BUILD_DEPENDS
des Ports befanden, da sich
make(1)
bei der Auswertung solcher Zuweisungen träge verhält. Stellen Sie sich ein
Makefile
mit
USE_*
-Variablen vor, die von
ports/Mk/bsd.*.mk
verarbeitet werden, um initiale Bauabhängigkeiten zusammenzutragen. Zum Beispiel fügt
USE_GMAKE=yes
devel/gmake
zu
BUILD_DEPENDS
hinzu. Um zu verhindern, dass solche zusätzlichen Abhängigkeiten
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_DEPENDS
Diese Variable legt Binärdateien oder Dateien fest, die dieser Port zur Erstellung benötigt. Wie
RUN_DEPENDS
ist es eine Liste von path:dir:target-Tupeln. Zum Beispiel wird
BUILD_DEPENDS=
unzip:${PORTSDIR}/archivers/unzip
überprüfen, ob eine Binärdatei
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 Abhängigkeit wird im
|
FETCH_DEPENDS
Diese Variable legt eine Binärdatei oder Datei fest, welche der Port benötigt, um heruntergeladen werden zu können. Wie die vorherigen beiden Variablen ist er eine Liste von path:dir:target-Tupeln. Zum Beispiel wird
FETCH_DEPENDS=
ncftp2:${PORTSDIR}/net/ncftp2
überprüfen, ob eine Binärdatei namens
ncftp2
vorhanden ist, in das Unterverzeichnis
net/ncftp2
Ihrer Ports-Sammlung wechseln, sie erstellen und installieren, falls sie nicht gefunden wird.
Die Abhängigkeit wird innerhalb des
fetch
-Target überprüft. Der
target
-Teil kann weggelassen werden, falls er identisch mit der Variable
DEPENDS_TARGET
ist.
EXTRACT_DEPENDS
Diese Variable spezifiziert eine Binärdatei oder eine Datei, welche dieser Port für die Extraktion benötigt. Wie die vorherigen Variablen ist er eine Liste von path:dir:target-Tupeln. Zum Beispiel wird
EXTRACT_DEPENDS=
unzip:${PORTSDIR}/archivers/unzip
überprüfen, ob eine Binärdatei namens
unzip
vorhanden ist, in das Unterverzeichnis
archivers/unzip
Ihrer Ports-Sammlung wechseln, sie erstellen und installieren, falls sie nicht gefunden wird.
Die Abhängigkeit wird innerhalb des
extract
-Target überprüft. 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
|
PATCH_DEPENDS
Diese Variable legt eine Binärdatei oder eine Datei fest, welche dieser Port zum Patchen benötigt. Wie die vorhergehenden Variablen ist diese eine Liste von 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 Abhängigkeit wird innerhalb des
patch
-Target überprüft. Der
target
-Teil kann entfallen, falls er identisch mit der Variable
DEPENDS_TARGET
ist.
USE_*
Es gibt eine Reihe von Variablen, um gebräuchliche Abhängigkeiten einzukapseln, die viele Ports aufweisen. Obwohl Ihre Verwendung optional ist, können sie helfen die Übersichtlichkeit des
Makefile
eines Ports zu erhöhen. Jede von ihnen ist im Stil von
USE_*
. Der Gebrauch dieser Variablen ist beschränkt 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_*
für diese Zwecke.
|
Es ist
immer
falsch, irgendeine
USE_GCC=3.4 eine Abhängigkeit für GCC34 für jeden Port einschliesslich GCC34 selbst hinzufügen! |
| Variable | Bedeutung |
|---|---|
|
|
Der Tarball dieses Ports wird mit
|
|
|
Der Tarball des Ports wird mit
|
|
|
Der Port benutzt
|
|
|
Der Port erfordert cdrecord entweder von sysutils/cdrtools oder sysutils/cdrtools-cjk , abhängig davon, was der Nutzer vorgibt. |
|
|
Dieser Port benötigt eine bestimmte Version von
|
Variablen zugehörig zu gmake und dem
configure
-Skript werden in
Build-Mechanismen
beschrieben, währenddessen autoconf, automake und libtool in
Benutzung von GNU autotools
beschrieben sind. Perl-spezifische Variablen werden in
Die Benutzung von
perl
behandelt. X11-Variablen sind aufgelistet in
Benutzung von X11
.
Benutzung von GNOME
behandelt GNOME-bezogene Variablen und
Benutzung von KDE
KDE-bezogene Variablen.
Benutzung von Java
dokumentiert Java-Variablen, während
Webanwendungen
Informationen zu Apache, PHP und PEAR-Modulen enthält. Python wird in
Python benutzen
und Ruby in
Ruby benutzen
erörtert.
SDL verwenden
stellt Variablen für SDL-Programme zur Verfügung und
Xfce verwenden
enthält schliesslich Variablen für Xfce.
Eine minimale Version einer Abhängigkeit kann in jeder
*_DEPENDS
-Variable festgelegt werden mit Ausnahme von
LIB_DEPENDS
durch Anwendung folgender Syntax:
p5-Spiffy>=0.26:${PORTSDIR}/devel/p5-Spiffy
Das erste Feld enthält einen abhängigen Paketnamen, welcher einem Eintrag in der Paketdatenbank entsprechen muss und einen Vergleich mit einer Paketversion. Die Abhängigkeit wird erfüllt, wenn p5-Spiffy-0.26 oder eine neuere Version auf dem System installiert ist.
Wie vorstehend beschrieben ist das Vorgabe-Target
DEPENDS_TARGET
, wenn eine Abhängigkeit benötigt wird. Die Vorgabe hierfür ist
install
. Dies ist eine Nutzer-Variable; sie wird niemals im
Makefile
eines Ports definiert. Falls Ihr Port einen besonderen Weg benötigt, um mit einer Abhängigkeit umzugehen, dann benutzen Sie bitte den
:target
-Teil der
*_DEPENDS
-Variablen, anstatt
DEPENDS_TARGET
zu ändern.
Falls Sie
make clean
schreiben, werden dessen Abhängigkeiten auch gesäubert. 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 Abhängigkeiten hat, das sehr viel Zeit für einen rebuild benötigt wie KDE, GNOME oder Mozilla.
Um von einem anderen Port bedingungslos abhängig 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 benötigen. Sie können 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.
|
Führen Sie niemals irgendwelche zirkulären Abhängigkeiten in der Ports-Sammlung ein! |
Die Struktur für die Erstellung von Ports dulde keinerlei zirkuläre Abhängigkeiten. Falls Sie dennoch eine verwenden, wird es irgendjemanden irgendwo auf der Welt geben, dessen FreeBSD-Installation nahezu sofort zusammenbricht und vielen anderen wird es sehr schnell genauso ergehen. So etwas kann extrem schwer festzustellen sein. Falls Sie Zweifel haben vor einer Änderung, dann vergewissern Sie sich, dass Sie folgendes getan haben:
cd /usr/ports; make index
. Dieser Prozess kann auf alten Maschinen sehr langsam sein, aber Sie ersparen sich und einer Vielzahl von Menschen möglicherweise eine Menge Ärger.
MASTERDIR
Falls Ihr Port wegen einer Variable, die verschiedene Werte annimmt (z.B. Auflösung oder Papiergröße), leicht unterschiedliche Versione von Paketen erzeugen muss, dann legen Sie bitte ein Unterverzeichnis pro Paket an, um es für den Nutzer einfacher begreiflich zu machen, was zu machen ist. Aber versuchen Sie dabei so viele Dateien wie möglich zwischen diesen Ports gemeinsam zu nutzen. Normalerweise benötigen Sie nur ein sehr kurzes
Makefile
in allen ausser einem Unterverzeichnis, wenn Sie Variablen intelligent nutzen. In diesem einzigen
Makefile
können Sie
MASTERDIR
verwenden, um anzugeben, wo der Rest der Dateien liegt. Benutzen Sie bitte auch eine Variable für
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}
.endif
japanese/xdvi300
verfügt ebenfalls über alle Patches, Paket-Dateien usw. Wenn Sie
make
eintippen, wird der Port die Standardvorgabe für die Auflösung nehmen (300) und den Port ganz normal erstellen.
Genauso wie für alle anderen Auflösungen ist dies das vollständige xdvi118/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 können. Die
RESOLUTION=118
-Zeile wird die
RESOLUTION=300
-Zeile in
xdvi300/Makefile
überschreiben und der Port wird mit einer Auflösung von 118 erstellt.
Die Variablen
MAN[1-9LN]
werden automatisch jede Manualpage zur
pkg-plist
hinzufügen (dies bedeutet, dass Sie Manualpages
nicht
in der
pkg-plist
auflisten dürfen, lesen Sie bitte
Erstellung der PLIST
für weitere Details). Sie veranlassen zudem den Installationsabschnitt dazu, die Manualpages zu Komprimieren oder zu Dekomprimieren abhängig vom gesetzten Wert der Variable
NO_MANCOMPRESS
in
/etc/make.conf
.
Falls Ihr Port versucht verschiedene Namen für Manualpages unter Zuhilfenahme von Symlinks oder Hardlinks zu installieren, müssen Sie die Variable
MLINKS
nutzen, um diese zu identifizieren. Der von Ihrem Port installierte Link wird von
bsd.port.mk
gelöscht und wieder eingefügt, um sicherzustellen, dass er auf die korrekte Datei zeigt. Jede Manualpage, welche in
MLINKS
aufgeführt ist, darf nicht in der
pkg-plist
aufgenommen werden.
Falls die Manualpages während der Installation komprimiert werden sollen, müssen 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 auszuführen 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 müssen es nicht explizit angeben, außer die Standardvorgabe ist für Ihren Port nicht passend.
Wenn Ihr Port den man tree irgendwo anders als in der Variable
PREFIX
verankert, können 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 können Sie mittels der Variable
MAN_sect_PREFIX
(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}/shared/foobar
MANCOMPRESSED= yes
Dies zeigt an, dass sechs Dateien von diesem Port installiert werden;
${MANPREFIX}/man/man1/foo.1.gz
${MANPREFIX}/man/ja/man1/foo.1.gz
${PREFIX}/shared/foobar/man/man3/bar.3.gz
${PREFIX}/shared/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 zusätzlich von Ihrem Port installiert werden, oder auch nicht. Unabhängig davon wird ein Symlink erstellt, welcher die Manualpages foo(1) und alt-name(8) einbindet.
Falls nur manche Manualpages übersetzt sind, können Sie einige dynamisch vom
MANLANG
-Inhalt erzeugte Variablen nutzen:
MANLANG= "" de ja MAN1= foo.1 MAN1_EN= bar.1 MAN3_DE= baz.3
Dies führt 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.gz
Falls Ihr Paket GNU-Info-Dateien installiert, sollten diese in der
INFO
-Variablen augelistet sein (ohne das angehängte
.info
) mit einem Eintrag für jedes Dokument. Von diesen Dateien wird angenommen, dass sie nach
PREFIX/INFO_PATH
installiert werden. Sie können
INFO_PATH
ändern, falls Ihr Paket einen anderen Ort vorsieht. Jedoch wird dies nicht empfohlen. Die Einträge 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 vorläufigen pkg-plist hinzugefügt.
Einige größere Applikationen können mit einer Reihe von Konfigurationen, die zusätzliche Funktionalitäten hinzufügen, erstellt werden, falls eine oder mehrere Bibliotheken oder Applikationen verfügbar sind. Dazu gehören die Auswahl von natürlichen Sprachen, GUI versus Kommandozeilen-Versionen oder die Auswahl aus mehreren Datenbank-Programmen. Da nicht alle Nutzer diese Bibliotheken oder Applikationen wollen, stellt das Ports-System hooks (Haken) zur Verfügung, damit der Autor des Ports bestimmen kann, welche Konfiguration erstellt werden soll.
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
|
|
Falls nicht anderweitig festgelegt, werden diese Variablen nur dahingehend überprüft, ob sie gesetzt sind oder nicht - nicht darauf, ob sie auf bestimmte Werte wie
|
| Variable | Bedeutung |
|---|---|
|
|
Falls gesetzt, bedeutet sie, dass eine Internationalisierung nicht benötigt wird, was Kompilierzeit sparen kann. Als Vorgabe wird Internationalisierung gebraucht. |
|
|
Nutze die Version von OpenSSL aus dem Basissystem. |
|
|
Installiert die Version von OpenSSL aus security/openssl , auch wenn das Basissystem auf aktuellem Stand ist. |
|
|
Falls der Port mit oder ohne Unterstützung für X erstellt werden kann, dann sollte normalerweise mit X-Unterstützung erstellt werden. Falls die Variable gesetzt ist, soll die Version ohne X-Unterstützung erstellt werden. |
Um die Anzahl der Knobs niedrig zu halten und zum Vorteil des Anwenders, wird empfohlen, dass Porter ähnliche Namen für Knobs verwenden. Eine Liste der beliebtesten Knobs kann in der KNOBS-Datei eingesehen werden.
Knob-Namen sollten wiederspiegeln, was der Knob bedeutet und was er bewirkt. Wenn ein Port einen lib-Präfix im
PORTNAME
hat, dann soll das lib-Präfix im Knob-Namen entfallen.
OPTIONS
Die
OPTIONS
-Variable gibt dem Nutzer, der diesen Port installiert, einen Dialog mit auswählbaren Optionen und speichert diese in
/var/db/ports/portname/options
. Bei der nächsten Neuerstellung des Ports werden diese Einstellungen wieder verwandt. Sie werden sich niemals mehr an all die zwanzig
WITH_*
und
WITHOUT_*
-Optionen erinnern müssen, die Sie benutzt haben, um diesen Port zu erstellen!
Wenn der Anwender
make config
benutzt (oder ein
make build
das erste Mal laufen lässt) wird das Framework auf
/var/db/ports/portname/options
die Einstellungen prüfen. Falls die Datei nicht existiert, werden die Werte von
OPTIONS
genutzt, um eine Dialogbox zu erzeugen, in welcher die Optionen an- oder abgeschaltet werden können. Dann wird die
options
-Datei gespeichert und die ausgewählten Variablen werden bei der Erstellung des Ports benutzt.
Falls eine neue Version des Ports
OPTIONS
hinzufügt, 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 Löschen.
Die Syntax für 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 müssen vor der Einbindung von
bsd.port.options.mk
erscheinen. Die
WITH_*
und
WITHOUT_*
-Variablen können 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 Einführung 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.
OPTIONS
OPTIONS= FOO "Enable option foo" On \
BAR "Support feature bar" Off
.include <bsd.port.options.mk>
.if defined(WITHOUT_FOO)
CONFIGURE_ARGS+= --without-foo
.else
CONFIGURE_ARGS+= --with-foo
.endif
.if defined(WITH_BAR)
RUN_DEPENDS+= bar:${PORTSDIR}/bar/bar
.endif
.include <bsd.port.mk>
OPTIONS
OPTIONS= FOO "Enable option foo" On .include <bsd.port.pre.mk> .if defined(WITHOUT_FOO) CONFIGURE_ARGS+= --without-foo .else CONFIGURE_ARGS+= --with-foo .endif .include <bsd.port.post.mk>
Wenn Sie ein GNU-Konfigurationsskript benutzen, sollten Sie ein Auge darauf werfen, welche Funktionen durch die automatische Erkennung aktiviert werden. Schalten Sie Funktionen, die Sie nicht möchten, ausdrücklich durch Verwendung von
--without-xxx
oder
--disable-xxx
in der Variable
CONFIGURE_ARGS
einzeln ab.
.if defined(WITH_FOO)
LIB_DEPENDS+= foo.0:${PORTSDIR}/devel/foo
CONFIGURE_ARGS+= --enable-foo
.endif
Stellen Sie sich vor im obigen Beispiel ist eine Bibliothek libfoo auf dem System installiert. Der Nutzer will nicht, dass diese Applikation libfoo benutzt, also hat er die Option auf "off" im
make config
-Dialog umgestellt. Aber das Konfigurationsskript der Applikation hat erkannt, dass die Bibliothek auf dem System vorhanden ist und fügt ihre Funktionen in die Binärdatei ein. Falls der Nutzer sich nun entschliesst libfoo von seinem System zu entfernen, dann wird das Ports-System nicht protestieren (es wurde keine Abhängigkeit von libfoo eingetragen), aber die Applikation bricht ab.
.if defined(WITH_FOO)
LIB_DEPENDS+= foo.0:${PORTSDIR}/devel/foo
CONFIGURE_ARGS+= --enable-foo
.else
CONFIGURE_ARGS+= --disable-foo
.endif
Im zweiten Beispiel wird die Bibliothek libfoo explizit abgeschaltet. Das Konfigurationsskript aktiviert die entsprechenden Funktionen nicht in der Applikation trotz der Anwesenheit der Bibliothek auf dem System.
Jeder 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.0
festgelegt 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 können, falls dies nicht der Fall sein sollte.
WRKSRC
Diese Variable listet den Namen des Verzeichnisses, welches erstellt wird, wenn die Distfiles der Applikation extrahiert werden. Wenn unser vorheriges Beispiel in einem Verzeichnis namens foo (und nicht foo-1.0 ) extrahiert wurde, würden Sie schreiben:
WRKSRC= ${WRKDIR}/foo
oder möglicherweise
WRKSRC= ${WRKDIR}/${PORTNAME}
Es gibt drei verschiedene Variablen, um einen Konflikt zwischen Paketen und Ports zu dokumentieren:
CONFLICTS
,
CONFLICTS_INSTALL
sowie
CONFLICTS_BUILD
.
|
|
Beim Entfernen eines von mehreren in Konflikt stehenden Ports ist es ratsam, die
CONFLICTS
-Einträge in den anderen Ports für einige Monate beizubehalten, um Nutzer zu unterstützen, die ihre Ports nur sporadisch aktualisieren.
CONFLICTS_INSTALL
Falls Ihr Paket nicht mit anderen Paketen koexistieren kann (wegen Dateikonflikten, Laufzeit-Inkompatibilitäten usw.), führen Sie bitte die anderen Paketnamen in der Variable
CONFLICTS_INSTALL
auf. Sie können hier Shell-Globs wie
*
und
?
verwenden. Paketnamen sollten in der gleichen Weise aufgezählt 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 länger funktionieren wird.
CONFLICTS_BUILD
Wenn Ihr Port nicht gebaut werden kann, wenn ein bestimmter Port bereits installiert ist, geben Sie diesen in der Variable
CONFLICTS_BUILD
an. Sie können hier Shell-Globs wie
*
und
?
verwenden. Paketnamen sollten in der gleichen Weise aufgezählt werden, wie sie in
/var/db/pkg
auftauchen. Die CONFLICTS_BUILD-Prüfung erfolgt vor dem Bau des Ports. Baukonflikte werden im erzeugten Paket nicht verzeichnet.
CONFLICTS
Wenn Ihr Port nicht gebaut werden kann, wenn ein bestimmter Port bereits installiert ist und das aus dem Port erzeugte Paket nicht mit dem anderen Paket koexistieren kann, geben Sie das andere Paket in der Variable
CONFLICTS
an. Sie können hier Shell-Globs wie
*
und
?
verwenden. Paketnamen sollten in der gleichen Weise aufgezählt 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 länger funktionieren wird. Die CONFLICTS-Prüfung erfolgt vor dem Bau des Ports und vor der Installation des gebauten Ports.
Nutzen Sie die Makros in
bsd.port.mk
, um korrekte Modi und Eigentümer von Dateien in Ihren
*-install
-Targets sicherzustellen.
INSTALL_PROGRAM
ist ein Befehl, um binäre Binärdateien zu installieren.
INSTALL_SCRIPT
ist ein Befehl, um ausführbare Skripte zu installieren.
INSTALL_LIB
ist ein Befehl zur Installation Shared-Libraries.
INSTALL_KLD
ist ein Befehl, mit dem Kernelmodule installiert werden können. 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 grundsätzlich alle
install
-Befehle mit ihren passenden Flags.
Zerlegen Sie keine Binärdateien manuell, wenn Sie es nicht müssen. Alle Binaries sollten gestripped werden; allerdings vermag das
INSTALL_PROGRAM
-Makro gleichzeitig eine Binärdatei zu installieren und zu strippen (beachten Sie den nächsten Abschnitt). Das Makro
INSTALL_LIB
erledigt das gleiche für Shared-Libraries.
Wenn Sie eine Datei strippen müssen, 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/xdl
Nutzen Sie
file(1)
für die installierte Applikation, um zu überprüfen, ob eine Binärdatei gestripped ist oder nicht. Wenn es nicht meldet
not stripped
, dann ist es bereits gestripped. Zudem wird
strip(1)
nicht ein bereits gestripptes Programm nochmals versuchen zu strippen, sondern wird stattdessen einfach sauber beenden.
Manchmal muss man eine große Zahl von Dateien unter Erhalt ihrer hierarchischen Struktur installieren, d.h. Kopieraktionen über einen ganzen Verzeichnisbaum von
WRKSRC
zu einem Zielverzeichnis unter
PREFIX
.
Für 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 ausführbar markieren und damit passend für die Installation in
PREFIX/bin
vorbereiten. Das zweite Makro,
COPYTREE_SHARE
, setzt keine Ausführungsberechtigungen auf Dateien und ist daher geeignet für 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.
Zusätzliche
find
-Argumente können 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 hinzufügen, Sie müssen sie immer noch selbst auflisten.
Falls Ihre Software zusätzlich zu den üblichen Manualpages und Info-Seiten weitere Dokumentation hat und Sie diese für nützlich halten, dann installieren Sie sie unter
PREFIX/shared/doc
. Dies kann wie vorstehend im Target des
post-install
geschehen.
Legen Sie ein neues Verzeichnis für Ihren Port an. Das Verzeichnis sollte wiederspiegeln, was der Port ist. Das bedeutet normalerweise
PORTNAME
. Wie auch immer, wenn Sie meinen, der Nutzer möchte verschiedene Versionen des Ports zur gleichen Zeit installiert haben, dann können Sie die gesamte Variable
PKGNAME
nutzen.
Machen Sie die Installation von der Variablen
NOPORTDOCS
abhängig, damit die Nutzer sie in
/etc/make.conf
abschalten können:
post-install:
.if !defined(NOPORTDOCS)
${MKDIR} ${DOCSDIR}
${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${DOCSDIR}
.endif
Hier einige praktische Variablen und wie sie standardmässig bei Verwendung im Makefile expandiert werden:
DATADIR
wird expandiert zu
PREFIX/shared/PORTNAME
.
DATADIR_REL
wird expandiert zu
share/PORTNAME
.
DOCSDIR
wird expandiert zu
PREFIX/shared/doc/PORTNAME
.
DOCSDIR_REL
wird expandiert zu
share/doc/PORTNAME
.
EXAMPLESDIR
wird expandiert zu
PREFIX/shared/examples/PORTNAME
.
EXAMPLESDIR_REL
wird expandiert zu
share/examples/PORTNAME
.
|
|
Die Variablen werden nach
PLIST_SUB
exportiert. Ihre Werte erscheinen dort als Pfadnamen relativ zu
PREFIX
, falls möglich. Das bedeutet, dass
share/doc/PORTNAME
standardmässig 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%%
-Präfix 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 für eine Liste von Dateien und Shell-Globs, um diese zur endgültigen Packliste hinzuzufügen. 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 für seine Dokumentation, dann müssen Sie die Variable
DOCSDIR
entsprechend setzen. Wenn ein Verzeichnis in
PORTDOCS
aufgeführt ist, oder von einem Shell-Glob dieser Variable abgebildet wird, dann wird der komplette Verzeichnisbaum inklusive Dateien und Verzeichnissen in der endgültigen Packliste aufgenommen. Wenn die Variable
NOPORTDOCS
gesetzt ist, dann werden die Dateien und Verzeichnisse, die in
PORTDOCS
aufgelistet sind, nicht installiert und werden auch nicht zur Packliste des Ports hinzugefügt. Wie oben gezeigt bleibt es dem Port selbst überlassen, die Dokumentation in
PORTDOCS
zu installieren. Ein typisches Beispiel für den Gebrauch von
PORTDOCS
sieht wie folgt aus:
PORTDOCS= README.* ChangeLog docs/*
|
Die Äquivalente zu
Sie können auch pkg-message benutzen, um Meldungen während der Installation anzuzeigen. Lesen Sie diesen Abschnitt über den Gebrauch von pkg-message für weitere Details. Die pkg-message -Datei muss nicht zur pkg-plist hinzugefügt werden. |
Lassen 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 natürlich 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 Binärdateien),
sbin
(Binärdateien für Superuser/Manager),
info
(Dokumentation für Info-Browser) oder
share
(Architektur-unabhängige Dateien). Lesen Sie hierzu
hier(7)
; weitestgehend greifen die Regeln für
/usr
auch für
/usr/local
. Die Ausnahme sind Ports, welche mit "news" aus dem USENET arbeiten. In diesem Falle sollte
PREFIX/news
als Zielort für die Dateien benutzt werden.
Last modified on : 18. Februar 2025 by Fernando Apesteguía