#!/usr/bin/env bash
# $Header$
#******************************************************************************
# $Copyright: Copyright (c) 2022 Veritas Technologies LLC. All rights reserved $
#******************************************************************************

# this script runs from Oracle user account 

# set up a trace file that will be used troughout the script
MAKE_TRACE=/tmp/make_trace.$$

if [ -f "$MAKE_TRACE" ]; then
	rm -f "$MAKE_TRACE"
fi

date | tee "$MAKE_TRACE"
chmod 777 "$MAKE_TRACE"

case "$(uname -s)" in
	Linux*)
		ECHO="/bin/echo -e"
		;;
	SunOS*)
		ECHO="/usr/bin/echo"
		;;
	*)
		ECHO="echo"
		;;
esac

confirm ()
{
	${ECHO} "${1} (y/n) [n] \c " | tee -a ${MAKE_TRACE}
	read ans
	echo "$ans" >> "$MAKE_TRACE"
	case "$ans" in
		Y*|y*)
			echo
			return 1
			;;
		*)
			echo
			return 0
			;;
	esac
}

#get O_HOME from the env var ORACLE_HOME
O_HOME=$ORACLE_HOME



echo "All Oracle instances should be shutdown before running this script." | tee -a "$MAKE_TRACE"

echo ""
echo "Please log into the Unix system as the Oracle owner for running this script" | tee -a "$MAKE_TRACE"
echo ""

if confirm "Do you want to continue?"
then
	echo "exiting script"
	exit 0
fi;


if [ "$O_HOME" = "" ]; then
	echo "ORACLE_HOME env var is not set. Please set it and rerun the script." | tee -a "$MAKE_TRACE"
	echo "exiting script"
	exit 0
fi;

#Make sure User is logged in with Oracle owner account
#-----------------------------------------------------
login_id=$(id |cut -d"(" -f2 | cut -d ")" -f1)
ora_owner=$(ls -l "$ORACLE_HOME"/bin/oracle | sed -e 's/  \{1,\}/ /' | cut -d' ' -f3)
if  [ "$login_id" != "$ora_owner" ] ; then
	echo "Please log into the Unix system as the Oracle owner and rerun the script." | tee -a "$MAKE_TRACE"
	echo "exiting script"
	exit 0
fi ;


# find out if this is Oracle 7.x or 8.x

if [ -f "$O_HOME"/bin/rman ]; then
	VER8x=1
else
	VER8x=0
fi;

TEMP=/tmp/temp.$$

echo "exit" >> "$TEMP"


if [ "$VER8x" -ne 1 ]  
then
	O_VERSION=7.x
else
	O_VERSION=$("$O_HOME"/bin/sqlplus -? < "$TEMP" |grep Release | cut -f3 -d " ")
fi

rm -rf "$TEMP"

LIBOBK_PATH=/usr/openv/netbackup/bin

echo ""
echo "LIBOBK path: $LIBOBK_PATH" | tee -a "$MAKE_TRACE"
echo "ORACLE_HOME: $O_HOME" | tee -a "$MAKE_TRACE"
echo "Oracle version: $O_VERSION" | tee -a "$MAKE_TRACE"


