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