1 -*-Indented-Text-*- 2GNU Make TODO List 3------------------ 4 5This list comes both from the authors and from users of GNU make. 6 7They are listed in no particular order! 8 9Also, I don't gaurantee that all of them will be ultimately deemed "good 10ideas" and implemented. These are just the ones that, at first blush, 11seem to have some merit (and that I can remember). 12 13However, if you see something here you really, really want, speak up. 14All other things being equal, I will tend to implement things that seem 15to maximize user satisfaction. 16 17If you want to implement some of them yourself, barring the ones I've 18marked below, have at it! Please contact me first to let me know you're 19working on it, and give me some info about the design--and, critically, 20information about any user-visible syntax change, etc. 21 22 23The Top Item 24------------ 25 26If you know perl (or want to learn DejaGNU or similar), the number one 27priority on my list of things I don't have time to do right now is 28fixing up the GNU make test suite. Most importantly it needs to be made 29"parallelizable", so more than one regression can run at the same time 30(essentially, make the "work" directory local). Also, the CWD during 31the test should be in the work directory or, better, a test-specific 32temporary directory so each test gets a new directory; right now 33sometimes tests leak files into the main directory which causes 34subsequent tests to fail (some tests may need to be tweaked). Beyond 35that, any cleanup done to make writing, reading, or handling tests 36simpler would be great! Please feel free to make whatever changes you 37like to the current tests, given some high-level goals, and that you'll 38port the current tests to whatever you do :). 39 40 41The Rest of the List 42-------------------- 43 44 1) Option to check more than timestamps to determine if targets have 45 changed. This is also a very big one. It's _close_ to my plate :), 46 and I have very definite ideas about how I would like it done. 47 Please pick something else unless you must have this feature. If 48 you try it, please work _extremely_ closely with me on it. 49 50 1a) Possibly a special case of this is the .KEEP_STATE feature of Sun's 51 make. Some great folks at W U. in Canada did an implementation of 52 this for a class project. Their approach is reasonable and 53 workable, but doesn't really fit into my ideas for #2. Maybe 54 that's OK. I have paperwork for their work so if you want to do 55 this one talk to me to get what they've already done. 56 57 [K R Praveen <praveen@cair.res.in>] 58 59 2) Currently you can use "%.foo %.bar : %.baz" to mean that one 60 invocation of the rule builds both targets. GNU make needs a way to 61 do that for explicit rules, too. I heard a rumor that some versions 62 of make all you to say "a.foo + a.bar : a.baz" to do this (i.e., a 63 "+" means one invocation builds both). Don't know if this is the 64 best syntax or not... what if you say "a.foo + a.bar a.bam : a.baz"; 65 what does that mean? 66 67 3) Multi-token pattern rule matching (allow %1/%2.c : %1/obj/%2.o, 68 etc., or something like that). Maybe using regex? 69 70 4) Provide a .TARGETS variable, containing the names of the targets 71 defined in the makefile. 72 73 Actually, I now think a $(targets ...) function, at least, might be 74 better than a MAKETARGETS variable. The argument would be types of 75 targets to list: "phony" is the most useful one. I suppose 76 "default" might also be useful. Maybe some others; check the 77 bitfields to see what might be handy. 78 79 5) Some sort of operating-system independent way of handling paths 80 would be outstanding, so makefiles can be written for UNIX, VMS, 81 DOS, MS-Windows, Amiga, etc. with a minimum of specialization. 82 83 Or, perhaps related/instead of, some sort of meta-quoting syntax so 84 make can deal with filenames containing spaces, colons, etc. I 85 dunno, maybe something like $[...]? This may well not be worth 86 doing until #1 is done. 87 88 6) Right now the .PRECIOUS, .INTERMEDIATE, and .SECONDARY 89 pseudo-targets have different capabilities. For example, .PRECIOUS 90 can take a "%", the others can't. Etc. These should all work the 91 same, insofar as that makes sense. 92 93 7) Improved debugging/logging/etc. capabilities. Part of this is done: 94 I introduced a number of debugging enhancements. Tim Magill is (I 95 think) looking into options to control output more selectively. 96 One thing I want to do in debugging is add a flag to allow debugging 97 of variables as they're expanded (!). This would be incredibly 98 verbose, but could be invaluable when nothing else seems to work and 99 you just can't figure it out. The way variables are expanded now 100 means this isn't 100% trivial, but it probably won't be hard. 101 102 8) Integration of Guile as an embedded scripting language. This means: 103 allowing Guile functions to be declared in makefiles somehow, then 104 providing a syntax for invoking them. At least one formulation of 105 that would have the function resolve to a string which would be 106 substituted in the makefile, kind of like $(shell ...) does now, but 107 using the embedded interpreter so there's no process forked of 108 course. Obviously this is an optional add-on feature. 109 110 It could be more advanced than that, even, who knows? Maybe make 111 could provide Guile functions that allow Guile scripts more direct 112 access to internal make structures, somehow. This kind of thing 113 needs a lot of thought. 114 115 Also there's always the flip side: in some very fundamental ways 116 make isn't the best choice right now for a complex build tool. It's 117 great for simple-to-medium tasks, but there are already other tools 118 available for the really tough situations. Ask yourself, 119 realistically, how much work is worthwhile to add to make, given the 120 fundamentals you can't really overcome without significantly 121 affecting backward compatibility--and then why not use another tool 122 in the first place? 123 124 Something to think about. 125 126 127------------------------------------------------------------------------------- 128Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 1292007, 2008, 2009, 2010 Free Software Foundation, Inc. 130This file is part of GNU Make. 131 132GNU Make is free software; you can redistribute it and/or modify it under the 133terms of the GNU General Public License as published by the Free Software 134Foundation; either version 3 of the License, or (at your option) any later 135version. 136 137GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY 138WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR 139A PARTICULAR PURPOSE. See the GNU General Public License for more details. 140 141You should have received a copy of the GNU General Public License along with 142this program. If not, see <http://www.gnu.org/licenses/>. 143