##
## makefile
##  
## Made by damien
## Login   <damienortie.inrialpes.fr>
##
## Started on  Fri Feb 15 16:52:58 2008 damien
## Last update Fri Feb 15 16:52:58 2008 damien
## 


RELEASE = -O3

OBJ = junk/
JUNK = junk/
DATA_JUNK = data_junk/
DATA = data/
SRC = src/
H = header/
EXTERNAL_LIB = external_lib/





CFLAGS = -pipe -Wall -Wextra -Woverloaded-virtual -Wsign-promo -Wunused-value -Wparentheses -Wunused-label -Wunused-variable -Wcomment -Wformat -Winit-self -Wmissing-include-dirs -Wfloat-equal -Wundef -Wshadow -Wcast-qual -Wconversion -Wredundant-decls -ansi -D_REENTRANT -Wwrite-strings $(RELEASE) -ansi
INCPATH =  -I$(H) -I$(EXTERNAL_LIB)

GPP = g++ 


TINYXML = external_lib/tinyXml/

EXEC = skinning_mesh
LINKLIB =  -lm -lglut -ljpeg -lpng

1 = main
2 = V_3D
3 = Matrix
4 = Point_set
5 = Connectivity
6 = Edge
7 = int_vector
8 = double_vector
9 = Vector_parameter
10 = Mesh_object
11 = OpenGL_drawer
12 = Navigator_tool
13 = Polygon
14 = Segment
15 = Triangle
16 = Curve_3D
17 = Skinned
18 = Animation_transformation
19 = Skeleton
20 = Joint
21 = File_parser
22 = Texture
23 = Mesh_object_loader

DEPENDTINYXML = $(OBJ)tinyxml.o $(OBJ)tinystr.o $(OBJ)tinyxmlerror.o $(OBJ)tinyxmlparser.o 



EVERYTHING = $(OBJ)$(1).o $(OBJ)$(2).o $(OBJ)$(3).o $(OBJ)$(4).o $(OBJ)$(5).o $(OBJ)$(6).o $(OBJ)$(7).o $(OBJ)$(8).o $(OBJ)$(9).o $(OBJ)$(10).o $(OBJ)$(11).o $(OBJ)$(12).o $(OBJ)$(13).o $(OBJ)$(14).o $(OBJ)$(15).o $(OBJ)$(16).o $(OBJ)$(17).o $(OBJ)$(18).o $(OBJ)$(19).o  $(OBJ)$(20).o $(OBJ)$(21).o $(OBJ)$(22).o $(OBJ)$(23).o $(DEPENDTINYXML)


all: $(EXEC)


$(EXEC): $(EVERYTHING)
	@echo 
	@echo ================ [LINKAGE ...]  ================ 
	@echo

	$(GPP) $(EVERYTHING) -o $(EXEC) $(LINKLIB)
	@echo
	@echo [OK]
	cp $(EXEC) bin/$(EXEC)
	@echo 
	@echo ================ [progam compiled succesfully] ================ 
	@echo


