So, the 3rd big flurry of make commits is gone. Things should be stable
for a little while.
There have been very significant improvements in make behavior over the
last few weeks.
- there's a single job runner for both parallel and sequential make, with
better performance and control than before. Basically, it just waits for
signals (sigchld or otherwise) and takes action: 0 cpu during normal work.
More interestingly, multiple jobs are now run without any special process
groups nor pipes (there is no longer a shell control process for a given
job, so printing out mostly happens from within make proper).
So tty interaction now works exactly the same with parallel mode an with
normal mode.
- the parser now recognizes multiple targets on the same line, and deals
with them accordingly.
Parallel make *will* now refrain from building multiple racing targets at the
same time. Stuff like
parse.c parse.h: parse.y
some_yacc_rule
now works (this was surprisingly fast to write and debug actually).
- error message locations actually correspond to reality now. They give
a bit more info, and have been compressed a bit so that they don't scroll
off the screen too easily...
- there has been a mostly complete revamp of the man page. While we've lost
part of the quirky charm of ye old pmake vocabulary, the description now
looks more like a proper manpage, with reasonably standard terminology, and
it actually describes how important stuff should work (you know, .SUFFIXES
rules and all that).
- the conditional parser just got a little less quirky.
There is *still* one significant piece of work that was not done.
We still have separate dependency engines for make -j and make -B.
I intend to rewrite that part so that make -B can die (basically,
make -j1 should evaluate things in the exact same order that -B does.
Well, currently it doesn't: make -B is more or less depth-first, and
make -j1 is more or less breadth-first). That will obviously take some
time.
Thanks to everyone who helped so far !