include proto in tags, update problem finding tool
[musl-tables] / findproblems.sh
1 #!/bin/sh
2
3 export LC_ALL=C
4
5 ./makeproto.sh
6 {
7         awk -F'\t' '{print $1}' data/musl.tags data/posix2008.ok # data/c99
8         awk -F'\t' '{print $2}' data/musl.syms
9 } |sort |uniq |awk -F'\t' '
10 BEGIN {
11         posix = "data/posix2008.ok.proto"
12         syms = "data/musl.syms"
13         tags = "data/musl.tags.proto"
14
15         while (getline < syms == 1)
16                 sym[$2] = $1
17
18         # todo: same tag may be defined in several headers
19         while (getline < tags == 1)
20                 tag[$1] = $2 "\t" $3 "\t" $5 "\t" $6
21
22         while (getline < posix == 1)
23                 pos[$1] = $2 "\t" $5 "\t" $6
24 }
25 {
26         s = ""
27         if (sym[$1])
28                 s = s " obj"
29         if (tag[$1])
30                 s = s " inc"
31         if (pos[$1])
32                 s = s " posix"
33
34         print $1 "\t" substr(s,2) "\t" sym[$1] "\t" tag[$1] "\t" pos[$1]
35 }' >data/musl.all
36
37 awk -F'\t' '
38 $2 == "obj" || $2 == "obj posix" {
39         # not declared
40         if ($1 !~ /^_/)
41                 print "nodecl\t" $1 "\t" $3
42 }
43 $2 ~ /inc posix/ && $4 != $8 {
44         # different header
45
46         n = split($8, a, " ")
47         for (i = 1; i <= n; i++)
48                 if ($4 == a[i])
49                         break
50         if (i > n)
51                 print "header\t" $1 "\t" $4 "\t" $8
52 }
53 $2 ~ /inc posix/ && $7 != $10 && $5 == "p" {
54         # different prototype
55         print "proto\t" $1 "\t" $4 "\t" $7 "\t" $10 "\t" $6 "\t" $9
56 }
57 ' data/musl.all >data/musl.problems
58