#GNU Makefile to build TRANSP client programs 
#
#01/28/03 C. Ludescher-Furth
#
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

OBJDIR = $(OBJ)/obj/client

ifndef BEAMS
  BEAMS = -ljet_ppflib -lnb_dummy
endif


LIBS =  $(LLOC) -luflib -lmds_sub -lufhdf -lold_xplasma -lxplasma_debug \
	-lxplasma2 -lgeqdsk_mds -lmdstransp \
	-lfluxav -lmclib -lnscrunch -lr8bloat -lsmlib -ltrgraf -lureadsub \
	-lsg -ljc -lcomput -lvaxonly -lpspline -lezcdf -llsode \
	-llsode_linpack -lportlib 

LIB3 = -ltrgraf -lureadsub -lsg -ljc -lcomput -lvaxonly -lportlib

LIB3dummy =  -ltrgraf -lureadsub -lcomput -lvaxonly -lportlib -lsgdummy

LIBN = -L$(OBJ)/lib -lnblistsub -ltftrg1 $(LLOC) -lcmdummy -linterp_sub\
	-lmclib -lsmlib -luflib_userio -luflib -lmds_sub -lufhdf -lmdstransp $(LIB3)

LIBN2 = -L$(OBJ)/lib -lnb_subs -lsplitn -lmdescr -lnblistsub $(BEAMS) \
	-ltftrg1 $(LLOC) -lcmdummy -linterp_sub -lmclib -lsmlib -luflib_userio \
	 -luflib -lmds_sub -lufhdf -lmdstransp $(LIB3)

LIBM =  -L$(OBJ)/lib $(LLOC) -lrplot_sub -ltrread -ltr_getnl \
	-lrp_kernel -lrplot_io -lxdatmgr \
	-luflib -lmds_sub -lufhdf -lmdstransp \
	$(LIB3dummy)

LIBS2 =  -L$(OBJ)/lib $(LLOC) -lrplot_sub -ltrxplib -ltrread -ltr_getnl \
	-lrp_kernel -lrplot_io -lxdatmgr \
	-luflib_userio -luflib -lmds_sub -lufhdf -lold_xplasma -lxplasma_debug \
	-lxplasma2 -lgeqdsk_mds -lmdstransp -lfluxav\
	-linterp_sub -lnscrunch -lr8bloat -lmclib -lsmlib\
	-ltrgraf -lureadsub -ltridiag -lcomput -lvaxonly \
	-lpspline -lezcdf -llsode -llsode_linpack -lsg -ljc \
	-lportlib 

LIBA =  -L$(OBJ)/lib $(LLOC) -lhpsort -li3encod

LIBA2 = -lvaxonly -luflib -lmds_sub -lufhdf -lmdstransp -ltrgraf \
	-lureadsub -lsg -ljc -lzm_swb -lcomput -lvaxonly \
	-lezcdf -lportlib

LIBA3 = -lvaxonly -luflib -lmds_sub -lufhdf -lmdstransp -ltrgraf \
	-lureadsub -lsg -ljc -lzm_swb -ltrnocom -lr8bloat -lpspline \
	-lezcdf  -lsmlib -lcomput -lvaxonly -lportlib

LIBT5 = -L$(OBJ)/lib -lt5debug_sub $(LLOC) -lpspline -ltrgraf -lureadsub \
	 -lsg -ljc -lcomput -lvaxonly -lportlib

LIBQ  = -L$(OBJ)/lib $(LLOC) -lgeqdsk_mds -lmdstransp -ltrgraf -lureadsub \
	-lsg -ljc -lcomput -lvaxonly -lpspline -lezcdf -lportlib

CL = scruncher scrunch2 nb_new mdsplot adisplay get_fbm t5debug nbfile  \
	merge_namelist geq_plot  

CLEXES = $(foreach file,$(CL),$(OBJ)/test/$(file))

AOBJS = $(OBJDIR)/adnames.o $(OBJDIR)/adisp1.o

# f90 modules
#Mnams =  
#NBMobjs =  
#NBMODS = $(foreach file,$(NBMobjs),$(OBJDIR)/$(file))
#MODS = $(NBMODS)

ifeq ($(MODUP),Y)
 MODS0=$(foreach m,$(Mnams),$(shell  echo $(m) | tr 'a-z' 'A-Z'))
 MODULES=$(foreach m,$(MODS0),$(subst .MOD,.$(MODEXT),$(m)))
else
 MODULES = $(foreach m,$(Mnams),$(subst .mod,.$(MODEXT),$(m)))
endif 

# nbfile includes
NB_INCL = $(subst .F_INCL,.f_incl, $(wildcard nbf*.F_INCL)) 
NBF_INCL = $(foreach file,$(NB_INCL),$(OBJDIR)/$(file))
F_INCL = $(NBF_INCL)

TDIFUN = $(shell cd ../tr_tdi; $(LS) *.fun)
#=============================================================

.PHONY: clean realclean ckdirs all
libs:
	@echo 

all: exec

exec:  ckdirs $(MODS) $(F_INCL) $(CLEXES)
	@echo done

