Suivant: , Précédent: , Monter: Invoquer guix build   [Table des matières][Index]


7.1.2 Options de transformation de paquets

Un autre ensemble d’options de la ligne de commande supportés par guix build et aussi guix package sont les options de transformation de paquets. Ce sont des options qui rendent possible la définition de variantes de paquets — par exemple, des paquets construit à partir de sources différentes. C’est une manière simple de créer des paquets personnalisés à la volée sans avoir à taper les définitions de variantes de paquets (voir Définition des paquets).

--with-source=source
--with-source=paquet=source
--with-source=paquet@version=source

Utiles source comme la source de paquet, et version comme son numéro de version. source doit être un nom de fichier ou une URL, comme pour guix download (voir Invoquer guix download).

Lorsque paquet est omis, la commande utilisera le nom de paquet spécifié par la base de source — p. ex. si source est /src/guix-2.0.10.tar.gz, le paquet correspondant est guile.

De même, lorsque version est omis, la chaîne de version est inférée à partir de source ; dans l’exemple précédent, il s’agit de 2.0.10.

Cette option permet aux utilisateurs d’essayer des version des paquets différentes de celles fournies par la distribution. L’exemple ci-dessous télécharge ed-1.7.tar.g depuis un miroir GNU et l’utilise comme source pour le paquet ed :

guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz

En tant que développeur, --with-source permet de tester facilement des version bêta :

guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz

… ou pour construire un dépôt de gestion de version dans un environnement vierge :

$ git clone git://git.sv.gnu.org/guix.git
$ guix build guix --with-source=guix@1.0=./guix
--with-input=paquet=remplaçant

Remplace la dépendance sur paquet par une dépendance à remplaçant. paquet doit être un nom de paquet et remplaçant doit être une spécification de paquet comme guile ou guile@1.8.

Par exemple, la commande suivante construit Guix, mais remplace sa dépendance à la version stable actuelle de Guile par une dépendance à une ancienne version de Guile, guile@2.0 :

guix build --with-input=guile=guile@2.0 guix

C’est un remplacement récursif profond. Donc dans cet exemple, à la fois guix et ses dépendances guile-json (qui dépend aussi de guile) sont reconstruits avec guile@2.0.

Cette option est implémentée avec la procédure Scheme package-input-rewriting (voir package-input-rewriting).

--with-graft=paquet=remplaçant

Cette option est similaire à --with-input mais avec une différence importante : plutôt que de reconstruire la chaîne de dépendance complète, remplaçant est construit puis greffé sur les binaires qui référençaient initialement paquet. Voir Mises à jour de sécurité, pour plus d’information sur les greffes.

Par exemple, la commande ci-dessous greffe la version 3.5.4 de GnuTLS sur Wget et toutes ses dépendances, en remplaçant les références à la version actuelle de GnuTLS à laquelle ils se réfèrent actuellement :

guix build --with-graft=gnutls=gnutls@3.5.4 wget

Cela a l’avantage d’être bien plus rapide que de tout reconstruire. Mais il y a un piège : cela ne fonctionne que si paquet et remplaçant sont strictement compatibles — par exemple, s’ils fournissent une bibliothèque, l’interface binaire applicative (ABI) de ces bibliothèques doivent être compatibles. Si remplaçant est incompatible avec paquet, alors le paquet qui en résulte peut devenir inutilisable. À utilisez avec précaution !

--with-git-url=paquet=url

Construire paquet depuis le dernier commit de la branche master du dépôt sur url. Les sous-modules Git du dépôt sont récupérés, récursivement.

Par exemple, la commande suivante construit la bibliothèque Python NumPy avec le dernier commit de la branche master de Python lui-même :

guix build python-numpy \
  --with-git-url=python=https://github.com/python/cpython

Cette option peut aussi être combinée avec --with-branch ou --with-commit (voir plus bas).

Évidemment, comme cela utilise le dernier commit d’une branche donnée, le résultat d’une telle commande varie avec le temps. Néanmoins c’est une manière pratique pour reconstruire des piles logicielles entières avec le dernier commit d’un ou plusieurs paquets. C’est particulièrement pratique dans le contexte d’une intégration continue.

Les clones sont gardés dans un cache dans ~/.cache/guix/checkouts pour accélérer les accès consécutifs au même dépôt. Vous pourriez vouloir le nettoyer de temps en temps pour récupérer de l’espace disque.

--with-branch=paquet=branche

Construire paquet à partir du dernier commit de la branche. Si le champ source de paquet est une origine avec la méthode git-fetch (voir Référence des origines) ou un objet git-checkout, l’URL du dépôt est récupérée à partir de cette source. Sinon, vous devez utiliser --with-git-url pour spécifier l’URL du dépôt Git.

Par exemple, la commande suivante construit guile-sqlite3 à partir du dernier commit de sa branche master, puis construit guix (qui en dépend) et cuirass (qui dépend de guix) avec cette construction spécifique de guile-sqlite3 :

guix build --with-branch=guile-sqlite3=master cuirass
--with-commit=paquet=commit

Cela est similaire à --with-branch, sauf qu’elle construite à partir de commit au lieu du sommet d’une branche. commit doit être un identifiant SHA1 de commit Git valide.


Suivant: , Précédent: , Monter: Invoquer guix build   [Table des matières][Index]