# Generated automatically from Makefile.in by configure.
#---- EXAMPLE SPECIFIC SECTION -------------------------------

EXERCISE1SCENE	= 2
EXERCISE2SCENE	= 5
CFLAGS		= -O3 -DINLINE_EXTERN='inline extern'
CMIXFLAGS	= -s -q  -DHAVE_LIBTIFF=1 -DUSE_PLOT=1 -DSRANDOM=srand48 -DRANDOM=lrand48  -I .
RAYFLAGS	= -c

#---- END OF EXAMPLE SPECIFIC SECTION ------------------------

prefix		= /usr/local
exec_prefix	= ${prefix}
CC		= gcc
CPPFLAGS	=  -DHAVE_LIBTIFF=1 -DUSE_PLOT=1 -DSRANDOM=srand48 -DRANDOM=lrand48  
CXX		= c++
CXXFLAGS	= -O2 -I $(CMIXINCLUDE) -L $(CMIXLIB)
LOADLIBES	= -lptc -lHermes -lX11 -lXext -lXxf86dga -lXxf86vm -ltiff  -lm
LDFLAGS		= -L $(CMIXLIB) -L/usr/X11R6/lib -L/usr/local/lib 
CMIX		= cmix
CMIXINCLUDE 	= ${prefix}/include
CMIXLIB		= ${exec_prefix}/lib

OPENGL_DIR	= 
OPENGL_CXX	= $(CXX)
OPENGL_CPPFLAGS	= $(CPPFLAGS)
OPENGL_CFLAGS	= $(CFLAGS)

WC		= wc
SED		= sed
INDENT		= indent -br -ce
ECHON		= echo -n
ECHOC		= 
EXEEXT		= 

SHORTHOST	= $(HOST:.diku.dk=)
ifeq (x$(ARCH),x)
  ARCH		= i586-linux-gnu
endif

OBJ		= main.o plotptc.o tiff.o vector.o mypower.o ray.o create.o scenes.o
SPECOBJ		= main.o plotptc.o tiff.o vector.o mypower.o lowerarity.o

.PRECIOUS:	%.ann %-gen.cc %-gen$(EXEEXT) ray-gen.cc ray-gen
.PRECIOUS:	ray-%-res.c ray-%-res$(EXEEXT) %-res$(EXEEXT)
.PHONY:	residual-% clean distclean all timing% answer%

all:	timing1

clean:
	$(RM) *~ *.o *.d *-gen.cc *-gen$(EXEEXT) *-res.c *-res$(EXEEXT) \
	*-time.txt *.ann tmp-$(USER).c ray*-res ray*-res.c core

distclean: clean

timing%: ray%-time.txt
	head -7 $<; tail -5 $<

answer%: answr%-time.txt
	head -7 $<; tail -5 $<

ray%-time.txt:	ray.o ray%-res.o ray%-S-time.txt ray%-R-time.txt
	@echo ============================================================ \
	> $@
	@echo "Program ray.c on host $(SHORTHOST)," \
              "architecture $(ARCH):" >> $@
	@echo "Compiler command is \`$(CC) $(CPPFLAGS) $(CFLAGS)'" \
	      >> $@
	@echo "Specialized to scene number $*" >> $@
	@echo "" >> $@
	@$(ECHON) "Source   program size: "$(ECHOC) >> $@
	@$(WC) -c ray.o | tee -a $@
	@$(ECHON) "Residual program size: "$(ECHOC) >> $@
	@$(WC) -c ray-$*-res.o | tee -a $@
	@echo "" >> $@
	@echo "                              User time       (System time   )" \
>> $@
	@tail -1 < ray$*-S-time.txt >> $@
	@tail -1 < ray$*-R-time.txt >> $@
	@echo ============================================================ \
	>> $@

