# Makefile pour PolyLib V4.0
# Vincent Loechner, fvrier 1998.

ARITH_DIR = ./arithmetique
EXTRA_INCLUDES = -I$(ARITH_DIR)
EXTRA_FLAGS = -DLINEAR_VALUE_IS_LONGLONG -DLINEAR_VALUE_PROTECT_MULTIPLY \
 -DLINEAR_VALUE_ASSUME_SOFTWARE_IDIV -DDEBUG_GLOBAL_EXCEPTIONS

## pour les test : Value = chars.
#EXTRA_FLAGS = -DLINEAR_VALUE_IS_CHARS -DLINEAR_VALUE_PROTECT_MULTIPLY
## incompatible !
## -DLINEAR_VALUE_ASSUME_SOFTWARE_IDIV

CC = gcc
CFLAGS = -Wall -O4 -g $(EXTRA_INCLUDES) $(EXTRA_FLAGS) 
LDFLAGS = $(CFLAGS)

PHEADERS = polylib.h types-polylib.h poly.h polyparam.h ehrhart.h \
		$(ARITH_DIR)/arithmetique.h Makefile
PARCHIVES = polylib.a $(ARITH_DIR)/arithmetique.a

all::
	(cd $(ARITH_DIR) ; make "EXTRA_FLAGS = $(EXTRA_FLAGS)" arithmetique.a)
all:: polylib.a
all:: c2p r2p findv pp union_disjointe union_convex ehrhart
	@echo "Done."

clean:
	-rm -f *.o
	-rm -f a.out core
	-rm -f */core
	-rm -f findv pp ehrhart
	-rm -f union_disjointe union_convex r2p c2p

cleanlibs:
	(cd $(ARITH_DIR) ; make clean)
	-rm -f *.a

cleanall: clean cleanlibs


########################################################################
#  polylib.a
######################################################################## 
LIB_OBJECTS= \
	poly.o \
	polyparam.o

polylib.a: $(LIB_OBJECTS)
	ar r polylib.a $(LIB_OBJECTS)

poly.o: poly.h types-polylib.h $(PHEADERS)
#poly.h: poly.c
#	mv -f poly.h poly.h.old
#	cextract +a +w72 $(EXTRA_INCLUDES) -H_poly_h_ -o poly.h poly.c

polyparam.o : $(PHEADERS)
#polyparam.h : polyparam.c
#	echo "/* temporary polyparam.h */" >polyparam.h
#	cextract +a +w72 -H_polyparam_h_ -o polyparam.h polyparam.c



########################################################################
# executables
########################################################################

c2p: c2p.o $(PARCHIVES)
	$(CC) $(LDFLAGS) -o c2p c2p.o $(PARCHIVES)
r2p: r2p.o $(PARCHIVES)
	$(CC) $(LDFLAGS) -o r2p r2p.o $(PARCHIVES)

c2p.o: $(PHEADERS)
r2p.o: $(PHEADERS)


findv: findv.o $(PARCHIVES)
	$(CC) $(LDFLAGS) -o findv findv.o $(PARCHIVES)

pp: pp.o $(PARCHIVES)
	$(CC) $(LDFLAGS) -o pp pp.o $(PARCHIVES)

findv.o: $(PHEADERS)
pp.o: $(PHEADERS)


union_disjointe: $(PHEADERS) $(PARCHIVES)
	$(CC) $(LDFLAGS) -o union_disjointe union_disjointe.c $(PARCHIVES)
union_convex: $(PHEADERS) $(PARCHIVES)
	$(CC) $(LDFLAGS) -o union_convex union_convex.c $(PARCHIVES)


ehrhart: ehrhart.o eval_ehrhart.o $(PARCHIVES)
	$(CC) $(CFLAGS) -o ehrhart ehrhart.o eval_ehrhart.o $(PARCHIVES)

ehrhart.o: $(PHEADERS)
eval_ehrhart.o: $(PARCHIVES)


########################################################################
# unused
########################################################################

default : testlib  ehrhart
	@echo "---------------------------------------------------"
	@echo "To run the test, type: "
	@echo "    cd Test; make"
	@echo "---------------------------------------------------"

testlib : main.c poly.o lattice.o
	$(CC) $(CFLAGS) -o testlib main.c vector.o polyhedron.o lattice.o

eval_test: eval_ehrhart.o
	$(CC) -Wall -O4 -o eval_test eval_test.c eval_ehrhart.o

#all: testlib findv pp ehrhart eval_test \
#				union_disjointe union_convex r2p c2p
#	@echo "done."







installshar:
	shar * >../lib.shar

installtar:
	rm -f ../polylib.tar
	tar cvf ../polylib.tar *
	rm -f ../polylib.tar.gz
	gzip ../polylib.tar
	rm -f ../polylib.uu
	uuencode ../polylib.tar.gz polylib.tar.gz >../polylib.uu
