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

Jason White via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Tue May 31 21:22:55 PDT 2016


On Tuesday, 31 May 2016 at 10:15:14 UTC, Atila Neves wrote:
> On Monday, 30 May 2016 at 19:16:50 UTC, Jason White wrote:
>> I am pleased to finally announce the build system I've been 
>> slowly working on for over a year in my spare time:
>>
>> snip
>> 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
>
> I'm going to take a look at that!

I think the Makefile converter is probably the coolest thing 
about this build system. I don't know of any other build system 
that has done this. The only problem is that it doesn't do well 
with Makefiles that invoke make recursively. I tried compiling 
Git using it, but Git does some funky stuff with recursive make 
like grepping the output of the sub-make.

>> - Can automatically build when an input file is modified 
>> (using inotify).
>
> Nope, I never found that interesting. Possibly because I keep 
> saving after every edit in OCD style and I really don't want 
> things running automatically.

I constantly save like a madman too. If an incremental build is 
sufficiently fast, it doesn't really matter. You can also specify 
a delay so it accumulates changes and then after X milliseconds 
it runs a build.

>> - Recursive: It can build the build description as part of the 
>> build.
>
> I'm not sure what that means. reggae copies CMake here and runs 
> itself when the build description changes, if that's what you 
> mean.

It means that Button can run Button as a build task (and it does 
it correctly). A child Button process reports its dependencies to 
the parent Button process via a pipe. This is the same mechanism 
that detects dependencies for ordinary tasks. Thus, there is no 
danger of doing incorrect incremental builds when recursively 
running Button like there is with Make.

>> - Lua is the primary build description language.
>
> In reggae you can pick from D, Python, Ruby, Javascript and Lua.

That's pretty cool. It is possible for Button to do the same, but 
I don't really want to support that many languages. In fact, the 
Make and Lua build descriptions both work the same exact way - 
they output a JSON build description for Button to use. So long 
as someone can write a program to do this, they can write their 
build description in it.


More information about the Digitalmars-d-announce mailing list