mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-04 21:03:15 +00:00
57b496ea98
I've tried to be consistent, using four or eight spaces to line up with existing code.
135 lines
5.0 KiB
Bash
Executable File
135 lines
5.0 KiB
Bash
Executable File
#!@bash@/bin/bash
|
|
# Part of NixPkgs package collection
|
|
# This script can be used at your option under the same license as NixPkgs or
|
|
# under MIT/X11 license
|
|
|
|
eval "$NIX_LISP_PREHOOK"
|
|
|
|
NIX_LISP_COMMAND="$1"
|
|
shift
|
|
|
|
if [ -z "$NIX_LISP" ]; then
|
|
while [ -h "${NIX_LISP_COMMAND}" ]; do
|
|
NIX_LISP_COMMAND="$(readlink -n "${NIX_LISP_COMMAND}")"
|
|
done
|
|
NIX_LISP="${NIX_LISP_COMMAND##*/}"
|
|
fi
|
|
|
|
export NIX_LISP NIX_LISP_LOAD_FILE NIX_LISP_EXEC_CODE NIX_LISP_COMMAND NIX_LISP_FINAL_PARAMETERS
|
|
|
|
test -n "$NIX_LISP_LD_LIBRARY_PATH" &&
|
|
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH${LD_LIBRARY_PATH:+:}$NIX_LISP_LD_LIBRARY_PATH"
|
|
|
|
declare -a NIX_LISP_FINAL_PARAMETERS;
|
|
|
|
case "$NIX_LISP" in
|
|
sbcl)
|
|
NIX_LISP_LOAD_FILE="--load"
|
|
NIX_LISP_EXEC_CODE="--eval"
|
|
NIX_LISP_QUIT="(quit)"
|
|
NIX_LISP_NODEBUG='--non-interactive'
|
|
NIX_LISP_FINAL_PARAMETERS=
|
|
NIX_LISP_FASL_TYPE="fasl"
|
|
;;
|
|
ecl)
|
|
NIX_LISP_LOAD_FILE="-load"
|
|
NIX_LISP_EXEC_CODE="-eval"
|
|
NIX_LISP_QUIT="(quit)"
|
|
NIX_LISP_NODEBUG='--nodebug'
|
|
NIX_LISP_FINAL_PARAMETERS=
|
|
NIX_LISP_FASL_TYPE="fas"
|
|
;;
|
|
clisp)
|
|
NIX_LISP_LOAD_FILE="-c -l"
|
|
NIX_LISP_EXEC_CODE="-x"
|
|
NIX_LISP_QUIT="(quit)"
|
|
NIX_LISP_NODEBUG='-on-error exit'
|
|
NIX_LISP_FINAL_PARAMETERS="-repl"
|
|
NIX_LISP_FASL_TYPE="fas"
|
|
;;
|
|
lx86cl64)
|
|
NIX_LISP_LOAD_FILE="-l"
|
|
NIX_LISP_EXEC_CODE="-e"
|
|
NIX_LISP_QUIT="(quit)"
|
|
NIX_LISP_NODEBUG='-b'
|
|
NIX_LISP_FINAL_PARAMETERS=
|
|
NIX_LISP_FASL_TYPE="lx64fsl"
|
|
;;
|
|
lx86cl)
|
|
NIX_LISP_LOAD_FILE="-l"
|
|
NIX_LISP_EXEC_CODE="-e"
|
|
NIX_LISP_QUIT="(quit)"
|
|
NIX_LISP_NODEBUG='-b'
|
|
NIX_LISP_FINAL_PARAMETERS=
|
|
NIX_LISP_FASL_TYPE="lx32fsl"
|
|
;;
|
|
abcl)
|
|
NIX_LISP_LOAD_FILE="--load"
|
|
NIX_LISP_EXEC_CODE="--eval"
|
|
NIX_LISP_QUIT="(quit)"
|
|
NIX_LISP_NODEBUG=''
|
|
NIX_LISP_FINAL_PARAMETERS=
|
|
NIX_LISP_FASL_TYPE="abcl"
|
|
;;
|
|
esac
|
|
|
|
NIX_LISP_ASDF_REGISTRY_CODE="
|
|
(progn
|
|
(setf asdf:*source-registry-parameter*
|
|
'(:source-registry
|
|
$(for p in $NIX_LISP_ASDF_PATHS; do
|
|
echo "(:tree \"$p\")"
|
|
done)
|
|
:inherit-configuration))
|
|
(asdf:initialize-source-registry)
|
|
)
|
|
"
|
|
|
|
NIX_LISP_ASDF="${NIX_LISP_ASDF:-@out@}"
|
|
|
|
nix_lisp_run_single_form(){
|
|
NIX_LISP_FINAL_PARAMETERS=("$NIX_LISP_EXEC_CODE" "$1"
|
|
"$NIX_LISP_EXEC_CODE" "$NIX_LISP_QUIT" $NIX_LISP_NODEBUG)
|
|
}
|
|
|
|
nix_lisp_build_system(){
|
|
NIX_LISP_FINAL_PARAMETERS=(
|
|
"$NIX_LISP_EXEC_CODE" "(progn
|
|
(asdf:load-system :$1)
|
|
(loop for s in (list $(for i in $3; do echo ":$i"; done)) do (asdf:load-system 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 (format *error-output* \"Searching alien object ~s in ~s~%\"
|
|
ns libpath)
|
|
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
|
|
(format *error-output* \"Found: ~s~%\" fullpath)
|
|
(setf
|
|
(sb-alien::shared-object-namestring l) fullpath
|
|
(sb-alien::shared-object-pathname l) (probe-file fullpath)))))
|
|
)
|
|
$4
|
|
(asdf:perform (quote asdf:program-op) :$1)
|
|
)")
|
|
}
|
|
|
|
eval "$NIX_LISP_PRELAUNCH_HOOK"
|
|
|
|
if [ -z "$NIX_LISP_SKIP_CODE" ]; then
|
|
"$NIX_LISP_COMMAND" $NIX_LISP_EARLY_OPTIONS \
|
|
$NIX_LISP_EXEC_CODE "${NIX_LISP_ASDF_LOAD:-"(load \"$NIX_LISP_ASDF/lib/common-lisp/asdf/build/asdf.$NIX_LISP_FASL_TYPE\")"}" \
|
|
$NIX_LISP_EXEC_CODE "$NIX_LISP_ASDF_REGISTRY_CODE" \
|
|
${NIX_LISP_FINAL_PARAMETERS[*]:+"${NIX_LISP_FINAL_PARAMETERS[@]}"} \
|
|
"$@"
|
|
fi
|