About
Simply put, Buildtool is a build infrastructure. It has the following features:
- Automatic configuration scripts: Buildtool lets you write simple, but yet powerful, automatic configuration scripts. These are used to check for features of the build system and adapt the software package to build properly in it.
- Build scripts:: With Buildtool you can also write build scripts. These are used to build and install a software package in the build system. They let you compile any kind of package, ranging from standalone utilities to shared libraries, and in a very simple way, which hides all details of the build host.
- Free: Buildtool is completely free, licensed under the terms of a three clause BSD license. This basically means that it perfectly suits free and commercial development. Other tools are GPL licensed, which may make them less attractive for commercial projects, or even for some free ones!
- Modular: Buildtool is clearly split in several modules, each one doing an specific task. Even though, all parts are highly integrated, and are all handled through a single wrapper.
- No generated files:
Unlike other build utilities, Buildtool must be installed on the
system before compiling software packages; its scripts are not
standalone. The advantadges of this approach are clear: it has no need
to generate huge files like
configure scripts (coming from GNU autoconf) norMakefile.in files (coming from GNU automake), which use a big amount of space in distribution files. It also allows all packages to automatically benefit from fixes in Buildtool, without having to regenerate the files included in the distribution. As a disadvantadge, you need to install Buildtool on the build system... but do you really mind about installing a small software package like this one? Really not! - Portable: Buildtool is known to work in, at least, Darwin, FreeBSD, Linux, NetBSD, OpenBSD and Solaris. It surely works on other systems, although I have not tried it directly. Keep in mind that portability is very important, and bugs reported in this aspect are handled as soon as possible.
- Standard shell scripting: In case you are wondering, Buildtool is coded entirely in POSIX shell scripting, with some few exceptions. It includes its own shell interpreter, with some non-standard features (added for full performance), coded in C. Some helper utilities are also coded in C. But from the developer's point of view, all is reduced to shell code as build scripts are written in this language.
Modules
As said above, Buildtool is modular. The following is a list of all modules that are part of it:
- bt_config: Parses and executes the automatic configuration script. It provides the developer an standard set of functions to check for binary programs, header files, shared libraries, etc. in an unattended way. The user will only see a consistent command line interface to configure any software package.
- bt_dist: Builds distribution files for your package. It supports multiple compressed formats, like tar.gz or tar.bz2. Support for binary packages, like rpm or deb may be added in a future.
- bt_doc: Small documentation reader, addressed to the end user of a software package. It allows him to read build-time related documents from an interactive menu.
- bt_lint: Verifies a software package to ensure it follows several guidelines that should be followed in packages using Buildtool.
- bt_logic: Tracks dependancies between source files and keeps them up to date. This including building binaries, installing them, cleaning object files, etc. It also provides all the logic needed to build shared libraries on a bunch of platforms, and most imporant, hides all these details.
- bt_pkgflags: Keeps a small database of compiler and linker flags needed to link programs against installed libraries. It's compatible (to some extent) with GNU pkg-config.
- bt_sh: A fast and small shell interpreter, used to avoid compatibility with ancient shells. It also includes some extra functionality to simplify and speed up Buildtool's code.
- bt_swcgen: Helps the system administrator in the creation of system-wide cache files for bt_config. It also keeps them up to date.
- bt_wizard: Helps the developer in the creation of a basic skeleton of files for a new project, based on a set of interactive questions.