include ../../Configure
HOME    =       $(ROOT)/src/imregister

default: all

BIN	=	$(HOME)/bin
INC	= 	$(HOME)/include
SRC	=	$(HOME)/src
MAN	=	$(HOME)/doc
DESTBIN	=	$(LBIN)
DESTLIB	=	$(LLIB)
DESTINC	=	$(LINC)
DESTMAN	=	$(LMAN)

BASEDIR =	$(HOME)/base
DETREND =	$(HOME)/detrend
PHOTREG =	$(HOME)/photreg
IMREG   =	$(HOME)/imreg
SPREG   =	$(HOME)/spreg

INCS	= 	-I$(INC) -I$(LINC) -I$(XINC)
LIBS	= 	-L$(LLIB) -lohana -lFITS -lm 
CFLAGS	=	$(INCS)
LFLAGS	=	$(LIBS)

# programs which should be installed
INSTALL = \
detregister  detsearch    \
imregister   imstatreg    \
imsort       imsearch     \
showiminfo   convertimreg \
imregtable   photcode	  \
photsearch   photreg      \
cameraconfig filtnames    \
imphotsearch imphotmerge  \
imphotset	          

# spregister   spsearch

# program under development, not installed
DEVEL = spregister spsearch

IMOBJ  = \
$(IMREG)/delete.$(ARCH).o \
$(IMREG)/iminfo.$(ARCH).o \
$(IMREG)/load_probes.$(ARCH).o  \
$(IMREG)/match.$(ARCH).o  \
$(IMREG)/modify.$(ARCH).o \
$(IMREG)/newimages.$(ARCH).o \
$(IMREG)/output.$(ARCH).o \
$(IMREG)/unique.$(ARCH).o \
$(IMREG)/cadc.$(ARCH).o   \
$(IMREG)/mosaics.$(ARCH).o   \
$(IMREG)/ConfigPID.$(ARCH).o   \
$(IMREG)/SetSignals.$(ARCH).o   \
$(IMREG)/rconnect.$(ARCH).o   \
$(IMREG)/FifoOps.$(ARCH).o   \
$(IMREG)/SockScan.$(ARCH).o   \
$(IMREG)/submit.$(ARCH).o \
$(IMREG)/imregclient.$(ARCH).o

SPOBJ  = \
$(SPREG)/delete.$(ARCH).o   \
$(SPREG)/match.$(ARCH).o    \
$(SPREG)/modify.$(ARCH).o   \
$(SPREG)/output.$(ARCH).o   \
$(SPREG)/unique.$(ARCH).o   \
$(SPREG)/spinfo.$(ARCH).o   \
$(SPREG)/showinfo.$(ARCH).o \
$(SPREG)/ConfigInit.$(ARCH).o

PHOTOBJ  = \
$(PHOTREG)/delete.$(ARCH).o  \
$(PHOTREG)/match.$(ARCH).o   \
$(PHOTREG)/convert.$(ARCH).o \
$(PHOTREG)/output.$(ARCH).o  \
$(PHOTREG)/getImageData.$(ARCH).o

DETOBJ  = \
$(DETREND)/criteria.$(ARCH).o  \
$(DETREND)/delete.$(ARCH).o    \
$(DETREND)/entry.$(ARCH).o     \
$(DETREND)/image.$(ARCH).o     \
$(DETREND)/imdef.$(ARCH).o     \
$(DETREND)/match.$(ARCH).o     \
$(DETREND)/modify.$(ARCH).o    \
$(DETREND)/mosaic.$(ARCH).o    \
$(DETREND)/output.$(ARCH).o    \
$(DETREND)/recipe.$(ARCH).o    \
$(DETREND)/select.$(ARCH).o    \
$(DETREND)/unique.$(ARCH).o    \
$(DETREND)/altpath.$(ARCH).o   \
$(DETREND)/db_names.$(ARCH).o   \
$(DETREND)/usage.$(ARCH).o

BASEOBJ = \
$(BASEDIR)/ConfigCamera.$(ARCH).o \
$(BASEDIR)/ConfigFilter.$(ARCH).o \
$(BASEDIR)/ConfigInit.$(ARCH).o   \
$(BASEDIR)/WriteFIFO.$(ARCH).o    \
$(BASEDIR)/get_fwhm.$(ARCH).o     \
$(BASEDIR)/misc.$(ARCH).o         \
$(BASEDIR)/version.$(ARCH).o      \
$(BASEDIR)/parse_time.$(ARCH).o   \
$(BASEDIR)/fits_scan_nchar.$(ARCH).o \
$(BASEDIR)/sort.$(ARCH).o

all: $(INSTALL) $(DEVEL)

