HOSTNAME = `hostname`
LIP	= ../soft/LIP
CC	= gcc
CFLAGS	= -mpentium -O6 -malign-double -fno-exceptions -fomit-frame-pointer \
		-Wall -I$(LIP) -DPOSIX_SOURCE
LFLAGS	=
OBJS	= base.o algorithm.o checkpoint.o factor.o intelem.o list.o \
		pollard.o pplus1.o prime.o
PROG	= math t1 t2 t3 t4 t5 createpdiff \
		calc car car2 car3 fac fact findcar friend \
		mersenne ts tsdist
LIBS	= $(LIP)/$(HOSTNAME)/lipr.o -lstdc++

.PHONY: subdir
subdir:
	@mkdir -p $(HOSTNAME)
	@echo HOSTNAME = $(HOSTNAME) > $(HOSTNAME)/Makefile
	@cat Makefile.subdir >> $(HOSTNAME)/Makefile
	@echo "Use 'cd $(HOSTNAME); make all' to make all programs."

.PHONY: all
all:	$(PROG)

math:	$(OBJS) math.o
	$(CC) $(LFLAGS) -o $@ $(OBJS) math.o $(LIBS)

calc:	$(OBJS) calc.o
	$(CC) $(LFLAGS) -o $@ $(OBJS) calc.o $(LIBS)

car:	$(OBJS) car.o
	$(CC) $(LFLAGS) -o $@ $(OBJS) car.o $(LIBS)

car2:	$(OBJS) car2.o
	$(CC) $(LFLAGS) -o $@ $(OBJS) car2.o $(LIBS)

car3:	$(OBJS) car3.o
	$(CC) $(LFLAGS) -o $@ $(OBJS) car3.o $(LIBS)

fac:	$(OBJS) fac.o
	$(CC) $(LFLAGS) -o $@ $(OBJS) fac.o $(LIBS)

fact:	$(OBJS) fact.o
	$(CC) $(LFLAGS) -o $@ $(OBJS) fact.o $(LIBS)

findcar:	$(OBJS) findcar.o
	$(CC) $(LFLAGS) -o $@ $(OBJS) findcar.o $(LIBS)

friend:	$(OBJS) friend.o
	$(CC) $(LFLAGS) -o $@ $(OBJS) friend.o $(LIBS)
	-ln -s friend augmented
	-ln -s friend quasi

mersenne:	$(OBJS) mersenne.o
	$(CC) $(LFLAGS) -o $@ $(OBJS) mersenne.o $(LIBS)

ts:	$(OBJS) ts.o
	$(CC) $(LFLAGS) -o $@ $(OBJS) ts.o $(LIBS)

tsdist:	$(OBJS) tsdist.o
	$(CC) $(LFLAGS) -o $@ $(OBJS) tsdist.o $(LIBS)

t1:	$(OBJS) t1.o
	$(CC) $(LFLAGS) -o $@ $(OBJS) t1.o $(LIBS)

t2:	$(OBJS) t2.o
	$(CC) $(LFLAGS) -o $@ $(OBJS) t2.o $(LIBS)

t3:	$(OBJS) t3.o
	$(CC) $(LFLAGS) -o $@ $(OBJS) t3.o $(LIBS)

t4:	$(OBJS) t4.o
	$(CC) $(LFLAGS) -o $@ $(OBJS) t4.o $(LIBS)

t5:	$(OBJS) t5.o
	$(CC) $(LFLAGS) -o $@ $(OBJS) t5.o $(LIBS)

createpdiff:	$(OBJS) createpdiff.o
	$(CC) $(LFLAGS) -o $@ $(OBJS) createpdiff.o $(LIBS)

%.o:	%.C
	$(CC) $(CFLAGS) -c $*.C >& $*.err || (cat $*.err && false)

$(OBJS) : base.h
math.o  : base.h
t1.o    : base.h
t2.o    : base.h
t3.o    : base.h
t4.o    : base.h
t5.o    : base.h
calc.o  : base.h
car.o   : base.h
car2.o  : base.h
fact.o  : base.h
friend.o        : base.h
mersenne.o      : base.h
ts.o    : base.h
tsdist.o        : base.h

.PHONY: clean
clean:
	rm -f core gmon.out *.check* *.err *.o $(PROG)
