DRPLIB = libdrp.a
FFTLIB = libfft.a
PLLIB = ./PLPLOT/lib/libplplotf.a

# LINUX definitions

CC = gcc
CFLAGS   = -c -g -O2 -Wall -Wno-aggressive-loop-optimizations -Dunix -ansi -DLINUX -D_XOPEN_SOURCE
LDFLAGS  = -g $(DRPLIB) -lm
XINCLUDE = -I/usr/X11R6/include
XLIBRARY = -L/usr/X11R6/lib
INSTALL  = /usr/bin/install -c

prefix=/usr
exec_prefix=${prefix}
bindir=$(DESTDIR)${exec_prefix}/share/drp
exedir=$(DESTDIR)${exec_prefix}/bin
fontdir=$(DESTDIR)${exec_prefix}/local/plplot
mandir=$(DESTDIR)$(prefix)/share/man/man1

commands=accum area average bad baseline bias bintable box \
         calc centre clg clip convolve correlate cube \
         data drop drpwindow dump fft filter fitscube fitsmap fold \
         gauss get getfits \
         hardcopy header inquire list mapshow mapview modify moment \
         pixel put putfits redres reshow reverse \
         scale show showfit smooth subtract swap \
         taufit tcopy temp twplot viewport zero

utilities=byteswap convex2ieee getants getcfits getdrsp getsest \
          ieee2convex line noise putants putcfits putdrsp putmatlab

ALL: $(commands) $(utilities)

UTILITIES: $(utilities)

accum: accum.o $(DRPLIB)
	$(CC) accum.o -o accum $(LDFLAGS)
area: area.o $(DRPLIB) 
	$(CC) area.o -o area $(LDFLAGS)
average: average.o $(DRPLIB)
	$(CC) average.o -o average $(LDFLAGS)
bad: bad.o $(DRPLIB)
	$(CC) bad.o -o bad $(LDFLAGS)
bandpass: bandpass.o $(DRPLIB)
	$(CC) bandpass.o -o bandpass $(LDFLAGS)
base: base.o $(DRPLIB)
	$(CC) base.o -o base $(LDFLAGS)
baseline: baseline.o solve.o $(DRPLIB)
	$(CC) baseline.o solve.o -o baseline $(LDFLAGS)
bias: bias.o $(DRPLIB)
	$(CC) bias.o -o bias $(LDFLAGS)
bintable: bintable.o fits.o $(DRPLIB)
	$(CC) bintable.o fits.o -o bintable $(LDFLAGS)
box: box.o options.o xwin.o plmeta.o $(DRPLIB)
	$(CC) box.o options.o xwin.o plmeta.o \
	-o box $(XLIBRARY) $(PLLIB) -lX11 $(LDFLAGS)
byteswap: byteswap.o $(DRPLIB)
	$(CC) byteswap.o -o byteswap $(LDFLAGS)
calc: calc.o $(DRPLIB)  
	$(CC) calc.o -o calc $(LDFLAGS)
centre: centre.o $(DRPLIB)  
	$(CC) centre.o -o centre $(LDFLAGS)
clg: clg.o options.o xwin.o plmeta.o
	$(CC) clg.o options.o xwin.o plmeta.o \
	-o clg $(XLIBRARY) $(PLLIB) -lm -lX11
clip: clip.o $(DRPLIB)  
	$(CC) clip.o -o clip $(LDFLAGS)
convex2ieee: convex2ieee.o $(DRPLIB)  
	$(CC) convex2ieee.o -o convex2ieee $(LDFLAGS)
convolve: convolve.o $(FFTLIB) $(DRPLIB)  
	$(CC) convolve.o -o convolve $(FFTLIB) $(LDFLAGS)
correlate: correlate.o $(FFTLIB) $(DRPLIB)  
	$(CC) correlate.o -o correlate $(FFTLIB) $(LDFLAGS)
cube: cube.o fits.o showcube.o xwin.o plmeta.o $(DRPLIB)
	$(CC) cube.o fits.o showcube.o xwin.o plmeta.o \
	-o cube $(XLIBRARY) $(PLLIB) -lX11 $(LDFLAGS)
data: data.o $(DRPLIB)  
	$(CC) data.o -o data $(LDFLAGS)
drop: drop.o $(DRPLIB)  
	$(CC) drop.o -o drop $(LDFLAGS)
drpwindow: drpwindow.o $(DRPLIB)
	$(CC) drpwindow.o -o drpwindow  $(DRPLIB) $(XLIBRARY) -lX11 -lm
dump: dump.o $(DRPLIB)  
	$(CC) dump.o -o dump $(LDFLAGS)
fft: fft.o $(FFTLIB) $(DRPLIB)  
	$(CC) fft.o -o fft $(FFTLIB) $(LDFLAGS)
filter: filter.o solve.o $(FFTLIB) $(DRPLIB) 
	$(CC) filter.o solve.o -o filter $(FFTLIB) $(LDFLAGS)
