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