RANLIB=ranlib

GMPVERSION=4.2.2
GMPTARBALL=gmp-$(GMPVERSION).tar.bz2

LRSVERSION=042b
LRSTARBALL=lrslib-$(LRSVERSION).tar.gz

# lpmargin needs a newish version of gmp.
# If your system gmp is old (<4.1), make gmp to build a local copy 
GMPprefix=.
GMPINC=-I$(GMPprefix)/include
GMPLIB=-L$(GMPprefix)/lib
DEFS= -DGMP

LRSDIR=./lrslib-$(LRSVERSION)
VPATH=$(LRSDIR)
LRSOBJ=lrslib.o lrsgmp.o

LRSINC=-I$(LRSDIR)
LRSLIB=-L.

CXX=g++
CC=gcc

DEBUGFLAGS=-g -O2 -Wall
ARCHFLAGS=
CXXFLAGS= $(ARCHFLAGS) $(DEBUGFLAGS)
CFLAGS=$(ARCHFLAGS) $(DEBUGFLAGS)

LIBS=  -llrs -lgmpxx -lgmp -lstdc++
LDSEARCH=$(LRSLIB) $(GMPLIB)

INCLUDES= $(LRSINC) $(GMPINC)
CPPFLAGS= $(DEFS) $(INCLUDES)
LDFLAGS=  $(LDSEARCH) $(LIBS)

.cc.o:
	$(CXX) $< $(CPPFLAGS) $(CXXFLAGS) -c -o $@
.c.o: 
	$(CC) $< $(CPPFLAGS) $(CFLAGS) -c -o $@

all:  margin

liblrs.a: 
liblrs.a: $(LRSOBJ)
	ar r liblrs.a $(LRSOBJ)
	$(RANLIB) liblrs.a

lrslib.o: lrslib.c
lrsmp.o: lrsmp.c

lrsgmp.o: lrsgmp.c

SRC=margin.cc Partition.cc LP.cc Random.cc kSet.cc Symplex.cc
OBJ=margin.o Partition.o LP.o Random.o kSet.o Symplex.o

lrstest: lrstest.o
	$(CXX) $(CFLAGS)  lrstest.o -o $@ $(LDFLAGS)

ranktest: ranktest.o
	$(CXX) $(CFLAGS)  ranktest.o -o $@ $(LDFLAGS)

ptest: ptest.o Partition.o
	$(CXX)  ptest.o Partition.o -o $@ $(LDFLAGS)

gtest: gtest.o 
	$(CXX)  gtest.o -o $@ $(LDFLAGS)

margin: $(OBJ) liblrs.a
	$(CXX) $(CXXFLAGS) $(OBJ) -o $@ $(LDFLAGS)

clean:
	rm -fr include lib *.o liblrs.a *-stamp depend.mk

reallyclean: clean
	rm -fr margin include lib $(GMPTARBALL) $(LRSTARBALL) 
	rm -fr gmp-$(GMPVERSION) lrslib-$(LRSVERSION) *-stamp lrs-fetch

dodepend: depend.mk

# ignore errors to work around missing gmp headers 
depend.mk: $(SRC)
	-$(CXX) -MM $(CPPFLAGS) $(SRC) > depend.mk

include depend.mk

gmp: gmp-build-stamp

gmp-build-stamp: gmp-unpack-stamp
	cd gmp-$(GMPVERSION) && env ABI=32 ./configure --prefix=`pwd`/.. --disable-shared --enable-cxx && make && make install
	touch build-stamp

$(GMPTARBALL): 
	wget http://ftp.sunet.se/pub/gnu/gmp/gmp-$(GMPVERSION).tar.bz2

gmp-unpack-stamp: $(GMPTARBALL)
	bunzip2 -c $(GMPTARBALL) | tar xvf -
	touch gmp-unpack-stamp


$(LRSTARBALL): 
	wget http://cgm.cs.mcgill.ca/~avis/C/lrslib/$(LRSTARBALL)

lrs-fetch: lrs-unpack-stamp
	touch $@

lrs-unpack-stamp: $(LRSTARBALL)
	gunzip -c $(LRSTARBALL) | tar xvf -
	touch $@
