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/xdlNutzen 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/share/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}
.endifHier einige praktische Variablen und wie sie
standardmässig bei Verwendung im
Makefile expandiert werden:
DATADIR wird expandiert zu
PREFIX/share/PORTNAME.
DATADIR_REL wird expandiert zu
share/PORTNAME.
DOCSDIR wird expandiert zu
PREFIX/share/doc/PORTNAME.
DOCSDIR_REL wird expandiert zu
share/doc/PORTNAME.
EXAMPLESDIR wird expandiert zu
PREFIX/share/examples/PORTNAME.
EXAMPLESDIR_REL wird expandiert zu
share/examples/PORTNAME.
NOPORTDOCS behandelt nur
zusätzliche Dokumentation, die in
DOCSDIR installiert ist.
Für normale Manualpages und Info-Seiten
wird die Variable benutzt.
Dinge, welche in DATADIR
und EXAMPLESDIR installiert werden,
legen die Variablen NOPORTDATA und
NOPORTEXAMPLES fest.
Die Variablen werden nach PLIST_SUB
exportiert. Ihre Werte erscheinen dort als Pfadnamen relativ
zu PREFIX,
falls 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 PORTDOCS
für unter DATADIR und
EXAMPLESDIR installierte Dateien sind
PORTDATA beziehungsweise
PORTEXAMPLES.
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.
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>.