#!/bin/sh

# This script runs Processing, using the JRE in the Processing
# installation directory.

# If your system needs a different version of Java than what's included
# in the download, replace the 'java' folder with the contents of a new
# OpenJDK (Java 11 only), or create a symlink named "java" in the
# Processing installation directory that points to the JRE home directory.

# Thanks to Ferdinand Kasper for this build script. [fry]


# JARs required from JDK (anywhere in/below the JDK home directory)
JDKLIBS="rt.jar"

# Set this to non-zero for logging
LOGGING=0

# Logs name and value of a variable to stdout if LOGGING is non-zero.
# Expects the variable name as parameter $1.
log() {
  if [ $LOGGING -ne 0 ]; then
    eval echo $1=\$$1
  fi
}


# Locates JDKLIBS in a directory and its subdirectories and saves their
# absolute paths as list to JDKCP. Expects the directory as parameter $1.
# Sets SUCCESS to 1 if all libraries were found, to 0 otherwise.
make_jdkcp() {
  # Back out of JRE directory if apparently located inside a JDK
  if [ -f "$1/../bin/java" ]; then
    DIR="$1/.."
  else
    DIR="$1"
  fi
  log DIR

  JDKCP=
  SUCCESS=1

  # Locate JDKLIBS
  for L in $JDKLIBS; do
    # Locate only the first library with a matching name
    LIB=`find "$DIR" -name $L 2>/dev/null | head -n 1`
    log L
    log LIB

    # Library found?
    if [ -n "$LIB" ]; then
      JDKCP="$JDKCP"${JDKCP:+:}"$LIB"
    else
      SUCCESS=0
    fi
  done

  log JDKCP
}


# Get absolute path of directory where this script is located
APPDIR=`readlink -f "$0"`
APPDIR=`dirname "$APPDIR"`
log APPDIR

# Try using a local JDK from the same directory as this script
JDKDIR=`readlink -f "$APPDIR/java"`
make_jdkcp "$JDKDIR"
log SUCCESS

# Don't use the installed JDK, because it's not supported.
# Local JDK found?
#if [ $SUCCESS -ne 1 ]; then
#  # No, try using the preferred system JRE/JDK (if any)
#  JDKDIR=`which java` && JDKDIR=`readlink -e "$JDKDIR"` && JDKDIR=`dirname "$JDKDIR"`/..
#  make_jdkcp "$JDKDIR"
#  log SUCCESS
#fi

# Add all required JARs to CLASSPATH
CLASSPATH="$CLASSPATH"${CLASSPATH:+:}"$JDKCP"
for LIB in "$APPDIR"/lib/*.jar; do
  CLASSPATH="$CLASSPATH"${CLASSPATH:+:}"$LIB"
done
for LIB in "$APPDIR"/core/library/*.jar; do
  CLASSPATH="$CLASSPATH"${CLASSPATH:+:}"$LIB"
done
for LIB in "$APPDIR"/modes/java/mode/*.jar; do
  CLASSPATH="$CLASSPATH"${CLASSPATH:+:}"$LIB"
done
export CLASSPATH
log CLASSPATH

# Make all JDK binaries available in PATH
export PATH="$JDKDIR/bin":"$PATH"
log PATH

current_name=`basename $0`
cmd_name='processing-java'

if [ $current_name = $cmd_name ]
then
    java -Djna.nosys=true -Xmx512m processing.mode.java.Commander "$@"
    exit $?
else
  # Start Processing in the same directory as this script
  cd "$APPDIR"
  java -Djna.nosys=true -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dpython.console.encoding=UTF-8 -Xmx512m --add-opens=java.desktop/sun.awt.X11=ALL-UNNAMED processing.app.ui.Splash "$@" &
fi
