Ethereal-dev: [Ethereal-dev] Re: fixing the build

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: "Stefan (metze) Metzmacher" <metze@xxxxxxxxx>
Date: Wed, 19 Apr 2006 10:12:17 +0200
>Stefan (metze) Metzmacher wrote:
>>    the problem is that register_all_protocols() exists twice,
>
>
>...but one is in libethereal and one is in the docsis plugin.
>
>
>>    but the the internal one is called twice,
>
> Why is that? That's not happening on OS X - does the run-time linker
> on other platforms find the libethereal register_all_protocols()
> rather than the one in the plugin when it's loading the plugin?

On SuSE Linux 9.3 it doesn't work...

> If so, is there any way to fix that? I'd really prefer not to have
> "plugin.c" include the name of the plugin - I'd like to have it be
> something that's the same for all plugins. (I suppose if we really
> *need* to have the register routines have different names in the
> different plugins, we could do that with token pasting.)

this patch also works for me

please CC: me in the reply, thanks

metze
=== epan/dissectors/Makefile.am
==================================================================
--- epan/dissectors/Makefile.am	(revision 2204)
+++ epan/dissectors/Makefile.am	(local)
@@ -79,10 +79,11 @@
     $(top_srcdir)/tools/make-reg-dotc.py
 	@if test -n $(PYTHON); then \
 		echo Making register.c with python ; \
-		$(PYTHON) $(top_srcdir)/tools/make-reg-dotc.py $(srcdir) $(DISSECTOR_SRC) ; \
+		$(PYTHON) $(top_srcdir)/tools/make-reg-dotc.py $(srcdir) "" \
+			$(plugin_src) $(DISSECTOR_SRC) ; \
 	else \
 		echo Making register.c with shell script ; \
-		$(top_srcdir)/tools/make-reg-dotc register.c $(srcdir) \
+		$(SHELL) $(top_srcdir)/tools/make-reg-dotc register.c $(srcdir) "" \
 			$(plugin_src) $(DISSECTOR_SRC) ; \
 	fi
 
=== plugins/docsis/Makefile.am
==================================================================
--- plugins/docsis/Makefile.am	(revision 2204)
+++ plugins/docsis/Makefile.am	(local)
@@ -71,11 +71,10 @@
     $(top_srcdir)/tools/make-reg-dotc.py
 	@if test -n $(PYTHON); then \
 		echo Making register.c with python ; \
-		$(PYTHON) $(top_srcdir)/tools/make-reg-dotc.py $(srcdir) $(DISSECTOR_SRC) ; \
+		$(PYTHON) $(top_srcdir)/tools/make-reg-dotc.py $(srcdir) "static" $(DISSECTOR_SRC) ; \
 	else \
 		echo Making register.c with shell script ; \
-		$(top_srcdir)/tools/make-reg-dotc register.c $(srcdir) \
-			$(plugin_src) $(DISSECTOR_SRC) ; \
+		$(SHELL) $(top_srcdir)/tools/make-reg-dotc register.c $(srcdir) "static" $(DISSECTOR_SRC) ; \
 	fi
 
 #
=== plugins/docsis/plugin.c
==================================================================
--- plugins/docsis/plugin.c	(revision 2204)
+++ plugins/docsis/plugin.c	(local)
@@ -35,8 +35,7 @@
 
 /* Start the functions we need for the plugin stuff */
 
-extern void register_all_protocols(void);
-extern void register_all_protocol_handoffs(void);
+#include "register.c"
 
 G_MODULE_EXPORT void
 plugin_register (void)
=== tools/make-reg-dotc
==================================================================
--- tools/make-reg-dotc	(revision 2204)
+++ tools/make-reg-dotc	(local)
@@ -18,17 +18,22 @@
 shift
 
 #
+# The scope of the generated functions.
+#
+scope="$1"
+shift
+
+#
 # 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
-echo '#include "register.h"' >>${outfile}-tmp
 
 #
 # Build code to call all the protocol registration routines.
 #
-echo 'void register_all_protocols(void) {' >>${outfile}-tmp
+echo "${scope} void register_all_protocols(void) {" >>${outfile}-tmp
 for f in "$@"
 do
 	if [ -f $f ]
@@ -54,7 +59,7 @@
 #
 # Build code to call all the protocol handoff registration routines.
 #
-echo 'void register_all_protocol_handoffs(void) {' >>${outfile}-tmp
+echo "${scope} void register_all_protocol_handoffs(void) {" >>${outfile}-tmp
 for f in "$@"
 do
 	if [ -f $f ]
=== tools/make-reg-dotc.py
==================================================================
--- tools/make-reg-dotc.py	(revision 2204)
+++ tools/make-reg-dotc.py	(local)
@@ -24,15 +24,19 @@
 srcdir = sys.argv[1]
 
 #
+# The second argument is the scope of the generated functions.
+#
+scope = sys.argv[2]
+
+#
 # All subsequent arguments are the files to scan.
 #
-files = sys.argv[2:]
+files = sys.argv[3:]
 
 reg_code = open(tmp_filename, "w")
 
 reg_code.write("/* Do not modify this file.  */\n")
 reg_code.write("/* It is created automatically by the Makefile.  */\n")
-reg_code.write('#include "register.h"\n')
 
 # Create the proper list of filenames
 filenames = []
@@ -84,7 +88,8 @@
 handoff_reg.sort()
 
 # Make register_all_protocols()
-reg_code.write("void register_all_protocols(void) {\n")
+line = "%s void register_all_protocols(void) {\n" % (scope)
+reg_code.write(line)
 
 for symbol in proto_reg:
 	line = "  {extern void %s (void); %s ();}\n" % (symbol, symbol)
@@ -94,7 +99,8 @@
 
 
 # Make register_all_protocol_handoffs()
-reg_code.write("void register_all_protocol_handoffs(void) {\n")
+line = "%s void register_all_protocol_handoffs(void) {\n" % (scope)
+reg_code.write(line)
 
 for symbol in handoff_reg:
 	line = "  {extern void %s (void); %s ();}\n" % (symbol, symbol)

Attachment: signature.asc
Description: OpenPGP digital signature