#!/bin/bash
##################################################################################
#                                                                            
#                             NOTICE                                     
#                                                                            
#                    COPYRIGHT 2009-2026 Marvell
#                       ALL RIGHTS RESERVED                              
#                                                                            
# Name:  libinstall
# Description:
# 	Configure libqlsdm and libHBAAPI libraries to system library search path. 
# 	Check and update /etc/hba.conf if needed
# 	Cleanup temporary file in /tmp
#
#
##################################################################################
                                                                            
# Find what platform that we are running on
OS_REL=$(cat /etc/*release 2>/dev/null | grep -w "ID" | sed 's/"//g' | cut -f2 -d"=")
PLATFORM=$(uname -m | sed "s/i.86/i386/")
SUP_PLATFORM=${PLATFORM}
KERNEL=`uname -r | awk '{print substr($1,1,3)}'`
LIBDIR="/usr/lib64"
TMPDIR="/tmp"
CURDIR=`pwd`
KERNELSRC="2.6"
LIBPATH="x86_64"

#set -x 

#Check for ubuntu
if [ "$OS_REL" = "ubuntu" ]; then
    if [ "$PLATFORM" = "ppc64le" ]; then
        LIBPATH="powerpc64le-linux-gnu"
        if [ -d /lib/powerpc64le-linux-gnu ]; then
           LIBDIR="/lib/powerpc64le-linux-gnu"
           LIBPATH="powerpc64le-linux-gnu"
        else
           LIBDIR="/usr/lib64"
        fi
    elif [ "$PLATFORM" = "ppc64" ]; then
        LIBPATH="ppc64-linux-gnu"
        if [ -d /lib/ppc64le-linux-gnu ]; then
           LIBDIR="/lib/ppc64-linux-gnu"
        else
           LIBDIR="/usr/lib64"
        fi
    elif [ "$PLATFORM" = "aarch64" ]; then
        LIBPATH="aarch64-linux-gnu"
        if [ -d /lib/aarch64-linux-gnu ]; then
           LIBDIR="/lib/aarch64-linux-gnu"
        elif [ -d /usr/lib/aarch64-linux-gnu ]; then
           LIBDIR="/usr/lib/aarch64-linux-gnu"
        elif [ -d /usr/lib64 ]; then
           LIBDIR="/usr/lib64"
        else
           LIBDIR="/usr/lib"
        fi
    elif [ "$PLATFORM" = "x86_64" ]; then
        LIBPATH="x86_64-linux-gnu"
        if [ -d /usr/lib/x86_64-linux-gnu ]; then
           LIBDIR="/usr/lib/x86_64-linux-gnu"
        elif [ -d /usr/lib64 ]; then
           LIBDIR="/usr/lib64"
        else 
           LIBDIR="/usr/lib"
        fi
    else 
        LIBPATH="x86_64"
        LIBDIR="/usr/lib64"
    fi
elif [ "$OS_REL" = "redhat" -o "$OS_REL" = "sles" ]; then
     # Check for Red Hat / SuSE
     if [ "$PLATFORM" = "aarch64" ]; then
        LIBPATH="aarch64-linux-gnu"
        if [ -d /usr/lib/aarch64-linux-gnu ]; then
            LIBDIR="/usr/lib/aarch64-linux-gnu"
        elif [ -d /usr/lib64 ]; then
            LIBDIR="/usr/lib64"
        else
            LIBDIR="/usr/lib"
        fi
     elif [ "$PLATFORM" = "ppc64le" ]; then
        LIBPATH="powerpc64le-linux-gnu"
        if [ -d /lib/powerpc64le-linux-gnu ]; then
           LIBDIR="/lib/powerpc64le-linux-gnu"
        else
           LIBDIR="/usr/lib64"
        fi
     elif [ "$PLATFORM" = "ppc64" ]; then
        LIBPATH="pc64-linux-gnu"
        if [ -d /lib/ppc64-linux-gnu ]; then
           LIBDIR="/lib/pc64-linux-gnu"
        else
           LIBDIR="/usr/lib64"
        fi
     elif [ "$PLATFORM" == "x86_64" ]; then
        LIBPATH="x86_64"
        if [ -d /usr/lib64 ]; then
           LIBDIR="/usr/lib64"
        else
           # Debian
           LIBDIR="/usr/lib"
      fi
    else
        LIBPATH="x86_64"
        LIBDIR="/usr/lib"
    fi
else
     # Check for debian kylyn centos xenenterprise (x86_64/arm64)
     PLATFORM='$(uname -m | sed "s/i.86/i386/")'
     if [ "$PLATFORM" = "aarch64" ]; then
        if [ "$OS_REL" = "kylin" ]; then
           LIBPATH="x86_64"
           LIBDIR="/usr/lib64"
        else
           if [ -d /usr/lib/aarch64-linux-gnu ]; then
              LIBPATH="aarch64-linux-gnu"
              LIBDIR="/usr/lib/aarch64-linux-gnu"
           elif [ -d /usr/lib64 ]; then
              LIBPATH="x86_64"
              LIBDIR="/usr/lib64"
           else
              LIBDIR="/usr/lib"
           fi
        fi
     elif [ "$PLATFORM" = "ppc64le" ]; then
        if [ -d /lib/powerpc64le-linux-gnu ]; then
           LIBDIR="/lib/powerpc64le-linux-gnu"
        else
           LIBPATH="x86_64"
           LIBDIR="/usr/lib64"
        fi
     elif [ "$PLATFORM" = "ppc64" ]; then
        if [ -d /lib/ppc64-linux-gnu ]; then
           LIBDIR="/lib/pc64-linux-gnu"
        else
           LIBPATH="x86_64"
           LIBDIR="/usr/lib64"
        fi
     elif [ "$PLATFORM" == "x86_64" ]; then
        if [ "$OS_REL" = "debian" ]; then
           LIBPATH="x86_64-linux-gnu"
           LIBDIR="/usr/lib/x86_64-linux-gnu"
        else
           if [ -d /usr/lib64 ]; then
              LIBPATH="x86_64"
              LIBDIR="/usr/lib64"
           elif [ -d /usr/lib/x86_64-linux-gnu ]; then
              ls -l /usr/lib/x86_64-linux-gnu/*.so 2>/dev/null
              if [ $? -eq 0 ]; then
                 LIBPATH="x86_64-linux-gnu"
                 LIBDIR="/usr/lib/x86_64-linux-gnu"
              else
                 LIBPATH="x86_64"
                 LIBDIR="/usr/lib64"
              fi
           fi
        fi
     else
        LIBPATH="x86_64"
        LIBDIR="/usr/lib64"
    fi
fi


# Libraries
CURLIBQLSDM="$LIBDIR/libqlsdm.so"
CURLIBHBAAPI="$LIBDIR/libHBAAPI.so"

LIBQLSDM="libqlsdm.so"
LIBHBAAPI="libHBAAPI.so"
LIBHBAAPI2="libHBAAPI.so.2.0.2"

BACKUP_DATE=`date +%m%d%y-%H_%M_%S`
LOGFILE=${TMPDIR}/qaucli_${BACKUP_DATE}.log
##################################################
# error_mssg                                      #
# Gives error mssg if installed lib ver is higher #
# than the new lib,which user want to install     #
#                                                 #
# Paramters:                                      #
# $1: Old Lib version                             #
# $2: New Lib version                             #                                 
##################################################
error_mssg()
{
	LIB_VER1=$1
	LIB_VER2=$2
	echo "Higher version  \"$LIB_VER1\"  library already installed"
	echo "To install this version  \"$LIB_VER2\"  use \"--force\" option"
	echo "For example # /tmp/lib/libinstall --force"
	exit 0
 
}
###################################################
# check_number                                    #
# Check the lib version                           #
# Paramters:                                      #
# $1 Number                                       #
# $2 Type                                         #
###################################################
check_number()
{
	NUM=$1
	TYPE=$2
     
	echo $NUM | grep -w "^[0-9]\+$" >& /dev/null
	if [ $? -ne 0 ]; then
		echo "${TYPE} version: ${NUM} should be numeric"
		echo "Skipping library installation"
		exit 0
	fi
}
##################################################
# comp_lib_ver                                    #
# Compares versions of already installed Library  #
# and New Library,which user want to install      #
#                                                 #
# Paramters:                                      #
# $1: Library (eg. /usr/lib64/libqlsdm.so)        #
# $2: Local copy (./lib64/libqlsdm.so)            #
##################################################
comp_lib_ver()
{
	LIB_OLD=$1
	LIB_NEW=$2
 
	LIB_VERSION1=""
	LIB_VERSION2=""
		
	OLD_MAJ=""
	OLD_MIN=""
	OLD_BUILD=""
	OLD_PRE=""
 
	NEW_MAJ=""
	NEW_MIN=""
	NEW_BUILD=""
	NEW_PRE=""
    
    if [ ! -f $LIB_OLD ]; then
		#if lib not already installed then return and install new one   
		return 1
	fi

	strings $CURLIBQLSDM > /dev/null 2>&1
	if [ $? -ne 0 ]; then
		# The strings command does not exist, we just do a force installation
		return 1
	fi
    
    #check old version is greater than new version
	LIB_VERSION1=`strings $LIB_OLD 2> /dev/null | grep "library version" | sed "s/.*v//"`
	echo "lib_version1: $LIB_VERSION"
	if [ ! -f $LIB_NEW ]; then
		echo "Cannot find $LIB_NEW, skipping Library installation."
		echo "Cannot find $LIB_NEW, skipping Library installation." >> ${LOGFILE}
		return 0
	fi
 
	LIB_VERSION2=`strings $LIB_NEW 2> /dev/null | grep "library version" | sed "s/.*v//"`
	echo "lib_version2: $LIB_VERSION2"
 
	OLD_MAJ=`echo $LIB_VERSION1 | sed "s/ b.*//" | cut -d . -f 1`
	echo "Old Maj: ${OLD_MAJ}"
	if [ "$OLD_MAJ" = "" ]; then
		OLD_MAJ=0
	else
		echo "FGG"
		check_number $OLD_MAJ "Major"
		echo "GGH"
	fi
	echo "Old Maj: ${OLD_MAJ}"
 
	NEW_MAJ=`echo $LIB_VERSION2 | sed "s/ b.*//" | cut -d . -f 1`
	echo "New Maj: ${NEW_MAJ}"
	if [ "$NEW_MAJ" = "" ]; then
		NEW_MAJ=0
	else
		check_number $NEW_MAJ "Major"
	fi
	
	#compare major here
	if [ $OLD_MAJ -gt $NEW_MAJ ]; then
		error_mssg "${LIB_VERSION1}"  "${LIB_VERSION2}"
	elif [ $OLD_MAJ -lt $NEW_MAJ ]; then
		return 1
    fi
 
	OLD_MIN=`echo $LIB_VERSION1 | sed "s/ b.*//" | cut -d . -f 2`
    if [ "$OLD_MIN" = "" ]; then
		OLD_MIN=0
	else
		check_number $OLD_MIN "Minor"
	fi
 
	NEW_MIN=`echo $LIB_VERSION2 | sed "s/ b.*//" | cut -d . -f 2`
	if [ "$NEW_MIN" = "" ]; then
		NEW_MIN=0
	else
		check_number $NEW_MIN "Minor"
	fi
    
    #Compare min	
    if [  $OLD_MIN -gt $NEW_MIN ]; then	
		error_mssg "${LIB_VERSION1}"  "${LIB_VERSION2}"
	elif [ $OLD_MIN -lt $NEW_MIN ]; then
		return 1
	fi

	OLD_BUILD=`echo $LIB_VERSION1 | sed "s/.*build//" | sed "s/beta//" | sed "s/debug//" | sed "s/-[Pp][Rr][Ee].*//"`
	if [ "$OLD_BUILD" = "" ]; then
		OLD_BUILD=0
	else
		echo $OLD_BUILD | grep -w "^[0-9]\+$" >& /dev/null
		if [ $? -ne 0 ]; then
			OLD_BUILD=`echo $LIB_VERSION1 | sed "s/.*build//" | sed "s/beta//" | sed "s/debug//" | sed "s/-[Pp][Rr][Ee].*//" | sed "s/[Pp][Rr][Ee].*//" | cut -d. -f 1`
		fi
			check_number $OLD_BUILD "Build"
	fi
		
	NEW_BUILD=`echo $LIB_VERSION2 | sed "s/.*build//" | sed "s/beta//" | sed "s/debug//" | sed "s/-[Pp][Rr][Ee].*//" | sed "s/[Pp][Rr][Ee].*//" | cut -d. -f 1`
	if [ "$NEW_BUILD" = "" ]; then
		NEW_BUILD=0
	else
	echo $NEW_BUILD | grep -w "^[0-9]\+$" >& /dev/null
		if [ $? -ne 0 ]; then
			NEW_BUILD=`echo $LIB_VERSION1 | sed "s/.*build//" | sed "s/beta//" | sed "s/debug//" | sed "s/-[Pp][Rr][Ee].*//" | sed "s/[Pp][Rr][Ee].*//" | cut -d. -f 1`
		fi
		check_number $NEW_BUILD "Build"
	fi
 
	#compare build
	if [  $OLD_BUILD -gt $NEW_BUILD ]; then
		error_mssg "${LIB_VERSION1}"  "${LIB_VERSION2}"
	elif [ $OLD_BUILD -lt $NEW_BUILD ]; then
		return 1
	fi

	OLD_PRE=`echo $LIB_VERSION1 |  sed "s/.*"[Pp][Rr][Ee]"//"`
	echo $OLD_PRE | grep -w "^[0-9]\+$" >& /dev/null
	if [ $? -ne 0 ]; then
		OLD_PRE=0
	fi

	NEW_PRE=`echo $LIB_VERSION2 |  sed "s/.*"[Pp][Rr][Ee]"//"`
	echo $NEW_PRE | grep -w "^[0-9]\+$" >& /dev/null
	if [ $? -ne 0 ]; then
		NEW_PRE=0
	fi

   #Compare pre

	if [  $OLD_PRE -eq $NEW_PRE ]; then
		echo "$LIB_OLD is already up-to-date (v${LIB_VERSION1})." >> ${LOGFILE}
		return 0
	fi

	if [ $OLD_PRE -eq 0 ]; then
		error_mssg "${LIB_VERSION1}"  "${LIB_VERSION2}"
	fi

	if  [ $NEW_PRE -eq 0 ]; then
		return 1
	fi

	if [  $OLD_PRE -gt $NEW_PRE ]; then
		error_mssg "${LIB_VERSION1}"  "${LIB_VERSION2}"
	elif [ $OLD_PRE -lt $NEW_PRE ]; then
		return 1
	fi
}

