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