                                                            -*-Indented-Text-*-
GNU Make TODO List
------------------

This list comes both from the authors and from users of GNU make.

They are listed in no particular order!

Also, I don't gaurantee that all of them will be ultimately deemed "good
ideas" and implemented.  These are just the ones that, at first blush,
seem to have some merit (and that I can remember).

However, if you see something here you really, really want, speak up.
All other things being equal, I will tend to implement things that seem
to maximize user satisfaction.

Also, this list doesn't include things which I'm pretty sure would
require serious, fundamental change to GNU make; those things belong on
the mythical "Make 4.0" list.  I admit, that line can be somewhat fuzzy :)


  * Per-target variable definitions (a la SunOS make's ":=" feature, but
    note the syntax here will definitely be different!)

  * Multi-token pattern rule matching (allow %1/%2.c : %1/obj/%2.o, etc.)

  * More robust clock skew detection algorithm.

  * Provide MAKETARGETS and MAKEVARIABLES variables, containing the
    names of the targets and variables defined in the makefile.

  * If the user asks for parallelization, rebuild any "include"'d files
    in parallel as well (helps esp. when there are many .d files to be
    built).

  * Allow variables/functions to expand to other make rules which are
    then interpreted, with newlines handled correctly.

  * More intelligent submake handling when doing parallel makes:
    currently each submake gets a "-j 1" option.  It would be good if
    make was smart enough to give some/all its slots to the submake
    (esp. if there is no other rule that can be run by the parent in
    parallel, a common situation).  Doing this perfectly might be too
    hard, but something less than perfect is certainly possible.

  * Option to check more than timestamps to determine if targets have
    changed (MD5 checksumming?)

  * Some sort of operating-system independent way of handling paths
    would be outstanding, so makefiles can be written for UNIX, VMS,
    DOS, MS-Windows, Amiga, etc. with a minimum of specialization.
