Fix Dead Store (Dead assignement/Dead increment) warning found by Clang
[metze/wireshark/wip.git] / tools / make-dissector-reg
1 #! /bin/sh
2
3 #
4 # The first argument is the directory in which the source files live.
5 #
6 srcdir="$1"
7 shift
8
9 #
10 # The second argument is either "plugin" or "dissectors"; if it's
11 # "plugin", we build a plugin.c for a plugin, and if it's
12 # "dissectors", we build a register.c for libwireshark.
13 #
14 registertype="$1"
15 shift
16 if [ "$registertype" = plugin ]
17 then
18         outfile="plugin.c"
19 elif [ "$registertype" = dissectors ]
20 then
21         outfile="register.c"
22 else
23         echo "Unknown output type '$registertype'" 1>&2
24         exit 1
25 fi
26
27 #
28 # All subsequent arguments are the files to scan.
29 #
30 rm -f ${outfile}-tmp
31 echo '/* Do not modify this file.  */' >${outfile}-tmp
32 echo '/* It is created automatically by the Makefile. */'>>${outfile}-tmp
33 if [ "$registertype" = plugin ]
34 then
35         cat <<"EOF" >>${outfile}-tmp
36 #include "config.h"
37
38 #include <gmodule.h>
39
40 #include "moduleinfo.h"
41 /* plugins are DLLs */
42 #define WS_BUILD_DLL
43 #include "ws_symbol_export.h"
44
45 #ifndef ENABLE_STATIC
46 WS_DLL_PUBLIC_DEF const gchar version[] = VERSION;
47
48 /* Start the functions we need for the plugin stuff */
49
50 WS_DLL_PUBLIC_DEF void
51 plugin_register (void)
52 {
53 EOF
54 #
55 # Build code to call all the protocol registration routines.
56 #
57 for f in "$@"
58 do
59         if [ -f $f ]
60         then
61                 srcfile=$f
62         else
63                 srcfile=$srcdir/$f
64         fi
65         grep '^proto_register_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';'
66 done | sed -e 's/^.*://' -e 's/^\([a-z_0-9A-Z]*\).*/  {extern void \1 (void); \1 ();}/' >>${outfile}-tmp
67 for f in "$@"
68 do
69         if [ -f $f ]
70         then
71                 srcfile=$f
72         else
73                 srcfile=$srcdir/$f
74         fi
75         grep '^void proto_register_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';'
76 done | sed -e 's/^.*://' -e 's/^void \([a-z_0-9A-Z]*\).*/  {extern void \1 (void); \1 ();}/' >>${outfile}-tmp
77 else
78         cat <<"EOF" >>${outfile}-tmp
79 #include "register.h"
80 void
81 register_all_protocols(register_cb cb, gpointer client_data)
82 {
83 EOF
84 #
85 # Build code to call all the protocol registration routines.
86 #
87 for f in "$@"
88 do
89         if [ -f $f ]
90         then
91                 srcfile=$f
92         else
93                 srcfile=$srcdir/$f
94         fi
95         grep '^proto_register_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';'
96 done | sed -e 's/^.*://' -e 's/^\([a-z_0-9A-Z]*\).*/  {extern void \1 (void); if(cb) (*cb)(RA_REGISTER, \"\1\", client_data); \1 ();}/' >>${outfile}-tmp
97 for f in "$@"
98 do
99         if [ -f $f ]
100         then
101                 srcfile=$f
102         else
103                 srcfile=$srcdir/$f
104         fi
105         grep '^void proto_register_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';'
106 done | sed -e 's/^.*://' -e 's/^void \([a-z_0-9A-Z]*\).*/  {extern void \1 (void); if(cb) (*cb)(RA_REGISTER, \"\1\", client_data); \1 ();}/' >>${outfile}-tmp
107
108 fi
109 echo '}' >>${outfile}-tmp
110
111
112 #
113 # Build code to call all the protocol handoff registration routines.
114 #
115 if [ "$registertype" = plugin ]
116 then
117         cat <<"EOF" >>${outfile}-tmp
118 WS_DLL_PUBLIC_DEF void
119 plugin_reg_handoff(void)
120 {
121 EOF
122 for f in "$@"
123 do
124         if [ -f $f ]
125         then
126                 srcfile=$f
127         else
128                 srcfile=$srcdir/$f
129         fi
130         grep '^proto_reg_handoff_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';'
131 done | sed -e 's/^.*://' -e 's/^\([a-z_0-9A-Z]*\).*/  {extern void \1 (void); \1 ();}/' >>${outfile}-tmp
132 for f in "$@"
133 do
134         if [ -f $f ]
135         then
136                 srcfile=$f
137         else
138                 srcfile=$srcdir/$f
139         fi
140         grep '^void proto_reg_handoff_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';'
141 done | sed -e 's/^.*://' -e 's/^void \([a-z_0-9A-Z]*\).*/  {extern void \1 (void); \1 ();}/' >>${outfile}-tmp
142 else
143         cat <<"EOF" >>${outfile}-tmp
144 void
145 register_all_protocol_handoffs(register_cb cb, gpointer client_data)
146 {
147 EOF
148 for f in "$@"
149 do
150         if [ -f $f ]
151         then
152                 srcfile=$f
153         else
154                 srcfile=$srcdir/$f
155         fi
156         grep '^proto_reg_handoff_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';'
157 done | sed -e 's/^.*://' -e 's/^\([a-z_0-9A-Z]*\).*/  {extern void \1 (void); if(cb) (*cb)(RA_HANDOFF, \"\1\", client_data); \1 ();}/' >>${outfile}-tmp
158 for f in "$@"
159 do
160         if [ -f $f ]
161         then
162                 srcfile=$f
163         else
164                 srcfile=$srcdir/$f
165         fi
166         grep '^void proto_reg_handoff_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';'
167 done | sed -e 's/^.*://' -e 's/^void \([a-z_0-9A-Z]*\).*/  {extern void \1 (void); if(cb) (*cb)(RA_HANDOFF, \"\1\", client_data); \1 ();}/' >>${outfile}-tmp
168 fi
169 echo '}' >>${outfile}-tmp
170 if [ "$registertype" = plugin ]
171 then
172         echo '#endif' >>${outfile}-tmp
173 else 
174         cat <<"EOF" >>${outfile}-tmp
175 gulong register_count(void)
176 {
177 EOF
178         proto_regs=`grep RA_REGISTER ${outfile}-tmp | wc -l`
179         handoff_regs=`grep RA_HANDOFF ${outfile}-tmp | wc -l`
180         echo "  return $proto_regs + $handoff_regs;" >>${outfile}-tmp
181         echo '}' >>${outfile}-tmp
182 fi
183
184 # Only overwrite outfile if it differs from newly generated file
185 diff ${outfile}-tmp ${outfile} >/dev/null || mv ${outfile}-tmp ${outfile}
186