#!/bin/sh
#
# Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. 
#
#    NAME
#      asmcmd - ASM CoMmanD line interface (Wrapper)
#
#    DESCRIPTION
#      This program is a wrapper for asmcmdcore.  It takes the same parameters
#      as asmcmdcore.  It first checks to see if $ORACLE_HOME is set.  If not, 
#      it prints an error messages and exits.  It also sets $PERL5LIB based on
#      $ORACLE_HOME if $PERL5LIB is not already set.  Finally, it invokes
#      asmcmdcore at $ORACLE_HOME/bin/asmcmdcore with the Perl interpreter at
#      $ORACLE_HOME/perl/bin/perl.
#
#    NOTES
#      usage: asmcmd [-p] [command]
#
#      This wrapper program now supports only UNIX platforms.  Use 
#      asmcmd.bat for Windows platforms.
#
#    MODIFIED   (MM/DD/YY)
#    shmubeen   04/06/10 - remove -T option
#    heyuen     03/16/09 - fix version identification
#    hqian      06/21/07 - #6137843: restructure to use oratab and oraenv
#    hqian      06/06/07 - Add $ORACLE_HOME/rdbms/lib/asmcmd to include path
#    hqian      01/10/07 - Add Perl lib path $ORACLE_HOME/lib/asmcmd
#    heyuen     10/10/06 - Add exit codes
#    hqian      01/26/06 - #4939032: enable taint mode, deprecate PERL5LIB
#    hqian      01/20/06 - #4939032: add new module path to PERL5LIB 
#    hqian      07/19/05 - Remove RCS header 
#    hqian      04/01/05 - #4271064: add SHLIB_PATH for HP-UX 
#    hqian      03/29/05 - Add ${ORACLE_HOME}/lib to LD_LIBRARY_PATH
#    hqian      03/29/05 - #4271064: Add $LIBPATH for AIX 
#    hqian      12/08/04 - Make this wrapper script a bourne shell script.
#    hqian      10/19/04 - Rename asmcmd0 to asmcmdcore.
#    hqian      09/01/04 - Fix path to Perl on NT. 
#    hqian      08/06/04 - Add execute bit to ADE.
#    hqian      07/26/04 - Remove check for Perl version.
#    hqian      07/21/04 - Fix Perl version path problem. 
#    hqian      06/30/04 - Fix NT porting issues. 
#    hqian      06/29/04 - Add check for LD_LIBRARY_PATH. 
#    hqian      06/22/04 - Creation
#
#############################################################################

ECHO=/bin/echo
SED=/bin/sed
AWK=/bin/awk
PATH=/bin:/usr/bin:/usr/sbin:/sbin:$PATH
PLATFORM=`uname`

# Check to see if ORACLE_HOME is set.
if [ "${ORACLE_HOME}" = "" ] ; then
  # If not then try to obtain the location of the Oracle home from
  # oratab.

  # The location of oratab differs by platform.
  if [ "${PLATFORM}" = "SunOS" -o "${PLATFORM}" = "Solaris" ] ; then
    ORATAB=/var/opt/oracle/oratab # Solaris or SunOS
  else
    ORATAB=/etc/oratab            # Linux, AIX, and HP-UX
  fi

  # If the oratab file does not exist at the expected location, give up
  # and print error, asking the user to set ORACLE_HOME.
  if [ ! -r ${ORATAB} ] ; then
    ${ECHO} "ASMCMD-00001: ORACLE_HOME environment variable not set"
    exit -1
  fi

  # Try to get ORACLE_HOME from ortab.
  ORACLE_HOME=`${AWK} -F: '/^\+ASM/ { print $2 }' ${ORATAB}`

  # If ORACLE_HOME is not found in oratab, ask the user to supply
  # ORACLE_HOME.
  if [ "${ORACLE_HOME}" = "" ] ; then
      ${ECHO} "ASMCMD-00001: ORACLE_HOME environment variable not set"
      exit -1
  fi

  # If the value of ORACLE_HOME is not a valid directory, asking user
  # to supply ORACLE_HOME.
  if [ ! -d ${ORACLE_HOME} ] ; then
      ${ECHO} "ASMCMD-00001: ORACLE_HOME environment variable not set"
      exit -1
  fi
fi

# In case the user did set ORACLE_HOME, but not to a valid directory,
# print error to indicate so.
if [ ! -d ${ORACLE_HOME} ] ; then
  ${ECHO} "ASMCMD-00002: ORACLE_HOME is not a valid directory"
  exit -1
fi

# Need to export ORACLE_HOME, since we may have set it in this script.
export ORACLE_HOME

# Add Solaris32 backward compatibility for LD_LIBRARY_PATH.  This extra
# path is used for Solaris64 Oracle homes that come with a Solaris32
# Perl build.
LD_LIBRARY_PATH="${ORACLE_HOME}/lib:${LD_LIBRARY_PATH}"
LD_LIBRARY_PATH="${ORACLE_HOME}/lib32:${LD_LIBRARY_PATH}"
export LD_LIBRARY_PATH

# AIX uses LIBPATH, not LD_LIBRARY_PATH.
if [ "${PLATFORM}" = "AIX" ] ; then
  LIBPATH="${ORACLE_HOME}/lib:${LIBPATH}"
  export LIBPATH
fi

# HP-UX uses SHLIB_PATH, not LD_LIBRARY_PATH.
if [ "${PLATFORM}" = "HP-UX" ] ; then
  SHLIB_PATH="${ORACLE_HOME}/lib:${SHLIB_PATH}"
  export SHLIB_PATH
fi

# Set path to Perl.
PERLBIN="${ORACLE_HOME}/perl/bin/perl"

# Get Perl version.
PERLV=`${PERLBIN} -e 'printf "%vd", $^V'`          # Get version, in form 5.x.y #

# Set PERLINC, which is a list of -I options passed to the perl
# interpreter, telling perl where to look for modules.
# We no longer support the use of PERL5LIB, because we now use
# taint checks, and PERL5LIB is considered tainted.
PERLINC="-I ${ORACLE_HOME}/perl/lib/${PERLV}"
PERLINC="${PERLINC} -I ${ORACLE_HOME}/perl/lib/site_perl/${PERLV}"
PERLINC="${PERLINC} -I ${ORACLE_HOME}/lib"
PERLINC="${PERLINC} -I ${ORACLE_HOME}/lib/asmcmd"
PERLINC="${PERLINC} -I ${ORACLE_HOME}/rdbms/lib/asmcmd"

# Uncomment this one line below to try out asmcmdtemplate.pm, just for fun.
# *Do not* merge asmcmd with this line uncommented!
#PERLINC="${PERLINC} -I ${ORACLE_HOME}/rdbms/src/client/tools/asmcmd/modules"

# Build command to execute asmcmdcore.
# -T option has been removed for bug fix 7193021.
# -T option is not required as server code does enough validation

RUNTHIS="${PERLBIN} -w ${PERLINC} ${ORACLE_HOME}/bin/asmcmdcore"

# Now run asmcmdcore with all arguments!
exec ${RUNTHIS} "$@"

# Should never get here.
exit -1
