forked from technomancy/leiningen
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlein-pkg
More file actions
executable file
·139 lines (118 loc) · 4.52 KB
/
Copy pathlein-pkg
File metadata and controls
executable file
·139 lines (118 loc) · 4.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#!/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.
#
# Note to packagers:
# rlwrap is now required unless running inside Emacs or in a dumb
# terminal (this is to improve the 'lein repl' experience).
# Make sure that your packaging pulls in rlwrap as a dependency
export LEIN_VERSION="1.7.1"
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.
export JAVA_CMD=${JAVA_CMD:-"java"}
export JVM_OPTS="${JVM_OPTS:-"$JAVA_OPTS"}"
export LEIN_JAVA_CMD=${LEIN_JAVA_CMD:-$JAVA_CMD}
export LEIN_JVM_OPTS="${LEIN_JVM_OPTS:-"$JVM_OPTS"}"
if [ "$LEIN_HOME" = "" ]; then
if [ -d "$PWD/.lein" ] && [ "$PWD" != "$HOME" ]; then
echo "Leiningen is running in bundled mode."
export LEIN_HOME="$PWD/.lein"
else
export LEIN_HOME="$HOME/.lein"
fi
fi
DEV_PLUGINS="$(ls -1 lib/dev/*jar .lein-plugins/*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/:resources/"
CLOJURE_JAR="/usr/share/java/clojure-1.2.jar:/usr/share/java/asm3.jar:/usr/share/java/asm3-commons.jar"
# apply context specific CLASSPATH entries
if [ -f .lein-classpath ]; then
CLASSPATH="`cat .lein-classpath`:$CLASSPATH"
fi
SHARE_JARS="ant ant-launcher classworlds clojure-1.2 clojure-contrib \
lucene-memory maven-ant-tasks maven-artifact maven-artifact-manager \
maven-error-diagnostics maven-model maven-settings maven-project maven-profile \
maven-repository-metadata plexus-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
# Do not use installed leiningen jar during self-compilation
if ! { [ "$1" = "compile" ] &&
grep -qsE 'defproject leiningen[[:space:]]+"[[:digit:].]+"' \
project.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 ([ -z $INSIDE_EMACS ] && [ "$TERM" != "dumb" ]); then
RLWRAP="rlwrap -r -m -q '\"'" # custom quote chars
RLWRAP_CLJ_WORDS_FILE=${RLWRAP_CLJ_WORDS_FILE:-"${HOME}/.clj_completions"}
RLWRAP_CLJ_WORDS_OPTION=""
if [ -r "${RLWRAP_CLJ_WORDS_FILE}" ]; then
RLWRAP_CLJ_WORDS_OPTION="-f ${RLWRAP_CLJ_WORDS_FILE}";
fi
RLWRAP="${RLWRAP} $RLWRAP_OPTIONS -b \"(){}[],^%$#@\";:'\" ${RLWRAP_CLJ_WORDS_OPTION}"
fi
TRAMPOLINE_FILE="/tmp/lein-trampoline-$$"
$RLWRAP $LEIN_JAVA_CMD \
-Xbootclasspath/a:"$CLOJURE_JAR" \
-client $LEIN_JVM_OPTS \
-XX:+TieredCompilation \
-Dleiningen.original.pwd="$ORIGINAL_PWD" \
-Dleiningen.trampoline-file=$TRAMPOLINE_FILE \
-cp "$CLASSPATH" \
clojure.main -e "(use 'leiningen.core)(-main)" /dev/null "$@"
EXIT_CODE=$?
if [ -r $TRAMPOLINE_FILE ]; then
TRAMPOLINE="$(cat $TRAMPOLINE_FILE)"
rm $TRAMPOLINE_FILE
exec sh -c "exec $TRAMPOLINE"
else
exit $EXIT_CODE
fi