#! /bin/sh
#
# shlib-install - install a shared library and do any necessary host-specific
#		  post-installation configuration (like ldconfig)
#
# usage: shlib-install [-D] -O host_os -d installation-dir -i install-prog [-U] library
#
# Chet Ramey
# chet@po.cwru.edu

#
# defaults
#
INSTALLDIR=/usr/local/lib
LDCONFIG=ldconfig

PROGNAME=`basename $0`
USAGE="$PROGNAME [-D] -O host_os -d installation-dir -i install-prog [-U] library"

# process options

while [ $# -gt 0 ]; do
	case "$1" in
	-O)	shift; host_os="$1"; shift ;;
	-d)	shift; INSTALLDIR="$1"; shift ;;
	-i)	shift; INSTALLPROG="$1" ; shift ;;
	-D)	echo=echo ; shift ;;
	-U)	uninstall=true ; shift ;;
	-*)	echo "$USAGE" >&2 ; exit 2;;
	*)	break ;;
	esac
done

# set install target name
LIBNAME="$1"

if [ -z "$LIBNAME" ]; then
	echo "$USAGE" >&2
	exit 2
fi

OLDSUFF=old
MV=mv
RM="rm -f"
LN="ln -s"

# pre-install

if [ -z "$uninstall" ]; then
	${echo} $RM ${INSTALLDIR}/${LIBNAME}.${OLDSUFF}
	if [ -f "$INSTALLDIR/$LIBNAME" ]; then
		${echo} $MV $INSTALLDIR/$LIBNAME ${INSTALLDIR}/${LIBNAME}.${OLDSUFF}
	fi
fi

# install/uninstall

if [ -z "$uninstall" ] ; then
	${echo} eval ${INSTALLPROG} $LIBNAME ${INSTALLDIR}/${LIBNAME}
else
	${echo} ${RM} ${INSTALLDIR}/${LIBNAME}
fi

# post-install/uninstall

# HP-UX requires that a shared library have execute permission
case "$host_os" in
hpux*)	if [ -z "$uninstall" ]; then
		chmod 755 ${INSTALLDIR}/${LIBNAME}
	fi ;;
*)	;;
esac

case "$LIBNAME" in
*.*.[0-9].[0-9])	# libname.so.M.N
	LINK2=`echo $LIBNAME | sed 's:\(.*\..*\.[0-9]\)\.[0-9]:\1:'`	# libname.so.M
	LINK1=`echo $LIBNAME | sed 's:\(.*\..*\)\.[0-9]\.[0-9]:\1:'`	# libname.so
	;;
*.*.[0-9])		# libname.so.M
	LINK1=`echo $LIBNAME | sed 's:\(.*\..*\)\.[0-9]:\1:'`		# libname.so
	;;
*.[0-9])		# libname.M
	LINK1=`echo $LIBNAME | sed 's:\(.*\)\.[0-9]:\1:'`		# libname
	;;
esac

#
# Create symlinks to the installed library.  This section is incomplete.
#
case "$host_os" in
*linux*|bsdi4*)
	# libname.so.M -> libname.so.M.N
	${echo} ${RM} ${INSTALLDIR}/$LINK2
	if [ -z "$uninstall" ]; then
		${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/$LINK2
	fi

	# libname.so -> libname.so.M.N
	${echo} ${RM} ${INSTALLDIR}/$LINK1
	if [ -z "$uninstall" ]; then
		${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/$LINK1
	fi
	;;

solaris2*|aix4.[2-9]*|osf*|irix[56]*)
	# libname.so -> libname.so.M
	${echo} ${RM} ${INSTALLDIR}/$LINK1
	if [ -z "$uninstall" ]; then
		${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/$LINK1
	fi
	;;


# FreeBSD 3.x can have either a.out or ELF shared libraries
freebsd3*)
	if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then
		# libname.so -> libname.so.M
		${echo} ${RM} ${INSTALLDIR}/$LINK1
		if [ -z "$uninstall" ]; then
			${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/$LINK1
		fi
	else
		# libname.so.M -> libname.so.M.N
		${echo} ${RM} ${INSTALLDIR}/$LINK2
		if [ -z "$uninstall" ]; then
			${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/$LINK2
		fi

		# libname.so -> libname.so.M.N
		${echo} ${RM} ${INSTALLDIR}/$LINK1
		if [ -z "$uninstall" ]; then
			${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/$LINK1
		fi
	fi
	;;

hpux1*)
	# libname.sl -> libname.M
	${echo} ${RM} ${INSTALLDIR}/$LINK1.sl
	if [ -z "$uninstall" ]; then
		${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/${LINK1}.sl
	fi
	;;

*)	;;
esac

exit 0
