title: Building an executable with ECL: missing dependency or can not find make-build in asdf/interface
body: <p>I'm trying to build an executable with ECL. I looked at <a href="https://common-lisp.net/project/ecl/static/ecldoc/Extensions.html#Executable" rel="nofollow noreferrer">the doc</a> and this other <a href="https://stackoverflow.com/questions/34062166/how-to-distribute-the-asdf-quicklisp-dependencies-along-with-an-app-compiled-wit">SO question</a>, where we learn that with ECL v &lt;= 16.1.3 we must add a </p>
  
  <pre><code>(require 'adsf)
  </code></pre>
  
  <p>Then I push my project to the asdf registry:</p>
  
  <pre><code>(pushnew "~/projects/my-project/" asdf:*central-registry* :test #'equal)
  </code></pre>
  
  <p>I load it:</p>
  
  <pre><code>(load "my-project.asd")
  </code></pre>
  
  <p>My program obviously has Quicklisp dependencies. </p>
  
  <p>I copied the initialization of Quicklisp from my <code>.sbclrc</code> to <code>~/.eclrc</code>:</p>
  
  <pre><code>#-quicklisp
  (let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp"
                                         (user-homedir-pathname))))
    (when (probe-file quicklisp-init)
      (load quicklisp-init)))
  </code></pre>
  
  <p>So than I can Quickload my project: (this step does not appear in the doc but this allows to find the project dependencies)</p>
  
  <pre><code>(ql:quickload "my-project")
  </code></pre>
  
  <p>I also</p>
  
  <pre><code>(use-package :my-project)
  </code></pre>
  
  <p>but now, as I want to build the executable with</p>
  
  <pre><code>(asdf:make-build :my-project
                   :type :program
                   :move-here #P"./"
                   :epilogue-code '(progn (my-project:main)
                                          (si:exit)))
  </code></pre>
  
  <p>I get the error</p>
  
  <blockquote>
    <p>Cannot find the external symbol MAKE-BUILD in #&lt;"ASDF/INTERFACE" package>.</p>
  </blockquote>
  
  <p>Can someone help ? Thanks !</p>
  
  <p>ECL 16.1.3</p>
  
  <p>ps: and it seems that, in the REPL, to enter a restart nb has no effect.</p>
  
  <hr>
  
  <p>My makefile:</p>
  
  <pre><code>ecl-build:
      ~/.roswell/impls/x86-64/linux/ecl/16.1.3/bin/ecl \
          --eval "(require 'asdf)" \
          --eval '(format t "--- ASDF version: ~a~&amp;" (asdf:asdf-version))' \
  
          --eval "(pushnew \"~/projets/cl-torrents/\" asdf:*central-registry* :test 'equal)" \
          --eval '(load "cl-torrents.asd")' \
          --eval '(asdf:make-build :cl-torrents :type :program :move-here #P"./" :epilogue-code "(progn (torrents "matrix") (si:exit))")'
  </code></pre>
  
  <p>Result:</p>
  
  <pre><code>;;; Loading "/home/vince/quicklisp/setup.lisp"
  ;;; Loading #P"/home/vince/.roswell/impls/x86-64/linux/ecl/16.1.3/lib/ecl-16.1.3/asdf.fas"
  --- ASDF version: 3.2.1
  An error occurred during initialization:
  Cannot find the external symbol MAKE-BUILD in #&lt;"ASDF/INTERFACE" package&gt;..
  Makefile:22: recipe for target 'ecl-build' failed
  make: *** [ecl-build] Error 1
  </code></pre>
  
  <hr>
  
  <h3>edit 27, oct - progress</h3>
  
  <p>The simplest path now seems to unsure to use ASDF bundled into ECL, which will have the <code>make-build</code> command.</p>
  
  <p>I had a newer ASDF version because of my Quicklisp's initialization code into <code>~/.eclrc</code>. I removed it and now I have ASDF v3.1.8.2, which is ok. But now, ECL doesn't know any dependencies:</p>
  
  <blockquote>
    <p>Component :DEXADOR not found, required by #.</p>
  </blockquote>
  
  <p>Indeed, because there is no Quicklisp any more.</p>
  
  <p><a href="https://common-lisp.net/project/ecl/static/ecldoc/Extensions.html#Example-code-to-build" rel="nofollow noreferrer">ECL doc</a> says to include all libraries path into <code>asdf:*central-registry*</code>. By chance, Quicklisp installed all libraries into <code>~/quicklisp/dists/quicklisp/software/</code>. </p>
  
  <p>First, I wonder how this will work in a CI pipeline where Quicklisp has not run before…</p>
  
  <p>Then I see that adding only this directory is not enough, Dexador's dependencies will in turn not be found, I had to add dexador's directory precisely:</p>
  
  <pre><code>    --eval "(pushnew \"~/quicklisp/dists/quicklisp/software/dexador-20170830-git/\" asdf:*central-registry* :test 'equal)" \
  </code></pre>
  
  <p>So do I really have to write code to include every directory here ?</p>
  
  <p>How to make this work when Quicklisp has not run once before ?</p>
  
  <p><strong>update</strong>: With Ecl installed with Roswell: <code>require</code>ing asdf before everything in my .eclrc gives the version 3.1.8.2, after Quicklisp initialization 3.2.1 and <code>make-build</code> symbol unknown. </p>
  
  <p>With Debian's Ecl: first v2.33.10 and then v3.2.1 likewise.</p>
  
  <p>Looks like a dead end.</p>
  
  <p><strong>update november</strong>: I waited for the release of ASDF 3.3.0 to manually update. It was buggy. Message on the mailing list: waiting for 3.3.1: buggy again.</p>
  
  <p>Went with the <a href="https://hub.docker.com/r/daewok/lisp-devel/" rel="nofollow noreferrer">lisp-devel</a> Docker image, shipping ECL 16.1.3. (I don't want to compile ECL myself on each and every VPS). I could build an executable (52Mo in weight), but got a runtime error:</p>
  
  <blockquote>
    <p>Condition of type: SIMPLE-ERROR
    Package ((UIOP/STREAM . #)) referenced in > compiled file
     NIL
    but has not been created</p>
  </blockquote>