This build system is very different to the old build system, and is much
more inuitive.
It leverages a hand made configure script to generate the Makefile. The
listener is no longer auto-detected, unless specifically specified, and
no longer activated by default. That is not the place for a build system.
Along with the focus of moving to distribution repositiories, this 'feature'
is clearly unwanted by distributions.
Multiple listeners are now also supported, primarily for distributions.
Lastly, parallelism now works as well.
This make it easier to manage separate compilation units (static functions and
global variables, local type definitions, etc.)
The generated header file `functions.h' caused a circular dependency problem;
it wasn't updated automatically when changes were made to the sources (e.g.
new function definition). The sources can't be in the dependency list of
`functions.h' in the Makefile, because `functions.h' is in the dependency list
of each source file. GNU make is able to ignore the circular dependency but not
BSD make.
At any rate, keeping the prototype list up-to-date is easy, because the
compiler will complain if a function is used in a compilation unit but defined
in an other one.
It also makes static analysis easier out of the box.