update tables
[musl-tables] / maketags.sh
1 #!/bin/sh
2
3 export LC_ALL=C
4 MUSL=${MUSL:-../musl}
5
6 (
7         cd $MUSL/include
8         ctags -f /tmp/musl.tags -R -n -u --language-force=c --c-kinds=pxdstuv --fields=k --exclude='*.sh' .
9 )
10
11 awk -v inc=$MUSL/include/ '
12 BEGIN {
13         FS="\t"
14 }
15 function proto(t,h,n) {
16         cmd = "awk '\''NR==" n
17         if (t == "p")
18                 cmd = cmd "{s=$0; if(s!~/;/){getline; s=s \" \" $0} print s; exit}"
19         else if (t == "d")
20                 cmd = cmd "{s=$0; while(gsub(/\\\\$/,\"\",s)){getline; s=s $0} print s; exit}"
21         else
22                 return ""
23         cmd = cmd "'\'' " inc h
24         cmd | getline s
25         close(cmd)
26         gsub(/\t/, " ", s)
27         gsub(/ +/, " ", s)
28         return s
29 }
30 /^[^!]/ {
31         gsub(/[^0-9]*/,"",$3)
32         if ($4 == "s")
33                 $1 = "struct " $1
34         if ($4 == "u")
35                 $1 = "union " $1
36         print $1 "\t" $2 "\t" $4 "\t" $3 "\t" proto($4,$2,$3)
37 }' /tmp/musl.tags |sort >data/musl.tags
38 rm -f /tmp/musl.tags