# -----------------------------------
# makefile for testing sort functions
# -----------------------------------
.SUFFIXES:
.SUFFIXES:	.exe .obj .c

ALL	= bsort.exe  hsort.exe	isort.exe  ssort.exe  tsort.exe  xsort.exe\
	  bqsort.exe fqsort.exe hqsort.exe mqsort.exe sqsort.exe uqsort.exe

CFLAGS	= $(OPTIMIZ) -I. -W4 -Za $(DEBUG) $(PROTO) $(TEST) $(OPTIONS)
CL	= cl -nologo
DEBUG	=
OPTIMIZ	= -Ox -G2y#-qc
OPTIONS	= $(PIVOTS) $(RANDOM) $(RECURSE)
PIVOTS	= -DMEDIAN_PIVOTS
PROTO	= -D__PROTO__
RANDOM	= -DFIXED
RECURSE	= -DTAIL_RECURSION
TEST	= -DTEST

SORT_HEDS =	defcodes.h	\
		etime.h		\
		tsrtdefs.h

SORT_OBJS =	bqsort.obj     \
		bsort.obj      \
		elaptime.obj   \
		fqsort.obj     \
		hqsort.obj     \
		hsort.obj      \
		isort.obj      \
		mqsort.obj     \
		round.obj      \
		sqsort.obj     \
		ssort.obj      \
		tsort.obj      \
		tstsort.obj    \
		uqsort.obj     \
		wait.obj       \
		xsort.obj

SORT_SRCS =	$(SORT_OBJS:.obj=.c)	\
		clongarg.c		\
		gausrand.c		\
		round.c			\
		setslist.c		\
		stackhlr.c

LFLAGS	= /link /NOI /NOE /exep /packc /farcall /STACK:10240

GROUP_1	= elaptime.obj round.obj wait.obj
GROUP_2 = tstsort.obj $(GROUP_1)

.c.obj:
	cl -AH -c -nologo $(CFLAGS) $<

all:	$(ALL)
	@echo -n

syntax:
	$(CL) -AH -Zs -W3 -I. elaptime.c
	$(CL) -AH -Zs -I. $(CFLAGS) round.c tstsort.c wait.c
	$(CL) -Za -Zs -I. $(ALL:.exe=.c)

# Borland's Quicksort
#
bqsort.exe:	bqsort.obj $(GROUP_2)
	$(CL)	bqsort $(GROUP_2:.obj=) $(LFLAGS) brqsort
#	bcc  bqsort.obj $(GROUP_2)

# Bubble Sort (Demo Only)
#
bsort.exe:	bsort.obj $(GROUP_2)
	$(CL)	bsort $(GROUP_2:.obj=) $(LFLAGS)

# My Final Quicksort (Kitchen-Sink Options)
#
fqsort.exe:	fqsort.obj $(GROUP_2)
	$(CL)	fqsort $(GROUP_2:.obj=) $(LFLAGS)


wqsort.exe:	wqsort.obj $(GROUP_2)
	$(CL)	wqsort $(GROUP_2:.obj=) $(LFLAGS)

# Heapsort
#
hsort.exe:	hsort.obj $(GROUP_2)
	$(CL)	hsort $(GROUP_2:.obj=) $(LFLAGS)

# My Interpretation of C.A.R. Hoare's Quicksort
#
hqsort.exe:	hqsort.obj $(GROUP_2)
	$(CL)	hqsort $(GROUP_2:.obj=) $(LFLAGS)

# Straight Insertion Sort
#
isort.exe:	isort.obj $(GROUP_2)
	$(CL)	isort $(GROUP_2:.obj=) $(LFLAGS)

# Microsoft's  Quicksort
#
mqsort.exe:	mqsort.obj $(GROUP_2)
	$(CL)	mqsort $(GROUP_2:.obj=) $(LFLAGS)

# R. Sedgewick's Quicksort
#
sqsort.exe:	sqsort.obj $(GROUP_2)
	$(CL)	sqsort $(GROUP_2:.obj=) $(LFLAGS)

# Shell Sort
#
ssort.exe:	ssort.obj $(GROUP_2)
	$(CL)	ssort $(GROUP_2:.obj=) $(LFLAGS)

# Straight Two-Way Merge Sort (Knuth)
#
tsort.exe:	tsort.obj $(GROUP_2)
	$(CL)	tsort $(GROUP_2:.obj=) $(LFLAGS)

# K.B.W. Version of Standard C Quicksort
#
uqsort.exe:	uqsort.obj $(GROUP_2)
	$(CL)	uqsort $(GROUP_2:.obj=) $(LFLAGS)

# Selection Sort
#
xsort.exe:	xsort.obj $(GROUP_2)
	$(CL)	xsort $(GROUP_2:.obj=) $(LFLAGS)

# Experimental Quicksort
#
xqsort.exe:	xqsort.obj $(GROUP_2)
	$(CL)	xqsort $(GROUP_2:.obj=) $(LFLAGS)

# Timer Function
#
elaptime.obj:	elaptime.c
	$(CL) -c -G2sy -W3 -AH -I. elaptime.c

tstsort.obj:	tstsort.c\
		defcodes.h\
		etime.h\
		tsrtdefs.h\
		gausrand.c\
		setslist.c\
		clongarg.c

wait.obj:
round.obj:

makdeps:
	mkdep $(ALL:.exe=.c)

bsort.obj  hsort.obj  isort.obj  ssort.obj  tsort.obj  xsort.obj  \
bqsort.obj fqsort.obj hqsort.obj mqsort.obj sqsort.obj uqsort.obj \
wqsort.obj xqsort.obj:	tsrtdefs.h
fqsort.obj: stackhlr.c

lines:
	cat tstsort.c $(SORT_OBJS:.obj=.c) c:/gputil/elaptime.c\
		c:/gputil/defcodes.h | codestat

xfer:
	cp $(SORT_SRCS) $(SORT_HEDS) makefile prepgraf.awk deliver
