# This Makefile builds MathLink binaries 
# lerch.exe, cdf.exe, and optim.exe 
# that are used by Mathematica package SDistribution.
#
#     Revision of 23/9/02
#
# SDistribution is copyright by 
# Sergej V. Aksenov and Michael A. Savageau, 2001-2
# http://aksenov.freeshell.org/
#
# At the command prompt, say "make lerch" (or "make cdf", or "make optim")
# to make a binary, or just "make" to make all targets.
# Say "make clean" to remove object files (binaries will remain).



# Please adjust the following variables for your particular system.
# By default, paths point to subdirectories inside the SDistribution tree,
# but you can modify them if you prefer to store libraries elsewhere.

# Note that if you are compiling on Sun Solaris, link to libsocket and libnsl (COMMONLIBS below)

CC = cc
MPREP = mprep #/usr/local/packages/mathematica-4.1/AddOns/MathLink/DevelopersKits/Solaris/CompilerAdditions/mprep
COMMONLIBS = -lML -lm #-lsocket -lnsl
MATHLIB = -L./ #/usr/local/packages/mathematica-4.1/AddOns/MathLink/DevelopersKits/Solaris/CompilerAdditions/
MATHINC = -I./ #/usr/local/packages/mathematica-4.1/AddOns/MathLink/DevelopersKits/Solaris/CompilerAdditions/
CVODELIB = -L./CVODE
CVODEINC = -I./CVODE
F2CLIB = -L./LIBF2C
F2CINC = -I./LIBF2C
DFOLIB = -L./DFO
DFOINC = -I./DFO
CLAPACKLIB = -L./CLAPACK
CLAPACKINC = -I./CLAPACK
CCOPTS = -g -O #-Wno-long-double



# all

all: lerch cdf optim
.PHONY: all



# Common dependencies

lerchphi.o: LERCHPHI/lerchphi.c
	$(CC) $(CCOPTS) -c LERCHPHI/lerchphi.c

sdqnt.o: SRC/sdqnt.c
	$(CC) $(CCOPTS) -c SRC/sdqnt.c

sdode.o: SRC/sdode.c
	$(CC) $(CCOPTS) $(CVODEINC) $(F2CINC) -c SRC/sdode.c

sdcdf.o: SRC/sdcdf.c
	$(CC) $(CCOPTS) -c SRC/sdcdf.c

zeroin.o: ZEROIN/zeroin.c
	$(CC) $(CCOPTS) $(F2CINC) -c ZEROIN/zeroin.c



# lerch

LERCHLIB = $(MATHLIB) $(COMMONLIBS)
LERCHINC = $(MATHINC)
LERCHOBJ = lerchtm.o
LERCHSRC = lerchtm.c

lerch: $(LERCHOBJ) lerchphi.o
	$(CC) $(LERCHOBJ) lerchphi.o -o lerch.exe $(LERCHLIB)

$(LERCHOBJ): $(LERCHSRC)
	$(CC) $(CCOPTS) $(LERCHINC) -c $(LERCHSRC)

lerchtm.c: SRC/lerch.tm
	$(MPREP) -o lerchtm.c SRC/lerch.tm


# cdf

CDFLIB = $(MATHLIB) $(CVODELIB) $(F2CLIB) -lcvode -lF77 $(COMMONLIBS)
CDFINC = $(MATHINC) 
#$(CVODEINC) $(F2CINC)
CDFOBJ = cdftm.o
CDFSRC = cdftm.c

cdf: $(CDFOBJ) lerchphi.o sdode.o sdcdf.o sdqnt.o zeroin.o
	$(CC) $(CDFOBJ) lerchphi.o sdode.o sdcdf.o sdqnt.o zeroin.o -o cdf.exe $(CDFLIB)

$(CDFOBJ): $(CDFSRC)
	$(CC) $(CCOPTS) $(CDFINC) -c $(CDFSRC)

cdftm.c: SRC/cdf.tm
	$(MPREP) -o cdftm.c SRC/cdf.tm


# optim

OPTIMLIB = $(MATHLIB) $(CVODELIB) $(F2CLIB) $(DFOLIB) $(CLAPACKLIB) -lcvode   -ldfo -llapack -lblas -lI77 -lF77 $(COMMONLIBS)
OPTIMINC = $(MATHINC) $(CLAPACKINC) -I./CFSQP $(F2CINC) 
#$(CVODEINC) 
OPTIMOBJ = optimtm.o gofdef.o zqnt.o cfsqp.o qld.o
OPTIMSRC = optimtm.c SRC/gofdef.c SRC/zqnt.c CFSQP/cfsqp.c CFSQP/qld.c

optim: $(OPTIMOBJ) lerchphi.o zeroin.o sdqnt.o sdcdf.o sdode.o
	$(CC) $(OPTIMOBJ) lerchphi.o zeroin.o sdqnt.o sdcdf.o sdode.o -o optim.exe $(OPTIMLIB)

$(OPTIMOBJ): $(OPTIMSRC)
	$(CC) $(CCOPTS) $(OPTIMINC) -c $(OPTIMSRC)

optimtm.c: SRC/optim.tm
	$(MPREP) -o optimtm.c SRC/optim.tm



# clean

clean: 
	rm *.o *tm.c
