Alexander Artemenko svetlyak.40wt@gmail.com writes:
Hi, Pascal!
Thank you for the asnwer.
The error you wrote about is because you didn't run ./bootstrap.ecl before ./build.ecl
Anyway, I've added -norc to the build scripts. Please, make a pull and try again these commands:
./bootstrap.ecl ./build.ecl ./jslog --help
Ok.
[pjb@kuiper :0.0 cl-jslog]$ ./jslog
Condition of type: SIMPLE-ERROR The packages ((UIOP/OS . #<UIOP/OS package>) (UIOP/PATHNAME . #<UIOP/PATHNAME package>)) were referenced in compiled file NIL but have not been created Available restarts:
1. (IGNORE) Ignore the error, and try the operation again
Top level in: #<process TOP-LEVEL>. > (find-package "ASDF")
NIL > (find-package "UIOP")
NIL > (quit)
So, as you can see, the packages ASDF and UIOP are not present in the executable. That's because they are not dependencies of your system. (Well asdf is mentionned in your asdf, but it's a little special, since as a dependency of quicklisp itself, it's not downloaded and installed like systems).
[pjb@kuiper :0.0 cl-jslog]$ find lisp -name uiop* [pjb@kuiper :0.0 cl-jslog]$
uiop hasn't been downloaded, and definitely not loaded.
The same occurs when I add :uiop to your :depends-on list.
When we do:
ecl -norc (load "lisp/setup.lisp") (ql:quickload :uiop)
or:
ccl -norc (load "lisp/setup.lisp") (ql:quickload :uiop)
it's successful, but no uiop is downloaded:
find lisp -name uiop*
still outputs nothing. The same occurs with sbcl, so it's not related to the implementation. Probably, what happens is that since uiop is already loaded (thru asdf, before quicklisp is even loaded), ql:quickload doesn't do anything for it.
However, I have several versions of uiop installed in my home:
[pjb@kuiper :0.0 cl-jslog]$ find ~/quicklisp -type d -name uiop* /home/pjb/quicklisp/dists/quicklisp/software/uiop-3.1.6 …
so it must be possible to have it installed and loaded.
The same error is obtained when I remove :asdf and :uiop from the :depends-on and try to load them at run-time:
(defun main () (load "lisp/setup.lisp") (funcall (intern "QUICKLOAD" (or (find-package "QL") (error "No QL package."))) :uiop) (handler-case (real-main (symbol-value (intern "*COMMAND-LINE-ARGUMENTS*" (or (find-package "UIOP") (error "No UIOP package.")))) #-(and) uiop:*command-line-arguments*) #+sbcl (SB-SYS:INTERACTIVE-INTERRUPT () (progn (format t "~%Exiting because of the interrupt.~%")))) (exit))
Ie. we don't reach the load, (we'd see main in the backtrace if that was the case!).
This would lead me to think that there are two problems with ecl:
- contaminating the executable with packages existing at compilation time not intended for run-time,
- not including the compilation-time package required at run-time into the executable (independently of the asdf system dependency list).