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.
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
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
ldconfig -r
ausgewertet. Werte wie
intl.[5-7]
und intl
sind zulässig. 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 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.
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
ü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 innd
eine
Binärdatei. Falls sich eine Binärdatei an
einem ungewöhnlichen Platz befindet, der nicht
im Suchpfad ist, dann sollten Sie die volle Pfadangabe
verwenden.
Der offizielle Suchpfad PATH
,
welcher im Ports Cluster benutzt wird, ist
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:
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:
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
ü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 extract
-Target
überprüft.
Der target
-Teil kann
weggelassen werden, falls er identisch mit der Variable
DEPENDS_TARGET
ist.
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
ü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.
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
ü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
gzip
an) und nicht mit
USE_ZIP
oder
USE_BZIP2
wie in Abschnitt 5.7.7, „USE_
“ beschrieben zum Laufen gebracht
werden kann.*
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
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.
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_
-Variable
in der *
/etc/make.conf
zu setzen.
Zum Beispiel würde das Setzen von
eine Abhängigkeit für GCC34 für jeden Port einschliesslich GCC34 selbst hinzufügen!
USE_*
-Varibalen
Variable | Bedeutung |
---|---|
USE_BZIP2 | Der Tarball dieses Ports wird mit
bzip2 komprimiert. |
USE_ZIP | Der Tarball des Ports wird mit
zip komprimiert. |
USE_BISON | Der Port benutzt bison
für die Erstellung. |
USE_CDRTOOLS | Der Port erfordert
cdrecord entweder von
sysutils/cdrtools
oder sysutils/cdrtools-cjk ,
abhängig davon, was der Nutzer vorgibt.
|
USE_GCC | Dieser Port benötigt 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 erfüllt, andernfalls wird
eine geeignete Version des gcc
aus den Ports kompiliert und die Variablen
CC und CXX
werden angepasst. |
Variablen zugehörig zu
gmake und dem
configure
-Skript werden in
Abschnitt 6.3, „Build-Mechanismen“ beschrieben, währenddessen
autoconf,
automake und
libtool in
Abschnitt 6.4, „Benutzung von GNU autotools“ beschrieben sind.
Perl-spezifische Variablen
werden in Abschnitt 6.6, „Die Benutzung von perl
“ behandelt.
X11-Variablen sind aufgelistet in
Abschnitt 6.7, „Benutzung von X11“. Abschnitt 6.8, „Benutzung von GNOME“
behandelt GNOME-bezogene Variablen und Abschnitt 6.10, „Benutzung von KDE“ KDE-bezogene Variablen.
Abschnitt 6.11, „Benutzung von Java“ dokumentiert Java-Variablen,
während Abschnitt 6.12, „Webanwendungen, Apache und PHP“Informationen zu
Apache,
PHP und PEAR-Modulen
enthält.
Python wird in
Abschnitt 6.13, „Python benutzen“ und
Ruby in
Abschnitt 6.16, „Ruby benutzen“ erörtert.
Abschnitt 6.17, „SDL verwenden“ stellt Variablen für
SDL-Programme zur Verfügung
und Abschnitt 6.20, „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:
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
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.
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.