Subject: [bug#49965] Correct Input type for Common Lisp packages

From: Guillaume Le Vaillant <[email-masked]>
Date: Thu, 12 Aug 2021 08:51:47 +0000

Charles <[email-masked]> skribis:

>> I think it's the philosophy of GNU Guix to use references to the store
>
> You're right, I see now: "propagated-inputs is useful is for languages that
> lack a facility to record the run-time search path". Common Lisp has
> asdf:*central-registry*. It still seems to me that propogated inputs is
> more intuitive and is more portable to guix on forgein linux distributions.
> I have a Centos system with guix package manager, and I had to install every
> dependency manually for some packages.
>
> Also it still doesn't fully work for me. I deleted my custom init-file.
> Attatched is my shell session where I tryto use the sbcl-cl-str package.
> In short: package cannot be found in ad-hoc environment; package is found
> if installed, but is compiled with an newer version of sbcl: weird, but also
> probably unrelated.

From the error in your shell session:

--8<---------------cut here---------------start------------->8---
ASDF could not load str because
#<SB-SYS:FD-STREAM for "file /gnu/store/mn1b8pkxfv081m2crjjh1jk049gxq165-sbcl-cl-ppcre-2.1.1/lib/common-lisp/sbcl/cl-ppcre/packages.fasl" {100648B483}>
is a fasl file compiled with SBCL 2.1.6, and can't be loaded into SBCL 2.1.5.
--8<---------------cut here---------------end--------------->8---

it looks like your are trying to use the SBCL from the foreign
distribution (version 2.1.5) to load libraries compiled with the SBCL
from Guix (version 2.1.6).

I think this is also why it fails to find dependencies. The ASDF used by
the Common Lisp implementations packaged in Guix has a little patch
making it able to find dependencies in "/gnu/store/...". The foreign
SBCL will not have that automatically (it would have to load the
"share/common-lisp/source/asdf/asdf.lisp" file from the cl-asdf
package to use the patched ASDF).

You should add sbcl to your Guix profile/environment as it will be able
to find the dependencies and use the precompiled libraries.

If you really need to use the SBCL from the foreign distribution, you
could use the source cl-xxx packages instead of the precompiled
sbcl-xxx packages to avoid SBCL version mismatch. However this means
that the foreign SBCL will have to compile everything (usually into
"$HOME/.cache/common-lisp/...").