#! /usr/bin/env python

def configure(conf):
	pass

def build(bld):
	bld.process(name='foo', version='1.0')
	bld.process(name='bar', use='foo')

########################################################################

# user api
from waflib.Build import BuildContext
def process(ctx, *k, **kw):
	kw['features'] = 'proc'
	return ctx(*k, **kw)
BuildContext.process = process

# create the tasks
from waflib.TaskGen import feature
@feature('proc')
def create_a_few_tasks(self):
	fetch = self.create_task('process')
	fetch.outputs = [self.path.find_or_declare(self.name + '.fetch')]
	fetch.env.A = getattr(self, 'version', '') # rebuild if changes
	configure = self.create_task('process', fetch.outputs)
	configure.outputs = [self.path.find_or_declare(self.name + '.configure')]
	build = self.create_task('process', configure.outputs)
	build.outputs = [self.path.find_or_declare(self.name + '.build')]
	self.install = install = self.create_task('process', build.outputs)
	install.outputs = [self.path.find_or_declare(self.name + '.install')]

	if getattr(self, 'use', None):
		lst = self.to_list(self.use)
		for x in lst:
			tg = self.bld.get_tgen_by_name(x)
			fetch.inputs.extend(tg.install.outputs)

# task classes
from waflib.Task import Task
class process(Task):
	vars = ['A', 'B'] # change env.A to trigger a rebuild...
	def run(self):
		# add your operations here
		self.outputs[0].write('all ok')

