;; Prevent ASDF from upgrading itself. Otherwise it will do this
;; automatically if a script invokes `asdf:load-system', but that will have a
;; bad effect on startup time, and risks spamming the output streams with
-;; drivel.
+;; drivel. Some ancient Lisps come with an ASDF which doesn't understand
+;; `register-immutable-system', so do the job by hand if necessary.
inhibit-asdf-upgrade =
- (funcall (intern "REGISTER-IMMUTABLE-SYSTEM"
- (find-package "ASDF"))
- "asdf")
+ (let* ((#1300=#:root (find-package "ASDF"))
+ (#1301=#:ris (find-symbol "REGISTER-IMMUTABLE-SYSTEM" #1300#)))
+ (if (and #1301# (fboundp #1301#))
+ (funcall #1301# "asdf")
+ (let* ((#1302=#:fsys (find-package "ASDF/FIND-SYSTEM"))
+ (#1303=#:iss (find-symbol "*IMMUTABLE-SYSTEMS*" #1302#))
+ (#1304=#:dss (find-symbol "*DEFINED-SYSTEMS*" #1302#))
+ (#1305=#:sys (find-symbol "SYSTEM" #1300#)))
+ (unless (symbol-value #1303#)
+ (setf (symbol-value #1303#)
+ (make-hash-table :test (function equal))))
+ (setf (gethash "asdf" (symbol-value #1303#)) t
+ (gethash "asdf" (symbol-value #1304#))
+ (cons (get-universal-time)
+ (make-instance #1305# :name "asdf"))))))
;; Upgrade ASDF from the source registry.
upgrade-asdf =
command = ${@ENV:SBCL?sbcl}
image-file = ${@name}+asdf.core
+;; Older versions of SBCL forget their home directory when an image is
+;; dumped, so we must help this one to remember.
+etch-sbcl-home =
+ (let* ((#100=#:sfs (find-symbol "*STATIC-FOREIGN-SYMBOLS*" "SB-IMPL"))
+ (#101=#:shp (find-symbol "SBCL-HOMEDIR-PATHNAME" "SB-IMPL")))
+ (unless (or (not #100#) (not #101#)
+ (gethash "sbcl_home" (symbol-value #100#)))
+ (#+sb-package-locks without-package-locks
+ #-sb-package-locks progn
+ (setf (symbol-function #101#)
+ (let ((#102=#:etched-sbcl-home (funcall #101#)))
+ (lambda () #102#))))))
+
run-script =
${command} --noinform
$?@image{--core "${image-path}" --eval "${image-restore}" |
dump-image =
${command} --noinform --no-userinit --no-sysinit --disable-debugger
--eval "${dump-image-prelude}"
+ --eval "${etch-sbcl-home}"
--eval "(sb-ext:save-lisp-and-die \"${@image-new|q}\")"
;;;--------------------------------------------------------------------------
${command}
$?@image{-core "${image-path}" -eval "${image-restore}" |
-batch -noinit -quiet
- -eval "(progn
+ -eval "(handler-bind
+ ((warning #'muffle-warning))
(setf ext:*require-verbose* nil)
${run-script-prelude}
${clear-cl-user})"}