#!/bin/csh

#
# $Id: Makefile,v 1.1 2011/10/19 03:24:40 jlang Exp $
#
# $Log: Makefile,v $
# Revision 1.1  2011/10/19 03:24:40  jlang
# Added code for lecture 7
#
#

CXX = g++

ifndef OSTYPE 
OSTYPE=cygnus
# OSTYPE=linux-gnu
endif

ifeq ($(OSTYPE),linux-gnu)
INCDIR = 
LDLIBDIR = 
# -L/usr/X11R6/lib 
LDLIBS = 
# -lglut -lGLU -lGL -lm
# -lglui 
else
LDLIBS = 
# -lglut32 -lglu32 -lopengl32 -lm
# -lglui 
endif

.PHONY: all virtual_prog dynamic_prog clean


SRC = example.cpp bounds.cpp aa_box.cpp circle.cpp obbox.cpp point2d.cpp vector2d.cpp

SRC_VIRTUAL = virtual.cpp bounds.cpp aa_box.cpp circle.cpp obbox.cpp point2d.cpp vector2d.cpp

SRC_DYNAMIC = dynamic_cast.cpp bounds.cpp aa_box.cpp circle.cpp obbox.cpp point2d.cpp vector2d.cpp


# Default build : 
all: dependencies example

virtual_prog: virtual_dependencies virtual

dynamic_prog: dynamic_dependencies dynamic


dependencies: $(SRC:%.cpp=%.d) $(SRC:%.c=%.d) 

virtual_dependencies: $(SRC_VIRTUAL:%.cpp=%.d) $(SRC_VIRTUAL:%.c=%.d) 

dynamic_dependencies: $(SRC_DYNAMIC:%.cpp=%.d) $(SRC_DYNAMIC:%.c=%.d) 


# sed line based on John Graham-Cumming, Dependency Management,
# Dr.Dobb's Portal, Apr 01, 2006.
%.d:%.cpp
	$(CXX) $(INCDIR) -MG -MM $< | sed 's,\($*\.o\)[ :]*\(.*\), $@ : $$\(wildcard \2\)\n\1 : \2,g' > $@
-include $(SRC:.cpp=.d)
-include $(SRC_VIRTUAL:.cpp=.d)
-include $(SRC_DYNAMIC:.cpp=.d)



example: $(SRC:%.cpp=%.o) 
	$(CXX) $(LDLIBDIR) -o $@ $^ $(LDLIBS)


virtual: $(SRC_VIRTUAL:%.cpp=%.o) 
	$(CXX) $(LDLIBDIR) -o $@ $^ $(LDLIBS)


dynamic: $(SRC_DYNAMIC:%.cpp=%.o) 
	$(CXX) $(LDLIBDIR) -o $@ $^ $(LDLIBS)

%.o:%.c
	$(CC) $(INCDIR) -c $*.c -o $@ 

%.o:%.cpp
	$(CXX) $(INCDIR) -c $*.cpp -o $@ 


clean:
	rm -f *~ *.o *.d
