--- /dev/null
+#!/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
+
+++ /dev/null
-#!/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
-
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
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