blob: 04379b210705c911b8d7c121ea7792c980abead4 [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
Jeff Gaston440e1ac2020-09-09 08:32:22 -040030 # tell Gradle where to put a heap dump on failure
31 ORG_GRADLE_JVMARGS="$(echo $ORG_GRADLE_JVMARGS | sed "s|$| -XX:HeapDumpPath=$DIST_DIR|")"
Jeff Gastone72d2302019-12-19 18:32:31 -050032
Jeff Gaston0e3d19a2019-10-02 12:17:39 -040033 # We don't set a default DIST_DIR in an else clause here because Studio doesn't use gradlew
34 # and doesn't set DIST_DIR and we want gradlew and Studio to match
35fi
36
Alan Viverette9d651362023-03-23 12:34:03 -040037# Loading the AIDL lexer requires disabling Lint's bytecode verification
38export ANDROID_LINT_SKIP_BYTECODE_VERIFIER=true
39
Jeff Gastonc21ecb32020-11-05 17:16:35 -050040# unset ANDROID_BUILD_TOP so that Lint doesn't think we're building the platform itself
41unset ANDROID_BUILD_TOP
Aurimas Liutikas9979d072018-03-13 15:38:56 -070042# ----------------------------------------------------------------------------
43
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -070044# 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 -070045
46APP_NAME="Gradle"
47APP_BASE_NAME=`basename "$0"`
48
49# Use the maximum available, or set MAX_FD != -1 to use that value.
50MAX_FD="maximum"
51
52warn ( ) {
53 echo "$*"
54}
55
56die ( ) {
57 echo
58 echo "$*"
59 echo
60 exit 1
61}
62
63# OS specific support (must be 'true' or 'false').
64cygwin=false
65msys=false
66darwin=false
67case "`uname`" in
68 CYGWIN* )
69 cygwin=true
70 ;;
71 Darwin* )
72 darwin=true
73 ;;
74 MINGW* )
75 msys=true
76 ;;
77esac
Rahul Ravikumar465ccfc2022-02-14 14:58:20 -080078platform_suffix="x86"
79case "$(arch)" in
80 arm64* )
81 platform_suffix="arm64"
82esac
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -070083# Attempt to set APP_HOME
84# Resolve links: $0 may be a link
85PRG="$0"
86# Need this for relative symlinks.
87while [ -h "$PRG" ] ; do
88 ls=`ls -ld "$PRG"`
89 link=`expr "$ls" : '.*-> \(.*\)$'`
90 if expr "$link" : '/.*' > /dev/null; then
91 PRG="$link"
92 else
93 PRG=`dirname "$PRG"`"/$link"
94 fi
95done
96SAVED="`pwd`"
Yigit Boyarf77697d2016-08-16 10:55:36 -070097cd "`dirname \"$PRG\"`/" >/dev/null
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -070098APP_HOME="`pwd -P`"
Yigit Boyarf77697d2016-08-16 10:55:36 -070099cd "$SAVED" >/dev/null
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -0700100
101CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
102
Jeff Gaston79a43f22019-04-09 16:19:12 -0400103# --------- androidx specific code needed for lint and java. ------------------
104
Alan Viveretted38b36c2017-02-01 16:45:31 -0500105# Pick the correct fullsdk for this OS.
Alan Viverette7df63ff2017-03-06 13:12:24 -0500106if [ $darwin == "true" ]; then
Alan Viveretted38b36c2017-02-01 16:45:31 -0500107 plat="darwin"
108else
109 plat="linux"
110fi
Alan Viveretted38b36c2017-02-01 16:45:31 -0500111
Matthew Fraschilla6ab84fc32019-11-21 16:40:16 -0800112# Tests for lint checks default to using sdk defined by this variable. This removes a lot of
113# setup from each lint module.
114export ANDROID_HOME="$APP_HOME/../../prebuilts/fullsdk-$plat"
Sergey Vasilinetsefab5eb2019-01-04 12:38:06 +0000115# override JAVA_HOME, because CI machines have it and it points to very old JDK
Aurimas Liutikas420b7f62022-08-02 13:53:39 -0700116export JAVA_HOME="$APP_HOME/../../prebuilts/jdk/jdk17/$plat-$platform_suffix"
Aurimas Liutikas4b897cb2019-10-14 13:25:08 -0700117export STUDIO_GRADLE_JDK=$JAVA_HOME
Oussama Ben Abdelbakif825eb52018-12-04 16:17:00 -0500118
Aurimas Liutikasd6bc55a2022-05-24 13:19:07 -0700119# Warn developers if they try to build top level project without the full checkout
Alan Viverette6b2fb212022-10-17 17:11:29 +0000120[ ! -d "$JAVA_HOME" ] && echo "Failed to find: $JAVA_HOME
Aurimas Liutikasd6bc55a2022-05-24 13:19:07 -0700121
Alan Viverette6b2fb212022-10-17 17:11:29 +0000122Typically, this means either:
1231. You are using the standalone AndroidX checkout, e.g. GitHub, which only supports
124 building a subset of projects. See CONTRIBUTING.md for details.
1252. You are using the repo checkout, but the last repo sync failed. Use repo status
126 to check for projects which are partially-synced, e.g. showing ***NO BRANCH***." && exit -1
Aurimas Liutikasd6bc55a2022-05-24 13:19:07 -0700127
Jeff Gaston79a43f22019-04-09 16:19:12 -0400128# ----------------------------------------------------------------------------
129
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -0700130# Determine the Java command to use to start the JVM.
131if [ -n "$JAVA_HOME" ] ; then
132 if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
133 # IBM's JDK on AIX uses strange locations for the executables
134 JAVACMD="$JAVA_HOME/jre/sh/java"
135 else
136 JAVACMD="$JAVA_HOME/bin/java"
137 fi
138 if [ ! -x "$JAVACMD" ] ; then
139 die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
140
141Please set the JAVA_HOME variable in your environment to match the
142location of your Java installation."
143 fi
144else
145 JAVACMD="java"
146 which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
147
148Please set the JAVA_HOME variable in your environment to match the
149location of your Java installation."
150fi
151
152# Increase the maximum file descriptors if we can.
153if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
154 MAX_FD_LIMIT=`ulimit -H -n`
155 if [ $? -eq 0 ] ; then
156 if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
157 MAX_FD="$MAX_FD_LIMIT"
158 fi
159 ulimit -n $MAX_FD
160 if [ $? -ne 0 ] ; then
161 warn "Could not set maximum file descriptor limit: $MAX_FD"
162 fi
163 else
164 warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
165 fi
166fi
167
168# For Darwin, add options to specify how the application appears in the dock
169if $darwin; then
170 GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
171fi
172
173# For Cygwin, switch paths to Windows format before running java
174if $cygwin ; then
175 APP_HOME=`cygpath --path --mixed "$APP_HOME"`
176 CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
Yigit Boyarf77697d2016-08-16 10:55:36 -0700177 JAVACMD=`cygpath --unix "$JAVACMD"`
Xavier Ducrohet0f3d9032014-03-18 17:25:21 -0700178
179 # We build the pattern for arguments to be converted via cygpath
180 ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
181 SEP=""
182 for dir in $ROOTDIRSRAW ; do
183 ROOTDIRS="$ROOTDIRS$SEP$dir"
184 SEP="|"
185 done
186 OURCYGPATTERN="(^($ROOTDIRS))"
187 # Add a user-defined pattern to the cygpath arguments
188 if [ "$GRADLE_CYGPATTERN" != "" ] ; then
189 OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
190 fi
191 # Now convert the arguments - kludge to limit ourselves to /bin/sh
192 i=0
193 for arg in "$@" ; do
194 CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
195 CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
196
197 if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
198 eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
199 else
200 eval `echo args$i`="\"$arg\""
201 fi
202 i=$((i+1))
203 done
204 case $i in
205 (0) set -- ;;
206 (1) set -- "$args0" ;;
207 (2) set -- "$args0" "$args1" ;;
208 (3) set -- "$args0" "$args1" "$args2" ;;
209 (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
210 (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
211 (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
212 (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
213 (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
214 (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
215 esac
216fi
217
218# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
219function splitJvmOpts() {
220 JVM_OPTS=("$@")
221}
222eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
223JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
224
Jeff Gaston826bdbe2019-11-20 14:56:24 -0500225#TODO: Remove HOME_SYSTEM_PROPERTY_ARGUMENT if https://github.com/gradle/gradle/issues/11433 gets fixed
226HOME_SYSTEM_PROPERTY_ARGUMENT=""
227if [ "$GRADLE_USER_HOME" != "" ]; then
228 HOME_SYSTEM_PROPERTY_ARGUMENT="-Duser.home=$GRADLE_USER_HOME"
229fi
Jeff Gaston38004a62019-12-11 15:43:10 -0500230if [ "$TMPDIR" != "" ]; then
231 TMPDIR_ARG="-Djava.io.tmpdir=$TMPDIR"
232fi
Jeff Gaston826bdbe2019-11-20 14:56:24 -0500233
Jeff Gastonbaa2b202021-04-23 15:44:59 -0400234if [[ " ${@} " =~ " --clean " ]]; then
235 cleanCaches=true
236else
237 cleanCaches=false
238fi
239
Jeff Gaston794b0b72021-09-28 12:47:47 -0400240if [[ " ${@} " =~ " --no-ci " ]]; then
241 disableCi=true
242else
243 disableCi=false
244fi
245
Jeff Gaston7eafa5d2021-02-10 16:12:54 -0500246# Expand some arguments
Jeff Gaston794b0b72021-09-28 12:47:47 -0400247for compact in "--ci" "--strict" "--clean" "--no-ci"; do
248 expanded=""
Jeff Gaston7eafa5d2021-02-10 16:12:54 -0500249 if [ "$compact" == "--ci" ]; then
Jeff Gaston794b0b72021-09-28 12:47:47 -0400250 if [ "$disableCi" == "false" ]; then
251 expanded="--strict\
252 --stacktrace\
253 -Pandroidx.summarizeStderr\
254 -Pandroidx.enableAffectedModuleDetection\
Jeff Gaston3fa62a82023-10-25 15:00:25 -0400255 -Pandroidx.printTimestamps\
Jeff Gastoneeb07d32023-10-05 12:14:08 -0400256 --no-watch-fs\
Jeff Gaston678a9872024-03-20 16:32:16 -0400257 -Pandroidx.highMemory\
258 --profile"
Jeff Gaston794b0b72021-09-28 12:47:47 -0400259 fi
Jeff Gaston4537e142021-01-27 13:08:50 -0500260 fi
Jeff Gaston7eafa5d2021-02-10 16:12:54 -0500261 if [ "$compact" == "--strict" ]; then
Aurimas Liutikas41c58e02022-06-09 08:54:18 -0700262 expanded="-Pandroidx.validateNoUnrecognizedMessages\
Jeff Gastone79ed0e2024-02-09 11:54:02 -0500263 -Pandroidx.verifyUpToDate"
Jeff Gaston934d0b12022-04-26 17:47:25 -0400264 if [ "$USE_ANDROIDX_REMOTE_BUILD_CACHE" == "" ]; then
265 expanded="$expanded --offline"
266 fi
Jeff Gaston7eafa5d2021-02-10 16:12:54 -0500267 fi
Jeff Gaston794b0b72021-09-28 12:47:47 -0400268 # if compact is something else then we parsed the argument above but
269 # still have to remove it (expanded == "") to avoid confusing Gradle
Jeff Gaston7eafa5d2021-02-10 16:12:54 -0500270
Jeff Gastonbaa2b202021-04-23 15:44:59 -0400271 # check whether this particular compat argument was passed (and therefore needs expansion)
272 if [[ " ${@} " =~ " $compact " ]]; then
273 # Expand an individual argument
274 # Start by making a copy of our list of arguments and iterating through the copy
275 for arg in "$@"; do
276 # Remove this argument from our list of arguments.
277 # By the time we've completed this loop, we will have removed the original copy of
278 # each argument, and potentially re-added a new copy or an expansion of each.
279 shift
280 # Determine whether to expand this argument
281 if [ "$arg" == "$compact" ]; then
282 # Add the expansion to our arguments
283 set -- "$@" $expanded
284 if [ "$expanded" != "" ]; then
285 echo "gradlew expanded '$compact' into '$expanded'"
286 echo
287 fi
288 # We avoid re-adding this argument itself back into the list for two reasons:
289 # 1. This argument might not be directly understood by Gradle
290 # 2. We want to enforce that all behaviors enabled by this flag can be toggled independently,
291 # so we don't want it to be easy to inadvertently check for the presence of this flag
292 # specifically
293 else
294 # Add this argument back into our arguments
295 set -- "$@" "$arg"
296 fi
297 done
298 fi
Jeff Gaston4537e142021-01-27 13:08:50 -0500299done
300
Jeff Gaston678a9872024-03-20 16:32:16 -0400301# workaround for https://github.com/gradle/gradle/issues/18386
302if [[ " ${@} " =~ " --profile " ]]; then
303 mkdir -p reports
304fi
305
Jeff Gaston2196fc62024-01-30 11:46:34 -0500306raiseMemory=false
Jeff Gastoneeb07d32023-10-05 12:14:08 -0400307if [[ " ${@} " =~ " -Pandroidx.highMemory " ]]; then
Jeff Gaston2196fc62024-01-30 11:46:34 -0500308 raiseMemory=true
309fi
310if [[ " ${@} " =~ " -Pandroidx.lowMemory " ]]; then
311 if [ "$raiseMemory" == "true" ]; then
312 echo "androidx.lowMemory overriding androidx.highMemory"
313 echo
314 fi
315 raiseMemory=false
316fi
Jeff Gastoneeb07d32023-10-05 12:14:08 -0400317
Jeff Gaston2196fc62024-01-30 11:46:34 -0500318if [ "$raiseMemory" == "true" ]; then
319 # Set the initial heap size to match the max heap size,
320 # by replacing a string like "-Xmx1g" with one like "-Xms1g -Xmx1g"
321 MAX_MEM=32g
322 ORG_GRADLE_JVMARGS="$(echo $ORG_GRADLE_JVMARGS | sed "s/-Xmx\([^ ]*\)/-Xms$MAX_MEM -Xmx$MAX_MEM/")"
323
324 # Increase the compiler cache size: b/260643754 . Remove when updating to JDK 20 ( https://bugs.openjdk.org/browse/JDK-8295724 )
325 ORG_GRADLE_JVMARGS="$(echo $ORG_GRADLE_JVMARGS | sed "s|$| -XX:ReservedCodeCacheSize=576M|")"
Jeff Gastoneeb07d32023-10-05 12:14:08 -0400326fi
327
Jeff Gastonb03b05a2022-04-11 11:41:59 -0400328# check whether the user has requested profiling via yourkit
329yourkitArgPrefix="androidx.profile.yourkitAgentPath"
330yourkitAgentPath=""
331if [[ " ${@}" =~ " -P$yourkitArgPrefix" ]]; then
332 for arg in "$@"; do
333 if echo "$arg" | grep "${yourkitArgPrefix}=" >/dev/null; then
334 yourkitAgentPath="$(echo "$arg" | sed "s/-P${yourkitArgPrefix}=//")"
335 fi
336 done
337 if [ "$yourkitAgentPath" == "" ]; then
338 echo "Error: $yourkitArgPrefix must be set to the path of the YourKit Java agent" >&2
339 exit 1
340 fi
341 if [ ! -e "$yourkitAgentPath" ]; then
342 echo "Error: $yourkitAgentPath does not exist" >&2
343 exit 1
344 fi
345 # add the agent to the path
346 export _JAVA_OPTIONS="$_JAVA_OPTIONS -agentpath:$yourkitAgentPath"
347 # add arguments
348 set -- "$@" --no-daemon --rerun-tasks
349
350 # lots of blank lines because these messages are important
351 echo
352 echo
353 echo
354 echo
355 echo
356 # suggest --clean
357 if [ "$cleanCaches" == "false" ]; then
358 echo "When setting $yourkitArgPrefix you may also want to pass --clean"
359 fi
360 COLOR_YELLOW="\u001B[33m"
361 COLOR_CLEAR="\u001B[0m"
362
363 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}"
364 echo
365 echo
366 echo
367 echo
368 echo
369fi
370
Jeff Gastond2806b32021-09-29 12:20:39 -0400371if [[ " ${@} " =~ " --scan " ]]; then
372 if [[ " ${@} " =~ " --offline " ]]; then
373 echo "--scan incompatible with --offline"
374 echo "you could try --no-ci"
375 exit 1
376 fi
377fi
378
Jeff Gastonbaa2b202021-04-23 15:44:59 -0400379function removeCaches() {
380 rm -rf $SCRIPT_PATH/.gradle
381 rm -rf $SCRIPT_PATH/buildSrc/.gradle
382 rm -f $SCRIPT_PATH/local.properties
383 if [ "$GRADLE_USER_HOME" != "" ]; then
384 rm -rf "$GRADLE_USER_HOME"
385 else
386 rm -rf ~/.gradle
387 fi
Jeff Gaston829fd822021-09-23 11:42:48 -0400388 # https://github.com/gradle/gradle/issues/18386
389 rm -rf $SCRIPT_PATH/reports
Jeff Gaston96eb6012021-09-27 14:55:36 +0000390 rm -rf $SCRIPT_PATH/build
Jeff Gastonbaa2b202021-04-23 15:44:59 -0400391 rm -rf $OUT_DIR
392}
393
Jeff Gaston6cca77e52023-08-07 11:10:17 -0400394# Move any preexisting build scan to make room for a new one
395# After moving a build scan several times it eventually gets deleted
396function rotateBuildScans() {
397 filePrefix="$1"
398 iPlus1="10"
399 for i in $(seq 9 -1 1); do
400 mv "${filePrefix}.${i}.zip" "${filePrefix}.${iPlus1}.zip" 2>/dev/null || true
401 iPlus1=$i
402 done
403 mv ${filePrefix}.zip "${filePrefix}.1.zip" 2>/dev/null || true
404}
405
Jeff Gaston224eb172020-01-09 12:31:47 -0500406function runGradle() {
Jeff Gaston41b90222020-08-18 11:09:55 -0400407 processOutput=false
Jeff Gastone4b4b872020-08-25 09:02:13 -0400408 if [[ " ${@} " =~ " -Pandroidx.validateNoUnrecognizedMessages " ]]; then
Jeff Gaston41b90222020-08-18 11:09:55 -0400409 processOutput=true
410 fi
411 if [[ " ${@} " =~ " -Pandroidx.summarizeStderr " ]]; then
412 processOutput=true
413 fi
Jeff Gaston3fa62a82023-10-25 15:00:25 -0400414 if [[ "${@} " =~ " -Pandroidx.printTimestamps " ]]; then
415 processOutput=true
416 fi
Jeff Gaston41b90222020-08-18 11:09:55 -0400417 if [ "$processOutput" == "true" ]; then
418 wrapper="$SCRIPT_PATH/development/build_log_processor.sh"
419 else
420 wrapper=""
421 fi
Jeff Gaston3febf902021-03-16 11:23:15 -0400422
Jeff Gaston1e67a612021-11-24 13:31:10 -0500423 RETURN_VALUE=0
Aurimas Liutikas07c47d32023-08-03 15:46:39 -0700424 set -- "$@" -Dorg.gradle.projectcachedir="$OUT_DIR/gradle-project-cache"
Jeff Gaston9f25cdb2024-01-02 16:44:09 -0500425 KOTLIN_PROJECT_PERSISTENT_DIR="$OUT_DIR/kotlin-project-persistent-dir"
426 mkdir -p "$KOTLIN_PROJECT_PERSISTENT_DIR"
427 set -- "$@" -Pkotlin.project.persistent.dir="$KOTLIN_PROJECT_PERSISTENT_DIR"
Jeff Gastondc9c8cb2023-02-08 16:24:38 -0500428 # Disabled in Studio until these errors become shown (b/268380971) or computed more quickly (https://github.com/gradle/gradle/issues/23272)
429 if [[ " ${@} " =~ " --dependency-verification=" ]]; then
430 VERIFICATION_ARGUMENT="" # already specified by caller
431 else
432 VERIFICATION_ARGUMENT=--dependency-verification=strict
433 fi
Aurimas Liutikas07c47d32023-08-03 15:46:39 -0700434 if $wrapper "$JAVACMD" "${JVM_OPTS[@]}" $TMPDIR_ARG -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain $HOME_SYSTEM_PROPERTY_ARGUMENT $TMPDIR_ARG $VERIFICATION_ARGUMENT "$ORG_GRADLE_JVMARGS" "$@"; then
Jeff Gaston1e67a612021-11-24 13:31:10 -0500435 RETURN_VALUE=0
Jeff Gaston224eb172020-01-09 12:31:47 -0500436 else
437 # Print AndroidX-specific help message if build fails
438 # Have to do this build-failure detection in gradlew rather than in build.gradle
439 # so that this message still prints even if buildSrc itself fails
440 echo
Jeff Gaston61cef332020-12-22 11:23:09 -0500441 echo For help with unexpected failures, see development/diagnose-build-failure/README.md
442 echo
Jeff Gaston1e67a612021-11-24 13:31:10 -0500443 RETURN_VALUE=1
Jeff Gaston69713292020-06-04 12:53:39 -0400444 fi
Jeff Gaston1e67a612021-11-24 13:31:10 -0500445
446 # If the caller specified where to save data, then also save the build scan data
447 if [ "$DIST_DIR" != "" ]; then
448 if [ "$GRADLE_USER_HOME" != "" ]; then
Jeff Gaston9d97d5c2022-07-06 10:55:47 -0400449 scanDir="$GRADLE_USER_HOME/build-scan-data"
450 if [ -e "$scanDir" ]; then
451 if [[ "$DISALLOW_TASK_EXECUTION" != "" ]]; then
Jeff Gaston6cca77e52023-08-07 11:10:17 -0400452 zipPrefix="$DIST_DIR/scan-up-to-date"
Jeff Gaston9d97d5c2022-07-06 10:55:47 -0400453 else
Jeff Gaston6cca77e52023-08-07 11:10:17 -0400454 zipPrefix="$DIST_DIR/scan"
Jeff Gaston9d97d5c2022-07-06 10:55:47 -0400455 fi
Jeff Gaston6cca77e52023-08-07 11:10:17 -0400456 rotateBuildScans "$zipPrefix"
457 zipPath="${zipPrefix}.zip"
Jeff Gaston9d97d5c2022-07-06 10:55:47 -0400458 cd "$GRADLE_USER_HOME/build-scan-data"
459 zip -q -r "$zipPath" .
460 cd -
Jeff Gaston1e67a612021-11-24 13:31:10 -0500461 fi
Jeff Gaston1e67a612021-11-24 13:31:10 -0500462 fi
463 fi
464 return $RETURN_VALUE
Jeff Gaston69713292020-06-04 12:53:39 -0400465}
466
Jeff Gaston87a4bbb2022-04-21 12:31:08 -0400467if [ "$cleanCaches" == true ]; then
468 echo "IF ./gradlew --clean FIXES YOUR BUILD; OPEN A BUG."
469 echo "In nearly all cases, it should not be necessary to run a clean build."
470 echo
471 # 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
472 # another case where it is convenient to have a clean build is for performance testing
473 # 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)
474
475 echo "Stopping Gradle daemons"
476 runGradle --stop || true
477 echo
478
479 backupDir=~/androidx-build-state-backup
480 ./development/diagnose-build-failure/impl/backup-state.sh "$backupDir" --move # prints that it is saving state into this dir"
481
482 echo "To restore this state later, run:"
483 echo
484 echo " ./development/diagnose-build-failure/impl/restore-state.sh $backupDir"
485 echo
486 echo "Running Gradle"
487 echo
488fi
489
Jeff Gaston7121d832022-06-08 13:36:50 -0400490if [[ "$DISALLOW_TASK_EXECUTION" != "" ]]; then
491 echo "Setting 'DISALLOW_TASK_EXECUTION' directly is forbidden. Did you mean -Pandroidx.verifyUpToDate ?"
Jeff Gaston400ccb32020-06-08 16:44:58 -0400492 echo "See TaskUpToDateValidator.java for more information"
493 exit 1
494fi
495
Jeff Gaston55624742021-04-22 14:05:49 -0400496runGradle "$@"
497# Check whether we were given the "-Pandroidx.verifyUpToDate" argument
498if [[ " ${@} " =~ " -Pandroidx.verifyUpToDate " ]]; then
Jeff Gastoncefdeae2020-03-09 13:12:35 -0400499 # Re-run Gradle, and find all tasks that are unexpectly out of date
Jeff Gaston7121d832022-06-08 13:36:50 -0400500 if ! DISALLOW_TASK_EXECUTION=true runGradle "$@" --continue; then
Jeff Gastone906e5c2020-11-05 12:33:10 -0500501 echo >&2
Jeff Gaston20f5e7a2022-01-27 13:39:25 -0500502 echo "TaskUpToDateValidator's second build failed. To reproduce, try running './gradlew -Pandroidx.verifyUpToDate <failing tasks>'" >&2
Jeff Gastone906e5c2020-11-05 12:33:10 -0500503 exit 1
504 fi
Jeff Gastonb89c82b2019-08-21 16:24:09 -0400505fi