blob: 073dc181867f4d0dc48ffe2c18fb33446e8ab9d5 [file] [log] [blame]
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -07001#!/usr/bin/env bash
Jeff Gaston69713292020-06-04 12:53:39 -04002set -o pipefail
3set -e
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -07004
5##############################################################################
6##
7## Gradle start up script for UN*X
8##
9##############################################################################
10
Aurimas Liutikas9979d072018-03-13 15:38:56 -070011# --------- androidx specific code needed for build server. ------------------
12
Jeff Gastondd8a6e92020-09-01 14:26:49 -040013SCRIPT_PATH="$(cd $(dirname $0) && pwd -P)"
Aurimas Liutikas9979d072018-03-13 15:38:56 -070014if [ -n "$OUT_DIR" ] ; then
Jeff Gaston8fd9fc82019-07-26 14:26:10 -040015 mkdir -p "$OUT_DIR"
Jeff Gastondd8a6e92020-09-01 14:26:49 -040016 OUT_DIR="$(cd $OUT_DIR && pwd -P)"
Aurimas Liutikas9979d072018-03-13 15:38:56 -070017 export GRADLE_USER_HOME="$OUT_DIR/.gradle"
Jeff Gaston38004a62019-12-11 15:43:10 -050018 export TMPDIR=$OUT_DIR
Jeff Gastoncc694ab2019-04-11 16:51:36 -040019else
Jeff Gastondd8a6e92020-09-01 14:26:49 -040020 CHECKOUT_ROOT="$(cd $SCRIPT_PATH/../.. && pwd -P)"
Jeff Gastoncc694ab2019-04-11 16:51:36 -040021 export OUT_DIR="$CHECKOUT_ROOT/out"
Jeff Gastond5719892022-04-21 12:06:24 -040022 export GRADLE_USER_HOME=~/.gradle
Aurimas Liutikas9979d072018-03-13 15:38:56 -070023fi
24
Jeff Gaston440e1ac2020-09-09 08:32:22 -040025ORG_GRADLE_JVMARGS="$(cd $SCRIPT_PATH && grep org.gradle.jvmargs gradle.properties | sed 's/^/-D/')"
Jeff Gaston0e3d19a2019-10-02 12:17:39 -040026if [ -n "$DIST_DIR" ]; then
27 mkdir -p "$DIST_DIR"
Jeff Gastondd8a6e92020-09-01 14:26:49 -040028 DIST_DIR="$(cd $DIST_DIR && pwd -P)"
Jeff Gaston0e3d19a2019-10-02 12:17:39 -040029 export LINT_PRINT_STACKTRACE=true
30
Jeff Gastone72d2302019-12-19 18:32:31 -050031 #Set the initial heap size to match the max heap size,
32 #by replacing a string like "-Xmx1g" with one like "-Xms1g -Xmx1g"
Jeff Gaston77bb2b12021-04-15 12:51:08 -040033 MAX_MEM=24g
Jeff Gastoncca984c2020-10-05 12:54:17 -040034 ORG_GRADLE_JVMARGS="$(echo $ORG_GRADLE_JVMARGS | sed "s/-Xmx\([^ ]*\)/-Xms$MAX_MEM -Xmx$MAX_MEM/")"
Jeff Gaston440e1ac2020-09-09 08:32:22 -040035
36 # tell Gradle where to put a heap dump on failure
37 ORG_GRADLE_JVMARGS="$(echo $ORG_GRADLE_JVMARGS | sed "s|$| -XX:HeapDumpPath=$DIST_DIR|")"
Jeff Gastone72d2302019-12-19 18:32:31 -050038
Jeff Gaston0e3d19a2019-10-02 12:17:39 -040039 # We don't set a default DIST_DIR in an else clause here because Studio doesn't use gradlew
40 # and doesn't set DIST_DIR and we want gradlew and Studio to match
41fi
42
Jeff Gastonc21ecb32020-11-05 17:16:35 -050043# unset ANDROID_BUILD_TOP so that Lint doesn't think we're building the platform itself
44unset ANDROID_BUILD_TOP
Aurimas Liutikas9979d072018-03-13 15:38:56 -070045# ----------------------------------------------------------------------------
46
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -070047# 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 -070048
Jeff Gastonc6df4152021-11-03 10:24:02 -040049if [[ " ${@} " =~ " -PupdateLintBaseline " ]]; then
50 # remove when b/188666845 is complete
51 # Inform lint to not fail even when creating a baseline file
52 JAVA_OPTS="$JAVA_OPTS -Dlint.baselines.continue=true"
53fi
54
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -070055APP_NAME="Gradle"
56APP_BASE_NAME=`basename "$0"`
57
58# Use the maximum available, or set MAX_FD != -1 to use that value.
59MAX_FD="maximum"
60
61warn ( ) {
62 echo "$*"
63}
64
65die ( ) {
66 echo
67 echo "$*"
68 echo
69 exit 1
70}
71
72# OS specific support (must be 'true' or 'false').
73cygwin=false
74msys=false
75darwin=false
76case "`uname`" in
77 CYGWIN* )
78 cygwin=true
79 ;;
80 Darwin* )
81 darwin=true
82 ;;
83 MINGW* )
84 msys=true
85 ;;
86esac
Rahul Ravikumar465ccfc2022-02-14 14:58:20 -080087platform_suffix="x86"
88case "$(arch)" in
89 arm64* )
90 platform_suffix="arm64"
91esac
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -070092# Attempt to set APP_HOME
93# Resolve links: $0 may be a link
94PRG="$0"
95# Need this for relative symlinks.
96while [ -h "$PRG" ] ; do
97 ls=`ls -ld "$PRG"`
98 link=`expr "$ls" : '.*-> \(.*\)$'`
99 if expr "$link" : '/.*' > /dev/null; then
100 PRG="$link"
101 else
102 PRG=`dirname "$PRG"`"/$link"
103 fi
104done
105SAVED="`pwd`"
Yigit Boyarf77697d2016-08-16 10:55:36 -0700106cd "`dirname \"$PRG\"`/" >/dev/null
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -0700107APP_HOME="`pwd -P`"
Yigit Boyarf77697d2016-08-16 10:55:36 -0700108cd "$SAVED" >/dev/null
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -0700109
110CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
111
Jeff Gaston79a43f22019-04-09 16:19:12 -0400112# --------- androidx specific code needed for lint and java. ------------------
113
Alan Viveretted38b36c2017-02-01 16:45:31 -0500114# Pick the correct fullsdk for this OS.
Alan Viverette7df63ff2017-03-06 13:12:24 -0500115if [ $darwin == "true" ]; then
Alan Viveretted38b36c2017-02-01 16:45:31 -0500116 plat="darwin"
117else
118 plat="linux"
119fi
Alan Viveretted38b36c2017-02-01 16:45:31 -0500120
Matthew Fraschilla6ab84fc32019-11-21 16:40:16 -0800121# Tests for lint checks default to using sdk defined by this variable. This removes a lot of
122# setup from each lint module.
123export ANDROID_HOME="$APP_HOME/../../prebuilts/fullsdk-$plat"
Sergey Vasilinetsefab5eb2019-01-04 12:38:06 +0000124# override JAVA_HOME, because CI machines have it and it points to very old JDK
Rahul Ravikumar465ccfc2022-02-14 14:58:20 -0800125export JAVA_HOME="$APP_HOME/../../prebuilts/jdk/jdk11/$plat-$platform_suffix"
Aurimas Liutikas4b897cb2019-10-14 13:25:08 -0700126export JAVA_TOOLS_JAR="$APP_HOME/../../prebuilts/jdk/jdk8/$plat-x86/lib/tools.jar"
127export STUDIO_GRADLE_JDK=$JAVA_HOME
Oussama Ben Abdelbakif825eb52018-12-04 16:17:00 -0500128
Aurimas Liutikasd6bc55a2022-05-24 13:19:07 -0700129# Warn developers if they try to build top level project without the full checkout
130[ ! -d "$JAVA_HOME" ] && echo "You likely checked out the standalone AndroidX git project.
131
132This type of checkout only supports building a subset of projects, see CONTRIBUTING.md" && exit -1
133
Jeff Gaston79a43f22019-04-09 16:19:12 -0400134# ----------------------------------------------------------------------------
135
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -0700136# Determine the Java command to use to start the JVM.
137if [ -n "$JAVA_HOME" ] ; then
138 if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
139 # IBM's JDK on AIX uses strange locations for the executables
140 JAVACMD="$JAVA_HOME/jre/sh/java"
141 else
142 JAVACMD="$JAVA_HOME/bin/java"
143 fi
144 if [ ! -x "$JAVACMD" ] ; then
145 die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
146
147Please set the JAVA_HOME variable in your environment to match the
148location of your Java installation."
149 fi
150else
151 JAVACMD="java"
152 which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
153
154Please set the JAVA_HOME variable in your environment to match the
155location of your Java installation."
156fi
157
158# Increase the maximum file descriptors if we can.
159if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
160 MAX_FD_LIMIT=`ulimit -H -n`
161 if [ $? -eq 0 ] ; then
162 if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
163 MAX_FD="$MAX_FD_LIMIT"
164 fi
165 ulimit -n $MAX_FD
166 if [ $? -ne 0 ] ; then
167 warn "Could not set maximum file descriptor limit: $MAX_FD"
168 fi
169 else
170 warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
171 fi
172fi
173
174# For Darwin, add options to specify how the application appears in the dock
175if $darwin; then
176 GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
177fi
178
179# For Cygwin, switch paths to Windows format before running java
180if $cygwin ; then
181 APP_HOME=`cygpath --path --mixed "$APP_HOME"`
182 CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
Yigit Boyarf77697d2016-08-16 10:55:36 -0700183 JAVACMD=`cygpath --unix "$JAVACMD"`
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -0700184
185 # We build the pattern for arguments to be converted via cygpath
186 ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
187 SEP=""
188 for dir in $ROOTDIRSRAW ; do
189 ROOTDIRS="$ROOTDIRS$SEP$dir"
190 SEP="|"
191 done
192 OURCYGPATTERN="(^($ROOTDIRS))"
193 # Add a user-defined pattern to the cygpath arguments
194 if [ "$GRADLE_CYGPATTERN" != "" ] ; then
195 OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
196 fi
197 # Now convert the arguments - kludge to limit ourselves to /bin/sh
198 i=0
199 for arg in "$@" ; do
200 CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
201 CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
202
203 if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
204 eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
205 else
206 eval `echo args$i`="\"$arg\""
207 fi
208 i=$((i+1))
209 done
210 case $i in
211 (0) set -- ;;
212 (1) set -- "$args0" ;;
213 (2) set -- "$args0" "$args1" ;;
214 (3) set -- "$args0" "$args1" "$args2" ;;
215 (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
216 (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
217 (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
218 (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
219 (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
220 (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
221 esac
222fi
223
224# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
225function splitJvmOpts() {
226 JVM_OPTS=("$@")
227}
228eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
229JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
230
Jeff Gaston826bdbe2019-11-20 14:56:24 -0500231#TODO: Remove HOME_SYSTEM_PROPERTY_ARGUMENT if https://github.com/gradle/gradle/issues/11433 gets fixed
232HOME_SYSTEM_PROPERTY_ARGUMENT=""
233if [ "$GRADLE_USER_HOME" != "" ]; then
234 HOME_SYSTEM_PROPERTY_ARGUMENT="-Duser.home=$GRADLE_USER_HOME"
235fi
Jeff Gaston38004a62019-12-11 15:43:10 -0500236if [ "$TMPDIR" != "" ]; then
237 TMPDIR_ARG="-Djava.io.tmpdir=$TMPDIR"
238fi
Jeff Gaston826bdbe2019-11-20 14:56:24 -0500239
Jeff Gastonbaa2b202021-04-23 15:44:59 -0400240if [[ " ${@} " =~ " --clean " ]]; then
241 cleanCaches=true
242else
243 cleanCaches=false
244fi
245
Jeff Gaston794b0b72021-09-28 12:47:47 -0400246if [[ " ${@} " =~ " --no-ci " ]]; then
247 disableCi=true
248else
249 disableCi=false
250fi
251
Jeff Gaston829fd822021-09-23 11:42:48 -0400252# workaround for https://github.com/gradle/gradle/issues/18386
253if [[ " ${@} " =~ " --profile " ]]; then
254 mkdir -p reports
255fi
256
Jeff Gaston7eafa5d2021-02-10 16:12:54 -0500257# Expand some arguments
Jeff Gaston794b0b72021-09-28 12:47:47 -0400258for compact in "--ci" "--strict" "--clean" "--no-ci"; do
259 expanded=""
Jeff Gaston7eafa5d2021-02-10 16:12:54 -0500260 if [ "$compact" == "--ci" ]; then
Jeff Gaston794b0b72021-09-28 12:47:47 -0400261 if [ "$disableCi" == "false" ]; then
262 expanded="--strict\
263 --stacktrace\
264 -Pandroidx.summarizeStderr\
265 -Pandroidx.enableAffectedModuleDetection\
266 --no-watch-fs"
267 fi
Jeff Gaston4537e142021-01-27 13:08:50 -0500268 fi
Jeff Gaston7eafa5d2021-02-10 16:12:54 -0500269 if [ "$compact" == "--strict" ]; then
Aurimas Liutikas41c58e02022-06-09 08:54:18 -0700270 expanded="-Pandroidx.validateNoUnrecognizedMessages\
Jeff Gaston55624742021-04-22 14:05:49 -0400271 -Pandroidx.verifyUpToDate\
Jeff Gaston7eafa5d2021-02-10 16:12:54 -0500272 --no-watch-fs\
Jeff Gaston934d0b12022-04-26 17:47:25 -0400273 --no-daemon"
274 if [ "$USE_ANDROIDX_REMOTE_BUILD_CACHE" == "" ]; then
275 expanded="$expanded --offline"
276 fi
Jeff Gaston7eafa5d2021-02-10 16:12:54 -0500277 fi
Jeff Gaston794b0b72021-09-28 12:47:47 -0400278 # if compact is something else then we parsed the argument above but
279 # still have to remove it (expanded == "") to avoid confusing Gradle
Jeff Gaston7eafa5d2021-02-10 16:12:54 -0500280
Jeff Gastonbaa2b202021-04-23 15:44:59 -0400281 # check whether this particular compat argument was passed (and therefore needs expansion)
282 if [[ " ${@} " =~ " $compact " ]]; then
283 # Expand an individual argument
284 # Start by making a copy of our list of arguments and iterating through the copy
285 for arg in "$@"; do
286 # Remove this argument from our list of arguments.
287 # By the time we've completed this loop, we will have removed the original copy of
288 # each argument, and potentially re-added a new copy or an expansion of each.
289 shift
290 # Determine whether to expand this argument
291 if [ "$arg" == "$compact" ]; then
292 # Add the expansion to our arguments
293 set -- "$@" $expanded
294 if [ "$expanded" != "" ]; then
295 echo "gradlew expanded '$compact' into '$expanded'"
296 echo
297 fi
298 # We avoid re-adding this argument itself back into the list for two reasons:
299 # 1. This argument might not be directly understood by Gradle
300 # 2. We want to enforce that all behaviors enabled by this flag can be toggled independently,
301 # so we don't want it to be easy to inadvertently check for the presence of this flag
302 # specifically
303 else
304 # Add this argument back into our arguments
305 set -- "$@" "$arg"
306 fi
307 done
308 fi
Jeff Gaston4537e142021-01-27 13:08:50 -0500309done
310
Jeff Gastonb03b05a2022-04-11 11:41:59 -0400311# check whether the user has requested profiling via yourkit
312yourkitArgPrefix="androidx.profile.yourkitAgentPath"
313yourkitAgentPath=""
314if [[ " ${@}" =~ " -P$yourkitArgPrefix" ]]; then
315 for arg in "$@"; do
316 if echo "$arg" | grep "${yourkitArgPrefix}=" >/dev/null; then
317 yourkitAgentPath="$(echo "$arg" | sed "s/-P${yourkitArgPrefix}=//")"
318 fi
319 done
320 if [ "$yourkitAgentPath" == "" ]; then
321 echo "Error: $yourkitArgPrefix must be set to the path of the YourKit Java agent" >&2
322 exit 1
323 fi
324 if [ ! -e "$yourkitAgentPath" ]; then
325 echo "Error: $yourkitAgentPath does not exist" >&2
326 exit 1
327 fi
328 # add the agent to the path
329 export _JAVA_OPTIONS="$_JAVA_OPTIONS -agentpath:$yourkitAgentPath"
330 # add arguments
331 set -- "$@" --no-daemon --rerun-tasks
332
333 # lots of blank lines because these messages are important
334 echo
335 echo
336 echo
337 echo
338 echo
339 # suggest --clean
340 if [ "$cleanCaches" == "false" ]; then
341 echo "When setting $yourkitArgPrefix you may also want to pass --clean"
342 fi
343 COLOR_YELLOW="\u001B[33m"
344 COLOR_CLEAR="\u001B[0m"
345
346 echo -e "${COLOR_YELLOW}Also be sure to start the YourKit user interface and connect to the appropriate Java process (probably the Gradle Daemon)${COLOR_CLEAR}"
347 echo
348 echo
349 echo
350 echo
351 echo
352fi
353
Jeff Gastond2806b32021-09-29 12:20:39 -0400354if [[ " ${@} " =~ " --scan " ]]; then
355 if [[ " ${@} " =~ " --offline " ]]; then
356 echo "--scan incompatible with --offline"
357 echo "you could try --no-ci"
358 exit 1
359 fi
360fi
361
Jeff Gastonbaa2b202021-04-23 15:44:59 -0400362function removeCaches() {
363 rm -rf $SCRIPT_PATH/.gradle
364 rm -rf $SCRIPT_PATH/buildSrc/.gradle
365 rm -f $SCRIPT_PATH/local.properties
366 if [ "$GRADLE_USER_HOME" != "" ]; then
367 rm -rf "$GRADLE_USER_HOME"
368 else
369 rm -rf ~/.gradle
370 fi
Jeff Gaston829fd822021-09-23 11:42:48 -0400371 # https://github.com/gradle/gradle/issues/18386
372 rm -rf $SCRIPT_PATH/reports
Jeff Gaston96eb6012021-09-27 14:55:36 +0000373 rm -rf $SCRIPT_PATH/build
Jeff Gastonbaa2b202021-04-23 15:44:59 -0400374 rm -rf $OUT_DIR
375}
376
Jeff Gaston224eb172020-01-09 12:31:47 -0500377function runGradle() {
Jeff Gaston41b90222020-08-18 11:09:55 -0400378 processOutput=false
Jeff Gastone4b4b872020-08-25 09:02:13 -0400379 if [[ " ${@} " =~ " -Pandroidx.validateNoUnrecognizedMessages " ]]; then
Jeff Gaston41b90222020-08-18 11:09:55 -0400380 processOutput=true
381 fi
382 if [[ " ${@} " =~ " -Pandroidx.summarizeStderr " ]]; then
383 processOutput=true
384 fi
385 if [ "$processOutput" == "true" ]; then
386 wrapper="$SCRIPT_PATH/development/build_log_processor.sh"
387 else
388 wrapper=""
389 fi
Jeff Gaston3febf902021-03-16 11:23:15 -0400390
Jeff Gaston1e67a612021-11-24 13:31:10 -0500391 RETURN_VALUE=0
Jeff Gaston3febf902021-03-16 11:23:15 -0400392 PROJECT_CACHE_DIR_ARGUMENT="--project-cache-dir $OUT_DIR/gradle-project-cache"
393 if $wrapper "$JAVACMD" "${JVM_OPTS[@]}" $TMPDIR_ARG -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain $HOME_SYSTEM_PROPERTY_ARGUMENT $TMPDIR_ARG $PROJECT_CACHE_DIR_ARGUMENT "$ORG_GRADLE_JVMARGS" "$@"; then
Jeff Gaston1e67a612021-11-24 13:31:10 -0500394 RETURN_VALUE=0
Jeff Gaston224eb172020-01-09 12:31:47 -0500395 else
396 # Print AndroidX-specific help message if build fails
397 # Have to do this build-failure detection in gradlew rather than in build.gradle
398 # so that this message still prints even if buildSrc itself fails
399 echo
Jeff Gaston61cef332020-12-22 11:23:09 -0500400 echo For help with unexpected failures, see development/diagnose-build-failure/README.md
401 echo
Jeff Gaston1e67a612021-11-24 13:31:10 -0500402 RETURN_VALUE=1
Jeff Gaston69713292020-06-04 12:53:39 -0400403 fi
Jeff Gaston1e67a612021-11-24 13:31:10 -0500404
405 # If the caller specified where to save data, then also save the build scan data
406 if [ "$DIST_DIR" != "" ]; then
407 if [ "$GRADLE_USER_HOME" != "" ]; then
408 if [[ " ${@} " =~ " -PdisallowExecution " ]]; then
409 zipPath="$DIST_DIR/scan-up-to-date.zip"
410 else
411 zipPath="$DIST_DIR/scan.zip"
412 fi
413 rm -f "$zipPath"
414 cd "$GRADLE_USER_HOME/build-scan-data"
415 zip -q -r "$zipPath" .
416 cd -
417 fi
418 fi
419 return $RETURN_VALUE
Jeff Gaston69713292020-06-04 12:53:39 -0400420}
421
Jeff Gaston87a4bbb2022-04-21 12:31:08 -0400422if [ "$cleanCaches" == true ]; then
423 echo "IF ./gradlew --clean FIXES YOUR BUILD; OPEN A BUG."
424 echo "In nearly all cases, it should not be necessary to run a clean build."
425 echo
426 # one case where it is convenient to have a clean build is for double-checking that a build failure isn't due to an incremental build failure
427 # another case where it is convenient to have a clean build is for performance testing
428 # another case where it is convenient to have a clean build is when you're modifying the build and may have introduced some errors but haven't shared your changes yet (at which point you should have fixed the errors)
429
430 echo "Stopping Gradle daemons"
431 runGradle --stop || true
432 echo
433
434 backupDir=~/androidx-build-state-backup
435 ./development/diagnose-build-failure/impl/backup-state.sh "$backupDir" --move # prints that it is saving state into this dir"
436
437 echo "To restore this state later, run:"
438 echo
439 echo " ./development/diagnose-build-failure/impl/restore-state.sh $backupDir"
440 echo
441 echo "Running Gradle"
442 echo
443fi
444
Jeff Gaston400ccb32020-06-08 16:44:58 -0400445if [[ " ${@} " =~ " -PdisallowExecution " ]]; then
Jeff Gaston55624742021-04-22 14:05:49 -0400446 echo "Passing '-PdisallowExecution' directly is forbidden. Did you mean -Pandroidx.verifyUpToDate ?"
Jeff Gaston400ccb32020-06-08 16:44:58 -0400447 echo "See TaskUpToDateValidator.java for more information"
448 exit 1
449fi
450
Jeff Gaston224eb172020-01-09 12:31:47 -0500451if [[ " ${@} " =~ " -PverifyUpToDate " ]]; then
Jeff Gaston55624742021-04-22 14:05:49 -0400452 echo "-PverifyUpToDate has been renamed to -Pandroidx.verifyUpToDate"
453 exit 1
454fi
455
456runGradle "$@"
457# Check whether we were given the "-Pandroidx.verifyUpToDate" argument
458if [[ " ${@} " =~ " -Pandroidx.verifyUpToDate " ]]; then
Jeff Gastoncefdeae2020-03-09 13:12:35 -0400459 # Re-run Gradle, and find all tasks that are unexpectly out of date
Jeff Gastone906e5c2020-11-05 12:33:10 -0500460 if ! runGradle "$@" -PdisallowExecution --continue; then
461 echo >&2
Jeff Gaston20f5e7a2022-01-27 13:39:25 -0500462 echo "TaskUpToDateValidator's second build failed. To reproduce, try running './gradlew -Pandroidx.verifyUpToDate <failing tasks>'" >&2
Jeff Gastone906e5c2020-11-05 12:33:10 -0500463 exit 1
464 fi
Jeff Gastonb89c82b2019-08-21 16:24:09 -0400465fi