[go: nahoru, domu]

blob: 47bfa808ecf5a6035d8b39f79ba0dea358978c4f [file] [log] [blame]
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -07001#!/usr/bin/env bash
2
3##############################################################################
4##
5## Gradle start up script for UN*X
6##
7##############################################################################
8
Aurimas Liutikas9979d072018-03-13 15:38:56 -07009# --------- androidx specific code needed for build server. ------------------
10
Jeff Gaston14292252020-01-07 11:54:44 -050011SCRIPT_PATH="$(cd $(dirname $0) && pwd)"
Aurimas Liutikas9979d072018-03-13 15:38:56 -070012if [ -n "$OUT_DIR" ] ; then
Jeff Gaston8fd9fc82019-07-26 14:26:10 -040013 mkdir -p "$OUT_DIR"
14 OUT_DIR="$(cd $OUT_DIR && pwd)"
Aurimas Liutikas9979d072018-03-13 15:38:56 -070015 export GRADLE_USER_HOME="$OUT_DIR/.gradle"
Jeff Gaston38004a62019-12-11 15:43:10 -050016 export TMPDIR=$OUT_DIR
Jeff Gastoncc694ab2019-04-11 16:51:36 -040017else
Jeff Gastoncc694ab2019-04-11 16:51:36 -040018 CHECKOUT_ROOT="$(cd $SCRIPT_PATH/../.. && pwd)"
19 export OUT_DIR="$CHECKOUT_ROOT/out"
Aurimas Liutikas9979d072018-03-13 15:38:56 -070020fi
21
Jeff Gaston14292252020-01-07 11:54:44 -050022XMX_ARG="$(cd $SCRIPT_PATH && grep org.gradle.jvmargs gradle.properties | sed 's/^/-D/')"
Jeff Gaston0e3d19a2019-10-02 12:17:39 -040023if [ -n "$DIST_DIR" ]; then
24 mkdir -p "$DIST_DIR"
25 DIST_DIR="$(cd $DIST_DIR && pwd)"
26 export LINT_PRINT_STACKTRACE=true
27
Jeff Gastone72d2302019-12-19 18:32:31 -050028 #Set the initial heap size to match the max heap size,
29 #by replacing a string like "-Xmx1g" with one like "-Xms1g -Xmx1g"
30 XMX_ARG="$(echo $XMX_ARG | sed 's/-Xmx\([^ ]*\)/-Xms\1 -Xmx\1/')"
31
Jeff Gaston0e3d19a2019-10-02 12:17:39 -040032 # We don't set a default DIST_DIR in an else clause here because Studio doesn't use gradlew
33 # and doesn't set DIST_DIR and we want gradlew and Studio to match
34fi
35
Aurimas Liutikas9979d072018-03-13 15:38:56 -070036# ----------------------------------------------------------------------------
37
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -070038# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -070039
40APP_NAME="Gradle"
41APP_BASE_NAME=`basename "$0"`
42
43# Use the maximum available, or set MAX_FD != -1 to use that value.
44MAX_FD="maximum"
45
46warn ( ) {
47 echo "$*"
48}
49
50die ( ) {
51 echo
52 echo "$*"
53 echo
54 exit 1
55}
56
57# OS specific support (must be 'true' or 'false').
58cygwin=false
59msys=false
60darwin=false
61case "`uname`" in
62 CYGWIN* )
63 cygwin=true
64 ;;
65 Darwin* )
66 darwin=true
67 ;;
68 MINGW* )
69 msys=true
70 ;;
71esac
72
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -070073# Attempt to set APP_HOME
74# Resolve links: $0 may be a link
75PRG="$0"
76# Need this for relative symlinks.
77while [ -h "$PRG" ] ; do
78 ls=`ls -ld "$PRG"`
79 link=`expr "$ls" : '.*-> \(.*\)$'`
80 if expr "$link" : '/.*' > /dev/null; then
81 PRG="$link"
82 else
83 PRG=`dirname "$PRG"`"/$link"
84 fi
85done
86SAVED="`pwd`"
Yigit Boyarf77697d2016-08-16 10:55:36 -070087cd "`dirname \"$PRG\"`/" >/dev/null
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -070088APP_HOME="`pwd -P`"
Yigit Boyarf77697d2016-08-16 10:55:36 -070089cd "$SAVED" >/dev/null
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -070090
91CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
92
Jeff Gaston79a43f22019-04-09 16:19:12 -040093# --------- androidx specific code needed for lint and java. ------------------
94
Alan Viveretted38b36c2017-02-01 16:45:31 -050095# Pick the correct fullsdk for this OS.
Alan Viverette7df63ff2017-03-06 13:12:24 -050096if [ $darwin == "true" ]; then
Alan Viveretted38b36c2017-02-01 16:45:31 -050097 plat="darwin"
98else
99 plat="linux"
100fi
101DEFAULT_JVM_OPTS="-DLINT_API_DATABASE=$APP_HOME/../../prebuilts/fullsdk-$plat/platform-tools/api/api-versions.xml"
102
Matthew Fraschilla6ab84fc32019-11-21 16:40:16 -0800103# Tests for lint checks default to using sdk defined by this variable. This removes a lot of
104# setup from each lint module.
105export ANDROID_HOME="$APP_HOME/../../prebuilts/fullsdk-$plat"
Sergey Vasilinetsefab5eb2019-01-04 12:38:06 +0000106# override JAVA_HOME, because CI machines have it and it points to very old JDK
Aurimas Liutikas4b897cb2019-10-14 13:25:08 -0700107export JAVA_HOME="$APP_HOME/../../prebuilts/jdk/jdk11/$plat-x86"
108export JAVA_TOOLS_JAR="$APP_HOME/../../prebuilts/jdk/jdk8/$plat-x86/lib/tools.jar"
109export STUDIO_GRADLE_JDK=$JAVA_HOME
Oussama Ben Abdelbakif825eb52018-12-04 16:17:00 -0500110
Jeff Gaston79a43f22019-04-09 16:19:12 -0400111# ----------------------------------------------------------------------------
112
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -0700113# Determine the Java command to use to start the JVM.
114if [ -n "$JAVA_HOME" ] ; then
115 if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
116 # IBM's JDK on AIX uses strange locations for the executables
117 JAVACMD="$JAVA_HOME/jre/sh/java"
118 else
119 JAVACMD="$JAVA_HOME/bin/java"
120 fi
121 if [ ! -x "$JAVACMD" ] ; then
122 die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
123
124Please set the JAVA_HOME variable in your environment to match the
125location of your Java installation."
126 fi
127else
128 JAVACMD="java"
129 which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
130
131Please set the JAVA_HOME variable in your environment to match the
132location of your Java installation."
133fi
134
135# Increase the maximum file descriptors if we can.
136if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
137 MAX_FD_LIMIT=`ulimit -H -n`
138 if [ $? -eq 0 ] ; then
139 if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
140 MAX_FD="$MAX_FD_LIMIT"
141 fi
142 ulimit -n $MAX_FD
143 if [ $? -ne 0 ] ; then
144 warn "Could not set maximum file descriptor limit: $MAX_FD"
145 fi
146 else
147 warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
148 fi
149fi
150
151# For Darwin, add options to specify how the application appears in the dock
152if $darwin; then
153 GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
154fi
155
156# For Cygwin, switch paths to Windows format before running java
157if $cygwin ; then
158 APP_HOME=`cygpath --path --mixed "$APP_HOME"`
159 CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
Yigit Boyarf77697d2016-08-16 10:55:36 -0700160 JAVACMD=`cygpath --unix "$JAVACMD"`
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -0700161
162 # We build the pattern for arguments to be converted via cygpath
163 ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
164 SEP=""
165 for dir in $ROOTDIRSRAW ; do
166 ROOTDIRS="$ROOTDIRS$SEP$dir"
167 SEP="|"
168 done
169 OURCYGPATTERN="(^($ROOTDIRS))"
170 # Add a user-defined pattern to the cygpath arguments
171 if [ "$GRADLE_CYGPATTERN" != "" ] ; then
172 OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
173 fi
174 # Now convert the arguments - kludge to limit ourselves to /bin/sh
175 i=0
176 for arg in "$@" ; do
177 CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
178 CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
179
180 if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
181 eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
182 else
183 eval `echo args$i`="\"$arg\""
184 fi
185 i=$((i+1))
186 done
187 case $i in
188 (0) set -- ;;
189 (1) set -- "$args0" ;;
190 (2) set -- "$args0" "$args1" ;;
191 (3) set -- "$args0" "$args1" "$args2" ;;
192 (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
193 (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
194 (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
195 (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
196 (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
197 (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
198 esac
199fi
200
201# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
202function splitJvmOpts() {
203 JVM_OPTS=("$@")
204}
205eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
206JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
207
Jeff Gaston826bdbe2019-11-20 14:56:24 -0500208#TODO: Remove HOME_SYSTEM_PROPERTY_ARGUMENT if https://github.com/gradle/gradle/issues/11433 gets fixed
209HOME_SYSTEM_PROPERTY_ARGUMENT=""
210if [ "$GRADLE_USER_HOME" != "" ]; then
211 HOME_SYSTEM_PROPERTY_ARGUMENT="-Duser.home=$GRADLE_USER_HOME"
212fi
Jeff Gaston38004a62019-12-11 15:43:10 -0500213if [ "$TMPDIR" != "" ]; then
214 TMPDIR_ARG="-Djava.io.tmpdir=$TMPDIR"
215fi
Jeff Gaston826bdbe2019-11-20 14:56:24 -0500216
Jeff Gaston18c47d32020-01-27 18:00:28 -0500217function tryToDiagnosePossibleDaemonFailure() {
218 # copy daemon logs
219 if [ -n "$GRADLE_USER_HOME" ]; then
220 if [ -n "$DIST_DIR" ]; then
221 cp -r "$GRADLE_USER_HOME/daemon" "$DIST_DIR/gradle-daemon"
Jeff Gastond54930d2020-02-13 17:25:02 -0500222 cp ./hs_err* $DIST_DIR/ 2>/dev/null || true
Jeff Gaston18c47d32020-01-27 18:00:28 -0500223 fi
224 fi
225}
226
Jeff Gaston224eb172020-01-09 12:31:47 -0500227function runGradle() {
228 if "$JAVACMD" "${JVM_OPTS[@]}" $TMPDIR_ARG -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain $HOME_SYSTEM_PROPERTY_ARGUMENT $TMPDIR_ARG "$XMX_ARG" "$@"; then
229 return 0
230 else
Jeff Gaston18c47d32020-01-27 18:00:28 -0500231 tryToDiagnosePossibleDaemonFailure
Jeff Gaston224eb172020-01-09 12:31:47 -0500232 # Print AndroidX-specific help message if build fails
233 # Have to do this build-failure detection in gradlew rather than in build.gradle
234 # so that this message still prints even if buildSrc itself fails
235 echo
236 echo See also development/diagnose-build-failure for help with build failures in this project.
237 exit 1
238 fi
239}
240
241runGradle "$@"
242# Check whether we were given the "-PverifyUpToDate" argument
243if [[ " ${@} " =~ " -PverifyUpToDate " ]]; then
Jeff Gastoncefdeae2020-03-09 13:12:35 -0400244 # Re-run Gradle, and find all tasks that are unexpectly out of date
245 runGradle "$@" -PdisallowExecution --continue
Jeff Gastonb89c82b2019-08-21 16:24:09 -0400246fi