3 ##############################################################################
5 ## Groovy JVM Bootstrap for UN*X ##
7 ##############################################################################
14 PROGNAME=`basename "$0"`
16 #DIRNAME=`dirname "$0"`
20 # Use the maximum available, or set MAX_FD != -1 to use that value.
24 echo "${PROGNAME}: $*"
40 GROOVY_STARTUP="$HOME/.groovy/startup"
41 if [ -r "$GROOVY_STARTUP" ] ; then
47 # OS specific support (must be 'true' or 'false').
63 if [ "$1" = "-cp" -o "$1" = "-classpath" ] ; then
68 # Attempt to set JAVA_HOME if it's not already set.
69 if [ -z "$JAVA_HOME" ] ; 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"
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'`
88 # For Cygwin, ensure paths are in UNIX format before anything is touched.
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"`
95 if [ -n "$GROOVY_HOME" -a `expr "$GROOVY_HOME":'\/$'` ] ; then
96 GROOVY_HOME=`echo $GROOVY_HOME | sed -e 's/\/$//'`
100 # For MSYS, ensure paths are in appropriate format.
103 [ -n "$JAVA_HOME" ] && JAVA_HOME=`( cd "$JAVA_HOME" ; pwd )`
106 # Attempt to set GROOVY_HOME if it is not already set.
107 if [ -z "$GROOVY_HOME" -o ! -d "$GROOVY_HOME" ] ; then
108 # Resolve links: $0 may be a link to groovy's home.
110 # Need this for relative symlinks.
111 while [ -h "$PRG" ] ; do
113 link=`expr "$ls" : '.*-> \(.*\)$'`
114 if expr "$link" : '/.*' > /dev/null; then
117 PRG=`dirname "$PRG"`"/$link"
121 cd "`dirname \"$PRG\"`/.."
122 GROOVY_HOME="`pwd -P`"
126 # Set the default Groovy config if no specific one is mentioned.
127 if [ -z "$GROOVY_CONF" ] ; then
128 GROOVY_CONF="$GROOVY_HOME/conf/groovy-starter.conf"
130 STARTER_CLASSPATH="$GROOVY_HOME/lib/groovy-all-1.6.4.jar"
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
134 if [ -n "$CP" ] ; then
136 elif [ -n "$CLASSPATH" ] ; then
142 # Determine the Java command to use to start the JVM.
143 if [ -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"
149 JAVACMD="$JAVA_HOME/bin/java"
155 if [ ! -x "$JAVACMD" ] ; then
156 die "JAVA_HOME is not defined correctly, can not execute: $JAVACMD"
158 if [ -z "$JAVA_HOME" ] ; then
159 warn "JAVA_HOME environment variable is not set"
162 # Increase the maximum file descriptors if we can.
163 if [ "$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"
170 if [ $? -ne 0 ] ; then
171 warn "Could not set maximum file descriptor limit: $MAX_FD"
174 warn "Could not query businessSystem maximum file descriptor limit: $MAX_FD_LIMIT"
180 if [ "$PROFILER" != "" ] ; then
181 if [ -r "$PROFILER" ] ; then
185 die "Profiler file not found: $PROFILER"
189 # For Darwin, use classes.jar for TOOLS_JAR
190 TOOLS_JAR="$JAVA_HOME/lib/tools.jar"
192 # TOOLS_JAR="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Classes/classes.jar"
195 # For Darwin, add GROOVY_APP_NAME to the JAVA_OPTS as -Xdock:name
197 JAVA_OPTS="$JAVA_OPTS -Xdock:name=$GROOVY_APP_NAME"
198 # we may also want to set -Xdock:image
201 # For Cygwin, switch paths to Windows format before running java
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"`
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`
213 for dir in $ROOTDIRSRAW ; do
214 ROOTDIRS="$ROOTDIRS$SEP$dir"
217 OURCYGPATTERN="(^($ROOTDIRS))"
218 # Add a user-defined pattern to the cygpath arguments
219 if [ "$GROOVY_CYGPATTERN" != "" ] ; then
220 OURCYGPATTERN="$OURCYGPATTERN|($GROOVY_CYGPATTERN)"
222 # Now convert the arguments - kludge to limit ourselves to /bin/sh
225 CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
226 if [ $CHECK -ne 0 ] ; then
227 eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
229 eval `echo args$i`="\"$arg\""
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" ;;
251 # Start the Profiler or the JVM
252 if $useprofiler ; then
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 \
264 --conf "$GROOVY_CONF" \
270 STARTER_MAIN_CLASS=org.codehaus.groovy.tools.GroovyStarter