#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
#
#ident	"%Z%%M%	%I%	%E% SMI"
#
# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#

ONLDCPIO=/tmp/SUNWonld.cpio.$$
LINKERALIAS=linker_install@eng.sun.com


#
# This script handles the installation of the new sgstools on
# both Solaris10 systems (which libraries moved to '/lib') and
# pre Solaris10 systems where libraries reside under '/usr/lib'.
#
# We test to deterine if '/lib' is a symlink (pre Solaris10) or a
# directory (Solaris10 & later).  We key off of that for
# everything below.
#
if [ -h ${BASEDIR}/lib ]
then
	LIBBASE=usr/lib
	ETCLIST="etc/lib/ld.so.1 etc/lib/libdl.so.1"
else
	LIBBASE=lib
fi
export LIBBASE


build_liblist ()
{
	#
	# Build '/lib' file list for backing up
	#
	cd $BASEDIR/$SGSDIR/lib
	find . \( -type f -o -type l \) -print | while read file
	do
		if [ \( -f $BASEDIR/$LIBBASE/$file \)  -o \
		    \( -h $BASEDIR/$LIBBASE/$file \) ]; then
			echo $LIBBASE/$file
		fi
	done
}

build_filelist()
{
	#
	# Build rest of files
	#
	cd $BASEDIR/$SGSDIR
	find usr \( -type f -o -type l \) -print | while read file
	do
		if [ \( -f $BASEDIR/$file \)  -o \
		    \( -h $BASEDIR/$file \) ]; then
			echo $file
		fi
	done
}

build_newitemsfile ()
{
	rm -f ${SGSBACKUPDIR}.newfiles

	# Build a list of files/directories that this package is going
	# add to the system that do not already exist.
	cd $BASEDIR/$SGSDIR/lib
	find . -depth -print | while read file
	do
		# Built in /bin/sh test lacks -e
		/usr/bin/test \! -e "$BASEDIR/$LIBBASE/$file"
		if [ $? = 0 ]; then
			echo $LIBBASE/$file >> ${SGSBACKUPDIR}.newfiles
		fi
	done

	cd $BASEDIR/$SGSDIR
	find usr -depth -print | while read file
	do
		/usr/bin/test \! -e "$BASEDIR/$file"
		if [ $? = 0 ]; then
			echo $file >> ${SGSBACKUPDIR}.newfiles
		fi
	done
}

# Generate a file containing the names of the files and directories
# that are being added (as opposed to being replaced) to the system.
# These items will need to be explicitly removed at uninstall.
build_newitemsfile


#
# backup all existing SGStools.
#
LIBLIST=`build_liblist`
FILELIST=`build_filelist`
echo "Backup up existing SGS tools to $SGSBACKUPDIR..."
cd $BASEDIR
for file in $LIBLIST $FILELIST $ETCLIST
do
	echo $file
done  | cpio -pdm $BASEDIR/$SGSBACKUPDIR


#
# Overwrite SGSTOOLS onto existing system.  We use CPIO
# because rm's a file and then installs a new one
# instead of copying over a existing file.  This is
# required when updating libraries (and the run-time linker)
# which are currently being used.
#


#
# First '/lib' components
#
echo "Installing new SGSTOOLS from $BASEDIR/$SGSDIR"

prev_bindnow=$LD_BIND_NOW
LD_BIND_NOW=1
export LD_BIND_NOW

cd $BASEDIR/$SGSDIR/lib
find . -depth -print | cpio -o -O $ONLDCPIO
cd $BASEDIR/$LIBBASE
cpio -imdu < $ONLDCPIO
rm -f $ONLDCPIO

#
# Then everything else
#
cd $BASEDIR/$SGSDIR
find usr -depth -print | cpio -o -O $ONLDCPIO
cd $BASEDIR
cpio -imdu < $ONLDCPIO
rm -f $ONLDCPIO


#
# Populate '/etc/lib' directories on systems with the
# run-time linker installed under '/usr/lib/ld.so.1'
#
if [ "${ETCLIST}x" != "x" ]; then
	cp $BASEDIR/usr/lib/ld.so.1 $BASEDIR/etc/lib/ld.so.1.onld
	cp $BASEDIR/usr/lib/libdl.so.1 $BASEDIR/etc/lib/libdl.so.1.onld
	cd $BASEDIR/etc/lib
	mv ld.so.1.onld ld.so.1
	mv libdl.so.1.onld libdl.so.1
fi

LD_BIND_NOW=$prev_bindnow

####
#### E-mail sent to track installations of SUNWonld package.
#### purely for statistical purposes.
####
###if [ -f /usr/lib/sendmail ]
###then
###	HOSTINFO=`uname -a`
###	DATE=`date`
###	ENVLIST=`env`
###	/usr/lib/sendmail $LINKERALIAS << EOF
###To: $LINKERALIAS
###Subject: SUNWonld Linker Package Installation: $PRODVERS
###Content-type: text/plain
###Precedence: junk
###--------
###
###Package Installation
###uname: $HOSTINFO
###date: $DATE
###VERSION: $VERSION
###ENV:
###$ENVLIST
###$ENV
###
###.
###EOF
###fi