############################################################
# Use first  command if you have the LAPACK library
# Use second command to compily necessary LAPACK routines 
############################################################
#LIBS	= -L$(ANILIB) -llapack  -lm 
#LIBS	= -L$(ANILIB) -llapack -laft2D-1.2dev -lm 
LIBS	= -L$(ANILIB) -llapack-3.0 -lblas -lm


############################################################
# YOU DO NOT NEED TO CHANGE THE LINES BELOW
############################################################
SYSHOME := $(shell cd ../..; /bin/pwd)
include $(SYSHOME)/src/Rules.make


############################################################
EXEMETRIC   = $(ANIBIN)/Mesh_Metric.exe
EXESOLUTION = $(ANIBIN)/Mesh_Solution.exe

LIBANI	    = $(ANILIB)/libani2D-$(version).a 
LIBLAPACK   = $(ANILIB)/liblapack-3.0.a 

OBJCORE     = mesh_metric.o mesh_solution.o ani2.o\
              metric2D.o calcrv.o \
              makM.o makQ_linear.o list_bsct.o makS.o \
              prjcrv.o lintrp2D.o dsort.o \
              nlnfnc.o minim.o \
              clpsF.o insrtP.o swapF.o moveP.o splitE.o \
	      auxSP.o auxSF.o auxSE.o \
              update.o utils.o smoothing.o tangled.o \
	      error.o time.o

OBJIO       = loadM.o saveM.o draw.o

OBJMETRIC   = $(OBJCORE) $(OBJIO) main_metric.o random.o

OBJSOLUTION = $(OBJCORE) $(OBJIO) main_solution.o 

OBJLIBANI   = $(OBJCORE) $(OBJIO)

OBJLAPACK   = $(ANILAPACK)/dsyev.o  $(ANILAPACK)/dlamch.o \
              $(ANILAPACK)/ilaenv.o $(ANILAPACK)/dlansy.o \
              $(ANILAPACK)/dlascl.o $(ANILAPACK)/dsytrd.o \
              $(ANILAPACK)/dsterf.o $(ANILAPACK)/dorgtr.o \
              $(ANILAPACK)/dsteqr.o $(ANILAPACK)/ieeeck.o \
              $(ANILAPACK)/dlassq.o $(ANILAPACK)/dlatrd.o \
              $(ANILAPACK)/dsytd2.o $(ANILAPACK)/dlanst.o \
              $(ANILAPACK)/dlae2.o  $(ANILAPACK)/dlapy2.o \
              $(ANILAPACK)/dlasrt.o $(ANILAPACK)/dorgql.o \
              $(ANILAPACK)/dorgqr.o $(ANILAPACK)/dlaset.o \
              $(ANILAPACK)/dlaev2.o $(ANILAPACK)/dlasr.o  \
              $(ANILAPACK)/dlartg.o $(ANILAPACK)/dlarfg.o \
              $(ANILAPACK)/dorg2l.o $(ANILAPACK)/dlarft.o \
              $(ANILAPACK)/dorg2r.o $(ANILAPACK)/dlarfb.o \
              $(ANILAPACK)/dlarf.o


############################################################
all: 	    help

exe: 	    $(LIBLAPACK) $(EXEMETRIC) $(EXESOLUTION) info

run-met:
	    cd ../../bin &&  $(EXEMETRIC)

run-sol:
	    cd ../../bin &&  $(EXESOLUTION)

lib:	    $(LIBANI) info

lapack:     $(LIBLAPACK) info

clean: 
	    @/bin/rm -f *.o $(ANILAPACK)/*.o *~ $(ANIBIN)/*.*ps $(ANIBIN)/*.exe 

help:
	    @echo "make {exe|run-met|run-sol|lib|clean|help|gs-ini|gs-fin|convert}"
	    @echo " "
	    @echo " Compile options:"
	    @echo "     exe - compily the code"
	    @echo " "
	    @echo " Execute options:"
	    @echo "     run-met - run code with metric-based metric"
	    @echo "     run-sol - run code with solution-based metric"
	    @echo " "
	    @echo " Library options:"
	    @echo "     lib    - library libani2D-1.3.a"
	    @echo "     lapack - library liblapack-3.0.a"
	    @echo " "
	    @echo " Misceleneous options:"
	    @echo "     gs-ini - draw initial mesh (bin/ini.ps)"
	    @echo "     gs-fin - draw final mesh   (bin/fin.ps)"
	    @echo "     clean  - clean the package"
	    @echo "     help   - print this message"
	    @echo "     convert- converts old data files into new ones"
	    @echo " "

info:
	    @echo " "
	    @echo "Executable files are located in   ani2d-1.1/bin"
	    @echo "Library files are located in      ani2d-1.1/lib"
	    @echo "Postscript figures are located in ani2d-1.1/bin"
	    @echo " "

gs-ini:
	    cd ../../bin && ggv ini.ps

gs-fin:
	    cd ../../bin && ggv fin.ps

convert:
	@echo "Creating executable file $(ANIDAT)/Main_Convert.exe"
	@$(F77) main_convert.f loadM.f saveM.f error.f -o $(ANIDAT)/Main_Convert.exe -lm 
	@cd $(ANIDAT); ./Main_Convert.exe; rm -f ./Main_Convert.exe


############################################################
$(EXEMETRIC): $(OBJMETRIC) 
	@echo ''
	@echo 'Creating executable lib/Mesh_Metric.exe' 
	@$(FLINKER) $(LDFLAGS) -o $(EXEMETRIC) $(OBJMETRIC) $(LIBS) 
	@echo ''

$(EXESOLUTION): $(OBJSOLUTION) 
	@echo ''
	@echo 'Creating executable lib/Mesh_Solution.exe' 
	@$(FLINKER) $(LDFLAGS) -o $(EXESOLUTION) $(OBJSOLUTION) $(LIBS)
	@echo ''

$(LIBANI): $(OBJLIBANI)
	@echo ''
	@rm -f $(LIBANI)
	@ar -r $(LIBANI)  $(OBJLIBANI)

$(LIBLAPACK): $(OBJLAPACK)
	@echo ''
	@rm -f $(ANILIB)/liblapack-3.0.a
	@ar -r $(ANILIB)/liblapack-3.0.a  $(OBJLAPACK)
	@echo 'If this library has been installed set LIBS = -llapack -lm'


############################################################
main_metric.o   : main_metric.f 
main_solution.o : main_solution.f  

mesh_metric.o   : lintrp.fd  
mesh_solution.o : lintrp.fd  
ani2.o          : makS.fd    colors.fd  status.fd  operat.fd  magic.fd
metric.o        : magic.fd
calcrv.o        : calcrv.f

swapF.o         : makS.fd    colors.fd  status.fd  operat.fd
clpsF.o         : makS.fd    colors.fd  status.fd  operat.fd
update.o 	: makS.fd
moveP.o  	: makS.fd    colors.fd  status.fd  magic.fd
insrtP.o 	: makS.fd    colors.fd  status.fd  operat.fd
splitE.o 	: makS.fd    colors.fd  status.fd

minim.o  	: status.fd  makS.fd
nlnfnc.o        : status.fd
makM.o   	: makS.fd    colors.fd  status.fd
makQ_linear.o   : magic.fd   status.fd
makS.o   	: makS.fd    colors.fd  status.fd  operat.fd
lintrp2D.o 	: lintrp.fd

auxSP.o         : status.fd
auxSF.o         : auxSF.f
auxSE.o         : auxSE.f

utils.o         : utils.f
smoothing.o     : smoothing.f
tangled.o       : tangled.f

time.o          : time.f

############################################################
.f.o:
	@echo '$(F77) -c $(FFLAGS) ' $*.f 
	@$(F77) $(FFLAGS) -c $*.f -o $*.o $(INCLUDE)
.c.o:
	@echo '$(CC)  -c $(CFLAGS) ' $*.c 
	@$(CC)  $(CFLAGS) -c $*.c -o $*.o

