#GNU Makefile to build adas310_fortran_driver
#
#01/16/12 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

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

OBJDIR = $(OBJ)/obj/nubeam

ifdef MPI_ACTIVATE
  ARC = $(OBJ)/lib/libmpi_adas310_fortran_driver.a
  ALIB = mpi_adas310_fortran_driver
  MDIR = $(OBJ)/mpi_mod
  Z := $(MODDIR:mod=mpi_mod)
  MODDIR = $(Z)
  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)
  DCFLAGS = $(MPI_DCFLAGS)
  CXXFLAGS = $(MPI_CXXFLAGS)
  DCXXFLAGS = $(MPI_DCXXFLAGS)
  LDFLAGS := $(MPI_LDFLAGS)
else
  MDIR = $(OBJ)/mod
  ARC = $(OBJ)/lib/libadas310_fortran_driver.a
  ALIB = adas310_fortran_driver
endif

ifdef DEBUG
	FFLAGS = $(DFFLAGS)
	CFLAGS = $(DCFLAGS)
	CXXFLAGS = $(DCXXFLAGS)
endif

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

#=============================================================
# f90 modules
# public modules names

Mnams = adas310_iomod.mod adas310_mod.mod adas310_mrun310.mod

# all modules file names - order of copilation 
Mobjs =  adas310_iomod.o adas310_mod.o adas310_mrun310.o

MODS = $(foreach file,$(Mobjs),$(ARC)($(file)))

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 
 
# fortran archive members
F1 = $(subst .f90,.o, $(wildcard *.f90)) $(subst .for,.o, $(wildcard *.for)) $(subst .f,.o, $(wildcard *.f))
F2 = $(subst .F90,.o, $(wildcard *.F90)) $(subst .F,.o, $(wildcard *.F))
FALL = $(F1) $(F2)

MEM = $(foreach file,$(FALL),$(ARC)($(file)))


srcdir  = $(shell pwd)

.PHONY: clean realclean checkdirs all exec


libs: FORCE  $(ARC)
 
all:  libs 
	@echo done  

$(OLDLIB): timestamp.inf
	@echo "--- DETECTED xplasma.a source update"
	@echo "--- Re-Making $(ARC)"
	@$(MAKE) libs

exec:
	@echo "No program for adas310_fortran_driver"

FORCE: chkdirs
	@test -d $(OBJ)/lib || mkdir -p $(OBJ)/lib
	@test -d $(MDIR) || mkdir -p $(MDIR)

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

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


#pre-process/compile fixed length fortran 90 code
$(ARC)(%.o): %.F
	$(F_proc)
	$(make_ar)

#  compile fixed length fortran 90 code
$(ARC)(%.o): %.f
	$(FC) $(FFLAGS) $(MODFLAGS) -I./ $(INCFLAGS) $(OUT) $(OBJDIR)/$*.o $<
	$(make_ar)

$(ARC)(%.o): %.for
	$(FC) $(FFLAGS) $(MODFLAGS) -I./ $(INCFLAGS) $(OUT) $(OBJDIR)/$*.o $<
	$(make_ar)


#  compile free form fortran 90 code
$(ARC)(%.o): %.f90
	$(FC90) $(FFLAGS) $(MODFLAGS) -I./ $(INCFLAGS) $(OUT) $(OBJDIR)/$*.o $<
	$(make_ar)

# pre-process/compile free form fortran 90 code
$(ARC)(%.o): %.F90
	$(F90_proc)
	$(make_ar)



#-------------------------------------------------------------------------
ckins:
	@test -d $(LIBDIR) || mkdir -p $(LIBDIR)
	@test -d $(MODDIR) || mkdir -p $(MODDIR)

install: ckins 
	@if test -f $(ARC); then \
	  umask 133; cp $(ARC) $(LIBDIR)/; \
	else test -f $(LIBDIR)/lib$(ALIB).a || echo ">>> can not find $(ARC)";fi;
	$(foreach file,$(MODULES),$(shell cp $(MDIR)/$(file) $(MODDIR)/))

uninstall:
	$(foreach m,$(MODULES),$(shell rm -f $(MODDIR)/$(m) ))
	rm -f $(LIBDIR)/lib$(ALIB).a

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

realclean: clean
	@rm -f $(ARC)
	@if test -d $(MDIR); then \
	  (cd $(MDIR); rm -f $(MODULES)); fi

