The Waf framework

Build systems make assumptions on software it is trying to build, and are typically limited where it comes to processing other languages or different projects. For example, Ant is better suited than Make for managing Java projects, but is more limited than Make for managing simple c projects.

There are so many different languages that creating a build system to support all the possible kind of projects out-of-the-box is likely to be difficult. It is much more interesting to create one which can be extended easily.

The Waf framework is somewhat different than build systems, in the sense that it is essentially a library of components that are suitable for use in a build system. The default distribution contains various plugins for different programming languages and different tools (c, d, ocaml, java, etc).