
PROJECT_NAME	= sot
OS		= Linux
SUFFIX		= 
HOSTNAME	= jorasse
PROJECT_HOME	= /home/nmansard/src/StackOfTasks
PROJECT_DIR_SRC	= $(PROJECT_HOME)/src
PROJECT_DIR_INCLUDE= $(PROJECT_HOME)/src
PROJECT_DIR_LIB	= $(PROJECT_HOME)/lib
PROJECT_DIR_OBJ	= $(PROJECT_HOME)/.obj
PROJECT_DIR_DEP	= $(PROJECT_HOME)/.dep
PROJECT_DIR_BIN	= $(PROJECT_HOME)/bin
PROJECT_DIR_TESTS= $(PROJECT_HOME)/tests
PROJECT_DIR_EXPORT_INCLUDE	= $(PROJECT_HOME)/include
PROJECT_LIB_PATH = $(PROJECT_DIR_LIB)
PROJECT_PLUGIN_PATH = $(PROJECT_DIR_LIB)/plugin
PROJECT_OBJ_PATH = $(PROJECT_DIR_OBJ)/$(HOSTNAME)$(SUFFIX)
PROJECT_PLUGIN_OBJ_PATH = $(PROJECT_OBJ_PATH)/plugin
PROJECT_DEP_PATH = $(PROJECT_DIR_DEP)/$(HOSTNAME)$(SUFFIX)
PROJECT_BIN_PATH = $(PROJECT_DIR_BIN)/$(HOSTNAME)$(SUFFIX)
PROJECT_TESTS_PATH = $(PROJECT_DIR_TESTS)
PROJECT_INC_PATH = $(PROJECT_DIR_EXPORT_INCLUDE)/$(PROJECT_NAME)
PROJECT_LIBNAME	= sot-0
OPENHRP_ROOTDIR = /home/nmansard/src/OpenHRP

CXX		= g++-3.3
CXX_VERSION	= 3.3.6
CXX_FLAGS	+= -DWITH_OPENHRP -I/usr/local/3.3/include -I. -I/usr/include/boost-sandbox -pthread -I/usr/local/3.3/include -I/usr/local/3.3/include/boost_thread-sandbox -I/usr/include  -O2 -I/home/nmansard/src/StackOfTasks/include -I. -Wall -Wunused -Werror  -D__Linux_
CXXALL		= $(CXX) $(CXX_FLAGS)
AR		= ar crs
RANLIB		= ranlib
MOC		= @QT_MOC@

LDFLAGS		= -Wl,-rpath,$(PROJECT_DIR_LIB) -L/usr/local/3.3/lib -L/usr/lib/lib -L/usr/local/3.3/lib  -L/home/nmansard/src/StackOfTasks/lib
LIBS		= -lsot-0 -llapack -lblas -lboost_thread-gcc-mt -lpthread -lpthread -ldl -lm -lpthread 

# --->
# ---> CFLAGS
# --->

# ENABLE TRACES
ifeq ($(VP_DEBUG),yes)
	CXX_FLAGS += -DVP_DEBUG=yes -g
	CXX_FLAGS_TMP:=$(filter-out -O%,$(CXX_FLAGS))
	CXX_FLAGS:=$(filter-out -Werror,$(CXX_FLAGS_TMP))
endif

# LEVEL OF TRACE
VP_DMODE ?= 0
CXX_FLAGS += -DVP_DEBUG_MODE=$(VP_DMODE)

# FLAG DEFENSIF
ifeq ($(VP_DEFENSIF), yes)
  CXX_FLAGS += -DVP_DEFENSIF
endif

# --->
# ---> MAKE FLAGS
# --->

MAKE_FLAGS     =
ifeq ($(VP_DEBUG),yes)
  MAKE_FLAGS     += VP_DEBUG=yes
endif

ifeq ($(VP_DEFENSIF), yes)
  MAKE_FLAGS     += VP_DEFENSIF=yes
endif

ifdef VP_DMODE
  MAKE_FLAGS     += VP_DMODE=$(VP_DMODE)
