autoconf-patches
[Top][All Lists]
Advanced

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

FYI Re: 12AT_CHECK_NOESCAPE.diff


From: Derek Robert Price
Subject: FYI Re: 12AT_CHECK_NOESCAPE.diff
Date: Tue, 12 Aug 2003 15:03:49 -0400
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624 Netscape/7.1

Akim Demaille wrote:

| @@ -919,6 +921,16 @@
|  #  ( $at_traceon; $1 ) >at-stdout 2>at-stder1
|  #
|  m4_define([AT_CHECK],
| +[AT_CHECK_NOESCAPE([$1],[$2],AS_ESCAPE([$3]),AS_ESCAPE([$4]),[$5],[$6])])

This patch is wrong.  You should *never* pass unquoted macro calls as
macro arguments.  You must always have [...], [...], [...].

| @@ -933,14 +945,14 @@
|          ignore, [(echo stderr:; cat $at_stderr) >&5],
|          experr, [$at_diff experr $at_stderr >&5 || at_failed=:],
|          [],     [$at_diff $at_devnull $at_stderr >&5 || at_failed=:],
| -        [echo >>$at_stderr; echo "AS_ESCAPE([$4])" | $at_diff - $at_stderr 
>&5 || at_failed=:])
| +        [echo >>$at_stderr; echo "[$4]" | $at_diff - $at_stderr >&5 || 
at_failed=:])
|  dnl Check stdout.
|  m4_case([$3],
|          stdout, [(echo stdout:; tee stdout <$at_stdout) >&5],
|          ignore, [(echo stdout:; cat $at_stdout) >&5],
|          expout, [$at_diff expout $at_stdout >&5 || at_failed=:],
|          [],     [$at_diff $at_devnull $at_stdout >&5 || at_failed=:],
| -        [echo >>$at_stdout; echo "AS_ESCAPE([$3])" | $at_diff - $at_stdout 
>&5 || at_failed=:])
| +        [echo >>$at_stdout; echo "[$3]" | $at_diff - $at_stdout >&5 || 
at_failed=:])

This is wrong: the $3 must not be quoted here.  Please, swap your
quotes.

Okay. I think I answered these concerns. I had to move the core functionality out of AT_CHECK_NOESCAPE into an _AT_CHECK function since once I started quoting the call to AS_ESCAPE the m4_case statement that checked for `ignore' started failing:

Index: ChangeLog
2003-08-12  Derek Price  <address@hidden>

        * lib/autotest/general.m4 (AT_CHECK): Use new _AT_CHECK API.
        (AT_CHECK_NOESCAPE): Move core functionality to...
        (_AT_CHECK): ...this new macro.

Index: lib/autotest/general.m4
===================================================================
RCS file: /cvsroot/autoconf/autoconf/lib/autotest/general.m4,v
retrieving revision 1.148
diff -u -r1.148 general.m4
--- lib/autotest/general.m4     7 Aug 2003 17:47:48 -0000       1.148
+++ lib/autotest/general.m4     12 Aug 2003 18:57:02 -0000
@@ -1042,15 +1042,24 @@
# This may cause spurious failures when the test suite is run with `-x'.
#
m4_define([AT_CHECK],
-[AT_CHECK_NOESCAPE([$1],[$2],AS_ESCAPE([$3]),AS_ESCAPE([$4]),[$5],[$6])])
-
-
+[_AT_CHECK([$1],[$2],[$3],[$4],[$5],[$6],1)])

# AT_CHECK_NOESCAPE(COMMANDS, [STATUS = 0], STDOUT, STDERR,
#                   [RUN-IF-FAIL], [RUN-IF-PASS])
# ---------------------------------------------------------
# Like AT_CHECK, but do not AS_ESCAPE shell metacharacters in the STDOUT
# and STDERR arguments before running the comparison.
+m4_define([AT_CHECK_NOESCAPE],
+[_AT_CHECK([$1],[$2],[$3],[$4],[$5],[$6])])
+
+
+
+# _AT_CHECK(COMMANDS, [STATUS = 0], STDOUT, STDERR,
+#           [RUN-IF-FAIL], [RUN-IF-PASS], SHELL_ESCAPE_IO)
+# ---------------------------------------------------------
+# Worker for AT_CHECK & AT_CHECK_NOESCAPE.  The final SHELL-ESCAPE-IO
+# argument determines whether the STDOUT & STDERR arguments will be escaped or
+# not.
#
#
# Implementation Details
@@ -1075,7 +1084,7 @@
#
#  ( $at_traceon; $1 ) >at-stdout 2>at-stder1
#
-m4_define([AT_CHECK_NOESCAPE],
+m4_define([_AT_CHECK],
[$at_traceoff
echo "AT_LINE: AS_ESCAPE([$1])"
echo AT_LINE >$at_check_line_file
@@ -1090,14 +1099,14 @@
        ignore, [echo stderr:; cat $at_stderr],
        experr, [$at_diff experr $at_stderr || at_failed=:],
        [],     [$at_diff $at_devnull $at_stderr || at_failed=:],
-       [echo >>$at_stderr; echo "$4" | $at_diff - $at_stderr || at_failed=:])
+       [echo >>$at_stderr; echo "m4_ifval([$7],[AS_ESCAPE([$4])],[$4])" | 
$at_diff - $at_stderr || at_failed=:])
dnl Check stdout.
m4_case([$3],
        stdout, [echo stdout:; tee stdout <$at_stdout],
        ignore, [echo stdout:; cat $at_stdout],
        expout, [$at_diff expout $at_stdout || at_failed=:],
        [],     [$at_diff $at_devnull $at_stdout || at_failed=:],
-       [echo >>$at_stdout; echo "$3" | $at_diff - $at_stdout || at_failed=:])
+       [echo >>$at_stdout; echo "m4_ifval([$7],[AS_ESCAPE([$3])],[$3])" | 
$at_diff - $at_stdout || at_failed=:])
dnl Check exit val.  Don't `skip' if we are precisely checking $? = 77.
case $at_status in
m4_case([$2],


Derek

--
               *8^)

Email: address@hidden

Get CVS support at <http://ximbiot.com>!
--
"Calm down. It's only ones and zeros."





reply via email to

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