MODULES = ../Modules/
ADDONS = ../AddOns/
CFLAGS = -O3 -Wall -I. -I$(ADDONS) -I$(MODULES)
#CFLAGS = -ggdb -Wall -I. -I$(ADDONS) -I$(MODULES)
LOPT = -lm
CC = gcc
TGTS = cbrls cbgla cblbgu cbfcm

CBDEPS = cb.o file.o interfc.o random.o memctrl.o
CIDIDEPS = criteria.o ftest.o stcomplx.o mdl.o xiebenik.o distance.o
UTILDEPS = sortcb.o sort.o cb_util.o textfile.o fvec.o

RLSADEPS = rls.o iter.o
GLAADEPS = gla.o
LBGUADEPS = lbgu.o $(GLAADEPS)
FCMADEPS = $(GLAADEPS) fcm.o fuzzy.o matrix.o

DEPS = $(CBDEPS) $(CIDIDEPS) $(UTILDEPS)
RLSDEPS = $(DEPS) $(RLSADEPS) cbrls.o
GLADEPS = $(DEPS) $(GLAADEPS) cbgla.o
LBGUDEPS = $(DEPS) $(LBGUADEPS) cblbgu.o
FCMDEPS = $(DEPS) $(FCMADEPS) cbfcm.o

.PHONY:
all: $(TGTS)

.PHONY:
depend:
	gcc -E -MM *.c *.cpp $(MODULES)*.c $(ADDONS)*.c $(ADDONS)*.cpp -I. -I$(MODULES) -I$(ADDONS) > depend.lst

.PHONY:
install: all
	mv $(TGTS) $(HOME)/bin/

.PHONY:
clean:
	rm -f *.o $(TGTS)

cbrls: $(RLSDEPS)
	gcc -o cbrls $(RLSDEPS) $(LOPT)

cbgla: $(GLADEPS)
	gcc -o cbgla $(GLADEPS) $(LOPT)

cblbgu: $(LBGUDEPS)
	gcc -o cblbgu $(LBGUDEPS) $(LOPT)

cbfcm: $(FCMDEPS)
	gcc -o cbfcm $(FCMDEPS) $(LOPT)

cbfcm.o: cbfcm.c $(MODULES)parametr.c $(MODULES)file.h \
 $(MODULES)owntypes.h $(MODULES)parametr.h cbfcm.fac fcm.h \
 $(MODULES)cb.h $(ADDONS)fuzzy.hpp $(ADDONS)matrix.hpp \
 $(ADDONS)DistCrit/distance.h $(ADDONS)DistCrit/criteria.h \
 $(MODULES)interfc.h $(MODULES)memctrl.h $(MODULES)random.h \
 $(ADDONS)cb_util.h $(MODULES)sortcb.h $(ADDONS)DistCrit/distcrit.fac
	gcc $(CFLAGS) -c $< -o $@
fuzzy.o: $(ADDONS)fuzzy.cpp $(ADDONS)fuzzy.hpp $(MODULES)cb.h \
 $(MODULES)owntypes.h $(ADDONS)matrix.hpp \
 $(ADDONS)DistCrit/distance.h
	gcc $(CFLAGS) -c $< -o $@
matrix.o: $(ADDONS)matrix.cpp $(ADDONS)matrix.hpp
	gcc $(CFLAGS) -c $< -o $@
fcm.o: fcm.cpp fcm.h gla.h $(MODULES)cb.h $(MODULES)owntypes.h \
 $(ADDONS)fuzzy.hpp $(ADDONS)matrix.hpp \
 $(ADDONS)DistCrit/distance.h $(ADDONS)DistCrit/criteria.h \
 $(MODULES)interfc.h $(MODULES)memctrl.h $(ADDONS)cb_util.h
	gcc $(CFLAGS) -c $< -o $@
cbgla.o: cbgla.c $(MODULES)parametr.c $(MODULES)file.h \
 $(MODULES)owntypes.h $(MODULES)parametr.h cbgla.fac gla.h \
 $(MODULES)cb.h $(ADDONS)DistCrit/criteria.h $(ADDONS)DistCrit/distance.h \
 $(MODULES)interfc.h $(MODULES)memctrl.h $(ADDONS)DistCrit/distcrit.fac \
 $(MODULES)random.h $(ADDONS)cb_util.h $(MODULES)sortcb.h
	gcc $(CFLAGS) -c $< -o $@
