#! /bin/sh # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # Copied from Wireshark(http://www.wireshark.org/) # # The first argument is the directory in which the source files live. # srcdir="$1" shift # # The second argument is either "plugin" or "dissectors"; if it's # "plugin", we build a plugin.c for a plugin, and if it's # "dissectors", we build a register.c for libwireshark. # registertype="$1" shift if [ "$registertype" = plugin ] then outfile="plugin.c" elif [ "$registertype" = dissectors ] then outfile="register.c" else echo "Unknown output type '$registertype'" 1>&2 exit 1 fi # # All subsequent arguments are the files to scan. # rm -f ${outfile}-tmp echo '/* Do not modify this file. */' >${outfile}-tmp echo '/* It is created automatically by the Makefile. */'>>${outfile}-tmp if [ "$registertype" = plugin ] then cat <<"EOF" >>${outfile}-tmp #include "config.h" #include /* plugins are DLLs */ #define WS_BUILD_DLL #include "ws_symbol_export.h" /* In 1.12 wireshark WS_DLL_PUBLIC_NOEXTERN was substitued with * WS_DLL_PUBLIC_DEF. See wireshark's commit * 5d87a8c46171f572568db5a47c093423482e342f for more info. */ #ifndef WS_DLL_PUBLIC_NOEXTERN # define WS_DLL_PUBLIC_NOEXTERN WS_DLL_PUBLIC_DEF #endif #ifndef ENABLE_STATIC WS_DLL_PUBLIC_NOEXTERN const gchar version[] = VERSION; /* Start the functions we need for the plugin stuff */ WS_DLL_PUBLIC_NOEXTERN void plugin_register (void) { EOF # # Build code to call all the protocol registration routines. # for f in "$@" do if [ -f $f ] then srcfile=$f else srcfile=$srcdir/$f fi grep '^proto_register_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';' done | sed -e 's/^.*://' -e 's/^\([a-z_0-9A-Z]*\).*/ {extern void \1 (void); \1 ();}/' >>${outfile}-tmp for f in "$@" do if [ -f $f ] then srcfile=$f else srcfile=$srcdir/$f fi grep '^void proto_register_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';' done | sed -e 's/^.*://' -e 's/^void \([a-z_0-9A-Z]*\).*/ {extern void \1 (void); \1 ();}/' >>${outfile}-tmp else cat <<"EOF" >>${outfile}-tmp #include "register.h" void register_all_protocols(register_cb cb, gpointer client_data) { EOF # # Build code to call all the protocol registration routines. # for f in "$@" do if [ -f $f ] then srcfile=$f else srcfile=$srcdir/$f fi grep '^proto_register_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';' 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 for f in "$@" do if [ -f $f ] then srcfile=$f else srcfile=$srcdir/$f fi grep '^void proto_register_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';' 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 fi echo '}' >>${outfile}-tmp # # Build code to call all the protocol handoff registration routines. # if [ "$registertype" = plugin ] then cat <<"EOF" >>${outfile}-tmp WS_DLL_PUBLIC_NOEXTERN void plugin_reg_handoff(void) { EOF for f in "$@" do if [ -f $f ] then srcfile=$f else srcfile=$srcdir/$f fi grep '^proto_reg_handoff_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';' done | sed -e 's/^.*://' -e 's/^\([a-z_0-9A-Z]*\).*/ {extern void \1 (void); \1 ();}/' >>${outfile}-tmp for f in "$@" do if [ -f $f ] then srcfile=$f else srcfile=$srcdir/$f fi grep '^void proto_reg_handoff_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';' done | sed -e 's/^.*://' -e 's/^void \([a-z_0-9A-Z]*\).*/ {extern void \1 (void); \1 ();}/' >>${outfile}-tmp else cat <<"EOF" >>${outfile}-tmp void register_all_protocol_handoffs(register_cb cb, gpointer client_data) { EOF for f in "$@" do if [ -f $f ] then srcfile=$f else srcfile=$srcdir/$f fi grep '^proto_reg_handoff_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';' 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 for f in "$@" do if [ -f $f ] then srcfile=$f else srcfile=$srcdir/$f fi grep '^void proto_reg_handoff_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';' 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 fi echo '}' >>${outfile}-tmp if [ "$registertype" = plugin ] then echo '#endif' >>${outfile}-tmp else cat <<"EOF" >>${outfile}-tmp gulong register_count(void) { EOF proto_regs=`grep RA_REGISTER ${outfile}-tmp | wc -l` handoff_regs=`grep RA_HANDOFF ${outfile}-tmp | wc -l` echo " return $proto_regs + $handoff_regs;" >>${outfile}-tmp echo '}' >>${outfile}-tmp fi # Only overwrite outfile if it differs from newly generated file mv ${outfile}-tmp ${outfile}