# Makefile for Persistence of Vision Raytracer
# This file is released to the public domain.
#
# make all 		creates the executables
# make installx 	installs the X binary
# make installs 	installs the standard binary
# make installv		installs the svgalib binary -- YOU MUST BE ROOT TO DO THIS
#
# MAKE Macros and Such...
#

#***************************************************************
#*
#*                      UNIX Makefile
#*
#***************************************************************


OBJ	= o
CFLAGS=		-pipe -m386 -c -O2 -ffast-math -funroll-loops -fcaller-saves -fomit-frame-pointer -finline-functions
LFLAGS =	-O2 -L/usr/X386/lib
CC =            gcc
BINDIR = ../bin
INSTBIN = $(HOME)/bin

# Make's implicit rules for making a .o file from a .c file...
#
.c.o :
	$(CC) $(CFLAGS) $*.c


POVOBJS = povray.$(OBJ) bezier.$(OBJ) blob.$(OBJ) bound.$(OBJ) boxes.$(OBJ)  \
	  camera.$(OBJ) colour.$(OBJ) cones.$(OBJ) csg.$(OBJ) discs.$(OBJ)   \
	  dump.$(OBJ) express.$(OBJ) gif.$(OBJ) gifdecod.$(OBJ)              \
	  hfield.$(OBJ) iff.$(OBJ) image.$(OBJ) lighting.$(OBJ)              \
	  matrices.$(OBJ) normal.$(OBJ) objects.$(OBJ) parse.$(OBJ)          \
	  pigment.$(OBJ) planes.$(OBJ) point.$(OBJ) poly.$(OBJ)              \
	  quadrics.$(OBJ) raw.$(OBJ) ray.$(OBJ) render.$(OBJ) spheres.$(OBJ) \
	  targa.$(OBJ) texture.$(OBJ) tokenize.$(OBJ) triangle.$(OBJ)        \
	  txttest.$(OBJ) vect.$(OBJ)

all: $(BINDIR)/povray.x $(BINDIR)/povray.s $(BINDIR)/povray.v

povray.x: $(BINDIR)/povray.x
povray.s: $(BINDIR)/povray.s
povray.v: $(BINDIR)/povray.v

$(BINDIR)/povray.x:	$(POVOBJS) xwindows.o
	$(CC) $(LFLAGS) $(POVOBJS) xwindows.o -o $(BINDIR)/povray.x -lm -lX11 -lXt -lXext 

povray.$(OBJ) : povray.c povproto.h frame.h vector.h config.h

bezier.$(OBJ): config.h frame.h povproto.h vector.h

blob.$(OBJ): config.h frame.h povproto.h vector.h

bound.$(OBJ): config.h frame.h povproto.h vector.h

boxes.$(OBJ): config.h frame.h povproto.h vector.h

camera.$(OBJ): config.h frame.h povproto.h vector.h

colour.$(OBJ): config.h frame.h povproto.h vector.h

cones.$(OBJ): config.h frame.h povproto.h vector.h

csg.$(OBJ): config.h frame.h povproto.h vector.h

discs.$(OBJ): config.h frame.h povproto.h vector.h

dump.$(OBJ): config.h frame.h povproto.h

express.$(OBJ): config.h frame.h parse.h povproto.h vector.h

gif.$(OBJ): config.h frame.h povproto.h

gifdecod.$(OBJ): config.h frame.h povproto.h

hfield.$(OBJ): config.h frame.h povproto.h vector.h

iff.$(OBJ): config.h frame.h povproto.h

image.$(OBJ): config.h frame.h povproto.h texture.h vector.h

lighting.$(OBJ): config.h frame.h povproto.h vector.h

matrices.$(OBJ): config.h frame.h povproto.h vector.h

normal.$(OBJ): config.h frame.h povproto.h texture.h vector.h

objects.$(OBJ): config.h frame.h povproto.h vector.h

parse.$(OBJ): config.h frame.h parse.h povproto.h vector.h

pigment.$(OBJ): config.h frame.h povproto.h texture.h vector.h

planes.$(OBJ): config.h frame.h povproto.h vector.h

point.$(OBJ): config.h frame.h povproto.h vector.h

poly.$(OBJ): config.h frame.h povproto.h vector.h

quadrics.$(OBJ): config.h frame.h povproto.h vector.h

raw.$(OBJ): config.h frame.h povproto.h

ray.$(OBJ): config.h frame.h povproto.h vector.h

render.$(OBJ): config.h frame.h povproto.h vector.h

spheres.$(OBJ): config.h frame.h povproto.h vector.h

targa.$(OBJ): config.h frame.h povproto.h

texture.$(OBJ): config.h frame.h povproto.h texture.h vector.h

tokenize.$(OBJ): config.h frame.h parse.h povproto.h

triangle.$(OBJ): config.h frame.h povproto.h vector.h

txttest.$(OBJ): config.h frame.h povproto.h texture.h vector.h

vect.$(OBJ): config.h frame.h povproto.h vector.h

$(BINDIR)/povray.s:	$(POVOBJS) unix.o
	$(CC) $(LFLAGS) $(POVOBJS) unix.o -o $(BINDIR)/povray.s -lm

$(BINDIR)/povray.v:	$(POVOBJS) linux.o
	$(CC) $(LFLAGS) $(POVOBJS) linux.o -o $(BINDIR)/povray.v -lm -lvga -lvgagl

staticvga: $(POVOBJS) linux.o
	$(CC) $(LFLAGS) $(POVOBJS) linux.o -o $(BINDIR)/povray.v -lm /usr/lib/libvgagl.a /usr/lib/libvga.a

linux.o: linux.c
	$(CC) $(CFLAGS) -Wall -o linux.o linux.c

installx: $(BINDIR)/povray.x
	mv $(BINDIR)/povray.x $(INSTBIN)/povray
	strip $(INSTBIN)/povray
#	gzexe $(INSTBIN)/povray

installs: $(BINDIR)/povray.s
	mv $(BINDIR)/povray.s $(INSTBIN)/povray
	strip $(INSTBIN)/povray
#	gzexe $(INSTBIN)/povray

installv: $(BINDIR)/povray.v
	echo I hope you\'re root.  Otherwise, this won't work.
	mv $(BINDIR)/povray.v $(INSTBIN)/povray
	strip $(INSTBIN)/povray
	chmod 4755 $(INSTBIN)/povray
	chown root.root $(INSTBIN)/povray
#	gzexe $(INSTBIN)/povray

clean:
	rm *.o $(BINDIR)/povray.s $(BINDIR)/povray.v $(BINDIR)/povray.x

xwindows.o: xwindows.c xpov.icn
# If you want povray to always pause at the end of a render, add -DWAIT_ON_COMPLETION
# If you want to enable the ordered dither hack, add -DCDITHER
# to the end of the line below
	$(CC) $(CFLAGS) -o xwindows.o xwindows.c -DCDITHER