cblbgu.o: cblbgu.c $(MODULES)parametr.c $(MODULES)file.h \
 $(MODULES)owntypes.h $(MODULES)parametr.h cblbgu.fac lbgu.h \
 $(MODULES)cb.h $(ADDONS)DistCrit/criteria.h $(ADDONS)DistCrit/distance.h \
 $(MODULES)interfc.h $(MODULES)memctrl.h $(ADDONS)DistCrit/distcrit.fac \
 $(MODULES)random.h $(ADDONS)cb_util.h $(MODULES)sortcb.h
	gcc $(CFLAGS) -c $< -o $@
cbrls.o: cbrls.c $(MODULES)parametr.c $(MODULES)file.h \
 $(MODULES)owntypes.h $(MODULES)parametr.h cbrls.fac rls.h \
 $(MODULES)cb.h $(ADDONS)DistCrit/criteria.h $(ADDONS)DistCrit/distance.h \
 $(ADDONS)iter.h $(MODULES)interfc.h $(MODULES)memctrl.h \
 $(MODULES)random.h $(ADDONS)cb_util.h $(MODULES)sortcb.h \
 $(ADDONS)DistCrit/distcrit.fac
	gcc $(CFLAGS) -c $< -o $@
gla.o: gla.c gla.h $(MODULES)cb.h $(MODULES)owntypes.h \
 $(ADDONS)DistCrit/criteria.h $(ADDONS)DistCrit/distance.h \
 $(MODULES)interfc.h $(MODULES)memctrl.h $(ADDONS)cb_util.h
	gcc $(CFLAGS) -c $< -o $@
lbgu.o: lbgu.c gla.h $(MODULES)cb.h $(MODULES)owntypes.h \
 $(ADDONS)DistCrit/criteria.h $(ADDONS)DistCrit/distance.h lbgu.h \
 $(MODULES)interfc.h $(MODULES)memctrl.h $(ADDONS)cb_util.h \
 $(MODULES)random.h
	gcc $(CFLAGS) -c $< -o $@
rls.o: rls.c rls.h $(MODULES)cb.h $(MODULES)owntypes.h \
 $(ADDONS)DistCrit/criteria.h $(ADDONS)DistCrit/distance.h $(ADDONS)iter.h \
 $(MODULES)interfc.h $(MODULES)memctrl.h $(MODULES)random.h
	gcc $(CFLAGS) -c $< -o $@
bintree.o: $(MODULES)bintree.c $(MODULES)memctrl.h \
 $(MODULES)bintree.h $(MODULES)interfc.h
	gcc $(CFLAGS) -c $< -o $@
cb.o: $(MODULES)cb.c $(MODULES)memctrl.h $(MODULES)file.h \
 $(MODULES)owntypes.h $(MODULES)interfc.h $(MODULES)cb.h
	gcc $(CFLAGS) -c $< -o $@
dip.o: $(MODULES)dip.c $(MODULES)image.h $(MODULES)file.h \
 $(MODULES)owntypes.h $(MODULES)pgm.h $(MODULES)interfc.h \
 $(MODULES)random.h
	gcc $(CFLAGS) -c $< -o $@
file.o: $(MODULES)file.c $(MODULES)file.h $(MODULES)owntypes.h \
 $(MODULES)interfc.h
	gcc $(CFLAGS) -c $< -o $@
heap.o: $(MODULES)heap.c $(MODULES)heap.h $(MODULES)memctrl.h \
 $(MODULES)owntypes.h
	gcc $(CFLAGS) -c $< -o $@
image.o: $(MODULES)image.c $(MODULES)interfc.h $(MODULES)file.h \
 $(MODULES)owntypes.h $(MODULES)image.h $(MODULES)pgm.h \
 $(MODULES)memctrl.h
	gcc $(CFLAGS) -c $< -o $@
interfc.o: $(MODULES)interfc.c
	gcc $(CFLAGS) -c $< -o $@
iterate.o: $(MODULES)iterate.c $(MODULES)cb.h $(MODULES)owntypes.h \
 $(MODULES)iterate.h
	gcc $(CFLAGS) -c $< -o $@
