* lib/autotest/general.m4 (AT_DATA): Special case an empty data file, since zsh botches empty here-docs. * doc/autoconf.texi (Writing Testsuites) <AT_DATA>: Document that empty contents is allowed. * tests/autotest.at (AT_DATA): New test. Reported by Ralf Wildenhues.
Signed-off-by: Eric Blake <[email protected]> --- Independent of the doc patch about the zsh bug, it turned out to be pretty easy to work around it in AT_DATA. By testing the tests/ change independently from the rest of the patch, I've confirmed that bash passes both before and after, while zsh fails before but passes after the rest of the patch. This does not protect against: AT_DATA([file], [macro_that_expands_to_nothing]) but I suspect that is enough of a corner case to not worry about unless we get a specific report of someone needing it. ChangeLog | 8 ++++++++ doc/autoconf.texi | 2 +- lib/autotest/general.m4 | 8 +++++--- tests/autotest.at | 19 +++++++++++++++++++ 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5b68441..951d971 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2010-09-13 Eric Blake <[email protected]> + autotest: work around zsh bug + * lib/autotest/general.m4 (AT_DATA): Special case an empty data + file, since zsh botches empty here-docs. + * doc/autoconf.texi (Writing Testsuites) <AT_DATA>: Document that + empty contents is allowed. + * tests/autotest.at (AT_DATA): New test. + Reported by Ralf Wildenhues. + docs: mention gnulib portability docs * doc/autoconf.texi (Function Portability, Header Portability): Add external links to gnulib. diff --git a/doc/autoconf.texi b/doc/autoconf.texi index 62a17f7..fcce699 100644 --- a/doc/autoconf.texi +++ b/doc/autoconf.texi @@ -24161,7 +24161,7 @@ Writing Testsuites Initialize an input data @var{file} with given @var{contents}. Of course, the @var{contents} have to be properly quoted between square brackets to protect against included commas or spurious M4 -expansion. The contents must end with an end of line. @var{file} must +expansion. @var{contents} must be empty or end with a newline. @var{file} must be a single shell word that expands into a single file name. @end defmac diff --git a/lib/autotest/general.m4 b/lib/autotest/general.m4 index cdc82b9..9429089 100644 --- a/lib/autotest/general.m4 +++ b/lib/autotest/general.m4 @@ -1947,14 +1947,16 @@ at_banner_text_[]AT_banner_ordinal="AS_ESCAPE([$1])"])dnl # AT_DATA(FILE, CONTENTS) # ----------------------- -# Initialize an input data FILE with given CONTENTS, which should end with -# an end of line. +# Initialize an input data FILE with given CONTENTS, which should be +# empty or end with a newline. # This macro is not robust to active symbols in CONTENTS *on purpose*. # If you don't want CONTENTS to be evaluated, quote it twice. _AT_DEFINE_SETUP([AT_DATA], +[m4_if([$2], [], [: >$1], + [$2], [[]], [: >$1], [cat >$1 <<'_ATEOF' $2[]_ATEOF -]) +])]) # AT_CHECK(COMMANDS, [STATUS = 0], STDOUT, STDERR, diff --git a/tests/autotest.at b/tests/autotest.at index fc636e9..4becdd5 100644 --- a/tests/autotest.at +++ b/tests/autotest.at @@ -159,6 +159,25 @@ AT_CHECK([sed 50q micro-suite | grep 'This is just a test notice'], [--version]) +## --------- ## +## AT_DATA. ## +## --------- ## + +AT_CHECK_AT_TEST([AT@&t...@_data], [ +AT_CHECK([test -f file1], [1]) +AT_DATA([file1]) +AT_CHECK([test -f file1 && test ! -s file1]) +AT_CHECK([echo hi > file1]) +AT_DATA([file1], [[]]) +AT_CHECK([test -f file1 && test ! -s file1]) +file=file2 +AT_DATA([$file], [[$file +]]) +AT_CHECK([echo '$file' > file3]) +AT_CHECK([cmp file2 file3]) +]) + + ## ------------------ ## ## Empty test suite. ## ## ------------------ ## -- 1.7.2.2