###################################################
# install_lib                                     #
# Installs the libqlsdm.so in /usr/lib or/and     #
# /usr/lib64                                      #
#                                                 #
# Paramters:                                      #
# $1: Library (eg. /usr/lib64/libqlsdm.so)        #
# $2: Local copy (./lib64/libqlsdm.so)            #
# $3: Destination                                 #
# $4: --force parameter                           #
###################################################
install_lib()
{
	LIB=$1
	LOCAL_LIB=$2
	DEST=$3
	local FORCE=$4

	local INSTALL=0
	if [ $FORCE -eq 1 ]; then
		INSTALL=1
	else
		if [ -f $LIB ]; then
			#make sure we are not installing again
			comp_lib_ver $LIB $LOCAL_LIB
			INSTALL=$?
		else
			INSTALL=1
		fi
	fi

	if [ $INSTALL -eq 1 ]; then
		pidof qlremote > /dev/nul
		if [ $? -eq 0 ]; then
			echo "qlremote is currently running. Please restart qlremote if needed."
		fi

		pidof qaucli > /dev/nul
		if [ $? -eq 0 ]; then
			echo -n "qaucli is currently running. Please restart qaucli if needed."
		fi

		pidof scli > /dev/nul
		if [ $? -eq 0 ]; then
			echo -n "scli is currently running. Please restart sclii if needed."
		fi
		cp --suffix=.ql.bak --backup=existing $LOCAL_LIB $DEST
	fi
}

