diff options
author | Kasper Gałkowski <k@galkowski.xyz> | 2023-04-01 16:02:22 +0200 |
---|---|---|
committer | Kasper Gałkowski <k@galkowski.xyz> | 2023-04-02 11:14:49 +0200 |
commit | bdc000263ae994f6d96a6bde7d63805f1e4f818b (patch) | |
tree | 76292291745ffc8735d3534e40a1ace5a52695cd /pkgs/development/lisp-modules-obsolete/clwrapper/build-with-lisp.sh | |
parent | 9a26e2dea92566db6151fef2909140992a751207 (diff) |
lisp-modules: add back the two current implementations
This is to enable a smooth migration to the new one.
Diffstat (limited to 'pkgs/development/lisp-modules-obsolete/clwrapper/build-with-lisp.sh')
-rwxr-xr-x | pkgs/development/lisp-modules-obsolete/clwrapper/build-with-lisp.sh | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/pkgs/development/lisp-modules-obsolete/clwrapper/build-with-lisp.sh b/pkgs/development/lisp-modules-obsolete/clwrapper/build-with-lisp.sh new file mode 100755 index 0000000000000..13965f14c5e26 --- /dev/null +++ b/pkgs/development/lisp-modules-obsolete/clwrapper/build-with-lisp.sh @@ -0,0 +1,67 @@ +#! /bin/sh +# Part of NixPkgs package collection +# This script can be used at your option under the same license as NixPkgs or +# under MIT/X11 license + +lisp="$1" +systems="$2" +target="$3" +code="$4" + +NIX_LISP_SKIP_CODE=1 NIX_LISP_COMMAND="$lisp" source "$(dirname "$0")/cl-wrapper.sh" + +NIX_LISP_BUILD_CODE= + +case "$NIX_LISP" in + sbcl) + NIX_LISP_BUILD_CODE="(progn + (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)) + (setf common-lisp:*standard-output* (sb-sys::make-fd-stream 1 :output t :buffering :line)) + (setf uiop/image:*command-line-arguments* (cdr sb-ext:*posix-argv*)) + $code) + :executable t :save-runtime-options t :purify t))" + systems=":sb-posix $systems" + ;; + ecl) + NIX_LISP_BUILD_CODE="()" + ;; + clisp) + NIX_LISP_BUILD_CODE="(ext:saveinitmem \"$target\" :norc t :init-function (lambda () $code (ext:bye)) :script nil :executable 0)" + ;; +esac + +"$lisp" \ + "$NIX_LISP_EXEC_CODE" "(load \"$NIX_LISP_ASDF/lib/common-lisp/asdf/build/asdf.lisp\")" \ + "$NIX_LISP_EXEC_CODE" "(mapcar 'asdf:load-system (list $systems))" \ + "$NIX_LISP_EXEC_CODE" "$NIX_LISP_BUILD_CODE" \ + "$NIX_LISP_EXEC_CODE" "(quit)" |