Creating aliases / Injecting new commands

New commands may be injected in the following manner:

import Scripting
def foo(ctx):
	Scripting.commands += ['build', 'clean']
			

Injecting new commands is useful for writing testcases. By executing waf test, the following script will configure a project, create source files in the source directory, build a program, modify the sources, and rebuild the program. In this case, the program must be rebuilt because a header (implicit dependency) has changed.

VERSION = '0.0.1'
APPNAME = 'my_testcase'

srcdir = '.'
blddir = 'build'

import Scripting

def test(ctx):
	Scripting.commands += ['distclean', 'configure', 'setup', 'build', 'modify', 'build']

def configure(conf):
	conf.check_tool('gcc')

def setup(ctx):
	f = open('main.c', 'w')
	f.write('#include "foo.h"\nint main() {return 0;}\n')
	f.close()

	f = open('foo.h', 'w')
	f.write('int k = 32;\n')
	f.close()

def build(bld):
	bld.new_task_gen(
		features = 'cc cprogram',
		source = 'main.c',
		target='tprog')

def modify(ctx):
	f = open('foo.h', 'w')
	f.write('int k = 34;\n')
	f.close()