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

Reply via email to