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 """) 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)