Mon Mar 13 20:03:50 2017 UTC

Quelles sont les connaissances nécessaires pour contribuer ?

Pour pouvoir contribuer il ne faut pas être un programmeur averti. Quelques notions rudimentaires du langage BASH suffisent.

Si vous n'avez aucune idée du langage BASH, cet article vous expliquera les notions de base pour réaliser une recette sans se prendre la tête.

C'est le langage BASH qui est utilisé pour la rédaction d'une recette et la génération du paquet qui en découle. Le fait que BASH soit un langage de programmation peut effrayer plus d'un utilisateur potentiel pensant: "Je ne sais pas programmer..."

Cela ne devrait pas être le cas pour trois raisons:

  • BASH est un langage interprêté et non compilé, c'est à dire que les commandes tapées au clavier (ou lues depuis un fichier) sont directement exécutées sans qu'il ne soit necessaire de construire un programme complet.
  • La syntaxe de BASH est très simple et intuitive à l'utilisation.
  • Une recette et la génération du paquet binaire qui en découle utilisent que très rarement des options compliquées du langage BASH.

Alors on y va Wink pour un petit cours sur la langage de programmation BASH.

Cet article va vous expliquer les quelques notions de base du langage qu'il est bon de savoir si vous souhaitez comprendre la syntaxe d'une recette:

Déclaration d'une variable

Déclarer une variable se limite à ceci:

name=monpaquet

On déclare la variable name en utilisant le signe égal et la valeur de la variable est à droite du signe égal: monpaquet

Utilisation d'une variable

On a appris comment déclarer une variable, c'est bien joli, mais comment fait-on pour l'utiliser, c'est à dire récupérer son contenu ?

Pour pouvoir récupérer le contenu d'une variable on utilise le sigle dollard ($) et éventuellement les accolades. Deux formes sont valides:

${name}
$name

Il est recommandé d'utiliser la première forme car si vous utilisez un nom de variable avec des sous-tirets, l'interprétation ne sera pas correcte:

name=xorg-libx11
_name=libX11
$name         # interprétation correcte
${_name}      # interprétation correcte
$_name        # mauvaise interprétation, ne fonctionnera pas

Pour voir le résultat de cette commande je vous propose de créer un petit fichier appelé DeclarVar comme suit:

name=kernel
echo "La variable name contient la valeur: ${name}"

Lancez maintenant la commande:

sh DeclareVar
La variable name contient la valeur: kernel

Variables prédéfinies utilisables dans une recette

Lorsque vous construisez une recette vous aurez à votre disposition toute une série de variables prédéfinies.

PKG: Sans doute la plus utilisée, elle définit le dossier de destination des fichiers compilés. C'est donc dans ce dossier que se trouve la structure des fichiers prêt à être empaquetés.

SRC: Cette variable définit le dossier où toutes les sources sont extraites. Elle est donc aussi très utile lorsqu'il faut parcourir des sous-dossiers et revenir à la fin d'une boucle au dossier de départ, c'est à dire dans le dossier défini par SRC. C'est aussi la variable qui définit le dossier courant dans fonction principale de la recette.

MAKEFLAGS: Cette variable n'est pas très souvent utilisée. Elle est initialisée dans le fichier de configuration de pkgmk. On verra ça en détail dans un autre article, il faut juste savoir pour l'instant qu'elle permet d'influencer la compilation parallèle.

Il en existe d'autres mais personnellement je n'en vois pas l'utilitée dans la construction d'une recette.

Déclaration d'un tableau

Pour déclarer un tableau de chaîne (ou autre) on va ajouter des parenthèses:

source=(firefox.png firefox.desktop)

Le tableau source contient 2 variables: firefox.png et firefox.desktop. Si on prend le tableau source de la recette du kernel, on a un joli exemple:

source=(http://download.virtualbox.org/virtualbox/${VB_VERSION}/VirtualBox-${VB_VERSION}-${VB_BUILD}-Linux_${VB_ARCH}.run
	http://fr.download.nvidia.com/XFree86/Linux-${_ARCH}/${NVIDIA_VERSION}/NVIDIA-Linux-${_ARCH}-${NVIDIA_VERSION}.run
	http://www.kernel.org/pub/linux/kernel/v3.0/linux-${_BaseVersion}.tar.bz2 config_64 config)

Chaque ligne est une variable que l'on peut appeler en utilisant la syntaxe:

echo "$(source[1])"

Vous noterez que chaque variable peut à son tour contenir d'autres variables pour autant qu'elles soient définies au préalable.

Déclaration d'une fonction

Pour déclarer une fonction, c'est presque aussi simple, on utilise les parenthèses pour spécifier le nom de la fonction, la fonction est toujours délimitée par les accolades { et }. Petit exemple:

build() {
cd $name-$version
./configure --prefix=/usr
make
make DESTDIR=$PKG install
}

Comme on peut le voir, c'est bel et bien le contenu d'une recette minimale (sans la déclaration des variables). On peut y voir l'utilisation incontournable de la variable PKG.