CC = /usr/local/bin/gcc
GCCFLAGS = -c -Wall
ROOTDIR = .
SRCDIR = $(ROOTDIR)/src
OBJDIR = $(ROOTDIR)/obj
GENDIR = $(ROOTDIR)/generators
DEPS = makefile
VPATH = src:include:bin:generators:obj:

OBJ = $(OBJDIR)/assess.o $(OBJDIR)/frequency.o $(OBJDIR)/blockFrequency.o \
      $(OBJDIR)/cusum.o $(OBJDIR)/runs.o $(OBJDIR)/longestRunOfOnes.o \
      $(OBJDIR)/serial.o $(OBJDIR)/rank.o $(OBJDIR)/discreteFourierTransform.o \
      $(OBJDIR)/nonOverlappingTemplateMatchings.o \
      $(OBJDIR)/overlappingTemplateMatchings.o $(OBJDIR)/universal.o \
      $(OBJDIR)/approximateEntropy.o $(OBJDIR)/randomExcursions.o \
      $(OBJDIR)/randomExcursionsVariant.o $(OBJDIR)/linearComplexity.o \
      $(OBJDIR)/lempelZivComplexity.o $(OBJDIR)/dfft.o $(OBJDIR)/lip.o \
      $(OBJDIR)/matrix.o $(OBJDIR)/special-functions.o $(OBJDIR)/utilities1.o \
      $(OBJDIR)/utilities2.o $(OBJDIR)/generators1.o $(OBJDIR)/generators2.o \
      $(OBJDIR)/generators3.o $(OBJDIR)/sha.o $(OBJDIR)/mp.o $(OBJDIR)/cephes.o \
      $(OBJDIR)/des.o 

assess: $(OBJ)
	$(CC) -o $@ $(OBJ) -lm

$(OBJDIR)/assess.o: $(SRCDIR)/assess.c defs.h proto.h special-functions.h \
        utilities1.h utilities2.h mconf.h 
	$(CC) -o $@ -c $(SRCDIR)/assess.c

$(OBJDIR)/frequency.o: $(SRCDIR)/frequency.c defs.h proto.h special-functions.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/frequency.c

$(OBJDIR)/blockFrequency.o: $(SRCDIR)/blockFrequency.c defs.h proto.h \
        special-functions.h mconf.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/blockFrequency.c

$(OBJDIR)/cusum.o: $(SRCDIR)/cusum.c defs.h proto.h special-functions.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/cusum.c

$(OBJDIR)/runs.o: $(SRCDIR)/runs.c defs.h proto.h special-functions.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/runs.c

$(OBJDIR)/longestRunOfOnes.o: $(SRCDIR)/longestRunOfOnes.c defs.h proto.h \
        special-functions.h mconf.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/longestRunOfOnes.c

$(OBJDIR)/rank.o: $(SRCDIR)/rank.c defs.h proto.h special-functions.h matrix.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/rank.c

$(OBJDIR)/discreteFourierTransform.o: $(SRCDIR)/discreteFourierTransform.c \
        defs.h proto.h special-functions.h utilities1.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/discreteFourierTransform.c

$(OBJDIR)/nonOverlappingTemplateMatchings.o: \
        $(SRCDIR)/nonOverlappingTemplateMatchings.c defs.h proto.h \
        special-functions.h utilities1.h mconf.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/nonOverlappingTemplateMatchings.c

$(OBJDIR)/overlappingTemplateMatchings.o: \
        $(SRCDIR)/overlappingTemplateMatchings.c defs.h proto.h \
        special-functions.h utilities2.h mconf.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/overlappingTemplateMatchings.c

$(OBJDIR)/universal.o: $(SRCDIR)/universal.c defs.h proto.h \
	special-functions.h utilities1.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/universal.c

$(OBJDIR)/approximateEntropy.o: $(SRCDIR)/approximateEntropy.c defs.h proto.h \
        special-functions.h utilities1.h mconf.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/approximateEntropy.c

$(OBJDIR)/randomExcursions.o: $(SRCDIR)/randomExcursions.c defs.h proto.h \
        special-functions.h mconf.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/randomExcursions.c

$(OBJDIR)/randomExcursionsVariant.o: $(SRCDIR)/randomExcursionsVariant.c \
        defs.h proto.h special-functions.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/randomExcursionsVariant.c

$(OBJDIR)/serial.o: $(SRCDIR)/serial.c defs.h proto.h special-functions.h \
        mconf.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/serial.c

$(OBJDIR)/lempelZivComplexity.o: $(SRCDIR)/lempelZivComplexity.c defs.h proto.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/lempelZivComplexity.c

$(OBJDIR)/linearComplexity.o: $(SRCDIR)/linearComplexity.c defs.h proto.h \
        special-functions.h mconf.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/linearComplexity.c

$(OBJDIR)/dfft.o: $(SRCDIR)/dfft.c
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/dfft.c

$(OBJDIR)/lip.o: $(SRCDIR)/lip.c lip.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/lip.c

$(OBJDIR)/matrix.o: $(SRCDIR)/matrix.c defs.h proto.h special-functions.h \
        utilities1.h matrix.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/matrix.c

$(OBJDIR)/mp.o: $(SRCDIR)/mp.c config.h mp.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/mp.c

$(OBJDIR)/special-functions.o: $(SRCDIR)/special-functions.c defs.h proto.h \
        special-functions.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/special-functions.c

$(OBJDIR)/cephes.o: $(SRCDIR)/cephes.c mconf.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/cephes.c

$(OBJDIR)/utilities1.o: $(SRCDIR)/utilities1.c defs.h proto.h utilities1.h \
	config.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/utilities1.c

$(OBJDIR)/utilities2.o: $(SRCDIR)/utilities2.c defs.h proto.h utilities1.h \
        utilities2.h config.h
	$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/utilities2.c

$(OBJDIR)/des.o: $(GENDIR)/des.c des.h
	$(CC) -o $@ $(GCCFLAGS) $(GENDIR)/des.c

$(OBJDIR)/sha.o: $(GENDIR)/sha.c config.h sha.h
	$(CC) -o $@ $(GCCFLAGS) $(GENDIR)/sha.c

$(OBJDIR)/generators1.o: $(GENDIR)/generators1.c defs.h proto.h utilities1.h \
        utilities2.h config.h generators1.h
	$(CC) -o $@ $(GCCFLAGS) $(GENDIR)/generators1.c

$(OBJDIR)/generators2.o:  $(GENDIR)/generators2.c defs.h proto.h config.h \
        utilities1.h utilities2.h generators2.h
	$(CC) -o $@ $(GCCFLAGS) $(GENDIR)/generators2.c

$(OBJDIR)/generators3.o: $(GENDIR)/generators3.c $(GENDIR)/sha.c $(GENDIR)/des.c \
        defs.h proto.h utilities1.h utilities2.h generators3.h 
	$(CC) -o $@ $(GCCFLAGS) $(GENDIR)/generators3.c

clean:
	rm -f assess $(OBJDIR)/*.o
