blob: 9e9ccf35b11b88507c3259bc666edac77a1c0394 [file] [log] [blame]
Jean-Baptiste Querub56ea2a2013-01-08 11:11:20 -08001# -*- mode:sh -*-
2
3##############################################################################
4## ##
5## Groovy JVM Bootstrap for UN*X ##
6## ##
7##############################################################################
8
9##
10## $Revision$
11## $Date$
12##
13
14PROGNAME=`basename "$0"`
15
16#DIRNAME=`dirname "$0"`
17
18SCRIPT_PATH="$0"
19
20# Use the maximum available, or set MAX_FD != -1 to use that value.
21MAX_FD="maximum"
22
23warn ( ) {
24 echo "${PROGNAME}: $*"
25}
26
27die ( ) {
28 warn "$*"
29 exit 1
30}
31
32earlyInit ( ) {
33 return
34}
35
36lateInit ( ) {
37 return
38}
39
40GROOVY_STARTUP="$HOME/.groovy/startup"
41if [ -r "$GROOVY_STARTUP" ] ; then
42 . "$GROOVY_STARTUP"
43fi
44
45earlyInit
46
47# OS specific support (must be 'true' or 'false').
48cygwin=false
49msys=false
50darwin=false
51case "`uname`" in
52 CYGWIN* )
53 cygwin=true
54 ;;
55 Darwin* )
56 darwin=true
57 ;;
58 MINGW* )
59 msys=true
60 ;;
61esac
62
63if [ "$1" = "-cp" -o "$1" = "-classpath" ] ; then
64 CP=$2
65 shift 2
66fi
67
68# Attempt to set JAVA_HOME if it's not already set.
69if [ -z "$JAVA_HOME" ] ; then
70 if $darwin ; then
71 [ -z "$JAVA_HOME" -a -d "/Library/Java/Home" ] && export JAVA_HOME="/Library/Java/Home"
72 [ -z "$JAVA_HOME" -a -d "/System/Library/Frameworks/JavaVM.framework/Home" ] && export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Home"
73 else
74 javaExecutable="`which javac`"
75 [ -z "$javaExecutable" -o "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ] && die "JAVA_HOME not set and cannot find javac to deduce location, please set JAVA_HOME."
76 # readlink(1) is not available as standard on Solaris 10.
77 readLink=`which readlink`
78 [ `expr "$readLink" : '\([^ ]*\)'` = "no" ] && die "JAVA_HOME not set and readlink not available, please set JAVA_HOME."
79 javaExecutable="`readlink -f \"$javaExecutable\"`"
80 javaHome="`dirname \"$javaExecutable\"`"
81 javaHome=`expr "$javaHome" : '\(.*\)/bin'`
82 JAVA_HOME="$javaHome"
83 export JAVA_HOME
84
85 fi
86fi
87
88# For Cygwin, ensure paths are in UNIX format before anything is touched.
89if $cygwin ; then
90 [ -n "$GROOVY_HOME" ] && GROOVY_HOME=`cygpath --unix "$GROOVY_HOME"`
91 [ -n "$JAVACMD" ] && JAVACMD=`cygpath --unix "$JAVACMD"`
92 [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
93 [ -n "$CP" ] && CP=`cygpath --path --unix "$CP"`
94else
95 if [ -n "$GROOVY_HOME" -a `expr "$GROOVY_HOME":'\/$'` ] ; then
96 GROOVY_HOME=`echo $GROOVY_HOME | sed -e 's/\/$//'`
97 fi
98fi
99
100# For MSYS, ensure paths are in appropriate format.
101if $msys
102then
103 [ -n "$JAVA_HOME" ] && JAVA_HOME=`( cd "$JAVA_HOME" ; pwd )`
104fi
105
106# Attempt to set GROOVY_HOME if it is not already set.
107if [ -z "$GROOVY_HOME" -o ! -d "$GROOVY_HOME" ] ; then
108 # Resolve links: $0 may be a link to groovy's home.
109 PRG="$0"
110 # Need this for relative symlinks.
111 while [ -h "$PRG" ] ; do
112 ls=`ls -ld "$PRG"`
113 link=`expr "$ls" : '.*-> \(.*\)$'`
114 if expr "$link" : '/.*' > /dev/null; then
115 PRG="$link"
116 else
117 PRG=`dirname "$PRG"`"/$link"
118 fi
119 done
120 SAVED="`pwd`"
121 cd "`dirname \"$PRG\"`/.."
122 GROOVY_HOME="`pwd -P`"
123 cd "$SAVED"
124fi
125
126# Set the default Groovy config if no specific one is mentioned.
127if [ -z "$GROOVY_CONF" ] ; then
128 GROOVY_CONF="$GROOVY_HOME/conf/groovy-starter.conf"
129fi
Tor Norbye814f8292014-03-06 17:27:18 -0800130STARTER_CLASSPATH="$GROOVY_HOME/lib/groovy-all-2.2.1.jar"
Jean-Baptiste Querub56ea2a2013-01-08 11:11:20 -0800131
132# Create the final classpath. Setting a classpath using the -cp or -classpath option means not to use the
133# global classpath. Groovy behaves then the same as the java interpreter
134if [ -n "$CP" ] ; then
135 CP="$CP":.
136elif [ -n "$CLASSPATH" ] ; then
137 CP="$CLASSPATH":.
138else
139 CP=.
140fi
141
142# Determine the Java command to use to start the JVM.
143if [ -z "$JAVACMD" ] ; then
144 if [ -n "$JAVA_HOME" ] ; then
145 if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
146 # IBM's JDK on AIX uses strange locations for the executables
147 JAVACMD="$JAVA_HOME/jre/sh/java"
148 else
149 JAVACMD="$JAVA_HOME/bin/java"
150 fi
151 else
152 JAVACMD="java"
153 fi
154fi
155if [ ! -x "$JAVACMD" ] ; then
156 die "JAVA_HOME is not defined correctly, can not execute: $JAVACMD"
157fi
158if [ -z "$JAVA_HOME" ] ; then
159 warn "JAVA_HOME environment variable is not set"
160fi
161
162# Increase the maximum file descriptors if we can.
163if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
164 MAX_FD_LIMIT=`ulimit -H -n`
165 if [ $? -eq 0 ] ; then
166 if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
167 MAX_FD="$MAX_FD_LIMIT"
168 fi
169 ulimit -n $MAX_FD
170 if [ $? -ne 0 ] ; then
171 warn "Could not set maximum file descriptor limit: $MAX_FD"
172 fi
173 else
174 warn "Could not query businessSystem maximum file descriptor limit: $MAX_FD_LIMIT"
175 fi
176fi
177
178# Setup Profiler
179useprofiler=false
180if [ "$PROFILER" != "" ] ; then
181 if [ -r "$PROFILER" ] ; then
182 . $PROFILER
183 useprofiler=true
184 else
185 die "Profiler file not found: $PROFILER"
186 fi
187fi
188
189# For Darwin, use classes.jar for TOOLS_JAR
190TOOLS_JAR="$JAVA_HOME/lib/tools.jar"
191#if $darwin; then
192# TOOLS_JAR="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Classes/classes.jar"
193#fi
194
195# For Darwin, add GROOVY_APP_NAME to the JAVA_OPTS as -Xdock:name
196if $darwin; then
197 JAVA_OPTS="$JAVA_OPTS -Xdock:name=$GROOVY_APP_NAME"
198# we may also want to set -Xdock:image
199fi
200
201# For Cygwin, switch paths to Windows format before running java
202if $cygwin ; then
203 GROOVY_HOME=`cygpath --mixed "$GROOVY_HOME"`
204 JAVA_HOME=`cygpath --mixed "$JAVA_HOME"`
205 GROOVY_CONF=`cygpath --mixed "$GROOVY_CONF"`
206 CP=`cygpath --path --mixed "$CP"`
207 TOOLS_JAR=`cygpath --mixed "$TOOLS_JAR"`
208 STARTER_CLASSPATH=`cygpath --path --mixed "$STARTER_CLASSPATH"`
209
210 # We build the pattern for arguments to be converted via cygpath
211 ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
212 SEP=""
213 for dir in $ROOTDIRSRAW ; do
214 ROOTDIRS="$ROOTDIRS$SEP$dir"
215 SEP="|"
216 done
217 OURCYGPATTERN="(^($ROOTDIRS))"
218 # Add a user-defined pattern to the cygpath arguments
219 if [ "$GROOVY_CYGPATTERN" != "" ] ; then
220 OURCYGPATTERN="$OURCYGPATTERN|($GROOVY_CYGPATTERN)"
221 fi
222 # Now convert the arguments - kludge to limit ourselves to /bin/sh
223 i=0
224 for arg in "$@" ; do
225 CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
226 if [ $CHECK -ne 0 ] ; then
227 eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
228 else
229 eval `echo args$i`="\"$arg\""
230 fi
231 i=`expr $i + 1`
232 done
233 case $i in
234 0) set -- ;;
235 1) set -- "$args0" ;;
236 2) set -- "$args0" "$args1" ;;
237 3) set -- "$args0" "$args1" "$args2" ;;
238 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
239 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
240 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
241 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
242 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
243 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
244 esac
245
246fi
247
248startGroovy ( ) {
249 CLASS=$1
250 shift
251 # Start the Profiler or the JVM
252 if $useprofiler ; then
253 runProfiler
254 else
255 exec "$JAVACMD" $JAVA_OPTS \
256 -classpath "$STARTER_CLASSPATH" \
257 -Dscript.name="$SCRIPT_PATH" \
258 -Dprogram.name="$PROGNAME" \
259 -Dgroovy.starter.conf="$GROOVY_CONF" \
260 -Dgroovy.home="$GROOVY_HOME" \
261 -Dtools.jar="$TOOLS_JAR" \
262 $STARTER_MAIN_CLASS \
263 --main $CLASS \
264 --conf "$GROOVY_CONF" \
265 --classpath "$CP" \
266 "$@"
267 fi
268}
269
270STARTER_MAIN_CLASS=org.codehaus.groovy.tools.GroovyStarter
271
272lateInit