Will you please clarify for my benefit, since I don't actually use any of the image operations.

Is the problem that somewhere in the process of loading Postmodern, or one of its dependencies, some bit of code invokes REQUIRE? Or is this an issue with ASDF's REQUIRE-SYSTEM.

If it's the former, then I believe this is simply a bad implementation in the relevant system.

If it's the latter, we should do something about it. However, I believe that REQUIRE-SYSTEM, despite its name, doesn't actually use REQUIRE, instead it "acts like require."

Thanks,
R

On 14 Oct 2017, at 11:45, Faré wrote:

Dear Ben,

sorry I won't be developing this feature, but I'll happily merge your
patch if you do. "Just" add support for dumping source code for a
(:require ...) dependency.

—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
Guns & bullets don't kill people — blood loss and organ damage kills people.


On Thu, Oct 12, 2017 at 4:07 PM, Ben Vulpes <benv@mavn.is> wrote:

On SBCL 1.3.11, when producing a monolithic source concatenation with
the library "Postmodern", asdf produces a file that needs a Lisp image
to need manual calls to (require :usocket) and (require :md5) in order
to load completely.

Given:

concatenatrix.asd as:

(asdf:defsystem :concatenatrix
:build-operation monolithic-concatenate-source-op
:build-pathname "build/full-concatenation"
:depends-on (:postmodern)
:components
((:file "concatenatrix")))

concatenatrix.lisp as:

(defpackage :concatenatrix
(:use :cl :postmodern))
(in-package :concatenatrix)

(defun wat (it)
(format t "~A~%" it))

Concatenated sources produced with:

(asdf:make :concatenatrix)

Loading tested with:

sbcl --noinform --disable-debugger --load build/full-concatenation.lisp

Produces:

Unhandled SB-C::INPUT-ERROR-IN-LOAD in thread #<SB-THREAD:THREAD "main
thread" RUNNING
{10027FE873}>:
READ error during LOAD:

Package SB-ROTATE-BYTE does not exist.

Line: 221, Column: 29, File-Position: 8706

Stream: #<SB-INT:FORM-TRACKING-STREAM for "file
/home/b/quicklisp/local-projects/concatenatrix/build/full-concatenation.lisp"
{1003CFCA03}>


Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {10027FE873}>
0: (SB-DEBUG::DEBUGGER-DISABLED-HOOK #<SB-C::INPUT-ERROR-IN-LOAD
{1004014AC3}> #<unavailable argument>)
1: (SB-DEBUG::RUN-HOOK SB-EXT:*INVOKE-DEBUGGER-HOOK*
#<SB-C::INPUT-ERROR-IN-LOAD {1004014AC3}>)
2: (INVOKE-DEBUGGER #<SB-C::INPUT-ERROR-IN-LOAD {1004014AC3}>)
3: (ERROR #<SB-C::INPUT-ERROR-IN-LOAD {1004014AC3}>)
4: (SB-C:COMPILER-ERROR SB-C::INPUT-ERROR-IN-LOAD :CONDITION
#<SB-INT:SIMPLE-READER-PACKAGE-ERROR "Package ~A does not exist."
{10040149E3}> :STREAM #<SB-INT:FORM-TRACKING-STREAM for "file
/home/b/quicklisp/local-projects/concatenatrix/build/full-concatenation.lisp"
{1003CFCA03}>)
5: (SB-C::%DO-FORMS-FROM-INFO #<CLOSURE (LAMBDA (SB-KERNEL:FORM &KEY
:CURRENT-INDEX &ALLOW-OTHER-KEYS) :IN SB-INT:LOAD-AS-SOURCE)
{1003D004FB}> #<SB-C::SOURCE-INFO {1003D004B3}>
SB-C::INPUT-ERROR-IN-LOAD)
6: (SB-INT:LOAD-AS-SOURCE #<SB-INT:FORM-TRACKING-STREAM for "file
/home/b/quicklisp/local-projects/concatenatrix/build/full-concatenation.lisp"
{1003CFCA03}> :VERBOSE NIL :PRINT NIL :CONTEXT "loading")
7: ((FLET SB-FASL::LOAD-STREAM :IN LOAD) #<SB-INT:FORM-TRACKING-STREAM
for "file /home/b/quicklisp/local-projects/concatenatrix/build/full-concatenation.lisp"
{1003CFCA03}> NIL)
8: (LOAD #P"build/full-concatenation.lisp" :VERBOSE NIL :PRINT NIL
:IF-DOES-NOT-EXIST T :EXTERNAL-FORMAT :DEFAULT)
9: (SB-IMPL::PROCESS-EVAL/LOAD-OPTIONS ((:LOAD .
"build/full-concatenation.lisp")))
10: (SB-IMPL::TOPLEVEL-INIT)
11: ((FLET #:WITHOUT-INTERRUPTS-BODY-90 :IN SB-EXT:SAVE-LISP-AND-DIE))
12: ((LABELS SB-IMPL::RESTART-LISP :IN SB-EXT:SAVE-LISP-AND-DIE))

There is another complaint about usocket, which is confusing, as
cl-postgres explicitly doesn't require usocket on sbcl by my read (
http://marijnhaverbeke.nl/git/?p=postmodern;a=blob;f=cl-postgres.asd;h=683edf0f131a4ebe172b44425f597d7f67656e70;hb=HEAD#l16
).

Loading is resolved by requiring both libraries in question, as:

sbcl --eval "(require :md5)" --eval "(require :usocket)" --load
build/full-concatenation.lisp

Yours,
Benjamin