Fink

Paket erstellen - 2. Paketbeschreibungen

2.1 Verzeichnis-Layout

Paketbeschreibungen werden aus dem Verzeichnis finkinfo gelesen, der sich im Verzeichnis /opt/sw/fink/dists befindet. Die Einstellung "Trees" in der Datei /opt/sw/etc/fink.conf bestimmt, welche Verzeichnisse gelesen werden. Der Name der Paketbeschreibungsdatei besteht aus dem vollständigen Paketnamen und dem Suffix ".info". Ab Fink 0.26.0 gibt es mehre Möglichkeiten für den Dateinamen: Empfohlen wird der kürzeste Name, der konsistent mit anderen Paketen ist, die benötigt werden. Der Dateiname hat folgende Form: der unveränderliche Paketname, optional die Architektur, optional die Distribution, optional Version oder Version-Revision, alle durch Bindestriche getrennt und abgeschlossen mit ".info". Die Komponenten "Architektur" und "Distribution" sind nur erlaubt, wenn die entsprechenden Felder auch in der Beschreibung vorkommen und exakt einen Wert zugewiesen haben.

Der Baum der Paketveschreibungen ist in mehreren Ebenen von Verzeichnissen organisiert. Die Verzeichnisse von oben nach unten:

2.2 Datei-Format

Die Paketbeschreibungsdateien sind einfache Listen von Schlüssel-Wert-Paaren, auch Felder genannt. Jede Zeile beginnt mit einem Schlüssel, der mit einem Doppelpunkt (:) abgeschlossen wird. Darauf folgt direkt der Wert, also so:

Schlüssel: Wert

Es gibt zwei Schreibweisen für Felder, die sich über mehrere Zeilen erstrecken.

Die bevorzugte Schreibweise is so wie die here-document-Syntax in Shell-Skripten. Bei dieser Syntax beginnt die erste Zeile mit dem Schlüssel, gefolgt von << als Wert. Alle nachfolgenden Zeilen werden als eigentlicher Wert behandelt bis eine Zeile folgt, die nur << enthält. Das Beispiel von oben sieht nun so aus:

InstallScript: <<
mkdir -p %i/share/man
make install prefix=%i mandir=%i/share/man
mkdir -p %i/share/doc/%n
install -m 644 COPYING %i/share/doc/%n
<<

Einrückungen in diesem Format sind optional, können aber für eine erhöhte Lesbarkeit verwendet werden.

Die here-document-Syntax kann verschachtelt sein. Dies wird oft in den Feldern SplitOff oder SplitOffN verwendet. Diese Felder enthalten weitere Felder (mehrere Zeilen) und diese Syntax erlaubt, dass auch diese Unterfelder ihrerseits mehrere Zeilen hat. Derselbe Abschluss mit << wird bei dem sub-here-document benutzt. Hier ein Beispiel:

SplitOff: <<
  Package: %N-shlibs
  InstallScript: <<
    ln -s %p/lib/libfoo.2.dylib %i/lib/libfoo.%v.dylib
  <<
<<

