# %W% %G% %U%
#
# 1988 makefile
#
# Copyright (c) 1988, Landon Curt Noll & Larry Bassel.
# All Rights Reserved.  Permission for personal, educational or non-profit
# use is granted provided this this copyright and notice are included in its
# entirety and remains unaltered.  All other uses must receive prior permission
# in writing from both Landon Curt Noll and Larry Bassel.


SHELL=/bin/sh
CFLAGS=-O
CC=cc
CPP=/lib/cpp
# you may need a version of cpp that is faster and/or allows more symbols
# than the standard cpp.  If so, adjust the BIG_CPP below.
#
# If you have the GNU cpp, you should use it below as it is MUCH faster
# than the standard cpp and does not have problems with memory usage.
# However you should note that the non-ANSI nature of defining symbols
# that start with '#' prevents GNU cpp from doing the initial pass.  
# Thus you should not use the GNU cpp for the ${CPP} symbol.
BIG_CPP=${CPP}

WINNERS=dale phillipps robison westley reddy isaak \
	litmaath spinellis zsmall

all: ${WINNERS}

dale: dale.c
	${CC} ${CFLAGS} $? -o $@
phillipps: phillipps.c
	${CC} ${CFLAGS} $? -o $@
robison: robison.c
	${CC} ${CFLAGS} $? -o $@
westley: westley.c
	${CC} ${CFLAGS} $? -o $@
reddy: reddy.c
	${CC} ${CFLAGS} $? -o $@
isaak: isaak.c
	${CC} ${CFLAGS} -DI=B -DO=- -Dy $? -o $@
litmaath: litmaath.c
	${CC} ${CFLAGS} $? -o $@
spinellis: spinellis.c spinellis.data
	@echo This program can not be portably compiled with a makefile
	@echo because it reads from /dev/tty.
	@echo Compile this program with: cc spinellis.c -o spinellis
	@echo and type the following text followed by an EOF '(^D)'.
	@cat spinellis.data
	@-if [ ! -f spinellis ]; then \
	    touch spinellis; \
	fi

# not an official entry
#
# The 'zsmall.c' program was obtained from 'applin.c' by reducing its recursion
# and running it thru the initial /lib/cpp.  That is, 'zsmall.c' is a small
# version of the 'z.c' file as produced by the 'applin' make rule below.
zsmall: zsmall.c
	@echo this reduced version of applin.c can take some time to compile...
	${CC} ${CFLAGS} zsmall.c -o $@

# This entry took 75 minutes to compile on a Amdahl 5980-300E
# (a 55658 Dhyrstone/sec/cpu machine) using the System V cpp.
# (The GNU cpp when defined as BIG_CPP took only 45 seconds)
# Your cpp may not be able to compile it due to a common bug
# that results in ${CPP} running out of space.  The routine
# 'zsmall' is a smaller version of the applin.c entry.
applin: applin.c
	${CPP} '-DM=#include "z.c"' '-DR=#include' '-DF=#if' \
	    '-DI=#ifdef' '-DL=#else' '-DE=#endif' '-DN=#ifndef' \
	    '-DD=#define' '-DU=#undef' applin.c z.c
	@echo this is going to take a very very long time to C-preprocess
	@echo perhaps you should do:  make zsmall   instead
	${BIG_CPP} z.c > large.c
	@echo now for the real compile...
	${CC} ${CFLAGS} large.c -o $@

clean:
	rm -f core *.o
clobber: clean
	rm -f ${WINNERS} applin
nuke: clobber
	rm -f large.c z.c
install: all
	cat ${WINNERS} > /dev/null
