Fink

Paquets - 2. Descriptions de paquets

2.1 Arborescence

Les descriptions de paquets sont lues à partir des répertoires finkinfo situés dans le répertoire /opt/sw/fink/dists. La valeur de la variable "Trees" dans /opt/sw/etc/fink.conf contrôle quels répertoires sont lus. Le nom des fichiers de description de paquets doit être identique au nom complet du paquet suivi de l'extension ".info". À partir de fink 0.26.0, il existe plusieurs façons de spécifier le nom du fichier ; il est recommandé d'utiliser le nom le plus court compatible avec les autres paquets nécessaires. Le nom du fichier est de la forme : nom invariant du paquet, suivi éventuellement d'un tiret et de l'architecture, suivi éventuellement d'un tiret et de la distribution, suivi éventuellement d'un tiret et de la version ou du couple version-révision, et terminé par ".info". Les éléments "architecture" et "distributtion" ne sont autorisés que si leurs champs sont présents dans le paquet et qu'ils fournissent une seule et unique valeur.

L'arborescence des descriptions de paquets comprend plusieurs niveaux de répertoires. En voici la liste de la racine au bas de l'arborescence :

2.2 Format de fichier

Les fichiers de description sont de simples listes de paires clés-valeurs, appelés également "champs". Chaque ligne commence par une clé, suivie de deux-points et d'une espace, puis de la valeur de clé :

clé: valeur

Il y a deux notations pour les champs qui peuvent s'étendre sur plusieurs lignes.

La notation recommandée est basée sur la syntaxe "here-document" - "données ci-après", utilisée dans les scripts shell. Dans cette syntaxe, la première ligne est composée de la clé, suivie du symbole redoublé << comme valeur. Toutes les lignes suivantes sont considérées comme valeurs, jusqu'à la rencontre d'une ligne ne contenant que <<. L'exemple ci-dessus ressemble maintenant à :

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
<<

Avec ce format, l'indentation est optionnelle, mais vous pouvez l'utiliser pour améliorer la lisibilité.

On peut imbriquer plusieurs "here-document". Cela arrive souvent dans un champ SplitOff ou SplitOffN. Ces champs contiennent d'autres champs (à lignes multiples), et cette syntaxe permet aux sous-champs de contenir eux mêmes des lignes multiples. Le même code de terminaison << est utilisé pour les sous-champs utilisant la syntaxe "here-document". En voici un exemple :

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

Une notation plus ancienne, obsolète, est basée sur la méthode de pliage des headers du RFC 822. Une ligne commençant par une espace est traitée comme la continuation de la ligne précédente. Exemple :

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

Notez l'indentation obligatoire des lignes.

