#!/usr/bin/env bash

# ----------------------------------------------------------------------------
# Executor launcher
#
# Required environment variables:
# JAVA_HOME - location of a Java installation directory.
# ----------------------------------------------------------------------------

if [ -z "$JAVA_HOME" ]; then
    EXECUTOR_JAVA=`command -v java`
    if [ ! -f "$EXECUTOR_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
    EXECUTOR_JAVA=$JAVA_HOME/bin/java
fi

# Поддержка работы readlink на linux и macOS
readlink_universal() {
    unamestr=$(uname)
    if [[ "$unamestr" == 'Darwin' ]]; then
        readlink "$1" || echo "$1";
    else
        readlink -f "$1";
    fi
}

# Устанавливаем путь до директории Исполнителя
DIR="$(cd "$(dirname "$(readlink_universal "$0")")" && pwd)"

CODEPATH="`echo ${DIR}/lib/* | awk '{gsub(/ /, ":", $0); print}'`"
export CLASSPATH=$CODEPATH

# Multiple Java versions support
JAVAVER=`"$EXECUTOR_JAVA" -version 2>&1 | awk '/version/ {x = $3; gsub(/"/, "", x); split(x, y, "."); print y[1]}'`
if [ "$JAVAVER" -ge "9" ]; then
    JPMS_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED"
fi

LOGBACK_OPT="-Dlogback.configurationFile=${DIR}/config/logback.xml"
LOG_DIR="-Dlogs.root=${DIR}/logs"
ENCODING_OPT="-Dfile.encoding=UTF-8"
LOCATION="-Dexecutor.location=${DIR}"
BOOTSTRAP="com.e1c.g5rt.executor.boot.ExecutorBootstrap"
FASTER_START_JVM_OPTIONS=" -XX:+TieredCompilation -Dorg.eclipse.emf.common.util.ReferenceClearingQueue=false"

"$EXECUTOR_JAVA" $FASTER_START_JVM_OPTIONS $JPMS_OPTS "$LOGBACK_OPT" "$LOG_DIR" "$LOCATION" $ENCODING_OPT $BOOTSTRAP "$@"
exit $?
