Current File : //bin/rda
#!/bin/sh
##############################################################################
# rda.sh: Shell Script Wrapper for RDA
#
# $Id: rda.sh,v 1.20 2015/07/23 15:05:38 RDA Exp $
# ARCS: $Header: /home/cvs/cvs/RDA_8/src/scripting/bin/rda.sh,v 1.20 2015/07/23 15:05:38 RDA Exp $
#
# Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
#
# Change History
# 20150723  MSC  Enhance Solaris architecture detection.
##############################################################################

# Determine the name of the RDA compiled engine
find_ce_name()
{
  OS=`uname -s | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' \
                    'abcdefghijklmnopqrstuvwxyz'`
  [ -z "$OS" ] && return
  case $OS in
   aix)
    RDA_ENG='rda_aix'
    ;;
   cygwin*)
    RDA_ENG='rda_win32.exe'
    [ -d "$SYSTEMROOT/SysWOW64" ] && RDA_ENG='rda_win64.exe'
    ;;
   darwin)
    case `uname -p` in
     i386)
      RDA_ENG='rda_macx'
      ;;
     powerpc)
      RDA_ENG='rda_macp'
      ;;
    esac
    ;;
   hp-ux)
    RDA_ENG='rda_hpux'
    ;;
   linux)
    case `uname -p` in
     i386|i486|i586|i686|x86)
      RDA_ENG='rda_lin32'
      ;;
     amd64|i64|x86_64)
      RDA_ENG='rda_lin64'
      ("$RDA_DIR/engine/$RDA_ENG" -h) >/dev/null 2>&1 || RDA_ENG='rda_lin32'
      ;;
     unknown)
      case `uname -m` in
       i386|i486|i586|i686|x86)
        RDA_ENG='rda_lin32'
        ;;
       amd64|i64|x86_64)
        RDA_ENG='rda_lin64'
        ("$RDA_DIR/engine/$RDA_ENG" -h) >/dev/null 2>&1 || RDA_ENG='rda_lin32'
        ;;
      esac
      ;;
    esac
    ;;
   osf1)
    RDA_ENG='rda_osf'
    ;;
   sunos)
    case `uname -p` in
     sparc|sparcv9)
      RDA_ENG='rda_sols'
      ;;
     amd64|i386|i686|x86_64)
      RDA_ENG='rda_solx'
      ("$RDA_DIR/engine/$RDA_ENG" -h) >/dev/null 2>&1 || RDA_ENG=''
      ;;
    esac
    ;;
  esac
}

# Detect the RDA software directory
if [ -z "$RDA_DIR" -o ! -d "$RDA_DIR" -o ! -f "$RDA_DIR/rda.pl" ]
then
  RDA_ALTER_RDA_DIR="RDA_DIR=$RDA_DIR"
  export RDA_ALTER_RDA_DIR

  unset RDA_DIR
  RDA_PGM="$0"
  if [ -h "$RDA_PGM" ]
  then
    RDA_DIR=`dirname "$RDA_PGM"`
    RDA_PGM=`ls -l "$RDA_PGM" 2>/dev/null | sed -e 's/^.*-> //'`
    expr "$RDA_PGM" : '\/' >/dev/null 2>&1 || RDA_PGM="$RDA_DIR/$RDA_PGM"
  fi
  RDA_DIR=`dirname "$RDA_PGM"`
fi

# Force Perl taint mode
if [ -z "$RDA_ALTER_PERL5OPT" ]
then
  RDA_ALTER_PERL5DIR="PERL5DIR=$PERL5DIR"
  RDA_ALTER_PERL5INC="PERL5INC=$PERL5INC"
  RDA_ALTER_PERL5LIB="PERL5LIB=$PERL5LIB"
  RDA_ALTER_PERL5OPT="PERL5OPT=$PERL5OPT"
  RDA_ALTER_PERL_EXE="PERL_EXE=$PERL_EXE"
  export RDA_ALTER_PERL5DIR RDA_ALTER_PERL5INC RDA_ALTER_PERL5LIB \
         RDA_ALTER_PERL5OPT RDA_ALTER_PERL_EXE
fi
PERL5OPT='-T'
export PATH PERL5OPT
unset PERL5DIR
unset PERL5INC
unset PERL5LIB
unset PERL_EXE