Dans les deux formats, les lignes vides ainsi que celles débutant avec un dièse (#) sont ignorées. Dans Fink, les clés (noms des champs) ne sont pas sensibles à la casse, vous pouvez donc écrire indifféremment : InstallScript, installscript ou INSTALLSCRIPT. Cependant, on conseille la première forme, où chaque initiale de mot est mise en majuscules, pour des raisons de lisibilité. Certains champs prennent une valeur booléenne ; sont traitées comme vraies, les valeurs suivantes : "true", "yes", "on", "1" (toutes insensibles à la casse) ; toute autre valeur est traitée comme fausse.

2.3 Raccourcis %

Pour vous rendre la vie plus facile, Fink gère un jeu de raccourcis sur certains champs. Pour lever toute ambiguïté, vous pouvez utiliser des accolades autour des caractères qui doivent être considérés comme des raccourcis. Par exemple, %{n} a la même signification que %n. Les raccourcis disponibles sont les suivants :

RaccourcisSignification
%n

le nom du paquet actif

%N

Nom du paquet parent (le même que %n à moins d'être dans un SplitOff)

Note : si le champ Package d'un paquet parent contient %type_*[], la valeur de ces raccourcis sera incluse dans %N dans un bloc SplitOff (étant donné qu'elle est incluse dans %n dans le paquet parent).

%e

ère du paquet

%v

version du paquet. Notez que l'ère ne fait partie de %v.

%V

the full package Version, which automatically includes the Epoch if present. Note that this percent expansion is only available for packages whose InfoN level is at least 4.

%r

révision du paquet

%f

nom complet du paquet, c'est-à-dire : %n-%v-%r. Notez que l'ère ne fait partie de %f.

%p, %P

préfixe d'installation de Fink, par exemple : /opt/sw. Vous ne devez pas partir du principe que Fink est installé dans /opt/sw, utilisez %p pour obtenir le bon chemin.

%d

répertoire dans lequel le paquet est construit, par exemple : /opt/sw/src/fink.build/root-gimp-1.2.1-1. Ce répertoire temporaire sert de racine d'arborescence lors de la phase d'installation de la compilation d'un paquet. Vous ne devez pas partir du principe que root-%f est dans %p/src, car l'utilisateur peut changer ce répertoire en utilisant le champ Buildpath de /opt/sw/etc/fink.conf.

%D

répertoire Dans lequel le paquet parent est construit (le même que %d à moins d'être dans un SplitOff)

%i

préfixe complet de la phase d'installation, équivalent à %d%p

%I

préfixe d'Installation du paquet parent, équivalent à %D%P (identique à %i à moins d'être dans un SplitOff)

%a

chemin des rustines

%b

répertoire de compilation, exemple : /opt/sw/src/fink.build/gimp-1.2.1-1/gimp-1.2.1. Vous ne devez pas partir du principe que %f est dans %p/src, car l'utilisateur peut changer ce répertoire en utilisant le champ Buildpath de /opt/sw/etc/fink.conf. Le dernier sous-répertoire tire son nom du champ Source, ou du champ SourceDirectory (si ce champ existe), ou bien n'existe pas si le champ NoSourceDirectory a pour valeur true (vrai).

Note : ne l'utilisez que s'il n'y a pas d'autres possibilités. Le répertoire de compilation est le répertoire actif lorsque les scripts sont exécutés ; vous devez utiliser des chemins relatifs dans les commandes.

%c

paramètres pour configure : --prefix=%p plus tout autre élément spécifié avec ConfigureParams. Dans le cas d'un paquet qui comporte le Type: perl, les drapeaux par défaut de construction d'un paquet perl sont utilisés à la place de --prefix=%p.

%m

chaîne spécifiant l'architecture de la machine. Identique au résultat de la commande uname -p. Les valeurs habituelles sont 'powerpc' pour les machines ppc and 'i386' pour les machines x86. Introduit dans les versions CVS de fink postérieures à la version 0.12.1.

%%

signe pourcentage (%) (ce signe n'est pas interprété en fonction de ce qui le suit). L'interprétation se fait de gauche à droite, si bien que %%n n'a rien à voir avec le nom du paquet, mais représente la chaîne %n. (Introduit dans fink-0.18.0).

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

fonction de pseudo-hachage retournant le sous-type du type donné. Voir la documentation sur le champ Type plus bas. La forme _raw correspond à la chaîne précise du sous-type, tandis que la forme _pkg correspond à la même chaîne dont tous les points auraient été enlevés (suivant les conventions de nommage des paquets - language-version - de Fink et pour d'autres usages réservés aux experts). (Introduit dans une version CVS de Fink ultérieure à la version 0.19.2). La forme _num a été introduit dans la version 0.26.0 de fink et supprime tous les caractères non numériques du champ Type.

%{ni}, %{Ni}

la partie invariante du nom du paquet. Identiques à %n et %N, à l'exception près que tous les %type_pkg[] et %type_raw[] sont occultés. (Introduit dans une version CVS de Fink ultérieure à la version 0.19.2). Vous devez utiliser %{ni} et %{Ni} pour éviter de possibles confusions avec les raccourcis %n et %N.

%{default_script}

Uniquement valide dans les champs PatchScript, CompileScript et InstallScript. Correspond au contenu par défaut de ce type de champ. Sa valeur dépend souvent du champ Type et est toujours définie (même si elle vide). Lorsque ce raccourci est utilisé dans le champ InstallScript d'un SplitOff ou d'un SplitOffN, son interprétation correspond à la valeur par défaut du champ parent, bien que la valeur par défaut de InstallScript dans un SplitOff soit vide. (Introduit dans fink-0.20.6)

%{PatchFile}

Chemin complet du fichier indiqué dans le champPatchFile. Introduit dans la version 0.24.12 de fink.

%lib

Si le champ Type: -64bit a pour valeur -64bit, ce raccourci permet de définir le répertoire des bibliothèques comme étant le répertoire lib/ppc64 sur machines powerpc, ou lib/x86_64 sur machines intel (répertoires standards pour les bibliothèques 64-bit). Dans le cas contraire, le raccourci définit le répertoire lib comme répertoire pour les bibliothèques. Introduit dans la version 0.20.6 de fink.

Note that %lib is not permitted in the ConfigureParams field unless the InfoN level is at least 4.

Suite: 3. Règles de distribution des paquets