Improve documentation on quoting.

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

Signed-off-by: Eric Blake <ebb9@byu.net>
This commit is contained in:
Eric Blake 2009-09-10 20:47:50 -06:00
parent bb09823ea7
commit a30d5c4a22
3 changed files with 28 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2009-09-12 Eric Blake <ebb9@byu.net>
Improve documentation on quoting.
* doc/autoconf.texi (Autoconf Language): Clarify quoting example.
* THANKS: Update.
Reported by santilín.
2009-09-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
New config.status option --config.

1
THANKS
View File

@ -327,6 +327,7 @@ Sam Sexton Sam.Sexton@reuters.com
Sam Sirlin sam@kalessin.jpl.nasa.gov
Sam Varshavchik mrsam@courier-mta.com
Sander Niemeijer niemeijer@science-and-technology.nl
santilín listas@gestiong.org
Scott Bambrough scottb@corelcomputer.com
Scott Stanton stanton@scriptics.com
Sebastian Freundt hroptatyr@gna.org

View File

@ -1177,29 +1177,46 @@ AC_CHECK_HEADER(stdio.h,
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:
@example
echo "Hard rock was here! --AC""_DC"
AC_MSG_WARN([[AC@@&t@@_DC stinks --Iron Maiden]])
@end example
You are now able to understand one of the constructs of Autoconf that
has been continually misunderstood@enddots{} The rule of thumb is that
@emph{whenever you expect macro expansion, expect quote expansion};