When running a parallel build, redo-log -f (which is auto-started by
redo) tries to traverse through the logs depth first, in the order
parent processes started subprocesses. This works pretty well, but if
its dependencies are locked, a process might have to give up its
jobserver token while other stuff builds its dependencies. After the
dependency finishes, the parent might not be able to get a token for
quite some time, and the logs will appear to stop.
To prevent this from happening, we can instantiate up to one "cheater"
token, only in the foreground process (the one locked by redo-log -f),
which will allow it to continue running, albeit a bit slowly (since it
only has one token out of possibly many). When the process finishes,
we then destroy the fake token. It gets a little complicated; see
explanation at the top of jwack.py.
Smaller, easier, more powerful, and more reliable than make.
This is an implementation of Daniel J. Bernstein's redo
build system. He never released his
version, so other people have implemented different variants based on his
published specification.
This version, sometimes called apenwarr/redo, is probably the most advanced
one, including support for parallel builds, improved logging, and helpful
debugging features.
Discussions and support via the
mailing list.
You can subscribe by sending any email message to
redo-list+subscribe@googlegroups.com (note the plus sign).