Table of Contents
Buildtool is, in short, a portable BSD-like build infrastructure. Basically, it provides a tool to adapt program sources to the actual system details (a process called automatic configuration) and another tool to build these sources and keep track of dependancies between them. These two main ideas are glued together by several other integrated tools. Furthermore, Buildtool provides some other utilities related to software development, ready to be used by the programmer.
Here is some basic terminology that we will be using in the whole book. You should get familiar with it before continuing.
Basic terminology
The set of files that form a software project, including all source code, documentation, build scripts or whatever is shipped together with it.
A software package that uses Buildtool as its build infrastructure.
A block of code within Buildtool that does an specific task.
The process of modifying source code according to specific system features (available functions, header files, programs, etc.).
Module list
Provides a set of shell functions useful to write automatic configuration scripts, together with frontend which parses options and executes the scripts in a consistent way. [1]
Creates compressed distribution files from the source package.
Shows build time information related to the actual package beeing built. It is a small documentation reader.
Verifies a buildtoolized package against a serie of rules and warns the developer about them. Helps in the creation of good packages that adhere to a basic set of standards.
Keeps track of dependancies between source and target files (objects, executables, etc.) and applies several rules to them (building, installation, cleaning, etc.) [2] It also has all the knowledge to call the compiler and linker in an abstract way, so multiple compilers can be easily supported [3].
Stores flags related to libraries needed at build time to link a given program against that specific library. [4]
A very small and fast shell interpreter. It is used all around Buildtool to parse script files, so you do not need to worry about compatibility issues with ancient shells. It also has several improvements over the standard shell, to make coding easier and parsing faster.
Aids the system administrator in the creation of system wide configuration files for other modules.
Generates a basic skeleton for a buildtoolized package based on a serie of interactive questions.
This section describes how Buildtool versions will be numbered. The version number has two levels of detail: the major version and the minor version, separated by a dot. The major version will be changed whenever incompatibilities are introduced in Buildtool; for example, if a package was designed with Buildtool 1.x in mind, it will not work with Buildtool 2.x. This is why you can have multiple Buildtool versions installed at the same time in the same system; the program will choose the right one for each package, if available.
The minor version will be changed when some improvements or bug fixes are done in a major branch, but without breaking upwards compatibility. For example, a package designed using Buildtool 1.0 will surely work with Buildtool 1.5, but not viceversa as newer versions may include new functions or features used by packages.
There is an exception, though. The 0.x branch does not follow the above conventions, at least until it is declared a release candidate. Changes in it can break compatibility without notice, as the API has not been stabilized yet. We will try to avoid such changes, or if done, warn developers accordingly to encourage them to update their packages.