
RELEASE = -O3
DEBUG = -g

OBJ = junk/
JUNK = junk/

LIB1=lib3d
LIB2=libcommon
LIB3=libimage
LIB4=libmesh
LIB5=libobject3d
LIB6=libraytracing
LIB7=libscene

CXXFLAGS = -pipe -Wall -Wextra $(DEBUG) -Wold-style-cast -Woverloaded-virtual -Wfloat-equal -Wwrite-strings -Wpointer-arith -Wcast-qual -Wcast-align -Wshadow -Wredundant-decls -Winit-self -Wswitch-default -Wswitch-enum -Wundef -Wlogical-op -Winline -Wno-unused-variable -Wno-unused-parameter
INCPATH = -I$(LIB1) -I$(LIB2) -I$(LIB3) -I$(LIB4) -I$(LIB5) -I$(LIB6) -I$(LIB7) -Ilocal

GPP = g++ 
EXEC = tp_cpe

LINKLIB = -lm

F00=main
F01=matrix2
F02=matrix3
F03=matrix4
F04=quaternion
F05=vec2
F06=vec3
F07=vec4
F08=exception_cpe
F09=color
F10=image
F11=image_io
F12=pos2
F13=z_buffer
F14=mesh
F15=mesh_io
F16=object3d
F17=plane
F18=sphere
F19=anti_aliasing_table
F20=intersection
F21=ray
F22=ray_generator
F23=ray_tracer
F24=camera
F25=light
F26=material
F27=scene
F28=shading
F29=vertex



EVERYTHING_FLAG= $(F00).o $(F01).o $(F02).o $(F03).o $(F04).o $(F05).o $(F06).o $(F07).o $(F08).o $(F09).o $(F10).o $(F11).o $(F12).o $(F13).o $(F14).o $(F15).o $(F16).o $(F17).o $(F18).o $(F19).o $(F20).o $(F21).o $(F22).o $(F23).o $(F24).o $(F25).o $(F26).o $(F27).o $(F28).o $(F29).o

EVERYTHING = $(OBJ)$(F00).o $(OBJ)$(F01).o $(OBJ)$(F02).o $(OBJ)$(F03).o $(OBJ)$(F04).o $(OBJ)$(F05).o $(OBJ)$(F06).o $(OBJ)$(F07).o $(OBJ)$(F08).o $(OBJ)$(F09).o $(OBJ)$(F10).o $(OBJ)$(F11).o $(OBJ)$(F12).o $(OBJ)$(F13).o $(OBJ)$(F14).o $(OBJ)$(F15).o $(OBJ)$(F16).o $(OBJ)$(F17).o $(OBJ)$(F18).o $(OBJ)$(F19).o $(OBJ)$(F20).o $(OBJ)$(F21).o $(OBJ)$(F22).o $(OBJ)$(F23).o $(OBJ)$(F24).o $(OBJ)$(F25).o $(OBJ)$(F26).o $(OBJ)$(F27).o $(OBJ)$(F28).o $(OBJ)$(F29).o


all: $(EXEC)


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

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


$(OBJ)$(F00).o: local/$(F00).cpp
	@echo --------- build [$(F00)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) local/$(F00).cpp -o $(OBJ)$(F00).o
	@echo OK [$(F00)]
	@echo

$(OBJ)$(F01).o: $(LIB1)/$(F01).cpp
	@echo --------- build [$(F01)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB1)/$(F01).cpp -o $(OBJ)$(F01).o
	@echo OK [$(F01)]
	@echo

$(OBJ)$(F02).o: $(LIB1)/$(F02).cpp
	@echo --------- build [$(F02)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB1)/$(F02).cpp -o $(OBJ)$(F02).o
	@echo OK [$(F02)]
	@echo

$(OBJ)$(F03).o: $(LIB1)/$(F03).cpp
	@echo --------- build [$(F03)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB1)/$(F03).cpp -o $(OBJ)$(F03).o
	@echo OK [$(F03)]
	@echo

$(OBJ)$(F04).o: $(LIB1)/$(F04).cpp
	@echo --------- build [$(F04)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB1)/$(F04).cpp -o $(OBJ)$(F04).o
	@echo OK [$(F04)]
	@echo

$(OBJ)$(F05).o: $(LIB1)/$(F05).cpp
	@echo --------- build [$(F05)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB1)/$(F05).cpp -o $(OBJ)$(F05).o
	@echo OK [$(F05)]
	@echo

$(OBJ)$(F06).o: $(LIB1)/$(F06).cpp
	@echo --------- build [$(F06)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB1)/$(F06).cpp -o $(OBJ)$(F06).o
	@echo OK [$(F06)]
	@echo


$(OBJ)$(F07).o: $(LIB1)/$(F07).cpp
	@echo --------- build [$(F07)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB1)/$(F07).cpp -o $(OBJ)$(F07).o
	@echo OK [$(F07)]
	@echo

$(OBJ)$(F08).o: $(LIB2)/$(F08).cpp
	@echo --------- build [$(F08)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB2)/$(F08).cpp -o $(OBJ)$(F08).o
	@echo OK [$(F08)]
	@echo

