Chapter 10. Customizing the scripting system

Table of Contents

Providing custom commands
Chaining commands
Providing a custom command context
Creating aliases / Injecting new commands

Providing custom commands

Waf commands are functions defined on the top-level wscript file, for example, with the following wscript file:

srcdir = '.'
blddir = 'build'

def configure(conf):
	print('configure')

def foo(ctx):
	"""help string for the command foo"""
	print('test')
			

executing the script with "foo" as argument will produce the following output

$ waf foo
test
			

The parameter ctx in the function foo above is provided to enable recursion and sharing data with the scripts. In the following example, the script subdir/wscript_foo will be looked up, and executed if found. Else, the script subdir/wscript will be looked up and loaded as a module. If successfully loaded, the function foo will be executed, else an exception is raised.

def foo(ctx):
	"""help string for the command foo"""
	ctx.recurse('subdir')
			

For backward compatibility reasons, the commands init, shutdown, dist and distcheck do not accept a context as parameter yet.