Go to file
Thomas Nagy 314689b899
IronPython is broken
2019-07-11 19:52:03 +02:00
.pipelines IronPython is broken 2019-07-11 19:52:03 +02:00
build_system_kit Fix a few deprecation warnings 2019-01-16 06:51:14 +01:00
demos Add executable arguments for configuration tests / execute=True 2019-07-11 07:55:38 +02:00
docs Update GitHub URLs for GitLab equivalents 2018-07-08 14:53:13 -04:00
playground Add genpybind example 2019-07-02 12:15:18 +02:00
tests Ensure that 'waf test' raises a meaningful error message in the installation test 2019-06-02 09:25:16 +02:00
utils Move setup.py in subdir to unclutter the project root 2019-06-26 16:13:55 +02:00
waflib Merge branch 'doxygen_order_fix' into 'master' 2019-07-11 16:58:08 +00:00
zip iso8859-1 -> latin-1 2017-01-21 13:28:06 +01:00
.gitignore Ignore temporary directories created when using Python 3 2018-07-08 14:58:47 -04:00
ChangeLog Fix a deadlock with cython+subst tasks #2244 2019-06-27 09:38:49 +02:00
DEVEL Update GitHub URLs for GitLab equivalents 2018-07-08 14:53:13 -04:00
README.md waf-2.0.15 2019-03-10 16:44:06 +01:00
TODO docs 2018-08-16 23:30:05 +02:00
configure Update use_config - Issue 1608 2015-08-29 10:31:02 +02:00
waf-light Ensure waf-light is first in sys.path (Pip integration) 2019-06-27 08:38:33 +02:00
wscript waf-2.0.17 2019-06-02 09:45:17 +02:00



Waf is a Python-based framework for configuring, compiling and installing applications. Here are perhaps the most important features of Waf:

  • Automatic build order: the build order is computed from input and output files, among others
  • Automatic dependencies: tasks to execute are detected by hashing files and commands
  • Performance: tasks are executed in parallel automatically, the startup time is meant to be fast (separation between configuration and build)
  • Flexibility: new commands and tasks can be added very easily through subclassing, bottlenecks for specific builds can be eliminated through dynamic method replacement
  • Extensibility: though many programming languages and compilers are already supported by default, many others are available as extensions
  • IDE support: Eclipse, Visual Studio and Xcode project generators (waflib/extras/)
  • Documentation: the application is based on a robust model documented in The Waf Book and in the API docs
  • Python compatibility: cPython 2.5 to 3.x, Jython 2.5, IronPython, and Pypy

Waf is used in particular by innovative companies such as Avalanche Studios and by open-source projects such as RTEMS. Learn more about Waf by reading The Waf Book.

For researchers and build system writers, Waf also provides a framework for creating custom build systems and package distribution systems.

Download the project from our page on waf.io or from a mirror on freehackers.org, consult the manual, the API documentation and the showcases and experiments.


Python >= 2.6 is required to generate the waf script, and the resulting file can then run on Python 2.5. Just run:

$ python ./waf-light configure build

Or, if several python versions are installed:

$ python3 ./waf-light configure build


The Waf tools in waflib/extras are not added to the waf script. To add some of them, use the --tools switch. An absolute path can be passed if the module does not exist under the 'extras' folder:

$ ./waf-light --tools=swig

To customize the initialization, pass the parameter 'prelude'. Here is for example how to create a waf file using the compat15 module:

$ ./waf-light --tools=compat15 --prelude=$'\tfrom waflib.extras import compat15\n'

Although any kind of initialization is possible, using the build system kit may be easier (folder build_system_kit):

$ ./waf-light --make-waf --tools=compat15,/comp/waf/aba.py --prelude=$'\tfrom waflib.extras import compat15\n\tprint("ok")'

To avoid regenerating the waf file all the time, just set the WAFDIR environment variable to the directory containing "waflib".


Try this:

cp waf demos/c/
cd demos/c/
./waf configure build