fix posix headers (sys/, arpa/,..)
[musl-tables] / makeall.sh
1 #!/bin/sh
2
3 export LC_ALL=C
4
5 [ -f data/musl.tags.proto -a -f data/posix2008.ok.proto ] || ./makeproto.sh
6
7 {
8         awk -F'\t' '{print $1}' data/musl.tags data/posix2008.ok # data/c99
9         awk -F'\t' '{print $2}' data/musl.syms
10 } |sort |uniq |awk -F'\t' '
11 BEGIN {
12         posix = "data/posix2008.ok.proto"
13         syms = "data/musl.syms"
14         tags = "data/musl.tags.proto"
15
16         while (getline < syms == 1)
17                 sym[$2] = $1
18         while (getline < tags == 1)
19                 tag[$1] = $2 "\t" $3 "\t" $5 "\t" $6
20         while (getline < posix == 1)
21                 pos[$1] = $2 "\t" $5 "\t" $6
22 }
23 {
24         s = ""
25         if (sym[$1])
26                 s = s " obj"
27         if (tag[$1])
28                 s = s " inc"
29         if (pos[$1])
30                 s = s " posix"
31
32         print $1 "\t" substr(s,2) "\t" sym[$1] "\t" tag[$1] "\t" pos[$1]
33 }' >data/musl.all
34
35 awk -F'\t' '
36 $2 == "obj" || $2 == "obj posix" {
37         # not declared
38         if ($1 !~ /^_/)
39                 print "nodecl\t" $1 "\t" $3
40 }
41 $2 ~ /inc posix/ && $4 != $8 {
42         # different header
43
44         n = split($8, a, " ")
45         for (i = 1; i <= n; i++)
46                 if ($4 == a[i])
47                         break
48         if (i > n)
49                 print "header\t" $1 "\t" $4 "\t" $8
50 }
51 $2 ~ /inc posix/ && $7 != $10 && $5 == "p" {
52         # different prototype
53
54         # todo: move to type.sh
55         gsub(/restrict const/, "const", $10)
56         gsub(/restrict/, "", $10)
57         gsub(/\[[0-9]+\]/, "[]", $10)
58         gsub(/unsigned int/, "unsigned", $7)
59         gsub(/long int/, "long", $7)
60
61         if ($7 != $10)
62                 print "proto\t" $1 "\t" $4 "\t" $7 "\t" $10 "\t" $6 "\t" $9
63 }
64 ' data/musl.all >data/musl.problems
65