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
Text File  |  1996-03-14  |  2KB  |  127 lines

  1. #!/sbin/sh
  2. #ident    "$Revision: 1.2 $"
  3.  
  4. PROG=`basename $0`
  5. USAGE="Usage: $PROG [-abidir DIR -missing -extra -libname NAME] file"
  6. CHECKER_ABIDIR=${CHECKER_ABIDIR:-/usr/lib/abi/data}
  7. TMPDIR=${TMPDIR:-/var/tmp}
  8. OUTPUT=$TMPDIR/output.$$
  9. CHECKFILE=$TMPDIR/check.$$
  10. TMPOUTPUT=$TMPDIR/tmpoutput.$$
  11. MISSING=1
  12. EXTRA=1
  13. LIBNAME_GIVEN=0
  14.  
  15. trap "rm -f $OUTPUT $CHECKFILE $TMPOUTPUT; exit 1" 1 2 13 15
  16.  
  17. while [ $# -gt 1 ]
  18. do
  19.     case "$1" in
  20.     -libname)
  21.         LIBNAME_GIVEN=1;
  22.         shift;
  23.         if [ $# -gt 1 ]
  24.         then
  25.             LIBNAME=$1; shift
  26.         else
  27.             echo $USAGE >&2
  28.             exit 1;
  29.         fi;;
  30.     -abidir)
  31.         shift;
  32.         if [ $# -gt 1 ]
  33.         then
  34.             CHECKER_ABIDIR=$1; shift
  35.         else
  36.             echo $USAGE >&2
  37.             exit 1;
  38.         fi;;
  39.     -missing)
  40.         MISSING=1;
  41.         EXTRA=0;
  42.         shift;;
  43.     -extra)
  44.         MISSING=0;
  45.         EXTRA=1;
  46.         shift;;
  47.     *)    
  48.         echo $USAGE >&2
  49.         exit 1;;
  50.     esac
  51. done
  52.  
  53.  
  54. if [ $# -ne 1 ]
  55. then
  56.     echo $USAGE >&2
  57.     exit 1
  58. fi
  59.  
  60. if [ ! -f $1 ]
  61. then
  62.     echo "$PROG: cannot access file $1" >&2
  63.     exit 1
  64. fi
  65.  
  66. if [ $LIBNAME_GIVEN -eq 0 ]
  67. then
  68.     LIBNAME=`basename $1`
  69. fi
  70.  
  71. nm -p $1 | sed -e "s/^[0-9A-Za-z]* //p" -e "s/^[     ]*//p" | awk '\
  72.     BEGIN { prev = 1 } \
  73.     NF == 0 { prev = 0 } \
  74.     NF > 0 { \
  75.         if (prev != 0) { \
  76.             print $0 \
  77.         } else { \
  78.             prev = 1 \
  79.         } \
  80.     }' | awk '{ \
  81.             if (($1 == "T") || \
  82.                 ($1 == "D") || \
  83.                 ($1 == "B") || \
  84.                 ($1 == "A") || \
  85.                 ($1 == "G") || \
  86.                 ($1 == "S") || \
  87.                 ($1 == "R") || \
  88.                 ($1 == "C") || \
  89.                 ($1 == "E")) { \
  90.                 print $2 \
  91.             } \
  92.         }' | sort -u | egrep -v "^\.bss$|^\.data$|^\.rdata$|^\.sbss$|^\.sdata$|^\.text$" > $OUTPUT
  93.  
  94. if [ $MISSING -eq 1 ] || [ $EXTRA -eq 1 ]
  95. then
  96.     grep -v "^#" $CHECKER_ABIDIR/$LIBNAME.names | sort -u > $CHECKFILE
  97. fi
  98.  
  99. if [ $MISSING -eq 1 ]
  100. then
  101.     comm -23 $CHECKFILE $OUTPUT > $TMPOUTPUT
  102.     if [ `wc -l < $TMPOUTPUT` -ne 0 ]
  103.     then
  104.         if [ $EXTRA -eq 1 ]
  105.         then
  106.             echo "The following ABI routines are missing from the library:"
  107.         fi
  108.         cat $TMPOUTPUT
  109.     fi
  110. fi
  111.  
  112.  
  113. if  [ $EXTRA -eq 1 ]
  114. then
  115.     comm -13 $CHECKFILE $OUTPUT | grep -v "^_" > $TMPOUTPUT
  116.     if [ `wc -l < $TMPOUTPUT` -ne 0 ]
  117.     then
  118.         if [ $MISSING -eq 1 ]
  119.         then
  120.             echo "\nThe following public routines are not part of the ABI:"
  121.         fi
  122.         cat $TMPOUTPUT
  123.     fi
  124. fi
  125.  
  126. rm -f $OUTPUT $CHECKFILE $TMPOUTPUT
  127.