Re: ./configure --disable-shared

Eric Blake <[email protected]>
Newsgroups gmane.comp.gnu.m4.patches
Message-ID <[email protected]>
Eric Blake <ebb9 <at> byu.net> writes:

> 
> 2006-09-05  Eric Blake  <ebb9 <at> byu.net>
> 
> 	* m4/input.c (lex_debug): Remove dead code that broke compilation
> 	with --enable-debug.
> 	* m4/module.c (install_builtin_table, install_macro_table)
> 	(m4__module_init, m4__module_open, module_close)
> 	(module_remove): Fix compilation when --enable-debug.

Some of the messages in module.c looked rather useful, even when not using 
DEBUG_MODULES.  So I am installing this followup, which augments the power of 
the --debug option/debugmode macro to add the 'm' flag.

2006-09-05  Eric Blake  <[email protected]>

	* m4/m4module.h (m4_debug_message): New prototype.
	(M4_DEBUG_TRACE_MODULE): New debug bit.
	* m4/m4private.h (M4_DEBUG_MESSAGE, M4_DEBUG_MESSAGE1)
	(M4_DEBUG_MESSAGE2): Delete these macros.
	* m4/debug.c (m4_debug_message): New method.
	(m4_debug_decode): Add module tracing as flag `m'.
	* m4/input.c (m4_push_file, file_clean): Use new method.
	* m4/path.c (m4_path_search): Likewise.
	* po/Makevars (XGETTEXT_OPTIONS): Likewise.
	* m4/module.c (install_builtin_table, install_macro_table)
	(m4__module_open, module_close, module_remove): Promote several
	module debug messages outside of DEBUG_MODULES.
	(m4__module_init, module_remove) [DEBUG_MODULES]: Don't mix
	DEBUG_MODULES with normal trace output.
	* src/main.c (usage): Document new flag.
	* doc/m4.texinfo (Debug Levels): Likewise.
	* Makefile.am ($(TESTSUITE)): Add missing dependency.
	* tests/m4.in: Neutralize platform-dependent module filenames.
	* tests/options.at (--debug): Update expected output.

Index: Makefile.am
===================================================================
RCS file: /sources/m4/m4/Makefile.am,v
retrieving revision 1.42
diff -u -r1.42 Makefile.am
--- Makefile.am	27 Jul 2006 22:34:55 -0000	1.42
+++ Makefile.am	5 Sep 2006 23:01:45 -0000
@@ -389,7 +389,7 @@
 
 AUTOM4TE = autom4te
 AUTOTEST = $(AUTOM4TE) --language=autotest
-$(TESTSUITE): tests/package.m4 $(TESTSUITE_AT)
+$(TESTSUITE): tests/package.m4 $(TESTSUITE_AT) tests/m4
 	$(AUTOTEST) -I '$(srcdir)/tests' -o [email protected] [email protected]
 	mv [email protected] $@
 
Index: doc/m4.texinfo
===================================================================
RCS file: /sources/m4/m4/doc/m4.texinfo,v
retrieving revision 1.41
diff -u -r1.41 m4.texinfo
--- doc/m4.texinfo	5 Sep 2006 17:28:45 -0000	1.41
+++ doc/m4.texinfo	5 Sep 2006 23:01:46 -0000
@@ -2653,6 +2653,9 @@
 @item l
 Show the current input line number in each trace output line.
 
+@item m
+Print a message each time a module is manipulated (@pxref{Modules}).
+
 @item p
 Print a message when a named file is found through the path search
 mechanism (@pxref{Search Path}), giving the actual file name used.
Index: m4/debug.c
===================================================================
RCS file: /sources/m4/m4/m4/debug.c,v
retrieving revision 1.23
diff -u -r1.23 debug.c
--- m4/debug.c	23 Aug 2006 11:39:26 -0000	1.23
+++ m4/debug.c	5 Sep 2006 23:01:46 -0000
@@ -19,6 +19,7 @@
 
 #include <stdio.h>
 #include <sys/stat.h>
+#include <stdarg.h>
 
 #include "m4private.h"
 
@@ -84,6 +85,10 @@
 	      level |= M4_DEBUG_TRACE_CALLID;
 	      break;
 
+	    case 'm':
+	      level |= M4_DEBUG_TRACE_MODULE;
+	      break;
+
 	    case 'V':
 	      level |= M4_DEBUG_TRACE_VERBOSE;
 	      break;
@@ -204,3 +209,26 @@
     }
   putc (' ', debug_file);
 }
+
+/* If the current debug mode includes MODE, and there is a current
+   debug file, then output a debug message described by FORMAT.  A
+   message header is supplied, as well as a trailing newline.  */
+void
+m4_debug_message (m4 *context, int mode, const char *format, ...)
+{
+  /* Check that mode has exactly one bit set.  */
+  assert ((mode & (mode - 1)) == 0);
+  assert (format);
+
+  if (m4_get_debug_file (context) != NULL
+      && m4_is_debug_bit (context, mode))
+    {
+      va_list args;
+
+      m4_debug_message_prefix (context);
+      va_start (args, format);
+      vfprintf (m4_get_debug_file (context), format, args);
+      va_end (args);
+      putc ('\n', m4_get_debug_file (context));
+    }
+}
Index: m4/input.c
===================================================================
RCS file: /sources/m4/m4/m4/input.c,v
retrieving revision 1.45
diff -u -r1.45 input.c
--- m4/input.c	5 Sep 2006 16:58:02 -0000	1.45
+++ m4/input.c	5 Sep 2006 23:01:46 -0000
@@ -222,14 +222,12 @@
 static void
 file_clean (m4 *context)
 {
-  if (m4_is_debug_bit (context, M4_DEBUG_TRACE_INPUT))
-    {
-      if (isp->u.u_f.lineno)
-	M4_DEBUG_MESSAGE2 (context, _("input reverted to %s, line %d"),
-			   isp->u.u_f.name, isp->u.u_f.lineno);
-      else
-	M4_DEBUG_MESSAGE (context, _("input exhausted"));
-    }
+  if (isp->u.u_f.lineno)
+    m4_debug_message (context, M4_DEBUG_TRACE_INPUT,
+		      _("input reverted to %s, line %d"),
+		      isp->u.u_f.name, isp->u.u_f.lineno);
+  else
+    m4_debug_message (context, M4_DEBUG_TRACE_INPUT, _("input exhausted"));
 
   fclose (isp->u.u_f.file);
   m4_set_current_file (context, isp->u.u_f.name);
@@ -255,8 +253,8 @@
       next = NULL;
     }
 
-  if (BIT_TEST (m4_get_debug_level_opt (context), M4_DEBUG_TRACE_INPUT))
-    M4_DEBUG_MESSAGE1 (context, _("input read from %s"), title);
+  m4_debug_message (context, M4_DEBUG_TRACE_INPUT,
+		    _("input read from %s"), title);
 
   i = (input_block *) obstack_alloc (current_input,
 				     sizeof (struct input_block));
Index: m4/m4module.h
===================================================================
RCS file: /sources/m4/m4/m4/m4module.h,v
retrieving revision 1.82
diff -u -r1.82 m4module.h
--- m4/m4module.h	5 Sep 2006 13:25:24 -0000	1.82
+++ m4/m4module.h	5 Sep 2006 23:01:46 -0000
@@ -127,8 +127,8 @@
 #define m4_context_field_table						\
 	M4FIELD(m4_symbol_table *, symbol_table,   symtab)		\
 	M4FIELD(m4_syntax_table *, syntax_table,   syntax)		\
-	M4FIELD(const char *,	   current_file,   current_file)        \
-	M4FIELD(int,		   current_line,   current_line)        \
+	M4FIELD(const char *,	   current_file,   current_file)	\
+	M4FIELD(int,		   current_line,   current_line)	\
 	M4FIELD(FILE *,		   debug_file,	   debug_file)		\
 	M4FIELD(m4_obstack,	   trace_messages, trace_messages)	\
 	M4FIELD(int,		   exit_status,	   exit_status)		\
@@ -286,9 +286,11 @@
   M4_DEBUG_TRACE_INPUT		= (1 << 8),
   /* x: add call id to trace output */
   M4_DEBUG_TRACE_CALLID		= (1 << 9),
+  /* m: trace module actions */
+  M4_DEBUG_TRACE_MODULE		= (1 << 10),
 
   /* V: very verbose --  print everything */
-  M4_DEBUG_TRACE_VERBOSE	= ((1 << 10) - 1)
+  M4_DEBUG_TRACE_VERBOSE	= ((1 << 11) - 1)
 };
 
 /* default flags -- equiv: aeq */
@@ -300,6 +302,8 @@
 extern int	m4_debug_decode		(m4 *, int, const char *);
 extern bool	m4_debug_set_output	(m4 *, const char *);
 extern void	m4_debug_message_prefix (m4 *);
+extern void	m4_debug_message	(m4 *, int, const char *, ...)
+  M4_GNUC_PRINTF (3, 4);
 
 
 
@@ -405,9 +409,9 @@
 
 /* --- PATH MANAGEMENT --- */
 
-extern void	m4_include_env_init      (m4 *);
+extern void	m4_include_env_init	 (m4 *);
 extern void	m4_add_include_directory (m4 *, const char *, bool);
-extern FILE *   m4_path_search           (m4 *, const char *, char **);
+extern FILE *   m4_path_search		 (m4 *, const char *, char **);
 
 
 
Index: m4/m4private.h
===================================================================
RCS file: /sources/m4/m4/m4/m4private.h,v
retrieving revision 1.58
diff -u -r1.58 m4private.h
--- m4/m4private.h	5 Sep 2006 13:25:24 -0000	1.58
+++ m4/m4private.h	5 Sep 2006 23:01:46 -0000
@@ -186,9 +186,9 @@
 #define VALUE_MAX_ARGS(T)	((T)->max_args)
 #define VALUE_PENDING(T)	((T)->pending_expansions)
 
-#define SYMBOL_NEXT(S)		(VALUE_NEXT          ((S)->value))
-#define SYMBOL_HANDLE(S)	(VALUE_HANDLE        ((S)->value))
-#define SYMBOL_FLAGS(S)		(VALUE_FLAGS         ((S)->value))
+#define SYMBOL_NEXT(S)		(VALUE_NEXT	     ((S)->value))
+#define SYMBOL_HANDLE(S)	(VALUE_HANDLE	     ((S)->value))
+#define SYMBOL_FLAGS(S)		(VALUE_FLAGS	     ((S)->value))
 #define SYMBOL_ARG_SIGNATURE(S)	(VALUE_ARG_SIGNATURE ((S)->value))
 #define SYMBOL_MIN_ARGS(S)	(VALUE_MIN_ARGS      ((S)->value))
 #define SYMBOL_MAX_ARGS(S)	(VALUE_MAX_ARGS      ((S)->value))
@@ -344,33 +344,6 @@
 #  include <dmalloc.h>
 #endif /* WITH_DMALLOC */
 
-/* Other debug stuff.  */
-
-#define M4_DEBUG_MESSAGE(C, Fmt)			M4_STMT_START {	\
-      if (m4_get_debug_file (C) != NULL)				\
-	{								\
-	  m4_debug_message_prefix (C);					\
-	  fprintf (m4_get_debug_file (C), Fmt);				\
-	  putc ('\n', m4_get_debug_file (C));				\
-	}						} M4_STMT_END
-
-#define M4_DEBUG_MESSAGE1(C, Fmt, Arg1)			M4_STMT_START {
	\
-      if (m4_get_debug_file (C) != NULL)				\
-	{								\
-	  m4_debug_message_prefix (C);					\
-	  fprintf (m4_get_debug_file (C), Fmt, Arg1);			\
-	  putc ('\n', m4_get_debug_file (C));				\
-	}						} M4_STMT_END
-
-#define M4_DEBUG_MESSAGE2(C, Fmt, Arg1, Arg2)		M4_STMT_START {	\
-      if (m4_get_debug_file (C) != NULL)				\
-	{								\
-	  m4_debug_message_prefix (C);					\
-	  fprintf (m4_get_debug_file (C), Fmt, Arg1, Arg2);		\
-	  putc ('\n', m4_get_debug_file (C));				\
-	}						} M4_STMT_END
-
-
 
 
 /* Convenience macro to zero a variable after freeing it.  */
Index: m4/module.c
===================================================================
RCS file: /sources/m4/m4/m4/module.c,v
retrieving revision 1.44
diff -u -r1.44 module.c
--- m4/module.c	5 Sep 2006 16:58:02 -0000	1.44
+++ m4/module.c	5 Sep 2006 23:01:46 -0000
@@ -175,10 +175,9 @@
 	    free (name);
 	}
 
-#ifdef DEBUG_MODULES
-      M4_DEBUG_MESSAGE1(context, "module %s: builtins loaded",
+      m4_debug_message (context, M4_DEBUG_TRACE_MODULE,
+			_("module %s: builtins loaded"),
 			m4_get_module_name (handle));
-#endif /* DEBUG_MODULES */
     }
 
   return bp;
@@ -206,10 +205,9 @@
 	  m4_symbol_pushdef (M4SYMTAB, mp->name, value);
 	}
 
-#ifdef DEBUG_MODULES
-      M4_DEBUG_MESSAGE1(context, "module %s: macros loaded",
+      m4_debug_message (context, M4_DEBUG_TRACE_MODULE,
+			_("module %s: macros loaded"),
 			m4_get_module_name (handle));
-#endif /* DEBUG_MODULES */
     }
 
   return mp;
@@ -367,7 +365,7 @@
 	      module_dlerror ());
 
 #ifdef DEBUG_MODULES
-  M4_DEBUG_MESSAGE (context, "Module loader initialized.");
+  fprintf (stderr, "Module loader initialized.\n");
 #endif /* DEBUG_MODULES */
 }
 
@@ -386,15 +384,14 @@
 
   if (handle)
     {
-#ifdef DEBUG_MODULES
       const lt_dlinfo *info = lt_dlgetinfo (handle);
 
       /* If we have a handle, there must be handle info.  */
       assert (info);
 
-      M4_DEBUG_MESSAGE2(context, "module %s: opening at %s",
+      m4_debug_message (context, M4_DEBUG_TRACE_MODULE,
+			_("module %s: opening file `%s'"),
 			name ? name : MODULE_SELF_NAME, info->filename);
