4.3. Build Trees

A build tree, as defined before, is a collection of build items arranged hierarchically in the file system. A build tree is formed as a result of the items it contains holding references to the locations of their parents and children within the file system hierarchy. These locations are named as relative paths in the parent-dir and child-dirs keys of the items' Abuild.conf files. Ordinarily, the value of the parent-dir key is “..”, but it doesn't have to be. It is also customary to have the value of child-dirs contain single path elements (i.e.just a file without a directory), but this is also not a hard restriction. When abuild starts up, it looks for an Abuild.conf in the current directory and looks for its parent-dir key. Using that, it locates the parent build item's Abuild.conf file and reads it for its parent-dir key. This process is repeated until abuild discovers a build item that does not have a parent-dir key. This build item is known as the root build item of the build tree.

Note that the hierarchy defined by the layout of build items in the file system is a file system hierarchy and nothing more. It doesn't have to have any bearing at all on the dependency relationships among the build items. [8] That said, it is sensible to organize build items in a manner that relates to the architecture of the system, and this in turn usually has implications about dependencies. Still, it is important to keep in mind that abuild is not file-system driven but rather is dependency driven.

In addition to containing build items, build trees can contain other attributes. Among these are references to other build trees, a list of supported traits, and a list of plugins. We will discuss these topics later in the document. Most of a build tree's attributes appear in the root build item's Abuild.conf file.



[8] This information is used only at startup to locate the root of the build tree and to find the locations of all of the build items in the tree so that they may be later referred to only by name. In fact, abuild doesn't even retain the information about the parents and children of build items in the file system after it uses the information during startup.