###################################################
# install_other_lib                               #
# Installs the libs in /usr/lib or/and            #
# /usr/lib64                                      #
#                                                 #
# Paramters:                                      #
# $1: Library (eg. /usr/lib/libHBAAPI.so)         #
# $2: Local copy (./lib/libHBAAPI.so)             #
# $3: Destination                                 #
###################################################
install_other_lib()
{
	LIB=$1
	LOCAL_LIB=$2
	DEST=$3
	local INSTALL=1
	BKUPLIB=$LIB.${BACKUP_DATE}.bak

	if [ $INSTALL -eq 1 ]; then
		echo -n "Installing $2 to $3..., "  >> ${LOGFILE}
		cp --suffix=.${BACKUP_DATE}.bak --backup=existing $LOCAL_LIB $DEST 
        test -f ${BKUPLIB} && mv ${BKUPLIB} $TMPDIR
		cp $LOCAL_LIB $DEST 
		if [ $? -eq 0 ] ; then
			echo "OK"  >> ${LOGFILE}
		fi
	fi
}


##################################################
# comp_hba_lib_ver                               #
# Compares versions of already installed Library #
# and New Library,which user want to install i   #
# i                                              #
# Paramters: i                                   #
# $1: Library (eg. /usr/lib/libHBAAPI.so)        #
# $2: Local copy (./lib/libHBAAPI.so)            #
##################################################
comp_lib_ver()
{
	LIB_OLD=$1
	LIB_NEW=$2

	LIB_VERSION1=""
	LIB_VERSION2=""

	OLD_MAJ=""
	OLD_MIN=""
	OLD_BUILD=""
	OLD_PRE=""


	NEW_MAJ=""
	NEW_MIN=""
	NEW_BUILD=""
	NEW_PRE=""
	if [ ! -f $LIB_OLD ]; then
		#if lib not already installed then return and install new one   
		return 1
	fi

	strings $CURLIBQLSDM > /dev/null 2>&1
	if [ $? -ne 0 ]; then
		# The strings command does not exist, we just do a force installation
		return 1
	fi
	#check old version is greater than new version
	LIB_VERSION1=`strings $LIB_OLD 2> /dev/null | grep "library version" | sed "s/.*v//"`
	if [ ! -f $LIB_NEW ]; then
		echo "Cannot find $LIB_NEW, skipping Library installation."
		echo "Cannot find $LIB_NEW, skipping Library installation." >> ${LOGFILE}
		return 0
	fi

	LIB_VERSION2=`strings $LIB_NEW 2> /dev/null | grep "library version" | sed "s/.*v//"`

	OLD_MAJ=`echo $LIB_VERSION1 | sed "s/ b.*//" | cut -d . -f 1`
	if [ "$OLD_MAJ" = "" ]; then
		OLD_MAJ=0
	else
		check_number $OLD_MAJ "Major"
	fi

	NEW_MAJ=`echo $LIB_VERSION2 | sed "s/ b.*//" | cut -d . -f 1`
	if [ "$NEW_MAJ" = "" ]; then
			NEW_MAJ=0
	else
			check_number $NEW_MAJ "Major"
	fi
	#compare major here
	if [ $OLD_MAJ -gt $NEW_MAJ ]; then
		error_mssg "${LIB_VERSION1}"  "${LIB_VERSION2}"
	elif [ $OLD_MAJ -lt $NEW_MAJ ]; then
		return 1
	fi

	OLD_MIN=`echo $LIB_VERSION1 | sed "s/ b.*//" | cut -d . -f 2`
	if [ "$OLD_MIN" = "" ]; then
		OLD_MIN=0
	else
		check_number $OLD_MIN "Minor"
	fi

	NEW_MIN=`echo $LIB_VERSION2 | sed "s/ b.*//" | cut -d . -f 2`
	if [ "$NEW_MIN" = "" ]; then
		NEW_MIN=0
	else
		check_number $NEW_MIN "Minor"
	fi
        
	#Compare min
    if [  $OLD_MIN -gt $NEW_MIN ]; then
		error_mssg "${LIB_VERSION1}"  "${LIB_VERSION2}"
	elif [ $OLD_MIN -lt $NEW_MIN ]; then
		return 1
	fi

 	OLD_BUILD=`echo $LIB_VERSION1 | sed "s/.*build//" | sed "s/beta//" | sed "s/debug//" | sed "s/-[Pp][Rr][Ee].*//"`
	if [ "$OLD_BUILD" = "" ]; then
		OLD_BUILD=0
	else
		echo $OLD_BUILD | grep -w "^[0-9]\+$" >& /dev/null
		if [ $? -ne 0 ]; then
			OLD_BUILD=`echo $LIB_VERSION1 | sed "s/.*build//" | sed "s/beta//" | sed "s/debug//" | sed "s/-[Pp][Rr][Ee].*//" | sed "s/[Pp][Rr][Ee].*//" | cut -d. -f 1`
		fi
		check_number $OLD_BUILD "Build"
	fi

	NEW_BUILD=`echo $LIB_VERSION2 | sed "s/.*build//" | sed "s/beta//" | sed "s/debug//" | sed "s/-[Pp][Rr][Ee].*//" | sed "s/[Pp][Rr][Ee].*//" | cut -d. -f 1`
	if [ "$NEW_BUILD" = "" ]; then
		NEW_BUILD=0
	else
		echo $NEW_BUILD | grep -w "^[0-9]\+$" >& /dev/null
		if [ $? -ne 0 ]; then
			NEW_BUILD=`echo $LIB_VERSION1 | sed "s/.*build//" | sed "s/beta//" | sed "s/debug//" | sed "s/-[Pp][Rr][Ee].*//" | sed "s/[Pp][Rr][Ee].*//" | cut -d. -f 1`
		fi
		check_number $NEW_BUILD "Build"
	fi

	#compare build
	if [  $OLD_BUILD -gt $NEW_BUILD ]; then
		error_mssg "${LIB_VERSION1}"  "${LIB_VERSION2}"
	elif [ $OLD_BUILD -lt $NEW_BUILD ]; then
		return 1
	fi

	OLD_PRE=`echo $LIB_VERSION1 |  sed "s/.*"[Pp][Rr][Ee]"//"`
	echo $OLD_PRE | grep -w "^[0-9]\+$" >& /dev/null
	if [ $? -ne 0 ]; then
		OLD_PRE=0
	fi
 
	NEW_PRE=`echo $LIB_VERSION2 |  sed "s/.*"[Pp][Rr][Ee]"//"`
	echo $NEW_PRE | grep -w "^[0-9]\+$" >& /dev/null
	if [ $? -ne 0 ]; then
		 NEW_PRE=0
	fi

   #Compare pre

	if [  $OLD_PRE -eq $NEW_PRE ]; then
	   echo "$LIB_OLD is already up-to-date (v${LIB_VERSION1})." >> ${LOGFILE}
	   return 0
	fi

	if [ $OLD_PRE -eq 0 ]; then
		error_mssg "${LIB_VERSION1}"  "${LIB_VERSION2}"
	fi

	if  [ $NEW_PRE -eq 0 ]; then
		return 1
	fi

	if [  $OLD_PRE -gt $NEW_PRE ]; then
		error_mssg "${LIB_VERSION1}"  "${LIB_VERSION2}"
	elif [ $OLD_PRE -lt $NEW_PRE ]; then
		return 1
	fi
}
##################################################
# comp_hba_lib_ver #
# Compares versions of already installed Library #
# and New Library,which user want to install #
# #
# Paramters: #
# $1: Library (eg. /usr/lib/libHBAAPI.so) #
# $2: Local copy (./lib/libHBAAPI.so) #
##################################################
comp_hba_lib_ver()
{
	LIB_OLD=$1
	LIB_NEW=$2
	LIB_VERSION1=""
	LIB_VERSION2=""
	OLD_MAJ=""
	OLD_MIN=""
	OLD_BUILD=""
	OLD_PRE=""
	NEW_MAJ=""
	NEW_MIN=""
	NEW_BUILD=""
	NEW_PRE=""
    
	if [ ! -f $LIB_NEW ]; then
		echo "Cannot find $LIB_NEW, skipping Library installation."
		echo "Cannot find $LIB_NEW, skipping Library installation." >> ${LOGFILE}
		return 0
    fi
	
	if [ ! -f $LIB_OLD ]; then
		#if lib not already installed then return and install new one
		return 1
	fi
		
	
	strings $CURLIBHBAAPI > /dev/null 2>&1
	if [ $? -ne 0 ]; then
		# The strings command does not exist, we just do a force installation
		return 1
	fi

    #check old version is greater than new version
	
	OLD_MAJ=`readelf -d ${LIB_OLD} | grep SONAME | awk ' { print $5 } ' |  cut -d . -f 3 | sed "s/]//"`				
	if [ "$OLD_MAJ" == "" ]; then
		OLD_MAJ=0
	else
		check_number $OLD_MAJ "Major"
	fi
	
	
	NEW_MAJ=`readelf -d ${LIB_NEW} | grep SONAME | awk ' { print $5 } ' |  cut -d . -f 3 | sed "s/]//"`	
	if [ "$NEW_MAJ" == "" ]; then
		NEW_MAJ=0
	else
		check_number $OLD_MAJ "Major"	
	fi
 
	#compare major here
	if [ $OLD_MAJ -gt $NEW_MAJ ]; then
		error_mssg "${LIB_VERSION1}" "${LIB_VERSION2}"
	elif [ $OLD_MAJ -lt $NEW_MAJ ]; then
		return 1
	elif [ $OLD_MAJ -eq $NEW_MAJ ]; then
		echo "libHBAAPI version ${NEW_MAJ} already installed."
		echo "libHBAAPI version ${NEW_MAJ} already installed." >> ${LOGFILE}	
		return 0
    fi  
}
###################################################
# install_hba_lib                                 #
# Installs the libHBAAPI.so in /usr/lib or/and i  #
# /usr/lib64 i                                    #
#                                                 #
# Paramters: i                                    #          
# $1: Library (eg. /usr/lib/libHBAAPI.so)         #
# $2: Local copy (./lib/libHBAAPI.so) i           #
# $3: Destination i                               #
# $4: --force parameter i                         #
# $5: --skip_hbaapi parameter i                   #
###################################################
install_hba_lib()
{
    	LIB=$1
    	LOCAL_LIB=$2
    	DEST=$3		
    	local FORCE=$4
    	local SKIP_HBAAPI=$5
    	local INSTALL=0		

    	if [ $SKIP_HBAAPI -eq 1 ]; then
       		echo "Skipping libHBAAPI installation." >> ${LOGFILE}
       		return 0
    	elif [ $FORCE -eq 1 ]; then
       		INSTALL=1
    	else
       		if [ -f $LIB ]; then
				#make sure we are not installing again
          		comp_hba_lib_ver $LIB $LOCAL_LIB
          		INSTALL=$?				
       		else
          		INSTALL=1
       		fi
    	fi

    	if [ $INSTALL -eq 1 ]; then       	
			cp -R ${LOCAL_LIB} $DEST
			# Backup the old libHBAAPI.so
			cp --suffix=.ql.bak --backup=existing $LIBHBAAPI $DEST
			# Copy the symbolic link libHBAAPI.so 
			cp -R ${LIBHBAAPI} $DEST
    	fi
}

