leiningen/bin/lein-pkg
2011-07-14 12:32:26 -07:00

123 lines
4 KiB
Bash
Executable file

#!/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.
LEIN_VERSION="1.6.1"
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"}
LEIN_HOME=${LEIN_HOME:-"$HOME/.lein"}
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 :)"
CLASSPATH="$CLASSPATH:$LEIN_PLUGIN_PATH:$LEIN_USER_PLUGIN_PATH:test/:src/"
LEIN_JAR="$HOME/.lein/self-installs/leiningen-$LEIN_VERSION-standalone.jar"
CLOJURE_JAR="/usr/share/java/clojure-1.2.jar:/usr/share/java/asm3.jar"
NULL_DEVICE=/dev/null
# apply context specific CLASSPATH entries
if [ -f .classpath ]; then
CLASSPATH="`cat .classpath`:$CLASSPATH"
fi
# normalize $0 on certain BSDs
if [ "$(dirname "$0")" = "." ]; then
SCRIPT="$(which $(basename "$0"))"
else
SCRIPT="$0"
fi
SHARE_JARS="ant ant-launcher classworlds clojure-1.2 \
lucene-memory maven-ant-tasks maven-artifact maven-artifact-manager \
maven-error-diagnostics maven-model maven-settings maven-project maven-profile \
maven-repository-metadataplexus-container-default-alpha plexus-interpolation \
plexus-utils wagon-file wagon-http-lightweight wagon-http-shared wagon-provider-api \
xml-apis lucene-core lucene-highlighter clucy robert-hooke lancet leiningen
backport-util-concurrent" # NFI why that last one is necessary
for JAR in $SHARE_JARS; do
CLASSPATH="$CLASSPATH":"/usr/share/java/$JAR.jar"
done
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
RLWRAP="rlwrap -m -q '\"'" # custom quote chars
fi
fi
if [ "$1" = "trampoline" ]; then
TRAMPOLINE_FILE="/tmp/lein-trampoline-$$"
$JAVA_CMD -Xbootclasspath/a:"$CLOJURE_JAR" -client $JVM_OPTS \
-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
exec sh -c "exec $TRAMPOLINE"
fi
else
exec $RLWRAP $JAVA_CMD -Xbootclasspath/a:"$CLOJURE_JAR" -client $JVM_OPTS \
-Dleiningen.original.pwd="$ORIGINAL_PWD" \
-cp "$CLASSPATH" clojure.main -e "(use 'leiningen.core)(-main)" \
$NULL_DEVICE "$@"
fi