#!/bin/sh
#
#  Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
#  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# 
#  This code is free software; you can redistribute it and/or modify it
#  under the terms of the GNU General Public License version 2 only, as
#  published by the Free Software Foundation.
# 
#  This code is distributed in the hope that it will be useful, but WITHOUT
#  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
#  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
#  version 2 for more details (a copy is included in the LICENSE file that
#  accompanied this code).
# 
#  You should have received a copy of the GNU General Public License version
#  2 along with this work; if not, write to the Free Software Foundation,
#  Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
# 
#  Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
#  or visit www.oracle.com if you need additional information or have any
#  questions.
# 

#
# This Environment script was written to capture typically used environment
# setup for a given shell test. 
#

# TESTJAVA can be a JDK or JRE. If JRE you need to set COMPILEJAVA
if [ "${TESTJAVA}" = "" ]
then
  echo "TESTJAVA not set.  Test cannot execute.  Failed."
  exit 1
fi
echo "TESTJAVA=${TESTJAVA}"

# COMPILEJAVA requires a JDK, some shell test use javac,jar,etc 
if [ "${COMPILEJAVA}" = "" ]
then
 echo "COMPILEJAVA not set.  Using TESTJAVA as default"
 COMPILEJAVA=${TESTJAVA}
fi
echo "COMPILEJAVA=${COMPILEJAVA}"

if [ "${TESTCLASSES}" = "" ]
then
  echo "TESTCLASES not set.  Using "." as default"
  TESTCLASSES=.
fi
echo "TESTCLASSES=${TESTCLASSES}"

# set platform-dependent variables
OS=`uname -s`
case "$OS" in
  AIX | Darwin | Linux | SunOS )
    NULL=/dev/null
    PS=":"
    FS="/"
    RM=/bin/rm
    CP=/bin/cp
    MV=/bin/mv
    ;;
  Windows_* )
    NULL=NUL
    PS=";"
    FS="\\"
    RM=rm
    CP=cp
    MV=mv
    ;;
  CYGWIN_* )
    NULL=/dev/null
    PS=";"
    FS="/"
    RM=rm
    CP=cp
    MV=mv
    ;;
  * )
    echo "Unrecognized system!"
    exit 1;
    ;;
esac

export NULL PS FS RM CP MV
echo "NULL =${NULL}"
echo "PS =${PS}"
echo "FS =${FS}"
echo "RM =${RM}"
echo "CP =${CP}"
echo "MV =${MV}"

# jtreg -classpathappend:<path>
JEMMYPATH=${CPAPPEND}
CLASSPATH=.${PS}${TESTCLASSES}${PS}${JEMMYPATH} ; export CLASSPATH
echo "CLASSPATH =${CLASSPATH}"

# Current directory is scratch directory 
THIS_DIR=.
echo "THIS_DIR=${THIS_DIR}"

# Check to ensure the java defined actually works
${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -version
if [ $? != 0 ]; then
  echo "Wrong TESTJAVA or TESTVMOPTS:"
  echo $TESTJAVA TESTVMOPTS
  exit 1
fi

${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -Xinternalversion > vm_version.out 2>&1

VM_TYPE="unknown"
grep "Server" vm_version.out > ${NULL}
if [ $? = 0 ]
then
  VM_TYPE="server"
fi
grep "Client" vm_version.out > ${NULL}
if [ $? = 0 ]
then
  VM_TYPE="client"
fi

VM_BITS="32"
grep "64-Bit" vm_version.out > ${NULL}
if [ $? = 0 ]
then
  VM_BITS="64"
fi

VM_OS="unknown"
grep "aix" vm_version.out > ${NULL}
if [ $? = 0 ]
then
  VM_OS="aix"
fi
grep "bsd" vm_version.out > ${NULL}
if [ $? = 0 ]
then
  VM_OS="bsd"
fi
grep "linux" vm_version.out > ${NULL}
if [ $? = 0 ]
then
  VM_OS="linux"
fi
grep "solaris" vm_version.out > ${NULL}
if [ $? = 0 ]
then
  VM_OS="solaris"
fi
grep "windows" vm_version.out > ${NULL}
if [ $? = 0 ]
then
  VM_OS="windows"
fi

VM_CPU="unknown"
grep "sparc" vm_version.out > ${NULL}
if [ $? = 0 ]
then
  VM_CPU="sparc"
  if [ $VM_BITS = "64" ]
  then
    VM_CPU="sparcv9"
  fi
fi
grep "x86" vm_version.out > ${NULL}
if [ $? = 0 ]
then
  VM_CPU="i386"
fi
grep "amd64" vm_version.out > ${NULL}
if [ $? = 0 ]
then
  VM_CPU="amd64"
fi
grep "arm" vm_version.out > ${NULL}
if [ $? = 0 ]
then
  VM_CPU="arm"
fi
grep "ppc" vm_version.out > ${NULL}
if [ $? = 0 ]
then
  VM_CPU="ppc"
  if [ $VM_BITS = "64" ]
  then
    VM_CPU="ppc64"
    grep "ppc64le" vm_version.out > ${NULL}
    if [ $? = 0 ]
    then
      VM_CPU="ppc64le"
    fi
  fi
fi
grep "ia64" vm_version.out > ${NULL}
if [ $? = 0 ]
then
  VM_CPU="ia64"
fi
grep "aarch64" vm_version.out > ${NULL}
if [ $? = 0 ]
then
  VM_CPU="aarch64"
fi
export VM_TYPE VM_BITS VM_OS VM_CPU
echo "VM_TYPE=${VM_TYPE}"
echo "VM_BITS=${VM_BITS}"
echo "VM_OS=${VM_OS}"
echo "VM_CPU=${VM_CPU}"
