include proto in tags, update problem finding tool
authornsz <nsz@port70.net>
Wed, 14 Sep 2011 12:22:36 +0000 (14:22 +0200)
committernsz <nsz@port70.net>
Wed, 14 Sep 2011 12:22:36 +0000 (14:22 +0200)
findproblems.sh [new file with mode: 0755]
makeall.sh [deleted file]
makeproto.sh
maketags.sh

diff --git a/findproblems.sh b/findproblems.sh
new file mode 100755 (executable)
index 0000000..e5f73a5
--- /dev/null
@@ -0,0 +1,58 @@
+#!/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
+
diff --git a/makeall.sh b/makeall.sh
deleted file mode 100755 (executable)
index 012f2e3..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/bin/sh
-
-export LC_ALL=C
-
-[ -f data/musl.tags.proto -a -f data/posix2008.ok.proto ] || ./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
-       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
-
index 326e6dd..41aadc5 100755 (executable)
@@ -3,27 +3,14 @@
 export LC_ALL=C
 MUSL=${MUSL:-../musl}
 
 export LC_ALL=C
 MUSL=${MUSL:-../musl}
 
-awk -F'\t' -v inc=$MUSL/include/ '
-$3 == "p" && $2 !~ /^bits\// {
-       cmd = "awk '\''NR == " $4 "{s=$0;if(s!~/;/){getline; s=s " " $0} print s; exit}'\'' " inc $2
-       cmd | getline proto
-       close(cmd)
-       gsub(/\t/, " ", proto)
-}
-{
-       print $0 "\t" proto
-       proto = ""
-}
-' data/musl.tags >/tmp/tags.proto
-
-awk -F'\t' '{print $5}' /tmp/tags.proto |./type.sh >/tmp/tags.type
+awk -F'\t' '{print $5}' data/musl.tags |./type.sh >/tmp/tags.type
 awk -F'\t' '{print $5}' data/posix2008.ok |./type.sh >/tmp/posix2008.type
 
 join() {
        awk -v f=$2 '{getline s < f; print $0 "\t" s}' $1
 }
 
 awk -F'\t' '{print $5}' data/posix2008.ok |./type.sh >/tmp/posix2008.type
 
 join() {
        awk -v f=$2 '{getline s < f; print $0 "\t" s}' $1
 }
 
-join /tmp/tags.proto /tmp/tags.type >data/musl.tags.proto
+join data/musl.tags /tmp/tags.type >data/musl.tags.proto
 join data/posix2008.ok /tmp/posix2008.type >data/posix2008.ok.proto
 
 join data/posix2008.ok /tmp/posix2008.type >data/posix2008.ok.proto
 
-rm -f /tmp/tags.proto /tmp/tags.type /tmp/posix2008.type
+rm -f /tmp/tags.type /tmp/posix2008.type
index c0fd6e7..d12745d 100755 (executable)
@@ -8,16 +8,31 @@ MUSL=${MUSL:-../musl}
        ctags -f /tmp/musl.tags -R -n -u --language-force=c --c-kinds=pxdstuv --fields=k --exclude='*.sh' .
 )
 
        ctags -f /tmp/musl.tags -R -n -u --language-force=c --c-kinds=pxdstuv --fields=k --exclude='*.sh' .
 )
 
-awk '
+awk -v inc=$MUSL/include/ '
 BEGIN {
        FS="\t"
 }
 BEGIN {
        FS="\t"
 }
+function proto(t,h,n) {
+       cmd = "awk '\''NR==" n
+       if (t == "p")
+               cmd = cmd "{s=$0; if(s!~/;/){getline; s=s \" \" $0} print s; exit}"
+       else if (t == "d")
+               cmd = cmd "{s=$0; while(gsub(/\\\\$/,\"\",s)){getline; s=s $0} print s; exit}"
+       else
+               return ""
+       cmd = cmd "'\'' " inc h
+       cmd | getline s
+       close(cmd)
+       gsub(/\t/, " ", s)
+       gsub(/ +/, " ", s)
+       return s
+}
 /^[^!]/ {
        gsub(/[^0-9]*/,"",$3)
        if ($4 == "s")
                $1 = "struct " $1
        if ($4 == "u")
                $1 = "union " $1
 /^[^!]/ {
        gsub(/[^0-9]*/,"",$3)
        if ($4 == "s")
                $1 = "struct " $1
        if ($4 == "u")
                $1 = "union " $1
-       print $1 "\t" $2 "\t" $4 "\t" $3
+       print $1 "\t" $2 "\t" $4 "\t" $3 "\t" proto($4,$2,$3)
 }' /tmp/musl.tags |sort >data/musl.tags
 rm -f /tmp/musl.tags
 }' /tmp/musl.tags |sort >data/musl.tags
 rm -f /tmp/musl.tags