Subject: bug#44548: SBCL build system fails to pacakge cl-environments, generic-cl.

From: Pierre Neidhardt <[email-masked]>
Date: Tue, 10 Nov 2020 10:34:48 +0100

Hi!

I'm trying to package generic-cl on staging where the SBCL build system
has been revamped by Guillaume.

--8<---------------cut here---------------start------------->8---
(define-public sbcl-generic-cl
  (package
    (name "sbcl-generic-cl")
    (version "0.7.1")
    (source
     (origin
       (method git-fetch)
       (uri (git-reference
             (url "https://github.com/alex-gutev/generic-cl")
             (commit (string-append "v" version))))
       (file-name (git-file-name name version))
       (sha256
        (base32 "1jjg1d221a667wacbrh7abswrkzq6c9qwapdfh0frzl0la9xjz2f"))))
    (build-system asdf-build-system/sbcl)
    (inputs
     `(("agutil" ,sbcl-agutil)
       ("alexandria" ,sbcl-alexandria)
       ("anaphora" ,sbcl-anaphora)
       ("arrows" ,sbcl-arrows)
       ("cl-custom-hash-table" ,sbcl-custom-hash-table)
       ("static-dispatch" ,sbcl-static-dispatch)
       ("trivia" ,sbcl-trivia)))
    (native-inputs
     `(("prove" ,sbcl-prove)))
    (home-page "https://alex-gutev.github.io/generic-cl/")
    (synopsis "")
    (description "")
    (license license:expat)))
--8<---------------cut here---------------end--------------->8---

It fails with

--8<---------------cut here---------------start------------->8---
; wrote /gnu/store/hkr132gc9ra2pnx16lbvl66pn86w11nx-sbcl-generic-cl-0.7.1/.cache/common-lisp/sbcl-2.0.10-linux-x64/gnu/store/d99q6jgx4xqw7fnk8vhb1xaqqc4h65fl-cl-environments-0.2.3-1.bbcd958/share/common-lisp/source/cl-environments/src/tools/types-tmp1CXFJSK9.fasl
; compilation finished in 0:00:00.012
Unhandled SB-INT:SIMPLE-FILE-ERROR in thread #<SB-THREAD:THREAD "main thread" RUNNING
                                                {1008248303}>:
  Error opening #P"/gnu/store/jzwgprixssmzm8yc76gh0ir1cw9myr4b-sbcl-static-dispatch-0.3-1.6243afc/lib/common-lisp/sbcl/static-dispatch/src/package-tmpX4BRKI0R.fasl":

    Permission denied
--8<---------------cut here---------------end--------------->8---

My suspicion is that generic-cl depends on sbcl-static-dispatch, which
depends on cl-environments, which is a _source_ package and not an SBCL package.

Indeed, I fail to package sbcl-cl-environments:

--8<---------------cut here---------------start------------->8---
(define-public sbcl-cl-environments
  (let ((commit "bbcd958a9ff23ce3e6ea5f8ee2edad9634819a3a")) ; No version in 2 years.
    (package
      (name "sbcl-cl-environments")
      (version (git-version "0.2.3" "1" commit))
      (source
       (origin
         (method git-fetch)
         (uri (git-reference
               (url "https://github.com/alex-gutev/cl-environments")
               (commit commit)))
         (file-name (git-file-name name version))
         (sha256
          (base32
           "1pfxl3vcdrb4mjy4q4c3c7q95kzv6rfjif3hzd5q91i9z621d64r"))))
      (build-system asdf-build-system/sbcl)
      (inputs
       `(("alexandria" ,sbcl-alexandria)
         ("anaphora" ,sbcl-anaphora)
         ("collectors" ,sbcl-collectors)
         ("optima" ,sbcl-optima)))
      (native-inputs
       `(("prove" ,sbcl-prove)))
      (home-page "https://github.com/alex-gutev/cl-environments")
      (synopsis "Implements the Common Lisp standard environment access API")
      (description "This library provides a uniform API, as specified in Common
Lisp the Language 2, for accessing information about variable and function
bindings from implementation-defined lexical environment objects.  All major
Common Lisp implementations are supported, even those which don't support the
CLTL2 environment access API.")
      (license license:expat))))
--8<---------------cut here---------------end--------------->8---

It errors out with

--8<---------------cut here---------------start------------->8---
; file: /gnu/store/xhgnh1yx8z999dx5qnxc0h3iwh1s836j-sbcl-cl-environments-0.2.3-1.bbcd958/share/common-lisp/sbcl/cl-environments/src/common/macro-util.lisp
; in: DEFMACRO! MATCH-STATE
;     (CL-ENVIRONMENTS.UTIL:LET-IF ((CL-ENVIRONMENTS.UTIL::START
;                                    (SECOND CL-ENVIRONMENTS.UTIL::STATES) :START)
;                                   (CL-ENVIRONMENTS.UTIL::BODY
;                                    (CDDR CL-ENVIRONMENTS.UTIL::STATES)
;                                    CL-ENVIRONMENTS.UTIL::STATES))
;         (EQ (FIRST CL-ENVIRONMENTS.UTIL::STATES) :START)
;       `(LABELS ((,CL-ENVIRONMENTS.UTIL::G!NEXT
;                     (,CL-ENVIRONMENTS.UTIL::FROM-STATE
;                      ,CL-ENVIRONMENTS.UTIL::G!FORCE ,CL-ENVIRONMENTS.UTIL::G!ARG)
;                   (OPTIMA:MULTIPLE-VALUE-MATCH #
;                     ,@#)))
;          (,CL-ENVIRONMENTS.UTIL::G!NEXT ,CL-ENVIRONMENTS.UTIL::START NIL
;           ,CL-ENVIRONMENTS.UTIL::ARG)))
; 
; caught ERROR:
;   during macroexpansion of
;   (LET-IF (# #)
;       (EQ # :START)
;     ...).
;   Use *BREAK-ON-SIGNALS* to intercept.
;   
;    The function CL-ENVIRONMENTS.UTIL::GENSYMS is undefined.
--8<---------------cut here---------------end--------------->8---

Guillaume, any clue what's going on?

--
Pierre Neidhardt
https://ambrevar.xyz/