From f6030a3204a9b87e9b346e6eff4ce1117382fc86 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Thu, 16 Sep 2010 08:43:27 -0600 Subject: [PATCH] m4sugar: fix regression in AC_MSG_ERROR expansion AS_ERROR Regression introduced in commit cffdc3947, but the underlying problem stems from the introduction of m4_defun_init in commit d0c5f482. * lib/m4sugar/m4sugar.m4 (m4_defun_init): Avoid macro concatenation on subsequent expansions * tests/m4sh.at (AS_WARN and AS_ERROR): New test. * tests/m4sugar.at (m4@&t@_require: one-shot initialization): Enhance test. * NEWS: Document the fix. * THANKS: Update. Reported by Adrian Bunk and and Nishio Futoshi. Signed-off-by: Eric Blake --- ChangeLog | 12 ++++++++ NEWS | 3 ++ THANKS | 1 + lib/m4sugar/m4sugar.m4 | 2 +- tests/m4sh.at | 66 +++++++++++++++++++++++++++++++++++++++++- tests/m4sugar.at | 10 ++++--- 6 files changed, 88 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index be3c8a04..061c6ae0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2010-09-16 Eric Blake + + m4sugar: fix regression in AC_MSG_ERROR expansion + * lib/m4sugar/m4sugar.m4 (m4_defun_init): Avoid macro + concatenation on subsequent expansions + * tests/m4sh.at (AS_WARN and AS_ERROR): New test. + * tests/m4sugar.at (m4@&t@_require: one-shot initialization): + Enhance test. + * NEWS: Document the fix. + * THANKS: Update. + Reported by Adrian Bunk and and Nishio Futoshi. + 2010-09-13 Stefano Lattarini tests: simplify grepping of 'automake --version'. diff --git a/NEWS b/NEWS index 43e36213..78851b96 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,9 @@ GNU Autoconf NEWS - User visible changes. * Noteworthy changes in release ?.? (????-??-??) [?] +** AC_MSG_ERROR (and AS_ERROR) can once again be followed immediately by + `dnl'. Regression introduced in 2.66. + ** AT_BANNER() with empty argument will cause visual separation from previous test category. diff --git a/THANKS b/THANKS index 06448bd8..cb1589b2 100644 --- a/THANKS +++ b/THANKS @@ -11,6 +11,7 @@ Aaron Crane aaronc@pobox.com Aaron M. Ucko amu@alum.mit.edu Aaron W. LaFramboise aaronenvelope277@aaronwl.com Adam J. Richter adam@yggdrasil.com +Adrian Bunk bunk-gnu@fs.tum.de Aharon Robbins arnold@gnu.org Akim Demaille akim@freefriends.org Akinori Musha knu@iDaemons.org diff --git a/lib/m4sugar/m4sugar.m4 b/lib/m4sugar/m4sugar.m4 index 95b7bcf7..d4401271 100644 --- a/lib/m4sugar/m4sugar.m4 +++ b/lib/m4sugar/m4sugar.m4 @@ -1973,7 +1973,7 @@ m4_define([m4_defun], # m4_defun'd, we can add a parameter, similar to the third parameter # to m4_defun. m4_define([m4_defun_init], -[m4_define([$1], [$3])m4_defun([$1], +[m4_define([$1], [$3[]])m4_defun([$1], [$2[]_m4_popdef(]m4_dquote($[0])[)m4_indir(]m4_dquote($[0])dnl [m4_if(]m4_dquote($[#])[, [0], [], ]m4_dquote([,$]@)[))], [m4_pushdef])]) diff --git a/tests/m4sh.at b/tests/m4sh.at index e73c971f..08680c30 100644 --- a/tests/m4sh.at +++ b/tests/m4sh.at @@ -18,6 +18,71 @@ AT_BANNER([M4sh.]) # You should have received a copy of the GNU General Public License # along with this program. If not, see . +## ------------------- ## +## AS_WARN, AS_ERROR. ## +## ------------------- ## + +AT_SETUP([AS@&t@_WARN and AS@&t@_ERROR]) +AT_KEYWORDS([m4sh]) + +dnl without logging +AT_DATA_M4SH([script.as], +[[AS_INIT +AS_WARN([*watch out*])dnl + +if test x"$die" != x; then + AS_ERROR([you're dead])dnl + + AS_ERROR([really])dnl + +fi +echo got here +]]) + +AT_CHECK_M4SH +AT_CHECK([$CONFIG_SHELL ./script], [], +[[got here +]], [[script: WARNING: *watch out* +]]) +AT_CHECK([die=: $CONFIG_SHELL ./script], [1], +[], [[script: WARNING: *watch out* +script: error: you're dead +]]) + +dnl with logging +rm script +AT_DATA_M4SH([script.as], +[[AS_INIT +m4_define([gone], [AS_ERROR([really])]) +m4_define([AS_MESSAGE_LOG_FD], [5]) +exec AS_MESSAGE_LOG_FD>log.txt +AS_WARN([*watch out*])dnl + +if test x"$die" != x; then + AS_ERROR([you're dead])dnl + + AS_ERROR([really])dnl + +fi +echo got here +exec AS_MESSAGE_LOG_FD>&- +]]) + +AT_CHECK_M4SH +AT_CHECK([$CONFIG_SHELL ./script], [], +[[got here +]], [[script: WARNING: *watch out* +]]) +AT_CHECK([[grep 'script:[0-9]*: WARNING: \*watch out\*' log.txt]], [], [ignore]) +AT_CHECK([die=: $CONFIG_SHELL ./script], [1], +[], [[script: WARNING: *watch out* +script: error: you're dead +]]) +AT_CHECK([[grep 'script:[0-9]*: WARNING: \*watch out\*' log.txt]], [], [ignore]) +AT_CHECK([[grep 'script:[0-9]*: error: you'\''re dead' log.txt]], [], [ignore]) + +AT_CLEANUP + ## ---------------- ## ## LINENO support. ## ## ---------------- ## @@ -95,7 +160,6 @@ AT_CHECK([sh ./test/test-2], 0, [expout]) AT_CLEANUP - ## ---------------------- ## ## LINENO stack support. ## ## ---------------------- ## diff --git a/tests/m4sugar.at b/tests/m4sugar.at index 50a7b000..900bc3bd 100644 --- a/tests/m4sugar.at +++ b/tests/m4sugar.at @@ -460,13 +460,15 @@ AT_KEYWORDS([m4@&t@_defun_init m4@&t@_copy m4@&t@_defun_once]) dnl check out m4_defun_init, m4_copy, and odd macro names AT_CHECK_M4SUGAR_TEXT([[ +m4_define([t], [text])dnl m4_defun_init([a], [[init a -]], [[common a]])dnl +]], [[common a] t])dnl m4_defun([b], [[b]m4_require([a])])dnl m4_defun([c], [[c]m4_require([a])])dnl b c -a +a()dnl + m4_defun_init([-], [hello, ], [m4_if([$#], [0], [world], [[$1]])])dnl m4_copy([-], [.])dnl m4_indir([.]) @@ -474,10 +476,10 @@ m4_indir([.], [goodbye]) m4_indir([-], [again]) ]], [[ init a -common a +common a text b c -common a +common a text hello, world goodbye hello, again -- 2.47.2