Hacker News new | ask | show | jobs
by Rochus 810 days ago
> GNU Autotools is too complicated, unnecessary, and stupid ... m4 is horrible ... Nobody has the time to review the mess these tools generate

These tools are generally much too complex. I don't think that e.g. CMake builds are easier to understand and analyze. From a certain size it's almost impossible to fully understand and check such a system.

One could argue that this is the case with any type of system. This is true, but you have to bear in mind that important findings and principles of software engineering from the last fifty years seem to have passed by without a trace, especially when it comes to build systems. For example, most of these systems still use dynamically typed scripting languages to specify the build, even though these are increasingly being replaced by better languages due to their well-known disadvantages, e.g. languages that are accessible to a static check at compile time using suitable tools, or that do not leave the discovery of errors and backdoors to chance discovery at runtime.

Autotools, CMake, Qmake and even newer developments such as Meson or GN suffer from the same problems.

> There’s better build systems like CMake or meson (at least that’s what I’m told), but in fact plain Makefiles are superior.

There is no reason for this assumption. Non of these tools supports e.g. static analysis.

2 comments

No, not all build systems are the same. CMake doesn't rely on generated scripts like autotools does.
CMake - as autotools - is a meta build system; it e.g. generates make files, which are essentially scripts. Also CMake itself is essentially a VM with a scripting language. Both CMake and Make are Turing complete (and dynamically typed, as mentioned). And yes, not all build systems are the same; e.g. https://github.com/rochus-keller/BUSY has a statically typed specification language and intentionally avoids a Turing complete language.
The Makefiles CMake generates are not distributed in the tarball. So no, we are not talking about apples to apples.
The OP was talking about complexity:

> These tools are generally much too complex. I don't think that e.g. CMake builds are easier to understand and analyze

From my experience (as a non programmer) CMake is much hearder to debug than autotools.

I don't agree... Meson has constraints that make it very easy to write and review.
Which require runtime to check, isn't it?

Anyway, such constraints are also available in GN, and in CMake or Autotools you can implement them yourself, but they suffer from the same restriction I mentioned (not amenable to static analysis, limited verifiability at runtime due to combinatorial explosion of possible system states, etc.).