autoconf-patches
[Top][All Lists]
Advanced

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

Re: iterating over arguments


From: Eric Blake
Subject: Re: iterating over arguments
Date: Mon, 14 Sep 2009 07:11:47 -0600
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.23) Gecko/20090812 Thunderbird/2.0.0.23 Mnenhy/0.7.6.666

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

According to Eric Blake on 9/14/2009 6:07 AM:
> But I do see an issue with using m4_toupper - it does not quote its
> result, so if the result resembles a macro name, that macro will be
> expanded before anything else gets a chance to use the result of the
> upper-casing.  I don't think we can change the semantics of this (there
> may be existing code relying on this), but we probably need to add safer
> counterparts that return a quoted string.

Actually, I only found one existing clients that needed changing due to
returning a quoted string; and it specifically WANTED the quoting; there
are several other clients throughout autoconf itself that were working
only because the word with a case change happened to not be a macro name,
which are now more robust.  I will probably apply this, after rerunning
the testsuite successfully:

- --
Don't work too hard, make some time for fun as well!

Eric Blake             address@hidden
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkquQREACgkQ84KuGfSFAYAbswCg123UOzkSyCy5hIZcc6F11I5o
4cAAoIdeR0QxDgY1phVLF0C25Ebu8YtI
=dHGS
-----END PGP SIGNATURE-----
>From c10de07812688263d3e91e9667b41c25b96fd45a Mon Sep 17 00:00:00 2001
From: Eric Blake <address@hidden>
Date: Mon, 14 Sep 2009 06:58:51 -0600
Subject: [PATCH] Quote result of m4_toupper and m4_tolower.

* lib/m4sugar/m4sugar.m4 (m4_tolower, m4_toupper): Quote result.
* lib/autotest/general.m4 (AT_KEYWORDS): Adjust caller.
* tests/m4sugar.at (m4@&address@hidden and m4@&address@hidden): New test.
* NEWS: Document this.
* THANKS: Update.
Reported by Sam Steingold.

Signed-off-by: Eric Blake <address@hidden>
---
 ChangeLog               |   10 ++++++++++
 NEWS                    |    3 +++
 lib/autotest/general.m4 |    4 ++--
 lib/m4sugar/m4sugar.m4  |    8 ++++----
 tests/m4sugar.at        |   37 +++++++++++++++++++++++++++++++++++++
 5 files changed, 56 insertions(+), 6 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 568e48a..cd2cd70 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2009-09-14  Eric Blake  <address@hidden>
+
+       Quote result of m4_toupper and m4_tolower.
+       * lib/m4sugar/m4sugar.m4 (m4_tolower, m4_toupper): Quote result.
+       * lib/autotest/general.m4 (AT_KEYWORDS): Adjust caller.
+       * tests/m4sugar.at (m4@&address@hidden and m4@&address@hidden): New 
test.
+       * NEWS: Document this.
+       * THANKS: Update.
+       Reported by Sam Steingold.
+
 2009-09-13  Ralf Wildenhues  <address@hidden>

        * bin/autoupdate.in: Fix typos in comments.
diff --git a/NEWS b/NEWS
index 262be0c..01bc094 100644
--- a/NEWS
+++ b/NEWS
@@ -21,6 +21,9 @@ GNU Autoconf NEWS - User visible changes.
 ** The following documented autotest macros are new:
    AT_CHECK_EUNIT

+** The following m4sugar macros now quote their expansion:
+   m4_toupper  m4_tolower
+
 ** The `$tmp' temporary directory used in config.status is documented for
    public use now.

diff --git a/lib/autotest/general.m4 b/lib/autotest/general.m4
index 2c164b5..33218fd 100644
--- a/lib/autotest/general.m4
+++ b/lib/autotest/general.m4
@@ -1814,8 +1814,8 @@ m4_case([$1],
 # Since the -k option is case-insensitive, the list is stored in lower case
 # to avoid duplicates that differ only by case.
 _AT_DEFINE_SETUP([AT_KEYWORDS],
-[m4_append_uniq_w([AT_keywords], m4_tolower(m4_dquote(_m4_expand([$1
-]))))])
+[m4_append_uniq_w([AT_keywords], m4_tolower(_m4_expand([$1
+])))])


 # AT_CAPTURE_FILE(FILE)
diff --git a/lib/m4sugar/m4sugar.m4 b/lib/m4sugar/m4sugar.m4
index 7bc72b6..2e53ea3 100644
--- a/lib/m4sugar/m4sugar.m4
+++ b/lib/m4sugar/m4sugar.m4
@@ -2266,11 +2266,11 @@ m4_defn([m4_re_string])dnl
 #
 # Rather than expand the m4_defn each time, we inline them up front.
 m4_define([m4_tolower],
-[m4_translit([$1], ]m4_dquote(m4_defn([m4_cr_LETTERS]))[,
-                  ]m4_dquote(m4_defn([m4_cr_letters]))[)])
+[m4_translit([[$1]], ]m4_dquote(m4_defn([m4_cr_LETTERS]))[,
+                    ]m4_dquote(m4_defn([m4_cr_letters]))[)])
 m4_define([m4_toupper],
-[m4_translit([$1], ]m4_dquote(m4_defn([m4_cr_letters]))[,
-                  ]m4_dquote(m4_defn([m4_cr_LETTERS]))[)])
+[m4_translit([[$1]], ]m4_dquote(m4_defn([m4_cr_letters]))[,
+                    ]m4_dquote(m4_defn([m4_cr_LETTERS]))[)])


 # m4_split(STRING, [REGEXP])
diff --git a/tests/m4sugar.at b/tests/m4sugar.at
index 87c303f..d37681b 100644
--- a/tests/m4sugar.at
+++ b/tests/m4sugar.at
@@ -1292,6 +1292,43 @@ AB

 AT_CLEANUP

+## ------------------------ ##
+## m4_toupper, m4_tolower.  ##
+## ------------------------ ##
+
+AT_SETUP([m4@&address@hidden and m4@&address@hidden)
+
+AT_CHECK_M4SUGAR_TEXT(
+[[m4_define([abc], [hI])m4_define([ABC], [Hi])
+m4_toupper(abc aBc ABC)
+m4_tolower(abc aBc ABC)
+m4_toupper([abc aBc ABC])
+m4_tolower([abc aBc ABC])
+m4_echo(m4_toupper(abc aBc ABC))
+m4_echo(m4_tolower(abc aBc ABC))
+m4_echo(m4_toupper([abc aBc ABC]))
+m4_echo(m4_tolower([abc aBc ABC]))
+m4_do(m4_toupper(abc aBc ABC))
+m4_do(m4_tolower(abc aBc ABC))
+m4_do(m4_toupper([abc aBc ABC]))
+m4_do(m4_tolower([abc aBc ABC]))
+]], [[
+HI ABC HI
+hi abc hi
+ABC ABC ABC
+abc abc abc
+HI ABC HI
+hi abc hi
+ABC ABC ABC
+abc abc abc
+HI Hi HI
+hi hI hi
+Hi Hi Hi
+hI hI hI
+]])
+
+AT_CLEANUP
+
 ## --------------- ##
 ## m4_bpatsubsts.  ##
 ## --------------- ##
-- 
1.6.5.rc1


reply via email to

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