At times, it is desirable to see what was happening inside m4, to see
why output was not matching expectations. However, post-processing done
by autom4te means that directly using the m4 builtin
m4_traceon is likely to interfere with operation. Also, frequent
diversion changes and the concept of forbidden tokens make it difficult
m4_defn to generate inline comments in the final output.
There are a couple of tools to help with this. One is the use of the --trace option provided by autom4te (as well as each of the programs that wrap autom4te, such as autoconf), in order to inspect when a macro is called and with which arguments. For example, when this paragraph was written, the autoconf version could be found by:
$ autoconf --trace=AC_INIT configure.ac:23:AC_INIT:GNU Autoconf:2.63b.95-3963:email@example.com $ autoconf --trace='AC_INIT:version is $2' version is 2.63b.95-3963
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.
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
$ cat <<\EOF > configure.ac AC_INIT m4_errprintn([The definition of AC_DEFINE_UNQUOTED:]) m4_errprintn(m4_defn([AC_DEFINE_UNQUOTED])) AC_OUTPUT EOF $ autoconf error-->The definition of AC_DEFINE_UNQUOTED: error-->_AC_DEFINE_Q(, $@)