#
# cirpass makefile
#

instpath  = .

CC        = gcc
CPP       = g++
F77       = g77 # only needed if you intend to use pgplot

# Defaults to a linux build, if your OS is one of those below then uncomment
# the appropriate line

##### Linux #####
#
# Changes should only be needed if you wish to use the
# programs linked against pgplot.
# Compile the non-pgplot programs first though.
#
#
#XLIB 	= -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 
# Directory is location of X11.so

# Edit 

#PGDIR     = $(instpath)/extern/pgplot5.2 # Cirpass provided
#PGDIR	  = /usr/local/pgplot # Possible on-site location

# Uncomment
#PGPLOT    = -L$(PGDIR) -lcpgplot -lpgplot
#
################

##### Sun #####
# Uncomment the relevant one of these, if any
#SUNOS57   = -lsocket -lnsl
#SUNOS58   = -lsocket
#SUNOS59   = -lsocket -lnsl

# Uncomment and edit these if you wish to use the programs linked
# against pgplot

#XLIB      = -I/usr/openwin/include -L/usr/openwin/lib  -L/opt/X11R6/lib -lX11  # Directory is location of X11.so

#fortran libraries for CC linker needed for SUN compile
#F_LIBRARIES          = -lF77 -lM77 -lsunmath -lm
#F_LIBRARIES_DIR	     = /opt/SUNWspro/lib 

# Edit 
#PGDIR     = $(instpath)/extern/pgplot5.2 # Cirpass provided
#PGDIR	  = /usr/local/pgplot # Possible on-site location

# Uncomment
#PGINC     = -I$(PGDIR) -I/usr/openwin/include # For on-site pgplot 
#PGPLOT    = -L$(PGDIR) -lcpgplot -lpgplot -L$(F_LIBRARIES_DIR) $(F_LIBRARIES)
#
###############

# -------------------- Should not need to edit below ---------------------

ajd       = $(instpath)
raj       = $(instpath)
OUTPUT    = -o $@
IFLAGS    = -I$(ajd)/src/include -I$(raj)/src/include -I$(ajd)/extern/cfitsio -I$(ajd)/extern/nrroutines $(PGINC)
CFLAGS    = -O3 -Wall -ansi -pedantic -g
FFLAGS    = -O3 -Wall 
RM        = rm -f
RANLIB    = true
AR        = ar
ARFLAGS   = rcv
LDFLAGS   = -L$(ajd)/lib -L$(ajd)/extern/cfitsio
LDLIBS    = -lcirpass -lc -lm -lcfitsio $(SUNOS57) $(SUNOS58) $(SUNOS59)
COMPFLAGS = $(CFLAGS) $(IFLAGS)
LINKFLAGS = $(LDFLAGS) $(LDLIBS) $(PGPLOT) $(XLIB)
FCOMPFLAGS= $(FFLAGS) $(IFLAGS)
COMPILE.c = $(CC) $(CFLAGS) $(IFLAGS) -c
LINK.c    = $(CC) $(CFLAGS) $(IFLAGS) $(LDFLAGS)

.c:
	$(LINK.c) $(OUTPUT) $< $(LDLIBS)
.c.o:
	$(COMPILE.c) $(OUTPUT) $<
.c.a:
	$(COMPILE.c) -o $% $<
	$(AR) $(ARFLAGS) $@ $

default: core

core: cirpass optextract_float cosmic stack stack_average zerosub mkerr lincorr ifudisplay addapinfo addfibreinfo findap peakfind peakfind_sep mosaic peaktrace peakcentre cirparith makemef makemef2 makemef3 interp sortfile insert_table

utils: unfit maketoday makedata make2ktoday make2kdata pixel makecube c_get_imsets readnoise cube rdncube hotpix interp # rtable

usepgplot: plot specmark specmark_no_wav lsqfit lsqfit2 bit_check

all: core utils usepgplot

# AJD ####

