Chapter 1. Introduction

Table of Contents

1.1. Basic terminology
1.2. Modules
1.3. Versioning

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.

1.1. Basic terminology

Here is some basic terminology that we will be using in the whole book. You should get familiar with it before continuing.

Basic terminology

Package

The set of files that form a software project, including all source code, documentation, build scripts or whatever is shipped together with it.

Buildtoolized package

A software package that uses Buildtool as its build infrastructure.

Module

A block of code within Buildtool that does an specific task.

Source configuration

The process of modifying source code according to specific system features (available functions, header files, programs, etc.).

1.2. Modules

Module list

bt_config

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]

bt_dist

Creates compressed distribution files from the source package.

bt_doc

Shows build time information related to the actual package beeing built. It is a small documentation reader.

bt_lint

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.

bt_logic

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].

bt_pkgflags

Stores flags related to libraries needed at build time to link a given program against that specific library. [4]

bt_sh

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.

bt_swcgen

Aids the system administrator in the creation of system wide configuration files for other modules.

bt_wizard

Generates a basic skeleton for a buildtoolized package based on a serie of interactive questions.

1.3. Versioning

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.



[1] This is similar to the GNU autoconf program.

[2] This is similar to the GNU automake program.

[3] This is somewhat similar to the GNU libtool program.

[4] This is similar to the GNU pkgconfig program.