How to use buildapp in combination with quicklisp

I want to use buildapp to create a curl-lisp executable, indicated as an example :

buildapp --output lisp-curl --asdf-path ~/src/clbuild/systems/ \ --load-system drakma \ --eval '(defun main (args) (write-string (drakma:http-request (second args))))' \ --entry main 

This will most definitely not work, since I don't have the path "~ / src / clbuild / systems /" since I use quicklisp. My systems should be in "~ / quicklisp / dists / quicklisp / software", but when I execute:

 buildapp --output lisp-curl \ --asdf-path ~/quicklisp/dists/quicklisp/software \ --load-system drakma \ --eval '(defun main (args) (write-string (drakma:http-request (second args))))' \ --entry main ; file: /home/simkoc/dumper-YKYna1b3.lisp ; in: DEFUN DUMP-FILE-DEBUGGER ; (QUIT :UNIX-STATUS 111) ; ; caught STYLE-WARNING: ; SB-EXT:QUIT has been deprecated as of SBCL 1.0.56.55. Use SB-EXT:EXIT or ; SB-THREAD:ABORT-THREAD instead. ; ; In future SBCL versions SB-EXT:QUIT will signal a full warning at compile-time. ; ; compilation unit finished ; caught 1 STYLE-WARNING condition Fatal MISSING-COMPONENT: Component "drakma" not found 

This answer to the question already suggests that quicklisp can export its systems in such a way that buildapp can restore it, but, unfortunately, without going into details.

I also tried to exit --asdf-path , since SBCL (at startup) can already load Drakma using (require 'drakma) or (asdf:load-system "drakma") . Also, using --require instead of --load-system will not execute the transaction.

Therefore: how can I use buildapp in combination with a quick click to make an executable with the required systems (I just adore the MISSING-COMPONENT PART)

+7
common-lisp sbcl quicklisp
source share
1 answer

If Drakma is already installed in quicklisp, I think your example will work if you use --asdf-tree instead of --asdf-path . But using the Quicklisp directory as a tree can cause some problems, since not every system file in the tree is designed to be downloaded.

There is another option that integrates more closely with Quicklisp knowledge of available systems. That's what I'm doing:

 sbcl --no-userinit --no-sysinit --non-interactive \ --load ~/quicklisp/setup.lisp \ --eval '(ql:quickload "drakma")' \ --eval '(ql:write-asdf-manifest-file "quicklisp-manifest.txt")' buildapp --manifest-file quicklisp-manifest.txt --load-system drakma [the rest of your options] 

The first command guarantees the loading of drakma and that the Quicklisp systems index is aware of this in quicklisp-manifest.txt. The second uses this index to create an application using installed Quicklisp systems.

+12
source share

All Articles