CC=gcc
CFLAGS=-g3 -Wall -ansi -pedantic

LIBFILES=graph.o search.o ranktable.o getline.o dict.o
LIB=libwords.a

DICTS=empty.dict small.dict medium.dict big.dict long.dict
HASHES=$(DICTS:.dict=.hash)

INSTALLDIR=/c/cs223/Hwk10
INSTALLFILES=tester.py $(DICTS) $(HASHES)
INSTALLPROGS=test.public verify

all: wordpath verify $(DICTS) $(HASHES)

install: all
	install -d -g cs223ta -m 2775 $(INSTALLDIR)
	install -g cs223ta -m 0664 $(INSTALLFILES) $(INSTALLDIR)
	install -g cs223ta -m 0775 $(INSTALLPROGS) $(INSTALLDIR)

wordpath: wordpath.o $(LIB)
	$(CC) $(CFLAGS) -o $@ $^

$(LIB): $(LIBFILES)
	ar crs $(LIB) $(LIBFILES)

graph.o: graph.c graph.h

search.o: search.c search.h graph.h

ranktable.o: ranktable.c ranktable.h

wordpath.o: wordpath.c graph.h search.h ranktable.h

%.hash: %.dict makehash.py
	python makehash.py $@ < $<

empty.dict:
	cp /dev/null $@

small.dict:
	(echo "a"; echo "ab"; echo "abc"; echo "abd") > $@

medium.dict: big.dict
	grep -v '......' $< > $@

big.dict: /usr/share/dict/words
	grep -v '[^abcdefghijklmnopqrstuvwxyz]' $< > $@

long.dict:
	perl -e 'for $$n (1..200) { print("a" x $$n, "\n"); } for $$n(0..200) { print("b", "a" x $$n, "b\n"); } print("a" x 100, "b\n");' > $@

verify: verify.py
	install -m 0555 $< $@

test: all
	./wordpath a abd < small.dict
	valgrind --tool=memcheck --leak-check=yes ./wordpath a abd < small.dict
	./wordpath cat dog < medium.dict
	valgrind --tool=memcheck --leak-check=yes ./wordpath cat dog < medium.dict
	./wordpath sister brother < big.dict
	./wordpath noisy quiet < medium.dict
	./wordpath noisy quiet < medium.dict | ./verify noisy quiet 11 medium.hash



clean:
	-rm -f wordpath verify $(LIB) *.o *.dict *.hash *.pyc
