home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
IRIS Development Option 6.2
/
IRIS_Development_Option_6.2_814-0478-001.iso
/
dist
/
dev.idb
/
usr
/
bin
/
check_abi_interface.z
/
check_abi_interface
Wrap
Text File
|
1996-03-14
|
2KB
|
127 lines
#!/sbin/sh
#ident "$Revision: 1.2 $"
PROG=`basename $0`
USAGE="Usage: $PROG [-abidir DIR -missing -extra -libname NAME] file"
CHECKER_ABIDIR=${CHECKER_ABIDIR:-/usr/lib/abi/data}
TMPDIR=${TMPDIR:-/var/tmp}
OUTPUT=$TMPDIR/output.$$
CHECKFILE=$TMPDIR/check.$$
TMPOUTPUT=$TMPDIR/tmpoutput.$$
MISSING=1
EXTRA=1
LIBNAME_GIVEN=0
trap "rm -f $OUTPUT $CHECKFILE $TMPOUTPUT; exit 1" 1 2 13 15
while [ $# -gt 1 ]
do
case "$1" in
-libname)
LIBNAME_GIVEN=1;
shift;
if [ $# -gt 1 ]
then
LIBNAME=$1; shift
else
echo $USAGE >&2
exit 1;
fi;;
-abidir)
shift;
if [ $# -gt 1 ]
then
CHECKER_ABIDIR=$1; shift
else
echo $USAGE >&2
exit 1;
fi;;
-missing)
MISSING=1;
EXTRA=0;
shift;;
-extra)
MISSING=0;
EXTRA=1;
shift;;
*)
echo $USAGE >&2
exit 1;;
esac
done
if [ $# -ne 1 ]
then
echo $USAGE >&2
exit 1
fi
if [ ! -f $1 ]
then
echo "$PROG: cannot access file $1" >&2
exit 1
fi
if [ $LIBNAME_GIVEN -eq 0 ]
then
LIBNAME=`basename $1`
fi
nm -p $1 | sed -e "s/^[0-9A-Za-z]* //p" -e "s/^[ ]*//p" | awk '\
BEGIN { prev = 1 } \
NF == 0 { prev = 0 } \
NF > 0 { \
if (prev != 0) { \
print $0 \
} else { \
prev = 1 \
} \
}' | awk '{ \
if (($1 == "T") || \
($1 == "D") || \
($1 == "B") || \
($1 == "A") || \
($1 == "G") || \
($1 == "S") || \
($1 == "R") || \
($1 == "C") || \
($1 == "E")) { \
print $2 \
} \
}' | sort -u | egrep -v "^\.bss$|^\.data$|^\.rdata$|^\.sbss$|^\.sdata$|^\.text$" > $OUTPUT
if [ $MISSING -eq 1 ] || [ $EXTRA -eq 1 ]
then
grep -v "^#" $CHECKER_ABIDIR/$LIBNAME.names | sort -u > $CHECKFILE
fi
if [ $MISSING -eq 1 ]
then
comm -23 $CHECKFILE $OUTPUT > $TMPOUTPUT
if [ `wc -l < $TMPOUTPUT` -ne 0 ]
then
if [ $EXTRA -eq 1 ]
then
echo "The following ABI routines are missing from the library:"
fi
cat $TMPOUTPUT
fi
fi
if [ $EXTRA -eq 1 ]
then
comm -13 $CHECKFILE $OUTPUT | grep -v "^_" > $TMPOUTPUT
if [ `wc -l < $TMPOUTPUT` -ne 0 ]
then
if [ $MISSING -eq 1 ]
then
echo "\nThe following public routines are not part of the ABI:"
fi
cat $TMPOUTPUT
fi
fi
rm -f $OUTPUT $CHECKFILE $TMPOUTPUT