Re: a debugging trick: how to peek into m4's processing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

According to Bruno Haible on 7/25/2009 8:40 AM:
>> +$ @kbd{cat <<\EOF > foo.m4}
>> +m4_init
>> +m4_errprintn([try one: m4_dquote is ]m4_defn([m4_dquote]))
>> +m4_divert([0])dnl
>> +m4_errprintn([try two: m4_dquote is ]m4_defn([m4_dquote]))dnl
>> +m4_dquote([hi])
>> +EOF
>> +$ @kbd{autom4te --language=m4sugar foo.m4}
>> +try one: m4_dquote is [$@@]
>> +try two: m4_dquote is [$@@]
>> +$ @kbd{cat foo}
>> +[hi]
> 
> In this second example, the file 'foo' is never being created, since autom4te
> is not being passed the options "-o foo".

Oops.  Definitely needs fixing (or deletion - read on).

> 
> More importantly, your example shows m4_errprintn only in the context of
> "autom4te --language=m4sugar". But it's more powerful than that: it also
> works from inside an 'autoconf' run (with is more often what the user wants
> to debug).
> 
> Here is a proposed patch to
>   - show m4_errprintn in the context of autoconf,
>   - separate the two techniques (m4_errprintn and diversions) into separate
>     examples,

Using diversions is not a technique.  Rather, it is an additional reason
(beyond postprocessing) why outputting to anything except stderr or
separate files is problematic, because diversions can be discarded or
rearranged - ultimately, all diversions except for KILL (-1) go to
standard out.  So I'm just dropping the autom4te --language=m4sugar
example altogether.

>   - Tweak the output so that it fits in 79 columns (in 'info' output).
> 
> 
> 2009-07-25  Bruno Haible  <bruno@xxxxxxxxx>
> 
> 	Clarify autom4te debugging tips.
> 	* doc/autoconf.texi (Debugging via autom4te): Clarify that the two
> 	techniques are independent.

Git did not like your patch - I could not apply it with either 'git am' or
'git apply', so I had to do more work to get it into good shape to play
with it.  Here's the followup I'm using:

- --
Don't work too hard, make some time for fun as well!

Eric Blake             ebb9@xxxxxxx
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkprKOYACgkQ84KuGfSFAYB+ggCfdrWGVrYUbce9yBlsXOgRUXn1
wqAAn0s0JqvV+FEqvoTVgytnj3ZmgZdd
=QjwU
-----END PGP SIGNATURE-----
From bd9c233305b0abc867eea1deddde55be9b8a6857 Mon Sep 17 00:00:00 2001
From: Bruno Haible <bruno@xxxxxxxxx>
Date: Sat, 25 Jul 2009 09:38:39 -0600
Subject: [PATCH] Clarify autom4te debugging tips.

* doc/autoconf.texi (Debugging via autom4te): Fix example from
previous commit, and add clarification.

Signed-off-by: Eric Blake <ebb9@xxxxxxx>
---
 ChangeLog         |    6 ++++++
 doc/autoconf.texi |   48 +++++++++++++++++-------------------------------
 2 files changed, 23 insertions(+), 31 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 4ed5149..4ecd0d8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-07-25  Bruno Haible  <bruno@xxxxxxxxx>
+
+	Clarify autom4te debugging tips.
+	* doc/autoconf.texi (Debugging via autom4te): Fix example from
+	previous commit, and add clarification.
+
 2009-07-25  Eric Blake  <ebb9@xxxxxxx>

 	Document some autom4te debugging tips.
diff --git a/doc/autoconf.texi b/doc/autoconf.texi
index 0b61e35..39286fd 100644
--- a/doc/autoconf.texi
+++ b/doc/autoconf.texi
@@ -12454,39 +12454,25 @@ Debugging via autom4te
 version is 2.63b.95-3963
 @end example

-Another trick is using @code{m4_errprintn} to output debugging messages
-to standard error with no further m4 expansion, and without interfering
-with the post-processing done to standard output.  For example, contrast
-these two attempts to learn how @code{m4_dquote} is implemented:
+Another trick is to print out the expansion of various m4 expressions to
+standard error or to an independent file, with no further m4 expansion,
+and without interfering with diversion changes or the post-processing
+done to standard output.  @code{m4_errprintn} shows a given expression
+on standard error.  For example, if you want to see the expansion of an
+autoconf primitive or of one of your autoconf macros, you can do it like
+this:

-@smallexample
-$ @kbd{cat <<\EOF > foo.m4}
-m4_init
-try one: [m4_dquote is ]m4_defn([m4_dquote])
-m4_divert([0])dnl
-try two: [m4_dquote is ]m4_defn([m4_dquote])
-m4_dquote([hi])
-EOF
-$ @kbd{autom4te --language=m4sugar -o foo foo.m4}
-foo.m4:2: error: possibly undefined macro: m4_dquote
-      If this token and others are legitimate, please use m4_pattern_allow.
-      See the Autoconf documentation.
-$ @kbd{cat foo}
-try two: m4_dquote is [$@@]
-[hi]
-$ @kbd{cat <<\EOF > foo.m4}
-m4_init
-m4_errprintn([try one: m4_dquote is ]m4_defn([m4_dquote]))
-m4_divert([0])dnl
-m4_errprintn([try two: m4_dquote is ]m4_defn([m4_dquote]))dnl
-m4_dquote([hi])
+@example
+$ @kbd{cat <<\EOF > configure.ac}
+AC_INIT
+m4_errprintn([The definition of AC_DEFINE_UNQUOTED:])
+m4_errprintn(m4_defn([AC_DEFINE_UNQUOTED]))
+AC_OUTPUT
 EOF
-$ @kbd{autom4te --language=m4sugar foo.m4}
-try one: m4_dquote is [$@@]
-try two: m4_dquote is [$@@]
-$ @kbd{cat foo}
-[hi]
-@end smallexample
+$ @kbd{autoconf}
+@error{}The definition of AC_DEFINE_UNQUOTED:
+@error{}_AC_DEFINE_Q([], $@@)
+@end example

 @node Programming in M4sh
 @chapter Programming in M4sh
-- 
1.6.3.3.334.g916e1

_______________________________________________
Autoconf mailing list
Autoconf@xxxxxxx
http://lists.gnu.org/mailman/listinfo/autoconf

[Index of Archives]     [GCC Help]     [Kernel Discussion]     [RPM Discussion]     [Red Hat Development]     [Yosemite News]     [Linux USB]     [Samba]

  Powered by Linux