## To Build mysql-ncbi-taxonomy-loader: run "make clean; make -all db=mysql"
## To Build oracle-ncbi-taxonomy-loader: run "make clean; make -all db=oracle"

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

## 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

##
## Include Oracle make rules
##
ifeq ($(db), oracle)
	include $(ORACLE_HOME)/precomp/lib/env_precomp.mk
	MODE=oracle
	##!! TODO fix when gcc is available on cilantro
	HDRS = wh_oracle.h wh_oracle_util.h
	OBJS = wh_oracle.o wh_oracle_util.o
	LIBS = $(LDPATHFLAG)$(LIBHOME) $(PROLDLIBS)
        OUTPUT = oracle-ncbi-taxonomy-loader
	CFLAGS += -I$(utilsdir)
endif
ifeq ($(db), mysql)
	HDRS = wh_mysql.h wh_mysql_util.h
	OBJS = wh_mysql.o wh_mysql_util.o
        LIBS = -L/usr/lib -lmysqlclient -lz -lm -lcrypt -lpthread -ldl
        OUTPUT = mysql-ncbi-taxonomy-loader
	CFLAGS += -I/usr/include/mysql -I$(utilsdir)
endif



CC=gcc
HDRS += main.h db.h wh.h 
OBJS += string-util.o widtable.o main.o db.o wh.o\
	division.tab.o division-load.o \
	gencode.tab.o gencode-load.o\
	names.tab.o names-load.o \
	nodes.tab.o nodes-load.o 


## For gdb 
## CFLAGS+= -g

ncbi-taxonomy-loader: $(OBJS) $(HDRS)
	$(CC) -O3 -o $(OUTPUT) $(OBJS) -ll $(LIBS) ## -lefence

##
## division
##
division.tab.c:    division.y lex.division.c
	bison -v -p division division.y

lex.division.c: division.l
	flex -Pdivision -s division.l

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

##
## gencode 
##
gencode.tab.c:    gencode.y lex.gencode.c
	bison -v -p gencode gencode.y

lex.gencode.c: gencode.l
	flex -Pgencode -s gencode.l

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

##
## names
##
  names.tab.c:    names.y lex.names.c
	bison -v -p names names.y

  lex.names.c: names.l
	flex -Pnames -s names.l

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

##
## nodes
##
nodes.tab.c:    nodes.y lex.nodes.c
	bison -v -p nodes nodes.y

lex.nodes.c: nodes.l
	flex -Pnodes -s nodes.l

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

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

clean:
	rm -f $(utilsdir)/*.lis $(utilsdir)/wh_oracle_util.c $(OBJS) wh_oracle.o wh_oracle_util.o wh_mysql.o wh_mysql_util.o division-load.c gencode-load.c names-load.c nodes-load.c lex.*.c *.tab.c

##
## Compilation rules for esql programs
##
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