fitscube: fitscube.o fits.o $(DRPLIB)
	$(CC) fitscube.o fits.o -o fitscube $(LDFLAGS)
fitsmap: fitsmap.o fits.o $(DRPLIB)
	$(CC) fitsmap.o fits.o -o fitsmap $(LDFLAGS)
fold: fold.o $(DRPLIB)
	$(CC) fold.o -o fold  $(LDFLAGS)
gauss: gauss.o marquardt.o $(DRPLIB)
	$(CC) gauss.o marquardt.o -o gauss $(LDFLAGS)
get: get.o $(DRPLIB)
	$(CC) get.o -o get $(LDFLAGS)
getants: getants.o dfil.a $(DRPLIB)
	$(CC) getants.o -o getants dfil.a $(LDFLAGS)
getcfits: getcfits.o cfits.o $(DRPLIB)
	$(CC) getcfits.o cfits.o -o getcfits $(LDFLAGS)
getdrsp: getdrsp.o $(DRPLIB)
	$(CC) getdrsp.o -o getdrsp $(LDFLAGS)
getfits: getfits.o fits.o $(DRPLIB)
	$(CC) getfits.o fits.o -o getfits $(LDFLAGS)
getpc: getpc.o $(DRPLIB)
	$(CC) getpc.o -o getpc $(LDFLAGS)
getsest: getsest.o hp2ieee.o $(DRPLIB)
	$(CC) getsest.o hp2ieee.o -o getsest $(LDFLAGS)
hardcopy: hardcopy.o options.o plmeta.o
	$(CC) hardcopy.o options.o plmeta.o \
	   -o hardcopy $(XLIBRARY) $(PLLIB) -lm -lX11
header: header.o angle.o $(DRPLIB) 
	$(CC) header.o angle.o -o header $(LDFLAGS)
ieee2convex: ieee2convex.o $(DRPLIB)  
	$(CC) ieee2convex.o -o ieee2convex $(LDFLAGS)
inquire: inquire.o $(DRPLIB)
	$(CC) inquire.o -o inquire $(XLIBRARY) -lX11 $(LDFLAGS)
line: line.o $(DRPLIB)
	$(CC) line.o -o line $(LDFLAGS)
list: list.o angle.o $(DRPLIB)
	$(CC) list.o angle.o -o list $(LDFLAGS)
liszt: liszt.o $(DRPLIB)
	$(CC) liszt.o -o liszt $(LDFLAGS)
mapshow: mapshow.o scanlog.o contour.o grey.o xwin.o plmeta.o $(DRPLIB)
	$(CC) mapshow.o scanlog.o contour.o grey.o xwin.o plmeta.o \
	-o mapshow $(XLIBRARY) $(PLLIB) -lX11 $(LDFLAGS)
mapview: mapview.o $(DRPLIB) 
	$(CC) mapview.o -o mapview $(LDFLAGS)
modify: modify.o $(DRPLIB)
	$(CC) modify.o -o modify $(LDFLAGS)
moment: moment.o $(DRPLIB) 
	$(CC) moment.o -o moment $(LDFLAGS)
noise: noise.o $(DRPLIB)
	$(CC) noise.o -o noise $(LDFLAGS)
pixel: pixel.o $(DRPLIB) 
	$(CC) pixel.o -o pixel $(LDFLAGS)
put: put.o $(DRPLIB)
	$(CC) put.o -o put $(LDFLAGS)
putants: putants.o dfil.a $(DRPLIB)
	$(CC) putants.o -o putants dfil.a $(LDFLAGS)
putcfits: putcfits.o cfits.o $(DRPLIB) 
	$(CC) putcfits.o cfits.o -o putcfits $(LDFLAGS)
putdrsp: putdrsp.o $(DRPLIB)
	$(CC) putdrsp.o -o putdrsp $(LDFLAGS)
putfits: putfits.o fits.o $(DRPLIB) 
	$(CC) putfits.o fits.o -o putfits $(LDFLAGS)
putmatlab: putmatlab.o $(DRPLIB)
	$(CC) putmatlab.o -o putmatlab $(LDFLAGS)
redres: redres.o $(DRPLIB)
	$(CC) redres.o -o redres $(LDFLAGS)
recentre: recentre.o $(DRPLIB)
	$(CC) recentre.o -o recentre $(LDFLAGS)
reshow: reshow.o options.o xwin.o
	$(CC) reshow.o options.o xwin.o \
	-o reshow $(XLIBRARY) $(PLLIB) -lm -lX11
reverse: reverse.o $(DRPLIB)
	$(CC) reverse.o -o reverse $(LDFLAGS)
scale: scale.o $(DRPLIB)
	$(CC) scale.o -o scale $(LDFLAGS)
