#! /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 ] " 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 $?