####################################################
# create_library_conf_file                         #
# Adds the application shared library files to the #
# system's library path                            #
# Paramters:                                       #
####################################################
create_library_conf_file()
{
        PATH_FOUND=0

        QCC_LIBRARY_PATH="/opt/QLogic_Corporation/QConvergeConsoleCLI/lib64"
        if [ -d ${QCC_LIBRARY_PATH} ]; then
                PATH_FOUND=1
        else
                if [ -L /usr/local/bin/qaucli ]; then
                        QCC_LIBRARY_PATH=`ls -l /usr/local/bin/qaucli  | awk ' { print $11 }' | sed 's/qaucli/lib64/g'`
                        if [ -d ${QCC_LIBRARY_PATH} ]; then
                                PATH_FOUND=1
                        fi
                fi
        fi

        if [ ${PATH_FOUND} -eq 1 ]; then
                if [ -d /etc/ld.so.conf.d ]; then
                        echo "${QCC_LIBRARY_PATH}" > /etc/ld.so.conf.d/qaucli-${LIBPATH}.conf
                fi
        fi
}


# Handle different platform

echo "Configuring qaucli shared libraries..."  > ${LOGFILE}
echo "OS: $OS_REL"  >> ${LOGFILE}
echo "Architecture: $PLATFORM"  >> ${LOGFILE}
echo "Kernel: $KERNEL"  >> ${LOGFILE}
echo "Library Directory: $LIBDIR"  >> ${LOGFILE}


