
RELEASE = -O3

OBJ = junk/
JUNK = junk/

SRC = src/
H = header/

EXTERNAL_SRC=external/src/
EXTERNAL_INCLUDE=external/include/


CFLAGS = -pipe -Wall -Wextra
INCPATH = -I${H} -I${EXTERNAL_INCLUDE}

GPP = g++ 
EXEC = cpe_surface

LINKLIB =  -lm -lGL -lGLU -lglut 


F1=main
F2=MC_matrix
F3=MC_navigator_tool
F4=MC_v3d
F5=MC_v3d_vector
F6=MC_trackball
F7=MC_quaternion
F8=MC_v4d
F9=MC_double_vector
F10=MC_int_vector
F11=MC_string_helper
F12=mesh
F13=MC_io_off


EVERYTHING = $(OBJ)$(F1).o $(OBJ)$(F2).o $(OBJ)$(F3).o $(OBJ)$(F4).o $(OBJ)$(F5).o $(OBJ)$(F6).o $(OBJ)$(F7).o $(OBJ)$(F8).o $(OBJ)$(F9).o $(OBJ)$(F10).o $(OBJ)$(F11).o $(OBJ)$(F12).o $(OBJ)$(F13).o


all: $(EXEC)


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

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


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

$(OBJ)$(F2).o: $(EXTERNAL_SRC)$(F2).cpp $(EXTERNAL_INCLUDE)$(F2).hpp
	@echo --------- build [$(F2)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(EXTERNAL_SRC)$(F2).cpp -o $(OBJ)$(F2).o
	@echo OK [$(F2)]
	@echo

$(OBJ)$(F3).o: $(EXTERNAL_SRC)$(F3).cpp $(EXTERNAL_INCLUDE)$(F3).hpp
	@echo --------- build [$(F3)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(EXTERNAL_SRC)$(F3).cpp -o $(OBJ)$(F3).o
	@echo OK [$(F3)]
	@echo


$(OBJ)$(F4).o: $(EXTERNAL_SRC)$(F4).cpp $(EXTERNAL_INCLUDE)$(F4).hpp
	@echo --------- build [$(F4)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(EXTERNAL_SRC)$(F4).cpp -o $(OBJ)$(F4).o
	@echo OK [$(F4)]
	@echo

$(OBJ)$(F5).o: $(EXTERNAL_SRC)$(F5).cpp $(EXTERNAL_INCLUDE)$(F5).hpp
	@echo --------- build [$(F5)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(EXTERNAL_SRC)$(F5).cpp -o $(OBJ)$(F5).o
	@echo OK [$(F5)]
	@echo

$(OBJ)$(F6).o: $(EXTERNAL_SRC)$(F6).cpp $(EXTERNAL_INCLUDE)$(F6).hpp
	@echo --------- build [$(F6)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(EXTERNAL_SRC)$(F6).cpp -o $(OBJ)$(F6).o
	@echo OK [$(F5)]
	@echo

$(OBJ)$(F7).o: $(EXTERNAL_SRC)$(F7).cpp $(EXTERNAL_INCLUDE)$(F7).hpp
	@echo --------- build [$(F7)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(EXTERNAL_SRC)$(F7).cpp -o $(OBJ)$(F7).o
	@echo OK [$(F7)]
	@echo

$(OBJ)$(F8).o: $(EXTERNAL_SRC)$(F8).cpp $(EXTERNAL_INCLUDE)$(F8).hpp
	@echo --------- build [$(F8)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(EXTERNAL_SRC)$(F8).cpp -o $(OBJ)$(F8).o
	@echo OK [$(F8)]
	@echo

$(OBJ)$(F9).o: $(EXTERNAL_SRC)$(F9).cpp $(EXTERNAL_INCLUDE)$(F9).hpp
	@echo --------- build [$(F9)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(EXTERNAL_SRC)$(F9).cpp -o $(OBJ)$(F9).o
	@echo OK [$(F9)]
	@echo

$(OBJ)$(F10).o: $(EXTERNAL_SRC)$(F10).cpp $(EXTERNAL_INCLUDE)$(F10).hpp
	@echo --------- build [$(F10)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(EXTERNAL_SRC)$(F10).cpp -o $(OBJ)$(F10).o
	@echo OK [$(F10)]
	@echo

$(OBJ)$(F11).o: $(EXTERNAL_SRC)$(F11).cpp $(EXTERNAL_INCLUDE)$(F11).hpp
	@echo --------- build [$(F11)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(EXTERNAL_SRC)$(F11).cpp -o $(OBJ)$(F11).o
	@echo OK [$(F11)]
	@echo

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

$(OBJ)$(F13).o: $(EXTERNAL_SRC)$(F13).cpp $(EXTERNAL_INCLUDE)$(F13).hpp
	@echo --------- build [$(F13)] ----------
	$(GPP) -c  $(CFLAGS) $(INCPATH) $(EXTERNAL_SRC)$(F13).cpp -o $(OBJ)$(F13).o
	@echo OK [$(F13)]
	@echo


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

