blob: 438a5d78337b333263ff541503a51f8a59c6ae9b [file] [log] [blame]
#! /bin/sh
# This script writes an export file, assembling the exported symbols
# by reading the output of nm. This file is needed on AIX (4.2 and
# later) to compile shared libs.
#
# For the (main) executable add "-bE:lib.exp" to the linker options
# and for the shared libs add "-bI:lib.exp" (maybe with a path) if
# you call the export file "lib.exp".
#set -x
usage="Usage: `basename $0` [-o <expfile>] <object files and libs>"
if [ ${1-"-h"} = "-h" ]; then
echo 1>&2 "$usage"
exit 1
fi
# Check for name of export file
case $1 in
-o)
mainexp=${2?$usage}
shift 2
;;
-o*)
mainexp=$1
mainexp=${mainexp#-o}
shift
;;
*)
mainexp="lib.exp"
;;
esac
# Check for object or archive files
ofiles=""
for arg; do
case $arg in *.o | *.lo | *.a) ofiles="$ofiles $arg";; esac
done
# Call nm so that it prints only global symbols (unsorted, w/o header)
nm=nm
nmopts="-p -g -h"
# Replace "varname B adr1 adr2" with "varname bss"
regex1='s,^\([a-zA-Z][a-zA-Z0-9_]*\) *B .*$,\1 bss,p'
# Replace "varname D adr1 adr2" with "varname"
regex2='s,^\([a-zA-Z][a-zA-Z0-9_]*\) *D .*$,\1,p'
# Note that functions appear as ".funname T" for the text section
# and as "funname D" for the initialized data section (the function
# name is a pointer).
## # Replace ".funname T adr1 adr2" with "funname"
## regex1='s,^\.\([a-zA-Z][a-zA-Z0-9_]*\) *T .*$,\1,p'
echo "#! ." > $mainexp
$nm $nmopts $ofiles | sed -n -e "$regex1" -e "$regex2" | \
sort | uniq >> $mainexp
exit $?