On Saturday, 17 June 2017 at 21:49:29 UTC, Walter Bright wrote:
It's not quite the same. I spend 99.99% of my time programming working with code, not makefiles.

Martin and Sebastian can correct me if I'm wrong, but unless I am, Martin, Sebastian, and myself spend a scary amount of time wrestling with makefiles. We have had bad production issues due to makefiles, such as missing dependencies causing inconsistent or broken builds (notably observable when something works only without -j), typos or undefined variables resulting in bugs being silently ignored (hey, I filed a PR to fix one of those not half an hour ago - dmd#6916), CI checks being accidentally completely switched off (which happened more than once!), the win32.mak / win64.mak / posix.mak mess, super-ugly hacks due to limitations of Make that slow down the build unconditionally and/or make everything much more fragile and complicated... and I could go on.

Which is not to say that I think we need to get off makefiles ASAP. Migrating to anything else is going to undoubtedly incur a massive migration cost and for a long time, a big maintenance cost (especially if it involves dogfooding). I agree with many of your arguments as well.

I think you're not encountering much of the problems with makefiles because you're mainly dealing with DMD, whose build process is relatively simple - and even there, the build process is mostly maintained these days by other people. In comparison, the build process for dlang.org has been getting much more complicated with time (partially because of some technical debt and fragmentation, but also simply because we want to do more things like nice runnable examples, various pre-processing / post-processing / validation, building the spec from the compiler source, etc.

If anyone wants to SERIOUSLY propose a plan to migrate from makefiles, I'd be interested to look at it. However, its benefits obviously must outweigh the maintenance costs of current makefiles, as well as not raising the contribution barrier too much.

Some requirements would be:

- Obvious syntax - making a change such as adding a new target or dependency should be obvious just from looking at the existing code.

- Performance - shouldn't have considerable overhead; but also, it shouldn't take 10 seconds to "rebuild" the build tool itself after every modification.

- Cross-platform support - this may seem obvious, but it should support at least all platforms DMD supports. One of the suggestions for replacement in a similar recent thread (http://forum.dlang.org/post/ohkkqj$21lg$1...@digitalmars.com), buildsome, shows no indication of any Windows support at all, not even plans to work on it.

- Minimal dependencies - ideally it should work with as few as possible external dependencies that one would typically need to install to build D. Windows is very often overlooked when evaluating this requirement, for example although Python is ubiquitous on POSIX systems, it's much less so on Windows.

That doesn't leave many candidates. reggae might be the closest to satisfying all of the above, though I haven't looked too closely at it. For one thing, I don't really understand the need for build system generators - seems like an extra step and imposing an implementation detail on the user.

Reply via email to