| | |
| | | #!/usr/bin/env sh |
| | | #!/bin/sh |
| | | |
| | | # |
| | | # Copyright 2015 the original author or authors. |
| | | # Copyright © 2015-2021 the original authors. |
| | | # |
| | | # Licensed under the Apache License, Version 2.0 (the "License"); |
| | | # you may not use this file except in compliance with the License. |
| | |
| | | # |
| | | |
| | | ############################################################################## |
| | | ## |
| | | ## Gradle start up script for UN*X |
| | | ## |
| | | # |
| | | # Gradle start up script for POSIX generated by Gradle. |
| | | # |
| | | # Important for running: |
| | | # |
| | | # (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is |
| | | # noncompliant, but you have some other compliant shell such as ksh or |
| | | # bash, then to run this script, type that shell name before the whole |
| | | # command line, like: |
| | | # |
| | | # ksh Gradle |
| | | # |
| | | # Busybox and similar reduced shells will NOT work, because this script |
| | | # requires all of these POSIX shell features: |
| | | # * functions; |
| | | # * expansions «$var», «${var}», «${var:-default}», «${var+SET}», |
| | | # «${var#prefix}», «${var%suffix}», and «$( cmd )»; |
| | | # * compound commands having a testable exit status, especially «case»; |
| | | # * various built-in commands including «command», «set», and «ulimit». |
| | | # |
| | | # Important for patching: |
| | | # |
| | | # (2) This script targets any POSIX shell, so it avoids extensions provided |
| | | # by Bash, Ksh, etc; in particular arrays are avoided. |
| | | # |
| | | # The "traditional" practice of packing multiple parameters into a |
| | | # space-separated string is a well documented source of bugs and security |
| | | # problems, so this is (mostly) avoided, by progressively accumulating |
| | | # options in "$@", and eventually passing that to Java. |
| | | # |
| | | # Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, |
| | | # and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; |
| | | # see the in-line comments for details. |
| | | # |
| | | # There are tweaks for specific operating systems such as AIX, CygWin, |
| | | # Darwin, MinGW, and NonStop. |
| | | # |
| | | # (3) This script is generated from the Groovy template |
| | | # https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt |
| | | # within the Gradle project. |
| | | # |
| | | # You can find Gradle at https://github.com/gradle/gradle/. |
| | | # |
| | | ############################################################################## |
| | | |
| | | # Attempt to set APP_HOME |
| | | |
| | | # Resolve links: $0 may be a link |
| | | PRG="$0" |
| | | # Need this for relative symlinks. |
| | | while [ -h "$PRG" ] ; do |
| | | ls=`ls -ld "$PRG"` |
| | | link=`expr "$ls" : '.*-> \(.*\)$'` |
| | | if expr "$link" : '/.*' > /dev/null; then |
| | | PRG="$link" |
| | | else |
| | | PRG=`dirname "$PRG"`"/$link" |
| | | fi |
| | | app_path=$0 |
| | | |
| | | # Need this for daisy-chained symlinks. |
| | | while |
| | | APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path |
| | | [ -h "$app_path" ] |
| | | do |
| | | ls=$( ls -ld "$app_path" ) |
| | | link=${ls#*' -> '} |
| | | case $link in #( |
| | | /*) app_path=$link ;; #( |
| | | *) app_path=$APP_HOME$link ;; |
| | | esac |
| | | done |
| | | SAVED="`pwd`" |
| | | cd "`dirname \"$PRG\"`/" >/dev/null |
| | | APP_HOME="`pwd -P`" |
| | | cd "$SAVED" >/dev/null |
| | | |
| | | APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit |
| | | |
| | | APP_NAME="Gradle" |
| | | APP_BASE_NAME=`basename "$0"` |
| | | APP_BASE_NAME=${0##*/} |
| | | |
| | | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. |
| | | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' |
| | | |
| | | # Use the maximum available, or set MAX_FD != -1 to use that value. |
| | | MAX_FD="maximum" |
| | | MAX_FD=maximum |
| | | |
| | | warn () { |
| | | echo "$*" |
| | | } |
| | | } >&2 |
| | | |
| | | die () { |
| | | echo |
| | | echo "$*" |
| | | echo |
| | | exit 1 |
| | | } |
| | | } >&2 |
| | | |
| | | # OS specific support (must be 'true' or 'false'). |
| | | cygwin=false |
| | | msys=false |
| | | darwin=false |
| | | nonstop=false |
| | | case "`uname`" in |
| | | CYGWIN* ) |
| | | cygwin=true |
| | | ;; |
| | | Darwin* ) |
| | | darwin=true |
| | | ;; |
| | | MINGW* ) |
| | | msys=true |
| | | ;; |
| | | NONSTOP* ) |
| | | nonstop=true |
| | | ;; |
| | | case "$( uname )" in #( |
| | | CYGWIN* ) cygwin=true ;; #( |
| | | Darwin* ) darwin=true ;; #( |
| | | MSYS* | MINGW* ) msys=true ;; #( |
| | | NONSTOP* ) nonstop=true ;; |
| | | esac |
| | | |
| | | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar |
| | |
| | | if [ -n "$JAVA_HOME" ] ; then |
| | | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then |
| | | # IBM's JDK on AIX uses strange locations for the executables |
| | | JAVACMD="$JAVA_HOME/jre/sh/java" |
| | | JAVACMD=$JAVA_HOME/jre/sh/java |
| | | else |
| | | JAVACMD="$JAVA_HOME/bin/java" |
| | | JAVACMD=$JAVA_HOME/bin/java |
| | | fi |
| | | if [ ! -x "$JAVACMD" ] ; then |
| | | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME |
| | |
| | | location of your Java installation." |
| | | fi |
| | | else |
| | | JAVACMD="java" |
| | | JAVACMD=java |
| | | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. |
| | | |
| | | Please set the JAVA_HOME variable in your environment to match the |
| | |
| | | fi |
| | | |
| | | # Increase the maximum file descriptors if we can. |
| | | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then |
| | | MAX_FD_LIMIT=`ulimit -H -n` |
| | | if [ $? -eq 0 ] ; then |
| | | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then |
| | | MAX_FD="$MAX_FD_LIMIT" |
| | | fi |
| | | ulimit -n $MAX_FD |
| | | if [ $? -ne 0 ] ; then |
| | | warn "Could not set maximum file descriptor limit: $MAX_FD" |
| | | fi |
| | | else |
| | | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" |
| | | fi |
| | | fi |
| | | |
| | | # For Darwin, add options to specify how the application appears in the dock |
| | | if $darwin; then |
| | | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" |
| | | fi |
| | | |
| | | # For Cygwin or MSYS, switch paths to Windows format before running java |
| | | if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then |
| | | APP_HOME=`cygpath --path --mixed "$APP_HOME"` |
| | | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` |
| | | |
| | | JAVACMD=`cygpath --unix "$JAVACMD"` |
| | | |
| | | # We build the pattern for arguments to be converted via cygpath |
| | | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` |
| | | SEP="" |
| | | for dir in $ROOTDIRSRAW ; do |
| | | ROOTDIRS="$ROOTDIRS$SEP$dir" |
| | | SEP="|" |
| | | done |
| | | OURCYGPATTERN="(^($ROOTDIRS))" |
| | | # Add a user-defined pattern to the cygpath arguments |
| | | if [ "$GRADLE_CYGPATTERN" != "" ] ; then |
| | | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" |
| | | fi |
| | | # Now convert the arguments - kludge to limit ourselves to /bin/sh |
| | | i=0 |
| | | for arg in "$@" ; do |
| | | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` |
| | | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option |
| | | |
| | | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition |
| | | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` |
| | | else |
| | | eval `echo args$i`="\"$arg\"" |
| | | fi |
| | | i=`expr $i + 1` |
| | | done |
| | | case $i in |
| | | 0) set -- ;; |
| | | 1) set -- "$args0" ;; |
| | | 2) set -- "$args0" "$args1" ;; |
| | | 3) set -- "$args0" "$args1" "$args2" ;; |
| | | 4) set -- "$args0" "$args1" "$args2" "$args3" ;; |
| | | 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; |
| | | 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; |
| | | 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; |
| | | 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; |
| | | 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; |
| | | if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then |
| | | case $MAX_FD in #( |
| | | max*) |
| | | MAX_FD=$( ulimit -H -n ) || |
| | | warn "Could not query maximum file descriptor limit" |
| | | esac |
| | | case $MAX_FD in #( |
| | | '' | soft) :;; #( |
| | | *) |
| | | ulimit -n "$MAX_FD" || |
| | | warn "Could not set maximum file descriptor limit to $MAX_FD" |
| | | esac |
| | | fi |
| | | |
| | | # Escape application args |
| | | save () { |
| | | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done |
| | | echo " " |
| | | } |
| | | APP_ARGS=`save "$@"` |
| | | # Collect all arguments for the java command, stacking in reverse order: |
| | | # * args from the command line |
| | | # * the main class name |
| | | # * -classpath |
| | | # * -D...appname settings |
| | | # * --module-path (only if needed) |
| | | # * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. |
| | | |
| | | # Collect all arguments for the java command, following the shell quoting and substitution rules |
| | | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" |
| | | # For Cygwin or MSYS, switch paths to Windows format before running java |
| | | if "$cygwin" || "$msys" ; then |
| | | APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) |
| | | CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) |
| | | |
| | | JAVACMD=$( cygpath --unix "$JAVACMD" ) |
| | | |
| | | # Now convert the arguments - kludge to limit ourselves to /bin/sh |
| | | for arg do |
| | | if |
| | | case $arg in #( |
| | | -*) false ;; # don't mess with options #( |
| | | /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath |
| | | [ -e "$t" ] ;; #( |
| | | *) false ;; |
| | | esac |
| | | then |
| | | arg=$( cygpath --path --ignore --mixed "$arg" ) |
| | | fi |
| | | # Roll the args list around exactly as many times as the number of |
| | | # args, so each arg winds up back in the position where it started, but |
| | | # possibly modified. |
| | | # |
| | | # NB: a `for` loop captures its iteration list before it begins, so |
| | | # changing the positional parameters here affects neither the number of |
| | | # iterations, nor the values presented in `arg`. |
| | | shift # remove old arg |
| | | set -- "$@" "$arg" # push replacement arg |
| | | done |
| | | fi |
| | | |
| | | # Collect all arguments for the java command; |
| | | # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of |
| | | # shell script including quotes and variable substitutions, so put them in |
| | | # double quotes to make sure that they get re-expanded; and |
| | | # * put everything else in single quotes, so that it's not re-expanded. |
| | | |
| | | set -- \ |
| | | "-Dorg.gradle.appname=$APP_BASE_NAME" \ |
| | | -classpath "$CLASSPATH" \ |
| | | org.gradle.wrapper.GradleWrapperMain \ |
| | | "$@" |
| | | |
| | | # Stop when "xargs" is not available. |
| | | if ! command -v xargs >/dev/null 2>&1 |
| | | then |
| | | die "xargs is not available" |
| | | fi |
| | | |
| | | # Use "xargs" to parse quoted args. |
| | | # |
| | | # With -n1 it outputs one arg per line, with the quotes and backslashes removed. |
| | | # |
| | | # In Bash we could simply go: |
| | | # |
| | | # readarray ARGS < <( xargs -n1 <<<"$var" ) && |
| | | # set -- "${ARGS[@]}" "$@" |
| | | # |
| | | # but POSIX shell has neither arrays nor command substitution, so instead we |
| | | # post-process each arg (as a line of input to sed) to backslash-escape any |
| | | # character that might be a shell metacharacter, then use eval to reverse |
| | | # that process (while maintaining the separation between arguments), and wrap |
| | | # the whole thing up as a single "set" statement. |
| | | # |
| | | # This will of course break if any of these variables contains a newline or |
| | | # an unmatched quote. |
| | | # |
| | | |
| | | eval "set -- $( |
| | | printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | |
| | | xargs -n1 | |
| | | sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | |
| | | tr '\n' ' ' |
| | | )" '"$@"' |
| | | |
| | | exec "$JAVACMD" "$@" |