diff options
author | André Fabian Silva Delgado <emulatorman@parabola.nu> | 2015-12-11 01:20:38 -0300 |
---|---|---|
committer | André Fabian Silva Delgado <emulatorman@parabola.nu> | 2015-12-11 01:20:38 -0300 |
commit | 40a385851bde11f34ddc58395e34ed4dceacb3f9 (patch) | |
tree | 0678f37cf35d3990ade643d0b47bce165a3c66ac /libre/clojure/clj.sh | |
parent | b952111fe4fc77ed42ee9cca2ed360b9fa322c96 (diff) | |
parent | 47dea6fb6bc00d10b55b1582bd1a76ce82360822 (diff) |
Merge branch 'master' of ssh://projects.parabola.nu/~git/abslibre
Diffstat (limited to 'libre/clojure/clj.sh')
-rw-r--r-- | libre/clojure/clj.sh | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/libre/clojure/clj.sh b/libre/clojure/clj.sh new file mode 100644 index 000000000..9c43acf93 --- /dev/null +++ b/libre/clojure/clj.sh @@ -0,0 +1,138 @@ +#!/bin/bash +# +# Launcher script for Clojure programs. These environment variables can be +# used to configure the script: +# +# CLOJURE_HOME +# The root directory where Clojure is installed. +# CLOJURE_JAVA +# The name of the java executable used to run Clojure. +# CLOJURE_JAVA_OPTS +# Additional options to be passed to the java executable. +# CLOJURE_CLASSPATH +# A path to be added to Clojure's classpath. +# CLOJURE_LIBRARY_PATH +# A path to be searched for native code such as DLL's or JNI +# libraries. This gets added to the Java options as +# "-Djava.library.path=$CLOJURE_LIBRARY_PATH". +# CLOJURE_LIB +# This directory, and any jars inside it, will be automatically +# added to Clojure's classpath. +# +# CLOJURE_JLINE +# This should be the path to Jline jar. +# TODO: +# make CLOJURE_LIB a path instead of a single directory +# allow for adding to CLOJURE_LIB from the command line + +usage="\ +usage: clojure [options] [file1 [file2] ...] + +Options: + --help, -h show this message + --java-cmd, -J the Java executable to use + --java-opts, -j add options to be passed on to the JVM + --classpath, -cp add to Clojure's classpath + --library-path, -L add to the path to search for native libraries + --verbose, -v print initialization information +" +## read ~/.clojurerc for home configuration +[ -e ~/.clojurerc ] && . ~/.clojurerc + +## read ./.clojurerc for project specific configuration +[ -e ./.clojurerc ] && . ./.clojurerc + +if [ ! "$CLOJURE_HOME" ]; then + # Find the real path to Clojure's home directory if $0 is a symlink + #program="$0" + #while [ -h "$program" ]; do + # ls=`ls -ld "$program"` + # link=`expr "$ls" : '.*-> \(.*\)$'` + # if expr "$link" : '.*/.*' >/dev/null; then + # program="$link" + # else + # program="`dirname $program`/$link" + # fi + #done + #script_dir=`dirname "$program"` + #relative_clojure_home=`dirname "$script_dir"` + #CLOJURE_HOME=`cd "$relative_clojure_home" && pwd` + . /etc/profile.d/clojure.sh +fi + +if [ ! "$CLOJURE_JAVA" ]; then + CLOJURE_JAVA="java"; +fi + +if [ ! "$CLOJURE_JAVA_OPTS" ]; then + CLOJURE_JAVA_OPTS="-Dpid=$$"; # set the pid for SLIME +fi + +if [ ! "$CLOJURE_CLASSPATH" ]; then + CLOJURE_CLASSPATH="." +fi + +## Add Clojure home jars. +for jar in "$CLOJURE_HOME"/*.jar; do + CLOJURE_CLASSPATH="$CLOJURE_CLASSPATH:$jar" +done + +if [ -d "$CLOJURE_LIB" ]; then + CLOJURE_CLASSPATH="$CLOJURE_CLASSPATH:$CLOJURE_LIB" + for jar in "$CLOJURE_LIB"/*.jar; do + CLOJURE_CLASSPATH="$CLOJURE_CLASSPATH:$jar" + done +fi + +# this is now the same for both the repl and for scripts +main="clojure.main" +repl=0 +verbose=0 + +while true; do + case $1 in + -h|--help) + echo "$usage"; exit 1;; + -J|--java-cmd) + CLOJURE_JAVA="$2"; shift; shift;; + -j|--java-opts) + CLOJURE_JAVA_OPTS="$CLOJURE_JAVA_OPTS $2"; shift; shift;; + -cp|--classpath) + CLOJURE_CLASSPATH="$CLOJURE_CLASSPATH:$2"; shift; shift;; + -L|--library-path) + if [ "$CLOJURE_LIBRARY_PATH" ]; then + CLOJURE_LIBRARY_PATH="$CLOJURE_LIBRARY_PATH:$2"; + else + CLOJURE_LIBRARY_PATH="$2"; + fi + shift; shift;; + -v|--verbose) + verbose=1; shift;; + *) break;; + esac +done + +[ $verbose -eq 1 ] && echo "$CLOJURE_CLASSPATH" + +# If we didn't get any files to load on the commandline, we want to run the +# repl, with command line editing if available. +[ $# -eq 0 ] && repl=1 + +# If the classpath contains the JLine jar, use the JLine console runner +if expr "$CLOJURE_CLASSPATH" : ".*jline.*\.jar" >/dev/null; then + [ $repl -eq 1 ] && jline="jline.ConsoleRunner" +fi + +# Enable rlwrap if present +if [ $repl -eq 1 ] && [ -z $jline ]; then + rlwrap=`type -p rlwrap` +fi + +## Add CLOJURE_LIBRARY_PATH to the Java options if necessary +if [ -n "$CLOJURE_LIBRARY_PATH" ]; then + CLOJURE_JAVA_OPTS="$CLOJURE_JAVA_OPTS -Djava.library.path=$CLOJURE_LIBRARY_PATH" +fi + +cmd=`echo $rlwrap "$CLOJURE_JAVA" "$CLOJURE_JAVA_OPTS" -cp "$CLOJURE_CLASSPATH" $jline $main` +[ $verbose -eq 1 ] && echo "$cmd" "$@" +exec `echo $cmd` "$@" |