all: kegg-loader
db := none
utilsdir := ../../utils/src/c
VPATH = $(utilsdir)

PURIFY =
CC = gcc
ifeq ($(pure), 1)
	PURIFY = /home/omaha1/tomlee/bin/Rational/releases/purify.i386_linux2.2003a.06.15/purify
	CC = $(PURIFY) gcc 
endif

## If we don't specify a $(db), make sure both mysql and oracle files are clean'ed
OBJS = wh_oracle.o wh_oracle_util.o wh_mysql.o wh_mysql_util.o

ifeq ($(db),oracle)
        ##
        ## Include Oracle make rules
        ##
        include $(ORACLE_HOME)/precomp/lib/env_precomp.mk
        MODE=oracle
        HDRS = wh_oracle.h wh_oracle_util.h
        OBJS = wh_oracle.o wh_oracle_util.o
        LIBS = $(LDPATHFLAG)$(LIBHOME) $(PROLDLIBS)
        OUTPUT = oracle-kegg-loader
        CFLAGS += -I$(utilsdir)
	CFLAGS +=-I $(ORACLE_HOME)/rdbms/demo -I $(ORACLE_HOME)/rdbms/public
endif
ifeq ($(db), mysql)
        HDRS = wh_mysql.h
        OBJS = wh_mysql.o wh_mysql_util.o
        LIBS = -L/usr/lib -lmysqlclient -lz -lm -lcrypt -lpthread -ldl
        OUTPUT = mysql-kegg-loader
        CFLAGS += -I/usr/include/mysql -I$(utilsdir)
endif


HDRS+=main.h string-util.h widtable.h db.h wh.h
HDRS+=compound-parse.h reaction-parse.h genome-parse.h enzyme-parse.h gene-parse.h
OBJS+=main.o string-util.o db.o wh.o widtable.o \
     genome.tab.o genome-load.o \
     reaction.tab.o reaction-load.o \
     compound.tab.o compound-load.o \
     enzyme.tab.o enzyme-load.o \
     gene.tab.o gene-load.o 

## For gdb 
CFLAGS+= -g


kegg-loader: $(OBJS) $(HDRS)
	$(CC) -O3 -g -o $(OUTPUT) $(OBJS) $(LIBS) ## -lefence
#-	$(CC) -O3 -g -o $(OUTPUT) $(OBJS) -ll $(LIBS) ## -lefence
	rm -f kegg-loader
	ln -s $(OUTPUT) kegg-loader


##
## Compound
##
compound.tab.c:	compound.y lex.compound.c
	bison -v -p compound compound.y

lex.compound.c: compound.l
	flex -Pcompound -s compound.l

compound.tab.o: lex.compound.c $(HDRS)
compound-load.o: compound-parse.h

##
## Reaction
##
reaction.tab.c:	reaction.y lex.reaction.c
	bison -v -p reaction reaction.y

lex.reaction.c: reaction.l
	flex -Preaction -s reaction.l

reaction.tab.o: lex.reaction.c $(HDRS)
reaction-load.o: reaction-parse.h

##
## Enzyme
##
enzyme.tab.c: enzyme.y lex.enzyme.c
	bison -v -p enzyme enzyme.y

lex.enzyme.c: enzyme.l
	flex -Penzyme -s enzyme.l

enzyme.tab.o: lex.enzyme.c $(HDRS)
enzyme-load.o: enzyme-parse.h

##
## Gene
##
gene.tab.c: gene.y lex.gene.c
	bison -v -p gene gene.y

lex.gene.c: gene.l 
	flex -Pgene -s gene.l

gene.tab.o: lex.gene.c $(HDRS)
gene-load.o: gene-parse.h

##
## Genome
##
genome.tab.c: genome.y lex.genome.c
	bison -v -p genome genome.y

lex.genome.c: genome.l
	flex -Pgenome -s genome.l

genome.tab.o: lex.genome.c $(HDRS)
genome-load.o: genome-parse.h

##
## Supporting Rules
##
.PHONY: clean spotless

$(PROGRAM_PURIFY): $(OBJS) $(LIBS)    # purify
	$(PURIFY) $(CC) -o $(PROGRAM_PURIFY)  $(OBJS) $(LIBS)

purify:		$(PROGRAM_PURIFY)

clean:
	rm -f $(utilsdir)/*.lis $(utilsdir)/wh_oracle_util.c $(OBJS) kegg-loader

spotless: clean
	rm -f oracle.c \
	      lex.compound.c lex.reaction.c lex.enzyme.c lex.gene.c lex.genome.c \
	      compound.output reaction.output enzyme.output gene.output genome.output \
              compound.tab.c reaction.tab.c enzyme.tab.c gene.tab.c genome.tab.c \
              compound-load.c reaction-load.c enzyme-load.c gene-load.c genome-load.c

procsource: gene-load.c

ifeq ($(db), oracle)
.SUFFIXES: .pc
.pc.c:
	$(PROC) DEFINE=ORACLE INCLUDE=$(utilsdir) $(PROCFLAGS) iname=$<
.c.o:
	$(CC) -DORACLE $(CFLAGS) -c $<
endif
ifeq ($(db), mysql)
%.c:%.pc
	cp $*.pc $*.c
%.o:%.c
	$(CC) -DDEF_MYSQL $(CFLAGS) -c $<
endif