$(OBJ)$(F09).o: $(LIB3)/$(F09).cpp
	@echo --------- build [$(F09)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB3)/$(F09).cpp -o $(OBJ)$(F09).o
	@echo OK [$(F09)]
	@echo

$(OBJ)$(F10).o: $(LIB3)/$(F10).cpp
	@echo --------- build [$(F10)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB3)/$(F10).cpp -o $(OBJ)$(F10).o
	@echo OK [$(F10)]
	@echo

$(OBJ)$(F11).o: $(LIB3)/$(F11).cpp
	@echo --------- build [$(F11)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB3)/$(F11).cpp -o $(OBJ)$(F11).o
	@echo OK [$(F11)]
	@echo

$(OBJ)$(F12).o: $(LIB3)/$(F12).cpp
	@echo --------- build [$(F12)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB3)/$(F12).cpp -o $(OBJ)$(F12).o
	@echo OK [$(F12)]
	@echo

$(OBJ)$(F13).o: $(LIB3)/$(F13).cpp
	@echo --------- build [$(F13)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB3)/$(F13).cpp -o $(OBJ)$(F13).o
	@echo OK [$(F13)]
	@echo

$(OBJ)$(F14).o: $(LIB4)/$(F14).cpp
	@echo --------- build [$(F14)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB4)/$(F14).cpp -o $(OBJ)$(F14).o
	@echo OK [$(F14)]
	@echo

$(OBJ)$(F15).o: $(LIB4)/$(F15).cpp
	@echo --------- build [$(F15)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB4)/$(F15).cpp -o $(OBJ)$(F15).o
	@echo OK [$(F15)]
	@echo

$(OBJ)$(F16).o: $(LIB5)/$(F16).cpp
	@echo --------- build [$(F16)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB5)/$(F16).cpp -o $(OBJ)$(F16).o
	@echo OK [$(F16)]
	@echo

$(OBJ)$(F17).o: $(LIB5)/$(F17).cpp
	@echo --------- build [$(F17)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB5)/$(F17).cpp -o $(OBJ)$(F17).o
	@echo OK [$(F17)]
	@echo

$(OBJ)$(F18).o: $(LIB5)/$(F18).cpp
	@echo --------- build [$(F18)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB5)/$(F18).cpp -o $(OBJ)$(F18).o
	@echo OK [$(F18)]
	@echo

$(OBJ)$(F19).o: $(LIB6)/$(F19).cpp
	@echo --------- build [$(F19)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB6)/$(F19).cpp -o $(OBJ)$(F19).o
	@echo OK [$(F19)]
	@echo

$(OBJ)$(F20).o: $(LIB6)/$(F20).cpp
	@echo --------- build [$(F20)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB6)/$(F20).cpp -o $(OBJ)$(F20).o
	@echo OK [$(F20)]
	@echo

$(OBJ)$(F21).o: $(LIB6)/$(F21).cpp
	@echo --------- build [$(F21)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB6)/$(F21).cpp -o $(OBJ)$(F21).o
	@echo OK [$(F21)]
	@echo

$(OBJ)$(F22).o: $(LIB6)/$(F22).cpp
	@echo --------- build [$(F22)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB6)/$(F22).cpp -o $(OBJ)$(F22).o
	@echo OK [$(F22)]
	@echo

$(OBJ)$(F23).o: $(LIB6)/$(F23).cpp
	@echo --------- build [$(F23)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB6)/$(F23).cpp -o $(OBJ)$(F23).o
	@echo OK [$(F23)]
	@echo

$(OBJ)$(F24).o: $(LIB7)/$(F24).cpp
	@echo --------- build [$(F24)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB7)/$(F24).cpp -o $(OBJ)$(F24).o
	@echo OK [$(F24)]
	@echo

$(OBJ)$(F25).o: $(LIB7)/$(F25).cpp
	@echo --------- build [$(F25)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB7)/$(F25).cpp -o $(OBJ)$(F25).o
	@echo OK [$(F25)]
	@echo


$(OBJ)$(F26).o: $(LIB7)/$(F26).cpp
	@echo --------- build [$(F26)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB7)/$(F26).cpp -o $(OBJ)$(F26).o
	@echo OK [$(F26)]
	@echo


$(OBJ)$(F27).o: $(LIB7)/$(F27).cpp
	@echo --------- build [$(F27)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB7)/$(F27).cpp -o $(OBJ)$(F27).o
	@echo OK [$(F27)]
	@echo


$(OBJ)$(F28).o: $(LIB7)/$(F28).cpp
	@echo --------- build [$(F28)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB7)/$(F28).cpp -o $(OBJ)$(F28).o
	@echo OK [$(F28)]
	@echo

$(OBJ)$(F29).o: $(LIB7)/$(F29).cpp
	@echo --------- build [$(F29)] ----------
	$(GPP) -c  $(CXXFLAGS) $(INCPATH) $(LIB7)/$(F29).cpp -o $(OBJ)$(F29).o
	@echo OK [$(F29)]
	@echo



clean:
	rm -f *~ *.o $(OBJ)*.o *# 
	@echo
	@echo cleaning done
	@echo