endif



CXXFLAGS += $(INCLUDE)
LDFLAGS += $(LIBPATH)
LIBS += $(LIB) $(LIBS_FLAGS)

MAINS		= test_factory.cpp \
		  test_dshell.cpp \
		  test_shell.cpp


LOCAL_DIR_BIN = $(PROJECT_TESTS_PATH)/bin


test_dshell_OBJ     = 
test_dshell_EXT_CLASS = sotDistantShell
test_dshell_EXT_OBJ = $(test_dshell_EXT_CLASS:%=$(PROJECT_PLUGIN_PATH)/%.so)

.DEFAULT: all
all: install

%_MKDIR:
	@if [ ! -d $* ] ;\
	then \
		echo "*" ; \
		echo "* Creation of the $* directory..." ; \
		echo "*" ; \
		mkdir -p $* ; \
	fi ;

directory: $(PROJECT_OBJ_PATH)_MKDIR $(PROJECT_DIR_DEP)_MKDIR $(PROJECT_DEP_PATH)_MKDIR $(PROJECT_BIN_PATH)_MKDIR $(PROJECT_PLUGIN_PATH)_MKDIR $(PROJECT_PLUGIN_OBJ_PATH)_MKDIR 

PROGS_TMP	= $(MAINS:%.cpp=%)
PROGS		= $(PROGS_TMP:%.c=%)
PROGS_EXE	= # Not define here but in bin_template

LOCAL_DEP_PATH = .dep
LOCAL_OBJ_PATH = .obj
DEPFILES_TMP=$(MAINS:%.cpp=$(LOCAL_DEP_PATH)/%.P)
DEPFILES    =$(DEPFILES_TMP:%.c=$(LOCAL_DEP_PATH)/%.P)
DEPFILES    +=$(foreach TARGET,$(PROGS),$($(TARGET)_OBJ:%.o=$(LOCAL_DEP_PATH)/%.P))

ifeq ($(SUFFIX), _insure)
DEP_FILE	= $*.d
else
DEP_FILE	= $(*F)$(SUFFIX).d
endif


define bin_template
$(1)_BIN_PATH ?= $$(PROJECT_BIN_PATH)
PROGS_EXE += $$($(1)_BIN_PATH)/$(1)$$(BIN_EXTENSION)
$$($(1)_BIN_PATH)/$(1)$$(BIN_EXTENSION): $$($(1)_OBJ_FILES) $(1:%=$(LOCAL_OBJ_PATH)/%.o)
	@echo "*"
	@echo  "* Linking $$(@F)  "
	@echo "*"
	$$(CXXALL) -MD $$^ -o $$@ $$($(1)_EXT_OBJ) $$(LDFLAGS) $$(LIBS) $$($(1)_LDFLAGS) 
endef

$(LOCAL_OBJ_PATH)/%.o: %.cpp
	@echo "*"
	@echo  "* Compiling $@ "
	@echo "*"
	@if [ ! -d $(LOCAL_OBJ_PATH) ] ; then mkdir $(LOCAL_OBJ_PATH) ; fi ;
	@if [ ! -d $(LOCAL_DEP_PATH) ] ; then mkdir $(LOCAL_DEP_PATH) ; fi ;
	$(CXXALL) -MD -o $@ -c $<
	@cp $(@:%.o=%.d) $(LOCAL_DEP_PATH)/$*.P; \
	sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
	    -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d)\
	    >> $(LOCAL_DEP_PATH)/$*.P; \
	rm -f $(@:%.o=%.d)


$(foreach TARGET,$(PROGS),$(eval $(call bin_template,$(TARGET))))


install: directory  $(LOCAL_DIR_BIN)_MKDIR $(PROGS_EXE) 

$(VISP_LIBNAME):
	cd $(VISP_DIR_SRC); $(MAKE)


uninstall:
	rm -f $(PROGS)
	rm -f $(DEPFILES)
	rm -rf $(LOCAL_DEP_PATH) $(LOCAL_OBJ_PATH)

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


-include $(DEPFILES)

