#
#  Standard macros
#
#
#----------------------------------------------------------------------------
# Project specific path defintions.
#----------------------------------------------------------------------------
LIBINCLDIR = ../include
LIBINSTDIR = ../lib

PROJDIR    = .
SRC        = $(PROJDIR)/src
INCL       = $(PROJDIR)/include
OBJ        = $(PROJDIR)/obj
LIB        = $(PROJDIR)/lib
BIN        = $(PROJDIR)/bin
TEST       = $(PROJDIR)/test


#----------------------------------------------------------------------------
# LINCLUDES and LDEFINES are appended to CFLAGS and C++FLAGS
#----------------------------------------------------------------------------
LINCLUDES = -I$(INCL) -I$(LIBINCLDIR)
# LDEFINES is added to compilation command line.
#
LDEFINES  = 

#----------------------------------------------------------------------------
# Include the appropriate compiler/platform definitions ...
#----------------------------------------------------------------------------
include ../etc/Makefile.platform

YACCFLAGS1     = $(YACCFLAGS)   -p cifp_
LEXFLAGS1      = $(LEXFLAGS)    -Pcifp_

YACCFLAGS2     = $(YACCFLAGS)   -p ddl_
LEXFLAGS2      = $(LEXFLAGS)    -Pddl_

YACCFLAGS3     = $(YACCFLAGS)   -p dic_
LEXFLAGS3      = $(LEXFLAGS)    -Pdic_

YACCFLAGS4     = $(YACCFLAGS)   -p ddl_format_
LEXFLAGS4      = $(LEXFLAGS)    -Pddl_format_

YACCFLAGS5     = $(YACCFLAGS)   -p dic_format_
LEXFLAGS5      = $(LEXFLAGS)    -Pdic_format_

LIBS       = $(LIBINSTDIR)/libndbmisc.a \
				 $(LIBINSTDIR)/libbtree.a

SRCFILES =  $(SRC)/ndb_cifparse_parser.y \
				$(SRC)/ndb_cifparse_lex.l \
            $(SRC)/ndb_cifparse_util.C \
            $(SRC)/ndb_cifparse_iolib.C \
            $(SRC)/ndb_cifparse_index.C \
				$(SRC)/ndb_ddl_parser.y \
				$(SRC)/ndb_ddl_lex.l \
				$(SRC)/ndb_ddl_format_parser.y \
				$(SRC)/ndb_ddl_format_lex.l \
				$(SRC)/ndb_dic_parser.y \
				$(SRC)/ndb_dic_lex.l \
				$(SRC)/ndb_dic_format_parser.y \
				$(SRC)/ndb_dic_format_lex.l \
				$(SRC)/ndb_cifparse_main.C \
				$(SRC)/test2.C

ALLTARGETS = $(TARGET1) $(TARGET2)
#
NDBLIB     = $(LIB)/libndbcifparse.a
#
TARGET1    = $(BIN)/cifparse-test
#
TARGET2    = $(BIN)/ddl-test
#
HFILES     = $(INCL)/ndb_cifparse.h 

#
OBJ1       = $(OBJ)/ndb_cifparse_main.o
# 
OBJ2       = $(OBJ)/ddl-test.o
#
OBJS       = $(OBJ)/ndb_cifparse_parser.o \
             $(OBJ)/ndb_cifparse_lex.o \
             $(OBJ)/ndb_cifparse_util.o \
             $(OBJ)/ndb_cifparse_iolib.o \
             $(OBJ)/ndb_cifparse_index.o \
				 $(OBJ)/ndb_ddl_parser.o \
				 $(OBJ)/ndb_ddl_lex.o \
				 $(OBJ)/ndb_ddl_format_parser.o \
				 $(OBJ)/ndb_ddl_format_lex.o \
				 $(OBJ)/ndb_dic_parser.o \
				 $(OBJ)/ndb_dic_lex.o \
				 $(OBJ)/ndb_dic_format_parser.o \
				 $(OBJ)/ndb_dic_format_lex.o 


TESTFILES = $(TEST)/ADH041.cif \
				$(TEST)/ddl-mm \
				$(TEST)/dictionary.dic \
				$(TEST)/Test1.cif \
				$(TEST)/Test2.cif \
				$(TEST)/Test3.cif \
				$(TEST)/Test4.cif \
				$(TEST)/Test5.cif \
				$(TEST)/Test6.cif \
				$(TEST)/1ayl.cif \
				$(TEST)/Test7.cif \
				$(TEST)/Test8.cif

all:	$(NDBLIB) $(TARGET1) $(TARGET2) $(OBJ1)

