#!/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" "$@"