#!/bin/sh
# $Id: javac-version.in 6416 2011-09-07 05:20:14Z cher $
# Copyright (c) 2005-2011 Alexander Chernov <cher@ejudge.ru>

LANG_CONFIG_DIR="/home/judges/compile/conf/lang.d"

common_config() {
  echo 'long_name="Java JDK"'
  echo 'src_sfx=".java"'
  echo 'exe_sfx=".jar"'
  echo 'arch="java"'
}

failure() {
  rm -f conftest*
  echo 'version='
  echo 'arg="'"${arg}"'"'
  common_config
  echo 'JAVARUN=false'
  echo 'JAVACRUN=false'
  echo 'JAVADIR='
  echo 'JAVAVER='
  [ "${verbose}" = 1 ] && echo "no" >&2
  exit 1
}

unset LANG
unset LC_ALL
unset LC_MESSAGES
unset LANGUAGE

if [ x"$1" = x-v ]
then
  verbose=1
  shift
fi

# recheck the language
if [ x"$1" = x-r ]
then
  arg="$2"
  [ x"$2" != x ] && JAVACRUN="$2"
  [ "${JAVACRUN}" = "" ] && JAVACRUN="javac"

  [ "${verbose}" = 1 ] && echo -n "checking whether Java JDK is available..." >&2
  javacdir1=`dirname "${JAVACRUN}"`
  if [ "${javacdir1}" = . ]
  then
    JAVARUN="java"
  else
    JAVARUN="${javacdir1}/java"
  fi
  "${JAVARUN}" -version >/dev/null 2>/dev/null || failure
  javafullpath=`which "${JAVARUN}"` || failure
  [ "${javafullpath}" != "" ] || failure
  javafulldir=`dirname "${javafullpath}"` || failure
  [ "${javafulldir}" != "" -a "${javafulldir}" != "." ] || failure
  javalastdir=`basename "${javafulldir}"` || failure
  [ "${javalastdir}" = "bin" ] || failure
  JAVADIR=`dirname "${javafulldir}"` || failure
  [ "${JAVADIR}" != "" ] || failure
  version=`${JAVARUN} -version 2>&1 | grep "java version" | sed 's/^.*"\(.*\)"$/\1/g'` || failure
  [ "${version}" != "" ] || failure
  case x"${version}" in
    x1.7.*) JAVAVER=1.7;;
    x1.6.*) JAVAVER=1.6;;
    x1.5.*) JAVAVER=1.5;;
    x1.4.*) JAVAVER=1.4;;
    x1.3.*) JAVAVER=1.3;;
    x1.2.*) JAVAVER=1.2;;
    *) failure;;
  esac

  cat > conftest.java <<EOF
public class conftest
{
  public static void main(String args[])
  {
    System.out.println("OK");
  }
}
EOF
  "${JAVACRUN}" -source ${JAVAVER} conftest.java >/dev/null 2>/dev/null || failure
  [ -f conftest.class ] || failure
  touch conftest.policy
  "${JAVARUN}" -Djava.security.manager -Djava.security.policy=conftest.policy conftest >/dev/null 2>/dev/null || failure

  rm -f ./conftest*
  echo 'version="'"${version}"'"'
  echo 'arg="'"${arg}"'"'
  common_config
  echo 'JAVARUN="'"${JAVARUN}"'"'
  echo 'JAVACRUN="'"${JAVACRUN}"'"'
  echo 'JAVADIR="'"${JAVADIR}"'"'
  echo 'JAVAVER="'"${JAVAVER}"'"'
  [ "${verbose}" = 1 ] && echo "yes, ${JAVACRUN}, ${version}" >&2
  exit 0
fi

if [ x"$1" = x-l ]
then
  echo "Java JDK (SUN or compatible) compiler [http://java.sun.com]"
  exit 0
fi

[ "${EJUDGE_LANG_CONFIG}" = "" ] && EJUDGE_LANG_CONFIG="${LANG_CONFIG_DIR}/javac.cfg"

if [ -f "${EJUDGE_LANG_CONFIG}" ]
then
  . "${EJUDGE_LANG_CONFIG}"
else
  JAVARUN="/usr/bin/java"
  JAVACRUN="/usr/bin/javac"
  JAVADIR="/usr"
  JAVAVER="1.6"
fi

if [ x"${JAVACRUN}" = x -o x"${JAVACRUN}" = xfalse ]
then
  echo "This language is not supported." >&2
  exit 1
fi

# avoid setting JAVA_HOME if it is already set
if [ "${JAVA_HOME}" = "" ]
then
    JAVA_HOME="${JAVADIR}"
    PATH="${JAVA_HOME}/bin:${PATH}"
    export JAVA_HOME PATH
fi

if [ x"$1" = x-p ]
then
    echo "${JAVACRUN}"
    exit 0
fi
    
"${JAVARUN}" -version 2>/dev/null >/dev/null || exit 1

[ x"$1" = x-f ] && echo -n "Java JDK "

"${JAVARUN}" -version 2>&1 | grep "java version" | sed 's/^.*"\(.*\)"$/\1/g'