autoconf-patches
[Top][All Lists]
Advanced

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

Re: 12AT_CHECK_NOESCAPE.diff


From: Akim Demaille
Subject: Re: 12AT_CHECK_NOESCAPE.diff
Date: Tue, 12 Aug 2003 11:55:47 +0200
User-agent: Gnus/5.1002 (Gnus v5.10.2) Emacs/21.3 (gnu/linux)

| Here's the other patch I've been waiting four months on.  This one simply adds
| an AT_CHECK like macro called AT_CHECK_NOESCAPE that does not escape shell
| metacharacters in its STDOUT & STDERR arguments.
| 
| ----- Original Message -----
| 
| I implemented AT_CHECK_NOESCAPE slightly differently than I originally
| suggested to Akim since it is less overhead.  AT_CHECK simply calls
| AT_CHECK_NOESCAPE with args 3 & 4 AS_ESCAPED and AT_CHECK_NOESCAPE contains
| all the original functionality of AT_CHECK except for the AS_ESCAPE of args
| 3 & 4.
| 
| The entire autoconf test suite now passes without changes with this patch
| applied and AT_CHECK_NOESCAPE does what it is supposed to in the baby CVS
| autotest suite.
| 
| Index: ChangeLog
| 2003-04-09  Derek Price  <address@hidden>
| 
|       * lib/autotest/general.m4 (AT_CHECK): Move core functionality...
|       (AT_CHECK_NOESCAPE): ...to this new macro.
| 
| Index: lib/autotest/general.m4
| ===================================================================
| RCS file: /cvsroot/autoconf/autoconf/lib/autotest/general.m4,v
| retrieving revision 1.141
| diff -u -r1.141 general.m4
| --- lib/autotest/general.m4   31 Mar 2003 20:25:52 -0000      1.141
| +++ lib/autotest/general.m4   8 Apr 2003 15:53:11 -0000
| @@ -853,11 +853,13 @@
|  ])
|  
|  
| -# AT_CHECK(COMMANDS, [STATUS = 0], STDOUT, STDERR)
| +# AT_CHECK(COMMANDS, [STATUS = 0], STDOUT, STDERR,
| +#          [RUN-IF-FAIL], [RUN-IF-PASS])
|  # ------------------------------------------------
|  # Execute a test by performing given shell COMMANDS.  These commands
|  # should normally exit with STATUS, while producing expected STDOUT and
| -# STDERR contents.
| +# STDERR contents.  Shell metacharacters in STDOUT and STDERR are
| +# _not_ processed by the shell, but are treated as string literals.
|  #
|  # STATUS, STDOUT, and STDERR are not checked if equal to `ignore'.
|  #
| @@ -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 [...], [...], [...].

| +
| +
| +
| +# 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_traceoff
|  $at_verbose "AT_LINE: AS_ESCAPE([$1])"
|  echo AT_LINE >$at_check_line_file
| @@ -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.


|  dnl Check exit val.  Don't `skip' if we are precisely checking $? = 77.
|  case $at_status in
|  m4_case([$2],
| @@ -958,4 +970,4 @@
|  AS_IF($at_failed, [$5], [$6])
|  $at_failed && exit 1
|  $at_traceon
| -])# AT_CHECK
| +])# AT_CHECK_NOESCAPE
| 
| 
| 




reply via email to

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