#!/bin/sh

#
# Copyright © 2015 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.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#

##############################################################################

app_path=$0

while
	APP_HOME=${app_path%"${app_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

APP_BASE_NAME=${0##*/}
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit

MAX_FD=maximum

warn () {
	echo "$*"
} >&2

die () {
	echo
	echo "$*"
	echo
	exit 1
} >&2

cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in
	CYGWIN*) cygwin=true ;;
	Darwin*) darwin=true ;;
	MSYS* | MINGW*) msys=true ;;
	NONSTOP*) nonstop=true ;;
esac

if [ -n "$JAVA_HOME" ] ; then
	if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
		JAVACMD=$JAVA_HOME/jre/sh/java
	else
		JAVACMD=$JAVA_HOME/bin/java
	fi
	if [ ! -x "$JAVACMD" ] ; then
		die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME"
	fi
else
	JAVACMD=java
	if ! command -v java >/dev/null 2>&1
	then
		die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH."
	fi
fi

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

if "$cygwin" || "$msys" ; then
	APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
	JAVACMD=$( cygpath --unix "$JAVACMD" )
fi

DEFAULT_JVM_OPTS='-Dfile.encoding=UTF-8 "-Xmx64m" "-Xms64m"'

set -- \
	"-Dorg.gradle.appname=$APP_BASE_NAME" \
	-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
	"$@"

if ! command -v xargs >/dev/null 2>&1
then
	die "xargs is not available"
fi

eval "set -- $(
	printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
	xargs -n1 |
	sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
	tr '\n' ' '
)" '"$@"'

exec "$JAVACMD" "$@"
