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