answr%-time.txt: ray.o answr%-res.o answr%-S-time.txt answr%-R-time.txt
	@echo ============================================================ \
	> $@
	@echo "Program ray.c on host $(SHORTHOST)," \
              "architecture $(ARCH):" >> $@
	@echo "Compiler command is \`$(CC) $(CPPFLAGS) $(CFLAGS)'" \
	      >> $@
	@echo "Specialized to scene number $*" >> $@
	@echo "" >> $@
	@$(ECHON) "Source   program size: "$(ECHOC) >> $@
	@$(WC) -c ray.o | tee -a $@
	@$(ECHON) "Residual program size: "$(ECHOC) >> $@
	@$(WC) -c answr$*-res.o | tee -a $@
	@echo "" >> $@
	@echo "                          User time       (System time   )" \
>> $@
	@tail -1 < answr$*-S-time.txt >> $@
	@tail -1 < answr$*-R-time.txt >> $@
	@echo ============================================================ \
	>> $@

ray%-S-time.txt ray%-R-time.txt: ray$(EXEEXT) ray%-res$(EXEEXT)
	./ray$*-res$(EXEEXT) $(RAYFLAGS) > ray$*-R-time.txt 2>&1& \
	./ray$(EXEEXT) -n $(EXERCISE$*SCENE) $(RAYFLAGS) > ray$*-S-time.txt 2>&1

answr%-S-time.txt answr%-R-time.txt: ray$(EXEEXT) answr%-res$(EXEEXT)
	./answr$*-res$(EXEEXT) $(RAYFLAGS) > answr$*-R-time.txt 2>&1& \
	./ray$(EXEEXT) -n $(EXERCISE$*SCENE) $(RAYFLAGS) > answr$*-S-time.txt 2>&1

%.d: %.c
	@$(SHELL) -ec "$(CC) -MM $(CPPFLAGS) $< \
	| sed -e 's/\($*\\.o\)[ :]*/\1 $@ $*.ann $*-gen.cc: /g' > $@"

%.d: %.cc
	@$(SHELL) -ec "$(CXX) -MM $(CPPFLAGS) $(OPENGL_CPPFLAGS) \
		$(OPENGL_INC) $< \
	| sed -e 's/\($*\\.o\)[ :]*/\1 $@ $*.ann $*-gen.cc: /g' > $@"

include $(OBJ:.o=.d) $(SPECOBJ:.o=.d)

ray$(EXEEXT) : $(OBJ)
	$(CXX) $(LDFLAGS) -o $@ $^ $(LOADLIBES)

%-gen$(EXEEXT): %-gen.o vector.o scenes.o create.o
	$(CXX) $(LDFLAGS) -o $@ $^ $(LOADLIBES) -lcmix

# programs named ray1-res, ray2-res,... are answers
# to exercises 1, 2,...
ray%-res.c: ray%-gen$(EXEEXT)
	./$< $(EXERCISE$*SCENE) > $@

answr%-res.c: answr%-gen$(EXEEXT)
	./$< $(EXERCISE$*SCENE) > $@

# programs named ray-1-res, ray-2-res, ... is the ray tracer
# specialized to scene 1, 2, ... using `ray-gen'
ray-%-res.c: ray-gen$(EXEEXT)
	./$< $* > $@

residual-%: ray-gen$(EXEEXT)
	./$< $*

%-res$(EXEEXT): $(SPECOBJ) %-res.o
	$(CXX) $(LDFLAGS) -o $@ $^ $(LOADLIBES)

%.ann %-gen.cc: %.cmx ray.c ray.h vector.h scenes.h
	$(CMIX) $(CMIXFLAGS) $*.cmx

# `ray-gen' is the generating extension of the ray tracer using
# specializer directives from answr2.cmx
ray.ann ray-gen.cc: answr2.cmx ray.c ray.h vector.h scenes.h
	$(CMIX) $(CMIXFLAGS) -o ray answr2.cmx

# On x86, gcc -O3 introduces numerical instability in create.c
create.o:
	$(CC) $(CFLAGS) $(CPPFLAGS) -O -c create.c

# Special compiler and paths may be needed for OpenGL stuff
plotOpenGL.o: plotOpenGL.cc
	$(OPENGL_CXX) $(OPENGL_CFLAGS) $(OPENGL_CPPFLAGS) -c $<
