Button: A fast, correct, and elegantly simple build system.
    Jason White via Digitalmars-d-announce 
    digitalmars-d-announce at puremagic.com
       
    Mon May 30 12:16:50 PDT 2016
    
    
  
I am pleased to finally announce the build system I've been 
slowly working on for over a year in my spare time:
     Docs:   http://jasonwhite.github.io/button/
     Source: https://github.com/jasonwhite/button
Features:
- Correct incremental builds.
- Automatic dependency detection (for any build task, even shell 
scripts).
- Build graph visualization using GraphViz.
- Language-independent. It can build anything.
- Can automatically build when an input file is modified (using 
inotify).
- Recursive: It can build the build description as part of the 
build.
- Lua is the primary build description language.
A ton of design work went into this. Over the past few years, I 
went through many different designs and architectures. I finally 
settled on this one about a year ago and then went to work on 
implementing it. I am very happy with how it turned out.
Note that this is still a ways off from being production-ready. 
It needs some polishing. Feedback would be most appreciated (file 
some issues!). I really want to make this one of the best build 
systems out there.
Here is an example build description for DMD:
     https://github.com/jasonwhite/dmd/blob/button/src/BUILD.lua
I'd say that's a lot easier to read than this crusty thing:
     https://github.com/dlang/dmd/blob/master/src/posix.mak
In fact, there is some experimental support for automatic 
conversion of Makefiles to Button's build description format 
using a fork of GNU Make itself: 
https://github.com/jasonwhite/button-make
Finally, a few notes:
- I was hoping to give a talk on this at DConf, but sadly my 
submission was turned down. :'(
- I am aware of Reggae, another build system written in D. 
Although, I admit I haven't looked at it very closely. I am 
curious how it compares.
- You might also be interested in the two other libraries I wrote 
specifically for this project:
   - https://github.com/jasonwhite/darg (A command-line parser)
   - https://github.com/jasonwhite/io (An IO streams library)
    
    
More information about the Digitalmars-d-announce
mailing list