PS: The reason for the m4_pushdef/m4_popdef is that the direct way to write
this macro would be
m4_define([AT_JAVA_PARSER_CHECK],
[AT_CHECK([$5[ $SHELL ../../../nlcanon.sh windows-based stdout,stderr $SHELL
../../../javaexec.sh ]$1],
[$2], [$3], [$4])])
which is wider than 80 columns, and adding a line break e.g.
m4_define([AT_JAVA_PARSER_CHECK],
[AT_CHECK([$5[ $SHELL ../../../nlcanon.sh windows-based stdout,stderr \
$SHELL ../../../javaexec.sh ]$1],
[$2], [$3], [$4])])
would make the macro untraceable (see function at_fn_check_prepare_dynamic).
With m4_pushdef/m4_popdef, all lines fit in 80 columns, and AT_JAVA_PARSER_CHECK
invokes at_fn_check_prepare_dynamic.
Bruno