OBJECTS=alice.o smalloc.o universe.o movable.o vertex.o world.o texture.o shapes.o
SOURCES=$(OBJECTS:%.o=%.c)
BINARY=alice
HEADERS=smalloc.h universe.h movable.h vertex.h world.h texture.h shapes.h getglut.h
TEXTURES=\
brushedmetal512.pnm \
cardback512.pnm \
cardace512.pnm \
circuit512.pnm \
circuitfade512.pnm \
crystalmetal512.pnm \
darkplastic256.pnm \
dimpledmetal512.pnm \
glass256.pnm \
gold128.pnm \
gravel128.pnm \
hat256.pnm \
helpscreen512.pnm \
patchyrust512.pnm \
pdp11b512.pnm \
pdp11c512.pnm \
pdp11s256.pnm \
pdp11scat256.pnm \
pdp11panelb512.pnm \
rust512.pnm
EXTRADIST=readme.txt screenshot.jpg Makefile $(HEADERS) $(TEXTURES)
DISTFILE=COMP3004-cw2-prb102.zip
SCRATCH=/tmp/COMP3004cw2TEST/
MACFLAGS=#-framework OpenGL -framework GLUT # For MacOS X; empty otherwise
#LDFLAGS=$(MACFLAGS) # For MacOS X
LDFLAGS=-lGL -lGLU -lglut -L/usr/local/lib # For other UNIX, roughly
CFLAGS=--ansi --pedantic -Wall -DUSLEEP -O3 # For GNU libc (avoids CPU burnination)
#CFLAGS=--ansi --pedantic -Wall # For other libc
# -O3 can give a small speed boost

$(BINARY): $(OBJECTS)
	gcc $(LDFLAGS) -o $(BINARY) $^
	@echo "*** $(BINARY) built"
# $^ is a space-seperated list of all deps, with duplicates removed
%.o : %.c
	gcc $(MACFLAGS) -o $@ -c $(CFLAGS) $<
# $@ is the current target; $< the dep for that target
clean: almostclean
	@rm -fv $(BINARY) $(DISTFILE)
	@echo "*** Cleansed"
almostclean:
	@rm -fv $(OBJECTS)
	@rm -frv $(SCRATCH)
dist: $(DISTFILE)
$(DISTFILE): $(SOURCES) $(EXTRADIST)
	echo "COMP3004 Coursework 2 submission from prb102" | zip -z -9 $(DISTFILE) $(SOURCES) $(EXTRADIST)
	@echo "*** $(DISTFILE) created"
disttest: $(DISTFILE)
	mkdir -p $(SCRATCH)
	cp $(DISTFILE) $(SCRATCH)
#	cp Makefile $(SCRATCH)   Unneeded; now part of dist
	echo "cd $(SCRATCH); unzip $(DISTFILE); make" | bash
	@echo "*** Distributable tested"
work:
	@echo "*** Outstanding tasks"
	@grep DEBUG --color=auto $(SOURCES) $(EXTRADIST) || true
	@grep TODO  --color=auto $(SOURCES) $(EXTRADIST) || true
	@grep FIXME --color=auto $(SOURCES) $(EXTRADIST) || true
# To `make work' is to find things for me to do ;)
