Suivant: , Précédent: , Monter: Développement logiciel   [Table des matières][Index]


7.2 Niveau 1 : Compiler avec Guix

Maintenant que nous avons notre définition de paquet (voir Guide de démarrage), pour ne pas en profiter pour compiler Guile avec Guix ? Nous avions omis le champ source car guix shell ne se préoccupe que des dépendances du paquet—afin de mettre en place l’environnement de développement.

Pour compiler le paquet il nous faut remplir le champ source avec quelque chose du style :

(use-modules (guix)
             (guix git-download)  ;for ‘git-predicate’
             )

(define vcs-file?
  ;; Return true if the given file is under version control.
  (or (git-predicate (current-source-directory))
      (const #t)))                                ;not in a Git checkout

(package
  (name "guile")
  (version "3.0.99-git")                          ;funky version number
  (source (local-file "." "guile-checkout"
                      #:recursive? #t
                      #:select? vcs-file?))
  )

Voici la différence entre la version actuelle et la section précédente :

  1. Nous avons ajouté (guix git-download) à la liste des modules importés pour la procédure git-predicate.
  2. Nous avons défini la procédure vcs-file? qui nous permet de savoir si un fichier est versionné. Pour faire bonne mesure nous répondons toujours oui lorsque nous ne sommes pas dans un dépôt Git.
  3. Nous remplissons la source avec un local-file—une copie récursive des fichiers versionnés (avec le #:select?) du dossier courant (".")

À partir de là, notre guix.scm prend un second rôle : il nous permet de compiler le logiciel avec Guix. L’intérêt réside en ce que cette compilation est “pure”—nous sommes certains qu’aucun élément de notre copie de travail ou du système n’interfère avec la compilation–et de tester plein de choses. Premièrement, nous pouvons réaliser une compilation native standard :

guix build -f guix.scm

Mais nous pouvons également compiler pour un autre système (après avoir mis en place voir Réglages du déchargement du démon dans Manuel de référence de GNU Guix ou voir Émulation transparente avec QEMU dans Manuel de référence de GNU Guix) :

guix build -f guix.scm -s aarch64-linux -s riscv64-linux

… ou en compilation croisée :

guix build -f guix.scm --target=x86_64-w64-mingw32

Nous pouvons également utiliser les transformations de paquets pour tester des variantes (voir Options de transformation de paquets dans Manuel de référence de GNU Guix) :

# What if we built with Clang instead of GCC?
guix build -f guix.scm \
  --with-c-toolchain=guile@3.0.99-git=clang-toolchain

# What about that under-tested configure flag?
guix build -f guix.scm \
  --with-configure-flag=guile@3.0.99-git=--disable-networking

Pratique !


Suivant: Niveau 2 : Le dépôt comme canal, Précédent: Guide de démarrage, Monter: Développement logiciel   [Table des matières][Index]