autoconf-patches
[Top][All Lists]
Advanced

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

Re: Confusing sample in autoconf manual


From: Eric Blake
Subject: Re: Confusing sample in autoconf manual
Date: Thu, 10 Sep 2009 20:49:45 -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 santilistas on 8/9/2009 11:08 AM:

[finally getting to this thread]

> By the way, is this the correct list to send this remarks?
> 
> In section 3.1.2 The Autoconf language, there is the example on Iron
> Maiden and AC_DC.
> 
> @example
> echo "Hard rock was here!  --[AC_DC]"
> @end example

in configure.ac

> 
> which results in:
> 
> @example
> echo "Hard rock was here!  --AC_DC"
> @end example

in configure

> that demonstrates the losing of the quotation. However, a little bit
> below there is this example:
> 
> @example
> AC_MSG_WARN([[AC_DC stinks  --Iron Maiden]])
> @end example

in configure.ac

which leads to something roughly like:

$as_echo "AC_DC stinks  --Iron Maiden"

in configure.

> 
> which tries to show that the quotation is lost, but there is no quotation.

There WAS quotation - the double quotes were around the entire sentence,
rather than just the problematic section.  But I can improve the example
to mention which file we are looking at, and show both quoting styles:

> @example
> [echo "Hard rock was here!  --AC_DC"] dnl style 1
> echo "Hard rock was here!  --[AC_DC]" dnl style 2
> @end example

in configure.ac, leads to:

> @example
> echo "Hard rock was here!  --AC_DC"
> echo "Hard rock was here!  --AC_DC"
> @end example

in configure.

> 
> Shouldn't it be written like this?:
> 
> @example
> AC_MSG_WARN([[AC_DC stinks  --[Iron Maiden] ]])
> @end example

No, unless we want [] in configure, which is NOT what the first example
was doing.

> --santilín

Do you have a full name that you'd like to be credited as in the THANKS
file?  Other than that, here's what I'm thinking of pushing.

- --
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/

iEYEARECAAYFAkqpusgACgkQ84KuGfSFAYBiwgCgyusjRiBalFgYbsiBBn4My+AU
G8cAn3D71FsxBsw7vIgMjcS+hvbKlWzo
=1PZD
-----END PGP SIGNATURE-----
>From 881638c743d349a62ab32664d6d27e7bd26f4d9e Mon Sep 17 00:00:00 2001
From: Eric Blake <address@hidden>
Date: Thu, 10 Sep 2009 20:47:50 -0600
Subject: [PATCH] Improve documentation on quoting.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* doc/autoconf.texi (Autoconf Language): Clarify quoting example.
* THANKS: Update.
Reported by santilín.

Signed-off-by: Eric Blake <address@hidden>
---
 ChangeLog         |    5 +++++
 doc/autoconf.texi |   23 ++++++++++++++++++++---
 2 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 9ea4ed6..97bed79 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2009-09-10  Eric Blake  <address@hidden>

+       Improve documentation on quoting.
+       * doc/autoconf.texi (Autoconf Language): Clarify quoting example.
+       * THANKS: Update.
+       Reported by santilín.
+
        Document that AS_INIT is automatically used.
        * doc/autoconf.texi (Initialization Macros) <AS_INIT>: Add words
        to clarify that only bare-bones scripts need a direct AS_INIT.
diff --git a/doc/autoconf.texi b/doc/autoconf.texi
index 4203cd0..50583f5 100644
--- a/doc/autoconf.texi
+++ b/doc/autoconf.texi
@@ -1177,29 +1177,46 @@ Autoconf Language

 In other cases, you may have to use text that also resembles a macro
 call.  You must quote that text even when it is not passed as a macro
-argument:
+argument.  For example, these two approaches in @file{configure.ac}
+(quoting just the potential problems, or quoting the entire line) will
+protect your script in case autoconf ever adds a macro @code{AC_DC}:

 @example
 echo "Hard rock was here!  --[AC_DC]"
+[echo "Hard rock was here!  --AC_DC"]
 @end example

 @noindent
-which results in:
+which results in this text in @file{configure}:

 @example
 echo "Hard rock was here!  --AC_DC"
+echo "Hard rock was here!  --AC_DC"
 @end example

 @noindent
 When you use the same text in a macro argument, you must therefore have
 an extra quotation level (since one is stripped away by the macro
 substitution).  In general, then, it is a good idea to @emph{use double
-quoting for all literal string arguments}:
+quoting for all literal string arguments}, either around just the
+problematic portions, or over the entire argument:

 @example
+AC_MSG_WARN([[AC_DC] stinks  --Iron Maiden])
 AC_MSG_WARN([[AC_DC stinks  --Iron Maiden]])
 @end example

+However, the above example triggers a warning about a possibly
+unexpanded macro when running @command{autoconf}, because it collides
+with the namespace of macros reserved for the Autoconf language.  To be
+really safe, you can use additional escaping (either a quadrigraph, or
+creative shell constructs) to silence that particular warning:
+
address@hidden
+echo "Hard rock was here!  --AC""_DC"
+AC_MSG_WARN([[AC@@&t@@_DC stinks  --Iron Maiden]])
address@hidden example
+
 You are now able to understand one of the constructs of Autoconf that
 has been continually address@hidden  The rule of thumb is that
 @emph{whenever you expect macro expansion, expect quote expansion};
-- 
1.6.3.3.334.g916e1


reply via email to

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