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