OBJ_FITSWRAP = $(ajd)/src/fitswrap/fitswrap.o

OBJ_COSMICRAY = $(ajd)/src/cosmicray/cosmicray.o

OBJ_UNFIT_CODE = $(ajd)/src/unfit_code/unfit_code.o

OBJ_MKERROR = $(ajd)/src/mkerror/mkerror.o

OBJ_NRROUTINES = $(ajd)/extern/nrroutines/nrroutines.o

OBJ_LIBADDFIBREINFO = $(ajd)/src/libaddfibreinfo/libaddfibreinfo.o

OBJ_LIBADDAPINFO = $(ajd)/src/libaddapinfo/libaddapinfo.o

OBJ_SUMSPEC = $(ajd)/src/sumspec/sumspec.o

OBJ_SPECSORT = $(ajd)/src/specsort/specsort.o

OBJ_APSORT = $(ajd)/src/apsort/apsort.o

OBJ_LENSSORT = $(ajd)/src/lenssort/lenssort.o

OBJ_MATH = $(ajd)/src/mathutils/median.o $(ajd)/src/mathutils/minmax.o  $(ajd)/src/mathutils/centroid.o

OBJ_AJD =  $(OBJ_FITSWRAP) $(OBJ_COSMICRAY) $(OBJ_UNFIT_CODE) \
	   $(OBJ_MKERROR) $(OBJ_NRROUTINES) $(OBJ_LIBADDFIBREINFO) \
	   $(OBJ_SUMSPEC) $(OBJ_SPECSORT) $(OBJ_APSORT) $(OBJ_LENSSORT) \
	   $(OBJ_LIBADDAPINFO) $(OBJ_MATH)

# RAJ ####
 
OBJ_EXTRACT = $(raj)/src/extract/extract.o 

OBJ_EXTRACT_F = $(raj)/src/extract/extract_float.o

OBJ_MATRIX = $(raj)/src/extract/matrix_solver.o

OBJ_MATRIX_F = $(raj)/src/extract/matrix_solver_float.o

OBJ_RAJ = $(OBJ_MATRIX) $(OBJ_EXTRACT)

OBJ_RAJ_F = $(OBJ_MATRIX_F) $(OBJ_EXTRACT_F)

# CIRPASS ####

OBJ_CIRPASS = $(OBJ_AJD) $(OBJ_RAJ_F)