mqcoder.o: $(MODULES)mqcoder.c $(MODULES)mqcoder.h $(MODULES)file.h \
 $(MODULES)owntypes.h $(MODULES)memctrl.h
	gcc $(CFLAGS) -c $< -o $@
parametr.o: $(MODULES)parametr.c $(MODULES)file.h \
 $(MODULES)owntypes.h $(MODULES)parametr.h $(MODULES)parametr.fac
	gcc $(CFLAGS) -c $< -o $@
pgm.o: $(MODULES)pgm.c $(MODULES)interfc.h $(MODULES)file.h \
 $(MODULES)owntypes.h $(MODULES)pgm.h
	gcc $(CFLAGS) -c $< -o $@
pnn.o: $(MODULES)pnn.c $(MODULES)cb.h $(MODULES)owntypes.h \
 $(MODULES)heap.h $(MODULES)interfc.h $(MODULES)memctrl.h \
 $(MODULES)pnn.h $(MODULES)sa.h $(MODULES)stack.h
	gcc $(CFLAGS) -c $< -o $@
qm.o: $(MODULES)qm.c $(MODULES)qm.h $(MODULES)interfc.h
	gcc $(CFLAGS) -c $< -o $@
qmcoder.o: $(MODULES)qmcoder.c $(MODULES)qmcoder.h $(MODULES)file.h \
 $(MODULES)owntypes.h $(MODULES)interfc.h $(MODULES)memctrl.h
	gcc $(CFLAGS) -c $< -o $@
random.o: $(MODULES)random.c $(MODULES)random.h
	gcc $(CFLAGS) -c $< -o $@
sa.o: $(MODULES)sa.c $(MODULES)random.h $(MODULES)cb.h \
 $(MODULES)owntypes.h $(MODULES)memctrl.h $(MODULES)sa.h
	gcc $(CFLAGS) -c $< -o $@
search.o: $(MODULES)search.c $(MODULES)bintree.h \
 $(MODULES)memctrl.h $(MODULES)file.h $(MODULES)owntypes.h \
 $(MODULES)cb.h $(MODULES)search.h $(MODULES)split.h \
 $(MODULES)sa.h $(MODULES)sortcb.h
	gcc $(CFLAGS) -c $< -o $@
solution.o: $(MODULES)solution.c $(MODULES)memctrl.h \
 $(MODULES)file.h $(MODULES)owntypes.h $(MODULES)interfc.h \
 $(MODULES)cb.h $(MODULES)solution.h
	gcc $(CFLAGS) -c $< -o $@
sort.o: $(MODULES)sort.c $(MODULES)interfc.h $(MODULES)memctrl.h \
 $(MODULES)sort.h $(MODULES)cb.h $(MODULES)owntypes.h
	gcc $(CFLAGS) -c $< -o $@
sortcb.o: $(MODULES)sortcb.c $(MODULES)cb.h $(MODULES)owntypes.h \
 $(MODULES)interfc.h $(MODULES)sort.h $(MODULES)sortcb.h
	gcc $(CFLAGS) -c $< -o $@
split.o: $(MODULES)split.c $(MODULES)bintree.h $(MODULES)cb.h \
 $(MODULES)owntypes.h $(MODULES)memctrl.h $(MODULES)random.h \
 $(MODULES)sa.h $(MODULES)sort.h $(MODULES)split.h
	gcc $(CFLAGS) -c $< -o $@
stack.o: $(MODULES)stack.c $(MODULES)memctrl.h $(MODULES)stack.h
	gcc $(CFLAGS) -c $< -o $@
cb_util.o: $(ADDONS)cb_util.c $(ADDONS)cb_util.h $(MODULES)cb.h \
 $(MODULES)owntypes.h $(MODULES)sortcb.h $(ADDONS)memctrl.h \
 $(MODULES)interfc.h $(ADDONS)textfile.h $(MODULES)random.h \
 $(ADDONS)DistCrit/criteria.h $(ADDONS)DistCrit/distance.h \
 $(MODULES)file.h $(ADDONS)fvec.h
	gcc $(CFLAGS) -c $< -o $@
cbfloat.o: $(ADDONS)cbfloat.c $(ADDONS)memctrl.h $(MODULES)file.h \
 $(MODULES)owntypes.h $(MODULES)interfc.h $(MODULES)cb.h
	gcc $(CFLAGS) -c $< -o $@
