import os

Import('env') # inherit from parent

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

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

warp3d = env.Object(source="warp3d.c")
clrtab = env.Object(source="clrtab.c")
neuclrtab = env.Object(source="neuclrtab.c")

# standard targets
PROGS = (
# name       files            libs
('macbethcal', Split('macbethcal.c pmapgen.c mx3.c')+[warp3d],
	['rtpic','rtproc','rtpath','rtargs','rtio','rtcont','rtmem','rterror']),
('pcond',    Split('pcond.c pcond2.c pcond3.c pcond4.c')+[warp3d],
	['rtpic','rtproc','rtpath','rtargs','rtio','rtmath','rtcont','rtmem','rterror']),
('pfilt',    Split('pfilt.c pf2.c pf3.c'),
	['rtlamps','rtpic','rtpath','rtargs','rtio','rtmath']),
('pcwarp',   ['pcwarp.c', warp3d], 	 
	['rtpic','rtio','rtcont','rtmem','rterror']),
('pvalue',   ['pvalue.c'],    ['rtpic','rtargs','rtio','rtmath']),
('pcompos',  ['pcompos.c'],   ['rtpic','rtproc','rtpath','rtio','rterror']),
('psign',    ['psign.c'],
	['rtpic','rtscene','rtpath','rtargs','rtio','rtcont','rtmem','rterror']),
('protate',  ['protate.c'],   ['rtpic','rtio']),
('pextrem',  ['pextrem.c'],   ['rtpic','rtio']),
('pflip',    ['pflip.c'],     ['rtpic','rtio']),
('pcomb',    ['pcomb.c'],
	['rtpic','rtproc','rtpath','rtfunc','rtargs','rtio','rtmath','rtcont','rtmem']),
('pinterp',  ['pinterp.c'],
	['rtproc','rtpic','rtpath','rtargs','rtio','rtmath','rtmem','rterror']),

('ra_gif',   ['ra_gif.c', clrtab, neuclrtab], ['rtpic','rtio','rtmem']),
('ra_ps',    ['ra_ps.c'],     ['rtpic','rtargs','rtio','rtmem']),
('ra_ppm',   ['ra_ppm.c'],    ['rtpic','rtio','rtmem']),
('ra_bmp',   ['ra_bmp.c'],
	['rtpic','rtproc','rterror','rtpath','rtio','rtmem']),
('ra_t8',    ['ra_t8.c', clrtab, neuclrtab], ['rtpic','rtio','rtmem']),
('ra_t16',   ['ra_t16.c'],    ['rtpic','rtio','rtmem']),
('ra_rgbe', ['ra_rgbe.c'],['rtpic','rtproc','rtpath','rtio','rtmem','rterror']),
('ra_pict',  ['ra_pict.c'],   ['rtpic','rtio','rtmem']),
('ra_hexbit',['ra_hexbit.c'], ['rtpic','rtio','rtmem']),
('ra_xyze',  ['ra_xyze.c'],   ['rtpic','rtio','rtmem']),

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


# tiff library (building it is unix-specific for the moment)
#  If we haven't found one supporting LogLuv installed, build our own.
libtiff_fn = radlib(env['LIBPREFIX'] + 'tiff' + env['LIBSUFFIX'])
if os.name == 'posix' and not env.get('TIFFLIB_INSTALLED'):
	cwd = os.getcwd()
	upperdir = os.path.split(cwd)[0]
	libtiff = env.Command(libtiff_fn, None,
	[('cd "%(tiffdir)s"; '
		'env CC="$CC" '
		'./configure -C '
		'"libdir=%(upperdir)s/lib" '
		'--enable-static --disable-shared --disable-cxx '
		'--enable-logluv --disable-jpeg --disable-zlib --disable-pixarlog; '
		'cd %(portdir)s; make all;'
		'cd %(libtiffdir)s; make install-exec;' # don't install headers
	 ) % {
	'upperdir':upperdir,
	'tiffdir':os.path.join(cwd, 'tiff'),
	'portdir':os.path.join(cwd, 'tiff', 'port'),
	'libtiffdir':os.path.join(cwd, 'tiff', 'libtiff')
	}
	])

	env['TIFFLIB_INSTALLED'] = 1

if os.name == 'posix': # cleanup action for a previously built tifflib
	Clean(libtiff_fn, [libtiff_fn, radlib(env['LIBPREFIX'] + 'tiff.la')])

if env.get('TIFFLIB_INSTALLED'):
	# tiff programs
	tiffi = env.get('RAD_TIFFINCLUDE')
	if tiffi: tiffincl = [tiffi] + env.get('CPPPATH', [])
	else: tiffincl = env.get('CPPPATH', [])
	tiffl = env.get('RAD_TIFFLIB')
	if tiffl: tifflib = [tiffl] + env.get('LIBPATH', [])
	else: tifflib = env.get('LIBPATH', [])

	ra_tiff = env.Program(target=radbin('ra_tiff'), source=['ra_tiff.c'],
		CPPPATH = tiffincl, LIBPATH=tifflib,
		LIBS=['tiff','rtpic','rtio','rtmem'] + mlib)
	progs.append(ra_tiff)

	normtiff = env.Program(target=radbin('normtiff'),source=['normtiff.c'],
		CPPPATH = tiffincl, LIBPATH=tifflib,
		LIBS=['tiff','rtpic','rtio','rtmem'] + mlib)
	progs.append(normtiff)


# X11 targets
if env.has_key('X11LIB'):
	xincl = env.get('CPPPATH', []) + ['$X11INCLUDE']
	xlibp = env.get('LIBPATH', []) + ['$X11LIB']
	xlibs = ['X11','rtpic','rtargs','rtio','rtmath','rtmem']
	env.x11findwind = env.Object(source='../common/x11findwind.c', # XXX remote magic
		CPPPATH=xincl)

	ximage = env.Program(target=radbin('ximage'),
		source=Split('x11image.c x11raster.c')+[clrtab],
		CPPPATH=xincl, LIBPATH=xlibp, LIBS=xlibs + mlib)
	progs.append(ximage)

	xshowtrace = env.Program(target=radbin('xshowtrace'),
		source=Split('xshowtrace.c') + [env.x11findwind], # XXX remote magic
		CPPPATH=xincl, LIBPATH=xlibp, LIBS=xlibs + mlib)
	progs.append(xshowtrace)

if os.name == 'posix': # XXX ignoring trad.wsh
	for s in Split('''normpat falsecolor pdfblur pmblur pmdblur pbilat
			xyzimage phisto pdelta pgblur ra_pfm ran2tiff'''):
		Default(env.InstallCsh(radbin(s), s + '.csh'))
# XXX probably needs fixing
#else:
#	for s in Split('''falsecolor'''):
#		Default(env.InstallCsh(radbin(s), s + '.csh'))
# ignored by Rmakefile: pacuity phisteq psquish pveil vlpic

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

