On Sunday, 12 June 2016 at 11:06:23 UTC, Fool wrote:
Nice work! I'm wondering how Button would compare in the Build
System Shootout (https://github.com/ndmitchell/build-shootout).
It does pretty well. I even looked over this as I was designing
Here's the test cases it succeeds at:
- "basic: Basic dependency"
- "parallel: Parallelism"
- "include: C #include files"
- "wildcard: Build a file specified by an extension wildcard"
(Via generating the build description.)
- "spaces: Build a file containing spaces"
- "monad1: Monadic patterns"
- "monad2: More monadic patterns"
- "monad3: More monadic patterns"
- "unchanged: Handle files which do not change"
- "multiple: Rules with multiple outputs"
- "digest: Don't rebuild when a file is modified to the same
- "nofileout: Don't produce an output file"
And the ones it fails at:
- "system1: Dependency on system information" (Because tasks with
no dependencies are only run once. This could be changed easily
enough, but I don't see the point.)
- "system2: Dependency on system environment variable" (Button
doesn't know about environment variables.)
- "pool: Limit the parallelism in a specific stage" (I'm not sure
how useful this is, but it could be added.)
- "secondary: Secondary target" (I think this is incorrect
behavior and not a feature.)
- "intermediate: Intermediate target" (Same reason as
"secondary". If this is really needed, it should be encapsulated
inside a single task.)
As for the "Build System Power" section:
- Yes: Pre dependencies
- Yes: Post dependencies
- Yes: Mid dependencies
- Yes: Auto post dependencies
- Not yet: Auto cached commands
I'd say it's more robust than any other single build system
there, but I'm biased. :-)
I should probably make a pull request to add it to the shootout.