show: show.o spect.o angle.o xwin.o plmeta.o $(DRPLIB)
	$(CC) show.o spect.o angle.o xwin.o plmeta.o \
	-o show $(XLIBRARY) $(PLLIB) -lX11 $(LDFLAGS)
showfit: showfit.o plfit.o xwin.o plmeta.o $(DRPLIB)
	$(CC) showfit.o plfit.o xwin.o plmeta.o \
	-o showfit $(XLIBRARY) $(PLLIB) -lX11 $(LDFLAGS)
smooth: smooth.o $(DRPLIB)
	$(CC) smooth.o -o smooth $(LDFLAGS)
subtract: subtract.o $(DRPLIB)
	$(CC) subtract.o -o subtract $(LDFLAGS)
swap: swap.o $(DRPLIB)
	$(CC) swap.o -o swap $(LDFLAGS)
taufit: taufit.o $(DRPLIB)
	$(CC) taufit.o solve.o -o taufit $(LDFLAGS)
tcopy: tcopy.o $(DRPLIB)
	$(CC) tcopy.o -o tcopy $(LDFLAGS)
temp: temp.o $(DRPLIB)
	$(CC) temp.o -o temp $(LDFLAGS)
twplot: twplot.o scatter.o xwin.o plmeta.o $(DRPLIB)
	$(CC) twplot.o scatter.o xwin.o plmeta.o \
	-o twplot $(XLIBRARY) $(PLLIB) -lX11 $(LDFLAGS)
user: user.o astronomy.o $(DRPLIB)
	$(CC) user.o -o user astronomy.o $(LDFLAGS)
viewport: viewport.o $(DRPLIB)
	$(CC) viewport.o -o viewport $(LDFLAGS)
zero: zero.o $(DRPLIB)
	$(CC) zero.o -o zero $(LDFLAGS)

scan: scan.o astronomy.o $(DRPLIB)
	$(CC) scan.o -o scan astronomy.o $(LDFLAGS)
mul: mul.o astronomy.o $(DRPLIB)
	$(CC) mul.o -o mul astronomy.o $(LDFLAGS)


dfil.a: dfil.o
	ar r dfil.a dfil.o
	ranlib dfil.a

libfft.a: libfft.o
	ar r libfft.a libfft.o
	ranlib libfft.a

libdrp.a: getput.o convert.o options.o error.o radian.o
	ar r libdrp.a getput.o convert.o options.o error.o radian.o
	ranlib libdrp.a

average.o area.o \
bandpass.o base.o baseline.o bias.o \
calc.o centre.o clip.o contour.o convert.o convolve.o correlate.o cotex.o \
cube.o \
data.o drop.o drp.o dump.o \
filter.o fitscube.o fitsmap.o fits.o fft.o fold.o \
gauss.o get.o getants.o getfits.o getpc.o getsest.o \
hanning.o hardcopy.o header.o \
inquire.o \
line.o listhead.o list.o liszt.o \
mapshow.o mapview.o modify.o noise.o \
pixel.o put.o putdrsp.o putfits.o putmatlab.o \
ratio.o redres.o recentre.o reshow.o reverse.o\
scale.o scanlog.o scatter.o show.o showcube.o showfit.o smooth.o spect.o \
subtract.o swap.o \
tarscan.o tcopy.o temp.o twplot.o \
user.o \
viewport.o scan.o mul.o \
zero.o: drp.h

drpwindow.o: drpwindow.c shmcom.h
	$(CC) $(CFLAGS) $(XINCLUDE) drpwindow.c

cfits.o cube.o fits.o fitsmap.o fitscube.o \
getcfits.o getfits.o putcfits.o putfits.o : fits.h

getants.o putants.o: dfil.h

getput.o: getput.c drp.h shmcom.h
	$(CC) $(CFLAGS) getput.c

inquire.o: inquire.c
	$(CC) $(CFLAGS) $(XINCLUDE) inquire.c

options.o: options.c options.h

plmeta.o: plmeta.c 
	$(CC) $(CFLAGS) -DPLMETA plmeta.c

xwin.o: xwin.c 
	$(CC) $(CFLAGS) $(XINCLUDE) -DXWIN xwin.c

install:
	mkdir -p $(fontdir)
	$(INSTALL) -m 644 PLPLOT/fonts/plstnd4.fnt $(fontdir)
	$(INSTALL) -m 644 PLPLOT/fonts/plxtnd4.fnt $(fontdir)
	mkdir -p $(exedir)
	$(INSTALL) -m 755 drp $(exedir)
	mkdir -p $(bindir)
	$(INSTALL) -m 755 $(commands) $(bindir)
	$(INSTALL) -m 755 $(utilities) $(bindir)

clean:
	rm -f *.o *.a *~ #*# core
	cd PLPLOT; $(MAKE) clean; cd ..
	rm -f $(commands)
	rm -f $(utilities)

distclean: clean
	rm -fvR debian/drp
