#GNU Makefile to build lsode Library liblsode.a 
#        and test driver lsode_test
#
#07/22/99 C. Ludescher
#
# 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


OBJDIR = $(OBJ)/obj/lsode
ARC = $(OBJ)/lib/liblsode.a

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

srcdir = $(shell pwd)
#--------------------------------------------------------------------------
# .F sources
Froot =  $(subst .F,.o, $(wildcard *.F))
F = $(foreach file,$(Froot),$(OBJDIR)/$(file))
# .f sources
froot =  $(subst .f,.o, $(wildcard *.f)) $(subst .for,.o, $(wildcard *.for))
f = $(foreach file,$(froot),$(OBJDIR)/$(file))
# .c sources
CMEM =  $(subst .c,.o,$(wildcard *.c))
FMEM = $(subst .F,.o, $(wildcard *.F)) $(subst .f,.o, $(wildcard *.f)) $(subst .for,.o, $(wildcard *.for))  
MEMA = $(filter-out lsode_test.o,$(FMEM)) $(CMEM)
MEM = $(foreach file,$(MEMA),$(ARC)($(file)))

LIBS =  -L$(OBJ)/lib -llsode -llsode_linpack $(LLOC) -lportlib $(LUSRLIB) $(BLAS)

.PHONY: clean realclean checkdir

libs: FORCE $(ARC)


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

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


# pre-pocess / compile .F (test program)
$(OBJDIR)/%.o: %.F
	$(F_proc)

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

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

$(ARC)(%.o): %.F
	$(F_proc)
	$(make_ar)

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

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


all:  libs exec
	@echo done  

exec:
ifneq ("$(wildcard lsode_test.*)","")
	@test -d $(OBJDIR) || mkdir -p $(OBJDIR)	
	@test -d $(OBJ)/test || mkdir -p $(OBJ)/test	
	@(cd $(OBJ)/test; test -f lsode_test.out || ln -s $(srcdir)/lsode_test.out) 
	$(MAKE) $(OBJ)/test/lsode_test

$(OBJ)/test/lsode_test: $(OBJDIR)/lsode_test.o $(THISLIB) 
	$(FC) $(LDFLAGS) -o $@ $(OBJDIR)/lsode_test.o $(LIBS) $(XFLIB)

else
	@echo 
endif

install:
	@test -d $(LIBDIR) || mkdir -p $(LIBDIR)
	@if test -f $(ARC); then \
	  umask 133; cp $(ARC) $(LIBDIR)/; \
	else test -f $(LIBDIR)/liblsode.a || echo ">>> can not find $(ARC)";fi
	@if test -f lsode.3; then \
	test -d $(MANDIR)/man3 || mkdir -p $(MANDIR)/man3; \
	umask 133; cp lsode.3 $(MANDIR)/man3/; fi

uninstall:
	@rm -f $(LIBDIR)/liblsode.a
	@rm -f $(MANDIR)/man3/lsode.3

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

realclean: clean
	@rm -f $(OBJ)/lib/liblsode*.a
	@rm -f $(OBJ)/test/lsode*