# Update these variables
LIBQLSDM="${CURDIR}/libqlsdm.so"
LIBHBAAPI="${CURDIR}/libHBAAPI.so"
LIBHBAAPI2="${CURDIR}/libHBAAPI.so.2.0.2"

FORCE=0
SKIP_HBAAPI=0

for ARG in "$@"; do
	if [ "$ARG" = "--force" ]; then
		FORCE=1
	elif [ "$ARG" = "--skiphbaapi" ]; then
		SKIP_HBAAPI=1
	fi
done

#Install libHBAAPI.so.2
if [ $SKIP_HBAAPI -eq 0 ]; then
	install_hba_lib "$CURLIBHBAAPI"  "$LIBHBAAPI2" "$LIBDIR" $FORCE $SKIP_HBAAPI
fi


#Install libqlsdm.so
install_lib "$CURLIBQLSDM"  "$LIBQLSDM" "$LIBDIR"  "$FORCE"



# Add shared library conf file
create_library_conf_file

# update linker cache for new lib
ldconfig > /dev/null 2>&1 >> ${LOGFILE}

# Now check the hba.conf file
ETC_HBA_CONF=/etc/hba.conf

ETC_NEW_HBA_CONF="${TMPDIR}/new_hba.conf"

LOCAL_HBA_CONF="${CURDIR}/hba.conf"


