dump-ecl: Defeat ASDF's magic internal knowledge of itself.
[runlisp] / dump-ecl
index 4ec27b4..e777e50 100755 (executable)
--- a/dump-ecl
+++ b/dump-ecl
@@ -33,6 +33,30 @@ run () { echo "$*"; "$@"; }
 cat >"$tmp/ecl-build.lisp" <<'EOF'
 (require "asdf")
 
+;; Defeat ASDF's built-in knowledge of itself.  If we've just loaded the most
+;; up-to-date version of ASDF then it won't bother loading the system
+;; definition from disk which knows about the actual source files.  And if it
+;; doesn't think it has any source files then it won't compile anything.
+(asdf:load-asd
+ (funcall (let* ((cache-pkg (find-package "ASDF/CACHE"))
+                              (with-cache (and cache-pkg
+                                               ))
+                              (session-pkg (find-package "ASDF/SESSION"))
+                              (with-session (and session-pkg
+                                                 (find-symbol
+                                                  "CALL-WITH-ASDF-SESSION"))))
+           (symbol-function
+            (cond (cache-pkg
+                   (find-symbol "CALL-WITH-ASDF-CACHE" cache-pkg))
+                  (session-pkg
+                   (find-symbol "CALL-WITH-ASDF-SESSION" session-pkg))
+                  (t
+                   (error "I don't know how to hack this version of ASDF: ~
+                           please report this as a bug.")))))
+         (lambda ()
+           (asdf:search-for-system-definition "asdf")))
+ :name "asdf")
+
 (defparameter *asdf* (asdf:find-system "asdf")
   "The `asdf' system itself.")