Current File : //bin/sdci
#!/bin/sh
##############################################################################
# sdci.sh: Shell Script Wrapper for SDCI
#
# $Id: sdci.sh,v 1.13 2014/11/04 08:18:59 RDA Exp $
# ARCS: $Header: /home/cvs/cvs/RDA_8/src/scripting/bin/sdci.sh,v 1.13 2014/11/04 08:18:59 RDA Exp $
#
# Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
#
# Change History
# 20141104  MSC  Eliminate letter range.
##############################################################################

# Detect the RDA software directory
if [ -z "$RDA_DIR" -o ! -d "$RDA_DIR" -o ! -f "$RDA_DIR/sdci.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

# Detect if a compile engine must be used
if [ -r "./rda.cfg" ]
then
  . "./rda.cfg"
  SDCI_EXE="./${SDCI_EXE:-sdci.exe}"
  if [ -n "$SDCI_ENG" -a -x "$RDA_DIR/engine/$SDCI_ENG" ]
  then
    SDCI_ENG="$RDA_DIR/engine/$SDCI_ENG"
    "$SDCI_ENG" -e"CFG/B_NO_CHECK=1" -XUpgrade -- engine "$SDCI_EXE" "$SDCI_ENG"
  fi
  if [ -x "$SDCI_EXE" ]
  then
    export RDA_DIR
    exec "$SDCI_EXE" "$@"
  fi
elif [ -r "$RDA_DIR/engine/rda.cfg" ]
then
  . "$RDA_DIR/engine/rda.cfg"
  SDCI_EXE="$RDA_DIR/${SDCI_EXE:-sdci.exe}"
  if [ -n "$SDCI_ENG" -a -x "$RDA_DIR/engine/$SDCI_ENG" ]
  then
    SDCI_ENG="$RDA_DIR/engine/$SDCI_ENG"
    "$SDCI_ENG" -e"CFG/B_NO_CHECK=1" -XUpgrade -- engine "$SDCI_EXE" "$SDCI_ENG"
  fi
  if [ -x "$SDCI_EXE" ]
  then
    exec "$SDCI_EXE" "$@"
  fi
fi
unset PERL5OPT

# Try the 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>&1
  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>&1
  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>&1
  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>&1
    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

  if [ -z "$PERL5DIR" ]
  then
    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."
      echo "Although the default SDCI engine requires Perl, compiled versions"
      echo "without Perl requirements are available for major platforms. Please"
      echo "download the platform-specific SDCI engine from My Oracle Support"
      echo "and place it within the top directory of your RDA installation."
    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>&1
  if [ $? -ne 0 ]
  then
    RDA_NO_DBD_ORACLE=1
    export RDA_NO_DBD_ORACLE
  fi
fi

# Run the Perl script
if [ -h "$0" ]
then
  NAM=`basename "$0" .sh`
  if [ "$NAM" != "sdci" ] && expr "$NAM" : \
    '[abcdefghijklmnopqrstuvwxyz][abcdefghijklmnopqrstuvwxyz0-9]*$' \
    >/dev/null 2>&1
  then
    exec "${PERL_EXE:-perl}" $PERL5INC -T "$RDA_DIR/sdci.pl" run "$NAM" "$@"
  fi
fi
exec "${PERL_EXE:-perl}" $PERL5INC -T "$RDA_DIR/sdci.pl" "$@"