$(NDBLIB):	$(OBJS) $(HFILES)
		$(AR) $(AR_PUTFLAGS) $(NDBLIB) $(OBJS)
		$(RANLIB) $(NDBLIB)
		@echo $(NDBLIB) " is up to date."

#
#  Making applications
#
$(TARGET1): $(LIBS) $(HFILES) $(NDBLIB) $(OBJ1)
#	$(CCC) $(C++FLAGS) -o $@  $(OBJ1) $(OBJ1) $(NDBLIB) $(LDFLAGS) $(LIBS)
	$(CC) $(CFLAGS) -o $@ $(OBJ1) $(OBJS) $(LIBS) $(NDBLIB) $(LDFLAGS)

#
$(TARGET2): $(LIBS) $(HFILES) $(NDBLIB) $(OBJ2)
#	$(CCC) $(C++FLAGS) -o $@  $(OBJ2) $(NDBLIB) $(LDFLAGS) $(LIBS)
	$(CC) $(CFLAGS) -o $@  $(OBJ2) $(OBJS) $(LIBS) $(NDBLIB) $(LDFLAGS)

# Creating object files
#
$(OBJ)/ndb_cifparse_parser.o : $(SRC)/ndb_cifparse_parser.y
	@sh -c 'cd $(SRC); $(YACC) $(YACCFLAGS1) ./ndb_cifparse_parser.y'
	mv $(SRC)/ndb_cifparse_parser.tab.h $(INCL)
	@if \
	[ "$(EXT)" != "c" ]; \
	then \
	mv $(SRC)/ndb_cifparse_parser.tab.c $(SRC)/ndb_cifparse_parser.tab.$(EXT);\
	fi
	$(CC) $(CFLAGS_NONANSI) -c $(SRC)/ndb_cifparse_parser.tab.$(EXT)  -o $@ 
	rm -f $(SRC)/ndb_cifparse_parser.tab.$(EXT)

$(OBJ)/ndb_cifparse_lex.o :  $(SRC)/ndb_cifparse_lex.l
	$(LEX) $(LEXFLAGS1) -t $(SRC)/ndb_cifparse_lex.l > $(SRC)/ndb_cifparse_lex.$(EXT)
	$(CC) $(CFLAGS_NONANSI) -c $(SRC)/ndb_cifparse_lex.$(EXT) -o $@ 
	rm $(SRC)/ndb_cifparse_lex.$(EXT)


$(OBJ)/ndb_cifparse_util.o  : $(SRC)/ndb_cifparse_util.C
	if \
	[ "$(EXT)" != "C" ]; \
	then \
	mv $(SRC)/ndb_cifparse_util.C $(SRC)/ndb_cifparse_util.$(EXT);\
	$(CC) $(CFLAGS) -c $(SRC)/ndb_cifparse_util.$(EXT) -o $@ ;\
	mv $(SRC)/ndb_cifparse_util.$(EXT) $(SRC)/ndb_cifparse_util.C;\
	else \
	$(CC) $(CFLAGS) -c $(SRC)/ndb_cifparse_util.C -o $@ ;\
	fi

$(OBJ)/ndb_cifparse_iolib.o  : $(SRC)/ndb_cifparse_iolib.C
	if \
	[ "$(EXT)" != "C" ]; \
	then \
	mv $(SRC)/ndb_cifparse_iolib.C $(SRC)/ndb_cifparse_iolib.$(EXT);\
	$(CC) $(CFLAGS) -c $(SRC)/ndb_cifparse_iolib.$(EXT)  -o $@ ;\
	mv $(SRC)/ndb_cifparse_iolib.$(EXT) $(SRC)/ndb_cifparse_iolib.C;\
	else \
	$(CC) $(CFLAGS) -c $(SRC)/ndb_cifparse_iolib.C  -o $@ ;\
	fi

$(OBJ)/ndb_cifparse_index.o  : $(SRC)/ndb_cifparse_index.C
	if \
	[ "$(EXT)" != "C" ]; \
	then \
	mv $(SRC)/ndb_cifparse_index.C $(SRC)/ndb_cifparse_index.$(EXT);\
	$(CC) $(CFLAGS) -c $(SRC)/ndb_cifparse_index.$(EXT)  -o $@ ;\
	mv $(SRC)/ndb_cifparse_index.$(EXT) $(SRC)/ndb_cifparse_index.C;\
	else \
	$(CC) $(CFLAGS) -c $(SRC)/ndb_cifparse_index.C  -o $@ ;\
	fi

