]> git.llucax.com Git - software/mutt-debian.git/blob - hcachever.sh.in
adding tags to gitignore, so ctags can be used
[software/mutt-debian.git] / hcachever.sh.in
1 #!/bin/sh
2
3 BASEVERSION=2
4
5 cleanstruct () {
6   echo "$1" | sed -e 's/} *//' -e 's/;$//'
7 }
8
9 cleanbody () {
10   echo "$1" | sed -e 's/{ *//'
11 }
12
13 getstruct () {
14   STRUCT=""
15   BODY=''
16   inbody=0
17   case "$1" in
18     *'{') inbody=1 ;;
19     *';') return ;;
20   esac
21
22   while read line
23   do
24     if test $inbody -eq 0
25     then
26       case "$line" in
27         '{'*) inbody=1 ;;
28         *';') return ;;
29       esac
30     fi
31
32     case "$line" in
33       '} '*)
34         STRUCT=`cleanstruct "$line"`
35         break
36       ;;
37       '}')
38         read line
39         STRUCT=`cleanstruct "$line"`
40         break
41       ;;
42       '#'*) continue ;;
43       *)
44         if test $inbody -ne 0
45         then
46           BODY="$BODY $line"
47         fi
48       ;;
49     esac
50   done
51
52   case $STRUCT in
53     ADDRESS|LIST|BUFFER|PARAMETER|BODY|ENVELOPE|HEADER)
54       BODY=`cleanbody "$BODY"`
55       echo "$STRUCT: $BODY"
56     ;;
57   esac
58   return
59 }
60
61 DEST="$1"
62 TMPD="$DEST.tmp"
63
64 TEXT="$BASEVERSION"
65
66 echo "/* base version: $BASEVERSION" > $TMPD
67 while read line
68 do
69   case "$line" in
70     'typedef struct'*)
71        STRUCT=`getstruct "$line"`
72        if test -n "$STRUCT"
73        then
74          NAME=`echo $STRUCT | cut -d: -f1`
75          BODY=`echo $STRUCT | cut -d' ' -f2-`
76          echo " * $NAME:" $BODY >> $TMPD
77          TEXT="$TEXT $NAME {$BODY}"
78        fi
79     ;;
80   esac
81 done
82 echo " */" >> $TMPD
83
84 MD5TEXT=`echo "$TEXT" | ./mutt_md5`
85 echo "#define HCACHEVER 0x"`echo $MD5TEXT | cut -c-8` >> $TMPD
86
87 # TODO: validate we have all structs
88
89 mv $TMPD $DEST