import os

cc = 'g++'
#cc = 'i586-mingw32msvc-g++'

nasm = 'nasmw.exe'
#nasm = 'nasm'

nasm_builder = Builder(name='Nasm', action=nasm+' -f win32 -o $TARGET $SOURCE', src_suffix='.asm')
nasm_env = Environment(ENV= {'PATH' : os.environ['PATH']},BUILDERS = {'Nasm' : nasm_builder})
nasm_files = Split('japi war3err_patch lfasm nreplaceasm')
nasm_objs = [ nasm_env.Nasm(target=x+'.o', source=x+'.asm') for x in nasm_files ] 

insttarg = []

blddll = Builder(action = cc+' -shared -o $TARGET $SOURCES')

env = Environment(ENV={'PATH':os.environ['PATH']},BUILDERS={'DLL' : blddll})
env.Tool('mingw')
env.Replace(CC=cc,CXX=cc,LINK=cc)
env.Append(CCFLAGS=["-ggdb","-Wall"])

optenv = Environment(ENV={'PATH':os.environ['PATH']},BUILDERS={'DLL' : blddll})
optenv.Tool('mingw')
optenv.Replace(CC=cc,CXX=cc,LINK=cc)
optenv.Append(CCFLAGS=["-ggdb","-Wall","-O2"])

cppsrc = ["libbs","loadmpq","natives","iat","nativepack","war3err","section","warhook","parseconf","listfile","nreplace","wehack","menu"]
env.Object(map(lambda s: s+".cpp",cppsrc))
dlltargs = ["loadmpq",
"japi natives nativepack iat",
"war3err section war3err_patch warhook libbs parseconf",
"listfile lfasm",
"nreplace nreplaceasm section",
"wehack iat menu section"]

def curry(f,x):
	lambda y: f(x,y)
def compose(f,g):
	lambda x: f(g(x))
def gendll(l):
	insttarg.append(env.DLL(l[0]+".dll",map(lambda s: s+".o",l)))
#map(compose(gendll,Split),dlltargs)
[gendll(Split(x)) for x in dlltargs]

insttarg.append(env.Program('jbcdasm.exe',Split('jbcdasm.cpp')))
insttarg.append(env.Program('exehack.exe',['exehack.cpp','../lua/lua5.1.lib']))

#map(curry(env.Install,'../bin'),insttarg)
[env.Install('../bin',x) for x in insttarg]

logd = optenv.Program('logd.exe',Split('logd.cpp'))
optenv.Install('..',logd)
env.Alias('install','..')
env.Alias('install','../bin')
optenv.Alias('install','..')
