CFLAGS = -Wall -O
# CFLAGS = -Wall -O -DTRACE

SORTS = insertion-sort.o \
        iterative-merge-sort.o \
        recursive-merge-sort.o \
        recursive-merge-sort-alt.o \
        simple-bucket-sort.o bucket.o

default: isort competition 

tests: test-fake test-isort test-rms test-sbs test-ims

tarball: sort.tar

# +-----------------+------------------------------------------------
# | Primary Targets |
# +-----------------+

competition: competition.o $(SORTS) strutils.o
	$(CC) $(CFLAGS) -o $@ $^

# +-------+----------------------------------------------------------
# | Tests |
# +-------+

test-fake: test-fake.o fake-sort.o sort-tester.o strutils.o
	$(CC) $(CFLAGS) -o $@ $^

test-isort: test-insertion-sort.o insertion-sort.o sort-tester.o strutils.o
	$(CC) $(CFLAGS) -o $@ $^

test-ims: test-ims.o iterative-merge-sort.o sort-tester.o strutils.o
	$(CC) $(CFLAGS) -o $@ $^

test-rms: test-rms.o recursive-merge-sort.o sort-tester.o strutils.o
	$(CC) $(CFLAGS) -o $@ $^

test-rmsa: test-rmsa.o recursive-merge-sort-alt.o insertion-sort.o sort-tester.o strutils.o
	$(CC) $(CFLAGS) -o $@ $^

test-sbs: test-sbs.o simple-bucket-sort.o recursive-merge-sort.o sort-tester.o strutils.o bucket.o
	$(CC) $(CFLAGS) -o $@ $^

# +-------+----------------------------------------------------------
# | Sorts |
# +-------+

isort: isort.o insertion-sort.o strutils.o sort-main.o
	$(CC) $(CFLAGS) -o $@ $^

rmsa: rmsa.o recursive-merge-sort-alt.o insertion-sort.o strutils.o sort-main.o
	$(CC) $(CFLAGS) -o $@ $^

# +------+-----------------------------------------------------------
# | Misc |
# +------+

sort.tar: Makefile *.c *.h 
	tar cvf -o $@ $^ 

sort.zip: Makefile *.c *.h
	zip $@ $^ 
