1d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette#!/usr/bin/env bash
2d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette
3d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette##############################################################################
4d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette##
5d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette##  Gradle start up script for UN*X
6d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette##
7d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette##############################################################################
8d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette
9d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
10d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan ViveretteDEFAULT_JVM_OPTS=""
11d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette
12d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan ViveretteAPP_NAME="Gradle"
13d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan ViveretteAPP_BASE_NAME=`basename "$0"`
14d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette
15d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette# Use the maximum available, or set MAX_FD != -1 to use that value.
16d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan ViveretteMAX_FD="maximum"
17d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette
18d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverettewarn ( ) {
19d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    echo "$*"
20d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette}
21d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette
22d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverettedie ( ) {
23d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    echo
24d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    echo "$*"
25d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    echo
26d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    exit 1
27d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette}
28d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette
29d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette# OS specific support (must be 'true' or 'false').
30d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverettecygwin=false
31d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverettemsys=false
32d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverettedarwin=false
33d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverettecase "`uname`" in
34d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette  CYGWIN* )
35d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    cygwin=true
36d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    ;;
37d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette  Darwin* )
38d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    darwin=true
39d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    ;;
40d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette  MINGW* )
41d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    msys=true
42d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    ;;
43d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viveretteesac
44d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette
45d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette# For Cygwin, ensure paths are in UNIX format before anything is touched.
46d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viveretteif $cygwin ; then
47d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
48d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverettefi
49d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette
50d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette# Attempt to set APP_HOME
51d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette# Resolve links: $0 may be a link
52d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan ViverettePRG="$0"
53d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette# Need this for relative symlinks.
54d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverettewhile [ -h "$PRG" ] ; do
55d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    ls=`ls -ld "$PRG"`
56d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    link=`expr "$ls" : '.*-> \(.*\)$'`
57d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    if expr "$link" : '/.*' > /dev/null; then
58d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        PRG="$link"
59d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    else
60d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        PRG=`dirname "$PRG"`"/$link"
61d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    fi
62d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverettedone
63d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan ViveretteSAVED="`pwd`"
64d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverettecd "`dirname \"$PRG\"`/" >&-
65d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan ViveretteAPP_HOME="`pwd -P`"
66d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverettecd "$SAVED" >&-
67d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette
68d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan ViveretteCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
69d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette
70d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette# Determine the Java command to use to start the JVM.
71d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viveretteif [ -n "$JAVA_HOME" ] ; then
72d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
73d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        # IBM's JDK on AIX uses strange locations for the executables
74d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        JAVACMD="$JAVA_HOME/jre/sh/java"
75d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    else
76d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        JAVACMD="$JAVA_HOME/bin/java"
77d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    fi
78d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    if [ ! -x "$JAVACMD" ] ; then
79d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
80d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette
81d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan ViverettePlease set the JAVA_HOME variable in your environment to match the
82d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverettelocation of your Java installation."
83d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    fi
84d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viveretteelse
85d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    JAVACMD="java"
86d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
87d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette
88d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan ViverettePlease set the JAVA_HOME variable in your environment to match the
89d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverettelocation of your Java installation."
90d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverettefi
91d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette
92d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette# Increase the maximum file descriptors if we can.
93d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viveretteif [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
94d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    MAX_FD_LIMIT=`ulimit -H -n`
95d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    if [ $? -eq 0 ] ; then
96d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
97d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette            MAX_FD="$MAX_FD_LIMIT"
98d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        fi
99d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        ulimit -n $MAX_FD
100d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        if [ $? -ne 0 ] ; then
101d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette            warn "Could not set maximum file descriptor limit: $MAX_FD"
102d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        fi
103d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    else
104d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
105d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    fi
106d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverettefi
107d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette
108d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette# For Darwin, add options to specify how the application appears in the dock
109d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viveretteif $darwin; then
110d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
111d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverettefi
112d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette
113d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette# For Cygwin, switch paths to Windows format before running java
114d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viveretteif $cygwin ; then
115d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
116d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
117d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette
118d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    # We build the pattern for arguments to be converted via cygpath
119d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
120d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    SEP=""
121d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    for dir in $ROOTDIRSRAW ; do
122d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        ROOTDIRS="$ROOTDIRS$SEP$dir"
123d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        SEP="|"
124d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    done
125d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    OURCYGPATTERN="(^($ROOTDIRS))"
126d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    # Add a user-defined pattern to the cygpath arguments
127d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
128d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
129d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    fi
130d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    # Now convert the arguments - kludge to limit ourselves to /bin/sh
131d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    i=0
132d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    for arg in "$@" ; do
133d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
134d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
135d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette
136d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
137d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
138d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        else
139d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette            eval `echo args$i`="\"$arg\""
140d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        fi
141d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        i=$((i+1))
142d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    done
143d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    case $i in
144d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        (0) set -- ;;
145d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        (1) set -- "$args0" ;;
146d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        (2) set -- "$args0" "$args1" ;;
147d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        (3) set -- "$args0" "$args1" "$args2" ;;
148d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
149d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
150d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
151d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
152d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
153d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
154d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    esac
155d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverettefi
156d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette
157d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
158d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverettefunction splitJvmOpts() {
159d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette    JVM_OPTS=("$@")
160d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette}
161d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viveretteeval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
162d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan ViveretteJVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
163d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette
164d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette# Change the project's .gradle to the android out dir.
165d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan ViveretteANDROID_GRADLE_ROOT="$APP_HOME/../../out/host/gradle/frameworks/support"
166d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viveretteif [[ -z "$ANDROID_CACHE_DIR" ]]; then
167d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette  ANDROID_CACHE_DIR="$ANDROID_GRADLE_ROOT/.gradle"
168d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverettefi
169d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette
170d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette# Change the local user directories to be under the android out dir
171d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viveretteexport GRADLE_USER_HOME="$ANDROID_GRADLE_ROOT/.gradle"
172d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viveretteexport M2_HOME="$ANDROID_GRADLE_ROOT/.m2"
173d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viverette
174d2631a35604c5b498f87a2d1b39ca74d4337f6f3Alan Viveretteexec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain --project-cache-dir=$ANDROID_CACHE_DIR "$@"
175