#GNU Makefile to build Library libnamlib.a 
#Note:
# If used outside of NTCC
# you must have inclshare and incl_cpp dirs
#or
# make BINDIR=/usr/ntcc/bin INCFLAGS="-/usr/ntcc/include/fpreproc -I/u/ludesche/afs/transp/codesys/source/inclshare"
#
#06/24/03 C. Ludescher
#

# define system dependent flags, etc.
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

# define system dependent flags, etc.
-include  ../share/Make.local
include ../share/Make.flags

ifneq ($(MAKELEVEL),0)
# if OBJ was defined for main Makefile one level down
ifeq ("${OBJ}",".")
	override OBJ=..
endif
endif

ifdef DEBUG
	FFLAGS = $(DFFLAGS)
endif

ARC = $(OBJ)/lib/libnamlib.a
OBJDIR = $(OBJ)/obj/namlib

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

#=============================================================
# f90 modules
Mnams = nlxlist.mod
Mobjs = nlxlist.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
FALL  = $(subst .f,.o, $(wildcard *.f)) $(subst .F,.o, $(wildcard *.F)) \
        $(subst .f90,.o, $(wildcard *.f90)) $(subst .F90,.o, $(wildcard *.F90)) 

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


.PHONY: clean realclean checkdir all exec

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

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

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

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

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


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

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

$(ARC): $(MODS) $(MEM)
	@$(RANLIB) $@ > /dev/null
#
#---------------------------------------------------
exec:
	@echo 

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

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

install:
	@test -d $(LIBDIR) || mkdir -p $(LIBDIR)
	@if test -f $(ARC); then \
	  umask 133; cp $(ARC) $(LIBDIR)/; \
	else test -f $(LIBDIR)/libnamlib.a || echo ">>> can not find $(ARC)";fi;  
	@test -d $(MODDIR) || mkdir $(MODDIR)
	@(cd $(MDIR); umask 133; cp $(MODULES) $(MODDIR)/)

uninstall:
	rm -f $(LIBDIR)/libnamlib.a
	(cd $(MODDIR); rm -f $(MODULES))
