-#! /bin/sh -e
-
-case $# in
- 0 | 1) echo >&2 "usage: $0 LISP SCRIPT [ARGS ...]"; exit 127 ;;
-esac
-lisp=$1 script=$2; shift 2
-
-__CL_ARGV0=$script; export __CL_ARGV0 # this is stupid
-
-lispscript=$(printf "%s" "$script" | sed 's/[\"]/\\&/g')
-
-load_asdf_rune="\
-(let ((*load-verbose* nil)
- #+cmu (ext:*require-verbose* nil))
- (require \"asdf\"))"
-
-ignore_shebang_rune="\
-(set-dispatch-macro-character
- #\# #\!
- (lambda (stream char arg)
- (declare (ignore char arg))
- (values (read-line stream))))"
-
-clisp_startup_rune="\
-(progn
- $ignore_shebang_rune
- $load_asdf_rune
- (setf *standard-input* (ext:make-stream :input))
- (load \"$lispscript\" :verbose nil :print nil)
- (ext:quit))"
-
-abcl_startup_rune="\
-(let ((script \"$lispscript\"))
- $load_asdf_rune
- $ignore_shebang_rune
- (setf *error-output*
- (java:jnew \"org.armedbear.lisp.Stream\"
- 'sys::system-stream
- (java:jfield \"java.lang.System\" \"err\")
- 'character
- java:+true+))
- (handler-case (load script :verbose nil :print nil)
- (error (error)
- (format *error-output* \"~A (unhandled error): ~A~%\" script error)
- (ext:quit :status 255))))"
-
-#set -x
-case $lisp in
-
- sbcl)
- exec sbcl --noinform --eval "$load_asdf_rune" --script "$script" "$@"
- ;;
-
- ecl)
- exec ecl --norc --eval "$load_asdf_rune" --shell "$script" -- "$@"
- ;;
-
- clisp)
- exec clisp -norc -q -x "$clisp_startup_rune" -- "$@"
- ;;
-
- cmucl)
- exec cmucl -batch -noinit -nositeinit -quiet \
- -eval "$load_asdf_rune" \
- -eval "$ignore_shebang_rune" \
- -load "$script" -eval "(ext:quit)" -- "$@"
- ;;
-
- ccl)
- exec ccl -b -n -Q \
- -e "$load_asdf_rune" \
- -e "$ignore_shebang_rune" \
- -l "$script" -e "(ccl:quit)" -- "$@"
- ;;
-
- abcl)
- exec abcl --batch --noinform --noinit --nosystem \
- --eval "$abcl_startup_rune" -- "$@"
- ;;
-
- *)
- echo >&2 "$0: unsupported Lisp \`$lisp'"
- exit 127
- ;;
-esac