For the record, I can reproduce the behavior noted in the comments -- (asdf:load-system "hello") succeeds if (:use :alexandria) is omitted, and fails with "Variable MAIN is unbound" otherwise. I am working with SBCL.
It appears that the .lisp was successfully compiled, and the error occurs when trying to load the resulting .fasl. After some tinkering, I think the problem is that the symbols DEFUN and WRITE-LINE aren't being resolved to symbols in the symbol package COMMON-LISP. I can get the example to work, with (:use :alexandria), by either writing cl:defun and cl:write-line in the code, or saying (:use :common-lisp) in the package definition. I don't know offhand why the symbols aren't resolved in the presence of (:use :alexandria), no doubt there's a simple explanation. Hope this helps, Robert On Wed, Jan 8, 2025 at 3:58 PM Robert Goldman <rpgold...@sift.info> 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: rpgold...@sift.net