GRAILS-1019: Allowing expressions to be used with the 'disabled' attribute for g...
[grails.git] / bin / startGrails
blob87a554a9086bb64c8198ef5dfa399cf902abeec9
1 ##############################################################################
2 ##                                                                          ##
3 ##  Groovy JVM Bootstrap for UN*X                                           ##
4 ##                                                                          ##
5 ##############################################################################
7 ##
8 ## $Revision: 4181 $ $Date: 2006-10-28 15:36:34 +0000 (Sat, 28 Oct 2006) $
9 ##
11 PROGNAME=`basename "$0"`
12 DIRNAME=`dirname "$0"`
14 # Use the maximum available, or set MAX_FD != -1 to use that
15 MAX_FD="maximum"
17 warn() {
18     echo "${PROGNAME}: $*"
21 die() {
22     warn "$*"
23     exit 1
26 earlyInit() {
27         return
29 lateInit() {
30         return
33 GROOVY_STARTUP=~/.groovy/startup
34 if [ -r "$GROOVY_STARTUP" ]; then
35         . "$GROOVY_STARTUP"
38 earlyInit
40 # OS specific support (must be 'true' or 'false').
41 cygwin=false;
42 darwin=false;
43 case "`uname`" in
44     CYGWIN*)
45         cygwin=true
46         ;;
47         
48     Darwin*)
49         darwin=true
50         ;;
51 esac
53 if [ "$1" = "-cp" ] || [ "$1" = "-classpath" ]; then
54   CP=$2
55   shift 2
58 ARGUMENTS=$@
60 # Attempt to set JAVA_HOME if it's not already set
61 if [ -z "$JAVA_HOME" ]; then
62         
63         # Set JAVA_HOME for Darwin
64         if $darwin; then
65                 
66                 [ -z "$JAVA_HOME" -a -d "/Library/Java/Home" ] &&
67                         export JAVA_HOME="/Library/Java/Home"
68                         
69                 [ -z "$JAVA_HOME" -a -d "/System/Library/Frameworks/JavaVM.framework/Home" ] &&
70                         export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Home"
71                 
72         fi
73         
76 # For Cygwin, ensure paths are in UNIX format before anything is touched
77 if $cygwin ; then
78     [ -n "$GRAILS_HOME" ] &&
79         GRAILS_HOME=`cygpath --unix "$GRAILS_HOME"`
80     [ -n "$JAVACMD" ] &&
81         JAVACMD=`cygpath --unix "$JAVACMD"`
82     [ -n "$JAVA_HOME" ] &&
83         JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
84     [ -n "$CP" ] &&
85         CP=`cygpath --path --unix "$CP"`
88 # Remove possible trailing slash (after possible cygwin correction)
89 GRAILS_HOME=`echo $GRAILS_HOME | sed -e 's|/$||g'`
91 # Locate GRAILS_HOME if not it is not set
92 if [ -z "$GRAILS_HOME" -o ! -d "$GRAILS_HOME" ] ; then
93   # resolve links - $0 may be a link to groovy's home
94   PRG="$0"
96   # need this for relative symlinks
97   while [ -h "$PRG" ] ; do
98     ls=`ls -ld "$PRG"`
99     link=`expr "$ls" : '.*-> \(.*\)$'`
100     if expr "$link" : '/.*' > /dev/null; then
101     PRG="$link"
102     else
103     PRG=`dirname "$PRG"`"/$link"
104     fi
105   done
107   SAVED="`pwd`"
108   cd "`dirname \"$PRG\"`/.."
109   GRAILS_HOME="`pwd -P`"
110   cd "$SAVED"
113 # Use default groovy-conf config
114 if [ -z "$GROOVY_CONF" ]; then
115     GROOVY_CONF="$GRAILS_HOME/conf/groovy-starter.conf"
117 STARTER_CLASSPATH="$GRAILS_HOME/lib/groovy-all-1.5.6.jar:$GRAILS_HOME/dist/grails-cli-1.0.3.jar"
119 # Allow access to Cocoa classes on OS X
120 if $darwin; then
121     STARTER_CLASSPATH="$STARTER_CLASSPATH:/System/Library/Java"
124 # Create the final classpath
125 # Setting a classpath using the -cp or -classpath option means not to use
126 # the global classpath. Groovy behaves then the same as the java 
127 # interpreter
128 if [ -n "$CP" ] ; then
129     CP="$CP":.
130 elif [ -n "$CLASSPATH" ] ; then
131     CP="$CLASSPATH":.
132 else
133     CP=.
136 # Determine the Java command to use to start the JVM
137 if [ -z "$JAVACMD" ]; then
138     if [ -n "$JAVA_HOME" ]; then
139         if [ -x "$JAVA_HOME/jre/sh/java" ]; then
140             # IBM's JDK on AIX uses strange locations for the executables
141             JAVACMD="$JAVA_HOME/jre/sh/java"
142         else
143             JAVACMD="$JAVA_HOME/bin/java"
144         fi
145     else
146         JAVACMD="java"
147     fi
149 if [ ! -x "$JAVACMD" ]; then
150     die "JAVA_HOME is not defined correctly; can not execute: $JAVACMD"
152 if [ -z "$JAVA_HOME" ] ; then
153     warn "JAVA_HOME environment variable is not set"
156 # Increase the maximum file descriptors if we can
157 if [ "$cygwin" = "false" ]; then
158     MAX_FD_LIMIT=`ulimit -H -n`
159         if [ "$MAX_FD_LIMIT" != "unlimited" ]; then
160             if [ $? -eq 0 ]; then
161                 if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ]; then
162                     # use the businessSystem max
163                     MAX_FD="$MAX_FD_LIMIT"
164                 fi
165         
166                 ulimit -n $MAX_FD
167                 if [ $? -ne 0 ]; then
168                     warn "Could not set maximum file descriptor limit: $MAX_FD"
169                 fi
170             else
171                 warn "Could not query businessSystem maximum file descriptor limit: $MAX_FD_LIMIT"
172             fi
173         fi
176 # Setup Profiler
177 useprofiler=false
178 if [ "x$PROFILER" != "x" ]; then
179     if [ -r "$PROFILER" ]; then
180         . $PROFILER
181         useprofiler=true
182     else
183         die "Profiler file not found: $PROFILER"
184     fi
187 # For Darwin, use classes.jar for TOOLS_JAR
188 TOOLS_JAR="$JAVA_HOME/lib/tools.jar"
189 #if $darwin; then
190 #   TOOLS_JAR="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Classes/classes.jar"
193 # For Cygwin, switch paths to Windows format before running java
194 if $cygwin; then
195     GRAILS_HOME=`cygpath --path --mixed "$GRAILS_HOME"`
196     JAVA_HOME=`cygpath --path --mixed "$JAVA_HOME"`
197     GROOVY_CONF=`cygpath --path --mixed "$GROOVY_CONF"`
198     CP=`cygpath --path --mixed "$CP"`    
199     TOOLS_JAR=`cygpath --path --mixed "$TOOLS_JAR"`
200     STARTER_CLASSPATH=`cygpath --path --mixed "$STARTER_CLASSPATH"`
201         # We build the pattern for arguments to be converted via cygpath
202     ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
203     SEP=""
204     for dir in $ROOTDIRSRAW; do
205         ROOTDIRS="$ROOTDIRS$SEP$dir"
206             SEP="|"
207     done
208     OURCYGPATTERN="(^($ROOTDIRS))"
209     # Add a user-defined pattern to the cygpath arguments
210     if [ "$GROOVY_CYGPATTERN" != "" ] ; then
211         OURCYGPATTERN="$OURCYGPATTERN|($GROOVY_CYGPATTERN)"
212     fi
213     # Now convert the arguments
214         ARGUMENTS=""
215     for arg in "$@" ; do
216         CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
217         if [ $CHECK -ne 0 ] ; then
218                 convArg=`cygpath --path --ignore --mixed "$arg"`
219         else
220                         convArg=$arg
221         fi   
222                 ARGUMENTS="$ARGUMENTS $convArg"
223     done
226 STARTER_MAIN_CLASS=org.codehaus.groovy.grails.cli.support.GrailsStarter
228 lateInit
230 startGrails() {
231   CLASS=$1
232   shift
233   JAVA_OPTS="-server -Xmx512M $JAVA_OPTS"
234   # Start the Profiler or the JVM
235   if $useprofiler; then
236       runProfiler
237   else
238         if [ $# -eq 0 ] ; then         # no argument given
239          exec "$JAVACMD" $JAVA_OPTS \
240           -classpath "$STARTER_CLASSPATH" \
241           -Dprogram.name="$PROGNAME" \
242           -Dgroovy.starter.conf="$GROOVY_CONF" \
243           -Dgrails.home="$GRAILS_HOME" \
244           -Dbase.dir="." \
245           -Dtools.jar="$TOOLS_JAR" \
246           $STARTER_MAIN_CLASS \
247           --main $CLASS \
248           --conf "$GROOVY_CONF" \
249           --classpath "$CP" 
250         else
251          exec "$JAVACMD" $JAVA_OPTS \
252           -classpath "$STARTER_CLASSPATH" \
253           -Dprogram.name="$PROGNAME" \
254           -Dgroovy.starter.conf="$GROOVY_CONF" \
255           -Dgrails.home="$GRAILS_HOME" \
256           -Dbase.dir="." \
257           -Dtools.jar="$TOOLS_JAR" \
258           $STARTER_MAIN_CLASS \
259           --main $CLASS \
260           --conf "$GROOVY_CONF" \
261           --classpath "$CP" \
262           "${ARGUMENTS}"
263         fi
264   fi