+#!/bin/sh
+
+export LC_ALL=C
+
+./makeproto.sh
+{
+ awk -F'\t' '{print $1}' data/musl.tags data/posix2008.ok # data/c99
+ awk -F'\t' '{print $2}' data/musl.syms
+} |sort |uniq |awk -F'\t' '
+BEGIN {
+ posix = "data/posix2008.ok.proto"
+ syms = "data/musl.syms"
+ tags = "data/musl.tags.proto"
+
+ while (getline < syms == 1)
+ sym[$2] = $1
+
+ # todo: same tag may be defined in several headers
+ while (getline < tags == 1)
+ tag[$1] = $2 "\t" $3 "\t" $5 "\t" $6
+
+ while (getline < posix == 1)
+ pos[$1] = $2 "\t" $5 "\t" $6
+}
+{
+ s = ""
+ if (sym[$1])
+ s = s " obj"
+ if (tag[$1])
+ s = s " inc"
+ if (pos[$1])
+ s = s " posix"
+
+ print $1 "\t" substr(s,2) "\t" sym[$1] "\t" tag[$1] "\t" pos[$1]
+}' >data/musl.all
+
+awk -F'\t' '
+$2 == "obj" || $2 == "obj posix" {
+ # not declared
+ if ($1 !~ /^_/)
+ print "nodecl\t" $1 "\t" $3
+}
+$2 ~ /inc posix/ && $4 != $8 {
+ # different header
+
+ n = split($8, a, " ")
+ for (i = 1; i <= n; i++)
+ if ($4 == a[i])
+ break
+ if (i > n)
+ print "header\t" $1 "\t" $4 "\t" $8
+}
+$2 ~ /inc posix/ && $7 != $10 && $5 == "p" {
+ # different prototype
+ print "proto\t" $1 "\t" $4 "\t" $7 "\t" $10 "\t" $6 "\t" $9
+}
+' data/musl.all >data/musl.problems
+