#!/bin/sh

# ----------------------------------------------------------------------------
# Ring launcher
#
# Required environment variables:
# JAVA_HOME - location of a Java installation directory.
# Optional environment variables:
# RING_OPTS - additional Java options
# ----------------------------------------------------------------------------

if [ -z "$JAVA_HOME" ]; then
    RING_JAVA=`command -v java`
    if [ ! -f "$RING_JAVA" ]; then
        echo Error: JAVA_HOME environment variable is not set and Java is not found in PATH.
        echo Please set the JAVA_HOME environment variable to the location of your Java installation.
        exit 1
    fi
else
    if [ ! -f "$JAVA_HOME"/bin/java ]; then
        echo Error: $JAVA_HOME/bin/java not found.
        echo Please set the JAVA_HOME environment variable to the location of your Java installation.
        exit 1;
    fi
    RING_JAVA=$JAVA_HOME/bin/java
fi

DIR="$(cd "$(dirname "$0")" && pwd)"

# Multiple Java versions support
CODEPATH="-cp "`echo ${DIR}/lib/boot/* | awk '{ print gensub(/ /, ":", "g") }'`""
JAVAVER=`"$RING_JAVA" -version 2>&1 | awk '/version/ {x = $3; gsub(/"/, "", x); split(x, y, "."); print y[1]}'`
if [ "$JAVAVER" -eq "9" ]; then
    JAVA9_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED"
fi
if [ "$JAVAVER" -eq "10" ]; then
    JAVA9_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED"
fi
if [ "$JAVAVER" -ge "11" ]; then
    CODEPATH="-p "${DIR}/lib/boot" --add-modules=ALL-MODULE-PATH --add-opens java.base/java.lang=com.e1c.ring.cli.boot.jpms"
fi

# Check whether we can use additional java options
if [ -n "$RING_OPTS" ]; then
    JAVA_ADD_OPTS=$RING_OPTS
fi;

RING_LOCATION="-De1c.ring.location=${DIR}"
RING_MAIN="com.e1c.ring.cli.boot.RingBootstrap"

$RING_JAVA $JAVA9_OPTS $JAVA_ADD_OPTS "$RING_LOCATION" $CODEPATH $RING_MAIN "$@"
