diff options
author | Michael Raskin <7c6f434c@mail.ru> | 2013-10-13 10:45:07 +0400 |
---|---|---|
committer | Michael Raskin <7c6f434c@mail.ru> | 2013-10-13 10:45:07 +0400 |
commit | d44439d03ed0880c322736dd4afdebe916a437c6 (patch) | |
tree | 1d3218af54667bcba15f78a838663be81cea4a0d /pkgs/development | |
parent | f1dd61d353b47b511654162f09a11d09aa8dbf35 (diff) | |
download | nixlib-d44439d03ed0880c322736dd4afdebe916a437c6.tar nixlib-d44439d03ed0880c322736dd4afdebe916a437c6.tar.gz nixlib-d44439d03ed0880c322736dd4afdebe916a437c6.tar.bz2 nixlib-d44439d03ed0880c322736dd4afdebe916a437c6.tar.lz nixlib-d44439d03ed0880c322736dd4afdebe916a437c6.tar.xz nixlib-d44439d03ed0880c322736dd4afdebe916a437c6.tar.zst nixlib-d44439d03ed0880c322736dd4afdebe916a437c6.zip |
Adding a Common Lisp wrapper.
Features: + configurable via environment variables + can skip the actual launching of the lisp implementation (source it with NIX_LISP_SKIP_CODE=1 to get all the settings) + currently supports SBCL, CLisp, ECL + determines lisp implementation from NIX_LISP_COMMAND variable or from buildInputs + sets ASDF search path for packages using buildInputs
Diffstat (limited to 'pkgs/development')
4 files changed, 108 insertions, 0 deletions
diff --git a/pkgs/development/lisp-modules/clwrapper/cl-wrapper.sh b/pkgs/development/lisp-modules/clwrapper/cl-wrapper.sh new file mode 100755 index 000000000000..91b8a0c2bb0f --- /dev/null +++ b/pkgs/development/lisp-modules/clwrapper/cl-wrapper.sh @@ -0,0 +1,44 @@ +#! /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 + +eval "$NIX_LISP_PREHOOK" + +NIX_LISP_COMMAND="$1" +shift + +[ -z "$NIX_LISP" ] && NIX_LISP="${NIX_LISP_COMMAND##*/}" + +export NIX_LISP NIX_LISP_LOAD_FILE NIX_LISP_EXEC_CODE NIX_LISP_COMMAND NIX_LISP_FINAL_PARAMETERS + +case "$NIX_LISP" in + sbcl) + NIX_LISP_LOAD_FILE="--load" + NIX_LISP_EXEC_CODE="--eval" + NIX_LISP_FINAL_PARAMETERS= + ;; + ecl) + NIX_LISP_LOAD_FILE="-load" + NIX_LISP_EXEC_CODE="-eval" + NIX_LISP_FINAL_PARAMETERS= + ;; + clisp) + NIX_LISP_LOAD_FILE="-c -l" + NIX_LISP_EXEC_CODE="-x" + NIX_LISP_FINAL_PARAMETERS="-repl" + ;; +esac + +NIX_LISP_ASDF_REGISTRY_CODE=" + (progn + (setf asdf:*default-source-registries* '(asdf/source-registry:environment-source-registry)) + (asdf:initialize-source-registry) + ) +" + +[ -z "$NIX_LISP_SKIP_CODE" ] && "$NIX_LISP_COMMAND" $NIX_LISP_EARLY_OPTIONS \ + $NIX_LISP_EXEC_CODE "(load \"$NIX_LISP_ASDF/lib/common-lisp/asdf/build/asdf.lisp\")" \ + $NIX_LISP_EXEC_CODE "$NIX_LISP_ASDF_REGISTRY_CODE" \ + $NIX_LISP_FINAL_PARAMETERS \ + "$@" diff --git a/pkgs/development/lisp-modules/clwrapper/common-lisp.sh b/pkgs/development/lisp-modules/clwrapper/common-lisp.sh new file mode 100755 index 000000000000..b22ca016128a --- /dev/null +++ b/pkgs/development/lisp-modules/clwrapper/common-lisp.sh @@ -0,0 +1,3 @@ +#! /bin/sh + +"$(dirname "$0")"/cl-wrapper.sh "${NIX_LISP_COMMAND:-sbcl}" "$@" diff --git a/pkgs/development/lisp-modules/clwrapper/default.nix b/pkgs/development/lisp-modules/clwrapper/default.nix new file mode 100644 index 000000000000..0ae4ce13064c --- /dev/null +++ b/pkgs/development/lisp-modules/clwrapper/default.nix @@ -0,0 +1,28 @@ +{stdenv, fetchurl, asdf, lisp ? null}: +stdenv.mkDerivation { + name = "cl-wrapper-script"; + + buildPhase=""; + + installPhase='' + mkdir -p "$out"/bin + cp ${./cl-wrapper.sh} "$out"/bin/cl-wrapper.sh + cp ${./common-lisp.sh} "$out"/bin/common-lisp.sh + chmod a+x "$out"/bin/* + ''; + + inherit asdf lisp; + + setupHook = ./setup-hook.sh; + + phases="installPhase fixupPhase"; + + passthru = { + inherit lisp; + }; + + meta = { + description = ''Script used to wrap Common Lisp implementations''; + maintainers = [stdenv.lib.maintainers.raskin]; + }; +} diff --git a/pkgs/development/lisp-modules/clwrapper/setup-hook.sh b/pkgs/development/lisp-modules/clwrapper/setup-hook.sh new file mode 100644 index 000000000000..5de43dc0e9a9 --- /dev/null +++ b/pkgs/development/lisp-modules/clwrapper/setup-hook.sh @@ -0,0 +1,33 @@ +NIX_LISP_ASDF="@asdf@" + +CL_SOURCE_REGISTRY="@asdf@/lib/common-lisp/asdf/:@asdf@/lib/common-lisp/asdf/uiop/" + +addASDFPaths () { + for j in "$1"/lib/common-lisp/*; do + if [ -d "$j" ]; then + CL_SOURCE_REGISTRY="$CL_SOURCE_REGISTRY:$j/" + fi + done +} + +setLisp () { + if [ -z "$NIX_LISP_COMMAND" ]; then + for j in "$1"/bin/*; do + case "$(basename "$j")" in + sbcl) NIX_LISP_COMMAND="$j" ;; + ecl) NIX_LISP_COMMAND="$j" ;; + clisp) NIX_LISP_COMMAND="$j" ;; + esac + done + fi + if [ -z "$NIX_LISP" ]; then + NIX_LISP="${NIX_LISP_COMMAND##*/}" + fi +} + +export NIX_LISP_COMMAND NIX_LISP CL_SOURCE_REGISTRY NIX_LISP_ASDF + +envHooks=(envHooks[@] addASDFPaths setLisp) + +mkdir -p "$HOME"/.cache/common-lisp || HOME="$TMP/.temp-$USER-home" +mkdir -p "$HOME"/.cache/common-lisp |