(1) it completely gives up on atomicity
(2) it introduces YET ANOTHER half-arsed language based on textual
macroexpansion
(3) AFAICT, its reliance on FUSE and inotify means that it's closely
tied to Linux.
For me, (2) is a dealbreaker. I've dealt with far too much lossage
resulting from multiple levels of string-expansion to ever put myself
through that voluntarily. Though I'll note in tup's favour that it
allows for fine-grained build-rule tracking: each target depends
implicitly on the precise string that's executed.
As for the pretty output bar, I rather like redo's existing
tree-structured output :-)
Miles
I've never understood why tup didn't just track the commands to
execute. "command foo reads files A, B, C, and writes file X, Y".
How to rebuild X? run command foo!
The build system then becomes a simple shell script which runs the C
compiler. The magic dependency tracking then takes care of runnning
only the *minimal* commands the second time around.
Alan DeKok.
I assume because it's not that simple. How do you know what random
command "foo" does?
Also, how do you know what the arguments are?
--
________________________
Warm Regards
Prakhar Goel
LinkedIn Profile: http://www.linkedin.com/in/newt0311
See "tup". It uses LD_PRELOAD to catch open/unlink/execve, etc.
> Also, how do you know what the arguments are?
It catches calls to execve and friends. Then, writes the arguments
out to a permanent store.
It's actually pretty easy to do on modern OS's. See the "tup"
documentation and paper for how it's done. It's very nice.
Alan DeKok.
Like fabricate, you mean?
> The build system then becomes a simple shell script which runs the C
> compiler. The magic dependency tracking then takes care of runnning
> only the *minimal* commands the second time around.
I *think* that makes it harder to make global changes to the build
process: things like changing CFLAGS. Now *all* your cached cc
invocations are wrong. I suppose you could work around this by wrapping
the compiler in a shell script which sourced its configuration variables
from a file, but that's starting to get messy.
But yes, I don't see why tup insists on bottom-up builds. It should be
simple enough to make it do top-down builds as well.
Miles
Mildred has contacted me off-list to point out that tup has been ported
to Windows; I see it can also be installed on OS X via homebrew. Note to
self: next time I should actually check my facts before spreading FUD
based on my hazy memories. Sorry, everyone!
My point (2) is still valid, and I can't see any equivalent to redo's
atomicity guarantees - though as we've seen, it's tricky to get
atomicity and multiple outputs per rule. I'm becoming less and less sure
about the CFLAGS thing, though.
Miles