-#endif
 
       /* Find and run any initializing function in the opened module,
 	 each time the module is opened.  */
@@ -403,9 +400,8 @@
 	{
 	  (*init_func) (context, handle, obs);
 
-#ifdef DEBUG_MODULES
-	  M4_DEBUG_MESSAGE1(context, "module %s: init hook called", name);
-#endif /* DEBUG_MODULES */
+	  m4_debug_message (context, M4_DEBUG_TRACE_MODULE,
+			    _("module %s: init hook called"), name);
 	}
 
       if (!init_func
@@ -417,9 +413,8 @@
 		    _("module `%s' has no entry points"), name);
 	}
 
-#ifdef DEBUG_MODULES
-      M4_DEBUG_MESSAGE1(context, "module %s: opened", name);
-#endif /* DEBUG_MODULES */
+      m4_debug_message (context, M4_DEBUG_TRACE_MODULE,
+			_("module %s: opened"), name);
     }
   else
     {
@@ -455,7 +450,7 @@
   iface_id = NULL;
 
   if (!errors)
-    errors = lt_dlexit();
+    errors = lt_dlexit ();
 
   if (errors)
     {
@@ -497,9 +492,8 @@
     {
       (*finish_func) (context, handle, obs);
 
-#ifdef DEBUG_MODULES
-      M4_DEBUG_MESSAGE1(context, "module %s: finish hook called", name);
-#endif /* DEBUG_MODULES */
+      m4_debug_message (context, M4_DEBUG_TRACE_MODULE,
+			_("module %s: finish hook called"), name);
     }
 
   if (!lt_dlisresident (handle))
@@ -507,15 +501,13 @@
       errors = lt_dlclose (handle);
       if (!errors)
 	{
-#ifdef DEBUG_MODULES
-          M4_DEBUG_MESSAGE1(context, "module %s: closed", name);
-#endif /* DEBUG_MODULES */
+	  m4_debug_message (context, M4_DEBUG_TRACE_MODULE,
+			    _("module %s: closed"), name);
 	}
     }
-#ifdef DEBUG_MODULES
   else
-    M4_DEBUG_MESSAGE1(context, "module %s: resident module not closed", name);
-#endif /* DEBUG_MODULES */
+    m4_debug_message (context, M4_DEBUG_TRACE_MODULE,
+		      _("module %s: resident module not closed"), name);
 
   if (errors)
     {
@@ -523,7 +515,7 @@
 		name, module_dlerror ());
     }
 