$(OBJ)$(1).o: $(SRC)$(1).cpp 
	@echo --------- build [$(1)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(1).cpp -o $(OBJ)$(1).o
	@echo OK [$(1)]
	@echo

$(OBJ)$(2).o: $(SRC)$(2).cpp $(H)$(2).h
	@echo --------- build [$(2)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(2).cpp -o $(OBJ)$(2).o
	@echo OK [$(2)]
	@echo

$(OBJ)$(3).o: $(SRC)$(3).cpp $(H)$(3).h
	@echo --------- build [$(3)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(3).cpp -o $(OBJ)$(3).o
	@echo OK [$(3)]
	@echo

$(OBJ)$(4).o: $(SRC)$(4).cpp $(H)$(4).h
	@echo --------- build [$(4)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(4).cpp -o $(OBJ)$(4).o
	@echo OK [$(4)]
	@echo

$(OBJ)$(5).o: $(SRC)$(5).cpp $(H)$(5).h
	@echo --------- build [$(5)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(5).cpp -o $(OBJ)$(5).o
	@echo OK [$(5)]
	@echo

$(OBJ)$(6).o: $(SRC)$(6).cpp $(H)$(6).h
	@echo --------- build [$(6)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(6).cpp -o $(OBJ)$(6).o
	@echo OK [$(6)]
	@echo

$(OBJ)$(7).o: $(SRC)$(7).cpp $(H)$(7).h
	@echo --------- build [$(7)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(7).cpp -o $(OBJ)$(7).o
	@echo OK [$(7)]
	@echo

$(OBJ)$(8).o: $(SRC)$(8).cpp $(H)$(8).h
	@echo --------- build [$(8)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(8).cpp -o $(OBJ)$(8).o
	@echo OK [$(8)]
	@echo

$(OBJ)$(9).o: $(SRC)$(9).cpp $(H)$(9).h
	@echo --------- build [$(9)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(9).cpp -o $(OBJ)$(9).o
	@echo OK [$(9)]
	@echo

$(OBJ)$(10).o: $(SRC)$(10).cpp $(H)$(10).h
	@echo --------- build [$(10)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(10).cpp -o $(OBJ)$(10).o
	@echo OK [$(10)]
	@echo


$(OBJ)$(11).o: $(SRC)$(11).cpp $(H)$(11).h
	@echo --------- build [$(11)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(11).cpp -o $(OBJ)$(11).o
	@echo OK [$(11)]
	@echo

$(OBJ)$(12).o: $(SRC)$(12).cpp $(H)$(12).h
	@echo --------- build [$(12)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(12).cpp -o $(OBJ)$(12).o
	@echo OK [$(12)]
	@echo

$(OBJ)$(13).o: $(SRC)$(13).cpp $(H)$(13).h
	@echo --------- build [$(13)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(13).cpp -o $(OBJ)$(13).o
	@echo OK [$(13)]
	@echo

$(OBJ)$(14).o: $(SRC)$(14).cpp $(H)$(14).h
	@echo --------- build [$(14)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(14).cpp -o $(OBJ)$(14).o
	@echo OK [$(14)]
	@echo

$(OBJ)$(15).o: $(SRC)$(15).cpp $(H)$(15).h
	@echo --------- build [$(15)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(15).cpp -o $(OBJ)$(15).o
	@echo OK [$(15)]
	@echo

$(OBJ)$(16).o: $(SRC)$(16).cpp $(H)$(16).h
	@echo --------- build [$(16)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(16).cpp -o $(OBJ)$(16).o
	@echo OK [$(16)]
	@echo

$(OBJ)$(17).o: $(SRC)$(17).cpp $(H)$(17).h
	@echo --------- build [$(17)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(17).cpp -o $(OBJ)$(17).o
	@echo OK [$(17)]
	@echo

$(OBJ)$(18).o: $(SRC)$(18).cpp $(H)$(18).h
	@echo --------- build [$(18)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(18).cpp -o $(OBJ)$(18).o
	@echo OK [$(18)]
	@echo

$(OBJ)$(19).o: $(SRC)$(19).cpp $(H)$(19).h
	@echo --------- build [$(19)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(19).cpp -o $(OBJ)$(19).o
	@echo OK [$(19)]
	@echo

$(OBJ)$(20).o: $(SRC)$(20).cpp $(H)$(20).h
	@echo --------- build [$(20)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(20).cpp -o $(OBJ)$(20).o
	@echo OK [$(20)]
	@echo

$(OBJ)$(21).o: $(SRC)$(21).cpp $(H)$(21).h
	@echo --------- build [$(21)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(21).cpp -o $(OBJ)$(21).o
	@echo OK [$(21)]
	@echo

$(OBJ)$(22).o: $(SRC)$(22).cpp $(H)$(22).h
	@echo --------- build [$(22)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(22).cpp -o $(OBJ)$(22).o
	@echo OK [$(22)]
	@echo

$(OBJ)$(23).o: $(SRC)$(23).cpp $(H)$(23).h
	@echo --------- build [$(23)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(SRC)$(23).cpp -o $(OBJ)$(23).o
	@echo OK [$(23)]
	@echo



$(OBJ)tinyxml.o: $(TINYXML)tinyxml.cpp $(TINYXML)tinyxml.h
	@echo --------- build [TINY XML] ----------
	$(GPP) -c  $(CFLAGS)  $(TINYXML)tinyxml.cpp -o $(OBJ)tinyxml.o
$(OBJ)tinystr.o: $(TINYXML)tinystr.cpp $(TINYXML)tinystr.h
	$(GPP) -c  $(CFLAGS)  $(TINYXML)tinystr.cpp -o $(OBJ)tinystr.o
$(OBJ)tinyxmlerror.o: $(TINYXML)tinyxmlerror.cpp
	$(GPP) -c  $(CFLAGS)  $(TINYXML)tinyxmlerror.cpp -o $(OBJ)tinyxmlerror.o
$(OBJ)tinyxmlparser.o: $(TINYXML)tinyxmlparser.cpp
	$(GPP) -c $(CFLAGS) $(TINYXML)tinyxmlparser.cpp -o $(OBJ)tinyxmlparser.o
	@echo OK [TINY XML]
	@echo




clean:
	rm -f *~ *.o $(OBJ)*.o $(SRC)*~ $(H)*~ *# $(H)*# $(SRC)*# *.obj *.off *.pov *.dat $(DATA_JUNK)*
	@echo
	@echo cleaning done
	@echo


memory: $(EXEC)
	#valgrind --tool=memcheck --leak-check=full --log-fd=1 --xml=yes ./$(EXEC) & #run valgrind
	valgrind --leak-check=full --show-reachable=yes --log-fd=1 ./$(EXEC) #> $(JUNK)valgrind.log
	@echo
	@echo valgrind log written in file [junk/valgrind.log]
	@echo

test:
	./$(EXEC)