$(OBJ)/test/adisplay: $(OBJDIR)/adisplay.o $(AOBJS)
	$(FC) $(LDFLAGS) -o $@ $< $(AOBJS) $(LIBA) $(LIB3) \
	 $(NETCDF) $(LUSRLIB) $(EDITLIBS) $(XLIBS) $(XFLIB)

$(OBJ)/test/get_fbm: $(OBJDIR)/get_fbm.o
	$(FC) $(LDFLAGS) -o $@ $(OBJDIR)/get_fbm.o -L$(OBJ)/lib \
	-lget_fbm_lib -lget_fbm_kernel $(LIBA) $(LIBA3) $(MDSLIB) \
	$(LUSRLIB) $(EDITLIBS) $(NETCDF) $(HDF) $(XLIBS) $(XFLIB)

$(OBJ)/test/scruncher: $(OBJDIR)/scruncher.o
	$(FC) $(LDFLAGS) -o $@ $< -L$(OBJ)/lib -lscrunch -lmomsub $(LIBS)\
	 $(BEAMS) $(LUSRLIB) $(EDITLIBS) $(NETCDF) $(MDSLIB) $(BLAS) $(LAPACK) $(HDF) $(XLIBS) $(XFLIB)

$(OBJ)/test/scrunch2: $(OBJDIR)/scrunch2.o
	$(FC) $(LDFLAGS) -o $@ $< -L$(OBJ)/lib -lscr2lib $(LIBS2) $(BEAMS) \
	$(LUSRLIB) $(EDITLIBS) $(NETCDF) $(MDSLIB) $(BLAS) $(LAPACK) $(HDF) $(XLIBS) $(XFLIB)

$(OBJ)/test/nb_new: $(OBJDIR)/nb_new.o  $(OBJ)/lib/libnb_subs.a
	$(FC) $(LDFLAGS) -o $@ $< $(LIBN2) $(LUSRLIB) $(EDITLIBS) $(NETCDF) $(MDSLIB) $(HDF) $(XLIBS) $(XFLIB) 

$(OBJ)/test/nbfile: $(OBJDIR)/nbfile.o $(NBMODS) $(NBF_INCL) 
	$(FC) $(LDFLAGS) -o $@ $< $(LIBN) $(BEAMS) -lsplitn  $(LUSRLIB) $(EDITLIBS) $(NETCDF) $(MDSLIB) $(HDF) $(XLIBS) $(XFLIB) 


$(OBJ)/test/mdsplot: $(OBJDIR)/mdsplot.o
	$(FC) $(LDFLAGS) -o $@ $< $(LIBM) $(LUSRLIB) $(EDITLIBS) $(NETCDF) $(MDSLIB) $(HDF) $(XLIBS) $(XFLIB) 

$(OBJ)/test/t5debug: $(OBJDIR)/t5debug.o
	$(FC) $(LDFLAGS) -o $@ $< $(LIBT5) $(LUSRLIB) $(EDITLIBS) $(NETCDF) $(XLIBS) $(XFLIB) 

$(OBJ)/test/merge_namelist : $(OBJDIR)/merge_namelist.o
	$(FC) $(LDFLAGS) -o $@ $<  -L$(OBJ)/lib $(LLOC) -lnamlib -lportlib $(XLIBS) $(XFLIB) 

$(OBJ)/test/geq_plot  : $(OBJDIR)/geq_plot.o
	$(FC) $(LDFLAGS) -o $@ $< $(LIBQ)  $(MDSLIB) $(NETCDF) $(HDF) $(EDITLIBS) $(XLIBS) $(XFLIB) 


$(OBJDIR)/%.o: %.f90
	$(FC) $(FFLAGS) $(MODFLAGS) $(INCFLAGS) $(OUT) $@ $<

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

$(OBJDIR)/%.f_incl: %.F_INCL
	$(PREFPP) $< $(OBJDIR)/$*.f_incl $(INCFLAGS) $(DEFS) $(DPY) $(FPPCOM)

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

ckdirs:
	@test -d $(OBJ)/test || mkdir -p $(OBJ)/test 
	@test -d $(OBJDIR) || mkdir -p $(OBJDIR)

#---------------------------------------------------
clean: 
	@rm -f $(OBJDIR)/*

realclean: clean
	@rm -f $(CLEXES)

install:
ifneq "$(TDIDIR)" ""
	@test -d $(TDIDIR) || mkdir -p $(TDIDIR)
	@(cd ../tr_tdi; umask 133; cp $(TDIFUN) $(TDIDIR)/)
else
	@echo ">>>>>    To install the TDI Functions    <<<<<"
	@echo ">>>>>       you must define TDIDIR       <<<<<"
endif
	@test -d $(BINDIR) || mkdir -p $(BINDIR)
	@-(cd $(OBJ)/test; umask 022; cp  $(CL) $(BINDIR))
	@test -d $(ETCDIR)/mdescr || mkdir -p $(ETCDIR)/mdescr
	(cd ../etc/mdescr; cp *.mdescr $(ETCDIR)/mdescr/)


uninstall:
	@(cd $(BINDIR); rm -f $(CL))
ifneq "$(TDIDIR)" ""
	@(cd $(TDIDIR); rm -f $(TDIFUN))
endif
