2011-07-10 21:25:36 +00:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
# This variant of the lein script is meant for downstream packagers.
|
|
|
|
# It has all the cross-platform stuff stripped out as well as the
|
|
|
|
# logic for running from checkouts and self-upgrading.
|
|
|
|
|
2011-11-12 06:40:07 +00:00
|
|
|
LEIN_VERSION="1.6.2"
|
2011-07-10 21:25:36 +00:00
|
|
|
export LEIN_VERSION
|
|
|
|
|
|
|
|
if [ `whoami` = "root" ] && [ "$LEIN_ROOT" = "" ]; then
|
|
|
|
echo "WARNING: You're currently running as root; probably by accident."
|
|
|
|
echo "Press control-C to abort or Enter to continue as root."
|
|
|
|
echo "Set LEIN_ROOT to disable this warning."
|
|
|
|
read _
|
|
|
|
fi
|
|
|
|
|
|
|
|
# cd to the project root, if applicable
|
|
|
|
NOT_FOUND=1
|
|
|
|
ORIGINAL_PWD="$PWD"
|
|
|
|
while [ ! -r "$PWD/project.clj" ] && [ "$PWD" != "/" ] && [ $NOT_FOUND -ne 0 ]; do
|
|
|
|
cd ..
|
|
|
|
if [ "$(dirname "$PWD")" = "/" ]; then
|
|
|
|
NOT_FOUND=0
|
|
|
|
cd "$ORIGINAL_PWD"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
# Support $JAVA_OPTS for backwards-compatibility.
|
|
|
|
JVM_OPTS=${JVM_OPTS:-"$JAVA_OPTS"}
|
|
|
|
JAVA_CMD=${JAVA_CMD:-"java"}
|
2011-11-11 16:26:42 +00:00
|
|
|
|
|
|
|
if [ "$LEIN_HOME" = "" ]; then
|
2011-11-11 22:55:17 +00:00
|
|
|
if [ -d "$PWD/.lein" ] && [ "$PWD" != "$HOME" ]; then
|
2011-11-11 16:26:42 +00:00
|
|
|
echo "Leiningen is running in bundled mode."
|
2011-11-11 22:55:17 +00:00
|
|
|
LEIN_HOME="$PWD/.lein"
|
2011-11-11 16:26:42 +00:00
|
|
|
else
|
|
|
|
LEIN_HOME="$HOME/.lein"
|
|
|
|
fi
|
|
|
|
fi
|
2011-07-10 21:25:36 +00:00
|
|
|
|
|
|
|
DEV_PLUGINS="$(ls -1 lib/dev/*jar 2> /dev/null)"
|
|
|
|
USER_PLUGINS="$(ls -1 "$LEIN_HOME"/plugins/*jar 2> /dev/null)"
|
|
|
|
|
|
|
|
artifact_name () {
|
|
|
|
echo "$1" | sed -e "s/.*\/\(.*\)/\1/" | \
|
|
|
|
rev | sed -e "s/raj[-[:digit:].]*-\(.*\)/\1/" | rev
|
|
|
|
}
|
|
|
|
|
|
|
|
unique_user_plugins () {
|
|
|
|
saveIFS="$IFS"
|
|
|
|
IFS="$(printf '\n\t')"
|
|
|
|
|
|
|
|
plugins="$(echo "$DEV_PLUGINS"; echo "$USER_PLUGINS")"
|
|
|
|
artifacts="$(for i in $plugins; do echo "$(artifact_name "$i")"; done)"
|
|
|
|
duplicates="$(echo "$artifacts" | sort | uniq -d)"
|
|
|
|
|
|
|
|
if [ -z "$duplicates" ]; then
|
|
|
|
echo "$USER_PLUGINS"
|
|
|
|
else
|
|
|
|
for i in $USER_PLUGINS; do
|
|
|
|
artifact="$(artifact_name "$i")"
|
|
|
|
if ! echo "$duplicates" | grep -xq "$artifact"; then
|
|
|
|
echo "$i"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
fi
|
|
|
|
IFS="$saveIFS"
|
|
|
|
}
|
|
|
|
|
|
|
|
LEIN_PLUGIN_PATH="$(echo "$DEV_PLUGINS" | tr \\n :)"
|
|
|
|
LEIN_USER_PLUGIN_PATH="$(echo "$(unique_user_plugins)" | tr \\n :)"
|
2011-11-11 16:26:42 +00:00
|
|
|
CLASSPATH="$CLASSPATH:$LEIN_PLUGIN_PATH:$LEIN_USER_PLUGIN_PATH:test/:src/:resources/"
|
2011-11-11 16:10:37 +00:00
|
|
|
CLOJURE_JAR="/usr/share/java/clojure-1.2.jar:/usr/share/java/asm3.jar:/usr/share/java/asm3-commons.jar"
|
2011-07-10 21:25:36 +00:00
|
|
|
NULL_DEVICE=/dev/null
|
|
|
|
|
|
|
|
# apply context specific CLASSPATH entries
|
2011-11-11 16:26:42 +00:00
|
|
|
if [ -f .lein-classpath ]; then
|
|
|
|
CLASSPATH="`cat .lein-classpath`:$CLASSPATH"
|
2011-07-10 21:25:36 +00:00
|
|
|
fi
|
|
|
|
|
2011-11-11 16:10:37 +00:00
|
|
|
SHARE_JARS="ant ant-launcher classworlds clojure-1.2 clojure-contrib \
|
2011-07-10 21:25:36 +00:00
|
|
|
lucene-memory maven-ant-tasks maven-artifact maven-artifact-manager \
|
|
|
|
maven-error-diagnostics maven-model maven-settings maven-project maven-profile \
|
2011-11-11 16:10:37 +00:00
|
|
|
maven-repository-metadata plexus-container-default-alpha plexus-interpolation \
|
2011-07-14 19:32:26 +00:00
|
|
|
plexus-utils wagon-file wagon-http-lightweight wagon-http-shared wagon-provider-api \
|
2011-08-01 01:24:59 +00:00
|
|
|
xml-apis lucene-core lucene-highlighter clucy robert-hooke lancet \
|
2011-07-10 21:25:36 +00:00
|
|
|
backport-util-concurrent" # NFI why that last one is necessary
|
|
|
|
for JAR in $SHARE_JARS; do
|
|
|
|
CLASSPATH="$CLASSPATH":"/usr/share/java/$JAR.jar"
|
|
|
|
done
|
|
|
|
|
2011-11-11 16:10:37 +00:00
|
|
|
# Do not use installed leiningen jar during self-compilation
|
|
|
|
if ! { [ "$1" = "compile" ] &&
|
|
|
|
grep -qsE 'defproject leiningen[[:space:]]+"[[:digit:].]+"' \
|
|
|
|
project.clj ;}; then
|
2011-08-01 01:24:59 +00:00
|
|
|
CLASSPATH="$CLASSPATH":/usr/share/java/leiningen-$LEIN_VERSION.jar
|
|
|
|
fi
|
|
|
|
|
2011-07-10 21:25:36 +00:00
|
|
|
if [ $DEBUG ]; then
|
|
|
|
echo $CLASSPATH
|
|
|
|
echo $CLOJURE_JAR
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Use rlwrap if appropriate
|
|
|
|
if ([ "$1" = "repl" ] || [ "$1" = "interactive" ] || [ "$1" = "int" ]) &&
|
|
|
|
[ -z $INSIDE_EMACS ] && [ "$TERM" != "dumb" ]; then
|
|
|
|
which rlwrap > /dev/null
|
|
|
|
if [ $? -eq 0 ]; then
|
2011-11-11 16:26:42 +00:00
|
|
|
RLWRAP="rlwrap -r -m -q '\"'" # custom quote chars
|
2011-07-10 21:25:36 +00:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ "$1" = "trampoline" ]; then
|
|
|
|
TRAMPOLINE_FILE="/tmp/lein-trampoline-$$"
|
2011-11-11 16:26:42 +00:00
|
|
|
$JAVA_CMD -Xbootclasspath/a:"$CLOJURE_JAR" -client $LEIN_JVM_OPTS \
|
2011-07-10 21:25:36 +00:00
|
|
|
-Dleiningen.original.pwd="$ORIGINAL_PWD" \
|
|
|
|
-Dleiningen.trampoline-file=$TRAMPOLINE_FILE -cp "$CLASSPATH" \
|
|
|
|
clojure.main -e "(use 'leiningen.core)(-main)" \
|
|
|
|
$NULL_DEVICE "$@"
|
|
|
|
if [ -r $TRAMPOLINE_FILE ]; then
|
|
|
|
TRAMPOLINE="$(cat $TRAMPOLINE_FILE)"
|
|
|
|
rm $TRAMPOLINE_FILE
|
2011-11-11 16:10:37 +00:00
|
|
|
exec sh -c "$TRAMPOLINE"
|
2011-07-10 21:25:36 +00:00
|
|
|
fi
|
|
|
|
else
|
2011-11-11 16:26:42 +00:00
|
|
|
exec $RLWRAP $JAVA_CMD -Xbootclasspath/a:"$CLOJURE_JAR" -client \
|
|
|
|
$LEIN_JVM_OPTS -Dleiningen.original.pwd="$ORIGINAL_PWD" \
|
2011-11-20 04:41:22 +00:00
|
|
|
-cp "$CLASSPATH" clojure.main -m leiningen.main \
|
2011-07-10 21:25:36 +00:00
|
|
|
$NULL_DEVICE "$@"
|
|
|
|
fi
|