#!/bin/bash
#
# Copyright (c) 2015 The SparkBoot Project
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# -----------------------------------------------------------------------------
#  Set JAVA_HOME or JRE_HOME if not already set, ensure any provided settings
#  are valid and consistent with the selected start-up options and set up the
#  endorsed directory.
# -----------------------------------------------------------------------------


# Make sure prerequisite environment variables are set
if [[ -z "$JAVA_HOME" && -z "$JRE_HOME" ]]; then
  if ${darwin}; then
    # Bugzilla 54390
    if [[ -x '/usr/libexec/java_home' ]] ; then
      export JAVA_HOME=`/usr/libexec/java_home`
    # Bugzilla 37284 (reviewed).
    elif [[ -d "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" ]]; then
      export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home"
    fi
  else
    JAVA_PATH=`which java 2>/dev/null`
    if [[ "x$JAVA_PATH" != "x" ]]; then
      JAVA_PATH=`dirname ${JAVA_PATH} 2>/dev/null`
      JRE_HOME=`dirname ${JAVA_PATH} 2>/dev/null`
    fi
    if [[ "x$JRE_HOME" = "x" ]]; then
      # XXX: Should we try other locations?
      if [[ -x /usr/bin/java ]]; then
        JRE_HOME=/usr
      fi
    fi
  fi
  if [[ -z "$JAVA_HOME" && -z "$JRE_HOME" ]]; then
    echo "Neither the JAVA_HOME nor the JRE_HOME environment variable is defined"
    echo "At least one of these environment variable is needed to run this program"
    exit 1
  fi
fi
if [[ -z "$JAVA_HOME" && "$1" = "debug" ]]; then
  echo "JAVA_HOME should point to a JDK in order to run in debug mode."
  exit 1
fi
if [[ -z "$JRE_HOME" ]]; then
  JRE_HOME="$JAVA_HOME"
fi

# If we're running under jdb, we need a full jdk.
if [[ "$1" = "debug" ]] ; then
  if [[ "$os400" = "true" ]]; then
    if [[ ! -x "$JAVA_HOME"/bin/java || ! -x "$JAVA_HOME"/bin/javac ]]; then
      echo "The JAVA_HOME environment variable is not defined correctly"
      echo "This environment variable is needed to run this program"
      echo "NB: JAVA_HOME should point to a JDK not a JRE"
      exit 1
    fi
  else
    if [[ ! -x "$JAVA_HOME"/bin/java || ! -x "$JAVA_HOME"/bin/jdb || ! -x "$JAVA_HOME"/bin/javac ]]; then
      echo "The JAVA_HOME environment variable is not defined correctly"
      echo "This environment variable is needed to run this program"
      echo "NB: JAVA_HOME should point to a JDK not a JRE"
      exit 1
    fi
  fi
fi

# Set standard commands for invoking Java, if not already set.
if [[ -z "$_RUNJAVA" ]]; then
  RUNJAVA="$JRE_HOME"/bin/java
fi
if [[ "$os400" != "true" ]]; then
  if [[ -z "$_RUNJDB" ]]; then
    _RUNJDB="$JAVA_HOME"/bin/jdb
  fi
fi