1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
|
target = 'test'
tests = Split("""
compression.cpp
decompress.cpp
DialogTemplate.cpp
endian.cpp
mmap.cpp
ResourceEditor.cpp
specmatch.cpp
textrunner.cpp
winchar.cpp
""")
required = Split("""
DialogTemplate.cpp
dirreader.cpp
growbuf.cpp
mmap.cpp
ResourceEditor.cpp
util.cpp
winchar.cpp
""")
required_exehead = Split("""
Tests/memcpy.c
""")
lzma_files = Split("""
clzma.cpp
7zip/7zGuids.cpp
7zip/7zip/Common/OutBuffer.cpp
7zip/7zip/Common/StreamUtils.cpp
7zip/7zip/Compress/LZ/LZInWindow.cpp
7zip/7zip/Compress/LZMA/LZMAEncoder.cpp
7zip/7zip/Compress/RangeCoder/RangeCoderBit.cpp
7zip/Common/Alloc.cpp
7zip/Common/CRC.cpp
7zip/LZMADecode.c
""")
required += lzma_files
bzip2_files = Split("""
bzip2/blocksort.c
bzip2/bzlib.c
bzip2/compress.c
bzip2/huffman.c
""")
bzip2_exehead_files = Split("""
bzip2/bzlib.c
bzip2/decompress.c
""")
required += bzip2_files
required_exehead += bzip2_exehead_files
zlib_files = Split("""
zlib/deflate.c
zlib/trees.c
""")
zlib_exehead_files = Split("""
zlib/INFBLOCK.C
""")
required += zlib_files
required_exehead += zlib_exehead_files
cppunitlibs = Split("""
cppunit
""")
extralibs = Split("""
dl
gdi32
iconv
pthread
user32
""")
scripts = Split("""
preprocessor.nsi
""")
Import('env AddAvailableLibs')
# Test scripts
env.TestScript(scripts)
# Use available libraries
if env['PLATFORM'] == 'win32':
# XXX will cause problems if tests are cross compiled
# on freebsd, libversion.a exists and gives trouble if linked
extralibs += ['version']
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'])
# for lzma
env.Append(CPPDEFINES = ['COMPRESS_MF_BT'])
# 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.split('.')[0]
s = '#Source/%s' % i
o = env.Object(b, s)
required_obj.append(o)
# exehead files special treatment
exehead_env = env.Clone()
exehead_env.Append(CCFLAGS = ['$C_FLAG'])
exehead_env.Append(
CPPDEFINES = [
'EXEHEAD',
'NSIS_COMPRESS_USE_ZLIB' # just so config.h won't complain
]
)
for i in required_exehead:
b = 'required/exehead/%s' % i.split('.')[0]
s = '#Source/%s' % i
o = exehead_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)
|