# Compiler, flags, etc.
CC = gcc
DEBUG = -g -O2
WFLAGS = -ansi -Wall -Wsign-compare -Wchar-subscripts -Werror
LDFLAGS = -Wl,-rpath,/usr/local/lib

# Libraries against which the object file for each utility should be linked
INCLUDES = /usr/local/include/
LIBS = /usr/local/lib/ 
DMALLOC = -ldmalloc
GMP = -lgmp
DCRYPT = -ldcrypt

# The source file(s) for the each program
all : mtm_pki mtm_alice mtm_bob mtm_launcher mtm_mallory

edu_misc.o : edu_misc.c edu.h
	$(CC) $(DEBUG) $(WFLAGS) -I. -I$(INCLUDES) -c edu_misc.c

mtm_cert.o : mtm_cert.c mtm.h edu.h
	$(CC) $(DEBUG) $(WFLAGS) -I. -I$(INCLUDES) -c mtm_cert.c

mtm_prot.o : mtm_prot.c mtm.h edu.h
	$(CC) $(DEBUG) $(WFLAGS) -I. -I$(INCLUDES) -c mtm_prot.c

mtm_pki.o : mtm_pki.c mtm.h edu.h
	$(CC) $(DEBUG) $(WFLAGS) -I. -I$(INCLUDES) -c mtm_pki.c

mtm_pki : mtm_pki.o mtm_cert.o edu_misc.o
	$(CC) $(DEBUG) $(WFLAGS) -o $@ $@.o mtm_cert.o edu_misc.o -L. -L$(LIBS) $(DCRYPT) $(DMALLOC) $(GMP)

mtm_launcher.o : mtm_launcher.c mtm.h edu.h
	$(CC) $(DEBUG) $(WFLAGS) -I. -I$(INCLUDES) -c mtm_launcher.c

mtm_launcher : mtm_launcher.o mtm_prot.o mtm_cert.o edu_misc.o
	$(CC) $(DEBUG) $(WFLAGS) -o $@ $@.o mtm_prot.o mtm_cert.o edu_misc.o -L. -L$(LIBS) $(DCRYPT) $(DMALLOC) $(GMP)

mtm_alice.o : mtm_alice.c mtm.h edu.h
	$(CC) $(DEBUG) $(WFLAGS) -I. -I$(INCLUDES) -c mtm_alice.c

mtm_alice : mtm_alice.o mtm_prot.o mtm_cert.o edu_misc.o
	$(CC) $(DEBUG) $(WFLAGS) -o $@ $@.o mtm_prot.o mtm_cert.o edu_misc.o -L. -L$(LIBS) $(DCRYPT) $(DMALLOC) $(GMP)

mtm_bob.o : mtm_bob.c mtm.h edu.h
	$(CC) $(DEBUG) $(WFLAGS) -I. -I$(INCLUDES) -c mtm_bob.c

mtm_bob : mtm_bob.o mtm_prot.o mtm_cert.o edu_misc.o
	$(CC) $(DEBUG) $(WFLAGS) -o $@ $@.o mtm_prot.o mtm_cert.o edu_misc.o -L. -L$(LIBS) $(DCRYPT) $(DMALLOC) $(GMP)

mtm_mallory.o : mtm_mallory.c mtm.h edu.h
	$(CC) $(DEBUG) $(WFLAGS) -I. -I$(INCLUDES) -c mtm_mallory.c

mtm_mallory : mtm_mallory.o mtm_prot.o mtm_cert.o edu_misc.o
	$(CC) $(DEBUG) $(WFLAGS) -o $@ $@.o mtm_prot.o mtm_cert.o edu_misc.o -L. -L$(LIBS) $(DCRYPT) $(DMALLOC) $(GMP)

clean:
	-rm -f core *.core *.o *~ 

.PHONY: all clean
