#GNU Makefile to build test programs for xplasma 
#
#06/21/00 C. Ludescher-Furth : created
#01/23/01 CLF: add geqxpl
#05/21/01 CLF: add geqxpl2
#09/07/06 CLF: add xplasma2_test

ifneq ($(MAKELEVEL),0)
# if OBJ was defined for main Makefile one level down
ifeq ("${OBJ}",".")
	override OBJ=..
endif
endif

# define system dependent flags, etc.
-include  ../share/Make.local
include ../share/Make.flags


ifdef DEBUG
	FFLAGS = $(DFFLAGS)
endif

ifdef SHARED
	FFLAGS := $(FFLAGS) $(X_FFLAGS)
endif


ARC = 
OBJDIR = $(OBJ)/obj/xplasma

# don't rebuild library if using installed one in $PREFIX 
ifeq ($(MAKELEVEL),0)
	THISLIB=$(ARC)
endif

#=============================================================
# f90 modules
#public Module names
LDL0 =  -L$(OBJ)/lib -lold_xplasma -lxplasma_debug -lxplasma2 \
	-lgeqdsk_mds -lnscrunch -lfluxav -lr8bloat -lmclib

LDLIBS =  $(LDL0) -lsmlib -ltrgraf -lureadsub -lcomput -lvaxonly -lsg -ljc \
	 -lezcdf -llsode -llsode_linpack -lportlib \
	 -L$(PSPLINE_HOME)/lib -lpspline $(MDSLIB)

LDLIBS2 = $(LDL0) -lcomput -lvaxonly -lezcdf \
	  -lsmlib -llsode -llsode_linpack -lportlib \
	  -L$(PSPLINE_HOME)/lib -lpspline $(MDSLIB)

srcdir = $(shell pwd)
testdir = $(shell cd $(OBJ)/test; pwd)
DATA    = $(shell $(LS) *.ind *.treq_data *output.ps *.nstx *.cdf)

.PHONY: clean realclean checkdir all exec

libs: FORCE  $(ARC)
	@echo " "

all:  libs exec 
	@echo done  


FORCE: chkdirs

chkdirs:
	@test -d $(OBJ)/obj/xplasma || mkdir -p $(OBJ)/obj/xplasma
	@test -d $(OBJ)/test || mkdir $(OBJ)/test

$(ARC): $(MODS) $(MEM)
	@$(RANLIB) $@ > /dev/null

#
#---------------------------------------------------
#
# pre-pocess / compile .F
$(OBJDIR)/%.o: %.F90
	$(F90_proc)

$(OBJDIR)/%.o: %.F
	$(F_proc)

$(OBJDIR)/%.o: %.f90
	$(FC90) $(FFLAGS) $(MODFLAGS) -I./ $(INCFLAGS) $(OUT) $@ $<
	$(mv_mod)

$(OBJDIR)/%.o: %.f
	$(FC) $(FFLAGS) $(MODFLAGS) -I./ $(INCFLAGS) $(OUT) $@ $<
	$(mv_mod)

# Build Test Programs
exec: chkdirs chktest $(OBJ)/test/test_xplasma $(OBJ)/test/plot_xplasma \
	$(OBJ)/test/geqxpl $(OBJ)/test/geqxpl2 $(OBJ)/test/xplasma2_test

chktest:
	@for i in $(DATA); do \
	(cd $(OBJ)/test; $(TSTLNK) $$i || ln -s $(srcdir)/$$i $$i;) done 

$(OBJ)/test/xplasma2_test: $(OBJDIR)/xplasma2_test.o $(THISLIB)
	$(FC) $(LDFLAGS) -o $@ $< $(LDLIBS2) \
	      $(LUSRLIB) $(NETCDF) $(EDITLIBS) $(LAPACK) $(BLAS) $(XFLIB) $(XLIBS)

$(OBJ)/test/test_xplasma: $(OBJDIR)/test_xplasma.o $(THISLIB)
	$(FC) $(LDFLAGS) $(MODFLAGS) -I./ $(INCFLAGS) -o $@ $< $(LDLIBS) \
	      $(LUSRLIB) $(NETCDF) $(EDITLIBS) $(LAPACK) $(BLAS) $(XFLIB) $(XLIBS)

$(OBJ)/test/plot_xplasma: $(OBJDIR)/plot_xplasma.o $(OBJDIR)/xplasma_example.o $(THISLIB)
	$(FC) $(LDFLAGS) -o $@ $< $(OBJDIR)/xplasma_example.o $(LDLIBS) \
	$(LUSRLIB) $(NETCDF) $(EDITLIBS) $(LAPACK) $(BLAS) $(XFLIB) $(XLIBS)

$(OBJ)/test/geqxpl: $(OBJDIR)/geqxpl.o $(OBJDIR)/geqxpl_rawplot.o $(THISLIB)
	$(FC) $(LDFLAGS) $(MODFLAGS) -I./ $(INCFLAGS) -o $@ $< $(OBJDIR)/geqxpl_rawplot.o \
	$(LDLIBS) -lmds_sub -lmdstransp -lgeqdsk_mds $(LUSRLIB) \
	$(NETCDF) $(MDSLIB) \
	$(EDITLIBS) $(LAPACK) $(BLAS) $(XFLIB) $(XLIBS)

$(OBJ)/test/geqxpl2: $(OBJDIR)/geqxpl2.o $(THISLIB)
	$(FC) $(LDFLAGS) $(MODFLAGS) $(INCFLAGS) -o $@ $< $(LDLIBS) \
	-lmds_sub -lmdstransp -lgeqdsk_mds $(LUSRLIB) \
	$(NETCDF) $(MDSLIB) $(EDITLIBS) $(LAPACK) $(BLAS) $(XFLIB) $(XLIBS)

#-------------------------------------------------------------------------
install:
	@test -d $(BINDIR) || mkdir -p $(BINDIR)
	@umask 022; cp $(OBJ)/test/plot_xplasma $(BINDIR)/
	@umask 022; cp $(OBJ)/test/geqxpl $(BINDIR)/
	@umask 022; cp $(OBJ)/test/geqxpl2 $(BINDIR)/
	@test -d $(MANDIR) || mkdir -p $(MANDIR)/man3
	@umask 133; cp xplasma.3 $(MANDIR)/man3/

uninstall:
	cd ($(BINDIR); rm -f plot_xplasma geqxpl*
	rm $(MANDIR)/man3/xplasma.3

clean: 
	@rm -f $(OBJDIR)/*
	(cd $(OBJ)/test; rm -f test_xplasma2 xplasma_* plot_xplasma)

realclean: clean
	@if test -d $(OBJ)/test; then \
	  (cd $(OBJ)/test; rm -f $(DATA)); fi

