import os

Import('env') # inherit from parent

mlib = ['$RAD_MLIB']
progs = []

# compose paths
def radbin(name): return os.path.join('$RAD_BUILDBIN', name)
def radlib(name): return os.path.join('$RAD_BUILDLIB', name)

Version = env.Object(source='#src/rt/Version.c')

# standard targets
PROGS = [
('findglare', Split('findglare.c glareval.c glaresrc.c setscan.c'),
	['rtpic','rtargs','rtio','rtproc','rtmath','rtpath','rtmem','rterror']),
('glarendx',  Split('glarendx.c'), ['rtpic','rtargs','rtio','rtmath']),
('vwright',   Split('vwright.c'),  ['rtpic','rtargs','rtio','rtmath']),
('vwrays',    Split('vwrays.c'),   ['rtpic','rtargs','rtio','rtmath']),
('rad',       Split('rad.c'),
	['rtpic','rtproc','rtpath','rtmath','rtargs','rtio','rtcont','rtmem','rterror']),
('rpiece',    Split('rpiece.c') + [Version],
	['rtpic','rtargs','rtio','rtproc','rtmath','rtpath','rtmem']),
('ranimate',  ['ranimate.c', '$RAD_NETCOMPAT'],
	['rtpic','rtargs','rtio','rtproc','rtcont','rtmem','rtpath','rtmath',
	'rtnet','rterror','$RAD_SOCKETLIB']),
('rtcontrib', ['rtcontrib.c', Version],
	['rtpic','rtargs','rtfunc','rtio','rtproc','rtcont','rtmem','rtpath',
	'rtmath','rtnet','rterror','$RAD_SOCKETLIB']),
('dctimestep', ['dctimestep.c'],
	['rtio','rtmath'])
]

for p in PROGS:
	prog = env.Program(target=radbin(p[0]), source=p[1], LIBS=p[2]+mlib)
	progs.append(prog)

#if os.name != 'nt': # XXX pending Windows version of raypcalls.c
if True: # experimental raypwin.c
	# targets with different includes/libs
	rs = Split('ranimove.c ranimove1.c ranimove2.c')
	ranimove = env.Program(target=radbin('ranimove'), source=rs,
			CPPPATH=env.get('CPPPATH', [])+ ['#src/rt'],
			LIBS=['raycalls','rttrace','rtscene','rtpic','rtfunc','rtmath',
			'rtcont','rtmem','rtargs','rtio','rtproc','rtpath','rterror']
			+ mlib)
	progs.append(ranimove)
	rsensor = env.Program(target=radbin('rsensor'), source='rsensor.c',
			CPPPATH=env.get('CPPPATH', [])+ ['#src/rt'],
 			LIBS=['raycalls','rttrace','rtscene','rtpic','rtfunc','rtmath',
			'rtcont','rtmem','rtargs','rtio','rtpath','rterror','rtproc',
			'rtlamps'] + mlib)
	progs.append(rsensor)

getinfo = env.Program(target=radbin('getinfo'), source='getinfo.c',
		LIBS=['rtio'])
progs.append(getinfo)


# X11 targets
if env.has_key('X11LIB'):
	xincl = env.get('CPPPATH', []) + ['$X11INCLUDE']
	xlibp = env.get('LIBPATH', []) + ['$X11LIB']
	xglaresrc = env.Program(target=radbin('xglaresrc'),
			source=Split('xglaresrc.c') + [env.x11findwind], # XXX remote magic
			LIBPATH=xlibp, CPPPATH=xincl,
			LIBS=['rtpic','rtmath','rtargs','rtio','X11']+ mlib)
	progs.append(xglaresrc)

	# OpenGL targets that also depend on X11
	if env.has_key('OGL'):
		glrad = env.Program(target=radbin('glrad'), source=Split('glrad.c'),
			CPPFLAGS=env.get('CPPFLAGS', []) + ['$RAD_STEREO'],
			LIBPATH=xlibp, CPPPATH=xincl,
			LIBS=['rgl','rtpic','rtscene','rtproc','rtpath','rtargs','rtio',
			'rtmath','rtcont','rtmem','rterror','rtdummy',
			'GL', 'GLU','X11'],)
		progs.append(glrad)

if os.name == 'posix': # XXX ignoring trad.wsh
	for s in Split('''objview objline objpict glare dayfact
			debugcal rlux raddepend compamb vinfo genambpos fieldcomb'''):
		Default(env.InstallCsh(radbin(s), s + '.csh'))
# Those don't really work yet
#else:
#	for s in Split('''objview glare rlux '''):
#		prog = env.Program(target=radbin(s), source=s+'.c')
#		progs.append(prog)

Default('#src/util')
env.Install('$RAD_BINDIR', progs)

