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