| 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" "$@"