quicklisp / quicklisp-client

Quicklisp client.
http://www.quicklisp.org/
MIT License
296 stars 74 forks source link

quicklisp system (as defined in quicklisp.asd) is incomplete #140

Open dkochmanski opened 7 years ago

dkochmanski commented 7 years ago

Code inside the system refers to symbols in toplevel setup.lisp file (ql-setup:qmerge), what may lead to broken builds of standalone executables depending on Quicklisp. I suspect that it also affects systems which doesn't depend on Quicklisp, because ASDF have Quicklisp searcher registered.

Steps to reproduce (on ECL, but I saw this error also when tried to use buildapp with SBCL when building from bundle):

;;; my-system.asd
(in-package #:asdf)

(defsystem #:my-system
  :depends-on (#:asdf #:quicklisp)
  :components ((:file "my-system")))
;;; my-system.lisp
(print 'foo)
% ecl --eval '(asdf:load-asd "my-system.asd")' \
      --eval '(asdf:make-build :my-system :type :program :move-here ".")' \
      --eval '(quit)'
% ./my-system

Condition of type: UNDEFINED-FUNCTION
The function QL-SETUP:QMERGE is undefined.
No restarts available.

Top level in: #<process TOP-LEVEL>.
>
quicklisp commented 7 years ago

That's the current design. It works that way to ensure that Quicklisp is always loaded through setup.lisp, and not directly through ASDF.

I've recently decided to change how this works, so that Quicklisp can be loaded only via ASDF, but it requires some initialization (to set the quicklisp directory) before anything can be loaded. And setup.lisp will automatically do that initialization, but some other process could, too.

I'll remark on this issue when the change happens.