Crafting happiness with Free Software & Hardware

Empaqueter ac-geiser pour #Guix (4)

#guix #package #screencast #français
Logo Guix

Je documente ici la poursuite du travail de l'article précédent. Ces articles font partie d'une série sur l'empaquetage de logiciels pour le gestionnaire de paquet Guix.

Pour démarrer cette nouvelle session de travail, je me replace dans un environnement de développement isolé :

$ guix environment --pure guix

Je reprends les commandes de la dernière étape de l'article précédent :

[dev]$ echo '(use-modules (guix packages) (guix build-system emacs) (guix licenses)) (define-public ac-geiser (package (name "") (version "") (source origin) (build-system emacs-build-system) (synopsis "") (description "") (license bsd-3) (home-page "")))' > /tmp/emacs-ac-geiser.scm
[dev]$ ./pre-inst-env guix build -f /tmp/emacs-ac-geiser.scm
guix build: error: origin: source expression failed to match any pattern

À priori, cette portion de la définition pose problème (source origin). Je vais voir ce que me dit la documentation à ce sujet. Effectiovement, origin est un objet et pas un symbole. Je modifie la définition pour coller avec ça :

[dev]$ echo '(use-modules (guix packages) (guix build-system emacs) (guix licenses)) (define-public ac-geiser (package (name "") (version "") (source (origin)) (build-system emacs-build-system) (synopsis "") (description "") (license bsd-3) (home-page "")))' > /tmp/emacs-ac-geiser.scm
[dev]$ ./pre-inst-env guix build -f /tmp/emacs-ac-geiser.scm
/tmp/emacs-ac-geiser.scm:1:137: error: (origin): missing field initializers (uri method sha256)

Guix m'indique que l'objet origin est au moins constitué de trois champs obligatoires : (uri method sha256). Je vais les passer brutalement à origin et voir ce que Guix me dit :

[dev]$ echo '(use-modules (guix packages) (guix build-system emacs) (guix licenses)) (define-public ac-geiser (package (name "") (version "") (source (origin uri method sha256)) (build-system emacs-build-system) (synopsis "") (description "") (license bsd-3) (home-page "")))' > /tmp/emacs-ac-geiser.scm
[dev]$ ./pre-inst-env guix build -f /tmp/emacs-ac-geiser.scm
/tmp/emacs-ac-geiser.scm:1:137: error: uri: invalid field specifier

uri n'est pas spécifié. Je vais vérifier dans la documentation de origin comment spécifier ce champ. Il s'agit d'une chaîne de caractères. Essayons ça :

[dev]$ echo '(use-modules (guix packages) (guix build-system emacs) (guix licenses)) (define-public ac-geiser (package (name "") (version "") (source (origin (uri "") method sha256)) (build-system emacs-build-system) (synopsis "") (description "") (license bsd-3) (home-page "")))' > /tmp/emacs-ac-geiser.scm
[dev]$ ./pre-inst-env guix build -f /tmp/emacs-ac-geiser.scm
/tmp/emacs-ac-geiser.scm:1:137: error: method: invalid field specifier

Bingo, maintenant, je peux avancer avec le deuxième champ : method. La documetation me dit que c'est une procédure qui va récupérer les sources du logiciel soit depuis une URL, soit depuis un dépôt git. Dans mon cas, ce sera un dépôt git. Ce que me dit aussi la documentation, c'est que pour un dépôt git, uri doit être un objet git-reference et pas une chaîne de caratère comme je l'ai spécifié à l'étape d'avant. Je vais reprendre ça avant d'avancer sur method.

[dev]$ echo '(use-modules (guix packages) (guix build-system emacs) (guix licenses)) (define-public ac-geiser (package (name "") (version "") (source (origin (uri (git-reference (url "") (commit ""))) method sha256)) (build-system emacs-build-system) (synopsis "") (description "") (license bsd-3) (home-page "")))' > /tmp/emacs-ac-geiser.scm
[dev]$ ./pre-inst-env guix build -f /tmp/emacs-ac-geiser.scm
/tmp/emacs-ac-geiser.scm:1:137: error: method: invalid field specifier

La construction de mon uri semble convenir Guix. Maintenant, je vais m'occuper du champ method. La documentation me dit que method, pour récupérer les sources d'un logiciel via git doit prendre la valeur git-fetch :

[dev]$ echo '(use-modules (guix packages) (guix build-system emacs) (guix licenses)) (define-public ac-geiser (package (name "") (version "") (source (origin (uri (git-reference (url "") (commit ""))) (method git-fetch) sha256)) (build-system emacs-build-system) (synopsis "") (description "") (license bsd-3) (home-page "")))' > /tmp/emacs-ac-geiser.scm
[dev]$ ./pre-inst-env guix build -f /tmp/emacs-ac-geiser.scm
/tmp/emacs-ac-geiser.scm:1:137: error: sha256: invalid field specifier

Cool, la spécification de champ method est OK pour Guix.

Mais je m'arrête là pour aujourd'hui. Je me pencherai dessus dans un prochain article. Voici la définition obtenue à ce stade :

(use-modules 
 (guix packages) 
 (guix build-system emacs) 
 (guix licenses)) 

(define-public ac-geiser 
  (package 
   (name "") 
   (version "") 
   (source 
    (origin 
     (uri (git-reference 
	   (url "") (commit "")))
     (method git-fetch) 
     sha256))
   (build-system emacs-build-system) 
   (synopsis "") 
   (description "") 
   (license bsd-3) 
   (home-page "")))

Merci beaucoup d'avoir lu cet article !
N'hésites pas à me donner ton avis, laisser un commentaire, ou poser une question via :
e-mail: jeremy AT korwin-zmijowski DOT fr
Mastodon: @jeko@framapiaf.org
Twitter: @JeremyKorwin
Abonnes-toi pour ne pas manquer les prochains articles :
via une plateforme fédérée (ex: mastodon) @jeko@write.as
via RSS https://jeko.write.as/feed/

Et encore plus important, partages le blog et dis à tes amis que c'est le meilleur blog de l'histoire du logiciel libre ! Sans dec'