if [ -f "$LIBOBK_PATH"/version ]; then
	MACHINE=$(head -1 "$LIBOBK_PATH"/version | cut -f2- -d-)
	PLATFORM=nosupport

	#  echo "MACHINE:$MACHINE" |tee -a ${MAKE_TRACE}

	case "$MACHINE" in
		AIX*)
			OS=$(oslevel | cut -f1-3 -d"." | sed -e 's/\.//g')
			if [ "$OS" -ge "420" ] && [ "$OS" -lt "433" ] ; then
				PLATFORM=rs6000_42

			elif [ "$OS" -ge "433" ] && [ "$OS" -lt "510" ] ; then
				PLATFORM=rs6000_433
			else
				PLATFORM=rs6000_51
			fi
			echo "Linking LIBOBK:" | tee -a "$MAKE_TRACE"
			export LD_LIBRARY_PATH="$O_HOME/lib:$LD_LIBRARY_PATH";
			if [ -f "$O_HOME"/lib/libobk.a ] || [ -h "$O_HOME"/lib/libobk.a ] ; then
				echo "Moving libobk.a to libobk.a.back" | tee -a "$MAKE_TRACE"
				mv -f "$O_HOME"/lib/libobk.a "$O_HOME"/lib/libobk.a.back
			fi ;
			echo "ln -s $LIBOBK_PATH/libobk.a64 $O_HOME/lib/libobk.a" | tee -a "$MAKE_TRACE"
			ln -s "$LIBOBK_PATH"/libobk.a64 "$O_HOME"/lib/libobk.a ;
			LIBPATH=$O_HOME/lib:$LIBPATH ;
			export LIBPATH ;
			echo "Done" | tee -a "$MAKE_TRACE"
			;;


		HP*)
			OS=$(uname -r | cut -f2 -d".")
			if [ "$OS" = "10" ] ; then
				PLATFORM=hp10.20
				#Is this a valid version of Oracle for this platform
				echo "Linking LIBOBK:" | tee -a "$MAKE_TRACE"
				if [ -f "$O_HOME"/lib/libobk.sl ] || [ -h "$O_HOME"/lib/libobk.sl ] ; then
					echo "Moving libobk.sl to libobk.sl.back" | tee -a "$MAKE_TRACE"
					mv -f "$O_HOME"/lib/libobk.sl "$O_HOME"/lib/libobk.sl.back
				fi ;
				if [ -f "$O_HOME"/lib/libobk.a ] || [ -h "$O_HOME"/lib/libobk.a ] ; then
					echo "Moving libobk.a to libobk.a.back" | tee -a "$MAKE_TRACE"
					mv -f "$O_HOME"/lib/libobk.a "$O_HOME"/lib/libobk.a.back
				fi ;
				echo "ln -s $LIBOBK_PATH/libobk.sl $O_HOME/lib/libobk.sl" | tee -a "$MAKE_TRACE"
				ln -s "$LIBOBK_PATH"/libobk.sl "$O_HOME"/lib/libobk.sl ;
				echo "Done" | tee -a "$MAKE_TRACE"

			elif [ "$OS" = "11" ] ; then
				PLATFORM=hp11.00
				os_bits=$(getconf _CS_KERNEL_BITS)
				is_hpia64=$(uname -m)
				O_EXECBITS=$(file "$O_HOME"/bin/oracle | cut -f1 -d " " |cut -f2)
				if [ "$os_bits" = "64" ] && [ "$O_EXECBITS" = "ELF-64" ] ; then
					echo "Linking LIBOBK ($os_bits bits):" | tee -a "$MAKE_TRACE"
					if [ "$is_hpia64" = "ia64" ] ; then
						if [ -f "$O_HOME"/lib/libobk.so ] || [ -h "$O_HOME"/lib/libobk.so ] ; then
							echo "Moving libobk.so to libobk.so.back"
							mv -f "$O_HOME"/lib/libobk.so "$O_HOME"/lib/libobk.so.back
						fi ;
						echo "ln -s $LIBOBK_PATH/libobk.so $O_HOME/lib/libobk.so" | tee -a "$MAKE_TRACE"
						ln -s "$LIBOBK_PATH"/libobk.so "$O_HOME"/lib/libobk.so ;
					else
						if [ -f "$O_HOME"/lib/libobk.sl ] || [ -h "$O_HOME"/lib/libobk.sl ] ; then
							echo "Moving libobk.sl to libobk.sl.back"
							mv -f "$O_HOME"/lib/libobk.sl "$O_HOME"/lib/libobk.sl.back
						fi ;
						if [ -f "$O_HOME"/lib/libobk.a ] || [ -h "$O_HOME"/lib/libobk.a ] ; then
							echo "Moving libobk.a to libobk.a.back" | tee -a "$MAKE_TRACE"
							mv -f "$O_HOME"/lib/libobk.a "$O_HOME"/lib/libobk.a.back
						fi ;
						if [ -f "$O_HOME"/lib/libobk.so ] || [ -h "$O_HOME"/lib/libobk.so ] ; then
							echo "Moving libobk.so to libobk.so.back"
							mv -f "$O_HOME"/lib/libobk.so "$O_HOME"/lib/libobk.so.back
						fi ;
						echo "ln -s $LIBOBK_PATH/libobk.sl64 $O_HOME/lib/libobk.sl" | tee -a "$MAKE_TRACE"
						ln -s "$LIBOBK_PATH"/libobk.sl64 "$O_HOME"/lib/libobk.sl ;
					fi ;
					SHLIB_PATH=$O_HOME/lib:$SHLIB_PATH ;
					export SHLIB_PATH ;
					echo "Done" | tee -a "$MAKE_TRACE"
				else
					echo "This version of Oracle is not supported in this script" | tee -a "$MAKE_TRACE"
				fi
			fi
			;;


		Solaris*)
			#OS_f1=$(uname -r | cut -f1 -d".")
			OS_f2=$(uname -r | cut -f2 -d".")
			PLATFORM="Solaris 2.$OS_f2"
			SYSTYPE=$(uname -p)
			echo "Platform type: $SYSTYPE" | tee -a  "$MAKE_TRACE"
			#Is this a valid version of Oracle for this platform
			echo "Linking LIBOBK:" | tee -a  "$MAKE_TRACE"
			if [ "$SYSTYPE" != "i386" ] ; then
				if [ -f "$O_HOME"/lib/libobk.so ] || [ -h "$O_HOME"/lib/libobk.so ] ; then
					echo "Moving 64-bit libobk.so to libobk.so.back" | tee -a "$MAKE_TRACE"
					mv -f "$O_HOME"/lib/libobk.so "$O_HOME"/lib/libobk.so.back
				fi
				echo "ln -s $LIBOBK_PATH/libobk.so64.1 $O_HOME/lib/libobk.so" | tee -a "$MAKE_TRACE"
				ln -s "$LIBOBK_PATH"/libobk.so64.1 "$O_HOME"/lib/libobk.so ;
				LD_LIBRARY_PATH=$O_HOME/lib:$LD_LIBRARY_PATH ;
				export LD_LIBRARY_PATH ;
			else
				#i386 platform so 64-bit Oracle is installed - using libobk.so
				if [ -f "$O_HOME"/lib/libobk.so ] || [ -h "$O_HOME"/lib/libobk.so ] ; then
					echo "Moving libobk.so to libobk.so.back" | tee -a "$MAKE_TRACE"
					mv -f "$O_HOME"/lib/libobk.so "$O_HOME"/lib/libobk.so.back
				fi ;
				echo "ln -s $LIBOBK_PATH/libobk.so.1 $O_HOME/lib/libobk.so" | tee -a "$MAKE_TRACE"
				ln -s "$LIBOBK_PATH"/libobk.so.1 "$O_HOME"/lib/libobk.so ;
				LD_LIBRARY_PATH=$O_HOME/lib:$LD_LIBRARY_PATH ;
				export LD_LIBRARY_PATH ;
			fi
			echo "Done" | tee -a "$MAKE_TRACE"
			;;


		RedHat*)
			#Linux platforms
			OS_f2=$(uname -a | cut -c1-5)
			PLATFORM="$OS_f2 RedHat"
			SYSTYPE=$(uname -m)
			#Is this a valid version of Oracle for this platform
			echo "Platform type: $SYSTYPE" | tee -a  "$MAKE_TRACE"
			echo "Linking LIBOBK:" | tee -a  "$MAKE_TRACE"
			if [ "$SYSTYPE" != "ia64" ] ; then
				# for all Oracle 11, 12 and 18 use 64-bit Oracle
				if [ -f "$O_HOME"/lib/libobk.so ] || [ -h "$O_HOME"/lib/libobk.so ] ; then
					echo "Moving 64-bit libobk.so to libobk.so.back" | tee -a "$MAKE_TRACE"
					mv -f "$O_HOME"/lib/libobk.so "$O_HOME"/lib/libobk.so.back
				fi
				echo "ln -s $LIBOBK_PATH/libobk.so64 $O_HOME/lib/libobk.so" | tee -a "$MAKE_TRACE"
				ln -s "$LIBOBK_PATH"/libobk.so64 "$O_HOME"/lib/libobk.so ;
				LD_LIBRARY_PATH=$O_HOME/lib:$LD_LIBRARY_PATH ;
				export LD_LIBRARY_PATH ;
			else
				#ia64 platform so 64-bit Oracle is installed - using libobk.so
				if [ -f "$O_HOME"/lib/libobk.so ] || [ -h "$O_HOME"/lib/libobk.so ] ; then
					echo "Moving libobk.so to libobk.so.back" | tee -a "$MAKE_TRACE"
					mv -f "$O_HOME"/lib/libobk.so "$O_HOME"/lib/libobk.so.back
				fi ;
				echo "ln -s $LIBOBK_PATH/libobk.so $O_HOME/lib/libobk.so" | tee -a "$MAKE_TRACE"
				ln -s "$LIBOBK_PATH"/libobk.so "$O_HOME"/lib/libobk.so ;
				LD_LIBRARY_PATH=$O_HOME/lib:$LD_LIBRARY_PATH ;
				export LD_LIBRARY_PATH ;
			fi
			echo "Done" | tee -a "$MAKE_TRACE"
			;;


		SuSE*)
			OS_f2=$(uname -a | cut -c1-5)
			PLATFORM="$OS_f2 SuSE"
			SYSTYPE=$(uname -m)
			#Is this a valid version of Oracle for this platform
			echo "Platform type: $SYSTYPE" | tee -a  "$MAKE_TRACE"
			if [ "$SYSTYPE" != "ia64" ] ; then
				echo "Linking LIBOBK:" | tee -a  "$MAKE_TRACE"
				if [ -f "$O_HOME"/lib/libobk.so ] || [ -h "$O_HOME"/lib/libobk.so ] ; then
					echo "Moving libobk.so to libobk.so.back" | tee -a "$MAKE_TRACE"
					mv -f "$O_HOME"/lib/libobk.so "$O_HOME"/lib/libobk.so.back
				fi ;
				echo "ln -s $LIBOBK_PATH/libobk.so64 $O_HOME/lib/libobk.so" | tee -a "$MAKE_TRACE"
				ln -s "$LIBOBK_PATH"/libobk.so64 "$O_HOME"/lib/libobk.so ;
				LD_LIBRARY_PATH=$O_HOME/lib:$LD_LIBRARY_PATH ;
				export LD_LIBRARY_PATH ;
			else
				#ia64 platform so 64-bit Oracle is installed - using libobk.so
				echo "Linking LIBOBK:" | tee -a  "$MAKE_TRACE"
				if [ -f "$O_HOME"/lib/libobk.so ] || [ -h "$O_HOME"/lib/libobk.so ] ; then
					echo "Moving libobk.so to libobk.so.back" | tee -a "$MAKE_TRACE"
					mv -f "$O_HOME"/lib/libobk.so "$O_HOME"/lib/libobk.so.back
				fi ;
				echo "ln -s $LIBOBK_PATH/libobk.so $O_HOME/lib/libobk.so" | tee -a "$MAKE_TRACE"
				ln -s "$LIBOBK_PATH"/libobk.so "$O_HOME"/lib/libobk.so ;
				LD_LIBRARY_PATH=$O_HOME/lib:$LD_LIBRARY_PATH ;
				export LD_LIBRARY_PATH ;
			fi
			echo "Done" | tee -a "$MAKE_TRACE"
			;;

		IBMzSeries*)
			#zLinux platforms
			PLATFORM="zLinux"
			#Is this a valid version of Oracle for this platform
			echo "Linking LIBOBK:" | tee -a "$MAKE_TRACE"
			if [ -f "$O_HOME"/lib/libobk.so ] || [ -h "$O_HOME"/lib/libobk.so ] ; then
				echo "Moving libobk.so to libobk.so.back" | tee -a "$MAKE_TRACE"
				mv -f "$O_HOME"/lib/libobk.so "$O_HOME"/lib/libobk.so.back
			fi ;
			echo "ln -s $LIBOBK_PATH/libobk.so $O_HOME/lib/libobk.so" | tee -a "$MAKE_TRACE"
			ln -s "$LIBOBK_PATH"/libobk.so "$O_HOME"/lib/libobk.so ;
			echo "Done" | tee -a "$MAKE_TRACE"
			;;
	esac

	if [ "$PLATFORM" = "nosupport" ] ; then
		echo "ERROR:  Platform is not supported." | tee -a "$MAKE_TRACE"
		echo "Oracle Linking Script Aborted." | tee -a "$MAKE_TRACE"
		exit 1
	fi
else

	echo "$LIBOBK_PATH/version not found." | tee -a "$MAKE_TRACE"
	exit 1
fi;
echo ""
echo "Please check the trace file located in $MAKE_TRACE 
to make sure the linking process was successful."

exit 0



