#!/bin/ksh # Make an AIX shared library (tricky!!!) # Based on a script from Athanasios G. Gaitatzes (gaitat@vnet.ibm.com) # Improved by Greg Thompson -gt #--identification------------------------------------------------------ # $Id: mklib.aix,v 1.2 1999/09/15 15:10:20 brianp Exp $ # $Log: mklib.aix,v $ # Revision 1.2 1999/09/15 15:10:20 brianp # added third, tiny version number to arguments # # Revision 1.1 1999/08/19 13:52:56 brianp # initial check-in (post-crash) # #--common-------------------------------------------------------------- LIBRARY=$1 shift 1 MAJOR=$1 shift 1 MINOR=$1 shift 1 TINY=$1 shift 1 OBJECTS=$* #--platform------------------------------------------------------------ # 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 # 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 libGL.a, libaGLU.a, libglut.a 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}" = libGLU ] ; then echo "glLoadIdentity" >> ${EXPFILE} fi # Make the shared lib file cc -o ${OFILE} ${OBJECTS} -L../lib ${OTHERLIBS} -lX11 -lXext -lXmu -lXi -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