#-*- makefile -*-
#GNU Makefile to build Library libi2mex.a 
#
#12/04/00 C. Ludescher
# $Id: makefile.inf,v 1.16 2010-01-08 00:51:31 xshare Exp $

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

#FFLAGS += -check underflow -check overflow -check bounds \
#-warn argument_checking

.PHONY: all install clean realclean

ARC =  $(OBJ)/lib/libi2mex.a
OBJDIR = $(OBJ)/obj/i2mex

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

srcdir = $(shell pwd)
DATA   = $(shell ls *.cdf INP1* *.m *.net)

# f90 modules
Mnams = cont_mod.mod i2mex_mod.mod freeqbe_mod.mod
Mobjs = cont_mod.o i2mex_mod.o freeqbe_mod.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 

# library members
ALLMEM = $(subst .f90,.o, $(wildcard *.f90))
FMEM =$(filter-out mex2eqs.o, $(filter-out drive.o, $(ALLMEM)))
MEM = $(foreach m,$(FMEM),$(ARC)($(m)))

ifdef NO_TRXPLIB
      TRXPLIB= -lgeneric_dummy
#      MDSLIB= -lmds_dummy
#      MDSTR= -lmdstransp
else
      TRXPLIB=-ltrxplib -ltrread -ltr_getnl -lrp_kernel -lrplot_io \
	-lmds_sub -lmdstransp -lxdatmgr -linterp_sub
#  ifdef MDSLIB
#      MDSLIB:= $(MDSLIB) -lTreeShr -lMdsShr -lTdiShr
#      MDSTR=-lmdstransp 
#  else
#      MDSLIB = -lmds_dummy
#      MDSTR=
#  endif
endif

LDLIBS2 = -L$(OBJ)/lib $(LLOC) -lesc -llsode -llsode_linpack $(TRXPLIB) \
	  -lold_xplasma -lxplasma_debug -lxplasma2 -lgeqdsk_mds -lr8bloat \
	  -lsmlib -lmdstransp -lnscrunch -lfluxav \
	  -ltrgraf -lpspline -lezcdf \
	  -lmclib -lureadsub -lcomput -lvaxonly -llsode -llsode_linpack \
	  -lelvislib -lsg -ljc -lportlib 
	  
LDLIBS = -L$(OBJ)/lib $(LLOC) -lesc -llsode -llsode_linpack $(TRXPLIB) \
         -lold_xplasma -lxplasma2 -lgeqdsk_mds -lr8bloat -lmdstransp\
	 -lnscrunch -lsmlib -lfluxav -lpspline -lezcdf -lmclib \
	-lcomput -lvaxonly -lportlib  

libs: chkdirs $(ARC)

all: libs exec
	@echo done 

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

chkdirs:
	@test -d $(OBJ)/lib || mkdir -p $(OBJ)/lib
	@test -d $(OBJ)/mod || mkdir -p $(OBJ)/mod
	@test -d $(OBJ)/obj/i2mex || mkdir -p $(OBJ)/obj/i2mex
	@test -d $(OBJ)/test || mkdir $(OBJ)/test

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

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

exec: $(OBJ)/test/i2mex $(OBJ)/test/mex2eqs makelink 

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

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

$(OBJ)/test/i2mex: $(OBJDIR)/drive.o $(ARC)
	$(FC90) $(LDFLAGS) -o $@ $< $(ARC) $(LDLIBS) $(MDSLIB) $(LUSRLIB) $(NETCDF) $(BLAS)  $(LAPACK) $(XFLIB)  

$(OBJ)/test/mex2eqs: $(OBJDIR)/mex2eqs.o $(ARC)
	$(FC90) $(LDFLAGS) -o $@ $< $(ARC) $(LDLIBS2) $(MDSLIB) $(LUSRLIB) $(NETCDF) $(BLAS)  $(LAPACK) $(XFLIB) $(EDITLIBS)



install: installdirs installlib

installlib: 
	umask 133; cp $(OBJ)/lib/libi2mex.a $(LIBDIR)
	$(foreach file,$(MODULES),$(shell cp $(MDIR)/$(file) $(MODDIR)/))
#	umask 133; cp get_c.3 $(MANDIR)/man3

installdirs:
	@test -d $(MODDIR) ||  mkdir -p $(MODDIR)
	@test -d $(LIBDIR) || mkdir -p $(LIBDIR)
#	@test -d $(MANDIR)/man3 || mkdir -p $(MANDIR)/man3


clean:
	@rm -f $(OBJDIR)/*
	@(cd $(OBJ)/test; rm -f i2mex* )
	@if test -d $(MDIR); then \
	  (cd $(MDIR); rm -f $(MODULES)); fi

realclean: clean
	@rm -f $(ARC)
	@(cd $(OBJ)/test; rm -f $(DATA))

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




