reggae v0.10.0 - The meta build system just got better

Atila Neves atila.neves at gmail.com
Thu Sep 7 17:34:48 UTC 2023


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.


More information about the Digitalmars-d-announce mailing list