[dropping automake-patches] Hi Ralf, and thanks for this very useful documentation enhancement.
Some nits in-line below ... On Saturday 22 January 2011, Ralf Wildenhues wrote: > [ moving from automake bug#7868 ] > > * Ralf Wildenhues wrote on Sat, Jan 22, 2011 at 11:06:48AM CET: > > * Stefano Lattarini wrote on Thu, Jan 20, 2011 at 10:19:24PM CET: > > > On Thursday 20 January 2011, Ralf Wildenhues wrote: > > > > That is the reason the check-TESTS rule is so ugly (and recursive) in > > > > the first place. I really would like to avoid more instances of this > > > > wart; so specifying files without extension is Not Good(TM). > > > > > > > OK, noted (and these considerations could IMHO end up somewhere in the > > > manual). > > > > Good suggestion. They should be mentioned in the portability section of > > autoconf.texi if they aren't already, and as ## comments in check.am. > > Proposed patches for Autoconf below. > > Thanks, > Ralf > > > docs: new sections about macros and comments, substitutions. > Why the comma after "comments"? Has the sentence got borked somehow? > > * doc/autoconf.texi (Top, Portable Make): Adjust menus. > (Comments in Make Macros, Trailing whitespace in Make Macros): > New sections. > Suggestion by Stefano Lattarini. > > diff --git a/doc/autoconf.texi b/doc/autoconf.texi > index eee4ba7..0e8c3cc 100644 > --- a/doc/autoconf.texi > +++ b/doc/autoconf.texi > @@ -533,6 +533,8 @@ Portable Make Programming > * Parallel Make:: Parallel @command{make} quirks > * Comments in Make Rules:: Other problems with Make comments > * Newlines in Make Rules:: Using literal newlines in rules > +* Comments in Make Macros:: Other problems with Make comments in macros > +* Trailing whitespace in Make Macros:: Macro substitution problems > * obj/ and Make:: Don't name a subdirectory @file{obj} > * make -k Status:: Exit status of @samp{make -k} > * VPATH and Make:: @code{VPATH} woes > @@ -19135,6 +19137,8 @@ itself. > * Parallel Make:: Parallel @command{make} quirks > * Comments in Make Rules:: Other problems with Make comments > * Newlines in Make Rules:: Using literal newlines in rules > +* Comments in Make Macros:: Other problems with Make comments in macros > +* Trailing whitespace in Make Macros:: Macro substitution problems > * obj/ and Make:: Don't name a subdirectory @file{obj} > * make -k Status:: Exit status of @samp{make -k} > * VPATH and Make:: @code{VPATH} woes > @@ -19575,6 +19579,55 @@ nlinit=`echo 'nl="'; echo '"'`; eval "$$nlinit"; \ > sed -e "s/\$$/\\$$@{nl@}/" < input > output > @end example > > +@node Comments in Make Macros > +@section Comments in Make Macros > +@cindex Comments in @file{Makefile} macros > +@cindex @file{Makefile} macros and comments > + > +Avoid putting comments in macro values as far as possible. Posix > +specifies that the text starting from the @samp{#} sign until the end of > +the line is to be ignored, which has the unfortunate effect of > +disallowing them even quoted. Thus, the following might lead to a > +syntax error at compile time: > + > +@example > +CPPFLAGS = "-DCOMMENT_CHAR='#'" > +@end example > + > +@noindent > +as @samp{CPPFLAGS} may be expanded to @samp{"-DCOMMENT_CHAR='#}. > You mean @samp{"-DCOMMENT_CHAR='} here? > +Luckily, most @command{make} implementations disregard this and treat > +single and double quotes specially here. > + > +Even without quoting involved, comments can have surprising effects, > +because the whitespace before them is part of the variable value: > + > +@example > +foo = bar # trailing comment > +print: ; @@echo "$(foo)." > +@end example > + > +@noindent > +prints @samp{bar .}, which is usually not intended, and can expose > +@command{make} bugs as described below. > + > +@node Trailing whitespace in Make Macros > +@section Trailing whitespace in Make Macros > +@cindex whitespace in @file{Makefile} macros > +@cindex @file{Makefile} macros and whitespace > + > +GNU @command{make} 3.80 mistreats trailing whitespace in macro > +substitutions and appends another spurious suffix: > + > +@example > +empty = > +foo = bar $(empty) > +print: ; @@echo $(foo:=.test) > +@end example > + > +@noindent > +prints @samp{bar.test .test}. > + > @node obj/ and Make > @section The @file{obj/} Subdirectory and Make > @cindex @file{obj/}, subdirectory > Thanks, Stefano