autoconf-patches
[Top][All Lists]
Advanced

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

[PATCHv2] m4sugar: fix regression in AC_MSG_ERROR expansion


From: Eric Blake
Subject: [PATCHv2] m4sugar: fix regression in AC_MSG_ERROR expansion
Date: Thu, 16 Sep 2010 09:30:47 -0600

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@&address@hidden: one-shot initialization):
Enhance test.
* NEWS: Document the fix.
* THANKS: Update.
Reported by Adrian Bunk and and Nishio Futoshi.

Signed-off-by: Eric Blake <address@hidden>
---

In fact, fixing the real root cause means that I don't have to touch
m4sh.m4!  m4_defun_init was an optimization for m4_defun, and since
m4_defun never allows concatenation with subsequent text, neither
should m4_defun_init.

 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 be3c8a0..061c6ae 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2010-09-16  Eric Blake  <address@hidden>
+
+       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@&address@hidden: one-shot initialization):
+       Enhance test.
+       * NEWS: Document the fix.
+       * THANKS: Update.
+       Reported by Adrian Bunk and and Nishio Futoshi.
+
 2010-09-13  Stefano Lattarini  <address@hidden>

        tests: simplify grepping of 'automake --version'.
diff --git a/NEWS b/NEWS
index 43e3621..78851b9 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 06448bd..cb1589b 100644
--- a/THANKS
+++ b/THANKS
diff --git a/lib/m4sugar/m4sugar.m4 b/lib/m4sugar/m4sugar.m4
index 95b7bcf..d440127 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 e73c971..08680c3 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 <http://www.gnu.org/licenses/>.

+## ------------------- ##
+## AS_WARN, AS_ERROR.  ##
+## ------------------- ##
+
+AT_SETUP([AS@&address@hidden and AS@&address@hidden)
+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 50a7b00..900bc3b 100644
--- a/tests/m4sugar.at
+++ b/tests/m4sugar.at
@@ -460,13 +460,15 @@ AT_KEYWORDS([m4@&address@hidden m4@&address@hidden 
m4@&address@hidden)

 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
-- 
1.7.2.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]