#!echo "This is not a shell script"
#############################################################################
# 
# Copyright (c) 2006, 2007, 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.
# 
#############################################################################

#############################################################################
#
# JPRT shell configuration for testing.
#
# Input environment variables:
#    Windows Only:
#      PATH
#      ROOTDIR
#
# Output variable settings:
#    make    Full path to GNU make
#
# Output environment variables:
#    PATH
#
#############################################################################

#############################################################################
# Error
error() # message
{
  echo "ERROR: $1"
  exit 6
}
# Directory must exist
dirMustExist() # dir name
{
  if [ ! -d "$1" ] ; then
    error "Directory for $2 does not exist: $1"
  fi
}
# File must exist
fileMustExist() # dir name
{
  if [ ! -f "$1" ] ; then
    error "File for $2 does not exist: $1"
  fi
}
#############################################################################

# Should be set by JPRT as the 3 basic inputs
slashjava="${ALT_SLASH_JAVA}"
if [ "${slashjava}" = "" ] ; then
  slashjava=/java
fi

# Check input
dirMustExist "${slashjava}"  ALT_SLASH_JAVA

# Uses 'uname -s', but only expect SunOS or Linux, assume Windows otherwise.
osname=`uname -s`
case "${osname}" in
  SunOS )
    # SOLARIS: Sparc or X86
    osarch=`uname -p`
    if [ "${osarch}" = sparc ] ; then
	solaris_arch=sparc
    else
	solaris_arch=i386
    fi

    # Add basic solaris system paths
    path4sdk=/usr/ccs/bin:/usr/ccs/lib:/usr/bin:/bin:/usr/sfw/bin

    # Find GNU make
    make=/usr/sfw/bin/gmake
    if [ ! -f ${make} ] ; then
	make=/opt/sfw/bin/gmake
	if [ ! -f ${make} ] ; then
	    make=${slashjava}/devtools/${solaris_arch}/bin/gnumake
        fi 
    fi
    fileMustExist "${make}" make

    # File creation mask
    umask 002
    ;;

  Linux | Darwin )
    # Add basic paths
    path4sdk=/usr/bin:/bin:/usr/sbin:/sbin

    # Find GNU make
    make=/usr/bin/make
    fileMustExist "${make}" make

    umask 002
    ;;

  FreeBSD | OpenBSD )
    # Add basic paths
    path4sdk=/usr/bin:/bin:/usr/sbin:/sbin

    # Find GNU make
    make=/usr/local/bin/gmake
    fileMustExist "${make}" make

    umask 002
    ;;

  NetBSD )
    # Add basic paths
    path4sdk=/usr/bin:/bin:/usr/sbin:/sbin

    # Find GNU make
    make=/usr/pkg/bin/gmake
    fileMustExist "${make}" make

    umask 002
    ;;

  * )
    # Windows: Differs on CYGWIN vs. MKS.
   
    # We need to determine if we are running a CYGWIN shell or an MKS shell
    #    (if uname isn't available, then it will be unix_toolset=unknown)
    unix_toolset=unknown
    if [ "`uname -a | fgrep Cygwin`" = "" -a -d "${ROOTDIR}" ] ; then
        # We kind of assume ROOTDIR is where MKS is and it's ok
        unix_toolset=MKS
        mkshome=`dosname -s "${ROOTDIR}"`
        # Most unix utilities are in the mksnt directory of ROOTDIR
        unixcommand_path="${mkshome}/mksnt"
        path4sdk="${unixcommand_path}"
	devtools_path="${slashjava}/devtools/win32/bin"
	path4sdk="${devtools_path};${path4sdk}"
        # Find GNU make
        make="${devtools_path}/gnumake.exe"
        fileMustExist "${make}" make
    elif [ "`uname -a | fgrep Cygwin`" != "" -a -f /bin/cygpath ] ; then
        # For CYGWIN, uname will have "Cygwin" in it, and /bin/cygpath should exist
        unix_toolset=CYGWIN
        # Most unix utilities are in the /usr/bin
        unixcommand_path="/usr/bin"
        path4sdk="${unixcommand_path}"
        # Find GNU make
        make="${unixcommand_path}/make.exe"
        fileMustExist "${make}" make
    else
      echo "WARNING: Cannot figure out if this is MKS or CYGWIN"
    fi

    
    # For windows, it's hard to know where the system is, so we just add this
    #    to PATH.
    slash_path="`echo ${path4sdk} | sed -e 's@\\\\@/@g' -e 's@//@/@g' -e 's@/$@@' -e 's@/;@;@g'`"
    path4sdk="${slash_path};${PATH}"
    
    # Convert path4sdk to cygwin style
    if [ "${unix_toolset}" = CYGWIN ] ; then
	path4sdk="`/usr/bin/cygpath -p ${path4sdk}`"
    fi
    ;;
esac

# Export PATH setting
PATH="${path4sdk}"
export PATH