# Detect if a compile engine must be used
if [ -r "./rda.cfg" ]
then
  . "./rda.cfg"
  RDA_EXE="./${RDA_EXE:-rda.exe}"
  if [ -n "$RDA_ENG" ]
  then
    if [ -f "$RDA_DIR/engine/$RDA_ENG" ] && \
      "$RDA_DIR/engine/$RDA_ENG" -XRda check -V >/dev/null 2>&1
    then
      :
    else
      find_ce_name
    fi
    if [ -n "$RDA_ENG" -a -x "$RDA_DIR/engine/$RDA_ENG" ]
    then
      RDA_ENG="$RDA_DIR/engine/$RDA_ENG"
      "$RDA_ENG" -e"CFG/B_NO_CHECK=1" -XUpgrade -- engine "$RDA_EXE" "$RDA_ENG"
    fi
  fi
  if [ -x "$RDA_EXE" ]
  then
    export RDA_DIR
    exec "$RDA_EXE" "$@"
  fi
elif [ -r "$RDA_DIR/engine/rda.cfg" ]
then
  . "$RDA_DIR/engine/rda.cfg"
  RDA_EXE="$RDA_DIR/${RDA_EXE:-rda.exe}"
  if [ -n "$RDA_ENG" ]
  then
    if [ -f "$RDA_DIR/engine/$RDA_ENG" ] && \
      "$RDA_DIR/engine/$RDA_ENG" -XRda check -V >/dev/null 2>&1
    then
      :
    else
      find_ce_name
    fi
    if [ -n "$RDA_ENG" -a -x "$RDA_DIR/engine/$RDA_ENG" ]
    then
      RDA_ENG="$RDA_DIR/engine/$RDA_ENG"
      "$RDA_ENG" -e"CFG/B_NO_CHECK=1" -XUpgrade -- engine "$RDA_EXE" "$RDA_ENG"
    fi
  fi
  if [ -x "$RDA_EXE" ]
  then
    exec "$RDA_EXE" "$@"
  fi
fi
unset PERL5OPT

# Check for a native Perl
if [ -n "$RDA_NATIVE_PERL" -a -x "$RDA_NATIVE_PERL" ]
then
  PERL_EXE="$RDA_NATIVE_PERL"
elif [ -z "$RDA_NO_NATIVE" ]
then
  PERL_CMD=`(unset LANG; LC_ALL=C type perl) 2>/dev/null`
  PERL_EXE=`expr "${PERL_CMD}" : "perl is a tracked alias for \(.*\)"`
  if [ -z "${PERL_EXE}" ]
  then
    PERL_EXE=`expr "$PERL_CMD" : "perl is hashed (\(.*\))"`
    if [ -z "$PERL_EXE" ]
    then
      PERL_EXE=`expr "$PERL_CMD" : "perl is \(.*\)"`
    fi
  fi
fi

# Validate the local Perl
if [ -n "$PERL_EXE" ]
then
  ( ulimit -c 0
    "$PERL_EXE" -T -e "die 'too old' if $] < 5.005; use strict"
  ) >/dev/null 2>/dev/null
  if [ $? -ne 0 ]
  then
    PERL_EXE=''
  fi
fi

# Validate Applications Perl
if [ -z "$PERL_EXE" -a -n "$ADPERLPRG" ]
then
  ( ulimit -c 0
    "$ADPERLPRG" -T -e "die 'too old' if $] < 5.005; use strict"
  ) >/dev/null 2>/dev/null
  if [ $? -eq 0 ]
  then
    PERL_EXE="$ADPERLPRG"
  fi
fi

# Validate Perl in RDA .config file
if [ -z "$PERL_EXE" -a -r .config ]
then
  . ./.config
  ( ulimit -c 0
    "$PERL5DIR"/perl $PERL5INC -T -e "die 'too old' if $] < 5.005; use strict"
  ) >/dev/null 2>/dev/null
  if [ $? -eq 0 ]
  then
    PERL_EXE="$PERL5DIR"/perl
  fi
fi