$(OBJ)/ndb_cifparse_main.o : $(SRC)/ndb_cifparse_main.C
	if \
	[ "$(EXT)" != "C" ]; \
	then \
	mv $(SRC)/ndb_cifparse_main.C $(SRC)/ndb_cifparse_main.$(EXT);\
	$(CC) $(CFLAGS) -c $(SRC)/ndb_cifparse_main.$(EXT) -o $@;\
	mv $(SRC)/ndb_cifparse_main.$(EXT) $(SRC)/ndb_cifparse_main.C;\
	else \
	$(CC) $(CFLAGS) -c $(SRC)/ndb_cifparse_main.C -o $@;\
	fi

$(OBJ)/ddl-test.o : $(SRC)/test2.C
	if \
	[ "$(EXT)" != "C" ]; \
	then \
	mv $(SRC)/test2.C $(SRC)/test2.$(EXT);\
	$(CC) $(CFLAGS) -c $(SRC)/test2.$(EXT) -o $@ ;\
	mv $(SRC)/test2.$(EXT) $(SRC)/test2.C;\
	else \
	$(CC) $(CFLAGS) -c $(SRC)/test2.C -o $@;\
	fi

$(OBJ)/ndb_ddl_parser.o : $(SRC)/ndb_ddl_parser.y
	@sh -c 'cd $(SRC); $(YACC) $(YACCFLAGS2) ./ndb_ddl_parser.y'
	mv $(SRC)/ndb_ddl_parser.tab.h $(INCL)
	@if \
	[ "$(EXT)" != "c" ]; \
	then \
	mv  $(SRC)/ndb_ddl_parser.tab.c  $(SRC)/ndb_ddl_parser.tab.$(EXT);\
	fi
	$(CC) $(CFLAGS_NONANSI) -c $(SRC)/ndb_ddl_parser.tab.$(EXT)  -o $@ 
	rm -f $(SRC)/ndb_ddl_parser.tab.$(EXT)

$(OBJ)/ndb_ddl_lex.o :  $(SRC)/ndb_ddl_lex.l
	$(LEX) $(LEXFLAGS2) -t $(SRC)/ndb_ddl_lex.l > $(SRC)/ndb_ddl_lex.$(EXT)
	$(CC) $(CFLAGS_NONANSI) -c $(SRC)/ndb_ddl_lex.$(EXT) -o $@ 
	rm $(SRC)/ndb_ddl_lex.$(EXT)

$(OBJ)/ndb_ddl_format_parser.o : $(SRC)/ndb_ddl_format_parser.y
	@sh -c 'cd $(SRC); $(YACC) $(YACCFLAGS4) ./ndb_ddl_format_parser.y'
	mv $(SRC)/ndb_ddl_format_parser.tab.h $(INCL)
	@if \
	[ "$(EXT)" != "c" ]; \
	then \
	mv $(SRC)/ndb_ddl_format_parser.tab.c $(SRC)/ndb_ddl_format_parser.tab.$(EXT);\
	fi
	$(CC) $(CFLAGS_NONANSI) -c $(SRC)/ndb_ddl_format_parser.tab.$(EXT)  -o $@
	rm -f $(SRC)/ndb_ddl_format_parser.tab.$(EXT)

$(OBJ)/ndb_ddl_format_lex.o :  $(SRC)/ndb_ddl_format_lex.l
	$(LEX) $(LEXFLAGS4) -t $(SRC)/ndb_ddl_format_lex.l > $(SRC)/ndb_ddl_format_lex.$(EXT)
	$(CC) $(CFLAGS_NONANSI) -c $(SRC)/ndb_ddl_format_lex.$(EXT) -o $@ 
	rm $(SRC)/ndb_ddl_format_lex.$(EXT)

$(OBJ)/ndb_dic_parser.o : $(SRC)/ndb_dic_parser.y
	@sh -c 'cd $(SRC); $(YACC) $(YACCFLAGS3) ./ndb_dic_parser.y'
	mv $(SRC)/ndb_dic_parser.tab.h $(INCL)
	@if \
	[ "$(EXT)" != "c" ]; \
	then \
	mv $(SRC)/ndb_dic_parser.tab.c  $(SRC)/ndb_dic_parser.tab.$(EXT);\
	fi
	$(CC) $(CFLAGS_NONANSI) -c $(SRC)/ndb_dic_parser.tab.$(EXT)  -o $@ 
	rm -f $(SRC)/ndb_dic_parser.tab.$(EXT)

$(OBJ)/ndb_dic_lex.o :  $(SRC)/ndb_dic_lex.l
	$(LEX) $(LEXFLAGS3) -t $(SRC)/ndb_dic_lex.l > $(SRC)/ndb_dic_lex.$(EXT)
	$(CC) $(CFLAGS_NONANSI) -c $(SRC)/ndb_dic_lex.$(EXT) -o $@ 
	rm $(SRC)/ndb_dic_lex.$(EXT)