criteria.o: $(ADDONS)DistCrit/criteria.c $(ADDONS)DistCrit/criteria.h \
 $(MODULES)cb.h $(MODULES)owntypes.h $(ADDONS)DistCrit/distance.h \
 $(ADDONS)DistCrit/ftest.h $(ADDONS)DistCrit/mdl.h \
 $(ADDONS)DistCrit/stcomplx.h $(ADDONS)DistCrit/xiebenik.h \
 $(MODULES)interfc.h $(ADDONS)memctrl.h
	gcc $(CFLAGS) -c $< -o $@
distance.o: $(ADDONS)DistCrit/distance.c $(ADDONS)DistCrit/distance.h \
 $(MODULES)cb.h $(MODULES)owntypes.h $(MODULES)interfc.h \
 $(ADDONS)DistCrit/stcomplx.h $(ADDONS)memctrl.h
	gcc $(CFLAGS) -c $< -o $@
ftest.o: $(ADDONS)DistCrit/ftest.c $(ADDONS)DistCrit/ftest.h $(MODULES)cb.h \
 $(MODULES)owntypes.h $(ADDONS)DistCrit/distance.h $(ADDONS)memctrl.h \
 $(ADDONS)DistCrit/criteria.h
	gcc $(CFLAGS) -c $< -o $@
fvec.o: $(ADDONS)fvec.c $(ADDONS)fvec.h $(ADDONS)memctrl.h \
 $(MODULES)random.h $(ADDONS)textfile.h
	gcc $(CFLAGS) -c $< -o $@
fvec2.o: $(ADDONS)fvec2.c $(ADDONS)fvec.h $(ADDONS)memctrl.h \
 $(MODULES)random.h $(ADDONS)textfile.h
	gcc $(CFLAGS) -c $< -o $@
iter.o: $(ADDONS)iter.c $(ADDONS)iter.h $(MODULES)owntypes.h \
 $(MODULES)interfc.h $(ADDONS)memctrl.h
	gcc $(CFLAGS) -c $< -o $@
logger.o: $(ADDONS)logger.c
	gcc $(CFLAGS) -c $< -o $@
mdl.o: $(ADDONS)DistCrit/mdl.c $(ADDONS)DistCrit/mdl.h $(MODULES)cb.h \
 $(MODULES)owntypes.h $(ADDONS)DistCrit/distance.h $(ADDONS)memctrl.h
	gcc $(CFLAGS) -c $< -o $@
memctrl.o: $(ADDONS)memctrl.c $(ADDONS)memctrl.h
	gcc $(CFLAGS) -c $< -o $@
sqmatrix.o: $(ADDONS)sqmatrix.c $(ADDONS)sqmatrix.h \
 $(ADDONS)memctrl.h
	gcc $(CFLAGS) -c $< -o $@
stcomplx.o: $(ADDONS)DistCrit/stcomplx.c $(ADDONS)DistCrit/stcomplx.h \
 $(MODULES)cb.h $(MODULES)owntypes.h $(ADDONS)DistCrit/distance.h \
 $(ADDONS)memctrl.h $(MODULES)interfc.h $(ADDONS)DistCrit/criteria.h
	gcc $(CFLAGS) -c $< -o $@
textfile.o: $(ADDONS)textfile.c $(ADDONS)textfile.h $(ADDONS)memctrl.h
	gcc $(CFLAGS) -c $< -o $@
textfile2.o: $(ADDONS)textfile2.c $(ADDONS)textfile2.h $(ADDONS)memctrl.h
	gcc $(CFLAGS) -c $< -o $@
timer.o: $(ADDONS)timer.c $(ADDONS)timer.h
	gcc $(CFLAGS) -c $< -o $@
tracedb.o: $(ADDONS)tracedb.c $(ADDONS)tracedb.h $(ADDONS)fvec.h \
 $(ADDONS)memctrl.h $(MODULES)interfc.h
	gcc $(CFLAGS) -c $< -o $@
xiebenik.o: $(ADDONS)DistCrit/xiebenik.c $(ADDONS)DistCrit/xiebenik.h \
 $(MODULES)cb.h $(MODULES)owntypes.h $(ADDONS)DistCrit/distance.h \
 $(ADDONS)memctrl.h $(ADDONS)DistCrit/criteria.h
	gcc $(CFLAGS) -c $< -o $@
