#!/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 \ backport-util-concurrent" # NFI why that last one is necessary for JAR in $SHARE_JARS; do CLASSPATH="$CLASSPATH":"/usr/share/java/$JAR.jar" done # Keep already-packaged Leiningen jar off the classpath during packaging. if [ ! -r src/leiningen/core.clj ]; then CLASSPATH="$CLASSPATH":/usr/share/java/leiningen-$LEIN_VERSION.jar fi 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 "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