#!/bin/bash -e

#  export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-arf #We need ARM libjvm.so 

  JAVA_HOME_ERROR="Error: Cannot find Java JRE installation. Please set JAVA_HOME."
  JAVA_JRE_ERROR="Error: Can't find JVM libraries in JAVA_HOME. Please check your Java JRE Installation."
  ERROR_AUTORECONF="Error: Some error occurred while executing autoreconf"
  ERROR_CONFIGURE="Error: Some error occurred while executing configure"
  ERROR_INSTALL="Error: Some error occurred while executing install"

  #######################################
  # HELPER FUNCTIONS
  #######################################
  clean_env() {
    ./clean.sh
  }

  install() {
    local installationDir=$1
    local ev

    ./autogen.sh
    ev=$?
    if [ $ev -ne 0 ]; then
      echo "${ERROR_AUTORECONF}"
      exit $ev
    fi
    ./configure --host=${TARGET_HOST} --prefix="${installationDir}" --libdir="${installationDir}"/lib
    ev=$?
    if [ $ev -ne 0 ]; then
      echo "${ERROR_CONFIGURE}"
      exit $ev
    fi
    make clean install
    ev=$?
    if [ $ev -ne 0 ]; then
      echo "${ERROR_INSTALL}"
      exit $ev
    fi
  }


  #######################################
  # MAIN
  #######################################

  # Define script variables
  SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

  # Trap to ensure clean environment
  trap clean_env EXIT

  # Check JAVA_HOME
  if [ -z "${JAVA_HOME}" ]; then
    echo "${JAVA_HOME_ERROR}"
    exit 1
  fi

  # Look for the JVM Library
  if [ -d "${JAVA_HOME}/jre/lib/" ]; then #Java 8 case 
      libjava=$(find "${JAVA_HOME}"/jre/lib/ -name libjvm.so | head -n 1)
      if [ -z "$libjava" ]; then
        libjava=$(find "${JAVA_HOME}"/jre/lib/ -name libjvm.dylib | head -n 1)
        if [ -z "$libjava" ]; then
          echo "${JAVA_JRE_ERROR}"
	  exit 1
        fi
      fi
  else # Java 9+
      libjava=$(find "${JAVA_HOME}"/lib/ -name libjvm.so | head -n 1)
      if [ -z "$libjava" ]; then
        libjava=$(find "${JAVA_HOME}"/lib/ -name libjvm.dylib | head -n 1)
        if [ -z "$libjava" ]; then
         echo "${JAVA_JRE_ERROR}" 
	 exit 1
        fi
      fi
  fi
  
  JAVA_LIB_DIR=$(dirname "$libjava")
  export JAVA_LIB_DIR

  os=$(uname)
  if [ "$os" == "Linux" ]; then
	  export CPP_OS="-fcompare-debug-second -I\$(JAVA_HOME)/include/linux/"
  elif [ "$os" == "Darwin" ]; then
	  export CPP_OS="-stdlib=libc++ -I\$(JAVA_HOME)/include/darwin/"
  else
	  echo "Unsupported system $os (supported are: Linux/Darwin)"
	  exit 1
  fi
  # Install and deploy on scriptDir (for C binding)
  echo "Install on scriptDir = ${SCRIPT_DIR} for Bindings compilation"
  install "${SCRIPT_DIR}"

  # Install and deploy on target
  if [ $# -eq 1 ]; then
    echo "Install on target folder"
    targetDir=$1
    install "${targetDir}"
  fi

  # All ok. Exit
  exit 0

