#! /usr/bin/env python
# encoding: utf-8

"""
Example providing a clean context for when top==out.

When top==out, waf will not do anything by default
in the clean or distclean operations, because it is dangerous.
The example below illustrates project-specific cleaning operations.

Notes:

- The clean operation below can only remove the generated file that
  are created during the current build (intermediate .o files)
  will not be removed

- File outputs of dynamic builds cannot be removed
  (output files are to be known in advance)

- The distclean operation, which normally removes the build folder
  completely plus some files, is also modified to remove
  the rest of waf-generated files.
"""

VERSION='0.0.1'
APPNAME='clean_test'

top = '.'
out = '.'

def options(opt):
	opt.load('compiler_cxx')

def configure(conf):
	conf.load('compiler_cxx')
	conf.check(header_name='stdio.h', features='cxx cxxprogram', mandatory=False)

def build(bld):
	bld(features='cxx', source='a.cpp', target='pouet')

	if bld.cmd == 'clean':
		for tgen in bld.get_all_task_gen():
			tgen.post()
			for t in tgen.tasks:
				for n in t.outputs:
					if n.is_child_of(bld.bldnode):
						n.delete()


def distclean(ctx):
	import os, shutil
	from waflib import Context

	for fn in os.listdir('.'):
		if fn.startswith(('.conf_check_', ".lock-w")) \
		 or fn in (Context.DBFILE, 'config.log') \
		 or fn == 'c4che':
			if os.path.isdir(fn):
				shutil.rmtree(fn)
			else:
				os.remove(fn)

