From: nsz Date: Wed, 14 Sep 2011 12:22:36 +0000 (+0200) Subject: include proto in tags, update problem finding tool X-Git-Url: http://nsz.repo.hu/git/?p=musl-tables;a=commitdiff_plain;h=77fc72c061a0bf88335052377ee89df45dfd846b include proto in tags, update problem finding tool --- diff --git a/findproblems.sh b/findproblems.sh new file mode 100755 index 0000000..e5f73a5 --- /dev/null +++ b/findproblems.sh @@ -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 index 012f2e3..0000000 --- a/makeall.sh +++ /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 - diff --git a/makeproto.sh b/makeproto.sh index 326e6dd..41aadc5 100755 --- a/makeproto.sh +++ b/makeproto.sh @@ -3,27 +3,14 @@ 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 } -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 -rm -f /tmp/tags.proto /tmp/tags.type /tmp/posix2008.type +rm -f /tmp/tags.type /tmp/posix2008.type diff --git a/maketags.sh b/maketags.sh index c0fd6e7..d12745d 100755 --- a/maketags.sh +++ b/maketags.sh @@ -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' . ) -awk ' +awk -v inc=$MUSL/include/ ' 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 - 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