On 06/14/2011 01:02 AM, Křištof Želechovski wrote: > Please observe that the following code from 3.1.2 "The Autoconf Language" is > obsolete and should be updated:
Not so much obsolete, but out of date with best practice. At any rate, thanks for the report! > > AC_COMPILE_IFELSE([[char b[10];]], [], [AC_MSG_ERROR([you lose])]) > > Running this snippet through autoconf produces the warning: > > no AC_LANG_SOURCE call detected in body > > It seems the following syntax is required instead: > > AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char b[10];]])], [], > [AC_MSG_ERROR([you lose])]) Indeed. Here's what I'm pushing: diff --git i/ChangeLog w/ChangeLog index 1fca7bb..03541e0 100644 --- i/ChangeLog +++ w/ChangeLog @@ -1,3 +1,10 @@ +2011-06-14 Eric Blake <ebl...@redhat.com> + + doc: update quoting example + * doc/autoconf.texi (Autoconf Language): Add AC_LANG_SOURCE use. + * THANKS: Update. + Reported by Křištof Želechovski. + 2011-05-05 Eric Blake <ebl...@redhat.com> doc: document dash bug with positional parameters diff --git i/THANKS w/THANKS index 7679b05..e125ebe 100644 --- i/THANKS +++ w/THANKS diff --git i/doc/autoconf.texi w/doc/autoconf.texi index 7ff693f..99b1fd1 100644 --- i/doc/autoconf.texi +++ w/doc/autoconf.texi @@ -1288,19 +1288,26 @@ Autoconf Language i.e., expect one level of quotes to be lost. For instance: @example -AC_COMPILE_IFELSE([char b[10];], [], [AC_MSG_ERROR([you lose])]) +AC_COMPILE_IFELSE(AC_LANG_SOURCE([char b[10];]), [], + [AC_MSG_ERROR([you lose])]) @end example @noindent -is incorrect: here, the first argument of @code{AC_COMPILE_IFELSE} is +is incorrect: here, the first argument of @code{AC_LANG_SOURCE} is @samp{char b[10];} and is expanded once, which results in -@samp{char b10;}. (There was an idiom common in Autoconf's past to +@samp{char b10;}; and the @code{AC_LANG_SOURCE} is also expanded prior +to being passed to @code{AC_COMPILE_IFELSE}. (There was an idiom common +in Autoconf's past to address this issue via the M4 @code{changequote} primitive, but do not use it!) Let's take a closer look: the author meant the first argument -to be understood as a literal, and therefore it must be quoted twice: +to be understood as a literal, and therefore it must be quoted twice; +likewise, the intermediate @code{AC_LANG_SOURCE} macro should be quoted +once so that it is only expanded after the rest of the body of +@code{AC_COMPILE_IFELSE} is in place: @example -AC_COMPILE_IFELSE([[char b[10];]], [], [AC_MSG_ERROR([you lose])]) +AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char b[10];]])], [], + [AC_MSG_ERROR([you lose])]) @end example @noindent -- Eric Blake ebl...@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature