default: psphot
help:
	@echo "USAGE: make psphot"

CC      =       gcc
SRC     =       src
BIN     =       bin

DESTBIN =       $(HOME)/src/bin/$(ARCH)

LPSLIB  :=      $(shell pslib-config --libs)
IPSLIB  :=      $(shell pslib-config --cflags)

LPSMOD  :=      $(shell psmodule-config --libs)
IPSMOD  :=      $(shell psmodule-config --cflags)

INCS	= 	$(IPSLIB) $(IPSMOD)
LIBS	= 	$(LPSLIB) $(LPSMOD)
CFLAGS	=	$(INCS) -std=c99 -Wall -Werror -O2
LFLAGS	=	$(LIBS) 

PSPHOT = \
$(SRC)/psphot.$(ARCH).o             \
$(SRC)/psphotArguments.$(ARCH).o    \
$(SRC)/psphotSetup.$(ARCH).o	    \
$(SRC)/psphotModelTest.$(ARCH).o    \
$(SRC)/psphotImageStats.$(ARCH).o   \
$(SRC)/psphotImageBackground.$(ARCH).o \
$(SRC)/psphotFindPeaks.$(ARCH).o    \
$(SRC)/psphotSourceStats.$(ARCH).o  \
$(SRC)/psphotRoughClass.$(ARCH).o   \
$(SRC)/psphotBasicDeblend.$(ARCH).o \
$(SRC)/psphotChoosePSF.$(ARCH).o    \
$(SRC)/psphotEnsemblePSF.$(ARCH).o  \
$(SRC)/psphotFullFit.$(ARCH).o      \
$(SRC)/psphotBlendFit.$(ARCH).o     \
$(SRC)/psphotApplyPSF.$(ARCH).o	    \
$(SRC)/psphotFitGalaxies.$(ARCH).o  \
$(SRC)/psphotReplaceUnfit.$(ARCH).o \
$(SRC)/psphotApResid.$(ARCH).o      \
$(SRC)/psphotOutput.$(ARCH).o       

SUPPORT = \
$(SRC)/psphotModelGroupInit.$(ARCH).o  \
$(SRC)/psphotGrowthCurve.$(ARCH).o  \
$(SRC)/psphotEvalPSF.$(ARCH).o      \
$(SRC)/psphotEvalFLT.$(ARCH).o      \
$(SRC)/psphotSourceFits.$(ARCH).o   \
$(SRC)/psphotSortBySN.$(ARCH).o     \
$(SRC)/psphotDefinePixels.$(ARCH).o \
$(SRC)/psphotMagnitudes.$(ARCH).o   \
$(SRC)/psphotRadiusChecks.$(ARCH).o 

PSMODULES = \
$(SRC)/psLine.$(ARCH).o		    \
$(SRC)/psSparse.$(ARCH).o           \
$(SRC)/psPolynomialUtils.$(ARCH).o  \
$(SRC)/psModulesUtils.$(ARCH).o	    \
$(SRC)/pmSourceContour.$(ARCH).o    \
$(SRC)/pmModelFitSet.$(ARCH).o      \
$(SRC)/pmSourceFitSet.$(ARCH).o     

TEST = \
$(SRC)/psphotTest.$(ARCH).o     \
$(SRC)/psBicube.$(ARCH).o           \
$(SRC)/psphotTestArguments.$(ARCH).o

OLD = \
$(SRC)/psImageData.$(ARCH).o        


psphot: $(BIN)/psphot.$(ARCH)
$(BIN)/psphot.$(ARCH) : $(PSPHOT) $(PSMODULES) $(SUPPORT)
$(PSPHOT) : $(SRC)/psphot.h

test.install: psphotTest.install
test: $(BIN)/psphotTest.$(ARCH)
$(DESTBIN)/test : $(DESTBIN)/psphotTest

$(BIN)/psphotTest.$(ARCH) : $(TEST)
$(TEST): $(SRC)/psphot.h

INSTALL = psphot

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

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

$(BIN)/%.$(ARCH) : $(SRC)/%.$(ARCH).o
	@if [ ! -d $(BIN) ]; then mkdir -p $(BIN) || exit; fi
	$(CC) $^ -o $@ $(LFLAGS) || exit
	@echo "done with $@"

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

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

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

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

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

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

clean:	
	rm -f $(BIN)/*.$(ARCH)
	rm -f `find . -name "*.o"`
	rm -f `find . -name "*~"`
	rm -f `find . -name "#*"`
