# Flags for VC++
#
EXE=.exe
O=obj
CC=cl$(EXE)
SYSFLAGS=-nologo -ML -W3 -GX -O2 -DNDEBUG -DWIN32 -D_CONSOLE -D_MBCS
ALLOCAFLAGS=-DHAVE_alloca -DGET_alloca_FROM_MALLOC_H -Dalloca=_alloca
LINK=link$(EXE)
LINKFLAGS=/nologo /subsystem:console /incremental:no /machine:I386 \
 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib \
 shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib \
 /out:testing$(EXE)
MV=MOVE
RM1=DEL

# Flags for Unix
#
#EXE=
#O=o
#CC=cc
#SYSFLAGS=
#ALLOCAFLAGS=
#LINK=$(CC)
#LINKFLAGS=-o $(PROGS)
#MV=mv
#RM1=rm -f

# Common flags
#
CFLAGS=$(SYSFLAGS) $(ALLOCAFLAGS) $(QSORTFLAGS)
PROGS=testing$(EXE)
OBJS=myq0.$(O) myq1.$(O) myq2.$(O) myq3.$(O) myq4.$(O) tascend.$(O) \
 tbase.$(O) testq.$(O) trandom.$(O) trandup.$(O) tscramble.$(O) \
 tdescend.$(O)
SRC=Makefile README myqsort.c tabulate.pl tascend.c tascend.h tbase.c \
 tdescend.c tdescend.h testq.c tqsort.h trandom.c trandom.h trandup.c \
 trandup.h tscramble.c tscramble.h

all: $(PROGS)

zip: qsort.zip

test.lo: $(PROGS)
	testing > test.lo

report: test.lo
	perl tabulate.pl < test.lo

clean:
	rm -f $(PROGS) $(OBJS)

qsort.zip: $(SRC)
	$(RM1) qsort.zip
	zip -ll -9 qsort $(SRC)

myq0.$(O): myqsort.c
	$(RM1) myq0.$(O)
	$(CC) -c $(CFLAGS) -Dqsort=test0qsort myqsort.c
	$(MV) myqsort.$(O) myq0.$(O)

myq1.$(O): myqsort.c
	$(RM1) myq1.$(O)
	$(CC) -c $(CFLAGS) -Dqsort=test1qsort -DORDER_GUESS=1 myqsort.c
	$(MV) myqsort.$(O) myq1.$(O)

myq2.$(O): myqsort.c
	$(RM1) myq2.$(O)
	$(CC) -c $(CFLAGS) -Dqsort=test2qsort -DORDER_GUESS=2 myqsort.c
	$(MV) myqsort.$(O) myq2.$(O)

myq3.$(O): myqsort.c
	$(RM1) myq3.$(O)
	$(CC) -c $(CFLAGS) -Dqsort=test3qsort -DORDER_GUESS=3 myqsort.c
	$(MV) myqsort.$(O) myq3.$(O)

myq4.$(O): myqsort.c
	$(RM1) myq4.$(O)
	$(CC) -c $(CFLAGS) -Dqsort=test4qsort -DBREAK_EVEN=0x7fffffff myqsort.c
	$(MV) myqsort.$(O) myq4.$(O)

tascend.$(O): tascend.c tascend.h tqsort.h trandom.h
	$(CC) -c $(CFLAGS) tascend.c

tdescend.$(O): tdescend.c tdescend.h tqsort.h trandom.h
	$(CC) -c $(CFLAGS) tdescend.c

tabse.$(O): tbase.c tqsort.h
	$(CC) -c $(CFLAGS) tbase.c

testq.$(O): testq.c tqsort.h
	$(CC) -c $(CFLAGS) testq.c

trandom.$(O): trandom.c tqsort.h trandom.h
	$(CC) -c $(CFLAGS) trandom.c

trandup.$(O): trandup.c tqsort.h trandup.h
	$(CC) -c $(CFLAGS) trandup.c

tscramble.$(O): tscramble.c tqsort.h tscramble.h
	$(CC) -c $(CFLAGS) tscramble.c

testing$(EXE): $(OBJS)
	$(LINK) $(LINKFLAGS) $(OBJS)
