## To Build mysql-cmr-loader: run "make clean; make db=mysql"
## To Build oracle-cmr-loader: run "make clean; make db=oracle"
## If a
##    cc: wh_oracle_util.c: No such file or directory
## error occurs, simply rerun the second make.
##
## TODO: test 'make clean' so it doesn't rm both executables

# Default target. Note: must precede Oracle includes
all: cmr-loader

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

db := none 
CC= $(PURIFY) gcc
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 DBMS-specific make rules, libraries, and source files
##
ifeq ($(db), oracle)
	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-cmr-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-cmr-loader
        CFLAGS += -I/usr/include/mysql -I$(utilsdir)
endif

HDRS += string-util.h widtable.h main.h db.h wh.h
OBJS += string-util.o widtable.o main.o db.o wh.o
OBJS += db_data.tab.o db_data-load.o \
 	taxon.tab.o taxon-load.o \
 	asmbl_data.tab.o asmbl_data-load.o \
 	assembly.tab.o assembly-load.o \
 	feat_link.tab.o feat_link-load.o \
 	ident.tab.o ident-load.o \
 	nt_ident.tab.o nt_ident-load.o \
 	new_ident.tab.o new_ident-load.o \
 	asm_feature.tab.o asm_feature-load.o \
 	accession.tab.o accession-load.o \
 	all_vs_all.tab.o all_vs_all-load.o \
 	orf_attribute.tab.o orf_attribute-load.o

## For gdb 
CFLAGS += -g

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

fake:
	$(MAKE) clean 
	$(MAKE) all 

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

lex.db_data.c: db_data.l
	flex -Pdb_data -s db_data.l

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


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

lex.taxon.c: taxon.l
	flex -Ptaxon -s taxon.l

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


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

lex.asmbl_data.c: asmbl_data.l
	flex -Pasmbl_data -s asmbl_data.l

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


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

lex.assembly.c: assembly.l
	flex -Passembly -s assembly.l

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


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

lex.feat_link.c: feat_link.l
	flex -Pfeat_link -s feat_link.l

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


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

lex.ident.c: ident.l
	flex -Pident -s ident.l

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


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

lex.nt_ident.c: nt_ident.l
	flex -Pnt_ident -s nt_ident.l

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


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

lex.new_ident.c: new_ident.l
	flex -Pnew_ident -s new_ident.l

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


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

lex.asm_feature.c: asm_feature.l
	flex -Pasm_feature -s asm_feature.l

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


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

lex.all_vs_all.c: all_vs_all.l
	flex -Pall_vs_all -s all_vs_all.l

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


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

lex.orf_attribute.c: orf_attribute.l
	flex -Porf_attribute -s orf_attribute.l

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


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

lex.accession.c: accession.l
	flex -Paccession -s accession.l

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


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

clean:
	rm -f $(utilsdir)/*.lis $(utilsdir)/wh_oracle_util.c $(OBJS)  $(OUTPUT)  db_oracle.o  wh_mysql.o wh_mysql_util.o taxon-load.c ident-load.c new_ident-load.c nt_ident-load.c asmbl_data-load.c assembly-load.c asm_feature-load.c all_vs_all-load.c orf_attribute-load.c accession-load.c lex.*.c *.tab.c

immaculate:
	$(MAKE) clean
	rm -f  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
