#!/bin/ksh

# Make an AIX shared library (tricky!!!)
# Based on a script from Athanasios G. Gaitatzes (gaitat@vnet.ibm.com)
# Improved by Greg Thompson <gregt@visix.com> -gt

# First argument is name of output library
# Rest of arguments are object files


# Name of the library which clients will link with (ex: libMesaGL.a)
LIBRARY=$1

# BASENAME = LIBRARY without .a suffix
BASENAME=`echo ${LIBRARY} | sed "s/\.a//g"`

# Name of exports file
EXPFILE=${BASENAME}.exp

# Name of temporary shared lib file
OFILE=shr.o
####OFILE=${BASENAME}.o

# List of object files to put into library
shift 1
OBJECTS=$*


# Remove any old files from previous make
rm -f ${LIBRARY} ${EXPFILE} ${OFILE}

# Pick a way to use nm -gt
NM=${NM-/bin/nm -eC}

# Determine which version of AIX this is
AIXVERSION=`uname -v`

# Pick a way to tell the linker there's no entrypoint -gt
case ${AIXVERSION}
{
	3*)
		ENTRY='-e _nostart'
		;;
	4*)
		ENTRY=-bnoentry
		;;
	*)
		echo "Error in mklib.aix!"
		exit 1
		;;
}


# Other libraries which we may be dependent on.  Since we make the libraries
# in the order libMesaGL.a, libMesaGLU.a, libMesatk.a, libMesaaux.a each
# just depends on its predecessor.
# modified to make otherlibs in the form of -lfoo -gt
OTHERLIBS=`ls ../lib/*.a | sed "s/..\/lib\/lib/-l/g" | sed "s/\.a//g"`

##echo OTHERLIBS are ${OTHERLIBS}


# Make exports (.exp) file header
echo "#! ${LIBRARY}" > ${EXPFILE}

# Append list of exported symbols to exports file -gt
case ${AIXVERSION}
{
    3*)
	${NM} ${OBJECTS} | awk -F'|' '{
	    if ($3 != "extern" || substr($7,1,1) == " ") continue
	    sub ("  *", "", $1); sub ("  *", "", $7)
	    if ( (($7 == ".text") || ($7 == ".data") || ($7 == ".bss"))  \
		    && ( substr($1,1,1) != ".")) {
		if (substr ($1, 1, 7) != "__sinit" &&
			substr ($1, 1, 7) != "__sterm") {
		    if (substr ($1, 1, 5) == "__tf1")
			print (substr ($1, 7))
		    else if (substr ($1, 1, 5) == "__tf9")
			print (substr ($1, 15))
		    else
			print $1
		}
	    }
	}' | sort -u >> ${EXPFILE}
	;;

    4*)
	${NM} ${OBJECTS} | awk '{
	    if ((($2 == "T") || ($2 == "D") || ($2 == "B")) \
		    && ( substr($1,1,1) != ".")) {
		if (substr ($1, 1, 7) != "__sinit" &&
			substr ($1, 1, 7) != "__sterm") {
		    if (substr ($1, 1, 5) == "__tf1")
			print (substr ($1, 7))
		    else if (substr ($1, 1, 5) == "__tf9")
			print (substr ($1, 15))
		    else
			print $1
		}
	    }
	}' | sort -u >> ${EXPFILE}
	;;
}


# This next line is a hack to allow full compatibility with IBM's OpenGL
# libraries.  IBM mistakenly exports glLoadIdentity from the libGLU.a
# library.  We have to do the same thing.  Problem reported by Yemi Adesanya
# (adesanya@afsmail.cern.ch) and Patrick Brown (pbrown@austin.ibm.com)
if [ "${BASENAME}" = libMesaGLU ] ; then
    echo "glLoadIdentity" >> ${EXPFILE}
fi


# Make the shared lib file
cc -o ${OFILE} ${OBJECTS} -L../lib ${OTHERLIBS} -lX11 -lm -lc -bE:${EXPFILE} -bM:SRE ${ENTRY}


# Make the .a file
ar ruv ${LIBRARY} ${OFILE}

# Put exports file in Mesa lib directory
mv ${EXPFILE} ../lib

# Remove OFILE
rm -f ${OFILE}


#NOTES
# AIX 4.x /usr/bin/nm -B patch from ssclift@mach.me.queensu.ca (Simon Clift)
# Robustified symbol extraction for AIX 3 and 4
#   Greg Thompson <gregt@visix.com>

