https://code.dlang.org/packages/reggae
For those who don't know, reggae is a meta-build system for and in D. It's like CMake, if you replace their terrible language with D*. Like CMake, it can output make and ninja files. Unlike CMake, it can also output tup files and has its own binary generator in case the dependency on one of those programs is undesired. Also unlike CMake, it supports dub projects out-of-the-box by using dub as a library.
TL;DR: you can use to build your dub project and it'll be faster and not rebuild the whole thing if you only change one module**.
Highlights of this release:
When dinosaurs roamed the Earth, dmd -makedeps
didn't work so to automatically handle dependencies between D modules reggae had to wrap the compiler with a binary named dcompile
. This would call the compiler with -v
, get the imports from the output, and use them to only rebuild what was necessary. Now that dmd -makedeps
got fixed, the extra complication (and time to build the extra binary) is gone.
Default dub builds are much faster now. Before, reggae would create a reggaefile.d if one didn't exist for dub projects. I got tired of waiting for the compiler, and realised that I don't actually have to compile D code on-the-fly if I know ahead of time what the code is anyway. Now, reggae immediately*** spits out the build files for such projects.
Automatically detect when new files are added/deleted: this is the main reason that the CMake devs erroneously advise people to not use "globs" to just "give me all the source files". The issue is when the file list changes, you need to remember to rerun the metabuild system to detect the filesystem changes. No more: reggae builds now rerun reggae when files are added or deleted. Tup, of course, has always done this but it's the only one I know of that did.
Before, if the compiler binary changed, then... oops it was if you rebuilt in between updating your distro. Now the object files depend on the compiler binary.
- Or Python, Ruby, Javascript, or Lua.
** Unless you made every module depend on every other module, in which case, don't do that.
** dub can be slow to start up. Slows for me is ~200ms.