Paket erstellen - 6. Referenz
6.1 Der Build-Prozess
Für das Verständnis einiger Felder, muss man einige Details über den
Build-Prozess von Fink wissen: Der Build-Prozess besteht aus fünf Phasen:
Auspacken, patchen, compilieren, installieren und erstellen (build). Die
Pfade des nachfolgenden Beispiel sind für eine Installation in
/opt/sw
und für das Paket gimp-1.2.1-1.
In der Auspack-Phase wird das Verzeichnis
/opt/sw/src/fink.build/gimp-1.2.1-1
erzeugt und der
Quell-Tarball oder mehrere darin ausgepackt. Das erzeugt meistens ein
Verzeichnis gimp-1.2.1, das die Quellen enthält. Alle folgenden Schritte
erfolgen in diesem Verzeichnis, also in
/opt/sw/src/fink.build/gimp-1.2.1-1/gimp-1.2.1
. Details
dieser Phase können über die Felder SourceDirectory, NoSourceDirectory und
SourceNExtractDir kontrolliert werden.
In der Patch-Phase werden die Quelldateien gepacht, so dass das Paket auf Darwin/Mac OS X erstellt werden kann. Die Aktionen werden über die Felder UpdateConfigGuess, UpdateLibtool, Patch und PatchScript genau in dieser Reihenfolge ausgeführt.
In der Compile-Phase werden die Quelldateien konfiguriert und
compiliert. Normalerweise bedeutet dies, dass das Skript configure
mit einigen Parametern und dann das Kommando make
ausgeführt
werden. Details dazu stehen in der Beschreibung des Felds CompileScript.
Sind Tests für die Erstellung aktiviert (ein neues Feature in Fink 0.25, derzeit
wird es im Betreuer-Modus aktiviert), wird das Test-Skript direkt nach dem
Compile-Skript ausgeführt.
In der Installationsphase wird das Paket in einem temporären
Verzeichnis, /opt/sw/src/fink.build/root-gimp-1.2.1-1
(= %d),
installiert. (Beachten sie den Teil "root-" im Namen.) Alle Dateien, die
normalerweise in /opt/sw
installiert würden, werden stattdessen
in /opt/sw/src/fink.build/root-gimp-1.2.1-1/opt/sw
(= %i = %d%p)
installiert. Weitere Details stehen in der Beschreibung des Felds InstallScript.
(In Fink 0.9.9 eingeführt.
Man kann mit einer einzigen Paketbeschreibung mehrere Pakete erzeugen, indem man
das Feld SplitOff
benutzt. Gegen Ende der Installationsphase wird
für jedes Paket ein separates Installationsverzeichnis erzeugt und die Dateien
dann in das jeweilige Verzeichnis verschoben.)
In der Erstellungsphase wird eine binäre Datei (.deb) aus dem
temporären Installationsverzeichnis erzeugt. Diese Phase kann nicht direkt
beeinflusst werden, aber diverse Informationen aus der Paketbeschreibung werden
verwendet um eine Datei control
für dpkg zu erstellen.
6.2 Felder
Die Felder wurden in mehrere Kategorien eingeteilt. Es kann auch sein, dass
das eine oder andere Feld nicht beschrieben ist. :-)
Start Daten:
Field | Value |
---|---|
Package |
Der Paketname. Er kann Kleinbuchstaben, Zahlen und die Sonderzeichen '.', '+' und '-' enthalten, aber keine Unterstriche ('_') oder Grossbuchstaben. Ein Pflichtfeld. Eine Prozenterweiterung wird in diesem Feld nur für %N, %{Ni}, %type_raw[], und %type_pkg[] vorgenommen.
Gemäß den Richtlinien für Finkpakete, muss ein Paket immer mit den gleichen
Optionen übersetzt werden. Bei verschiedenen Varianten eines Pakets (siehe die
Dokumentation zum Feld |
Version |
Die upstream-Versionsnummer. Es gelten die gleichen Einschränkungen wie für das Feld Package Ein Pflichtfeld.
Beachten sie, dass einige Programm seltsame Schemen für ihre Versionsnummern
verwenden, die die Sortierung durcheinander bringen oder Zeichen enthalten, die
nicht erlaubt sind. In diesen Fällen muss sie den upstream-Wert so umwandeln,
dass er nur erlaubte Zeichen enthält und eine korrekte Sortierung ermöglicht.
Wenn sie sich über die Sortierung von Zeichenketten nicht sicher sind, können
sie das Kommando dpkg --compare-versions 1.2.1 lt 1.3 && echo "true"
wird "true" ausgegeben, weil die Zeichenkette "1.2.1" vor
"1.3" kommt. Mehr Details gibt es auf der man-Page von
|
Revision |
Die Revision des Pakets. Erhöhen sie diese Zahl, wenn sie eine neue Paketbeschreibung für dieselbe upstream-Version erstellen. Revisionsnummern beginnen mit 1. Ein Pflichtfeld.
Finks Richtlinien verlangen, dass die Revisionsnummer jedes Mal erhöht
werden muss, wenn Änderungen in der Datei |
Architecture |
Dies ist Komma-separierte Liste der Architekturen, für die das Paket (und jedes
SplitOff-Paket in der Beschreibung) vorgesehen ist.
Die gültigen Architekturen sind ab Fink-0.29.5
Ein häufiger Grund für dieses Feld ist, dass ein Paket einen Compiler vor
gcc-4.0 benötigt (oder auch Pakete, die von solchen Paketen abhängen) und für
die Architektur
Diese Feld unterstützt auch die Standardsyntax für Bedingungen für jeden Wert in
der Werteliste. Ebenso können Prozenterweiterungen verwendet werden (Beim Feld
Package: foo-pm%type_pkg[perl] Type: perl (5.8.8 5.10.0) Architecture: (%type_pkg[perl] = 5100) x86_64
ist die Variante foo-pm5100 für Das Beispiel oben zeigt eine recht verbreitete Verwendung des Felds: Da einige Module auf 10.6 nicht mit dem System-Perl 5.10.0 als 32-bit (i386) erstellt werden können, schränkt dieses Feld die Perl-Pakete mit mehreren Typen auf bestimmte Systeme ein. |
Distribution |
Dies ist Komma-separierte Liste der Distributionen für die das Paket (und jedes
SplitOff-Paket in der Beschreibung) vorgesehen ist.
Derzeit sind die gültigen Distributionen
Seit den Fink-Distributionen für
Diese Feld unterstützt auch die Standardsyntax für Bedingungen für jeden Wert in
der Werteliste. Ebenso können Prozenterweiterungen verwendet werden (Beim Feld
Package: foo-pm%type_pkg[perl] Type: perl (5.12.3 5.12.4) Distribution: (%type_pkg[perl] = 5123) 10.7, (%type_pkg[perl] = 5123) 10.8
ist die Variante foo-pm5123 für die Distributionen Da die Python-Version 2.5 für die Distributionen 10.7+ nicht zur Verfügung steht und die Perl-Versionen von Distrivution zu Distribution variieren, wird diese Feld in diesen Paketen häufig vor. Als Referenz beschreiben wir hier die Verfügbarkeit verschiedener Perl-Versionen für die Distributionen 10.3 bis 13.0 (Fett-gedruckte Systeme zeigen die Version von Sytem-Perl an): perl 5.6.0: 10.3 perl 5.8.0: 10.3 perl 5.8.1: 10.3, 10.4 perl 5.8.4: 10.3, 10.4 perl 5.8.6: 10.3, 10.4, 10.5 perl 5.8.8: 10.4, 10.5, 10.6 perl 5.10.0: 10.5, 10.6 perl 5.12.3: 10.7, 10.8, 10.9 perl 5.12.4: 10.7, 10.8, 10.9 perl 5.16.2: 10.7, 10.8, 10.9, 10.10, 10.11, 10.12, 10.13 perl 5.18.2: 10.7, 10.8, 10.9, 10.10, 10.11, 10.12, 10.13, 10.14, 10.14.5, 10.15, 11.0, 11.3, 12.0, 13.0, 14.0, 15.0 perl 5.18.4: 10.9, 10.10, 10.11, 10.12, 10.13, 10.14, 10.14.5, 10.15, 11.0, 11.3, 12.0, 13.0, 14.0, 15.0 perl 5.28.2: 10.9, 10.10, 10.11, 10.12, 10.13, 10.14, 10.14.5, 10.15, 11.0, 11.3, 12.0, 13.0, 14.0, 15.0 perl 5.30.2: 10.9, 10.10, 10.11, 10.12, 10.13, 10.14, 10.14.5, 10.15, 11.0, 11.3, 12.0, 13.0, 14.0, 15.0 perl 5.30.3: 10.9, 10.10, 10.11, 10.12, 10.13, 10.14, 10.14.5, 10.15, 11.0, 11.3, 12.0, 13.0, 14.0, 15.0 perl 5.34.1: 10.9, 10.10, 10.11, 10.12, 10.13, 10.14, 10.14.5, 10.15, 11.0, 11.3, 12.0, 13.0, 14.0, 15.0 Eine Möglichkeit, alle unterstützten Varianten in einer einzigen finkinfo-Datei einzuschließen, ist diese: Package: foo-pm%type_pkg[perl] Type: perl (5.8.8 5.10.0 5.12.3 5.12.4 5.16.2) Distribution: << (%type_pkg[perl] = 588) 10.6, (%type_pkg[perl] = 5100) 10.6, (%type_pkg[perl] = 5123) 10.7, (%type_pkg[perl] = 5123) 10.8, (%type_pkg[perl] = 5123) 10.9, (%type_pkg[perl] = 5124) 10.7, (%type_pkg[perl] = 5124) 10.8, (%type_pkg[perl] = 5124) 10.9, (%type_pkg[perl] = 5162) 10.7, (%type_pkg[perl] = 5162) 10.8, (%type_pkg[perl] = 5162) 10.9 << Beachten sie, dass wir alte Distributionen, wie 10.2 oder 10.4-transitional, nicht einschließen, denn die Finkversionen für diese Distributionen unterstützen dieses Feld nicht. |
Epoch |
Eingeführt in Fink 0.12.0. Diese optionale Feld kann dazu benutzt werden, die Epoche eines Pakets zu beschreiben. (Ist es nicht angegeben, ist die Voreinstellung 0). Weitere Details stehen im Debian Policy Manual. Da Fink und die dahinter stehenden Debian-Tools als eindeutigen Bezeichner für ein Paket die Abfolge Name-Version-Revision nehmen, darf man keine Pakete definieren, die sich lediglich in der Epoche unterscheiden.
In einer Zeichenkette für die Version kommt die Epoche vor der Version,
abgetrennt durch ein Semikolon (1:3.14-2). Beachten sie, dass das Feld Epoche
weder in |
Description |
Eine kurze Beschreibung des Pakets (Was ist es?). Diese Beschreibung ist einzeilig und wird in Überscihtslisten verwendet. Deshalb muss es kurz und informativ sein. Die Becshreibung soll kürzer als 45 Zeichen sein und muss kürzer als 60 Zeichen sein. Der Paketname muss in diesem Feld nicht vorkommen - diese Beschreibung wird immer im entsprechenden Kontext verwendet. Ein Pflichtfeld. |
Type |
Dieses Feld kann auf
Das Feld
Ab Fink 0.9.5 gibt es den Typ Seit einer CVS-Version von Fink nach Fink-0.19.2 wurde die Verwendung von Sprache/Sprachenversion verallgemeinert, so dass Paketbetreuer Typen und Subtypen definieren können und ein Paket mehr als einen Typ haben können. Typ und Subtyp sind beliebige Zeichenketten ohne Leerzeichen (Klammern, Kommata und Prozentzeichen sollten ebenfalls nicht benutzt werden); die Prozenterweiterung wird NICHT angewendet und der Typ (aber nicht der Subtyp) wird in Kleinbuchstaben konvertiert. Mehrere Typen (jeder mit einem optionalen, leerzeichen-separierten Subtyp) werden komma-separiert aufgelistet. Zusätzlich existiert das Konzept von "variants", bei dem in einer einzigen .info-Datei eine Familie von Paketen beschrieben werden, bei denen verschiedene Optionen eingeschaltet sind. Der Schlüssel zu dem ganzen Prozess ist eine Liste von Subtypen. Statt einer einzigen Zeichenkette nutzt man eine Leerzeichen-separierte Liste von Zeichenketten in Klammern. Fink erzeugt für jeden Subtyp in der Liste einen Klon und ersetzt die Liste mit dem jeweiligen Subtyp, z. B.: Type: perl (5.12.3 5.12.4)
ergibt zwei Paketbeschreibungen, eine die sich verhält als ob
Type: -x11 (boolean) Type: -x11 (-x11 .) Die Erweiterung der Subtyp-Liste und das Klonieren der Pakete ist rekursiv. Stehen mehrere Typen in der Subtyp-Liste erhält man alle Kombinationen: Type: -ssl (boolean), perl (5.12.3 5.12.4) Man kann eine bestimmte Subtyp-Variante in anderen Felder mit %type_raw[] und %type_pkg[] verwenden. Im folgenden zwei Beispiele mit .info-Fragmenten: Info2: << Package: foo-pm%type_pkg[perl] Type: perl (5.12.3 5.12.4) Depends: perl%type_pkg[perl]-core << Info2: << Package: bar%type_pkg[-x11] Type: -x11 (boolean) Depends: (%type_raw[-x11] = -x11) x11 CompileScript: << #!/bin/bash -ev if [ "%type_raw[-x11]" == "-x11" ]; then ./configure %c --with-x11 else ./configure %c --without-x11 fi make << <<
Ab Fink 0.26.0 gibt es den speziellen Info2: << Package: foo%type_pkg[-64bit] Type: -64bit (boolean) Depends: (%type_raw[-64bit] = -64bit) 64bit-cpu ConfigureParams: --libdir='${prefix}/%lib' SplitOff: << Package: %N-shlibs Files: %lib/libfoo.*.dylib Shlibs: << %p/%lib/libfoo.1.dylib 1.0.0 %n (>= 1.0-1) %type_num[-64bit] << << <<
Beachten sie, dass |
License |
Dieses Feld spezifiziert die Lizenz, unter der das Paket vertrieben werden kann. Der Wert muss einer aus dem Kapitel Packet-Lizensen weiter oben in diesem Dokument sein. Zusätzlich darf dieses Feld nun verwendet werden, wenn das Paket auch tatsächlich die Richtlinien dafür einhält, d. h. eine Kopie der Lizenz im Verzeichnis doc des Pakets installiert. |
Maintainer |
Name und Email-Adresse der Person, die für das Paket verantwortlich ist Das Feld ist ein pflichtfeld und es darf nue ein Name und eine Adresse im folgenden Format angegeben werden: Vorname Familienname <Nutzer@host.domain.com> |
InfoN |
Diese Feld erlaubt Fink Syntaxänderungen in den Paketbeschreibungen zu implementieren, die nicht rückwärtskompatibel sind. Eine gegebene Version von Fink ist auf die maximale Zahl "N" gesetzt, die für sie machbar ist. Pakete mit einem höheren N werden ignoriert. Deshalb sollte dieser Mechanismus nur verwendet werden, wenn es notwendig ist. Ansonsten werden Nutzer mit älteren Finkversionen unnötigerweise ausgeschlossen. Verwenden sie diesen Mechanismus, indem sie die gesamte Paketbeschreibung in das Feld InfoN einschließen. Sie können bei Datei-Format weiter oben nachschauen, wie die Syntax für mehrzeilige Felder aussieht. Es folgen die Features des jeweiligen InfoN-Niveau und die erste Version von Fink, die es unterstützt:
|
Abhängigkeiten:
Field | Value |
---|---|
Depends |
Dieses Feld enthält die Liste der Pakete, die installiert werden müssen, bevor das Paket erstellt werden kann. Die Prozenterweiterung kann in diesem Feld verwendet werden (genau wie auch in den anderen Feldern dieser Sektion: BuildDepends, RuntimeDepends, Provides, Conflicts, Replaces, Recommends, Suggests und Enhances). Normalerweise ist es eine Komma-separierte Liste mit den Paketnamen, aber Fink unterstützt in der gleichen Syntax wie dpkg auch Alternativen und Versionen. Ein Beispiel mit allen Varianten: Depends: << daemonic (>= 20010902-1), emacs | xemacs <<
Das Layout ist das bevorzugte Format für das Feld
Beachten sie, dass es keine Möglichkeit für optionale Abhängigkeiten gibt.
Funktioniert ein Paket sowohl mit als auch ohne ein anderes Paket, dann müssen
sie sicher stellen, dass das Paket auch nicht verwendet wird, auch wenn es
vorhanden ist. Andernfalls müssen sie das Paket in das Feld
Ausführungsreihenfolge der Operationen: Ein logisches "OR" (Liste der
Alternativen) hat höhere Priorität (verknüpft enger) als ein logisches
"AND" zwischen den Paketen (oder einem Satz an Alternativen) in der
Komma-separierten Liste. Anders als die Verwendung von Klammern in
arithmetischen Ausdrücken gibt es im Feld
Beginnend mit einer post-0.18.2 CVS-Version of Fink kann man bedingte
Abhängigkeiten verwenden. Diese kann man dadurch ausdrücken, dass man
Sie können dieses Format nutzen, um die Pflege mehrerer ähnlicher Pakete zu vereinfachen. Beide Pakete elinks und elinks-ssl könnten z. B. folgendes auflisten: Depends: << expat-shlibs, (%n = elinks-ssl) openssl097-shlibs << Das hätte den gleichen Effekt, wie wenn elinks folgendes auflisten würde: Depends: expat-shlibs und elinks-ssl dieses: Depends: expat-shlibs, openssl097-shlibs
In einer alternativen Syntax, könnenten sie auch eine
Package: nethack%type_pkg[-x11] Type: -x11 (boolean) Depends: (%type_pkg[-x11]) x11 Dies würde das Paket x11 als Abhängigkeit für die Variante nethack-x11 setzen, aber nicht die Variante nethack. Beachten sie folgendes: Verwenden sie die Felder Depends/BuildDepends für dynamische Bibliothekspakete, für die es mehrere Hauptversionen gibt, dürfen sie folgendes nicht deklarieren: Package: foo Depends: id3lib3.7-shlibs | id3lib4-shlibs BuildDepends: id3lib3.7-dev | id3lib4-dev auch wenn ihr Paket mit jeder Bibliothek funktionieren sollte. Sie müssen eine auswählen (vorzugsweise die mit der höchsten Version, die verwendet werden kann) und verwenden sie in ihrem Paket diese Version durchgängig.
Wie im Kapitel über die Richtlinien über
dynamische Bibliotheken
erklärt, kann immer nur ein Paket -dev installiert sein und jedes hat Links
mit dem gleichen Namen, die auf verschiedene Dateinamen im zugehörigen Paket
-shlibs zeigen können. Kompiliert man das Paket foo, wird der tatsächliche
Dateiname (im Paket -shlibs) fest in das Binärprogramm foo übernommen. Dies
bedeutet, dass das Paket genau dieses bestimmte Paket -shlibs benötigt, das zu
dem Paket -dev gehört, das zur Compile-Zeit installiert war. Deshalb kann
das Feld In der Vergangenheit hingen nicht-eseentielle Pakete implizit von essentiellen ab; dies ist nicht mehr der Fall. |
BuildDepends |
Eingeführt in Fink 0.9.0.
Eine Liste mit Abhängigkeiten, die nur für die Erstellungsphase gilt.
Man kann sie nutzen, um Tools aufzulisten (z. B. flex), die man für das
Erstellen des Pakets benötigt, aber nicht zur Laufzeit.
Es hat die gleiche Syntax wie das Feld |
RuntimeDepends |
Eingeführt in Fink 0.32.0.
Eine Liste mit Abhängigkeiten, die nur für die Laufzeit gilt, also wenn
das Paket installiert ist.
Dieses Feld kann genutzt werden, um Pakete aufzulisten, die man zur Laufzeit
benötigt, aber nicht beim Erstellen des Pakets.
Es hat die gleiche Syntax wie das Feld |
Provides |
Eine komma-separierte Liste von Paketnamen, die dieses Paket zur Verfügung
stellt.
Wenn ein Paket namens "pine"
Beachten sie bitte, dass im Feld |
Conflicts |
Eine komma-separierte Liste von Paketnamen, die nicht gleichzeitig mit diesem
Paket installiert sein dürfen.
Virtuellen Pakete ist es erlaubt, Pakete aufzulisten, die auch im Feld
Bitte beachten: Fink selbst ignoriert dieses Feld, aber es wird an dpkg weitergegeben und entsprechend ausgewertet. Damit gilt es nur für die Laufzeit und nicht während der Erstellungszeit von Fink. |
BuildConflicts |
Eine Liste von Paketnamen, die nicht installiert sein dürfen, während dieses
Paket compiliert wird. Man kann es dazu benutzten, dass |
Replaces |
Dieses Feld wird zusammen mit dem Feld Bitte beachten: Fink selbst ignoriert dieses Feld, aber es wird an dpkg weitergegeben und entsprechend ausgewertet. Damit gilt es nur für die Laufzeit und nicht während der Erstellungszeit von Fink. |
Recommends, Suggests, Enhances |
Diese Felder deklarieren zusätzliche Beziehungen im selben Stil wie die anderen
Felder.
Diese drei Beziehungen haben auf die tatsächliche Installation mit
|
Pre-Depends |
Eine spezielle Variante des Felds |
Essential |
Ein boolscher Wert, der essentielle Pakete markiert. Essentielle Pakete werden
im Bootstrap-Prozess installiert. |
BuildDependsOnly |
Eingeführt in Fink 0.9.9.
Ein boolscher Wert, der anzeigt, dass kein anderes Paket von diesem abhängen
darf, zulässig ist nur ein BuildDepend.
Im Unterschied zu den üblichen boolschen Feldern, gibt es für
Ab Fink 0.20.5 werden die Präsenz/Absenz des Felds und wenn der Wert gesetzt ist, der Wert in die .deb Datei aufgenommen, wenn das Paket erstellt wird. Deshalb muss man die Revisionsnummer des Pakets erhöhen, wenn man den Wert von BuildDependsOnly ändert oder das Feld hinzufügt oder löscht. |
Auspack-Phase:
Field | Value |
---|---|
CustomMirror |
Eine Liste der Spiegelserver: Jeder Spiegelserver steht im folgenden Format in
einer separaten Zeile: CustomMirror: << nam-US: ftp://ftp.fooquux.com/pub/bar asi-JP: ftp://ftp.qiixbar.jp/pub/mirror/bar eur-DE: ftp://ftp.barfoo.de/bar Primary: ftp://ftp.barbarorg/pub/ <<
Die Standard-Codes für Kontinent und Land stehen in der Datei
|
Source |
Eine URL zu dem Quell-Tarball. Es sollte eine HTTP- oder eine FTP-URL sein, aber
Fink kümmert sich nicht weiter darum, sondern reicht die URL an wget weiter.
Diese Feld unterstützt ein spezielles URL-Schema für Spiegelserver:
Ab Fink 0.18.0 hat
Quellen, die nur für die Testsuite benötigt werden, sollten im Feld
|
SourceN |
Enthält ein Paket mehrere Tarballs, muss man sie mit diesen zusätzlichen Feldern
aufführen, beginnend mit N = 2. Der erste Tarball (der auch als der
Haupt-Tarball betrachtet werden kann) steht also im Feld |
SourceDirectory |
Diese Feld wird benötigt, wenn der Tarball in ein einziges Verzeichnis ausgepackt wird, dessen Namen sich aber vom Rumpf des Tarball-Namens unterscheidet. Ein Tarball mit dem Namen "foo-1.0.tar.gz" wird normalerweise in ein Verzeichnis "foo-1.0" ausgepackt. Ist das nicht der Fall, so kann man den Namen mit diesem Feld angeben. Prozenterweiterung wird in diesem Feld ausgeführt. |
NoSourceDirectory |
Setzen sie diesen boolschen Parameter auf wahr (true), wenn der Tarball nicht in ein einziges Verzeichnis ausgepackt wird. Ein Tarball mit dem Namen "foo-1.0.tar.gz" wird normalerweise in ein Verzeichnis "foo-1.0" ausgepackt. Werden aber die Dateien des Tarballs nur in das aktuelle Verzeichnis ausgepackt, nutzen sie dieses Feld und setzen sie den Wert auf wahr (true). |
SourceNExtractDir |
Normalerweise wird ein zusätzlicher Tarball in dasselbe Verzeichnis wie der Haupt-Tarball ausgepackt. Muss er aber in ein spezifisches Unterverzeichnis ausgepackt werden, können sie dies in diesem Fald angeben. Source2ExtractDir bezieht sich erwartungsgemäß auf den Tarball in Source2. Beispiele dafür sind in den Paketen ghostscript, vim und tetex. |
SourceRename |
Mit diesem Feld kann man eine Quell-Tarball umbenennen. Das ist vor allem dann
nützlich, wenn die Version der Quelle im Namen des Verzeichnis des Servers
steht, der Tarball aber für alle Versionen gleich heißt, z. B.
SourceRename: %n-%v.tar.gz
In diesem Beispiel würde z. B. der Tarball unter dem Namen
|
SourceNRename |
Dieses Feld erfüllt die gleiche Funktion, nur dass es sich auf Tarballs bezieht,
die in den entsprechenden Feldern |
Source-MD5 |
Eingeführt in Fink 0.10.0. In diesem Feld müssen sie die MD5 Checksum der Quelldatei eintragen. Fink benutzt diese Information um falsche Quelldateien zu entdecken, d. h. Tarballs, die nicht mit denen übereinstimmen, die der Paket-Betreuer verwendet hat. Häufige Ursachen für dieses Problem sind: unvollständig herunter geladene Dateien, Austausch des Tarball Upstream ohne Ankündigung, Trojanerangriff oder ähnliches und alles mögliche andere. Ein typisches Beispiel sieht so aus: Source-MD5: 4499443fa1d604243467afe64522abac
Für die Berechnung der Checksum kann man das Tool fingolfin% md5sum /opt/sw/src/apache_1.3.23.tar.gz 4499443fa1d604243467afe64522abac /opt/sw/src/apache_1.3.23.tar.gz Wie man sieht ist der Wert links genau die Summe, die man braucht. |
SourceN-MD5 |
Eingeführt in Fink 0.10.0.
Dieses Feld hat denselben Zweck wie das Feld |
Source-Checksum |
Alternative method to list the checksum for a source file. This field takes a hash type, followed by the actual checksum. For example: Source-Checksum: SHA256(5048f1c8fc509cc636c2f97f4b40c293338b6041a5652082d5ee2cf54b530c56)
Current valid checksums are $ shasum -a 256 /opt/sw/src/libexif-0.6.22.tar.xz 5048f1c8fc509cc636c2f97f4b40c293338b6041a5652082d5ee2cf54b530c56 /opt/sw/src/libexif-0.6.22.tar.xz
The |
SourceN-Checksum |
This is just the same as the |
TarFilesRename |
Eingeführt in Fink 0.10.0. Dieses Feld bezieht sich nur auf Quelldateien im tar-Format.
Mit diesem Feld kann man Dateien in einem gegebenen Quell-Tarball während des
Auspackens umbenennen. Dies behebt die Probleme, die damit zusammenhängen, dass
das HFS+ Dateisystem Groß- und Kleinschreibung nicht unterscheidet und z. B.
die Dateien
In diesem Feld können sie einfach eine Liste an Dateien aufführen, die umbenannt
werden sollen. Man kann auch Wildcards benutzen. Standard ist einfach eine
Umbennung mit angehängtem TarFilesRename: foo bar.* qux:quux Tar2FilesRename: directory/INSTALL:directory/INSTALL.txt |
TarNFilesRename |
Eingeführt in Fink 0.10.0.
Dieses Feld ist genau wie das Feld |
Patch-Phase:
Field | Value |
---|---|
UpdateConfigGuess |
Ein boolscher Wert. Ist er auf wahr (true) gesetzt, werden die Dateien config.guess und config.sub im Verzeichnis build durch Versionen ersetzt, die Darwin kennen. Dies erfolgt in der Patch-Phase bevor das PatchSkript ausgeführt wird. Benutzen sie dies NUR, wenn sie sich sicher sind, dass es benötigt wird, d. h. wenn das configure-Skript mit der Fehlermeldung "unknown host" abbricht. |
UpdateConfigGuessInDirs |
Eingeführt in einer post-0.9.0 CVS-Version.
Eine Liste von Unterverzeichnissen.
Es macht das gleiche wie das Feld UpdateConfigGuess, aber für Pakete mit
veralteten config.guess-Dateien in mehreren Verzeichnissen überall im Baum der
Quellen.
Früher musste man die Dateien von Hand im Patchskript an die richtigen Stellen
kopieren.
Mit diesem Feld muss man nur noch die Verzeichnisse auflisten.
Benutzen sie |
UpdateLibtool |
Ein boolscher Wert. Ist er auf wahr (true) gesetzt, werden die Dateien ltconfig und ltmain.sh im Verzeichnis build durch Versionen ersetzt, die Darwin kennen. Dies erfolgt in der Patch-Phase bevor das PatchSkript ausgeführt wird. Benutzen sie dies NUR, wenn sie sich sicher sind, dass es benötigt wird. Einige Pakete kann man beschädigen, wenn man die libtool-Skripte mit unpassenden Versionen überschreibt. Für weitere Details lesen sie die Seiten über libtool. |
UpdateLibtoolInDirs |
Eingeführt in einer post-0.9.0 CVS-Version.
Eine Liste von Unterverzeichnissen.
Es macht das gleiche wie das Feld UpdateLibtool, aber für Pakete mit veralteten
libtool-1.3.x-Skripten in mehreren Verzeichnissen überall im Baum der
Quellen.
Früher musste man die Dateien von Hand im Patchskript an die richtigen Stellen
kopieren.
Mit diesem Feld muss man nur noch die Verzeichnisse auflisten.
Benutzen sie |
UpdatePoMakefile |
Ein boolscher Wert.
Ist er auf wahr (true) gesetzt, wird die Datei
Die angepasste Version respektiert DESTDIR sorgt dafür, dass Kataloge mit
Meldungen im Verzeichnis |
Patch |
Der Dateiname eines Patch, der mit dem Kommando
Beachten sie, dass %n allen Datenvarianten %type_ einschließt. Es kann deshalb günstiger sein, hier %{ni} zu verwenden (eventuell mit einigen spezifischen %type_ Erweiterungen). Es ist einfacher, eine einzige Patchdatei zu pflegen und dann variantenspezifische Änderungen im Patch-Skript zu machen als separate Patchdateien für jede Variante zu pflegen.
Ab Fink-0.29.0 sollte dieses Feld nicht benutzt werden. Nutzen sie statt dessen
das Feld |
PatchFile |
Syntax für dieses Feld ist die gleiche wie für das Feld
Man kann die Felder |
PatchFileN |
Hat ein Paket mehrere Patch-Dateien, muss man sie in zusätzlichen Feldern
deklarieren, mit N = 2 anfangend. Die erste Patch-Datei steht als in
|
PatchFile-MD5 |
Hier steht die MD5-Checksum einer Datei des Felds |
PatchFileN-MD5 |
Hier steht die MD5-Checksum einer Datei des Felds
|
PatchScript |
Eine Liste von Kommandos, die in der Patch-Phase ausgeführt werden. Hierhin
gehören Kommandos, mit denen man die Paketquellen patched oder irgendwie
modifiziert. Weitere Details dazu stehen weiter unten im Abschnitt
Anmerkungen zu Skripten.
Bevor die Kommandos ausgeführt werden, wird die
Prozenterweiterung ausgeführt.
Existiert das Feld patch -p1 < %{PatchFile}
Bei einem oder mehreren Feldern patch -p1 < %{PatchFileN}
Gibt es kein Feld |
Compile-Phase:
Field | Value |
---|---|
SetENVVAR |
Hiermit kann man Umgebungsvariablen für die Compile- und Installations-Phase setzen. Damit kann man Compiler-Flags z. B. an Configure-Skripte und Makefiles übergeben. Derzeit werden folgende Variablen unterstützt: CC, CFLAGS, CPP, CPPFLAGS, CXX, CXXFLAGS, DYLD_LIBRARY_PATH, JAVA_HOME, LD, LDFLAGS, LIBRARY_PATH, LIBS, MACOSX_DEPLOYMENT_TARGET, MAKE, MFLAGS, MAKEFLAGS. Für den angegebenen Wert kann die Prozenterweiterung aus dem letzten Kapitel genutzt werden: Ein häufiges Beispiel: SetLDFLAGS: -Wl,-strip_dead_dylibs Einige Umgebungsvariablen haben einen Standardwert. Gibt man für diese einen Wert an, werden sie dem Standardwert voran gestellt. Die vorbesetzten Variablen und ihre Standardwerte sind: CPPFLAGS: -I%p/include LDFLAGS: -L%p/lib
Beginnend mit Fink 0.26.0, gibt es eine Ausnahme von diesen Standards:
Ist der MACOSX_DEPLOYMENT_TARGET ist auf einen Standardwert gesetzt, der von der Version von OS X abhängt, aber setzt man es für ein Paket auf einen anderen Wert, so wird der Standardwert überschrieben. |
NoSetENVVAR |
Setzt man dies auf wahr (true), dann werden die Standardwerte für die Variablen
mit Voreinstellungen (wie CPPFLAGS, LDFLAGS, CXXFLAGS) nicht gesetzt. Soll zum
Beispiel LDFLAGS nicht gesetzt werden, erreicht man dies mit
|
UseMaxBuildJobs |
Wenn auf wahr (true) gesetzt, wird |
BuildAsNobody |
Ab Version 0.33.0 wird Fink als In früheren Versionen von Fink bleibt dieses Feld folgenloss. |
ConfigureParams |
Zusätzliche Parameter, die an das Configure-Skript durchgereicht werden.
(Weitere Details dazu gibt es beim Compile-Skript)
Außer für Pakete des Typs
Sind bei der Paketserstellung die Test-Suites aktiviert wird der Wert des Felds
Beginnend mit Fink-0.22.0 unterstützt dieses Feld auch Bedingungen. Die Syntax
ist die gleiche wie im Feld Type: -x11 (boolean) ConfigureParams: --mandir=%p/share/man (%type_pkg[-x11]) --with-x11 --disable-shared
reicht die Parameter
Dieses Feld unterstützt, Parameter in mehreren Zeilen mit einer
Mehrzeilen-Deklaration zu schreiben. Dieses Feld wird wie eine
Shell-Kommandozeile behandelt und benutzt ConfigureParams: << --mandir=%p/share/man \ (%type_pkg[-x11]) --with-x11 \ --disable-shared << Beachten sie: Stellen sie bei mehreren Zeilen bedingte Parameter nicht in die letzte Zeile. Ist die Bedingung falsch, dann wird der darauf folgende Parameter nicht ausgewertet. Dieses führt dann zum Absturz der Shell. |
GCC |
Dieses Feld deklariert die GCC-ABI, die in diesem Paket von C++ Code genutzt wird. (Es ist notwendig, weil sich die ABI zweimal änderte und jede Bibliothek, die sie in ihrem C++ Code verlinken, muss mit der selben ABI kompiliert werden wie ihr Code.)
Die erlaubten Werte sind:
Das Feld GCC hat keine Voreinstellung an sich, denn es wird ignoriert, wenn es
nicht gesetzt ist. Es gibt aber für jeden Baum einen erwarteten Wert für GCC,
der dem g++ Compiler für diesem Baum entspricht.
Die erwarteten Werte für die verschiedenen Paketbäume sind:
Beachten sie, dass der Compiler im Paket angegeben werden muss, wenn er von dem erwarteten abweicht. Typischerweise wird der Compiler durch Setzen der Flags CC oder CXX geändert. Es sollte auch eine Abhängigkeit von einem der (virtuellen) gcc-Pakete angegeben werden.
Ab Version 0.13.8 von Fink wird die Version von gcc mit Dieses Feld wurde in Fink eingerichtet, um Betreuern zu helfen, den Übergängen zwischen den gcc Compilern zu folgen, die binäre Inkompatibilitäten zwischen Bibliotheken einführte, die C++ Code enthalten, die aber nicht durch aus Versionen erkannt werden kann. |
CompileScript |
Eine Liste von Kommandos, die in der Compile-Phase ausgeführt wird. Hierhin gehören Kommandos, die ein Paket konfigurieren und compilieren. Weitere Details dazu stehen weiter unten im Abschnitt Anmerkungen zu Skripten. Bevor die Kommandos ausgeführt werden, wird die Prozenterweiterung ausgeführt. Der Standard ist: ./configure %c make Dies ist für Pakete angemessen, die GNU autoconf benutzen. Für Pakete des Typs perl (deklariert über das Feld Type) ohne Angabe der Perl-Version ist der Standard ab Fink 0.13.4 folgender: perl Makefile.PL PREFIX=%p \ INSTALLPRIVLIB=%p/lib/perl5 \ INSTALLARCHLIB=%p/lib/perl5/darwin \ INSTALLSITELIB=%p/lib/perl5 \ INSTALLSITEARCH=%p/lib/perl5/darwin \ INSTALLMAN1DIR=%p/share/man/man1 \ INSTALLMAN3DIR=%p/share/man/man3 \ INSTALLSITEMAN1DIR=%p/share/man/man1 \ INSTALLSITEMAN3DIR=%p/share/man/man3 \ INSTALLBIN=%p/bin \ INSTALLSITEBIN=%p/bin \ INSTALLSCRIPT=%p/bin make make test
Ist der Typ perl$version Makefile.PL \ PERL=perl$version PREFIX=%p \ INSTALLPRIVLIB=%p/lib/perl5/$version \ INSTALLARCHLIB=%p/lib/perl5/$version/$perlarchdir \ INSTALLSITELIB=%p/lib/perl5/$version \ INSTALLSITEARCH=%p/lib/perl5/$version/$perlarchdir \ INSTALLMAN1DIR=%p/share/man/man1 \ INSTALLMAN3DIR=%p/share/man/man3 \ INSTALLSITEMAN1DIR=%p/share/man/man1 \ INSTALLSITEMAN3DIR=%p/share/man/man3 \ INSTALLBIN=%p/bin \ INSTALLSITEBIN=%p/bin \ INSTALLSCRIPT=%p/bin make make test
wobei |
NoPerlTests |
Eingeführt in Fink > 0.13.7.
Ein boolscher Wert speziell für Pakete mit Perl-Modulen. Wenn auf wahr gesetzt,
wird der Teil |
Test-Suites:
Field | Value |
---|---|
InfoTest |
Eingeführt in Fink 0.25.
Dieses Feld umfasst Informationen, die nur ausgeführt werden, wenn bei der
Erstellung eines Pakets die Test-Suites aktiviert sind. Es enthält andere
Felder. Ist es vorhanden, muss das Feld
Hier ein Beispiel: InfoTest: << TestScript: make check || exit 2 TestConfigureParams: --enable-tests << |
Installationsphase:
Field | Value |
---|---|
UpdatePOD |
Eingeführt in Fink 0.9.5.
Ein boolscher Wert speziell Perl-Modul-Pakete.
Ist er auf wahr (true) gesetzt, wird Code zu den Skripten install, postrm und
postinst hinzu gefügt, der die .pod-Dateien aus den Perl-Paketen pflegt.
Dies schließt ein, das .pod-Datum in der zentralen Datei
|
InstallScript |
Die Liste der Kommandos, die in der Installationsphase ausgeführt werden. Hier stehen die Kommandos, die alle notwendigen Dateien in das temporäre dpkg-Verzeichnis für das Paket kopieren. Weitere Details dazu stehen weiter unten im Abschnitt Anmerkungen zu Skripten. Bevor die Kommandos ausgeführt werden, wird die Prozenterweiterung ausgeführt. Normalerweise ist der Standard: make install prefix=%i Dies ist für Pakete angemessen, die GNU autoconf benutzen. Für Pakete des Typs perl (deklariert über das Feld Type) ohne Angabe der Perl-Version ist der Standard ab Fink 0.13.4 folgender: make install INSTALLPRIVLIB=%i/lib/perl5 \ INSTALLARCHLIB=%i/lib/perl5/darwin \ INSTALLSITELIB=%i/lib/perl5 \ INSTALLSITEARCH=%i/lib/perl5/darwin \ INSTALLMAN1DIR=%i/share/man/man1 \ INSTALLMAN3DIR=%i/share/man/man3 \ INSTALLSITEMAN1DIR=%i/share/man/man1 \ INSTALLSITEMAN3DIR=%i/share/man/man3 \ INSTALLBIN=%i/bin \ INSTALLSITEBIN=%i/bin \ INSTALLSCRIPT=%i/bin
Ist der Typ make install INSTALLPRIVLIB=%i/lib/perl5/$version \ INSTALLARCHLIB=%i/lib/perl5/$version/$perlarchdir \ INSTALLSITELIB=%i/lib/perl5/$version \ INSTALLSITEARCH=%i/lib/perl5/$version/$perlarchdir \ INSTALLMAN1DIR=%i/share/man/man1 \ INSTALLMAN3DIR=%i/share/man/man3 \ INSTALLSITEMAN1DIR=%i/share/man/man1 \ INSTALLSITEMAN3DIR=%i/share/man/man3 \ INSTALLBIN=%i/bin \ INSTALLSITEBIN=%i/bin \ INSTALLSCRIPT=%i/bin
wobei
Wenn das Paket es unterstützt, ist es besser, stattdessen
|
AppBundles |
Eingeführt in einer Version nach 0.23.1.
Dieses Feld installiert das angegebene Applicationbundle bzw. mehrere im
Verzeichnis AppBundles: build/*.app Foo.app |
JarFiles |
Eingeführt in Fink 0.10.0.
Das Feld ist irgendwie ähnlich wie das Feld DocFiles. Damit werden die
angegebenen jar-Dateien ins Verzeichnis JarFiles: lib/*.jar foo.jar:fooBar.jar Damit werden alle jars im Verzeichnis lib installiert; die Datei foo.jar als fooBar.jar.
Es bewirkt auch, dass diese jar-Dateien (genau: alle Dateien in
|
DocFiles |
Dieses Feld deklariert eine bequehme Art, Dateien wie README oder COPYING für
das Paket im doc-Verzeichnis |
Shlibs |
Eingeführt in Fink 0.11.0.
Diess Feld deklariert dynamische Bibliotheken, die in dem Paket installiert
werden. Jede Bibliotheke steht in einer separaten Zeile die den
|
RuntimeVars |
Eingeführt in Fink 0.10.0.
Dieses Feld deklariert eine bequehme Art, Umgebungsvariablen für die Laufzeit
einen statischen Wert zuzuweisen (Benötigen sie mehr Flexibilität, schauen sie
im Abschnitt profile.d Skripte nach). Solange
das Paket installiert ist, werden diese Variablen im Skript
Der Wert ihrer Variablen kann Leerzeichen enthalten (Leerzeichen am Ende werden abgeschnitten); Prozenterweiterung wird ausgeführt. In diesem Beispiel RuntimeVars: << SomeVar: %p/Value AnotherVar: foo bar << werden zwei Umgebungsvariablen 'SomeVar' und 'AnotherVar' erzeugt und ihre Werte auf '/opt/sw/Value' (oder wasauch immer ihr Präfix ist) und 'foo bar' gesetzt. Dieses Feld funktioniert, in dem es die entsprechenden Kommandos im Installations-Skript angehängt. Diese Kommandos fügen eine Zeile mit setenv/export im Paket-Skript profile.d hinzu, so dass sie ihre eigenen hinzufügen können, ohne dass sie überschrieben werden. Die Zeilen werden den Skripten voran gestellt, so dass man die Variablen auch in den Skripten verwenden kann. |
SplitOff |
Eingeführt in Fink 0.9.9. Erzeugen sie ein zweites Paket vom selben compile/install-Lauf. Schauen sie für weitere Details im separaten Abschnitt Splitoff nach. |
SplitOffN |
Eingeführt in Fink 0.9.9.
Dies ist genau so wie |
Files |
Eingeführt in Fink 0.9.9.
Dieses Feld wird nur in den Feldern |
Erstellungsphase:
Field | Value |
---|---|
PreInstScript, PostInstScript, PreRmScript, PostRmScript |
Diese Felder enthalten Shell-Skripte, die ausgeführt werden, wenn ein Paket
installiert, aktualisiert oder entfernt wird.
Fink fügt automatisch den Shell-Skript-Header
Die Skripte werden zu folgenden Zeitpunkten ausgerufen:
Klarstellung: Bei einer Aktualisierung werden sowohl die ...Inst-Skripte der neuen Version als auch die ...Rm-Skripte der alten Version ausgeführt. Details dazu kann man im Debian Policy Manual nachlesen, im To make it more clear, an upgrade invokes both the ...Inst scripts of the new version and the ...Rm scripts of the old version. Kapitel 6. Prozenterweiterungen werden in diesen Skripten ausgeführt. Kommandos können ohne den kompletten Pfad ausgeführt werden. |
ConfFiles |
Eine leerzeichengetrennte list an Dateien von Konfigurationsdateien, die vom
Nutzer geändert werden können.
Prozenterweiterungen werden ausgeführt.
Die Dateien müssen mit einem absoluten Pfad angegeben werden,
d. h. |
InfoDocs |
Listet die Namen der Info-Dokumente, die das Paket in %p/share/info installiert.
Es wird entsprechender Code zu den Skripten postinst und prerm hinzugefügt, um
die Info-Verzeichnis-Datei Anmerkung: Nutzen sie nur die nicht-numerierten Dateien, wenn Info-Dokumente ausgespalten werden. Hat z. B. ein Paket die Dateien foo.info foo.info-1 foo.info-2 sollten sie nur diese aufführen: InfoDocs: foo.info Dieses Feature ist immer noch im Fluss. Es können in Zukunft durchaus weitere Felder für eine feinere Steuerung hinzu gefügt werden. |
DaemonicFile |
Liefert Service-beschreibungen für |
DaemonicName |
Ein Name für die Datei der |
Zusätzliche Angaben:
Field | Value |
---|---|
Homepage |
Die URL der Upstream-Homepage des Pakets. |
DescDetail |
Eine ausführlichere Beschreibung des Pakets als im Feld |
DescUsage |
Dieses Feld ist für Informationen, die man für die Benutzung des Pakets benötigt (Wie benutze ich es?), z. B. "Führen sie wmaker.inst einmal aus, bevor sie WindowMaker benutzen". Mehrfachzeilen sind hier erlaubt. Dieses Feld wird ohne Zeilenumbruch dargestellt. Deshalb sollten sie manuell Zeilenenden einführen, um die Zeilenlänge, wenn möglich, unter 79 Zeichen zu halten. |
DescPackaging |
Anmerkungen zum Erstellen der Paketbeschreibung. Sachen wie "Patches im Makefile, damit alles an die richtige Stelle gepackt wird." kommen in dieses Feld. Mehrfachzeilen sind hier erlaubt. |
DescPort |
Anmerkungen spezifisch für die Portierung des Pakets nach Darwin. Sachen, wie "config.guess und libtool Skripte aktualisiert, -no-cpp-precomp ist nötig" gehören hier her. Mehrfachzeilen sind hier erlaubt. |
6.3 SplitOffs
Ab Fink 0.9.9 kann eine einzige .info-Datei benutzt werden, um mehrere Pakete zu
erstellen.
Die Installationsphase beginnt wie üblich mit der Ausführung der Kommandos
InstallScript
und DocFiles
.
Ist ein Feld SplitOff
oder SplitOffN
vorhanden, werden weitere Installationsverzeichnisse angelegt. In den Feldern
SplitOff
oder SplitOffN
werden die neuen
Installationsverzeichnisse mit %i abgekürzt, das Installationsverzeichnis des
Elternpakets mit %I.
In jedem Feld SplitOff
und SplitOffN
müssen
bestimmte Felder vorhanden sein. Tatsächlich wird eine komplette Beschreibung
gespiegelt, bei der nur wenige Felder fehlen. Im folgenden die Felder, die in
den Unterbeschreibungen vorkommen können, nach Kategorien sortiert:
- Start-Daten: Nur das Feld
Package
muss angegeben werden. Alle anderen Felder werden vom Elternpaket übernommen. Die Werte der FelderType
undLicense
können innerhalb vonSplitOff
orSplitOffN
überschrieben werden. Prozenterweiterungen können benutzt werden. Oft ist es bequehm, für den Namen des Elternpakets %N zu verwenden. - Abhängigkeiten: Alle felder sind erlaubt.
- Auspackphase, Patch-Phase und Compile-Phase: Diese Felder sind irrelevant und werden ignoriert.
- Installationsphase und Build-Phase: Alle Felder sind erlaubt (außer dass SplitOffs keine weiteren SplitOffs enthalten können).
- Zusätzliche Angaben: Sie werden vom Elternpaket geerbt. Die Werte können
aber durch Deklaration des Felds in
SplitOff
oderSplitOffN
überschrieben werden.
%n-%v-%r wird als eindeutiger Bezeichner für ein Paket interpretiert. Deshalb
kann man das selbe Paket
(mit der gleichen Version
und
Revision
) nicht als SplitOff
(oder
SplitOffN
) deklarieren. Benutzen sie Varianten, müssen sie
beachten, dass jede Variante als unabhängiges Paket betrachtet wird. Die
folgende Konstruktion ist deshalb verboten:
Package: mime-base64-pm%type_pkg[perl] Type: perl (5.12.3 5.12.4) SplitOff: << Package: mime-base64-pm-bin <<
Während der Installationsphase werden zuerst die Felder
InstallScript
und DocFiles
des Elternpakets
ausgeführt. Danach werden die Felder SplitOff
und
SplitOffN
prozessiert. In jedem SplitOff wird seinerseits
das Installscript ausgeführt. Das Feld Files
bewirkt dann, dass die
aufgelisteteten Dateien und Verzeichnisse vom Installationsverzeichnis %I des
Elternpakets in das Installationsverzeichnis %i des SplitOff-Pakets. Danach
werden die Felder DocFiles
und andere Installationsphasen-Felder
der SplitOff
oder SplitOffN
Pakete
ausgeführt.
Zu diesem Zeitpunkt wird SplitOff
ausgeführt (falls vorhanden) und
dann jedes Feld SplitOffN
, in der Reihenfolge der Zahl N.
Dies kann sich aber in Zukunft ändern. Folgendes Beispiel
SplitOff: << Description: Some header files Files: include/foo.h include/bar.h << SplitOff2: << Description: All other header files Files: include/* <<
funktioniert nur weil SplitOff
vor SplitOff2
ausgeführt wird. Es ist deshalb besser, die Dateien explizit auf zu listen
(oder detailiertere Wildcards benutzen).
Während der Erstellungsphase werden die pre/post install/remove Skripte für jedes SplitOff während der Erstellungsphase des jeweiligen SplitOff konstruiert, je nachdem wie die Skripte für das SplitOff deklariert wurden.
Von jedem erstellten Paket wird verlangt, dass seine Lizenzierung im Verzeichnis
%i/share/doc/%n (das %n nimmt für jedes Paket einen anderen Wert an)
dokumentiert wird. Beachten sie, dass DocFiles
die Dateien kopiert
und nicht verschiebt, so dass man identische Kopien der Dokumentation in jedes
Paket mehrfach installieren kann.
6.4 Skripte
In den Feldern PatchScript, CompileScript und InstallScript kann man
Shell-Skripte deklarieren, die dann ausgeführt werden. Das build-Verzeichnis
(%b
) ist das aktuelle Verzeichnis, in dem die Skripte
ausgeführt werden. Sie sollten immer relative Pfadnamen oder
Prozenterweiterungen für Dateien und Verzeichnisse in der Fink-Hierarchie
angeben und keine absoluten Pfadnamen. Zwei Formen werden unterstützt.
Dieses Feld kann ein einfache List von Kommandos sein, ähnlich zu einem
Shell-Skripte. Die Kommandos werden jedoch mit system() Zeile für Zeile
ausgeführt. Setzt man Variablen oder wechselt das Verzeichnis, wirkt sich dies
nur für eben diese eine Zeile aus. Beginnend mit einer CVS-Version nach
Fink-0.18.2 kann man lange Zeilen wie in Shell-Skripten auf mehrere umbrechen:
Ein Backslash (\
) am Ende der Zeile ist das Zeichen für die
Fortsetzung in der nächsten Zeile.
Alternativ dazu kann man ein komplettes Skript mit einem Interpreter eigener
Wahl hier einfügen. Wie in jedem Unix-Skript muss die erste Zeile mit
#!
anfangen, gefolgt vom kompletten Pfadnamen für den Interpreter
und alle benötigten Flags (z. B. #!/bin/csh
,
#!/bin/bash -ev
, usw.). In diesen Fällen wird das komplette Feld
*Script in eine temporäre Datei kopiert und dann ausgeführt.
6.5 Patches
Braucht das Paket einen Patch, um für Darwin kompiliert zu werden (oder um mit Fink zu funktionieren), benennen sie die Patch-Datei so wie die Paketbeschreibung nur mit der Extension ".patch" statt ".info" und speichern sie im gleichen Verzeichnis wie der .info-Datei. Geben sie den Namen der Patch-Datei mit einer Zeile wie die folgende an:
PatchFile: %n.patch
(Für Pakette mit Varianten, kann es günstiger sein, %{ni}.patch
zu
verwenden.)
Sie müssen auch die MD5-Summe der Patch-Datei im Feld PatchFile-MD5
angeben und folgendes deklarieren:
BuildDepends: fink (>= 0.24.12)
(oder eine spätere Finkversion).
Wird das Feld PatchFileN
verwendet, ist es üblich, die
Datei %n-Zweck-des-Patch.patch
zu benennen, damit man das
leichter verfolgen kann. Man muss auch das Feld
PatchFileN-MD5
angeben und folgendes deklarieren:
BuildDepends: fink (>= 0.30.0)
(oder eine spätere Finkversion).
Gibt es das Feld PatchFile
, wird folgendes
Standard-PatchScript
Skript ausgeführt:
PatchScript: patch -p1 < %{PatchFile}
Mit PatchFileN
wird folgendes an das obige
Standard-PatchScript
angehängt:
patch -p1 < %{PatchFileN}
Dieses Standard-PatchScript
wird überschrieben, wenn man ein
eigenes PatchScript
deklariert (z. B. um eine Änderung in der
Patchdatei vorzunehmen, bevor sie angewandt wird).
Benötigt man in der Patch-Datei den vom Nutzer gewählten Präfix, wird empfohlen,
statt /opt/sw
eine Variable wie @PREFIX@
zu deklarieren
und so zu verwenden:
PatchScript: sed 's|@PREFIX@|%p|g' < %{PatchFile} | patch -p1
Patches sollten im unidiff-Format sein und werden normalerweise mit folgendem Kommandoerzeugt:
diff -urN <originalsourcedir> <patchedsourcedir>
Verwendet man emacs zum Edditieren der Dateien, kann man die Option
-x'*~'
an das diff-Kommando anhängen, um automatisch erzeugte
Backup-Dateien zu unterdrücken.
Beachten sie bitte, dass sehr große Patches nicht in das CVS-Repository hoch
geladen werden sollten. Sie sollten auf einen web/ftp-Server hoch geladen und
in einem Feld SourceN:
deklariert werden. Haben sie keinen
Webserver, können Administratoren von Fink die Datei auf der eigenen Seite von
Fink zur Verfügung stellen. Auch wenn ihr Patch größer als 30 KB ist, sollten
sie überlegen, einen separaten Downlaod zu erstellen.
6.6 Profile.d scripts
Benötigt ihr Paket einige Initialisierungen zur Laufzeit (z. B. Setzen von
Umgebungsvariablen), können sie profile.d-Skripte verwenden.
Diese Skript-Fragmente werden durch die Skripte
/opt/sw/bin/init.[c]sh
"sourced". Normalerweise werden alle
Fink-Nutzer diese Skripte in ihren Shell-Startup-Skripte
(.cshrc
und ähnliche Dateien) laden.
Ihr Paket muss jedes Skript in zwei Varianten zur Verfügung stellen: Eine für
sh-kompatible Shells (sh, zsh, bash, ksh, ...) und eine für csh-kompatible
Shells (csh, tcsh). Sie müssen als
/opt/sw/etc/profile.d/%n.[c]sh
installiert werden (wobei %n wie
üblich für den Paketnamen steht).
Es müssen auch ihre executable und read Bits gesetzt werden (d. h. sie müssen
mit -m 755 installiert werden). Ansonsten werden sie nicht korrekt geladen
werden.
Muss man nur einige Umgebungsvariablen setzen (z. B. QTDIR auf '/opt/sw'), kann man das Feld RuntimeVars benutzen; eine bequehme Art, genau dies zu erreichen.