Older SBCL versions end up believing that their `home' directory is
wherever the image was loaded from, but this is wrong for our dumped
images.
The directory is set by the C runtime code and (rather unpleasantly)
passed through the `SBCL_HOME' environment variable to Lisp, which
retrieves it via the `sb-impl::sbcl-homedir-pathname' function.
On the affected older SBCL versions, when we're dumping an image,
replace `sb-impl::sbcl-homedir-pathname' with a version which just
parrots the pre-dumped value.
Mention in `README.org' that it doesn't describe the actual SBCL
configuration any more. (Sadness.)
ideal opportunity to explain how ~runlisp~ configuration works, without
getting bogged down in the details of fighting less amenable Lisps.)
ideal opportunity to explain how ~runlisp~ configuration works, without
getting bogged down in the details of fighting less amenable Lisps.)
-The provided ~0base.conf~ file defines SBCL as follows.
+The provided ~0base.conf~ file used to define SBCL as follows. (The
+real version now contains a kludge for old versions, which needn't
+concern us here.)
command = ${@ENV:SBCL?sbcl}
image-file = ${@name}+asdf.core
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}" |
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}"
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}\")"
;;;--------------------------------------------------------------------------
--eval "(sb-ext:save-lisp-and-die \"${@image-new|q}\")"
;;;--------------------------------------------------------------------------
+###--------------------------------------------------------------------------
+### Implementation-specific tests.
+
+AT_SETUP([specific sbcl])
+AT_KEYWORDS([specific sbcl])
+PREPARE_LISP_TEST([sbcl])
+
+AT_CHECK([RUNLISP_PATH -e"(require 'sb-bsd-sockets)"])
+
+AT_CLEANUP
+
###----- That's all, folks --------------------------------------------------
###----- That's all, folks --------------------------------------------------