fn_hba_conf_update_on_non_ubuntu()
{
     #non-ubuntu start

     	if [ -s $ETC_HBA_CONF ]; then
        	if [ -r $ETC_HBA_CONF ] && [ -w $ETC_HBA_CONF ]; then
             		cp $ETC_HBA_CONF $ETC_NEW_HBA_CONF

             		if [ $SUP_PLATFORM == ia32 ]; then
                 		grep "qla2xxx" $ETC_NEW_HBA_CONF 2>&1 > /dev/null
                 		if [ $? -ne 0 ]; then
                      			echo "qla2xxx ${LIBDIR}/libqlsdm.so" >> $ETC_NEW_HBA_CONF
                      			sed -e '/^[[:space:]]*qla2xxx*/d' $ETC_NEW_HBA_CONF 2>&1 > /dev/null 
                 		fi
             		else
                 		grep "qla2xxx64" $ETC_NEW_HBA_CONF 2>&1 > /dev/null
                 		if [ $? -ne 0 ]; then
                     			echo "qla2xxx64 ${LIBDIR}/libqlsdm.so" >> $ETC_NEW_HBA_CONF
                     			sed -e '/^[[:space:]]*qla2xxx64*/d' $ETC_NEW_HBA_CONF 2>&1 > /dev/null 
                 		fi
             		fi

             		#now move the new hba.conf and backup original ones
            		mv -f --suffix=.${BACKUP_DATE}.bak --backup=existing $ETC_NEW_HBA_CONF $ETC_HBA_CONF
         	else
             		echo "Cannot update /etc/hba.conf. Permission denied."
             		exit
         	fi
    	else
        	if [ $SUP_PLATFORM == ia32 ]; then
            		grep "qla2xxx" $LOCAL_HBA_CONF 2>&1 > /dev/null
            		if [ $? -ne 0 ]; then
               			echo "qla2xxx ${LIBDIR}/libqlsdm.so" >> $LOCAL_HBA_CONF
               			sed -e '/^[[:space:]]*qla2xxx*/d' $LOCAL_HBA_CONF 2>&1 > /dev/null 
            		fi
        	else
            		grep "qla2xxx64" $LOCAL_HBA_CONF 2>&1 > /dev/null
            		if [ $? -ne 0 ]; then
               			echo "qla2xxx64 ${LIBDIR}/libqlsdm.so" >> $LOCAL_HBA_CONF
               			sed -e '/^[[:space:]]*qla2xxx64*/d' $LOCAL_HBA_CONF 2>&1 > /dev/null 
            		fi
        	fi

        	cp ${LOCAL_HBA_CONF} /etc/hba.conf
    	fi
}


