buildDir = 'obj/'
libDir = 'lib/'

# allegro-config --libs
# -L/usr/lib -Wl,--export-dynamic -lalleg-4.2.0 -lalleg_unsharable
required_libs = ['alleg-4.2.0', 'alleg_unsharable', 'jpgalleg', 'dumb']
debugcflags = ['-W', '-Wall', '-g3']
releasecflags = []

def sourceFiles( dir, files ):
	return map( lambda x: buildDir + dir + x, files )
	
mymode = ARGUMENTS.get('mode', 'release')

if not (mymode in ['debug', 'release']):
	print "Error: expected 'debug' or 'release', found: " + mymode
	Exit(1)

print '****** Compiling in ' + mymode + ' mode...'

# libjpgalleg
libjpgalleg_sources = sourceFiles('jpgalleg/', [
	'decode.c',
	'encode.c',
	'io.c',
	'jpgalleg.c'
])

libjpgEnv = Environment()
libjpgEnv.BuildDir(buildDir, '.', duplicate = 0)
libjpgEnv.Append(CPPPATH = 'jpgalleg')
if mymode == 'debug':
	libjpgEnv.Append(CCFLAGS = debugcflags)
else:
	libjpgEnv.Append(CCFLAGS = releasecflags)
libjpgEnv.Append(LIBPATH = libDir)

libjpgalleg = libjpgEnv.StaticLibrary(libDir + 'jpgalleg', libjpgalleg_sources)
Alias('libjpgalleg', libjpgalleg)

# libdumb
libdumb_sources = sourceFiles('dumb/src/', [
	'allegro/alplay.c',
	'allegro/datduh.c',
	'allegro/datit.c',
	'allegro/datmod.c',
	'allegro/dats3m.c',
	'allegro/datunld.c',
	'allegro/datxm.c',
	'allegro/packfile.c',
	'core/atexit.c',
	'core/duhlen.c',
	'core/dumbfile.c',
	'core/loadduh.c',
	'core/makeduh.c',
	'core/rawsig.c',
	'core/readduh.c',
	'core/register.c',
	'core/rendduh.c',
	'core/rendsig.c',
	'core/unload.c',
	'helpers/clickrem.c',
	'helpers/memfile.c',
	'helpers/resample.c',
	'helpers/sampbuf.c',
	'helpers/silence.c',
	'helpers/stdfile.c',
	'it/itload.c',
	'it/itmisc.c',
	'it/itorder.c',
	'it/itread.c',
	'it/itrender.c',
	'it/itunload.c',
	'it/loadmod.c',
	'it/loads3m.c',
	'it/loadxm.c',
	'it/readmod.c',
	'it/reads3m.c',
	'it/readxm.c',
	'it/xmeffect.c'
])

libdumbEnv = Environment()
libdumbEnv.BuildDir(buildDir, '.', duplicate = 0)
libdumbEnv.Append(CPPPATH = 'dumb/include')
if mymode == 'debug':
	libdumbEnv.Append(CCFLAGS = debugcflags)
else:
	libdumbEnv.Append(CCFLAGS = releasecflags)
libdumbEnv.Append(LIBPATH = libDir)

libdumb = libdumbEnv.StaticLibrary(libDir + 'dumb', libdumb_sources)
Alias('libdumb', libdumb)

# akilah
akilah_sources = sourceFiles('./', [
	'akilahscreen.cpp',
	'gamescreen.cpp',
	'main.cpp',
	'resource_jpeg.cpp',
	'enemy.cpp',
	'mainmenu.cpp',
	'winscreen.cpp',
	'game.cpp',
	'losescreen.cpp',
	'resource.cpp',
	'wordscreen.cpp',
	'helpscreen.cpp',
	'resource_dumb.cpp'
])
gendat_sources = sourceFiles('./', [
	'gendat.cpp',
	'resource_jpeg.cpp',
	'resource_dumb.cpp',
	'resource.cpp'
])

progEnv = Environment()
progEnv.BuildDir(buildDir, '.', duplicate = 0)
progEnv.Append(CPPPATH = 'include')
if mymode == 'debug':
	progEnv.Append(CCFLAGS = debugcflags)
else:
	progEnv.Append(CCFLAGS = releasecflags)
progEnv.Append(LIBPATH = libDir)
progEnv.Append(LIBS = required_libs)

akilah = progEnv.Program('akilah', akilah_sources)
gendat = progEnv.Program('gendat', gendat_sources)

Default(libjpgalleg, akilah, gendat)