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/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} .endif
Hier 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>.