Version 3 (modified by norris, 12 years ago) (diff)



A Contractor-Based CCA Tools Build System

This projects is a replacement build system for the Common Component Architecture scientific computing tools, which consist of around a dozen packages. The previous build system was a script based on autotools but it was complicated, hard to read and update, and didn't work on all architectures.

The new build system is based on Contractor, a new dependency handling build system written in Python, and many of our own improvements. The new system is a modular, easy to read and easy to update, object oriented approach that simplifies the build system and makes it as easy to use as possible. All output is logged and on failure the logs are archived to be sent to the developers for debugging. A GTK+ graphical user interface is provided to ease configuration.

Here is a presentation on the new build system:

Getting the CCA Contractor build system

We have not made an official release yet. Nightly tarballs are available:

If you are interested in contributing to our development, please email Boyana Norris.


Using the new contractor-based build system is very easy. Instead of the usual 'configure, make, install' scenario you now have only two steps (one if you let the system automatically configure, in which case you can omit the first step).

$ cd cca-tools-contractor
$ ./ --configure
$ ./

For more control over the build, you can set your own configuration options manually to override the defaults. To see the list of available options, pass the --configure-show argument, which also shows you the arguments passed to configure on the last invokation.

$ ./ --configure-show
$ ./ --configure python=/sw/bin/python2.5 fortran90=

As seen above, to unset an option just leave the right side of the assignment blank. The example above sets the path to the Python interpreter to use in babel and ccaffeine and disables Fortran 90 support.

Specific stages can be built easily using the new build system. There are a couple of special stages of note: the default target (called when no arguments are passed), the global clean target (to clean everything), and the per-package all and clean targets.

$ ./ babel/make
$ ./ babel/all
$ ./ clean