Build Environment Effort/Problems
Contents
Major problems (in progress)
Unreliable dependencies
Every user of our build system sooner or later has a build that breaks due to missing or wrong dependencies. There are two kinds of dependencies:
- module dependencies (read from the build.lst files in the modules) that tell which modules have to be built as prerequisites
- generated dependency files (generated by mkdepend, contains e.g. header prerequisites for C++ source files
The generated dependency files don't go beyond "delivered" headers. So they e.g. don't contain dependencies on idl files, just on the generated headers.
So the build must be done by building each module in the correct order, thus our build system relies on properly maintained build.lst files, but unfortunately it does not discover wrong files easily because the build tool (build.pl) never sees the complete dependency tree. So wrong dependencies can slip in and stay unnoticed for quite some time until someone "by luck" discovers them.
Another problem is that in the Sun environment generated dependencies don't go beyond module boundaries so that "incompatible" changes must be announced to the release engineers or the milestone build will break. In an incompatible build the output of all modules above the point of incompatibility is discarded, even if it wasn't related to the incompatible change.
Time consuming target check
Because our dependencies are not based on real targets and prerequisites but on modules, the build always steps through all modules. The traversal of the source tree takes some time, especially on Windows.
Insufficient scalability
Handmade system
Our build tools (dmake, several perl scripts) are completely unknown in the outside world