10.7. Deleted Build Item

Here we present a new series of build trees located under doc/example/general/user. These build trees back to our task and reference build trees from earlier examples. We will use these build trees to illustrate the use of the deleted key in a build tree's root build item's Abuild.conf.

Suppose we have a user who is working on changes that are related in some way to the task branch. We want to create a user branch that backs to the task branch. Our user branch contains all three areas: common, project, and derived. We will ignore derived for the moment and focus only common and project. Observe that common contains only the lib1 directory and that project contains only the lib directory. We make a gratuitous change to a source file in common-lib1.src just as another example of shadowing a build item from our backing area. Since our task branch didn't contain common, the common in our user branch has to back to reference. Here is user/common/Abuild.backing:

general/user/common/Abuild.backing

../../reference/common

For a diagram of the user build trees, see Figure 10.5, “Build Trees in general/user.

Figure 10.5. Build Trees in general/user

Build Trees in general/user

The derived build tree in the user area declares the project build tree as an external. The project build tree in the user area declares the common build tree as an external. Each backs to its corresponding build tree in task except common. Since common does not exist in the task branch, common in the user area backs directly to common in reference.


In project, we have made changes to project-lib to make use of private interfaces, which we discuss in Chapter 20, Interface Flags and will ignore for the moment. We have also deleted the new build item project-lib.extra that we added in the task branch. To delete the build item, we removed the extra directory from project/lib and from the child-dirs key in project/lib/Abuild.conf:

general/user/project/lib/Abuild.conf

this: project-lib
parent-dir: ..
child-dirs: src test
deps: project-lib.src

That in itself was not sufficient since, even though the extra directory is no longer present in the child-dirs key of project-lib's Abuild.conf, we would just inherit project-lib.extra from our backing area. To really delete the build item, we also had to add a deleted key in user/project's Abuild.conf:

general/user/project/Abuild.conf

external-dirs: ../common
child-dirs: main lib
supported-traits: interesting
deleted: project-lib.extra

This has effectively prevented abuild from looking for project-lib.extra in the backing area chain. If any build item in the local tree references project-lib.extra, an error will be reported because abuild now considers that to be an unknown build item.