-  free ((void *) name);
+  DELETE (name);
 }
 
 static int
@@ -531,19 +523,13 @@
 {
   const lt_dlinfo *info;
   int		   errors	= 0;
+  const char *	   name;
 
-#ifdef DEBUG_MODULES
-  char *	   name;
+  assert (handle);
 
   /* Be careful when closing myself.  */
-  if (handle)
-    {
-      name = m4_get_module_name (handle);
-      name = xstrdup (name ? name : MODULE_SELF_NAME);
-    }
-#endif /* DEBUG_MODULES */
-
-  assert (handle);
+  name = m4_get_module_name (handle);
+  name = xstrdup (name ? name : MODULE_SELF_NAME);
 
   info = lt_dlgetinfo (handle);
 
@@ -552,8 +538,8 @@
 #ifdef DEBUG_MODULES
   if (info->ref_count > 1)
     {
-      M4_DEBUG_MESSAGE2(context, "module %s: now has %d references.",
-			name, info->ref_count -1);
+      fprintf (stderr, "module %s: now has %d references.",
+	       name, info->ref_count -1);
     }
 #endif /* DEBUG_MODULES */
 
@@ -565,13 +551,14 @@
 	 removed, we needn't try to remove them again!  */
       m4__symtab_remove_module_references (M4SYMTAB, handle);
 
-#ifdef DEBUG_MODULES
-      M4_DEBUG_MESSAGE1(context, "module %s: symbols unloaded", name);
-#endif /* DEBUG_MODULES */
+      m4_debug_message (context, M4_DEBUG_TRACE_MODULE,
+			_("module %s: symbols unloaded"), name);
     }
 
   if (!errors)
     module_close (context, handle, obs);
 
