summary refs log tree commit diff
path: root/pkgs/development/lisp-modules/clwrapper
diff options
context:
space:
mode:
authorMichael Raskin <7c6f434c@mail.ru>2018-01-29 15:15:00 +0100
committerMichael Raskin <7c6f434c@mail.ru>2018-01-29 15:15:51 +0100
commit0a70f3727583e54a75223563caba2a316b78ca7c (patch)
treed9ed6e9e5401d5383647664de0a0d08e2e3653b6 /pkgs/development/lisp-modules/clwrapper
parent57ecb3a8f02010c7dd0d5aa1ee33929286966dcf (diff)
downloadnixlib-0a70f3727583e54a75223563caba2a316b78ca7c.tar
nixlib-0a70f3727583e54a75223563caba2a316b78ca7c.tar.gz
nixlib-0a70f3727583e54a75223563caba2a316b78ca7c.tar.bz2
nixlib-0a70f3727583e54a75223563caba2a316b78ca7c.tar.lz
nixlib-0a70f3727583e54a75223563caba2a316b78ca7c.tar.xz
nixlib-0a70f3727583e54a75223563caba2a316b78ca7c.tar.zst
nixlib-0a70f3727583e54a75223563caba2a316b78ca7c.zip
lispPackages.clwrapper: build helper; saving dynamic library search path from NIX_LISP_
Diffstat (limited to 'pkgs/development/lisp-modules/clwrapper')
-rwxr-xr-xpkgs/development/lisp-modules/clwrapper/cl-wrapper.sh27
1 files changed, 27 insertions, 0 deletions
diff --git a/pkgs/development/lisp-modules/clwrapper/cl-wrapper.sh b/pkgs/development/lisp-modules/clwrapper/cl-wrapper.sh
index 55b469729f94..fa914f6d26bc 100755
--- a/pkgs/development/lisp-modules/clwrapper/cl-wrapper.sh
+++ b/pkgs/development/lisp-modules/clwrapper/cl-wrapper.sh
@@ -87,6 +87,33 @@ nix_lisp_run_single_form(){
     "$NIX_LISP_EXEC_CODE" "$NIX_LISP_QUIT" $NIX_LISP_NODEBUG)
 }
 
+nix_lisp_build_system(){
+        NIX_LISP_FINAL_PARAMETERS=(
+             "$NIX_LISP_EXEC_CODE" "(progn
+               (asdf:make :$1)
+               (loop for s in (list $(for i in $3; do echo ":$i"; done)) do (asdf:make s)))"
+             "$NIX_LISP_EXEC_CODE" "(progn
+               (setf (asdf/system:component-entry-point (asdf:find-system :$1)) ${2:-nil})
+               #+cffi(setf cffi:*foreign-library-directories*
+                        (cffi::explode-path-environment-variable \"NIX_LISP_LD_LIBRARY_PATH\"))
+               #+sbcl(loop
+                       with libpath := (uiop:split-string (uiop:getenv \"NIX_LISP_LD_LIBRARY_PATH\")
+                                :separator \":\")
+                       for l in sb-alien::*shared-objects*
+                       for ns := (sb-alien::shared-object-namestring l)
+                       do (and (> (length ns) 0) (not (equal (elt ns 0) "/"))
+                               (let*
+                                 ((prefix (find-if (lambda (s) (probe-file (format nil \"~a/~a\" s ns))) libpath))
+                                  (fullpath (and prefix (format nil \"~a/~a\" prefix ns))))
+                                  (when fullpath
+                                     (setf
+                                       (sb-alien::shared-object-namestring l) fullpath
+                                       (sb-alien::shared-object-pathname l) (probe-file fullpath)))))
+                   )
+           (asdf:perform (quote asdf:program-op) :$1)
+        )")
+}
+
 eval "$NIX_LISP_PRELAUNCH_HOOK"
 
 [ -z "$NIX_LISP_SKIP_CODE" ] && "$NIX_LISP_COMMAND" $NIX_LISP_EARLY_OPTIONS \