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