Subject: bug#13349: [IMPORTANT] Could we just assuming support for make recursive variable expansion unconditionally?

From: Stefano Lattarini <[email-masked]>
Date: Thu, 03 Jan 2013 19:54:48 +0100

Severity: wishlist

[This is posted also to the automake list to ensure a wider audience.
 Discussion should continue exclusively on the bug-automake list.]

The known make implementations that does not support recursive variable
expansion -- as in $(foo_$(bar)) -- should by today be either very old
or very "fringe"; so it would be nice if, starting from Automake 1.14,
we could begin assuming unconditionally that this feature is supported.

Users of those old-and-poor make implementations can still download
and install GNU make (which, as we all know, doesn't require a
pre-existing make installation to be bootstrappped).

This change would simplify our codebase a little, would reduce the
number of configure-time checks for the client packages (eventually,
at first we should still check for our intended feature, and bail
out loudly and with a clear error message if that is not working),
and also reduce the differences between mainline Automake an
Automake-NG.

Of course, we should first ensure that our estimate on how support for
recursive make variable expansion is effectively widespread is correct.

So, here is the tentative roadmap:

* Automake 1.13.2

  - Add a 'spy-make-recurs-var.sh' test verifying that the make
    implementation used in the testsuite truly support recursive
    variable expansion..

  - Enhance the checks in the AM_SILENT_RULES macro to print a loud
    message at configure runtime if the make implementation on the
    system isn't able to grasp recursive variable expansion, telling
    the user to report the situation to our upstream (bug-automake).
    This is of paramount importance for us to know how the situation
    "in the wild" really is.  In the past, Autoconf did something
    similar to ensure the presence of shell functions in all the
    shells worth supporting.

* Automake 1.14 (assuming no relevant complaints has been received in
  the previous "probing" step).

  - Just assume, throughout our codebase, that '$(foo_$(var))' works.
    Related simplifications and refactorings.

  - Have AM_SILENT_RULES abort configure with a fatal error if the
    make implementation on the system isn't able to grasp recursive
    variable expansion.

  - Make the 'portability-recursive' warnings a no-op, and have their
    use print a warning in either the 'obsolete' and 'unsupported'
    category.

* Automake 1.15

  - Remove all the runtime checks from AM_SILENT_RULES; the only role
    of this macro will at this point be the ability to set the
    default verbosity, and to implement the '--enable-silent-rules'
    and '--disable-silent-rules' configure options.

  - Remove the 'portability-recursive' warnings altogether.

Comments would be welcome.  Patches even more so ;-) (especially for
what concerns the changes intended for 1.13.2).