Checks unused non-static symbols and undefined .h-externed symbols
authorshort <>
Fri, 2 Nov 2001 22:08:03 +0000 (22:08 +0000)
committershort <>
Fri, 2 Nov 2001 22:08:03 +0000 (22:08 +0000)
bin/checkstatic [new file with mode: 0755]

diff --git a/bin/checkstatic b/bin/checkstatic
new file mode 100755 (executable)
index 0000000..e525384
--- /dev/null
@@ -0,0 +1,38 @@
+#! /bin/sh
+
+fis="${*:-*.o}"
+
+for i in $fis;do
+       rest="`echo '' $fis ''|sed "s# $i # #"`"
+       trail="()"
+       for t in T BCDRS;do
+               for sym in `nm $i|sed -n 's/^.* ['$t'] \(.*\)$/\1/p'`;do
+                       if nm $rest|grep -q ' U '"$sym"'$';then :;else
+                               echo "$i        $sym$trail"|sed 's/\.o  /.c     /'
+                       fi
+               done
+               trail=""
+       done
+done
+
+echo
+
+function checkextern
+{
+       ctags -f - --c-types=$1 `cvsfiles|grep '\.h$'` | \
+                       if $2;then
+                               grep '  /\^extern '
+                       else
+                               cat
+                       fi \
+                       | while read -r line;do
+               sym="` echo "$line" | awk '{print $1}'`"
+               file="`echo "$line" | awk '{print $2}'`"
+               if nm $fis|grep -q " [$3] ""$sym"'$';then :;else
+                       echo "extern    $file   $sym$4"
+               fi
+       done
+}
+
+checkextern x true  BCDRS ""
+checkextern p false T     "()"