Re: cl-gsll fails to load
Could you try the attached patches and see if things work for you with a command such as: --8<---cut here---start->8--- guix shell -C sbcl sbcl-gsll gcc-toolchain -- ... --8<---cut here---end--->8--- There may be a way to patch our CFFI package to fix the links to all the GCC toolchain things, which would allow us to remove gcc-toolchain in the command above, but it will probably not be super easy. From 7613cc6c054bfc5dc66f657aeb2987a22c342b80 Mon Sep 17 00:00:00 2001 From: Guillaume Le Vaillant Date: Fri, 10 Dec 2021 15:56:07 +0100 Subject: [PATCH 1/2] gnu: cl-cffi: Fix some paths. CFFI can require pkg-config and a GCC toolchain at runtime. This patch improves the use of the source cl-cffi package from a REPL, but it's not perfect and using cl-cffi in an environment without explicitly adding gcc-toolchain to it might not work. * gnu/packages/lisp-xyz.scm (sbcl-cffi)[native-inputs]: Move pkg-config to ... [inputs]: .. here. [arguments]: Update 'fix-paths' phase. --- gnu/packages/lisp-xyz.scm | 23 +++ 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm index 635f8e48cb..9f06be28ee 100644 --- a/gnu/packages/lisp-xyz.scm +++ b/gnu/packages/lisp-xyz.scm @@ -2782,10 +2782,10 @@ (define-public sbcl-cffi `(("alexandria" ,sbcl-alexandria) ("babel" ,sbcl-babel) ("libffi" ,libffi) + ("pkg-config" ,pkg-config) ("trivial-features" ,sbcl-trivial-features))) (native-inputs `(("bordeaux-threads" ,sbcl-bordeaux-threads) - ("pkg-config" ,pkg-config) ("rt" ,sbcl-rt))) (arguments '(#:phases @@ -2799,10 +2799,25 @@ (define-public sbcl-cffi (add-after 'unpack 'fix-paths (lambda* (#:key inputs #:allow-other-keys) (substitute* "libffi/libffi.lisp" - (("libffi.so.7" all) (string-append - (assoc-ref inputs "libffi") - "/lib/" all))) + (("libffi.so.7" all) +(string-append (assoc-ref inputs "libffi") "/lib/" all))) + (substitute* "libffi/libffi-types.lisp" + (("\\(in-package #:cffi\\)" all) +(string-append all + "\n #+linux (cc-flags \"-I" + (assoc-ref inputs "libffi") + "/include/\")"))) + (substitute* "grovel/grovel.lisp" + (("\"pkg-config\"") +(string-append "\"" (assoc-ref inputs "pkg-config") + "/bin/pkg-config\""))) + ;; Force use of (default-toolchain-parameters) which the fixed + ;; path to gcc. (substitute* "toolchain/c-toolchain.lisp" + (("\\(clisp-toolchain-parameters\\)") "nil") + (("\\(ecl-toolchain-parameters\\)") "nil") + (("\\(mkcl-toolchain-parameters\\)") "nil") + (("\\(sbcl-toolchain-parameters\\)") "nil") (("\"cc\"") (format #f "~S" (which "gcc")) (add-after 'build 'install-headers (lambda* (#:key outputs #:allow-other-keys) -- 2.34.0 From 8bdf4c2dac67a9f5baf0d0facef7bd8bef120e63 Mon Sep 17 00:00:00 2001 From: Guillaume Le Vaillant Date: Fri, 10 Dec 2021 16:22:26 +0100 Subject: [PATCH 2/2] gnu: cl-gsll: Fix more paths. * gnu/packages/lisp-xyz.scm (sbcl-gsll)[arguments]: Update 'fix-cffi-paths' phase. --- gnu/packages/lisp-xyz.scm | 23 --- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm index 9f06be28ee..58d4b889f6 100644 --- a/gnu/packages/lisp-xyz.scm +++ b/gnu/packages/lisp-xyz.scm @@ -7989,11 +7989,28 @@ (define-public sbcl-gsll (substitute* "init/init.lisp" (("libgslcblas.so" all) (string-append - (assoc-ref inputs "gsl") "/lib/" all))) - (substitute* "init/init.lisp" + (assoc-ref inputs "gsl") "/lib/" all)) (("libgsl.so" all) (string-append - (assoc-ref inputs "gsl") "/lib/" all + (assoc-ref inputs "gsl") "/lib/" all))) + (substitute* '("calculus/monte-carlo-structs.lisp" + "data/array-structs.lisp" + "eigensystems/eigen-struct.lisp" + "init/callback-struct.lisp" + "init/libgsl-unix.lisp" + "ordinary-differential-equations/ode-struct.lisp" + "physical-constants/cgsm.lisp" + "physical-constants/mksa.lisp" + "physical-constants/num.lisp" + "series
Re: cl-gsll fails to load
Foo Chuan Wei skribis: > On 2021-12-07 12:27 +, Guillaume Le Vaillant wrote: >> I think the problem comes from the fact that the build system for >> cl-xxx packages doesn't use the custom phases added to some sbcl-xxx >> packages (like the 'fix-cffi-paths' phase of sbcl-gsll). Instead a fixed >> set of phases is used (see '%standard-phases/source' from >> "guix/build/asdf-build-system.scm", used in the >> 'sbcl-package->cl-source-package' function from >> "guix/build-system/asdf.scm"). > > Are you sure about this? From my observations, the cl-xxx packages do > use the custom phases added to the sbcl-xxx packages. When I install > cl-gsll and look into its store directory > (~/.guix-profile/share/common-lisp/source/cl-gsll/), I do see the > effect of sbcl-gsll's custom phase ("fix-cffi-paths"). Indeed, it looks like custom phases are taken into considerations now (I don't remember when this got fixed). However although cl-cffi has a custom phase to fix the path to gcc, it still tries to run "gcc" instead of "/gnu/store.../gcc" when compiling cl-gsll from a REPL. I'll try to find where this bare "gcc" comes from... signature.asc Description: PGP signature
Re: cl-gsll fails to load
On 2021-12-07 12:27 +, Guillaume Le Vaillant wrote: > I think the problem comes from the fact that the build system for > cl-xxx packages doesn't use the custom phases added to some sbcl-xxx > packages (like the 'fix-cffi-paths' phase of sbcl-gsll). Instead a fixed > set of phases is used (see '%standard-phases/source' from > "guix/build/asdf-build-system.scm", used in the > 'sbcl-package->cl-source-package' function from > "guix/build-system/asdf.scm"). Are you sure about this? From my observations, the cl-xxx packages do use the custom phases added to the sbcl-xxx packages. When I install cl-gsll and look into its store directory (~/.guix-profile/share/common-lisp/source/cl-gsll/), I do see the effect of sbcl-gsll's custom phase ("fix-cffi-paths").
Re: cl-gsll fails to load
Foo Chuan Wei skribis: > I am using Guix on Ubuntu 20.04, and SBCL 2.1.9 (installed using `guix > install sbcl`). I have installed cl-gsll (`guix install cl-gsll`), but > `(asdf:load-system :gsll)` fails. Why? > > This is my ASDF configuration > > File: ~/.config/common-lisp/source-registry.conf.d/guix-asdf.conf > (:tree "~/.guix-profile/share/common-lisp/") > > > This is the error message when `(asdf:load-system :gsll)` fails: > > ; pkg-config libffi --cflags > ; ERROR: Couldn't execute "pkg-config": No such file or directory > > > ; Attempting to continue anyway. > ; gcc -o > /home/fcw/.cache/common-lisp/sbcl-2.1.9-linux-x64/gnu/store/5c2r9qg7krpnsqiia34jf6s8w71vgqsf-cl-cffi-0.24.1/share/common-lisp/source/cl-cffi/libffi/libffi-types__grovel-tmpTASQCYAW.o > -c -g -Wall -Wundef -Wsign-compare -Wpointer-arith -O3 -D_LARGEFILE_SOURCE > -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Wunused-parameter > -fno-omit-frame-pointer -momit-leaf-frame-pointer -fPIC > -I/gnu/store/5c2r9qg7krpnsqiia34jf6s8w71vgqsf-cl-cffi-0.24.1/share/common-lisp/source/cl-cffi/ > > /home/fcw/.cache/common-lisp/sbcl-2.1.9-linux-x64/gnu/store/5c2r9qg7krpnsqiia34jf6s8w71vgqsf-cl-cffi-0.24.1/share/common-lisp/source/cl-cffi/libffi/libffi-types__grovel.c > While evaluating the form starting at line 21, column 0 > of > #P"/gnu/store/q27bpjg4pcm81j9ij66fhdpvlwx3jdcz-cl-gsll-0.0.0-1.1a8ada2/share/common-lisp/source/cl-gsll/gsll.asd": > > debugger invoked on a ASDF/FIND-SYSTEM:LOAD-SYSTEM-DEFINITION-ERROR in thread > #: Error while trying to load > definition for system gsll from pathname > /gnu/store/q27bpjg4pcm81j9ij66fhdpvlwx3jdcz-cl-gsll-0.0.0-1.1a8ada2/share/common-lisp/source/cl-gsll/gsll.asd: > Couldn't execute "gcc": No such file or directory > > Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL. > > restarts (invokable by number or by possibly-abbreviated name): > 0: [RETRY] Retry # on # "cffi-libffi" "libffi" "libffi-types">. > 1: [ACCEPT ] Continue, treating # on > # as having been > successful. > 2: [RETRY] Retry EVAL of current toplevel form. > 3: [CONTINUE ] Ignore error and continue loading file > "/gnu/store/q27bpjg4pcm81j9ij66fhdpvlwx3jdcz-cl-gsll-0.0.0-1.1a8ada2/share/common-lisp/source/cl-gsll/gsll.asd". > 4: [ABORT] Abort loading file > "/gnu/store/q27bpjg4pcm81j9ij66fhdpvlwx3jdcz-cl-gsll-0.0.0-1.1a8ada2/share/common-lisp/source/cl-gsll/gsll.asd". > 5: Retry # on > #. > 6: Continue, treating # on > # as having been successful. > 7: Retry ASDF operation. > 8: [CLEAR-CONFIGURATION-AND-RETRY] Retry ASDF operation after resetting the > configuration. > 9: Retry ASDF operation. > 10: Retry ASDF operation after resetting the > configuration. > 11: Exit debugger, returning to top level. > > ((FLET "H0" :IN ASDF/ACTION:PERFORM) # {100B957A93}>) > ; File has been modified since compilation: > ; SYS:CONTRIB;ASDF;ASDF.LISP.NEWEST > ; Using form offset instead of character position. >error finding frame source: invalid feature expression: > "#.(UIOP/UTILITY:SYMBOL-TEST-TO-FEATURE-EXPRESSION (COMMON-LISP:QUOTE > #:COMPILER-ERROR-CONTEXT-%SOURCE) (COMMON-LISP:QUOTE #:SB-C))" >source: NIL > 0] > > The problem does not appear when using sbcl-gsll instead of cl-gsll. > How do I fix the problem when using cl-gsll? It seems to be missing some > kind of input or native-input. I think the problem comes from the fact that the build system for cl-xxx packages doesn't use the custom phases added to some sbcl-xxx packages (like the 'fix-cffi-paths' phase of sbcl-gsll). Instead a fixed set of phases is used (see '%standard-phases/source' from "guix/build/asdf-build-system.scm", used in the 'sbcl-package->cl-source-package' function from "guix/build-system/asdf.scm"). Therefore cl-xxx packages usually contain upstream version of the code, without Guix-specific fixes, and having the dependencies installed in a traditional/FHS way is necessary to compile the code. For example the following seems to work: --8<---cut here---start->8--- guix shell -C sbcl cl-gsll gcc-toolchain libffi gsl -- sbcl --eval '(require :asdf)' --eval '(asdf:load-system "gsll")' --8<---cut here---end--->8--- signature.asc Description: PGP signature
cl-gsll fails to load
I am using Guix on Ubuntu 20.04, and SBCL 2.1.9 (installed using `guix install sbcl`). I have installed cl-gsll (`guix install cl-gsll`), but `(asdf:load-system :gsll)` fails. Why? This is my ASDF configuration --8<---cut here---start->8--- File: ~/.config/common-lisp/source-registry.conf.d/guix-asdf.conf (:tree "~/.guix-profile/share/common-lisp/") --8<---cut here---end--->8--- This is the error message when `(asdf:load-system :gsll)` fails: --8<---cut here---start->8--- ; pkg-config libffi --cflags ; ERROR: Couldn't execute "pkg-config": No such file or directory ; Attempting to continue anyway. ; gcc -o /home/fcw/.cache/common-lisp/sbcl-2.1.9-linux-x64/gnu/store/5c2r9qg7krpnsqiia34jf6s8w71vgqsf-cl-cffi-0.24.1/share/common-lisp/source/cl-cffi/libffi/libffi-types__grovel-tmpTASQCYAW.o -c -g -Wall -Wundef -Wsign-compare -Wpointer-arith -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Wunused-parameter -fno-omit-frame-pointer -momit-leaf-frame-pointer -fPIC -I/gnu/store/5c2r9qg7krpnsqiia34jf6s8w71vgqsf-cl-cffi-0.24.1/share/common-lisp/source/cl-cffi/ /home/fcw/.cache/common-lisp/sbcl-2.1.9-linux-x64/gnu/store/5c2r9qg7krpnsqiia34jf6s8w71vgqsf-cl-cffi-0.24.1/share/common-lisp/source/cl-cffi/libffi/libffi-types__grovel.c While evaluating the form starting at line 21, column 0 of #P"/gnu/store/q27bpjg4pcm81j9ij66fhdpvlwx3jdcz-cl-gsll-0.0.0-1.1a8ada2/share/common-lisp/source/cl-gsll/gsll.asd": debugger invoked on a ASDF/FIND-SYSTEM:LOAD-SYSTEM-DEFINITION-ERROR in thread #: Error while trying to load definition for system gsll from pathname /gnu/store/q27bpjg4pcm81j9ij66fhdpvlwx3jdcz-cl-gsll-0.0.0-1.1a8ada2/share/common-lisp/source/cl-gsll/gsll.asd: Couldn't execute "gcc": No such file or directory Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL. restarts (invokable by number or by possibly-abbreviated name): 0: [RETRY] Retry # on #. 1: [ACCEPT ] Continue, treating # on # as having been successful. 2: [RETRY] Retry EVAL of current toplevel form. 3: [CONTINUE ] Ignore error and continue loading file "/gnu/store/q27bpjg4pcm81j9ij66fhdpvlwx3jdcz-cl-gsll-0.0.0-1.1a8ada2/share/common-lisp/source/cl-gsll/gsll.asd". 4: [ABORT] Abort loading file "/gnu/store/q27bpjg4pcm81j9ij66fhdpvlwx3jdcz-cl-gsll-0.0.0-1.1a8ada2/share/common-lisp/source/cl-gsll/gsll.asd". 5: Retry # on #. 6: Continue, treating # on # as having been successful. 7: Retry ASDF operation. 8: [CLEAR-CONFIGURATION-AND-RETRY] Retry ASDF operation after resetting the configuration. 9: Retry ASDF operation. 10: Retry ASDF operation after resetting the configuration. 11: Exit debugger, returning to top level. ((FLET "H0" :IN ASDF/ACTION:PERFORM) #) ; File has been modified since compilation: ; SYS:CONTRIB;ASDF;ASDF.LISP.NEWEST ; Using form offset instead of character position. error finding frame source: invalid feature expression: "#.(UIOP/UTILITY:SYMBOL-TEST-TO-FEATURE-EXPRESSION (COMMON-LISP:QUOTE #:COMPILER-ERROR-CONTEXT-%SOURCE) (COMMON-LISP:QUOTE #:SB-C))" source: NIL 0] --8<---cut here---end--->8--- The problem does not appear when using sbcl-gsll instead of cl-gsll. How do I fix the problem when using cl-gsll? It seems to be missing some kind of input or native-input.