#
#  Makefile
#

CC = g++
CFLAGS =  -g 
LIBS = 
UTILS = clrandom.o gnu-rng.o gnu-mlcg.o 


#
# programs
#

dx:
	make diagnose

all:
	make marginalize
	make maximize
	make maxover
	make normalize
	make randomize
	make print
	make product
	make quotient
	make project
	make driver
	make diagnose

diagnose: diagnose.o dx.o ptable.o bayes.o clstring.o
	$(CC) $(CFLAGS) diagnose.o dx.o ptable.o bayes.o clstring.o  -o diagnose

driver: driver.o ptable.o bayes.o clstring.o
	$(CC) $(CFLAGS) driver.o ptable.o bayes.o clstring.o  -o driver

jtdriver: jtdriver.o ptable.o bayes.o clstring.o jt.o getopt.o $(UTILS)
	$(CC) $(CFLAGS) jtdriver.o ptable.o bayes.o jt.o clstring.o getopt.o $(UTILS) -o jtdriver

marginalize: marginalize.o ptable.o
	$(CC) $(CFLAGS) marginalize.o ptable.o  -o marginalize

maximize: maximize.o ptable.o $(UTILS)
	$(CC) $(CFLAGS) maximize.o ptable.o $(UTILS) -o maximize

maxover: maxover.o ptable.o $(UTILS)
	$(CC) $(CFLAGS) maxover.o ptable.o $(UTILS) -o maxover

normalize: normalize.o ptable.o
	$(CC) $(CFLAGS) normalize.o ptable.o  -o normalize

print: print.o ptable.o
	$(CC) $(CFLAGS) print.o ptable.o  -o print

product: product.o ptable.o
	$(CC) $(CFLAGS) product.o ptable.o  -o product

quotient: quotient.o ptable.o
	$(CC) $(CFLAGS) quotient.o ptable.o  -o quotient

project: project.o ptable.o
	$(CC) $(CFLAGS) project.o ptable.o  -o project

randomize: randomize.o ptable.o $(UTILS)
	$(CC) $(CFLAGS) randomize.o ptable.o $(UTILS) -o randomize

testit: test.C vector.h
	$(CC) $(CFLAGS) test.C -o testit

#
# modules
#

bayes.o: bayes.C bayes.h ptable.h  vector.h list.h
	$(CC) $(CFLAGS) -c bayes.C

clrandom.o: clrandom.C clrandom.h gnu-mlcg.h gnu-rng.h
	$(CC) $(CFLAGS) -c clrandom.C

diagnose.o: dx.h diagnose.C
	$(CC) $(CFLAGS) -c diagnose.C

dx.o: dx.C dx.h bayes.h pair.h vector.h list.h
	$(CC) $(CFLAGS) -c dx.C

ptable.o: ptable.C ptable.h vector.h list.h
	$(CC) $(CFLAGS) -c ptable.C

driver.o: ptable.h bayes.h driver.C clstring.h jt.h
	$(CC) $(CFLAGS) -c driver.C

getopt.o: getopt.c 
	$(CC) $(CFLAGS) -c getopt.c

jt.o: jt.h jt.C ptable.h bayes.h list.h vector.h 
	$(CC) $(CFLAGS) -c jt.C

jtdriver.o: ptable.h bayes.h jtdriver.C clstring.h
	$(CC) $(CFLAGS) -c jtdriver.C

normalize.o: ptable.h normalize.C
	$(CC) $(CFLAGS) -c normalize.C

print.o: ptable.h print.C
	$(CC) $(CFLAGS) -c print.C

product.o: ptable.h product.C
	$(CC) $(CFLAGS) -c product.C

quotient.o: ptable.h quotient.C
	$(CC) $(CFLAGS) -c quotient.C

project.o: ptable.h project.C
	$(CC) $(CFLAGS) -c project.C

randomize.o: ptable.h randomize.C clrandom.h
	$(CC) $(CFLAGS) -c randomize.C

marginalize.o: ptable.h marginalize.C
	$(CC) $(CFLAGS) -c marginalize.C

maximize.o: ptable.h maximize.C
	$(CC) $(CFLAGS) -c maximize.C

maxover.o: ptable.h maxover.C
	$(CC) $(CFLAGS) -c maxover.C

#
#
#

tar:
	tar cvf dx.tar *.C *.h Makefile car.net car.dx 

zip:
	zip -l p5.zip *.C *.h Makefile car.net car.dx 

clean: 
	rm -f *.o marginalize.exe normalize.exe print.exe product.exe quotient.exe project.exe driver.exe diagnose.exe maximize.exe maxover.exe jtdriver.exe randomize.exe

