#-----------------------------------------------------------------------
# Submakefile :: ampl
#-----------------------------------------------------------------------

ampl_topdir = $(top_srcdir)/ampl
ampl_module = $(ampl_topdir)/snopt $(ampl_topdir)/snopt-cpp

AMPL_SRCDIR = $(ampl_topdir)/solvers

AMPL_DIR    = $(top_builddir)/ampl
AMPL_OBJDIR = $(AMPL_DIR)/solvers

AMPL_FILES  = asldate   atof       auxinfo    avltree    b_search   basename   \
              bscanf    com2eval   comeval    con1ival   con2ival   con2val    \
              conadj    conpval    conscale   conval     derprop    details    \
              dtoa1     duthes     dynlink    f_read     fg_read    fg_write   \
              fgh_read  fpecatch   fpinit     fullhes    func_add   funcadd1   \
              g_fmt     genrowno   getenv     getstub    htcl       indic_cons \
              jac0dim   jac2dim    jacdim     jacinc     jacinc1    libnamsave \
              mach      mainexit   mip_pri    misc       mpec_adj   mypow      \
              names     nl_obj     nqpcheck   obj2val    obj_adj    obj_prec   \
              objconst  objval     objval_    op_type    pfg_read   pfghread   \
              printf    pshvprod   punknown   qp_read    qpcheck    qsortv     \
              readsol   repwhere   rops       rops2      sigcatch   sos_add    \
              sphes     sscanf     stderr     studchk0   suf_sos    value      \
              writesol  wrtsol_    ws_desc    wsu_desc   x2check    xectim     \
              xp1known  xp2known
AMPL_LO     = $(AMPL_FILES:%=$(AMPL_OBJDIR)/%.lo)
AMPL_DIRS   = $(AMPL_DIR) $(AMPL_OBJDIR) $(INCDIR) $(LIBDIR)

#-----------------------------------------------------------------------

all: all_ampl
install: install_ampl
uninstall: uninstall_ampl
clean: clean_ampl clean_ampl_c clean_ampl_cpp
veryclean: veryclean_ampl veryclean_ampl_c veryclean_ampl_cpp
distclean: distclean_ampl distclean_ampl_c distclean_ampl_cpp

#-----------------------------------------------------------------------

all_ampl: $(AMPL_DIRS) ampl_solver

$(AMPL_DIR): $(top_builddir)
	if [ ! -d $(AMPL_DIR) ]; then mkdir $@; fi

$(AMPL_OBJDIR): $(AMPL_DIR)
	if [ ! -d $(AMPL_OBJDIR) ]; then mkdir $@; fi

install_ampl: all_ampl
	$(INSTALL_LIB) $(LIBDIR)/libamplsolver.la $(libdir)
	$(FINISH) $(libdir)

uninstall_ampl:
	$(UNINSTALL) rm -f $(LIBDIR)/libamplsolver.la

#-----------------------------------------------------------------------

ampl_solver: $(INCDIR)/arith.h $(INCDIR)/stdio1.h $(AMPL_OBJDIR)/funcadd0.lo $(LIBDIR)/libamplsolver.la


$(LIBDIR)/libamplsolver.la: $(AMPL_LO)
	$(LINK_C) $(CFLAGS) -o $@ $(AMPL_LO) -rpath $(libdir)

ifeq ($(f2cBLD),yes)
else
$(INCDIR)/arith.h: $(AMPL_SRCDIR)/arithchk.c $(AMPL_SRCDIR)/fpinit.c
	$(CC) $(CFLAGS) -DASL_NO_FPINITMT -c $(AMPL_SRCDIR)/fpinit.c
	$(CC) $(CFLAGS) $<  fpinit.o -lm ||\
	$(CC) -DNO_LONG_LONG $(CFLAGS) $< fpinit.o -lm
	./a.out > $@
	rm -f a.out arithchk.o fpinit.o
endif

$(INCDIR)/stdio1.h: $(AMPL_SRCDIR)/stdio1.h0
	cat $^ > $@

$(AMPL_SRCDIR)/details.c: $(AMPL_SRCDIR)/details.c0
	sed "s!System_details!`uname -sr`!" $< > $@

$(AMPL_OBJDIR)/%.lo: $(AMPL_SRCDIR)/%.c
	$(COMPILE_C) $(CFLAGS) -I$(INCDIR) -c $< -o $@

#-----------------------------------------------------------------------

clean_ampl:
	$(CLEAN) rm -f $(AMPL_OBJDIR)/*.lo

veryclean_ampl: clean_ampl
	$(CLEAN) rm -f $(LIBDIR)/libamplsolver.la
	rm -rf $(INCDIR)/arith.h $(INCDIR)/stdio1.h
	rm -rf $(AMPL_SRCDIR)/details.c

distclean_ampl: veryclean_ampl

include $(patsubst %,%/Submakefile,$(ampl_module))

#-----------------------------------------------------------------------

.PHONY: all_ampl install_ampl uninstall_ampl ampl_solver \
        clean_ampl veryclean_ampl distclean_ampl
