Compiled program complaints on absent UIOP/OS and UIOP/PATHNAME

Pascal J. Bourguignon pjb at
Sun Apr 3 14:04:11 UTC 2016

Alexander Artemenko
<svetlyak.40wt at> 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


    [pjb at 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
    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")

    > (find-package "UIOP")

    > (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 at kuiper :0.0 cl-jslog]$ find lisp -name uiop\*
[pjb at 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)


    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 at kuiper :0.0 cl-jslog]$ find ~/quicklisp -type d -name uiop\*

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.")))
      (handler-case (real-main (symbol-value  (intern "*COMMAND-LINE-ARGUMENTS*"
                                                      (or (find-package "UIOP")
                                                          (error "No UIOP package."))))
                               #-(and) uiop:*command-line-arguments*)
          (progn (format t "~%Exiting because of the interrupt.~%"))))

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).

__Pascal Bourguignon__       
“The factory of the future will have only two employees, a man and a
dog. The man will be there to feed the dog. The dog will be there to
keep the man from touching the equipment.” -- Carl Bass CEO Autodesk

More information about the ecl-devel mailing list