#!/bin/bash
#
# copyssrtosyslib - Copies SSR libs to detected system lib dirs.
#
# This is useful for applications that reset LD_LIBRARY_PATH.
#
# Copyright (c) Open Text. All Rights Reserved. Trademarks owned by OpenText.
#

basename=$(basename $0)

updateonly=
ver=3
libs=(
"libopentextglfaker.so.$ver"
"libopentextglfaker-nodl.so.$ver"
"libopentextglfaker-opencl.so.$ver"
"libopentextgefaker.so.$ver"
"libopentextdlfaker.so.$ver"
"libopentextpollfaker.so.$ver"
)

setvgldir()
{
	basedir="$(dirname $(readlink -nf $1))"
	vgldirs=( 
	 "$basedir/../3rdparty/virtualgl" #v10
	 "$basedir/3rdparty/virtualgl"    #v8
	 "$basedir/gl"                    #v7
	 )
	vgldir=

	for dir in "${vgldirs[@]}"; do
		if [ -d "$dir" ]; then
			vgldir="$(readlink -nf $dir)"
			break
		fi
	done
}

setsystemlibdirs()
{
	
	syslib32dir=
	syslib64dir=

	libx1132=$(ldd  $vgldir/bin/glxinfo   | sed -n 's/.* => \(.*libX11\..*\) .*/\1/p')
	[ -z "$libx1132" ] && libx1132=libX11.so.6
	libx1132base=$(basename $libx1132)
	auto32libdir=$(dirname $libx1132)
	[ -z "$auto32libdir" ] && auto32libdir=/lib

	lib32dirs=(
	"$auto32libdir"
	"/usr/lib32"
	"/usr/lib"
	"/usr/lib/i386-linux-gnu"
	)
	
	for dir in "${lib32dirs[@]}"; do
		if [ -n "$libx1132base" -a -e "$dir/$libx1132base" ]; then
			syslib32dir=$dir
			break
		fi
	done

	if [ "$(uname -m)" = "x86_64" ]; then

	libx1164=$(ldd  $vgldir/bin/glxinfo64 | sed -n 's/.* => \(.*libX11\..*\) .*/\1/p')
	[ -z "$libx1164" ] && libx1164=libX11.so.6
	libx1164base=$(basename $libx1164)
	auto64libdir=$(dirname $libx1164)
	[ -z "$auto64libdir" ] && auto64libdir=/lib

	lib64dirs=(
	"$auto64libdir"
	"/usr/lib64"
	"/usr/lib/x86_64-linux-gnu"
	)

	for dir in "${lib64dirs[@]}"; do
		if [ -n "$libx1164base" -a -e "$dir/$libx1164base" ]; then
			syslib64dir=$dir
			break
		fi
	done

	fi
}

installlib()
{
	src=$1
	dst=$2

	if [ -z "$src" -o -z "$dst" ]; then
		logmsg "${basename}: ERROR: installlib(): bad arguments"
		return
	fi

	if  [ ! -e "$src" ]; then
		logmsg "${basename}: ERROR: installlib(): src doesn't exist ($src)"
		return
	fi

	if  [ -n "$updateonly" -a ! -e "$dst" ]; then
		return
	fi

	cp -p "$src" "$dst"
	if [ $? -ne 0 ]; then
		logmsg "${basename}: ERROR: installlib(): copying '$src' to '$dst'"
	else
		logmsg "    $dst"
	fi
}

logmsg()
{
	if [ -z "$updateonly" ]; then
		echo "$@"
	fi
}

#### start ####

if [ ! $(id -u) -eq 0 ]; then
	logmsg "${basename}: ERROR: This script must be run as root."
	exit 1
fi
if [ "$1" = "updateonly" ]; then
	shift
	updateonly=y
fi

logmsg "${basename}: Installing SSR libraries to system..."

setvgldir $0
option=$1

if [ -z "$vgldir" ]; then
	logmsg "${basename}: ERROR: Invalid install directory."
	exit 1
fi

setsystemlibdirs

logmsg ""
if [ -n "$syslib32dir" ]; then
	logmsg "Installing 32-bit libs to: $syslib32dir"
	for lib in "${libs[@]}"; do
		installlib "$vgldir/lib/$lib" "$syslib32dir/$lib"
	done
else
	# A warning, since 32-bit apps may not work
	logmsg "${basename}: WARNING: Could not determine system 32-bit lib directory."
	logmsg "No 32-bit libs installed to system."
fi

logmsg ""
if [ -n "$syslib64dir" ]; then
	logmsg "Installing 64-bit libs to: $syslib64dir"
	for lib in "${libs[@]}"; do
		installlib "$vgldir/lib64/$lib" "$syslib64dir/$lib"
	done
else
	# Only warn if a 64-bit machine
	if [ "$(uname -m)" = "x86_64" ]; then
		logmsg "${basename}: WARNING: Could not determine system 64-bit lib directory."
		logmsg "No 64-bit libs installed to system."
	fi
fi

logmsg "Done."
