CC	 			=	g++
LIB_PATHS		=	-L/usr/lib -Llib/nifticlib-2.0.0/znzlib -Llib/nifticlib-2.0.0/lib
INC_PATHS		=	-Ilib/nifticlib-2.0.0/include
LIBS			=	-lniftiio -lnifticdf -lznz -lz
CFLAGS			=	-Wall -ansi -pedantic
INSTALL_BIN_DIR	=	bin
OBJ_DIR			=   obj
SRC_DIR			=	src
OAL				=   $(INSTALL_BIN_DIR)/oal
NLS				=   $(INSTALL_BIN_DIR)/nls
COR				=   $(INSTALL_BIN_DIR)/segcorr
MCOR_OBJ		=	$(OBJ_DIR)/main_corr.o
MCOR_CPP		=	$(SRC_DIR)/main_corr.cpp
MOAL_OBJ		=	$(OBJ_DIR)/main_oal.o
MOAL_CPP		=	$(SRC_DIR)/main_oal.cpp
MNLS_OBJ		=	$(OBJ_DIR)/main_nls.o
MNLS_CPP		=	$(SRC_DIR)/main_nls.cpp
COR_OBJ			=	$(OBJ_DIR)/Correction.o
COR_H			=	$(SRC_DIR)/Correction.h
COR_CPP			=	$(SRC_DIR)/Correction.cpp
OAL_OBJ			=	$(OBJ_DIR)/OutOfAtlasLabeling.o
OAL_H			=	$(SRC_DIR)/OutOfAtlasLabeling.h
OAL_CPP			=	$(SRC_DIR)/OutOfAtlasLabeling.cpp
NLS_OBJ			=	$(OBJ_DIR)/NonLocalSTAPLE.o
NLS_H			=	$(SRC_DIR)/NonLocalSTAPLE.h
NLS_CPP			=	$(SRC_DIR)/NonLocalSTAPLE.cpp
TOOLS_OBJ		=	$(OBJ_DIR)/fusion_tools.o
TOOLS_H			=	$(SRC_DIR)/fusion_tools.h
TOOLS_CPP		=	$(SRC_DIR)/fusion_tools.cpp
IO_OBJ			=	$(OBJ_DIR)/fusion_io.o
IO_H			=	$(SRC_DIR)/fusion_io.h
IO_CPP			=	$(SRC_DIR)/fusion_io.cpp

all: OALEXEC NLSEXEC COREXEC

COREXEC: $(MCOR_OBJ)
	$(CC) $(INC_PATHS) $(LIB_PATHS) -o $(COR) $(TOOLS_OBJ) $(IO_OBJ) $(COR_OBJ) $(MCOR_OBJ) $(LIBS)
$(MCOR_OBJ): $(MCOR_CPP) $(COR_OBJ)
	$(CC) $(INC_PATHS) -c $(MCOR_CPP) -o $(MCOR_OBJ)
$(COR_OBJ): $(COR_CPP) $(TOOLS_OBJ)
	$(CC) $(INC_PATHS) -c $(COR_CPP) -o $(COR_OBJ)

NLSEXEC: $(MNLS_OBJ)
	$(CC) $(INC_PATHS) $(LIB_PATHS) -o $(NLS) $(TOOLS_OBJ) $(IO_OBJ) $(NLS_OBJ) $(MNLS_OBJ) $(LIBS)
$(MNLS_OBJ): $(MNLS_CPP) $(NLS_OBJ)
	$(CC) $(INC_PATHS) -c $(MNLS_CPP) -o $(MNLS_OBJ)
$(NLS_OBJ): $(NLS_CPP) $(TOOLS_OBJ)
	$(CC) $(INC_PATHS) -c $(NLS_CPP) -o $(NLS_OBJ)


OALEXEC: $(MOAL_OBJ)
	$(CC) $(INC_PATHS) $(LIB_PATHS) -o $(OAL) $(TOOLS_OBJ) $(IO_OBJ) $(OAL_OBJ) $(MOAL_OBJ) $(LIBS)
$(MOAL_OBJ): $(MOAL_CPP) $(OAL_OBJ)
	$(CC) $(INC_PATHS) -c $(MOAL_CPP) -o $(MOAL_OBJ)
$(OAL_OBJ): $(OAL_CPP) $(TOOLS_OBJ)
	$(CC) $(INC_PATHS) -c $(OAL_CPP) -o $(OAL_OBJ)


$(TOOLS_OBJ): $(TOOLS_CPP) $(IO_OBJ)
	$(CC) $(INC_PATHS) -c $(TOOLS_CPP) -o $(TOOLS_OBJ)
$(IO_OBJ): $(IO_CPP)
	$(CC) $(INC_PATHS) -c $(IO_CPP) -o $(IO_OBJ)
clean:
	rm $(MNLS_OBJ) $(NLS_OBJ) $(MOAL_OBJ) $(OAL_OBJ) $(TOOLS_OBJ) $(IO_OBJ)

