# Added corrected ANSI X9.31 file generators4.c -- JEH 2004-Jul-14
# Added CCFlags to assess.c compilation
# Added openssl crypto library for generators4.c
# Added CC statment that included profile flag -- JEH 2004-Aug-15
# Added the ansix931.c and fips186.c files 
# Removed sha.c and des.c, and related files -- JEH 2004-Sep-30
# Made a bit more BSD friendly -- JEH 2004-Sep-30
#CC = /usr/bin/gcc -pg
CC = /usr/bin/gcc
#CC = /usr/pp/bin/gcc
#GCCFLAGS = -c -Wall -pedantic -O3 -pg
#GCCFLAGS = -c -Wall -pedantic -O3 -g
GCCFLAGS = -c -O3
#GCCFLAGS = -c -g -O -Wall -pedantic -fstack-protector -fstack-protector-all
#GCCFLAGS = -g -c -Wall -pedantic -fmudflap
#LINKFLAGS = -lmudflap -fmudflap
#LINKFLAGS = -lefence
#LINKFLAGS = -pg
#ROOTDIR = ..
ROOTDIR = .
INCDIR = $(ROOTDIR)/include
SRCDIR = $(ROOTDIR)/src
OBJDIR = $(ROOTDIR)/obj
GENDIR = $(ROOTDIR)/generators
DEPS = makefile
VPATH = src:include:bin:generators:obj:

ASSESSOBJ = $(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)/generators4.o \
      $(OBJDIR)/cephes.o $(OBJDIR)/mp.o \
      $(OBJDIR)/ansix931.o $(OBJDIR)/fips186.o

TEST931OBJ = $(OBJDIR)/ansix931.o $(OBJDIR)/test931.o
TEST186OBJ = $(OBJDIR)/fips186.o $(OBJDIR)/test186.o
ARCHINFOOBJ = $(OBJDIR)/arch-info.o
ASCIIBIN2BINOBJ = $(OBJDIR)/asciibin2bin.o
HEX2BINOBJ = $(OBJDIR)/hex2bin.o
JAPENOBJ = $(OBJDIR)/cephes.o $(OBJDIR)/fips186.o $(OBJDIR)/japen.o
LITTLE2BIGOBJ = $(OBJDIR)/little2big.o

all:	assess japen arch-info test931 test186 asciibin2bin hex2bin little2big

asciibin2bin: $(ASCIIBIN2BINOBJ)
	$(CC) -o $(ROOTDIR)/$@ $(ASCIIBIN2BINOBJ) $(LINKFLAGS)

hex2bin: $(HEX2BINOBJ)
	$(CC) -o $(ROOTDIR)/$@ $(HEX2BINOBJ) $(LINKFLAGS)

little2big: $(LITTLE2BIGOBJ)
	$(CC) -o $(ROOTDIR)/$@ $(LITTLE2BIGOBJ) $(LINKFLAGS)

arch-info: $(ARCHINFOOBJ)
	$(CC) -o $(ROOTDIR)/$@ $(ARCHINFOOBJ) $(LINKFLAGS)

japen: $(JAPENOBJ)
	$(CC) -o $(ROOTDIR)/$@ $(JAPENOBJ) -lm -lcrypto $(LINKFLAGS)

assess: $(ASSESSOBJ)
	$(CC) -o $(ROOTDIR)/$@ $(ASSESSOBJ) -lm -lcrypto $(LINKFLAGS)

test186: $(TEST186OBJ)
	$(CC) -o $(ROOTDIR)/$@ $(TEST186OBJ) -lcrypto $(LINKFLAGS)

test931: $(TEST931OBJ)
	$(CC) -o $(ROOTDIR)/$@ $(TEST931OBJ) -lcrypto $(LINKFLAGS)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

clean:
	cd $(ROOTDIR); rm -f core asciibin2bin hex2bin little2big japen assess test186 test931 arch-info $(OBJDIR)/*.o; rm -rf experiments/* rm -f testing/RNG/resp/*
