#GNU Makefile to build nubeam_driver 
#
#03/10/10 C. Ludescher-Furth : created


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

MODFLAGS := $(MODFLAGS) $(MFLAGS)$(NETCDF_DIR)/include

etcdir = $(shell (cd ../etc; pwd))
TXTFILES = $(wildcard ../etc/*.txt)
OBJDIR = $(OBJ)/obj/nubeam_driver

ifdef MPI_ACTIVATE
  ARC = $(OBJ)/lib/libmpi_nubeam.a
  PORTLIB=-lmpi_portlib
  NEXEC = $(OBJ)/test/mpi_nubeam_driver
  NOBJ = mpi_nubeam_driver.o
  NLIB = mpi_nubeam
  MDIR = $(OBJ)/mpi_mod
  MODFLAGS := $(MFLAGS)$(MDIR) $(MODFLAGS)
  FC   = $(MPI_FC)
  FC90 = $(MPI_FC)
  CC   = $(MPI_CC)
  CXX  = $(MPI_CXX)
  FFLAGS = $(MPI_FFLAGS)
  DFFLAGS = $(MPI_DFFLAGS)
  CFLAGS = $(MPI_CFLAGS)
  CXXFLAGS = $(MPI_CXXFLAGS)
  DCFLAGS = $(MPI_DCFLAGS)
  DCXXFLAGS = $(MPI_DCXXFLAGS)
  LDFLAGS = $(MPI_LDFLAGS)
  DEFS  := $(DEFS) -D__MPI
  CDEFS := $(CDEFS) -D__MPI
else
  PORTLIB=-lportlib
  ARC = $(OBJ)/lib/libnubeam.a
  NEXEC = $(OBJ)/test/nubeam_driver
  NOBJ = nubeam_driver.o
  NLIB = nubeam
endif

ifdef DEBUG
	FFLAGS = $(DFFLAGS)
	CFLAGS = $(DCFLAGS)
	CXXFLAGS = $(DCXXFLAGS)
	LDFLAGS  := $(LDFLAGS) -g
endif
# don't rebuild library if using installed one in $PREFIX 
ifeq ($(MAKELEVEL),0)
	THISLIB=$(ARC)
endif

FALL  = $(subst .f90,.o, $(wildcard *.f90))
FOBJ  = $(filter-out nubeam_driver.o,$(FALL))
OBJS  = $(foreach file, $(FOBJ), $(OBJDIR)/$(file))
LDLIBS = -L$(PSPLINE_HOME)/lib -lpspline \
        -L$(OBJ)/lib -l$(NLIB) -lget_fbm_kernel -lrfxqlo \
	-lkdsaw -lxstraln -lfrantic \
	-lplot_fpreact -lfpreact \
	$(LLOC) -lpreact -lsigsub \
	-L$(OBJ)/lib -ladas310_fortran_driver \
	$(LLOC) -laladdinsub \
	-L$(OBJ)/lib -lplasma_state -lps_xplasma2 -lplasma_state_kernel \
	$(LLOC) -lold_xplasma -lxplasma_debug -lxplasma2 \
	-lfluxav -lmclib -lsmlib -lnscrunch \
	-lr8bloat -lezcdf -llsode -llsode_linpack \
	-L$(OBJ)/lib -lrandom \
	$(LLOC) -luflib -lufhdf \
	-L$(OBJ)/lib -lgeqdsk_mds -lmdstransp -lmds_sub \
	$(LLOC) -lvaxonly -lcomput \
	-L$(OBJ)/lib $(PORTLIB)
srcdir  = $(shell pwd)
testdir = $(shell cd $(OBJ)/test; pwd)


.PHONY: clean realclean checkdirs all exec


libs: FORCE  
 
all:  libs exec 
	@echo done  


FORCE: chkdirs

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


#
#---------------------------------------------------
#
# Build Test Programs
#=====================

$(OBJDIR)/mpi_nubeam_driver.o: nubeam_driver.F90
	$(proc_F90)

$(OBJDIR)/nubeam_driver.o: nubeam_driver.F90
	$(proc_F90)

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

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

$(OBJDIR)/%.o: %.F90
	$(proc_F90)

exec: chkdirs $(OBJS) $(NEXEC)

$(NEXEC): $(OBJDIR)/$(NOBJ) $(THISLIB) 
	$(FC) $(LDFLAGS) -o $@ $< $(OBJS) $(LDLIBS) $(LUSRLIB) $(MDSLIB) $(NETCDF) $(LAPACK) $(BLAS) $(XFLIB) $(XLIBS) $(EDITLIBS) $(CLIBS)


#-------------------------------------------------------------------------
install:
	@test -d $(BINDIR) || mkdir -p $(BINDIR)
	@test -d $(ETCDIR) || mkdir -p $(ETCDIR)
	umask 022; cp $(NEXEC) $(BINDIR)/
	umask 133; cp $(TXTFILES) $(ETCDIR)/ 

uninstall:
	rm $(BINDIR)/*nubeam_driver
	@(cd $(ETCDIR); rm -f $(TXTFILES))

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

realclean: clean


