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