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