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


7.1 Guide de démarrage

Comment entreprendre la “Guixification” d’un dépôt ? La première étape, comme vu précédemment, consiste à ajouter un fichier guix.scm à la racine du dépôt. Nous prendrons comme exemple Guile au long de chapitre. Guile est (principalement) écrit en Scheme et en C, possède plusieurs dépendances—Une suite d’outils de compilation C, des bibliothèques C, Autoconf et sa clique, LaTeX, et ainsi de suite… Le fichier guix.scm ressemblera à une définition de paquet traditionnelle (voir Définition des paquets dans Manuel de référence de GNU Guix) sans le define-public :

;; The ‘guix.scm’ file for Guile, for use by ‘guix shell’.

(use-modules (guix)
             (guix build-system gnu)
             ((guix licenses) #:prefix license:)
             (gnu packages autotools)
             (gnu packages base)
             (gnu packages bash)
             (gnu packages bdw-gc)
             (gnu packages compression)
             (gnu packages flex)
             (gnu packages gdb)
             (gnu packages gettext)
             (gnu packages gperf)
             (gnu packages libffi)
             (gnu packages libunistring)
             (gnu packages linux)
             (gnu packages pkg-config)
             (gnu packages readline)
             (gnu packages tex)
             (gnu packages texinfo)
             (gnu packages version-control))

(package
  (name "guile")
  (version "3.0.99-git")                          ;funky version number
  (source #f)                                     ;no source
  (build-system gnu-build-system)
  (native-inputs
   (append (list autoconf
                 automake
                 libtool
                 gnu-gettext
                 flex
                 texinfo
                 texlive-base                 ;for "make pdf"
                 texlive-epsf
                 gperf
                 git
                 gdb
                 strace
                 readline
                 lzip
                 pkg-config)

           ;; When cross-compiling, a native version of Guile itself is
           ;; needed.
           (if (%current-target-system)
               (list this-package)
               '())))
  (inputs
   (list libffi bash-minimal))
  (propagated-inputs
   (list libunistring libgc))

  (native-search-paths
   (list (search-path-specification
          (variable "GUILE_LOAD_PATH")
          (files '("share/guile/site/3.0")))
         (search-path-specification
          (variable "GUILE_LOAD_COMPILED_PATH")
          (files '("lib/guile/3.0/site-ccache")))))
  (synopsis "Scheme implementation intended especially for extensions")
  (description
   "Guile is the GNU Ubiquitous Intelligent Language for Extensions,
and it's actually a full-blown Scheme implementation!")
  (home-page "https://www.gnu.org/software/guile/")
  (license license:lgpl3+))

Même si ça peut paraître fastidieux, une personne souhaitant bidouiller Guile n’aura désormais qu’à exécuter :

guix shell

pour obtenir un environnement d’exécution avec toutes les dépendances de Guile : celle listées ci-dessus, mais également les dépendances implicites : la suite d’outils GCC, GNU Make, sed, grep, etc. Voir Invoquer guix shell dans Manuel de référence de GNU Guix pour plus d’informations sur guix shell.

La recommandation du chef : Nous suggérons la création d’environnements de développement comme suit :

guix shell --container --link-profile

… ou plus brièvement :

guix shell -CP

Nous obtenons un conteneur avec toutes les dépendances qui apparaissent dans $HOME/.guix-profile qui permet de profiter des caches comme le config.cache (voir Cache Files dans Autoconf) ainsi que des noms de fichier absolus stockés dans les éventuels Makefile autogénérés ou autres. L’exécution de l’environnement logiciel dans un conteneur apporte la garantie que seuls les dépendances de Guix et le dossier courant sont accessibles ; aucun élément du système ne peut interférer avec l’environnement de développement ainsi créé.


Suivant: Niveau 1 : Compiler avec Guix, Monter: Développement logiciel   [Table des matières][Index]