The SCons tool provides an easy-to-use, feature-rich interface for constructing software. Architecturally, SCons separates its dependency analysis and external object management into an interface-independent Build Engine that could be embedded in any software system that can run Python.
At the command line, SCons presents an easily-grasped tool where configuration files are Python scripts, reducing the need to learn new build-tool syntax. Inexperienced users can use intelligent methods that ``do the right thing'' to build software with a minimum of fuss. Sophisticated users can use a rich set of underlying features for finer control of the build process, including mechanisms for easily extending the build process to new file types.
Dependencies are tracked using digital signatures, which provide more robust dependency analysis than file time stamps. Implicit dependencies are determined automatically by scanning the contents of source files, avoiding the need for laborious and fragile maintenance of static lists of dependencies in configuration files.
The SCons tool supports use of files from one or more central code repositories, a mechanism for caching derived files, and parallel builds. The tool also includes a framework for sharing build environments, which allows system administrators or integrators to define appropriate build parameters for use by other users.
This document is an ongoing work-in-progress to write down the ideas and tradeoffs that have gone, and will go into, the SCons design. As such, this is intended primarily for use by developers and others working on SCons, although it is also intended to serve as a detailed overview of SCons for other interested parties. It will be continually updated and evolve, and will likely overlap with other documentation produced by the project. Sections of this document that deal with syntax, for example, may move or be copied into a user guide or reference manual.
So please don't assume that everything mentioned here has been decided and carved in stone. If you have ideas for improvements, or questions about things that don't seem to make any sense, please help improve the design by speaking up about them.