VR Juggler as a whole is a cross-platform software system. Porting to new operating systems is a non-trivial task, and spending time porting the build system to new platforms is time that could be spent more effectively. Speaking less abstractly, before the source code can be ported to a new platform, the build system has to be capable of compiling the source code on the new platform. For that reason, it is important that the entire build system can be put to use right away so that the attention can be devoted to the more difficult task of porting C++ code.
The VR Juggler build system is limited in its portability by the
portability of Doozer++. To its credit, Doozer++ is more portable than VR
Juggler at this time, so the VR Juggler team still has some room to
move. Even so, the VR Juggler build has its own quirks, and thus,
people writing the code to build VR Juggler must always have
portability in mind. For example, “BASH-isms” must never
appear in VR Juggler configure scripts or makefiles. Most Linux
distributions may use BASH for /bin/sh, but that certainly
does not meant hat all operating systems vendors follow that
unfortunate trend.
In keeping with the Doozer++ goal of separating tools and tasks, the VR Juggler build system offers good portability by putting all of the platform- and software-specific pieces in Autoconf configure scripts. In so doing, the makefiles rarely, if ever, have to be modified when a new platform is added to the list. Furthermore, makefiles for GNU make lack sufficient programmatic constructs to provide developers with the ability to write tests that provide more than limited portability. While the Doozer software is relatively portable through its use of GNU make and platform-specific makefiles, it is missing the expressiveness of something based on Autoconf (or a similar tool). As discussed in the previous chapter, the use of make(1) alone for portability requires much effort to make hard-coded, platform- and site-specific makefiles.