IR = $(IMREG)/args.imregister.$(ARCH).o    $(IMOBJ)   $(BASEOBJ)
IS = $(IMREG)/args.imsearch.$(ARCH).o      $(IMOBJ)   $(BASEOBJ)
DR = $(DETREND)/args.detregister.$(ARCH).o $(DETOBJ)  $(BASEOBJ)
DS = $(DETREND)/args.detsearch.$(ARCH).o   $(DETOBJ)  $(BASEOBJ)
PS = $(PHOTREG)/args.photsearch.$(ARCH).o  $(PHOTOBJ) $(BASEOBJ)
PR = $(PHOTREG)/args.photreg.$(ARCH).o     $(PHOTOBJ) $(BASEOBJ)
SR = $(SPREG)/args.spregister.$(ARCH).o    $(SPOBJ)   $(BASEOBJ)
SS = $(SPREG)/args.spsearch.$(ARCH).o      $(SPOBJ)   $(BASEOBJ)

$(SR) : $(INC)/spreg.h $(INC)/imregister.h
$(SS) : $(INC)/spreg.h $(INC)/imregister.h

# special rules:
$(BIN)/photreg.$(ARCH)      : $(SRC)/photreg.$(ARCH).o      $(PR) ; $(CC) $^ -o $@ $(LFLAGS)
$(BIN)/photsearch.$(ARCH)   : $(SRC)/photsearch.$(ARCH).o   $(PS) ; $(CC) $^ -o $@ $(LFLAGS)
$(BIN)/imsearch.$(ARCH)     : $(SRC)/imsearch.$(ARCH).o     $(IS) ; $(CC) $^ -o $@ $(LFLAGS)
$(BIN)/imregister.$(ARCH)   : $(SRC)/imregister.$(ARCH).o   $(IR) ; $(CC) $^ -o $@ $(LFLAGS)
$(BIN)/imstatreg.$(ARCH)    : $(SRC)/imstatreg.$(ARCH).o    $(IR) ; $(CC) $^ -o $@ $(LFLAGS)
$(BIN)/showiminfo.$(ARCH)   : $(SRC)/showiminfo.$(ARCH).o   $(IR) ; $(CC) $^ -o $@ $(LFLAGS)
$(BIN)/imregtable.$(ARCH)   : $(SRC)/imregtable.$(ARCH).o   $(IR) ; $(CC) $^ -o $@ $(LFLAGS)
$(BIN)/convertimreg.$(ARCH) : $(SRC)/convertimreg.$(ARCH).o $(IR) ; $(CC) $^ -o $@ $(LFLAGS)
$(BIN)/detregister.$(ARCH)  : $(SRC)/detregister.$(ARCH).o  $(DR) ; $(CC) $^ -o $@ $(LFLAGS)
$(BIN)/detsearch.$(ARCH)    : $(SRC)/detsearch.$(ARCH).o    $(DS) ; $(CC) $^ -o $@ $(LFLAGS)

$(BIN)/imsort.$(ARCH)       : $(BIN)/imregister.$(ARCH) ; rm -f $(BIN)/imsort.$(ARCH) ; cp $(BIN)/imregister.$(ARCH) $(BIN)/imsort.$(ARCH) 

$(BIN)/spsearch.$(ARCH)     : $(SRC)/spsearch.$(ARCH).o     $(SS) ; $(CC) $^ -o $@ $(LFLAGS)
$(BIN)/spregister.$(ARCH)   : $(SRC)/spregister.$(ARCH).o   $(SR) ; $(CC) $^ -o $@ $(LFLAGS)

# dependancy rules for binary code #########################
.PRECIOUS: %.$(ARCH).o
.PRECIOUS: $(BIN)/%.$(ARCH)

%.$(ARCH).o : %.c
	$(CC) $(CFLAGS) -c $< -o $@

$(BIN)/%.$(ARCH) : $(SRC)/%.$(ARCH).o $(BASEOBJ)
	@if [ ! -d $(BIN) ]; then mkdir -p $(BIN); fi
	$(CC) $^ -o $@ $(LFLAGS)

$(DESTBIN)/%: $(BIN)/%.$(ARCH)
	@if [ ! -d $(DESTBIN) ]; then mkdir -p $(DESTBIN); fi
	rm -f $(DESTBIN)/$*
	cp $(BIN)/$*.$(ARCH) $(DESTBIN)/$*

$(INSTALL) $(DEVEL): % : $(BIN)/%.$(ARCH)

%.clean :
	rm -f $(BIN)/$*.$(ARCH)

%.rebuild :
	rm -f $(BIN)/$*.$(ARCH)
	make $(DESTBIN)/$*

%.install:
	make $(DESTBIN)/$*

# utilities #################################################

install:
	for i in $(INSTALL); do make $$i.install; done

clean:
	rm -f */*.o
	rm -f */*~
