summary refs log tree commit diff
path: root/pkgs/development/lisp-modules/quicklisp.sh
diff options
context:
space:
mode:
authorMichael Raskin <7c6f434c@mail.ru>2016-03-25 17:57:45 +0100
committerMichael Raskin <7c6f434c@mail.ru>2016-03-25 17:58:05 +0100
commit511ad5e5bfe1b29e56f0b15f15732c7c8c8e6ef1 (patch)
treed892ca393797d774ed1b10ecef66a93b2d403c00 /pkgs/development/lisp-modules/quicklisp.sh
parent98e8696290688cff4c67e2063ecdc56d2e8c1bc8 (diff)
downloadnixpkgs-511ad5e5bfe1b29e56f0b15f15732c7c8c8e6ef1.tar
nixpkgs-511ad5e5bfe1b29e56f0b15f15732c7c8c8e6ef1.tar.gz
nixpkgs-511ad5e5bfe1b29e56f0b15f15732c7c8c8e6ef1.tar.bz2
nixpkgs-511ad5e5bfe1b29e56f0b15f15732c7c8c8e6ef1.tar.lz
nixpkgs-511ad5e5bfe1b29e56f0b15f15732c7c8c8e6ef1.tar.xz
nixpkgs-511ad5e5bfe1b29e56f0b15f15732c7c8c8e6ef1.tar.zst
nixpkgs-511ad5e5bfe1b29e56f0b15f15732c7c8c8e6ef1.zip
quicklisp (lispPackages.quicklisp): init
Diffstat (limited to 'pkgs/development/lisp-modules/quicklisp.sh')
-rw-r--r--pkgs/development/lisp-modules/quicklisp.sh85
1 files changed, 85 insertions, 0 deletions
diff --git a/pkgs/development/lisp-modules/quicklisp.sh b/pkgs/development/lisp-modules/quicklisp.sh
new file mode 100644
index 00000000000..30d14419461
--- /dev/null
+++ b/pkgs/development/lisp-modules/quicklisp.sh
@@ -0,0 +1,85 @@
+#! /usr/bin/env bash
+
+op=
+end_param=
+args=()
+cmd_args=()
+
+while let "$#"; do
+    if test -n "$end_param" || test "$1" = "${1#--}"; then
+        if test -n "$op"; then
+            args[${#args[@]}]="$1";
+        else
+            op="$1"
+        fi
+        shift
+    else
+        case "$1" in
+            --)
+                end_param=1; shift;
+            ;;
+            --quicklisp-dir)
+                NIX_QUICKLISP_DIR="$2";
+                shift; shift;
+            ;;
+            --help)
+                echo "Operation: init, run, update, install {system-name}"
+                exit 0;
+            ;;
+            *)
+                echo "Unknown parameter [$1]" >&2
+                exit 2;
+            ;;
+        esac
+    fi
+done
+
+NIX_QUICKLISP_DIR="${NIX_QUICKLISP_DIR:-${HOME}/quicklisp}"
+
+case "$op" in
+    '') echo "Specify an operation: init, install, run, update"
+    ;;
+    install)
+        NIX_LISP_SKIP_CODE=1 source "@clwrapper@/bin/common-lisp.sh";
+
+        cmd_args[${#cmd_args[@]}]="$NIX_LISP_EXEC_CODE"
+        cmd_args[${#cmd_args[@]}]="(load \"$NIX_QUICKLISP_DIR/setup.lisp\")"
+        for i in "${args[@]}"; do
+            cmd_args[${#cmd_args[@]}]="$NIX_LISP_EXEC_CODE"
+            cmd_args[${#cmd_args[@]}]="(ql:quickload :$i)"
+        done
+        cmd_args[${#cmd_args[@]}]="$NIX_LISP_EXEC_CODE"
+        cmd_args[${#cmd_args[@]}]="$NIX_LISP_QUIT"
+
+        "@clwrapper@/bin/common-lisp.sh" "${cmd_args[@]}"
+    ;;
+    update)
+        NIX_LISP_SKIP_CODE=1 source "@clwrapper@/bin/common-lisp.sh"
+
+        ln -sfT "@out@/lib/common-lisp/quicklisp/asdf.lisp" "$NIX_QUICKLISP_DIR/asdf.lisp"
+        cp -f "@out@/lib/common-lisp/quicklisp/setup.lisp" "$NIX_QUICKLISP_DIR/setup.lisp"
+
+        if test -d "$NIX_QUICKLISP_DIR/quicklisp"; then
+            mv "$NIX_QUICKLISP_DIR/quicklisp"{,-old-$(date +%Y%m%d-%H%M%S)}
+        fi
+
+        ln -sfT "@out@/lib/common-lisp/quicklisp/quicklisp" "$NIX_QUICKLISP_DIR/quicklisp"
+
+        "@clwrapper@/bin/common-lisp.sh" "$NIX_LISP_EXEC_CODE" \
+          "(load \"$NIX_QUICKLISP_DIR/setup.lisp\")" "$NIX_LISP_EXEC_CODE" \
+          "(ql:update-all-dists)" "$NIX_LISP_EXEC_CODE" "$NIX_LISP_QUIT"
+    ;;
+    init)
+        mkdir -p "$NIX_QUICKLISP_DIR"/{dists/quicklisp,tmp,local-projects}
+        echo 1 > "$NIX_QUICKLISP_DIR/dists/quicklisp/enabled.txt"
+        cp -f "@out@/lib/common-lisp/quicklisp/quicklisp-distinfo.txt" \
+          "$NIX_QUICKLISP_DIR/dists/quicklisp/distinfo.txt"
+
+        NIX_QUICKLISP_DIR="$NIX_QUICKLISP_DIR" "$0" update
+    ;;
+    run)
+        NIX_LISP_SKIP_CODE=1 source "@clwrapper@/bin/common-lisp.sh"
+        "@clwrapper@/bin/common-lisp.sh" "$NIX_LISP_EXEC_CODE" \
+          "(load \"$NIX_QUICKLISP_DIR/setup.lisp\")" "${args[@]}"
+    ;;
+esac