In diesem Format werden Leerzeilen und Zeilen mit einem Hash (#) am Zeilenanfang ignoriert. Groß-und Kleinschreibung wird beim Schlüssel (Feldnamen) nicht beachtet, d. h. man kann InstallScript, installscript oder INSTALLSCRIPTschreiben, wie man will. Allerdings wird die erste Form mit Großbuchstaben wegen Lesbarkeit empfohlen. Einige Felder akzeptieren boolesche Werte. Hier werden "true", "yes", "on" und "1" (auch in Großschreibung) als wahr interpretiert, alle anderen Werte als falsch.

2.3 Prozent-Erweiterungen

Zur Vereinfachung unterstützt Fink einen Satz an Erweiterungen, die in einigen Feldern angewendet werden. Mehrdeutigkeiten kann man verhinder, indem man mit geschweiften Klammern genau anzeigt, welche Buchstaben für eine Prozent-Erweiterung genommen werden sollen. %{n} hat zum Beispiel die gleiche Bedeutung wie %n. Folgende Erweiterungen stehen zur Verfügung:

%n

Der name des Pakets

%N

Der Name des Elternpakets (der selbe wie %n außer innerhalb eines SplitOff)

Anmerkung: Wenn ein Eltern-Paket-Feld %type_*[] enthält, dann werden die Werte der Prozent-Erweiterung in %N in einem SplitOff-Block mit eingeschlossen. (Schließlich sind sie Teil von %n bei den Eltern.)

%e

Die epoche des Pakets

%v

Die version des Pakets. Beachten sie, dass die Epoche nicht zu %v gehört.

%V

Die vollständige Version des Pakets, die automatisch die Epoche enthält, wenn vorhanden. Beachten sie, dass diese Prozent-Erweiterung nur für Pakete zur Verfügung steht, deren InfoN-Ebene mindestens 4 ist.

%r

Die revision des Pakets

%f

Der vollständige (full) Paketname (%n-%v-%r). Beachten sie, dass die Epoche nicht zu %f gehört.

%p, %P

Der prefix wo Fink installiert ist, also /opt/sw. Sie dürfen nicht annehmen, dass alle Nutzer Fink in /opt/sw installiert haben, nutzen sie immer %p für den korrekten Pfad.

%d

Im Verzeichnis destination wird der Baum für ein Paket erstellt, z. B. in /opt/sw/src/fink.build/root-gimp-1.2.1-1. Dieses temporäre Verzeichnis dient als Wurzelverzeichnis während der Installationsphase beim Compilieren eines Pakets. Sie sollten nicht annehmen, dass root-%f in %p/src ist, denn ein Nutzer kann dieses Verzeichnis mit dem Feld Buildpath in der Datei /opt/sw/etc/fink.conf ändern.

%D

Das Verzeichnis Destination für das Elternpaket (das selbe wie %d außer innerhalb eines SplitOff)

%i

Der vollständige installationsphase-Präfix, äquivalent zu %d%p

%I

Der Install-Präfix des Elternpakets, äquivalent zu %D%P (das selbe wie %i außer innerhalb eines SplitOff)

%a

Der Pfad, wo sich die Patches befinden. Ab Fink-0.29.0 sollte diese Variable nicht mehr benutzt werden. Nutzen sie %{PatchFile}, um auf die .patch-Datei zuzugreifen. Die Unterstützung für %a wird in der Zukunft entfernt werden.

%b

Das Verzeichnis build, also /opt/sw/src/fink.build/gimp-1.2.1-1/gimp-1.2.1. Sie sollten nicht annehmen, dass sich %f in %p/src befindent, denn ein Nutzer kann dieses Verzeichnis über das Feld Buildpath in der Datei /opt/sw/etc/fink.conf ändern. Das innerste Verzeichnis wird nach dem Dateinamen der Quelle benannt oder dem Wert des Felds SourceDirectory (falls vorhanden) oder wird nicht verwendet wenn das Feld NoSourceDirectory auf true gesetzt ist.

Anmerkung: Nutzen sie dies nur, wenn es gar nicht anders geht. Das Verzeichnis build ist das aktuelle Verzeichnis, wenn Skripte ausgeführt werden; sie sollten in Kommandos relative Pfadnamen verwenden.

%c

Die configure Parameter: --prefix=%p plus alles, was mit ConfigureParams angegeben wurde. (Das Verhalten ist anders, wenn das Paket das Feld Type: perl gesetzt hat. In diesem Fall werden die Voreinstellungen für das Erstellen von Perl-Paketen anstatt von --prefix=%p in der Definition von %c verwendet.)

%m

Die Zeichenfolge für die Architektur der machine. Dies ist nicht länger durch den Typ der Maschine bestimmt, sondern eine Wahl des Nutzers bei der Installation zwischen den Architekturen, die auf der Hardware des Nutzers laufen können. Mögliche Werte sind 'powerpc' für PowerPC-Macs und 'i386' oder 'x86_64' für Intel-Macs. Die Auswahl 'x86_64' steht auf Intel-Macs nur zur Verfügung, wenn der Mac 64-bit Bibliotheken und Programme ausführen kann. (Dieser Werf wurde etwa in Fink-0.12 eingeführt, die aktuellen Beschreibung gilt für Fink-0.29.5 und später.)

%%

Das Zeichen Prozent (Ein Zeichen, das nicht erweitert wird, was auch immer danach folgt). Die Erweiterung erfolgt streng von links nach rechts. Damit hat %%n nichts mit dem Paketnamen zu tun, sondern bedeutet die Zeichenfolge %n. (In Fink-0.18.0 eingeführt)

%type_raw[type], %type_pkg[type], %type_num[type]

pseudo-hashes, die den Subtyp für den angegebenen type zurückgeben. Lesen sie die Dokumentation für das Feld Type weiter unten in diesem Dokument. Die Form _raw ist die exakte Zeichenfolge des Subtyps, während bei der Form _pkg alle Punkte entfernt wurden (entsprechend Finks Konventionen für Paketnamen mit Sprachversionen und andere kluge Verwendungen). (Eingeführt in einer post-0.19.2 CVS-Version von Fink.) Die Form -num wurde in Fink-0.26.0 eingeführt und entfernt alle Zeichen außer Zahlen aus dem Feld Type.

Beachten sie, dass (%type_pkg[type]) direkt als Bedingung verwendet werden kann, wenn das Feld Type den type als "Boolean" deklariert. (Der boolesche Wert ist wahr oder falsch, je nachdem wie der Subtype ausgerechnet wird.)

%{ni}, %{Ni}

Der invariante Teil des Paketnamens. Sie sind wie %n and %N, außer dass alle Teile von %type_pkg[] und %type_raw[] gelöscht sind. (Eingeführt in einer post-0.19.2 CVS-Version von Fink) Sie sollten %{ni} und %{Ni} verwenden, um Verwechslungen mit den Erweiterungen %n und %N zu verhindern.

%{default_script}

Nur in den Feldern PatchScript, CompileScript und InstallScript gültig. Es enthält den voreingestellten Inhalt dieser Felder. Der Wert hängt oft vom Feld Type ab und ist immer definiert (Er kann aber leer sein). Wird diese Erweiterung im InstallScript eines SplitOff (oder SplitOffN) verwendet, gibt sie die Voreinstellung der Eltern zurück, selbst wenn die Voreinstellung für das InstallScript in einem SplitOff-Paket leer ist. (Eingeführt in Fink-0.20.6)

%{PatchFile}

Der vollständige Pfad zu der Datei, die im Feld PatchFile angegeben ist. (Eingeführt in Fink-0.24.12)

%{PatchFileN}

Der vollständige Pfad zu der Datei, die im Feld PatchFileN angegeben ist. (Eingeführt in Fink-0.30.0)

%lib

Ist der Type: -64bit als -64bit definiert, wird dies unter der PowerPC-Architektur zu lib/ppc64 erweitert und zu lib/x86_64 unter der i386-Architektur (Der korrekte Speicherort für 64-bit Bibliotheken auf einem 32-bit System); anderfalls wird es zu lib erweitert. (Eingeführt in Fink-0.26.0)

Beachten sie, dass %lib im Feld ConfigureParams nicht erlaubt ist, außer wenn die InfoN-Ebene mindestens 4 ist.

Weiter: 3. Richtlinien zur Estellung von Paketen