INCLUDE=./include
SRC=./code
TOOLS=./tools/src
UTIL=util

FLAGS=  -O3 -Wall

INCFLAGS = -I$(INCLUDE) -I$(INCLUDE)/$(UTIL) $(R_XTRA_CPPFLAGS) 

PKG_CPPFLAGS = $(INCFLAGS) -lOPF -lm
PKG_LIBS = -L./$(INCLUDE) -lOPF -lm

OPFSOURCES = code/opf_split.c code/opf_accuracy.c code/opf_accuracy4label.c code/opf_train.c code/opf_semi.c code/opf_classify.c code/opf_learn.c code/opf_distance.c code/opf_info.c code/opf_fold.c code/opf_merge.c code/opf_cluster.c code/opf_pruning.c code/opf_normalize.c code/opfknn_train.c code/opfknn_classify.c
TOOLSSOURCES = init.c tools/src/txt2opf.c tools/src/opf2txt.c tools/src/opf_check.c tools/src/opf2svm.c tools/src/svm2opf.c
OBJECTS = $(OPFSOURCES:.c=.o) $(TOOLSSOURCES:.c=.o)

all: libOPF $(SHLIB)

libOPF: libOPF-build
	echo "libOPF.a built..."

libOPF-build: \
util \
$(SRC)/OPF.o \

	$(AR) csr $(INCLUDE)/libOPF.a \
$(SRC)/$(UTIL)/common.o \
$(SRC)/$(UTIL)/set.o \
$(SRC)/$(UTIL)/gqueue.o \
$(SRC)/$(UTIL)/realheap.o \
$(SRC)/$(UTIL)/sgctree.o \
$(SRC)/$(UTIL)/subgraph.o \
$(SRC)/$(UTIL)/OPF.o \

$(SRC)/OPF.o: $(SRC)/OPF.c
	$(CC) $(FLAGS) -c $(SRC)/OPF.c $(INCFLAGS) -o $(SRC)/$(UTIL)/OPF.o -fPIC 

util: $(SRC)/$(UTIL)/common.c $(SRC)/$(UTIL)/set.c $(SRC)/$(UTIL)/gqueue.c $(SRC)/$(UTIL)/realheap.c $(SRC)/$(UTIL)/sgctree.c $(SRC)/$(UTIL)/subgraph.c
	$(CC) $(FLAGS) $(INCFLAGS) -c $(SRC)/$(UTIL)/common.c -o $(SRC)/$(UTIL)/common.o  -fPIC 
	$(CC) $(FLAGS) $(INCFLAGS) -c $(SRC)/$(UTIL)/set.c -o $(SRC)/$(UTIL)/set.o -fPIC 
	$(CC) $(FLAGS) $(INCFLAGS) -c $(SRC)/$(UTIL)/gqueue.c -o $(SRC)/$(UTIL)/gqueue.o -fPIC 
	$(CC) $(FLAGS) $(INCFLAGS) -c $(SRC)/$(UTIL)/realheap.c -o $(SRC)/$(UTIL)/realheap.o -fPIC 
	$(CC) $(FLAGS) $(INCFLAGS) -c $(SRC)/$(UTIL)/sgctree.c -o $(SRC)/$(UTIL)/sgctree.o -fPIC 
	$(CC) $(FLAGS) $(INCFLAGS) -c $(SRC)/$(UTIL)/subgraph.c -o $(SRC)/$(UTIL)/subgraph.o -fPIC 
