Waf is a Python-based framework for configuring, compiling and installing applications. It derives from the concepts of other build tools such as Scons, Autotools, CMake or Ant.
Try Waf
Waf is now used in many open-source and proprietary projects. Here are a few reasons:
- It supports build phases (Autotools, Maven-like)
- project configuration,build,installation,uninstallation
- packaging, testing and project redistribution
- custom build phases
- provides automatic rebuilds for continuous integration
- It encourages reliable builds
- a solid task execution model is provided
- a build directory is set up by default to avoid polluting the sources
- deep control is enabled over the task execution
- hashes (md5) are used for computing when rebuilds are necessary
- the concepts are detailed in the Waf book
- It features excellent performance and scalability
- good runtime compared to other build tools
- a small memory footprint is usually observed
- it can use its own object cache (ccache-like)
- performance is enabled by default without affecting accuracy (files and strings are hashed using md5)
- It is designed to be flexible
- the core consists of a very small kernel of core classes
- aspect-oriented techniques are used to enable maximum customization
- there is no domain-specific language (as in the make-like tools) to learn but apis to use and extend
- build variants are supported (debug and release configurations)
- abstract dependencies may be used to declare very intricate builds easily (linking libraries, building compilers)
- It is very easy to use and to deploy
- open-source using the more liberal BSD license
- Waf is a 80kb script to execute (no installation required)
- compatibility from Python 2.3 to 3.0 is maintained (and Jython 2.5)
- numerous demo projects in the source distribution illustrate how to use Waf on common usecases: c++, ocaml, java, etc
- the three-letter name makes the command easy to type ;-)
Documentation
The documentation can be found at the following places
- The Waf book
- Wiki
- Example projects which show how to use Waf for different languages and projects
Contact
Google Groups / Mailing list
The mailing list is located at waf-users
IRC
Join us to the #waf channel on irc.freenode.org
Contributing
Contributions may be provided in several different ways by:
- Filling feature requests on the Issue Tracker
- Contributing documentation on the Wiki
- Using Waf to build your own software
- Improving Waf itself by changing its Source code
- Browsing the most recent changes
Screenshots
Waf console output
The progress bar when the -p option is used