Created
July 15, 2011 02:45
-
-
Save berngp/1083942 to your computer and use it in GitHub Desktop.
Clojure
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
############################################################################## | |
## ## | |
## Clojure start up script for UN*X ## | |
## ## | |
############################################################################## | |
# Uncomment those lines to set JVM options. CLOJURE_OPTS and JAVA_OPTS can be used together. | |
# CLOJURE_OPTS="$CLOJURE_OPTS -Xmx512m" | |
# JAVA_OPTS="$JAVA_OPTS -Xmx512m" | |
CLOJURE_APP_NAME=Clojure | |
# Use the maximum available, or set MAX_FD != -1 to use that value. | |
MAX_FD="maximum" | |
warn ( ) { | |
echo "$*" | |
} | |
die ( ) { | |
echo | |
echo "$*" | |
echo | |
exit 1 | |
} | |
# OS specific support (must be 'true' or 'false'). | |
cygwin=false | |
msys=false | |
darwin=false | |
case "`uname`" in | |
CYGWIN* ) | |
cygwin=true | |
;; | |
Darwin* ) | |
darwin=true | |
;; | |
MINGW* ) | |
msys=true | |
;; | |
esac | |
# Attempt to set JAVA_HOME if it's not already set. | |
if [ -z "$JAVA_HOME" ] ; then | |
if $darwin ; then | |
[ -z "$JAVA_HOME" -a -d "/Library/Java/Home" ] && export JAVA_HOME="/Library/Java/Home" | |
[ -z "$JAVA_HOME" -a -d "/System/Library/Frameworks/JavaVM.framework/Home" ] && export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Home" | |
else | |
javaExecutable="`which javac`" | |
[ -z "$javaExecutable" -o "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ] && die "JAVA_HOME not set and cannot find javac to deduce location, please set JAVA_HOME." | |
# readlink(1) is not available as standard on Solaris 10. | |
readLink=`which readlink` | |
[ `expr "$readLink" : '\([^ ]*\)'` = "no" ] && die "JAVA_HOME not set and readlink not available, please set JAVA_HOME." | |
javaExecutable="`readlink -f \"$javaExecutable\"`" | |
javaHome="`dirname \"$javaExecutable\"`" | |
javaHome=`expr "$javaHome" : '\(.*\)/bin'` | |
export JAVA_HOME="$javaHome" | |
fi | |
fi | |
# For Cygwin, ensure paths are in UNIX format before anything is touched. | |
if $cygwin ; then | |
[ -n "$JAVACMD" ] && JAVACMD=`cygpath --unix "$JAVACMD"` | |
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` | |
fi | |
# Attempt to set CLOJURE_HOME | |
# Resolve links: $0 may be a link | |
PRG="$0" | |
# Need this for relative symlinks. | |
while [ -h "$PRG" ] ; do | |
ls=`ls -ld "$PRG"` | |
link=`expr "$ls" : '.*-> \(.*\)$'` | |
if expr "$link" : '/.*' > /dev/null; then | |
PRG="$link" | |
else | |
PRG=`dirname "$PRG"`"/$link" | |
fi | |
done | |
SAVED="`pwd`" | |
cd "`dirname \"$PRG\"`/.." | |
CLOJURE_HOME="`pwd -P`" | |
cd "$SAVED" | |
if [ -z "$CLOJURE_EXT" ] ; then | |
if [ -d "$CLOJURE_HOME/../current-ext" ] ; then | |
export CLOJURE_EXT="$CLOJURE_HOME/../current-ext" | |
else | |
CLOJURE_EXT="" | |
fi | |
fi | |
if [ -n "${CLOJURE_EXT:-}" ]; then | |
OLD="$IFS" | |
IFS=":" | |
EXT="$(find -H $CLOJURE_EXT -mindepth 1 -maxdepth 1 -print0 | tr \\0 \:)" | |
IFS="$OLD" | |
if [ -n "${CLASSPATH:-}" ]; then | |
export CLASSPATH="$EXT$CLASSPATH" | |
else | |
export CLASSPATH="${EXT%:}" | |
fi | |
fi | |
CLASSPATH="$CLASSPATH:$CLOJURE_HOME/clojure.jar" | |
# Determine the Java command to use to start the JVM. | |
if [ -z "$JAVACMD" ] ; then | |
if [ -n "$JAVA_HOME" ] ; then | |
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then | |
# IBM's JDK on AIX uses strange locations for the executables | |
JAVACMD="$JAVA_HOME/jre/sh/java" | |
else | |
JAVACMD="$JAVA_HOME/bin/java" | |
fi | |
else | |
JAVACMD="java" | |
fi | |
fi | |
if [ ! -x "$JAVACMD" ] ; then | |
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME | |
Please set the JAVA_HOME variable in your environment to match the | |
location of your Java installation." | |
fi | |
if [ -z "$JAVA_HOME" ] ; then | |
warn "JAVA_HOME environment variable is not set" | |
fi | |
# Increase the maximum file descriptors if we can. | |
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then | |
MAX_FD_LIMIT=`ulimit -H -n` | |
if [ $? -eq 0 ] ; then | |
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then | |
MAX_FD="$MAX_FD_LIMIT" | |
fi | |
ulimit -n $MAX_FD | |
if [ $? -ne 0 ] ; then | |
warn "Could not set maximum file descriptor limit: $MAX_FD" | |
fi | |
else | |
warn "Could not query businessSystem maximum file descriptor limit: $MAX_FD_LIMIT" | |
fi | |
fi | |
# For Darwin, add CLOJURE_APP_NAME to the JAVA_OPTS as -Xdock:name | |
if $darwin; then | |
JAVA_OPTS="$JAVA_OPTS -Xdock:name=$CLOJURE_APP_NAME" | |
# we may also want to set -Xdock:image | |
fi | |
# For Cygwin, switch paths to Windows format before running java | |
if $cygwin ; then | |
CLOJURE_HOME=`cygpath --path --mixed "$CLOJURE_HOME"` | |
JAVA_HOME=`cygpath --path --mixed "$JAVA_HOME"` | |
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` | |
# We build the pattern for arguments to be converted via cygpath | |
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` | |
SEP="" | |
for dir in $ROOTDIRSRAW ; do | |
ROOTDIRS="$ROOTDIRS$SEP$dir" | |
SEP="|" | |
done | |
OURCYGPATTERN="(^($ROOTDIRS))" | |
# Add a user-defined pattern to the cygpath arguments | |
if [ "$CLOJURE_CYGPATTERN" != "" ] ; then | |
OURCYGPATTERN="$OURCYGPATTERN|($CLOJURE_CYGPATTERN)" | |
fi | |
# Now convert the arguments - kludge to limit ourselves to /bin/sh | |
i=0 | |
for arg in "$@" ; do | |
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` | |
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option | |
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition | |
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` | |
else | |
eval `echo args$i`="\"$arg\"" | |
fi | |
i=$((i+1)) | |
done | |
case $i in | |
(0) set -- ;; | |
(1) set -- "$args0" ;; | |
(2) set -- "$args0" "$args1" ;; | |
(3) set -- "$args0" "$args1" "$args2" ;; | |
(4) set -- "$args0" "$args1" "$args2" "$args3" ;; | |
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; | |
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; | |
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; | |
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; | |
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; | |
esac | |
fi | |
CLOJURE_APP_BASE_NAME=`basename "$0"` | |
# STARTER_MAIN_CLASS=clojure.main | |
STARTER_MAIN_CLASS="jline.ConsoleRunner clojure.main" | |
exec "$JAVACMD" $JAVA_OPTS $CLOJURE_OPTS \ | |
-classpath "$CLASSPATH" \ | |
$STARTER_MAIN_CLASS \ | |
"$@" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
0. Sudo | |
1. Setup your Clojure distributions, including clojure-contrib | |
e.g. | |
root@bowman-europa:/usr/local/clojure# ll | |
total 8 | |
drwxr-xr-x 8 root root 4096 2011-07-14 19:32 clojure-1.2.1 | |
drwxr-xr-x 6 root root 4096 2010-08-19 11:02 clojure-contrib-1.2.0 | |
lrwxrwxrwx 1 root root 13 2011-07-14 19:37 current -> clojure-1.2.1 | |
lrwxrwxrwx 1 root root 21 2011-07-14 20:50 current-contrib -> clojure-contrib-1.2.0 | |
2. create the Current Extensions dir. | |
mkdir current-ext && ls -l | |
bernardo@bowman-europa:/usr/local/clojure$ ll | |
total 12 | |
drwxr-xr-x 8 root root 4096 2011-07-14 21:24 clojure-1.2.1 | |
drwxr-xr-x 6 root root 4096 2010-08-19 11:02 clojure-contrib-1.2.0 | |
lrwxrwxrwx 1 root root 13 2011-07-14 19:37 current -> clojure-1.2.1 | |
lrwxrwxrwx 1 root root 21 2011-07-14 20:50 current-contrib -> clojure-contrib-1.2.0 | |
drwxr-xr-x 2 root root 4096 2011-07-14 21:24 current-ext | |
3. setup the clojure contribs as extensions | |
bernardo@bowman-europa:/usr/local/clojure/current-ext$ ls -l | |
total 60 | |
lrwxrwxrwx 1 root root 51 2011-07-14 21:19 clojure-contrib-1.2.0.jar -> ../current-contrib/target/clojure-contrib-1.2.0.jar | |
4. download jline as part of the extensions | |
curl -L http://jline.sourceforge.net/m2repo/jline/jline/0.9.9/jline-0.9.9.jar > current-ext/jline-0.9.9.jar | |
5. Create your bin dir and the clojure file (I am using the current clojure distribution to host the bin dir in this example) | |
mkdir current/bin && curl -L https://gist.github.com/raw/1083942/7b3d784109274820753875e2998f9d80ec100105/clojure > current/bin/clojure && chmod 755 current/bin/clojure | |
6. Create the link in /usr/bin | |
cd /usr/bin && ln -s /usr/local/clojure/current/bin/* . | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment