HOME_DIR = ..
SRC_DIR = $(HOME_DIR)/src
OBJ_DIR = $(HOME_DIR)/obj
HDR_DIR = $(HOME_DIR)/src
BIN_DIR = $(HOME_DIR)/bin
LIB_DIR = $(HOME_DIR)/lib
TIFF_DIR = $(HOME_DIR)/../tiff_lib/tiff-v3.4/libtiff
JPEG_DIR = $(HOME_DIR)/../tiff_lib/jpeg-uunet/jpeg-6a

HDR_UTL = $(HOME_DIR)/../utilities/src/util.h
LIB_UTL = $(HOME_DIR)/../utilities/lib/lib_util.a
LIB_TIFF = $(TIFF_DIR)/libtiff.a
HDR_TIFF = $(TIFF_DIR)/Tiff_img.h 
LIB_JPEG = $(JPEG_DIR)/libjpeg.a


# electric fence is a malloc error finding tool
EF_DIR = $(HOME_DIR)/../../ElectricFence-2.0.5
LIB_EF = $(EF_DIR)/libefence.a



# Solaris 2.X, HPUX 9.X and 10.X cc options
#CFLAGS = -Aa -O
#CFLAGS = -Aa -g

# for gcc
CFLAGS = -ansi -g

SOURCES = \
    $(SRC_DIR)/seg_io.c  $(SRC_DIR)/io_sig.c    \
    $(SRC_DIR)/new.c     $(SRC_DIR)/alloc.c     $(SRC_DIR)/featureProb.c \
    $(SRC_DIR)/strip.c   $(SRC_DIR)/eigen.c     $(SRC_DIR)/decimate.c \
    $(SRC_DIR)/ML.c      $(SRC_DIR)/MAP.c       $(SRC_DIR)/invert.c \
    $(SRC_DIR)/feature.c $(SRC_DIR)/u_pyramid.c $(SRC_DIR)/model.c \
    $(SRC_DIR)/cntx_io.c $(SRC_DIR)/cntxProb.c

HEADERS = \
    $(HDR_DIR)/seg.h  $(HDR_DIR)/seg_global.h  $(HDR_TIFF)
# $(HDR_EF)

OBJECTS = \
    $(OBJ_DIR)/seg_io.o  $(OBJ_DIR)/io_sig.o    \
    $(OBJ_DIR)/new.o     $(OBJ_DIR)/alloc.o     $(OBJ_DIR)/featureProb.o \
    $(OBJ_DIR)/strip.o   $(OBJ_DIR)/eigen.o     $(OBJ_DIR)/decimate.o \
    $(OBJ_DIR)/ML.o      $(OBJ_DIR)/MAP.o       $(OBJ_DIR)/invert.o \
    $(OBJ_DIR)/feature.o $(OBJ_DIR)/u_pyramid.o $(OBJ_DIR)/model.o \
    $(OBJ_DIR)/cntx_io.o $(OBJ_DIR)/cntxProb.o

# to use electric fence, remove '#' from following line:
LIB_SEG = $(LIB_DIR)/lib_seg.a $(LIB_UTL) $(LIB_TIFF) $(LIB_JPEG)  # $(LIB_EF)

DEFINES = 

# used in make.rules
# CC = gcc
CC = cc
OUTPUT_OPTION = -o $@
AR = ar
ARFLAGS = rv

COMPILE.c = $(CC) $(CFLAGS) $(OUTPUT_OPTION) -c
AR.o      = $(AR) $(ARFLAGS)
LINK.c    = $(CC) $(CFLAGS) 

LIBS = lib_seg.a

default : all

all : $(LIBS) seg

lib_seg.a : $(OBJECTS)
	$(AR.o) $(LIB_DIR)/lib_seg.a $(OBJECTS)

$(OBJ_DIR)/seg_io.o : $(SRC_DIR)/seg_io.c $(HEADERS)
	$(COMPILE.c) $(SRC_DIR)/seg_io.c	
$(OBJ_DIR)/io_sig.o : $(SRC_DIR)/io_sig.c $(HEADERS)
	$(COMPILE.c) $(SRC_DIR)/io_sig.c
$(OBJ_DIR)/model.o : $(SRC_DIR)/model.c $(HEADERS)
	$(COMPILE.c) $(SRC_DIR)/model.c
$(OBJ_DIR)/new.o : $(SRC_DIR)/new.c $(HEADERS)
	$(COMPILE.c) $(SRC_DIR)/new.c
$(OBJ_DIR)/alloc.o : $(SRC_DIR)/alloc.c $(HEADERS)
	$(COMPILE.c) $(SRC_DIR)/alloc.c
$(OBJ_DIR)/eigen.o : $(SRC_DIR)/eigen.c $(HEADERS)
	$(COMPILE.c) $(SRC_DIR)/eigen.c
$(OBJ_DIR)/strip.o : $(SRC_DIR)/strip.c $(HEADERS)
	$(COMPILE.c) $(SRC_DIR)/strip.c
$(OBJ_DIR)/invert.o : $(SRC_DIR)/invert.c $(HEADERS)
	$(COMPILE.c) $(SRC_DIR)/invert.c
$(OBJ_DIR)/feature.o : $(SRC_DIR)/feature.c $(HEADERS)
	$(COMPILE.c) $(SRC_DIR)/feature.c
$(OBJ_DIR)/featureProb.o : $(SRC_DIR)/featureProb.c $(HEADERS)
	$(COMPILE.c) $(SRC_DIR)/featureProb.c
$(OBJ_DIR)/u_pyramid.o : $(SRC_DIR)/u_pyramid.c $(HEADERS)
	$(COMPILE.c) $(SRC_DIR)/u_pyramid.c
$(OBJ_DIR)/cntx_io.o : $(SRC_DIR)/cntx_io.c $(HEADERS)
	$(COMPILE.c) $(SRC_DIR)/cntx_io.c
$(OBJ_DIR)/cntxProb.o : $(SRC_DIR)/cntxProb.c $(HEADERS)
	$(COMPILE.c) $(SRC_DIR)/cntxProb.c
$(OBJ_DIR)/decimate.o : $(SRC_DIR)/decimate.c $(HEADERS)
	$(COMPILE.c) $(SRC_DIR)/decimate.c
$(OBJ_DIR)/MAP.o : $(SRC_DIR)/MAP.c $(HEADERS)
	$(COMPILE.c) $(SRC_DIR)/MAP.c
$(OBJ_DIR)/ML.o : $(SRC_DIR)/ML.c $(HEADERS)
	$(COMPILE.c) $(SRC_DIR)/ML.c


seg : $(OBJ_DIR)/seg.o $(OBJECTS) $(LIB_SEG)
	$(LINK.c) -o $(BIN_DIR)/$@ $(OBJ_DIR)/seg.o $(OBJECTS) $(LIB_SEG) -lm

$(OBJ_DIR)/seg.o : $(SRC_DIR)/seg.c $(HEADERS)
	$(COMPILE.c) $(SRC_DIR)/seg.c	


clean: 
	rm -f $(OBJ_DIR)/*.o $(LIB_DIR)/$(LIBS) $(BIN_DIR)/seg