$(OBJ)/ndb_dic_format_parser.o : $(SRC)/ndb_dic_format_parser.y
	@sh -c 'cd $(SRC); $(YACC) $(YACCFLAGS5) ./ndb_dic_format_parser.y'
	mv $(SRC)/ndb_dic_format_parser.tab.h $(INCL)
	@if \
	[ "$(EXT)" != "c" ]; \
	then \
	mv $(SRC)/ndb_dic_format_parser.tab.c $(SRC)/ndb_dic_format_parser.tab.$(EXT);\
	fi
	$(CC) $(CFLAGS_NONANSI) -c $(SRC)/ndb_dic_format_parser.tab.$(EXT)  -o $@
	rm -f $(SRC)/ndb_dic_format_parser.tab.$(EXT)

$(OBJ)/ndb_dic_format_lex.o :  $(SRC)/ndb_dic_format_lex.l
	$(LEX) $(LEXFLAGS5) -t $(SRC)/ndb_dic_format_lex.l > $(SRC)/ndb_dic_format_lex.$(EXT)
	$(CC) $(CFLAGS_NONANSI) -c $(SRC)/ndb_dic_format_lex.$(EXT) -o $@ 
	rm $(SRC)/ndb_dic_format_lex.$(EXT)




install: $(NDBLIB) $(TARGET1)
	$(INSTALL) $(INSTALLOPTS) $(HFILES) $(LIBINCLDIR)/.
	$(INSTALL) $(INSTALLOPTS) $(NDBLIB) $(LIBINSTDIR)/.

test:	$(TARGET1) tests test2

tests:
	$(TARGET1) -f ./test/Test1.cif  -o  ./test/test1.ocif -t 8
	$(TARGET1) -f ./test/Test2.cif    -f2 ./test/Test2.cif  -t 9  
	$(TARGET1) -f ./test/Test3.cif    -f2 ./test/Test1.cif  -t 9
	$(TARGET1) -f ./test/Test4.cif  -o  ./test/test4.ocif -t 1   
	$(TARGET1) -f ./test/Test5.cif  -o  ./test/test5.ocif -t 1   
	$(TARGET1) -f ./test/Test6.cif  -o  ./test/test6.ocif -t 1   
	cp ./test/test1.ocif  ./test/Test8.cif
	$(TARGET1) -f ./test/Test8.cif  -o  ./test/test2.ocif -t 1 
	$(TARGET1) -f ./test/ADH041.cif -o  ./test/ADH041.ocif -t 1 
	$(TARGET1) -f ./test/ADH041.cif  -t 7 -db ADH041 -compid A  
	$(TARGET1) -o ./test/t2.out -t 2 
	$(TARGET1) -o ./test/t3.out -t 3       > ./test/t3.stdout
	$(TARGET1) -o ./test/t4.out -t 4
	$(TARGET1) -f ./test/ADH041.cif  -t 5  > ./test/ADH041.stdout
	$(TARGET1) -f ./test/1ayl.cif    -o ./test/1ayl.ocif    -t 1  
	$(TARGET1) -f ./test/1ayl.cif    -o ./test/1ayl.ocif-1  -t 6 

clean :
	@rm -f core $(OBJ)/*.o ./test/*.oci* ./test/*.out  ./test/*.stdout  cifparse.log compare.log ./test/*.odic
	@rm -f $(ALLTARGETS)
	@rm -f $(NDBLIB)
	@rm -f include/*.tab.h
	@cd ..; rm -f $(HFILES)
	@cd ..; rm -f $(NDBLIB)

test2: $(TARGET2)
	$(TARGET2) test/dictionary.dic
##

export:
	mkdir -p $(EXPORT_DIR)
	@cd $(EXPORT_DIR); mkdir -p $(INCL)
	$(EXPORT) $(EXPORT_LIST) $(HFILES) $(EXPORT_DIR)/$(INCL)
	@cd $(EXPORT_DIR); mkdir -p $(SRC)
	$(EXPORT) $(EXPORT_LIST) $(SRCFILES) $(EXPORT_DIR)/$(SRC)
	@cd $(EXPORT_DIR); mkdir -p $(BIN)
	@cd $(EXPORT_DIR); mkdir -p $(LIB)
	@cd $(EXPORT_DIR); mkdir -p $(OBJ)
	@cd $(EXPORT_DIR); mkdir -p $(TEST)
	@cp $(TESTFILES) $(EXPORT_DIR)/$(TEST)
	@cp Makefile $(EXPORT_DIR)
