PROJECT= gltp3
DATA= Doxyfile bigguy.obj ground.obj *.?sl simple.mtl bbox.obj verdana.ttf

CC= g++
LD= g++

# options de compilation / link par defaut
CFLAGS= -Wall -pipe -g 
LDFLAGS= -lm -lGL -g

# options pour glew
GLEW_CFLAGS= -I $(HOME)/local/include/
GLEW_LDFLAGS= -L $(HOME)/local/lib -Wl,-rpath,$(HOME)/local/lib -lGLEW
#~ GLEW_CFLAGS= -I /usr/include/GL
#~ GLEW_LDFLAGS= -lGLEW
 
CFLAGS+= $(GLEW_CFLAGS)
LDFLAGS+= $(GLEW_LDFLAGS)

# options pour sdl
SDL_CFLAGS= `sdl-config --cflags`
SDL_LDFLAGS= `sdl-config --libs` -lSDL_image -lSDL_ttf
CFLAGS+= $(SDL_CFLAGS)
LDFLAGS+= $(SDL_LDFLAGS)

# compiler gKit
GKIT_SRC= App.cpp Scene.cpp Geometry.cpp Mesh.cpp MeshOBJ.cpp Transform.cpp TextFile.cpp GL/GLShaderObject.cpp GL/TPShaderProgram.cpp 
GKIT_CFLAGS= -I . -D VERBOSE -D GK_OPENGL3
GKIT_LDFLAGS=
CFLAGS+= $(GKIT_CFLAGS)
LDFLAGS+= $(GKIT_LDFLAGS)

# compiler nvWidgets
NVWIDGETS_SRC= Widgets/nvwidgets/nvWidgets.cpp Widgets/nvwidgets/nvGLWidgets.cpp Widgets/nvwidgets/nvSdlWidgets.cpp Widgets/nvwidgets/nvSdlTextPainter.cpp 
NVWIDGETS_CFLAGS= -I Widgets
NVWIDGETS_LDFLAGS=
CFLAGS+= $(NVWIDGETS_CFLAGS)
LDFLAGS+= $(NVWIDGETS_LDFLAGS)

# application
SRC= $(GKIT_SRC) $(NVWIDGETS_SRC)

# objets et dependances
OBJ= $(SRC:.cpp=.o)
DEP= $(SRC:.cpp=.d)

# executables a produire
#~ BIN= shadercc widgets_main shader_main glmain scene_main
BIN= shadercc main feedback feedback2
DEP+= shadercc.d core_main.d feedback_main.d feedback2_main.d

.PHONY: all
all: $(BIN)

# construction des executables
shadercc: shadercc.o $(OBJ)
	@echo; echo $@
	$(LD) -o $@ $(LDFLAGS) $+

main: core_main.o $(OBJ)
	@echo; echo $@
	$(LD) -o $@ $(LDFLAGS) $+
	
feedback: feedback_main.o $(OBJ)
	@echo; echo $@
	$(LD) -o $@ $(LDFLAGS) $+

feedback2: feedback2_main.o $(OBJ)
	@echo; echo $@
	$(LD) -o $@ $(LDFLAGS) $+

# compilation des objets et des dependances
%.o: %.cpp
	$(CC) $(CFLAGS) -c $< -o $@

%.d: %.cpp
	$(CC) $(CFLAGS) -o $@ -MM $<

.PHONY: clean
clean: rebuild
	rm -f $(BIN) *.o *.d $(OBJ) $(DEP)

.PHONY: tarball
tarball:
	@echo $(PROJECT)_b$(BUILD).tar.gz
	tar --ignore-failed-read --dereference -zcf $(PROJECT)_b$(BUILD).tar.gz Makefile *.c *.cpp *.h */*.h */*.cpp */*/*.h */*/*.cpp $(DATA) build
	@-rm -f $(PROJECT)_latest.tar.gz
	@ln -s $(PROJECT)_b$(BUILD).tar.gz $(PROJECT)_latest.tar.gz

# numero de version auto
-include build

build:
	@echo BUILD= 1 > build

rebuild: build
	@echo BUILD= `expr $(BUILD) + 1` > build

.PHONY: install
install: shadercc
	mkdir -p $(HOME)/local/bin
	cp shadercc $(HOME)/local/bin
	
ifneq ($(MAKECMDGOALS), clean)
-include $(DEP)
endif
