I apologize. Here is the backtrace, and the repl interaction that triggered it, after: The variable MAIN is unbound. [Condition of type COMMON-LISP:UNBOUND-VARIABLE] Restarts: 0: [CONTINUE] Retry using MAIN. 1: [USE-VALUE] Use specified value. 2: [STORE-VALUE] Set specified value and use it. 3: [TRY-RECOMPILING] Recompile lisp and try loading it again 4: [RETRY] Retry loading FASL for #<CL-SOURCE-FILE "hello/src/main" "lisp">. 5: [ACCEPT] Continue, treating loading FASL for #<CL-SOURCE-FILE "hello/src/main" "lisp"> as having been successful. 6: [RETRY] Retry ASDF operation. 7: [CLEAR-CONFIGURATION-AND-RETRY] Retry ASDF operation after resetting the configuration. 8: [RETRY] Retry ASDF operation. 9: [CLEAR-CONFIGURATION-AND-RETRY] Retry ASDF operation after resetting the configuration. 10: [RETRY] Retry SLY mREPL evaluation request. 11: [*ABORT] Return to SLY's top level. 12: [ABORT] abort thread (#<THREAD tid=1942451 "sly-channel-1-mrepl-remote-1" RUNNING {1000BD0003}>) Backtrace: 0: ("top level form") [toplevel] 1: (SB-FASL::LOAD-FASL-GROUP #S(SB-FASL::FASL-INPUT :STREAM #<SB-SYS:FD-STREAM for "file /mnt/sata/02/home/rcarter/.cache/common-lisp/sbcl-2.4.10.117-507e7ae05-linux-x64/mnt/sata/02/home/rcarter/common-l.. 2: ((COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN SB-FASL::LOAD-AS-FASL)) 3: (SB-IMPL::CALL-WITH-LOADER-PACKAGE-NAMES #<FUNCTION (COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN SB-FASL::LOAD-AS-FASL) {10029D233B}>) 4: (SB-FASL::LOAD-AS-FASL #<SB-SYS:FD-STREAM for "file /mnt/sata/02/home/rcarter/.cache/common-lisp/sbcl-2.4.10.117-507e7ae05-linux-x64/mnt/sata/02/home/rcarter/common-lisp/sandbox/clip/v6/src/main.fasl".. 5: ((COMMON-LISP:LABELS SB-FASL::LOAD-STREAM-1 :IN COMMON-LISP:LOAD) #<SB-SYS:FD-STREAM for "file /mnt/sata/02/home/rcarter/.cache/common-lisp/sbcl-2.4.10.117-507e7ae05-linux-x64/mnt/sata/02/home/rcarter.. 6: (SB-FASL::CALL-WITH-LOAD-BINDINGS #<FUNCTION (COMMON-LISP:LABELS SB-FASL::LOAD-STREAM-1 :IN COMMON-LISP:LOAD) {7FC3CF014C3B}> #<SB-SYS:FD-STREAM for "file /mnt/sata/02/home/rcarter/.cache/common-lisp/.. 7: (COMMON-LISP:LOAD #P"/mnt/sata/02/home/rcarter/.cache/common-lisp/sbcl-2.4.10.117-507e7ae05-linux-x64/mnt/sata/02/home/rcarter/common-lisp/sandbox/clip/v6/src/main.fasl" :VERBOSE COMMON-LISP:NIL :PRIN.. 8: (UIOP/UTILITY:CALL-WITH-MUFFLED-CONDITIONS #<FUNCTION (COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN UIOP/LISP-BUILD:LOAD*) {10029C50CB}> ("Overwriting already existing readtable ~S." #(#:FINALIZERS-OFF-WARN.. 9: ((SB-PCL::EMF ASDF/ACTION:PERFORM) #<unused argument> #<unused argument> #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "hello/src/main" "lisp">) 10: ((COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN ASDF/ACTION:CALL-WHILE-VISITING-ACTION)) 11: ((:METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS (ASDF/LISP-ACTION:LOAD-OP ASDF/LISP-ACTION:CL-SOURCE-FILE)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "hello/src/main" "lisp">) [fast-m.. 12: ((:METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS :AROUND (COMMON-LISP:T COMMON-LISP:T)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "hello/src/main" "lisp">) [fast-method] 13: ((:METHOD ASDF/PLAN:PERFORM-PLAN (COMMON-LISP:T)) #<ASDF/PLAN:SEQUENTIAL-PLAN {1002888C03}>) [fast-method] 14: ((COMMON-LISP:FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT)) 15: ((:METHOD ASDF/PLAN:PERFORM-PLAN :AROUND (COMMON-LISP:T)) #<ASDF/PLAN:SEQUENTIAL-PLAN {1002888C03}>) [fast-method] 16: ((:METHOD ASDF/OPERATE:OPERATE (ASDF/OPERATION:OPERATION ASDF/COMPONENT:COMPONENT)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/PACKAGE-INFERRED-SYSTEM:PACKAGE-INFERRED-SYSTEM "hello"> :PLAN-CLASS COMMON-LISP.. 17: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused argument> #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/PACKAGE-INFERRED-SYSTEM:PACKAGE-INFERRED-SYSTEM "hello">) 18: ((COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN ASDF/OPERATE:OPERATE)) 19: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (COMMON-LISP:T COMMON-LISP:T)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/PACKAGE-INFERRED-SYSTEM:PACKAGE-INFERRED-SYSTEM "hello">) [fast-method] 20: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused argument> ASDF/LISP-ACTION:LOAD-OP "hello") 21: ((COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN ASDF/OPERATE:OPERATE)) 22: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (COMMON-LISP:T COMMON-LISP:T)) ASDF/LISP-ACTION:LOAD-OP "hello") [fast-method] 23: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<FUNCTION (COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN ASDF/OPERATE:OPERATE) {100288327B}> :OVERRIDE COMMON-LISP:T :KEY COMMON-LISP:NIL :OVERRIDE-CACHE COMMON-LISP:T :.. 24: ((COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN ASDF/OPERATE:OPERATE)) 25: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<FUNCTION (COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN ASDF/OPERATE:OPERATE) {100287054B}> :OVERRIDE COMMON-LISP:NIL :KEY COMMON-LISP:NIL :OVERRIDE-CACHE COMMON-LISP:N.. 26: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (COMMON-LISP:T COMMON-LISP:T)) ASDF/LISP-ACTION:LOAD-OP "hello") [fast-method] 27: (ASDF/OPERATE:LOAD-SYSTEM "hello") 28: (SB-INT:SIMPLE-EVAL-IN-LEXENV (ASDF/OPERATE:LOAD-SYSTEM "hello") #<NULL-LEXENV>) 29: (COMMON-LISP:EVAL (ASDF/OPERATE:LOAD-SYSTEM "hello")) 30: ((COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN SLYNK-MREPL::MREPL-EVAL-1)) 31: (SLYNK::CALL-WITH-RETRY-RESTART "Retry SLY mREPL evaluation request." #<FUNCTION (COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN SLYNK-MREPL::MREPL-EVAL-1) {10027BFACB}>) 32: ((COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN SLYNK-MREPL::MREPL-EVAL-1)) 33: ((COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN SLYNK::CALL-WITH-LISTENER)) 34: (SLYNK::CALL-WITH-BINDINGS ((COMMON-LISP:*PACKAGE* . #<COMMON-LISP:PACKAGE "COMMON-LISP-USER">) (COMMON-LISP:*DEFAULT-PATHNAME-DEFAULTS* . #P"/mnt/sata/02/home/rcarter/common-lisp/sandbox/clip/v6/src/.. 35: (SLYNK-MREPL::MREPL-EVAL-1 #<SLYNK-MREPL::MREPL mrepl-1-1> "(asdf:load-system \"hello\")") 36: (SLYNK-MREPL::MREPL-EVAL #<SLYNK-MREPL::MREPL mrepl-1-1> "(asdf:load-system \"hello\")") 37: (SLYNK:PROCESS-REQUESTS COMMON-LISP:NIL) 38: ((COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN SLYNK::SPAWN-CHANNEL-THREAD)) 39: ((COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN SLYNK::SPAWN-CHANNEL-THREAD)) 40: (SLYNK-SBCL::CALL-WITH-BREAK-HOOK #<FUNCTION SLYNK:SLYNK-DEBUGGER-HOOK> #<FUNCTION (COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN SLYNK::SPAWN-CHANNEL-THREAD) {10031E000B}>) 41: ((COMMON-LISP:FLET SLYNK-BACKEND:CALL-WITH-DEBUGGER-HOOK :IN "/mnt/sata/02/home/rcarter/.config/emacs/elpa/sly-20240809.2119/slynk/backend/sbcl.lisp") #<FUNCTION SLYNK:SLYNK-DEBUGGER-HOOK> #<FUNCTION .. 42: ((COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN SLYNK::CALL-WITH-LISTENER)) 43: (SLYNK::CALL-WITH-BINDINGS ((COMMON-LISP:*PACKAGE* . #<COMMON-LISP:PACKAGE "COMMON-LISP-USER">) (COMMON-LISP:*DEFAULT-PATHNAME-DEFAULTS* . #P"/mnt/sata/02/home/rcarter/common-lisp/sandbox/clip/v6/src/.. 44: ((COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN SLYNK::SPAWN-CHANNEL-THREAD)) 45: ((COMMON-LISP:FLET SB-UNIX::BODY :IN SB-THREAD::RUN)) 46: ((COMMON-LISP:FLET "WITHOUT-INTERRUPTS-BODY-" :IN SB-THREAD::RUN)) 47: ((COMMON-LISP:FLET SB-UNIX::BODY :IN SB-THREAD::RUN)) 48: ((COMMON-LISP:FLET "WITHOUT-INTERRUPTS-BODY-" :IN SB-THREAD::RUN)) 49: (SB-THREAD::RUN) 50: ("foreign function: call_into_lisp_") 51: ("foreign function: funcall1") Triggered by: CL-USER> (asdf:load-system "hello") ; compiling file "/mnt/sata/02/home/rcarter/common-lisp/sandbox/clip/v6/src/main.lisp" (written 08 JAN 2025 07:38:22 PM): ; wrote /mnt/sata/02/home/rcarter/.cache/common-lisp/sbcl-2.4.10.117-507e7ae05-linux-x64/mnt/sata/02/home/rcarter/common-lisp/sandbox/clip/v6/src/main-tmp1CXFJSK9.fasl ; compilation finished in 0:00:00.000 ; Debugger entered on #<UNBOUND-VARIABLE MAIN {10029D3033}> [1] CL-USER> I would be grateful if anyone could point out where I should start looking in the above output, next time. Teach a person to fish... All the best, Russell On 1/8/25 6:58 PM, Robert Goldman wrote:
Will you please post a backtrace from SBCL for this. I'm not at all sure I understand what you mean by "this line fails."
What did you do to trigger the error?
|(asdf:load-system "hello")|
?
On 8 Jan 2025, at 17:37, Russell L. Carter wrote:
Greetings,
I am a common-lisp noob. I am not a programmer noob, nor a build system noob.
I have carefully studied fare's asdf manual, pages 25-26 in the pdf and backwards through the reverse dependencies of the terms used, about the package-inferred-system. I have a problem that I've whittled down to a very small snippet.
I'm using SBCL 2.4.10.117-507e7ae05 and its native ASDF, but also tested against ASDF repo head (ln -s into ~/common-lisp, verified in the repl).
My question is why this system, located in file "./hello.asd", containing:
------------------------------------------------------------------------
(asdf:defsystem "hello" :class :package-inferred-system :depends-on ("hello/src/main"))
------------------------------------------------------------------------
paired with the system/package file "./src/main.lisp", containing:
------------------------------------------------------------------------
(uiop:define-package :hello/src/main ;; (:use :alexandria) ;; XXXRLC This line fails: "The variable MAIN ;; is unbound". I have no idea why. Backtrace provides no clues ;; (to me). Load the library in the repl matters not. Elide that ;; line and (asdf:load-system "hello") => T and then CL-USER> ;; (hello/src/main:main) => urg \n "urg" as expected. (:export #:main))
(in-package :hello/src/main) (defun main () (write-line "urg"))
------------------------------------------------------------------------
fails as described in the comment. Sure I would like the answer but the more interesting question is how could I debug this failure?
I slogged through the late '90s debugging complex C++ template programming errors. Pages and pages of output. I don't mind doing it again. But I don't know where to start with this ASDF build system.
Thank you for any suggestions, obviously the answer must be trivial.
All the best, Russell L. Carter
Robert P. Goldman Research Fellow Smart Information Flow Technologies (d/b/a SIFT, LLC)
319 N. First Ave., Suite 400 Minneapolis, MN 55401
Google Voice: (612) 326-3934 Cell: (612) 384-3454 Email: rpgoldman@SIFT.net <mailto:rpgoldman@SIFT.net>