.PHONY : clean
clean:
	$(RM) $(ajd)/src/*/*.o $(ajd)/bin/* $(ajd)/lib/libcirpass.a $(ajd)/extern/nrroutines/nrroutines.o

# the cd .. below is in case $ajd is a relative directory
cfitsio: 
	@(cd $(ajd)/extern ; tar -xvf cfitsio2036.tar ; cd .. ; cd $(ajd)/extern/cfitsio ; rm -f *.o libcfitsio.a ; ./configure; make)

#
# Build cirpass library
#

cirpass: $(ajd)/lib/libcirpass.a

$(ajd)/lib/libcirpass.a: $(OBJ_CIRPASS)
	$(AR) $(ARFLAGS) $(ajd)/lib/libcirpass.a $(OBJ_CIRPASS)
	$(RANLIB) $(ajd)/lib/libcirpass.a

#
# Build cirpass executables
#
optextract: $(raj)/src/extract/optextract.c cirpass 
	$(CC) $(COMPFLAGS) $(raj)/src/extract/optextract.c \
		-o $(raj)/bin/optextract $(LINKFLAGS)

optextract_float: $(raj)/src/extract/optextract_float.c cirpass 
	$(CC) $(COMPFLAGS) $(raj)/src/extract/optextract_float.c \
		-o $(raj)/bin/optextract_float $(LINKFLAGS)

write_data: $(raj)/src/extract/write_data.c cirpass
	$(CC) $(COMPFLAGS) $(raj)/src/extract/write_data.c \
		-o $(raj)/bin/write_data $(LINKFLAGS)

test_writefitskey: $(raj)/src/drivers/test_writefitskey.c cirpass
	$(CC) $(COMPFLAGS) $(raj)/src/drivers/test_writefitskey.c \
		-o $(raj)/bin/test_writefitskey $(LINKFLAGS)	
test_definevars: $(raj)/src/drivers/test_definevars.c
	$(CC) $(COMPFLAGS) $(raj)/src/drivers/test_definevars.c \
		-o $(raj)/bin/test_definevars $(LINKFLAGS)

quicktest: $(ajd)/src/drivers/quicktest.c
	$(CC) $(COMPFLAGS) $(ajd)/src/drivers/quicktest.c \
		-o $(ajd)/bin/quicktest $(LINKFLAGS)

test: $(ajd)/src/drivers/test.c
	$(CC) $(COMPFLAGS) $(ajd)/src/drivers/test.c \
		-o $(ajd)/bin/test $(LINKFLAGS)

cosmic: $(ajd)/src/drivers/cosmic.c cirpass
	$(CC) $(COMPFLAGS) $(ajd)/src/drivers/cosmic.c \
		-o $(ajd)/bin/cosmic $(LINKFLAGS)

stack: $(ajd)/src/stack/stack.c
	$(CC) $(COMPFLAGS) $(ajd)/src/stack/stack.c \
		-o $(ajd)/bin/c_stack $(LINKFLAGS)

stack_average: $(ajd)/src/stack_average/stack_average.c
	$(CC) $(COMPFLAGS) $(ajd)/src/stack_average/stack_average.c \
		-o $(ajd)/bin/c_stack_average $(LINKFLAGS)

unfit: $(ajd)/src/drivers/unfit.c
	$(CC) $(COMPFLAGS) $(ajd)/src/drivers/unfit.c \
		-o $(ajd)/bin/unfit $(LINKFLAGS)

zerosub: $(ajd)/src/zerosub/zerosub.c
	$(CC) $(COMPFLAGS) $(ajd)/src/zerosub/zerosub.c \
		-o $(ajd)/bin/zsub $(LINKFLAGS)

mkerr: $(ajd)/src/drivers/mkerr.c
	$(CC) $(COMPFLAGS) $(ajd)/src/drivers/mkerr.c \
		-o $(ajd)/bin/mkerr $(LINKFLAGS)

lincorr: $(ajd)/src/lincorr/lincorr.c
	$(CC) $(COMPFLAGS) $(ajd)/src/lincorr/lincorr.c \
		-o $(ajd)/bin/lincorr $(LINKFLAGS)

plot: $(ajd)/src/plot/plot.c
	$(CC) $(COMPFLAGS) -c $(ajd)/src/plot/plot.c \
		-o $(ajd)/src/plot/plot.o 
	$(F77) $(FCOMPFLAGS) $(ajd)/src/plot/plot.o $(LINKFLAGS) \
		-o $(ajd)/bin/plot

specmark: $(ajd)/src/specmark/specmark.c
	$(CC) $(COMPFLAGS) -c $(ajd)/src/specmark/specmark.c \
		-o $(ajd)/src/specmark/specmark.o 
	$(F77) $(FCOMPFLAGS) $(ajd)/src/specmark/specmark.o $(LINKFLAGS) \
		-o $(ajd)/bin/specmark

specmark_no_wav: $(ajd)/src/specmark_no_wav/specmark_no_wav.c
	$(CC) $(COMPFLAGS) -c $(ajd)/src/specmark_no_wav/specmark_no_wav.c \
		-o $(ajd)/src/specmark_no_wav/specmark_no_wav.o 
	$(F77) $(FCOMPFLAGS) $(ajd)/src/specmark_no_wav/specmark_no_wav.o \
		$(LINKFLAGS) -o $(ajd)/bin/specmark_no_wav

maketoday: $(ajd)/src/utils/maketoday.c
	$(CC) $(COMPFLAGS) $(ajd)/src/utils/maketoday.c \
		-o $(ajd)/bin/maketoday $(LINKFLAGS)

makedata: $(ajd)/src/utils/makedata.c
	$(CC) $(COMPFLAGS) $(ajd)/src/utils/makedata.c \
		-o $(ajd)/bin/makedata $(LINKFLAGS)

make2ktoday: $(ajd)/src/utils/make2ktoday.c
	$(CC) $(COMPFLAGS) $(ajd)/src/utils/make2ktoday.c \
		-o $(ajd)/bin/make2ktoday $(LINKFLAGS)

make2kdata: $(ajd)/src/utils/make2kdata.c
	$(CC) $(COMPFLAGS) $(ajd)/src/utils/make2kdata.c \
		-o $(ajd)/bin/make2kdata $(LINKFLAGS)

lsqfit: $(ajd)/src/lsqfit/lsqfit.c
	$(CC) $(COMPFLAGS) -c $(ajd)/src/lsqfit/lsqfit.c \
		-o $(ajd)/src/lsqfit/lsqfit.o
	$(F77) $(FCOMPFLAGS) $(ajd)/src/lsqfit/lsqfit.o $(LINKFLAGS) \
		-o $(ajd)/bin/lsqfit

lsqfit2: $(ajd)/src/lsqfit/lsqfit2.c
	$(CC) $(COMPFLAGS) -c $(ajd)/src/lsqfit/lsqfit2.c \
		-o $(ajd)/src/lsqfit/lsqfit2.o
	$(F77) $(FCOMPFLAGS) $(ajd)/src/lsqfit/lsqfit2.o $(LINKFLAGS) \
		-o $(ajd)/bin/lsqfit2

c_get_gain: $(ajd)/src/c_get_gain/c_get_gain.c
	$(CC) $(COMPFLAGS) -c $(ajd)/src/c_get_gain/c_get_gain.c \
		-o $(ajd)/src/c_get_gain/c_get_gain.o 
	$(F77) $(FCOMPFLAGS) $(ajd)/src/c_get_gain/c_get_gain.o $(LINKFLAGS) \
		-o $(ajd)/bin/c_get_gain

pixel: $(ajd)/src/pixel/pixel.c
	$(CC) $(COMPFLAGS) $(ajd)/src/pixel/pixel.c \
		-o $(ajd)/bin/pixel $(LINKFLAGS)

c_gain: $(ajd)/src/c_gain/c_gain.c
	$(CC) $(COMPFLAGS) -c $(ajd)/src/c_gain/c_gain.c \
		-o $(ajd)/src/c_gain/c_gain.o 
	$(F77) $(FCOMPFLAGS) $(ajd)/src/c_gain/c_gain.o $(LINKFLAGS) \
		-o $(ajd)/bin/c_gain

makecube: $(ajd)/src/makecube/makecube.c
	$(CC) $(COMPFLAGS) $(ajd)/src/makecube/makecube.c \
		-o $(ajd)/bin/makecube $(LINKFLAGS)

bit_check: $(ajd)/src/bit_check/bit_check.c
	$(CC) $(COMPFLAGS) -c $(ajd)/src/bit_check/bit_check.c \
		-o $(ajd)/src/bit_check/bit_check.o 
	$(F77) $(FCOMPFLAGS) $(ajd)/src/bit_check/bit_check.o $(LINKFLAGS) \
		-o $(ajd)/bin/bit_check

c_get_imsets: $(ajd)/src/c_get_imsets/c_get_imsets.c
	$(CC) $(COMPFLAGS) $(ajd)/src/c_get_imsets/c_get_imsets.c \
		-o $(ajd)/bin/c_get_imsets $(LINKFLAGS)

ifudisp: $(ajd)/src/ifudisp/ifudisp.c
	$(CC) $(COMPFLAGS) $(ajd)/src/ifudisp/ifudisp.c \
		-o $(ajd)/bin/ifudisp $(LINKFLAGS)

ifudisp2: $(ajd)/src/ifudisp2/ifudisp2.c
	$(CC) $(COMPFLAGS) $(ajd)/src/ifudisp2/ifudisp2.c \
		-o $(ajd)/bin/ifudisp2 $(LINKFLAGS)

addfibreinfo: $(ajd)/src/addfibreinfo/addfibreinfo.c
	$(CC) $(COMPFLAGS) $(ajd)/src/addfibreinfo/addfibreinfo.c \
		-o $(ajd)/bin/addfibreinfo $(LINKFLAGS)

rtable: $(ajd)/src/drivers/rtable.c
	$(CC) $(COMPFLAGS) $(ajd)/src/drivers/rtable.c \
		-o $(ajd)/bin/rtable $(LINKFLAGS)

ifudisplay: $(ajd)/src/ifudisplay/ifudisplay.c cirpass
	$(CC) $(COMPFLAGS) $(ajd)/src/ifudisplay/ifudisplay.c \
		-o $(ajd)/bin/ifudisplay $(LINKFLAGS)

readnoise: $(ajd)/src/readnoise/readnoise.c
	$(CC) $(COMPFLAGS) $(ajd)/src/readnoise/readnoise.c \
		-o $(ajd)/bin/readnoise $(LINKFLAGS)

addapinfo: $(ajd)/src/drivers/addapinfo.c cirpass
	$(CC) $(COMPFLAGS) $(ajd)/src/drivers/addapinfo.c \
		-o $(ajd)/bin/addapinfo $(LINKFLAGS)

sumtext: $(ajd)/src/sumtext/sumtext.c
	$(CC) $(COMPFLAGS) $(ajd)/src/sumtext/sumtext.c \
		-o $(ajd)/bin/sumtext $(LINKFLAGS)

cube: $(ajd)/src/cube/cube.c
	$(CC) $(COMPFLAGS) $(ajd)/src/cube/cube.c \
		-o $(ajd)/bin/cube $(LINKFLAGS)

rdncube: $(ajd)/src/rdncube/rdncube.c cirpass
	$(CC) $(COMPFLAGS) $(ajd)/src/rdncube/rdncube.c \
		-o $(ajd)/bin/rdncube $(LINKFLAGS)

findap: $(ajd)/src/findap/findap.c cirpass
	$(CC) $(COMPFLAGS) $(ajd)/src/findap/findap.c \
		-o $(ajd)/bin/findap $(LINKFLAGS)

hotpix: $(ajd)/src/hotpix/hotpix.c cirpass
	$(CC) $(COMPFLAGS) $(ajd)/src/hotpix/hotpix.c \
		-o $(ajd)/bin/hotpix $(LINKFLAGS)

peakfind: $(ajd)/src/peakfind/peakfind.c cirpass
	$(CC) $(COMPFLAGS) $(ajd)/src/peakfind/peakfind.c \
		-o $(ajd)/bin/peakfind $(LINKFLAGS)

peakfind_sep: $(ajd)/src/peakfind_sep/peakfind_sep.c cirpass
	$(CC) $(COMPFLAGS) $(ajd)/src/peakfind_sep/peakfind_sep.c \
		-o $(ajd)/bin/peakfind_sep $(LINKFLAGS)

mosaic: $(ajd)/src/mosaic/mosaic.c cirpass
	$(CC) $(COMPFLAGS) $(ajd)/src/mosaic/mosaic.c \
		-o $(ajd)/bin/mosaic $(LINKFLAGS)

sortfile: $(ajd)/src/sortfile/sortfile.c cirpass
	$(CC) $(COMPFLAGS) $(ajd)/src/sortfile/sortfile.c \
		-o $(ajd)/bin/sortfile $(LINKFLAGS)

interp: $(ajd)/src/interp/interp.c cirpass
	$(CC) $(COMPFLAGS) $(ajd)/src/interp/interp.c \
		-o $(ajd)/bin/interp $(LINKFLAGS)

center: $(ajd)/src/drivers/center.c cirpass
	$(CC) $(COMPFLAGS) $(ajd)/src/drivers/center.c \
		-o $(ajd)/bin/center $(LINKFLAGS)

peaktrace: $(ajd)/src/peaktrace/peaktrace.c cirpass
	$(CC) $(COMPFLAGS) $(ajd)/src/peaktrace/peaktrace.c \
		-o $(ajd)/bin/peaktrace $(LINKFLAGS)

peakcentre: $(ajd)/src/peakcentre/peakcentre.c cirpass
	$(CC) $(COMPFLAGS) $(ajd)/src/peakcentre/peakcentre.c \
		-o $(ajd)/bin/peakcentre $(LINKFLAGS)

remminus: $(ajd)/src/utils/remminus.c cirpass
	$(CC) $(COMPFLAGS) $(ajd)/src/utils/remminus.c \
		-o $(ajd)/bin/remminus $(LINKFLAGS)

cirparith: $(ajd)/src/cirparith/cirparith.c cirpass
	$(CC) $(COMPFLAGS) $(ajd)/src/cirparith/cirparith.c \
		-o $(ajd)/bin/cirparith $(LINKFLAGS)

makemef: $(ajd)/src/makemef/makemef.c cirpass
	$(CC) $(COMPFLAGS) $(ajd)/src/makemef/makemef.c \
		-o $(ajd)/bin/makemef $(LINKFLAGS)

makemef2: $(ajd)/src/makemef/makemef2.c cirpass
	$(CC) $(COMPFLAGS) $(ajd)/src/makemef/makemef2.c \
		-o $(ajd)/bin/makemef2 $(LINKFLAGS)

makemef3: $(ajd)/src/makemef/makemef3.c cirpass
	$(CC) $(COMPFLAGS) $(ajd)/src/makemef/makemef3.c \
		-o $(ajd)/bin/makemef3 $(LINKFLAGS)

mad: $(ajd)/src/mad/mad.c cirpass
	$(CC) $(COMPFLAGS) $(ajd)/src/mad/mad.c \
		-o $(ajd)/bin/mad $(LINKFLAGS)

deadpix: $(ajd)/src/deadpix/deadpix.c
	$(CC) $(COMPFLAGS) $(ajd)/src/deadpix/deadpix.c \
		-o $(ajd)/bin/deadpix $(LINKFLAGS)

textplot: $(ajd)/src/textplot/textplot.c
	$(CC) $(COMPFLAGS) -c $(ajd)/src/textplot/textplot.c \
		-o $(ajd)/src/textplot/textplot.o 
	$(F77) $(FCOMPFLAGS) $(ajd)/src/textplot/textplot.o $(LINKFLAGS) \
		-o $(ajd)/bin/textplot

insert_table: $(ajd)/src/insert_table/insert_table.c
	$(CC) $(COMPFLAGS) $(ajd)/src/insert_table/insert_table.c \
		-o $(ajd)/bin/insert_table $(LINKFLAGS)

ohmask: $(ajd)/src/ohmask/ohmask.c
	$(CC) $(COMPFLAGS) -c $(ajd)/src/ohmask/ohmask.c \
		-o $(ajd)/src/ohmask/ohmask.o 
	$(F77) $(FCOMPFLAGS) $(ajd)/src/ohmask/ohmask.o $(LINKFLAGS) \
		-o $(ajd)/bin/ohmask

object_sort: $(ajd)/src/object_sort/object_sort.c
	$(CC) $(COMPFLAGS) $(ajd)/src/object_sort/object_sort.c \
		-o $(ajd)/bin/object_sort $(LINKFLAGS)
