target = 'test'

tests = Split("""
	DialogTemplate.cpp
	endian.cpp
	mmap.cpp
	ResourceEditor.cpp
	specmatch.cpp
	textrunner.cpp
""")

required = Split("""
	DialogTemplate.cpp
	dirreader.cpp
	growbuf.cpp
	mmap.cpp
	ResourceEditor.cpp
	util.cpp
""")

cppunitlibs = Split("""
	cppunit
""")

extralibs = Split("""
	dl
	gdi32
	iconv
	user32
""")

scripts = Split("""
	preprocessor.nsi
""")

Import('env AddAvailableLibs')

# Test scripts
env.TestScript(scripts)

# Use available libraries
AddAvailableLibs(env, extralibs)

# compile using msvcrt (that's how cppunit.lib is built)
if 'msvc' in env['TOOLS'] or 'mstoolkit' in env['TOOLS']:
	env.Append(CCFLAGS = ['/MD'])

# uses exceptions
env.Append(CCFLAGS = ['$EXCEPTION_FLAG'])

# test for CppUnit
conf = env.Configure()
cppunit = conf.CheckLibWithHeader(cppunitlibs, 'cppunit/extensions/HelperMacros.h', 'C++')
conf.Finish()

if cppunit:

	# compile files from parent directory
	required_obj = []

	for i in required:
		b = 'required/%s' % i[:-4]
		s = '#Source/%s' % i
		o = env.Object(b, s)

		required_obj.append(o)

	# build test program
	tests = env.Program(target, tests + required_obj)

	# alias running the test to 'test'
	test = env.Alias('test-code', [tests], tests[0].abspath)

	# always test when asked to
	AlwaysBuild(test)

else:
	
	# no CppUnit
	def err(target, source, env):
		print '*** error: CppUnit must be installed for testing!'
		return 1

	cmd = env.Command(target, [tests], Action(err, ''))
	env.Alias('test-code', cmd)
