File: SConscript

package info (click to toggle)
nsis 2.37-3
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 8,860 kB
  • ctags: 8,113
  • sloc: cpp: 32,080; ansic: 29,202; python: 1,118; xml: 451; pascal: 113; makefile: 80
file content (161 lines) | stat: -rwxr-xr-x 2,987 bytes parent folder | download
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)