target = 'makensis'

pch = 'Platform.h'

makensis_files = Split("""
	build.cpp
	clzma.cpp
	crc32.c
	DialogTemplate.cpp
	dirreader.cpp
	fileform.cpp
	growbuf.cpp
	lang.cpp
	lineparse.cpp
	makenssi.cpp
	manifest.cpp
	mmap.cpp
	Plugins.cpp
	ResourceEditor.cpp
	ResourceVersionInfo.cpp
	script.cpp
	ShConstants.cpp
	strlist.cpp
	tokens.cpp
	util.cpp
	winchar.cpp
	writer.cpp
""")

bzip2_files = Split("""
	bzip2/blocksort.c
	bzip2/bzlib.c
	bzip2/compress.c
	bzip2/huffman.c
""")

lzma_files = Split("""
	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
""")

zlib_files = Split("""
	zlib/deflate.c
	zlib/trees.c
""")

libs = Split("""
	gdi32
	user32
	pthread
	stdc++
	iconv
""")

Import('env AddAvailableLibs')

##### Use available libraries

if env['PLATFORM'] == 'win32':
	# XXX will cause problems if makensis is cross compiled
	# on freebsd, libversion.a exists and gives trouble if linked
	libs += ['version']

AddAvailableLibs(env, libs)

##### Defines

env.Append(CPPDEFINES = ['_WIN32_IE=0x0500'])

##### Set PCH

# XXX doesn't work
#env['PCH'] = env.PCH(pch)[0]
#env['PCHSTOP'] = pch

##### LZMA specific defines

lzma_env = env.Clone()
lzma_env.Append(CPPDEFINES = ['COMPRESS_MF_BT'])
lzma_files = lzma_env.Object(lzma_files)

##### Compile makensis

files = makensis_files + bzip2_files + lzma_files + zlib_files

makensis = env.Program(target, files)

Return('makensis')
