Checks unused non-static symbols and undefined .h-externed symbols
[nethome.git] / bin / checkstatic
1 #! /bin/sh
2
3 fis="${*:-*.o}"
4
5 for i in $fis;do
6         rest="`echo '' $fis ''|sed "s# $i # #"`"
7         trail="()"
8         for t in T BCDRS;do
9                 for sym in `nm $i|sed -n 's/^.* ['$t'] \(.*\)$/\1/p'`;do
10                         if nm $rest|grep -q ' U '"$sym"'$';then :;else
11                                 echo "$i        $sym$trail"|sed 's/\.o  /.c     /'
12                         fi
13                 done
14                 trail=""
15         done
16 done
17
18 echo
19
20 function checkextern
21 {
22         ctags -f - --c-types=$1 `cvsfiles|grep '\.h$'` | \
23                         if $2;then
24                                 grep '  /\^extern '
25                         else
26                                 cat
27                         fi \
28                         | while read -r line;do
29                 sym="` echo "$line" | awk '{print $1}'`"
30                 file="`echo "$line" | awk '{print $2}'`"
31                 if nm $fis|grep -q " [$3] ""$sym"'$';then :;else
32                         echo "extern    $file   $sym$4"
33                 fi
34         done
35 }
36
37 checkextern x true  BCDRS ""
38 checkextern p false T     "()"