#GNU Makefile to build Library libesc.a 
#
#12/04/00 C. Ludescher-Furth
#
#09/27/04 CAL: merged ntcc/esc/Makefile source/esc/esc.mk 

ifneq ("$(wildcard ../share/Make.flags)","")
	SHR = ../share/Make.flags
	SHRL = ../share/Make.local
else
	SHR = $(CODESYSDIR)/source/misc/makeflags.mk
	SHRL = $(CONFIGDIR)/Make.local
endif
-include $(SHRL)
include $(SHR)

# 05/26/10: now defined in esc_local.h
#CDEFS := $(CDEFS) -DASTRA -DNO_LSODE

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

ifeq ($(MACHINE),SUN)
   CC=cc
endif

ifdef CODESYSDIR
  OBJ=${LOCAL}
  ARC =  $(OBJ)/lib/esc.a
  OBJDIR = $(OBJ)/obj/esc
else
  ifneq ($(MAKELEVEL),0)# don't rebuild library if using installed one in $PREFIX 
    ifeq ("${OBJ}",".")
	override OBJ=..
    endif
  endif
  ARC =  $(OBJ)/lib/libesc.a
  OBJDIR = $(OBJ)/obj/esc
endif

ifeq ($(MAKELEVEL),0)
	THISLIB=$(ARC)
endif

.PHONY: all install clean realclean

srcdir = $(shell pwd)

# library members
FMEM=$(subst .f,.o,$(wildcard *.f)) $(subst .for,.o,$(wildcard *.for))
CMEM = $(subst .c,.o, $(filter-out ast.c, $(wildcard *.c)))
MEM  = $(foreach m,$(CMEM) $(FMEM),$(ARC)($(m)))

ifneq ("$(wildcard $(srcdir)/esc_test.*)","")
    MK_EXEC= $(OBJ)/test/esc_test makelink
else
    MK_EXEC= makelink
endif

libs: chkdirs $(ARC)

libesc: libs

all: libs exec
	@echo done 

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

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

# compile c
$(ARC)(%.o): %.c
	$(c_proc)
	$(make_ar)

# compile fixed Fortran
$(ARC)(%.o): %.f
	$(FC) $(FFLAGS) $(OUT) $(OBJDIR)/$*.o $<
	$(make_ar)

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

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

exec: $(MK_EXEC)

makelink: 
	@test -d $(OBJ)/test || mkdir $(OBJ)/test
	@if test  -f $(srcdir)/mesh.mtv_ref; then \
	   (cd $(OBJ)/test; $(TSTLNK) mesh.mtv_ref || ln -s $(srcdir)/mesh.mtv_ref mesh.mtv_ref); \
	   (cd $(OBJ)/test; $(TSTLNK) prof.mtv_ref || ln -s $(srcdir)/prof.mtv_ref prof.mtv_ref); fi

#	@(cd $(OBJ)/test; $(TSTLNK) esc.cfg || ln -s $(srcdir)/esc.cfg esc.cfg)

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

$(OBJ)/test/esc_test: $(OBJDIR)/esc_test.o $(ARC)
	$(FC90) $(LDFLAGS) -o $@ $< $(ARC) $(XFLIB)

install: installdirs installlib

installlib: 
	umask 133; cp $(OBJ)/lib/libesc.a $(LIBDIR)
	umask 133; cp Esc2Any.c.3 $(MANDIR)/man3/esc2any_c.3
	umask 133; cp escget.c.3 $(MANDIR)/man3/escget_c.3


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


clean:
	@rm -f $(OBJDIR)/*
	@cd $(OBJ)/test; rm -f esc* *mtv_ref

realclean: clean
	@rm -f $(ARC)



