# import these variables from the parent build script
import os
import sys

Import('env', 'gfxlibs', 'alllibs', 'installbindir', 'datadir', 'version', 'osspecificsrc', 'ffmpeg_available', 'tests')

################## define sources #######################
dftdsources = Split("""subsim.cpp
	ai.cpp
	airplane.cpp
	bitstream.cpp
	bzip.cpp
	cfg.cpp
	coastmap.cpp
	convoy.cpp
	countrycodes.cpp
	credits.cpp
	date.cpp
	daysky.cpp
	depth_charge.cpp
	event.cpp
	freeview_display.cpp
	game.cpp
	game_editor.cpp
	gun_shell.cpp
	height_generator_map.cpp
	highscorelist.cpp
	keys.cpp
	logbook.cpp
	logbook_display.cpp
	map_display.cpp
	message_queue.cpp
	music.cpp
	parser.cpp
	particle.cpp
	sea_object.cpp
	sensors.cpp
	ship.cpp
	ships_sunk_display.cpp
	sky.cpp
	moon.cpp
	simplex_noise.cpp
	stars.cpp
	sonar.cpp
	sonar_operator.cpp
	submarine.cpp
	submarine_interface.cpp
	sub_bg_display.cpp
	sub_bridge_display.cpp
	sub_captainscabin_display.cpp
	sub_control_popup.cpp
	sub_ecard_popup.cpp
	sub_damage_display.cpp
	sub_gauges_display.cpp
	sub_ghg_display.cpp
	sub_kdb_display.cpp
	sub_periscope_display.cpp
	sub_recogmanual_display.cpp
	sub_soldbuch_display.cpp
	sub_tdc_display.cpp
	sub_tdc_popup.cpp
	sub_torpedo_display.cpp
	sub_torpsetup_display.cpp
	sub_uzo_display.cpp
	sub_valves_display.cpp
	tdc.cpp
	texts.cpp
	tone_reproductor.cpp
	torpedo.cpp
	torpedo_camera_display.cpp
	triangulate.cpp
	user_interface.cpp
	caustics.cpp
	water.cpp
	water_splash.cpp
	dftdtester/tests.cpp
	sub_recogmanual_popup.cpp""")

dftdmediasources = Split("""
	bv_tree.cpp
	cfg.cpp
	error.cpp
	framebufferobject.cpp
	font.cpp
	fpsmeasure.cpp
	geoclipmap.cpp
	image.cpp
	keys.cpp
	make_mesh.cpp
	model.cpp
	perlinnoise.cpp
	primitives.cpp
	shader.cpp
	postprocessor.cpp
	system.cpp
	texture.cpp
	vertexbufferobject.cpp
	xml.cpp""")

tinyxmlsources = Split("""
	tinyxml/tinyxml.cpp
	tinyxml/tinyxmlerror.cpp
	tinyxml/tinyxmlparser.cpp""")

oglextsources = Split("""
	oglext/OglExt.cpp
	oglext/RenderingContext.cpp""")

# build objects for each member of osspecificsrc
osspecificsrc_obj = [env.Object(source = x) for x in osspecificsrc]

############# programs, libs, etc.
env.StaticLibrary(target = 'dftdmedia', source = dftdmediasources, LIBS = gfxlibs)
filehelper_obj = env.Object(source = 'filehelper.cpp')
widget_obj = env.Object(source = 'widget.cpp')

env_global = env.Clone()
env_datadir = env.Clone()

env_global.Append(CPPDEFINES = [('VERSION', '\\"' + version + '\\"')])
env_datadir.Append(CPPDEFINES = [('DATADIR', '\\"' + datadir + '/\\"')])

globaldataobj = env_global.StaticObject('global_data.cpp' )
datadirsobj = env_datadir.StaticObject('datadirs.cpp' )

frustum_obj = env.Object(source = 'frustum.cpp')
threads_obj = env.Object(source = Split('thread.cpp mutex.cpp condvar.cpp log.cpp'))

if 'win32' == sys.platform:
	dftdsources += env.RES('../../packaging/win32/dangerdeep.rc')

binary = env.Program(target = 'dangerdeep', source = dftdsources + filehelper_obj + widget_obj + frustum_obj + datadirsobj + globaldataobj + osspecificsrc_obj + threads_obj, LIBS = alllibs)
env.StaticLibrary(target = 'oglext', source = oglextsources)
env.StaticLibrary(target = 'tinyxml', source = tinyxmlsources)

env.Default(binary)

if(tests == '1'):
	tool1 = env.Program(target = 'viewmodel', source = ['viewmodel.cpp', 'texts.cpp', 'parser.cpp', datadirsobj, filehelper_obj, widget_obj, osspecificsrc_obj, threads_obj], LIBS = alllibs)
	tool2 = env.Program(target = 'modelmeasure', source = Split('modelmeasure.cpp') + datadirsobj + filehelper_obj + threads_obj + osspecificsrc_obj, LIBS = alllibs)
	tool4 = env.Program(target = 'atitest', source = ['2dtest.cpp', 'texts.cpp', 'parser.cpp',datadirsobj, filehelper_obj, widget_obj, osspecificsrc_obj, threads_obj], LIBS = alllibs)

	env.Default(tool1)
	env.Default(tool2)
	env.Default(tool4)

	test1 = env.Program('oceantest', ['oceantest.cpp'], LIBS = alllibs)
	test2 = env.Program('bsplinetest', ['bspline_test.cpp'])
	test3 = env.Program('bivectortest', ['bivectortest.cpp'])
	env.Default(test1)
	env.Default(test2)
	env.Default(test3)

	portal = env.Program('portal', ['portal.cpp', datadirsobj, filehelper_obj, frustum_obj, osspecificsrc_obj, threads_obj], LIBS = alllibs)
	env.Default(portal)

	treegentest = env.Program('treegentest', ['treegentest.cpp', datadirsobj, filehelper_obj, frustum_obj, osspecificsrc_obj, threads_obj], LIBS = alllibs)
	env.Default(treegentest)

	geoclipmaptest = env.Program('geoclipmaptest', ['geoclipmaptest.cpp', 'height_generator_map.cpp', 'bitstream.cpp', 'bzip.cpp', 'simplex_noise.cpp', datadirsobj, filehelper_obj, frustum_obj, osspecificsrc_obj, threads_obj, globaldataobj], LIBS = alllibs)
	env.Default(geoclipmaptest)

	triintersecttest = env.Program(target = 'triintersecttest', source = ['triintersecttest.cpp', osspecificsrc_obj, threads_obj], LIBS = alllibs)
	env.Default(triintersecttest)

	bvtreeintersecttest = env.Program(target = 'bvtreeintersecttest', source = ['bvtreeintersecttest.cpp', osspecificsrc_obj, threads_obj, datadirsobj, filehelper_obj], LIBS = alllibs)
	env.Default(bvtreeintersecttest)

	if ffmpeg_available:
		env.Append(CPPPATH = '/usr/include/ffmpeg')
		videoplaytest = env.Program('videoplaytest', ['videoplaytest.cpp', datadirsobj, filehelper_obj, osspecificsrc_obj, threads_obj], LIBS = alllibs + ['avcodec', 'avformat'])
		env.Default(videoplaytest)

	map_precompute = env.Program('map_precompute', ['tools/map_precompute.cpp', 'bitstream.cpp', 'bzip.cpp', threads_obj, datadirsobj, filehelper_obj], LIBS = alllibs)
	env.Default(map_precompute)


############ this allows to run "scons install" to install the binary
install = env.Alias('install', env.Install(installbindir, binary))
env.Depends(install, binary)
