This compiles fine on ccl, but fails with a circular ref. error on SBCL:
kp.asd:
(in-package :asdf)
(defsystem kp
:components
((:module "utils"
:components
((:file "utils")
))
))
(load-system :kp)
------------------------
utils.lisp:
(defpackage :utils)
(in-package :utils)
(defvar *kp-version-utime* (get-universal-time))
------------------------
Error reported by SBCL:
debugger invoked on a LOAD-SYSTEM-DEFINITION-ERROR in thread #<THREAD "main thread" RUNNING {10005E85B3}>: Error while trying to load definition for \
system kp from pathname /var/www/ai/insights/kp.asd: Circular dependency: ((#<DEFINE-OP > . #<SYSTEM "kp">) (#<LOAD-OP > . #<SYSTEM "kp">) (#<LOAD-OP\
> . #<MODULE "kp" "utils">) (#<LOAD-OP > . #<CL-SOURCE-FILE "kp" "utils" "utils">) (#<PREPARE-OP > . #<CL-SOURCE-FILE "kp" "utils" "utils">) (#<PREP\
ARE-OP > . #<MODULE "kp" "utils">) (#<PREPARE-OP > . #<SYSTEM "kp">))
(It looks like your post is mostly code; please add some more details.)
(load-system :kp)
You should not have this in an ASDF declaration. Better not consider a system definition as a Lisp program, only as a declarative way of stating your dependencies.
If, during the declaration of the system, you also need to load another system, then that system becomes a dependency. What happens most likely is that SBCL consider the file as a whole when evaluating it, and while loading kp
, you ask it to load kp
, which is indeed a circular dependency. Maybe CCL silently consider the file already loaded, I don't know.
If you remove it, entering (ql:quickload :kp)
in the REPL works perfectly fine. Also, the (in-package :asdf)
is useless (and if provided, it should be asdf-user
)