On bug-gnulib, archived at
        http://permalink.gmane.org/gmane.comp.lib.gnulib.bugs/22132
Ralf Wildenhues taught me a bit about how Automake propagates
variables to submakes.  I thought that it would good to document
this in the Autoconf manual, which currently has no detail at
all.

I've signed copyright papers for Autoconf, which are in
/gd/gnuorg/copyright.list under my full name "Benjamin Pfaff",
but I don't have commit rights, so someone will have to shepherd
this in for me (or decide that it is not worthwhile).

2010-06-14  Ben Pfaff  <[email protected]>

        * doc/autoconf.texi: Describe technique used by Automake to
        propagate variables to submakes in more detail.

diff --git a/doc/autoconf.texi b/doc/autoconf.texi
index 42469db..2012fbb 100644
--- a/doc/autoconf.texi
+++ b/doc/autoconf.texi
@@ -18720,8 +18720,8 @@ environment contains some other macros usually defined 
by the
 makefile.  (See also the note about @code{make -e} and @code{SHELL}
 below.)
 
-Another way to propagate overrides to submakes is to do it
-manually, from your makefile:
+If you can foresee all macros that a user might want to override, then
+you can propagate them to submakes manually, from your makefile:
 
 @example
 foo = foo
@@ -18732,12 +18732,25 @@ two:
         @@echo $(foo)
 @end example
 
-You need to foresee all macros that a user might want to override if
-you do that.
+Another way to propagate a variable to submakes in a portable way is to
+expand an extra variable in every invocation of @samp{$(MAKE)} within
+your makefile:
 
-Makefiles generated by @command{automake} expand @code{$(AM_MAKEFLAGS)}
-on the command line of submakes, which can be used for propagated overrides
-(@pxref{Subdirectories, , Automake, automake, GNU Automake}).
+...@example
+foo = foo
+one:
+        @@echo $(foo)
+        $(MAKE) $(SUBMAKEFLAGS) two
+two:
+        @@echo $(foo)
+...@end example
+
+Users must be aware that this technique is in use to take advantage of
+it, e.g.@: with @code{make foo=bar SUBMAKEFLAGS='foo=bar'}, but it
+allows any macro to be overridden.  Makefiles generated by
+...@command{automake} use this technique, expanding @code{$(AM_MAKEFLAGS)}
+on the command lines of submakes (@pxref{Subdirectories, , Automake,
+automake, GNU Automake}).
 
 @node The Make Macro MAKEFLAGS
 @section The Make Macro MAKEFLAGS

-- 
Ben Pfaff 
http://benpfaff.org

Reply via email to