+  DELETE (name);
+
   return errors;
 }
Index: m4/path.c
===================================================================
RCS file: /sources/m4/m4/m4/path.c,v
retrieving revision 1.19
diff -u -r1.19 path.c
--- m4/path.c	25 Aug 2006 19:23:02 -0000	1.19
+++ m4/path.c	5 Sep 2006 23:01:46 -0000
@@ -177,9 +177,9 @@
       fp = fopen (name, "r");
       if (fp != NULL)
 	{
-	  if (BIT_TEST (m4_get_debug_level_opt (context), M4_DEBUG_TRACE_PATH))
-	    M4_DEBUG_MESSAGE2 (context, _("path search for `%s' found `%s'"),
-			       file, name);
+	  m4_debug_message (context, M4_DEBUG_TRACE_PATH,
+			    _("path search for `%s' found `%s'"),
+			    file, name);
 	  if (set_cloexec_flag (fileno (fp), true) != 0)
 	    m4_error (context, 0, errno,
 		      _("cannot protect input file across forks"));
Index: po/Makevars
===================================================================
RCS file: /sources/m4/m4/po/Makevars,v
retrieving revision 1.4
diff -u -r1.4 Makevars
--- po/Makevars	22 Aug 2006 16:16:48 -0000	1.4
+++ po/Makevars	5 Sep 2006 23:01:46 -0000
@@ -36,9 +36,7 @@
   --flag=asprintf:2:c-format --flag=vasprintf:2:c-format \
   --flag=asnprintf:3:c-format --flag=vasnprintf:3:c-format \
   --flag=m4_error:4:c-format --flag=m4_error_at_line:6:c-format \
-  --flag=M4_DEBUG_MESSAGE:2:c-format \
-  --flag=M4_DEBUG_MESSAGE1:2:c-format \
-  --flag=M4_DEBUG_MESSAGE2:2:c-format
+  --flag=m4_debug_message:3:c-format
 
 # This is the copyright holder that gets inserted into the header of the
 # $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding
Index: src/main.c
===================================================================
RCS file: /sources/m4/m4/src/main.c,v
retrieving revision 1.78
diff -u -r1.78 main.c
--- src/main.c	29 Aug 2006 20:38:30 -0000	1.78
+++ src/main.c	5 Sep 2006 23:01:46 -0000
@@ -147,6 +147,9 @@
   f   say current input file name\n\
   i   show changes in input files\n\
   l   say current input line number\n\
+"), stdout);
+      fputs (_("\
+  m   show actions related to modules\n\
   p   show results of path searches\n\
   q   quote values as necessary, with a or e flag\n\
   t   trace for all macro calls, not only traceon'ed\n\
@@ -275,13 +278,13 @@
 
       case 'H':
 	/* -H was supported in 1.4.x.  FIXME - make obsolete after
-            2.0, and remove after 2.1.  For now, keep it silent.  */
+	   2.0, and remove after 2.1.  For now, keep it silent.  */
 	break;
 
       case 'N':
       case DIVERSIONS_OPTION:
 	/* -N became an obsolete no-op in 1.4.x.  FIXME - remove
-            support for -N after 2.0.  */
+	   support for -N after 2.0.  */
 	error (0, 0, _("Warning: `m4 %s' is deprecated"),
 	       optchar == 'N' ? "-N" : "--diversions");
 	break;
Index: tests/m4.in
===================================================================
RCS file: /sources/m4/m4/tests/m4.in,v
retrieving revision 1.6
diff -u -r1.6 m4.in
--- tests/m4.in	22 Aug 2006 16:16:48 -0000	1.6
+++ tests/m4.in	5 Sep 2006 23:01:46 -0000
@@ -34,7 +34,11 @@
 #   actual program, either lt-m4, or m4.
 #
 # - In both cases, beware of .exe.
-sed 's,^[^:]*[lt-]*m4[.ex]*:,m4:,' /tmp/m4-$$ >&2
+# - Also, when tracing modules, lines of the form
+#      m4debug: module m4: opening file `m4.a'
+#   must be reduced, since module names are platform dependent.
+sed -e 's,^[^:]*[lt-]*m4[.ex]*:,m4:,' \
+    -e '/^m4debug: module/s/opening file.*/opening file/' /tmp/m4-$$ >&2
 rm /tmp/m4-$$
 
 exit $status
Index: tests/options.at
===================================================================
RCS file: /sources/m4/m4/tests/options.at,v
retrieving revision 1.6
diff -u -r1.6 options.at
--- tests/options.at	29 Aug 2006 20:38:30 -0000	1.6
+++ tests/options.at	5 Sep 2006 23:01:46 -0000
@@ -95,7 +95,15 @@
 dnl Test all flags.
 AT_CHECK_M4([-dV in], [0], [[0
 3
-]], [[m4debug: path search for `in' found `in'
+]], [[m4debug: module m4: opening file
+m4debug: module m4: init hook called
+m4debug: module m4: opened
+m4debug: module m4: builtins loaded
+m4debug: module gnu: opening file
+m4debug: module gnu: opened
+m4debug: module gnu: builtins loaded
+m4debug: module gnu: macros loaded
+m4debug: path search for `in' found `in'
 m4debug: input read from in
 m4trace:in:1: -1- id 1: divnum ...
 m4trace:in:1: -1- id 1: divnum -> ???
@@ -104,6 +112,10 @@
 m4trace:in:2: -1- id 2: len(`abc') -> ???
 m4trace:in:2: -1- id 2: len(...) -> `3'
 m4debug:in:3: input exhausted
+m4debug: module gnu: symbols unloaded
+m4debug: module gnu: closed
+m4debug: module m4: symbols unloaded
+m4debug: module m4: resident module not closed
 ]])
 
 dnl Test addition and subtraction of flags.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.