Subject: bug#59864: emacs-guix

From: Ludovic Courtès <[email-masked]>
Date: Wed, 07 Dec 2022 18:49:44 +0100

Hi,

Amade Nemes Gmail <[email-masked]> skribis:

> I've updated my guix version today and found that most emacs-guix
> interactive commands no longer work. For example, guix-packages-by-name throws:
>
> guix-geiser-eval: Error in evaluating guile expression: ice-9/boot-9.scm:1685:16: In procedure raise-exception:
> In procedure package-license: Wrong type argument: #<package [email-masked] gnu/packages/abduco.scm:28 7f45f9d11f20>

I think this is caused by an ABI incompatibility: the ‘guix’ package is
currently at 1.4.0rc1, which doesn’t have the change made in:

  https://issues.guix.gnu.org/59390

However, current ‘master’ does have this change.

The ‘emacs-guix’ package is built against the ‘guix’ package; it has
inlined calls like (package-name p) to something like:

--8<---------------cut here---------------start------------->8---
scheme@(guile-user)> ,optimize (package-name p)
$8 = (let ((s p))
  (if (eq? (struct-vtable s)
           (@@ (guix packages) <package>))
    (struct-ref s 0)
    (throw 'wrong-type-arg
           'package-name
           "Wrong type argument: ~S"
           (list s)
           (list s))))
--8<---------------cut here---------------end--------------->8---

But on ‘master’, <package> is a macro, not a record type descriptor;
thus, the (eq? …) expression is always false.

I’ll fix this by upgrading the ‘guix’ package and/or merging the (guix
records) bit in the ‘version-1.4.0’ branch.

Thanks,
Ludo’.