From 77fc72c061a0bf88335052377ee89df45dfd846b Mon Sep 17 00:00:00 2001 From: nsz Date: Wed, 14 Sep 2011 14:22:36 +0200 Subject: [PATCH] include proto in tags, update problem finding tool --- makeall.sh => findproblems.sh | 6 ++++-- makeproto.sh | 19 +++---------------- maketags.sh | 19 +++++++++++++++++-- 3 files changed, 24 insertions(+), 20 deletions(-) rename makeall.sh => findproblems.sh (93%) diff --git a/makeall.sh b/findproblems.sh similarity index 93% rename from makeall.sh rename to findproblems.sh index 012f2e3..e5f73a5 100755 --- a/makeall.sh +++ b/findproblems.sh @@ -2,8 +2,7 @@ export LC_ALL=C -[ -f data/musl.tags.proto -a -f data/posix2008.ok.proto ] || ./makeproto.sh - +./makeproto.sh { awk -F'\t' '{print $1}' data/musl.tags data/posix2008.ok # data/c99 awk -F'\t' '{print $2}' data/musl.syms @@ -15,8 +14,11 @@ BEGIN { 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 } 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 -- 2.20.1