Button: A fast, correct, and elegantly simple build system.

Jason White via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Sun Jun 12 15:59:15 PDT 2016


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 
it.

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 
value"
- "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.


More information about the Digitalmars-d-announce mailing list