www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - [GSoC 2026] Ninja Build Backend for DUB, wrap-up

reply Hariprakash <hariprakash4389285 gmail.com> writes:
Hi everyone,

I'm Hariprakash, this summer's GSoC contributor working on a 
native Ninja build backend for dub, mentored by Atila Neves. I 
should have been posting weekly updates here like others in the 
cohort and didn't, apologies for the silence. Sharing the full 
wrap-up now that coding is done.

What it does

dub currently invokes the compiler directly on every build, no 
persistent build graph, no incremental tracking, no parallelism 
across independent modules. This adds dub generate ninja, 
producing a correct build.ninja without changing how anyone 
already uses dub.

What got built

Generator skeleton, valid build.ninja for single and multi file 



Self-regeneration, build.ninja re-invokes dub generate ninja when 


DMD/LDC/GDC support through dub's existing compiler flag 
translation

Challenges

The most useful feedback all summer was on what a test actually 
proves. My first -makedeps patch got rejected for testing 
incidentals, grepping generated text instead of behavior. I 
rewrote it so the test proves dependency tracking actually works 
end to end.

Also hit a real Windows bug. Unescaped colons in Windows paths 
were breaking Ninja's own colon syntax, since C:\ collides with 
Ninja's target:deps separator. Building on Windows from day one, 
as planned, caught this early instead of it turning into a field 
bug later.

Where it stands

Everything in the proposal is merged into dlang/dub. CI is green 
apart from a pre-existing Alpine LDC linker failure unrelated to 
this work. What's left is user-facing documentation for dub 
generate ninja, covering options, self-regeneration behavior, and 
incremental rebuild semantics.

Full write-up: 
https://gist.github.com/hariprakazz/2acafdf8b58fa6d8adafa85667c097be

Thanks to Atila for direct, honest review all summer, it made the 
project better even when it meant redoing things.
Aug 25
parent reply Basile B. <b2.temp gmx.com> writes:
On Tuesday, 25 August 2026 at 08:06:32 UTC, Hariprakash wrote:
 Hi everyone,

 I'm Hariprakash, this summer's GSoC contributor working on a 
 native Ninja build backend for dub, mentored by Atila Neves. I 
 should have been posting weekly updates here like others in the 
 cohort and didn't, apologies for the silence. Sharing the full 
 wrap-up now that coding is done.

 [...]
That's an intersting project. I remember there has been tensions in the dlang-community group (d-scanner, dcd, etc.) toward the ninja build system. Does that mean that now there's no need for things like making PRs for updating the Meson things ?
Aug 25
parent Hariprakash <hariprakash4389285 gmail.com> writes:
On Tuesday, 25 August 2026 at 17:08:24 UTC, Basile B. wrote:
 On Tuesday, 25 August 2026 at 08:06:32 UTC, Hariprakash wrote:
 Hi everyone,

 I'm Hariprakash, this summer's GSoC contributor working on a 
 native Ninja build backend for dub, mentored by Atila Neves. I 
 should have been posting weekly updates here like others in 
 the cohort and didn't, apologies for the silence. Sharing the 
 full wrap-up now that coding is done.

 [...]
That's an intersting project. I remember there has been tensions in the dlang-community group (d-scanner, dcd, etc.) toward the ninja build system. Does that mean that now there's no need for things like making PRs for updating the Meson things ?
Good question. This is additive, not a replacement, dub generate ninja sits alongside the existing generators (visuald, sublimetext, cmake) as another opt-in output format. It doesn't touch how Meson-based projects build, and I don't have visibility into the broader Meson-vs-Ninja discussions in dlang-community, so I can't speak to whether it changes anyone's plans there. From dub's side, nothing about existing workflows changes unless a user explicitly runs the new command.
Aug 26