fn_hba_conf_update_on_UBUNTU()
{
     	BKP=0
     	if [ -s $ETC_HBA_CONF ]; then
        	 BKP=1
     	else
        	if [ -f ${CURDIR}/hba.conf ]; then
              		cp -f ${CURDIR}/hba.conf /etc
         	else
              		echo "# Auto generated hba.conf file" > ${CURDIR}/hba.conf
              		echo "#debuglevel 3" >> ${CURDIR}/hba.conf
              		cp -f ${CURDIR}/hba.conf /etc
         	fi
     	fi

     	grep "qla2xxx64" $ETC_HBA_CONF | grep lib64 2>&1 > /dev/null
     	if [ $? -eq 0 ]; then
         	if [ "${BKP}" -eq 1 ]; then
             		cp -f ${ETC_HBA_CONF} ${ETC_HBA_CONF}.${BACKUP_DATE}.0.bak
         	fi
         	sed -i '/qla2xxx64/d' $ETC_HBA_CONF 2>&1 > /dev/null
     	fi

     	if [ -r $ETC_HBA_CONF ] && [ -w $ETC_HBA_CONF ]; then
         	cp -f $ETC_HBA_CONF $ETC_NEW_HBA_CONF
         	if [ "$SUP_PLATFORM" = "x86_64" ]; then
             		grep "qla2xxx64" $ETC_NEW_HBA_CONF 2>&1 > /dev/null
             		if [ $? -ne 0 ]; then
                 		echo "qla2xxx64 ${LIBDIR}/libqlsdm.so" >> $ETC_NEW_HBA_CONF
                 		sed -e '/^[[:space:]]*qla2xxx64*/d' $ETC_NEW_HBA_CONF 2>&1 > /dev/null
             		fi
         	else
             		grep "qla2xxx64" $ETC_NEW_HBA_CONF 2>&1 > /dev/null
             		if [ $? -ne 0 ]; then
                  		echo "qla2xxx64 ${LIBDIR}/libqlsdm.so" >> $ETC_NEW_HBA_CONF
                  		sed -e '/^[[:space:]]*qla2xxx64*/d' $ETC_NEW_HBA_CONF 2>&1 > /dev/null
             		fi
         	fi

         	#now move the new hba.conf and backup original ones
         	if [ "${BKP}" -eq 1 ]; then
             		mv -f --suffix=.${BACKUP_DATE}.bak --backup=existing $ETC_NEW_HBA_CONF $ETC_HBA_CONF
         	else
             		mv -f $ETC_NEW_HBA_CONF $ETC_HBA_CONF
         	fi
     	else
         	echo "Cannot update /etc/hba.conf. Permission denied."
         	exit
     	fi
}
if [ "${OS_REL}" == "ubuntu" ]; then		
     	#ubuntu start
     	fn_hba_conf_update_on_UBUNTU
     	#	ubuntu end
else
		#non-ubuntu start
     	fn_hba_conf_update_on_non_ubuntu
     	#non-ubuntu end
fi # non-ubuntu

# Now check the library data file

if [ -s "${TMPDIR}/qlsdm.dat" ]
then
    	if [ -r ${TMPDIR}/qlsdm.dat ] && [ -w ${TMPDIR}/qlsdm.dat ]
    	then
        	rm -f ${TMPDIR}/qlsdm.dat
    	else
        	echo "Cannot delete ${TMPDIR}/qlsdm.dat. Permission denied. Please delete it manually."
        	exit
    	fi
fi

if [ -s /tmp/ql_shared.dat ]
then
    	if [ -r /tmp/ql_shared.dat ] && [ -w /tmp/ql_shared.dat ]
    	then
        	rm -f /tmp/ql_shared.dat 2> /dev/null
    	else
        	echo "Cannot delete /tmp/ql_shared.dat. Permission denied. Please delete it manually."
        	exit
    	fi
fi

echo "Done." >> ${LOGFILE}