# Locate Perl
ORA_HOME="${IAS_ORACLE_HOME:-$ORACLE_HOME}"
if [ -z "$PERL_EXE" ]
then
  # Locate Perl in the Oracle home
  if [ -n "$ORA_HOME" ]
  then
    if [ -x "$ORA_HOME"/perl/bin/perl ]
    then
      PERL_EXE=`echo "$ORA_HOME"/perl/bin/perl`
      PERL_LIB=`echo "$ORA_HOME"/perl/lib`
      PERL_SHL=`echo "$ORA_HOME"/lib`
    elif [ -x "$ORA_HOME"/perl/5*/bin/perl ]
    then
      PERL_EXE=`echo "$ORA_HOME"/perl/5*/bin/perl`
      PERL_LIB=`echo "$ORA_HOME"/perl/5*/lib`
      PERL_SHL=`echo "$ORA_HOME"/lib`
    elif [ -x "$ORA_HOME"/Apache/perl/bin/perl ]
    then
      PERL_EXE=`echo "$ORA_HOME"/Apache/perl/bin/perl`
      PERL_LIB=`echo "$ORA_HOME"/Apache/perl/lib`
      PERL_SHL=`echo "$ORA_HOME"/lib`
    elif [ -x "$ORA_HOME"/Apache/perl/5*/bin/perl ]
    then
      PERL_EXE=`echo "$ORA_HOME"/Apache/perl/5*/bin/perl`
      PERL_LIB=`echo "$ORA_HOME"/Apache/perl/5*/lib`
      PERL_SHL=`echo "$ORA_HOME"/lib`
    elif [ -x "$ORA_HOME"/Apache/perl/5*/bin/*/perl ]
    then
      PERL_EXE=`echo "$ORA_HOME"/Apache/perl/5*/bin/*/perl`
      PERL_LIB=`echo "$ORA_HOME"/Apache/perl/5*/lib`
      PERL_SHL=`echo "$ORA_HOME"/lib`
    fi
  fi

  # Locate Perl in OCM
  if [ -z "$PERL_EXE" ]
  then
    # Locate OCM
    CCR_PERL=''
    if [ -d ../ccr/engines/*/perl ]
    then
      CCR_PERL=`echo ../ccr/engines/*/perl`
    elif [ -n "$ORA_HOME" -a -d "$ORA_HOME"/ccr/engines/*/perl ]
    then
      CCR_PERL=`echo "$ORA_HOME"/ccr/engines/*/perl`
    elif [ -n "$ORA_HOME" -a \
           -d "$ORA_HOME"/../oracle_common/ccr/engines/*/perl ]
    then
      CCR_PERL=`echo "$ORA_HOME"/../oracle_common/ccr/engines/*/perl`
    elif [ -n "$ORA_HOME" -a -d "$ORA_HOME"/../utils/ccr/engines/*/perl ]
    then
      CCR_PERL=`echo "$ORA_HOME"/../utils/ccr/engines/*/perl`
    elif [ -n "$MW_HOME" -a -d "$MW_HOME"/oracle_common/ccr/engines/*/perl ]
    then
      CCR_PERL=`echo "$MW_HOME"/oracle_common/ccr/engines/*/perl`
    elif [ -n "$MW_HOME" -a -d "$MW_HOME"/utils/ccr/engines/*/perl ]
    then
      CCR_PERL=`echo "$MW_HOME"/utils/ccr/engines/*/perl`
    elif [ -n "$WL_HOME" -a -d "$WL_HOME"/../oracle_common/ccr/engines/*/perl ]
    then
      CCR_PERL=`echo "$WL_HOME"/../oracle_common/ccr/engines/*/perl`
    elif [ -n "$WL_HOME" -a -d "$WL_HOME"/../utils/ccr/engines/*/perl ]
    then
      CCR_PERL=`echo "$WL_HOME"/../utils/ccr/engines/*/perl`
    elif [ -d /usr/lib/ccr/engines/*/perl ]
    then
      CCR_PERL=`echo /usr/lib/ccr/engines/*/perl`
    elif [ -n "${ORACLE_CONFIG_HOME}" ]
    then
      CCR_PROP="$ORACLE_CONFIG_HOME"/ccr/config/collector.properties
      if [ -r "$CCR_PROP" ]
      then
        CCR_HOME=`grep -e "^ccr.binHome=" "$CCR_PROP" | cut -d= -f 2`
        if [ -d "$CCR_HOME"/engines/*/perl ]
        then
          CCR_PERL=`echo "$CCR_HOME"/engines/*/perl`
        fi
      fi
    fi

    # Locate OCM Perl
    if [ -n "$CCR_PERL" ]
    then
      if [ -x "$CCR_PERL"/bin/perl ]
      then
        PERL_EXE=`echo "$CCR_PERL"/bin/perl`
        PERL_LIB=`echo "$CCR_PERL"/lib`
      elif [ -x "$CCR_PERL"/5*/bin/*/perl ]
      then
        PERL_EXE=`echo "$CCR_PERL"/5*/bin/*/perl`
        PERL_LIB=`echo "$CCR_PERL"`
      fi
    fi
  fi

  # Validate the Perl found
  if [ -n "$PERL_EXE" ]
  then
    PERL5DIR=`dirname "$PERL_EXE"`
    PERL5INC=''
    if [ -d "$PERL_LIB" ]
    then
      for DIR in `find "$PERL_LIB" -type d -name auto -exec dirname '{}' \;`
      do
        PERL5INC="-I$DIR $PERL5INC"
      done
    fi
    "$PERL_EXE" $PERL5INC -T -e "die 'too old' if $] < 5.005; use strict" \
      >/dev/null 2>/dev/null
    if [ $? -ne 0 ]
    then
      PERL5DIR=''
    elif [ -w . ]
    then
      echo "PERL5DIR='$PERL5DIR'" >.config
      echo "PERL5INC='$PERL5INC'" >>.config
      if [ -n "$PERL_SHL" ]
      then
        echo "PERL_SHL='$PERL_SHL'" >>.config
      fi
    fi
  fi

  # Try to use compiled engine
  if [ -z "$PERL5DIR" ]
  then

    # Try to configure and use a compiled engine
    RDA_ENG=''
    if [ -w '.' -a ! -f 'rda.cfg' -a ! -f 'rda.exe' ]
    then
      find_ce_name
      if [ -n "$RDA_ENG" ]
      then
        if [ -x "$RDA_DIR/engine/$RDA_ENG" -a -r "$RDA_DIR/engine/$RDA_ENG" ]
        then
          cp "$RDA_DIR/engine/$RDA_ENG" rda.exe
          echo "RDA_ENG=\"$RDA_ENG\"" >  rda.cfg
          echo "RDA_EXE=\"rda.exe\""  >> rda.cfg
          echo "D_RDA=\"$RDA_DIR\""   >> rda.cfg
          PERL5OPT='-T'
          export PERL5OPT
          exec ./rda.exe "$@"
        fi
      fi
    fi

    # Give appropriate error message
    if [ -z "$ORA_HOME" ]
    then
      echo "Error: ORACLE_HOME is not set."
      echo "Please set your ORACLE_HOME."
    else
      echo "Error: Perl not found in the PATH or in known directory locations."
      if [ -n "$RDA_ENG" ]
      then
        echo "Although the default RDA engine requires Perl, a compiled version"
        echo "without Perl requirements is available for this platform."
        echo "Download the platform-specific RDA engine from My Oracle Support"
        echo "and place it within the top directory of your RDA installation."
      fi
    fi
    exit 1
  fi
fi

# Extend the shared library path
if [ -n "$PERL_SHL" ]
then
  OS=`"$PERL_EXE" $PERL5INC -e 'print $^O;'`
  if [ "$OS" = "aix" ]
  then
    RDA_ALTER_SHL="LIBPATH=$LIBPATH"
    if [ -z "$LIBPATH" ]
    then
      LIBPATH="$PERL_SHL"
    else
      LIBPATH="$PERL_SHL:$LIBPATH"
    fi
    export LIBPATH RDA_ALTER_SHL
  elif [ "$OS" = "hpux" ]
  then
    RDA_ALTER_SHL="SHLIB_PATH=$SHLIB_PATH"
    if [ -z "$SHLIB_PATH" ]
    then
      SHLIB_PATH="$PERL_SHL"
    else
      SHLIB_PATH="$PERL_SHL:$SHLIB_PATH"
    fi
    export SHLIB_PATH RDA_ALTER_SHL
  elif [ "$OS" = "darwin" ]
  then
    RDA_ALTER_SHL="DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH"
    if [ -z "$DYLD_LIBRARY_PATH" ]
    then
      DYLD_LIBRARY_PATH="$PERL_SHL"
    else
      DYLD_LIBRARY_PATH="$PERL_SHL:$DYLD_LIBRARY_PATH"
    fi
    export DYLD_LIBRARY_PATH RDA_ALTER_SHL
  else
    RDA_ALTER_SHL="LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
    if [ -z "$LD_LIBRARY_PATH" ]
    then
      LD_LIBRARY_PATH="$PERL_SHL"
    else
      LD_LIBRARY_PATH="$PERL_SHL:$LD_LIBRARY_PATH"
    fi
    export LD_LIBRARY_PATH RDA_ALTER_SHL
  fi
fi

# Test if DBD::Oracle can be used
if [ -z "$RDA_NO_DBD_ORACLE" ]
then
  "$PERL_EXE" $PERL5INC -T -e "use DBI; use DBD::Oracle;" >/dev/null 2>/dev/null
  if [ $? -ne 0 ]
  then
    RDA_NO_DBD_ORACLE=1
    export RDA_NO_DBD_ORACLE
  fi
fi

# Run the Perl script
exec "${PERL_EXE:-perl}" $PERL5INC -T "$RDA_DIR/rda.pl" "$@"