On 07/10/2010 08:49 AM, Eric Blake wrote: > It would still be nice to address Bruno's report about AC_INIT and valid > version strings first. > > In thinking about that, would it be worth adding a new macro > AS_LITERAL_HEREDOC_IF, which is comparable to AS_LITERAL_IF and > AS_LITERAL_WORD_IF, but the difference is that it permits any strings > that pass through unchanged in both quoted and unquoted heredocs? Then, > instead of AS_LITERAL_IF, we make the version string validation of > AC_INIT use AS_LITERAL_HEREDOC_IF use the new AS_LITERAL_HEREDOC_IF and > that should resolve Bruno's report. > > A rough implementation is that it only needs to filter out @S|@ (the > quadrigraph for $) and $,`,\. I've got a few minutes, let me see if I > can propose a more formal patch for review...
Here's where I got before running out of time to actually test it with AC_INIT: diff --git i/lib/m4sugar/m4sh.m4 w/lib/m4sugar/m4sh.m4 index 6fbc9e1..3cc868c 100644 --- i/lib/m4sugar/m4sh.m4 +++ w/lib/m4sugar/m4sh.m4 @@ -1592,6 +1592,23 @@ m4_define([_AS_LITERAL_IF_NO], [$2]) m4_define([AS_LITERAL_WORD_IF], [_AS_LITERAL_IF(m4_expand([$1]))([$4], [$3], [$2])]) +# AS_LITERAL_HEREDOC_IF(EXPRESSION, IF-LITERAL, IF-NOT-LITERAL) +# ------------------------------------------------------------- +# Like AS_LITERAL_IF, except that a string is considered literal +# if it results in the same output in both quoted and unquoted +# here-documents. +m4_define([AS_LITERAL_HEREDOC_IF], +[_$0(m4_expand([$1]))([$2], [$3])]) + +m4_define([_AS_LITERAL_HEREDOC_IF], +[m4_if(m4_index([$1], [...@s|@]), [-1], + [m4_if(m4_index(m4_translit([[$1]], [\`], [$]), [$]), [-1], + [$0_YES], [$0_NO])], + [$0_NO])]) + +m4_define([_AS_LITERAL_HEREDOC_IF_YES], [$1]) +m4_define([_AS_LITERAL_HEREDOC_IF_NO], [$2]) + # AS_TMPDIR(PREFIX, [DIRECTORY = $TMPDIR [= /tmp]]) # ------------------------------------------------- diff --git i/tests/m4sh.at w/tests/m4sh.at index 2f79332..52ab4ee 100644 --- i/tests/m4sh.at +++ w/tests/m4sh.at @@ -1119,7 +1119,7 @@ AT_CLEANUP ## --------------- ## AT_SETUP([AS@&t...@_literal_if]) -AT_KEYWORDS([m4sh AS@&t...@_literal_word_if]) +AT_KEYWORDS([m4sh AS@&t...@_literal_word_if AS@&t...@_literal_heredoc_if]) AT_DATA_M4SH([script.as], [[dnl AS_INIT @@ -1141,9 +1141,17 @@ m4_define([mac], [l``it]) echo AS_LITERAL_IF([mac], [ERR], [ok]) 13 echo AS_LITERAL_IF([mac], [ERR1], [ok], [ERR2]) 14 echo AS_LITERAL_IF([ a ][ -b], [ok], [ok]) 15 +b], [ok], [ERR]) 15 echo AS_LITERAL_WORD_IF([ a ][ b], [ERR], [ok]) 16 +echo AS_LITERAL_HEREDOC_IF([ a ][ +b], [ok], [ERR]) 17 +echo AS_LITERAL_IF([(a)], [ERR], [ok]) 18 +echo AS_LITERAL_WORD_IF([(a)], [ERR], [ok]) 19 +echo AS_LITERAL_HEREDOC_IF([(a)], [ok], [ERR]) 20 +echo AS_LITERAL_IF([...@s|@a], [ERR], [ok]) 21 +echo AS_LITERAL_WORD_IF([...@s|@a], [ERR], [ok]) 22 +echo AS_LITERAL_HEREDOC_IF([...@s|@a], [ERR], [ok]) 23 ]]) AT_CHECK_M4SH @@ -1164,6 +1172,13 @@ ok 13 ok 14 ok 15 ok 16 +ok 17 +ok 18 +ok 19 +ok 20 +ok 21 +ok 22 +ok 23 ]]) AT_CLEANUP -- Eric Blake [email protected] +1-801-349-2682 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
