about summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
authorMichael Raskin <7c6f434c@mail.ru>2014-11-16 16:28:50 +0300
committerMichael Raskin <7c6f434c@mail.ru>2014-11-16 19:57:12 +0300
commit58e27a257e796e82f4a1d55d7de9998cb4cc33ad (patch)
treeb50e4832c75064ac1540bd772f9d168749092729 /pkgs
parent4790b70fb5613ff473e618ec522c74f7ca088e76 (diff)
downloadnixlib-58e27a257e796e82f4a1d55d7de9998cb4cc33ad.tar
nixlib-58e27a257e796e82f4a1d55d7de9998cb4cc33ad.tar.gz
nixlib-58e27a257e796e82f4a1d55d7de9998cb4cc33ad.tar.bz2
nixlib-58e27a257e796e82f4a1d55d7de9998cb4cc33ad.tar.lz
nixlib-58e27a257e796e82f4a1d55d7de9998cb4cc33ad.tar.xz
nixlib-58e27a257e796e82f4a1d55d7de9998cb4cc33ad.tar.zst
nixlib-58e27a257e796e82f4a1d55d7de9998cb4cc33ad.zip
Fix SBCL binary building with saved library path
Diffstat (limited to 'pkgs')
-rwxr-xr-xpkgs/development/lisp-modules/clwrapper/build-with-lisp.sh50
1 files changed, 28 insertions, 22 deletions
diff --git a/pkgs/development/lisp-modules/clwrapper/build-with-lisp.sh b/pkgs/development/lisp-modules/clwrapper/build-with-lisp.sh
index bdb7f724cc7c..49115c9ef18a 100755
--- a/pkgs/development/lisp-modules/clwrapper/build-with-lisp.sh
+++ b/pkgs/development/lisp-modules/clwrapper/build-with-lisp.sh
@@ -15,28 +15,34 @@ NIX_LISP_BUILD_CODE=
 case "$NIX_LISP" in
         sbcl)
                 NIX_LISP_BUILD_CODE="(progn
-                  (sb-ext:with-unlocked-packages (:sb-sys :sb-alien)
-                    (let*
-                      (
-                        (old-fn (symbol-function 'sb-alien::dlopen-or-lose))
-                        (old-ldlp #.(sb-posix:getenv \"LD_LIBRARY_PATH\"))
-                        (ldlp-merged nil)
-                        )
-                        (defun sb-alien::dlopen-or-lose (&rest args)
-                          (or
-                            (ignore-errors (progn (apply old-fn args)))
-                            (and 
-                              args
-                              (loop
-                                for path in (list $(echo "$NIX_LISP_LD_LIBRARY_PATH" | sed -e 's/:/" "/g; s/^/"; s/$/"'))
-                                for try := (apply old-fn 
-                                             (format nil "~a/~a" path (first args))
-                                             (cdr args))
-                                )
-                               )
-                            )
+                  (let*
+                    ((old-fn (symbol-function 'sb-alien::dlopen-or-lose )))
+                    (sb-ext:with-unlocked-packages (:sb-sys :sb-alien)
+                      (defun sb-alien::dlopen-or-lose (&rest args)
+                        (or
+                          (ignore-errors (progn (apply old-fn args)))
+                          (and
+                            args
+                            (loop
+                              with try = nil
+                              with obj = (first args)
+                              with original-namestring = (sb-alien::shared-object-namestring obj)
+                              for path in (list $(echo "$NIX_LISP_LD_LIBRARY_PATH" | sed -e 's/:/" "/g; s/^/"/; s/$/"/'))
+                              for target := (format nil \"~a/~a\" path original-namestring)
+                              when (ignore-errors
+                                     (progn
+                                       (setf (sb-alien::shared-object-namestring obj) target)
+                                       (setf try (apply old-fn args))
+                                           t)) do
+                                (progn  (return try))
+                                finally (progn (setf (sb-alien::shared-object-namestring obj) original-namestring)
+                                  (return (apply old-fn args)))
+                              )
+                             )
                           )
-                      ))
+                        )
+                      )
+                    )
                   (sb-ext:save-lisp-and-die \"$target\"
                   :toplevel (lambda ()
                     (setf common-lisp:*standard-input* (sb-sys::make-fd-stream 0 :input t :buffering :line))
@@ -46,7 +52,7 @@ case "$NIX_LISP" in
                 systems=":sb-posix $systems"
                 ;;
         ecl)
-		NIX_LISP_BUILD_CODE="()"
+                NIX_LISP_BUILD_CODE="()"
                 ;;
         clisp)
                 NIX_LISP_BUILD_CODE="(ext:saveinitmem \"$target\" :norc t :init-function (lambda () $code (ext:bye)) :script nil :executable 0)"