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")
ciq = env.Object(source="ciq.c")
cut = env.Object(source="cut.c")
closest = env.Object(source="closest.c")

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

('oki20c',   ['oki20c.c'],['rtpic','rtproc','rtpath','rtio','rtmem','rterror']),
('oki20',    ['oki20.c'], ['rtpic','rtproc','rtpath','rtio','rtmem','rterror']),

('ra_gif',   ['ra_gif.c', clrtab, neuclrtab], ['rtpic','rtio','rtmem']),
('ra_pr',    Split('ra_pr.c biq.c')+ [ciq, cut, closest],
	['rtpic','rtio','rtmem']),
('ra_pr24',  ['ra_pr24.c'],   ['rtpic','rtio','rtmem']),
('ra_avs',   ['ra_avs.c'],    ['rtpic','rtio','rtmem']),
('ra_ps',    ['ra_ps.c'],     ['rtpic','rtio','rtargs','rtmem']),
('ra_ppm',   ['ra_ppm.c'],    ['rtpic','rtio','rtmem']),
('ra_bmp',   ['ra_bmp.c'],    ['rtpic','rtproc','rtio','rtmem']),
('ra_t8',    ['ra_t8.c', clrtab, neuclrtab], ['rtpic','rtio','rtmem']),
('ra_t16',   ['ra_t16.c'],    ['rtpic','rtio','rtmem']),
('ra_bn',    ['ra_bn.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)


# special targets not normally built
SPECIAL = (
# name          files             libs
('psum',       ['psum.c'],       ['rtpic','rtio']),
#('panim',      ['panim.c'],      ['client','rpcsvc']),# missing externals

('ra_im',      ['ra_im.c'],      ['rtproc','rtpath','rtio','rterror']),

#('aedimage',   Split('aedimage.c')+[ciq, cut, closest],[]),# missing externals
('t4027',      ['t4027.c'],      ['rtpic']),
('paintjet',   ['paintjet.c'],   ['rtpic','rtio','rtmem']),
('mt160r',     ['mt160r.c'],     ['rtpic','rtio','rtmem']),
('greyscale',  ['greyscale.c'],  ['rtpic']),
('colorscale', ['colorscale.c'], ['rtpic']),
('d48c',       ['d48c.c'],       ['rtpic']),
)
specprogs = []
specinst = []
for p in SPECIAL:
	prog = env.Program(target=radbin(p[0]), source=p[1], LIBS=p[2]+mlib)
	specprogs.append(prog)
	specinst.append(env.Install('$RAD_BINDIR', prog))
env.Alias('px_special', specprogs)
env.Alias('px_special_install', specinst)


# tiff library (unix-specific for the moment)
if os.name == 'posix':
	cwd = os.getcwd()
	libtiff = env.Command(radlib(env['LIBPREFIX'] + 'tiff' + env['LIBSUFFIX']),
		'tiff/config.local',
	[('cd "%s"; '
	'sh ./configure -quiet -noninteractive '
		'-with-CC="$CC" -with-ENVOPTS="$CCFLAGS"; '
	'cd libtiff; '
	'make install;') % os.path.join(cwd, 'tiff')])

	# tiff programs
	ra_tiff = env.Program(target=radbin('ra_tiff'), source=Split('ra_tiff.c'),
		LIBS=['tiff','rtpic','rtio','rtmem'] + mlib)
	progs.append(ra_tiff)

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


# pixar format requires extra lib
if env.has_key('PIXAR_LIB'):
    ra_pixar = env.Program(radbin('ra_pixar'), source=['ra_pixar.c'],
        LIBS=['rtpic', '$PIXAR_LIB'])
    progs.append(ra_pixar)


# X11 targets
if env.has_key('X11LIB'):
    xincl = env.get('CPPPATH', []) + ['$X11INCLUDE']
    xlibp = env.get('LIBPATH', []) + ['$X11LIB']
    xlibs = ['X11','rtpic','rtio','rtmath','rtargs','rtmem']
    x11findwind = env.Object(source='../common/x11findwind.c', # XXX ../not/nice
        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') + [x11findwind],
        CPPPATH=xincl, LIBPATH=xlibp, LIBS=xlibs + mlib)
    progs.append(xshowtrace)

# NeWS ?!?
#    if env.has_key('OGL'):
#        glimage = env.Program(target=radbin('glimage'),
#            CPPFLAGS=env.get('CPPFLAGS', []) + [env['RAD_STEREO']],
#            source=Split('glimage.c'),
#            LIBS=['gl_s']+env['LIBS'],)
#        progs.append(glimage)


if os.name == 'posix': # XXX ignoring trad.wsh
	for s in Split('''normpat falsecolor pdfblur
			pmblur xyzimage phisto pdelta pgblur'''):
		Default(env.InstallCsh(radbin(s), s + '.csh'))
# XXX probably needs fixing
#else:
#	for s in Split('''falsecolor'''):
#		Default(env.InstallCsh(radbin(s), s + '.csh'))

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

