2014-01-15 17:06:58 +00:00
|
|
|
#! /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 <http://www.gnu.org/licenses/>.
|
|
|
|
#
|
|
|
|
# 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 <gmodule.h>
|
|
|
|
|
|
|
|
/* plugins are DLLs */
|
|
|
|
#define WS_BUILD_DLL
|
|
|
|
#include "ws_symbol_export.h"
|
|
|
|
|
2014-07-04 05:38:48 +00:00
|
|
|
/* 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
|
|
|
|
|
2014-01-15 17:06:58 +00:00
|
|
|
#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}
|