http://code.dlang.org/packages/reggae

Daniel: see last paragraph (see, I mentioned your name! ;) )

Let's see if I can explain it better this time. Reggae is:

. An executable and a library of data definitions to describe build systems declaratively, in D. It also allows for imperative code when needed, since the definition language is D . A collection of low-level primitives to describe a build DAG, making completely arbitrary builds possible . A collection of high-level convenience rules for C, C++ and D builds . The high-level D rules provide a per-package compilation model by default, but there's a command-line switch to build per file
. Automatic dependency tracking for C, C++ and D builds
. Integrates with dub for package management, reggae delegates to it . An API to use dub project configurations, builds and source files . A seamless way to get out-of-tree builds with make or ninja for dub projects. No configuration needed! Simply type `reggae -b make /path/to/project` or `reggae -b ninja /path/to/project` from where you want to build it and that's that.

Reggae depends on `dub describe` to get the information from dub it requires to generate a build system. Unfortunately, "dub describe" is currently buggy for `dub.json` files with configurations, which are most of them. Fortunately, I fixed the bug and there's an open pull request at https://github.com/D-Programming-Language/dub/pull/577. If it doesn't work for you, clone my repo, build the dub version from there and make sure it's in your `PATH` when you run reggae. If your project happens to not have configurations in your dub.json, the latest dub release should work just fine.

You should get faster builds out of the box. I have to run more tests, but using the Ninja backend I managed to do a build of vibe.d 2x faster after changing `core.d` than the equivalent build using dub. I guess YMMV and is probably especially dependent on how many

Please try to use it and complain about the API so I (we?) can make it better. This for me is the bare minimum to make it work; there are several open questions I have myself, who knows what'd happen if someone were to use this for an actual production build. I'd write a blog about it but it's early days methinks.

I'm going to try and make the JSON dependency a compile-time option so that a version of reggae can be built that doesn't support dub. I'm also going to see if I can get a binary backend going that isn't particularly fast but works; the idea being to not depend on make, ninja, or in the future, tup.

Atila

Reply via email to