#        Build the CIFLIB class library, the C API function library,  
#        and some test programs...
#            
#----------------------------------------------------------------------------
# Project specific path defintions.
#----------------------------------------------------------------------------
INSTALLDIR   = ../lib
LIBINCLDIR   = ../include
PROJDIR    = .
SRC        = $(PROJDIR)/src
INCL       = $(PROJDIR)/include

PLATDIR    = $(PROJDIR)
OBJ        = $(PLATDIR)/obj
BIN        = $(PLATDIR)/bin
LIB        = $(PLATDIR)/lib
TEST       = $(PLATDIR)/test

#----------------------------------------------------------------------------
# LINCLUDES and LDEFINES are appended to CFLAGS and C++FLAGS
#----------------------------------------------------------------------------
LINCLUDES = -I$(INCL) -I$(LIBINCLDIR)
#
# -DNO_RANGE_CHECK inhibits time consuming range checking within the 
#                  template array methods.
#
LDEFINES  = -DNO_RANGE_CHECK
#----------------------------------------------------------------------------
# Include the appropriate compiler/platform definitions ...
#----------------------------------------------------------------------------
include ../etc/Makefile.platform

CIFLIB_COMMONLIB =  $(INSTALLDIR)/libcifstr.a $(INSTALLDIR)/libregex.a

#----------------------------------------------------------------------------
#  Target definitions.
#----------------------------------------------------------------------------

TARGET1    =  $(BIN)/ciflib-test-1
CIFLIBAPI  =  $(LIB)/libcif.a
CIFLIB     =  $(LIB)/libCif.a
ALLTARGETS =  $(ALLOBJ) $(CIFLIB) $(CIFLIBAPI) $(TARGET1)


LIBHFILES = $(INCL)/ciflib.h \
	    $(INCL)/CifDefs.h \
	    $(INCL)/CifErrorCodes.h \
	    $(INCL)/ciflib_typedefs.h 

APIHFILES = $(INCL)/cif_template.h \
            $(INCL)/ciflib_structure.h 

HFILES =   $(INCL)/FileIo.h \
           $(INCL)/CifAlias.h \
           $(INCL)/CifNameAttributes.h \
           $(INCL)/CifDefs.h \
           $(INCL)/CifErrorCodes.h \
           $(INCL)/CifFileIo.h \
           $(INCL)/CifJoin.h \
           $(INCL)/CifCategoryIndex.h \
           $(INCL)/CifTree.h \
           $(INCL)/CifAnon.h \
           $(INCL)/CifItemValue.h \
           $(INCL)/ciflib_interface.h \
           $(INCL)/CifDataItem.h \
           $(INCL)/CifCategory.h \
           $(INCL)/CifDataBlock.h \
           $(INCL)/CifFile.h

SRCFILES =    $(SRC)/FileIo.C \
	   $(SRC)/CifFileIo.C \
	   $(SRC)/CifTree.C \
	   $(SRC)/CifJoin.C \
	   $(SRC)/CifAnon.C \
	   $(SRC)/CifNameAttributes.C \
	   $(SRC)/CifItemValue.C \
	   $(SRC)/CifDataItem.C \
	   $(SRC)/CifCategory.C \
	   $(SRC)/CifDataBlock.C \
	   $(SRC)/CifFile.C

SRCAPI =  $(SRC)/ciflib_interface.C \
	   $(SRC)/ciflib_structure.C 

TARGETSRC = $(SRC)/ciflib-test-1.C

OBJECT1  = $(OBJ)/ciflib-test-1.o

OBJS=      $(OBJ)/FileIo.o \
	   $(OBJ)/CifFileIo.o \
	   $(OBJ)/CifTree.o \
	   $(OBJ)/CifJoin.o \
	   $(OBJ)/CifAnon.o \
	   $(OBJ)/CifNameAttributes.o \
	   $(OBJ)/CifItemValue.o \
	   $(OBJ)/CifDataItem.o \
	   $(OBJ)/CifCategory.o \
	   $(OBJ)/CifDataBlock.o \
	   $(OBJ)/CifFile.o 

APIOBJS =  $(OBJ)/ciflib_interface.o \
	   $(OBJ)/ciflib_structure.o 

ALLOBJS  = $(OBJS) $(APIOBJS)


TESTFILES = $(TEST)/BDL001.cif \
				$(TEST)/ddl_core \
				$(TEST)/cif_mm.dic


#----------------------------------------------------------------------------
#  Build libraries and test programs.
#----------------------------------------------------------------------------
all: $(ALLTARGETS)

$(TARGET1): $(OBJECT1) $(CIFLIB) $(CIFLIB_COMMONLIB)
	$(CCC) $(C++FLAGS) -o $@  $(OBJECT1) $(CIFLIB) $(CIFLIB_COMMONLIB) $(LDFLAGS)

# $(CIFLIBAPI): $(ALLOBJS) $(HFILES) $(APIHFILES) $(LIBHFILES) $(CIFLIB_COMMONLIB) $(CIFLIBAPI)($(ALLOBJS))
# $(CIFLIB): $(OBJS) $(HFILES) $(CIFLIB_COMMONLIB) $(CIFLIB)($(OBJS))


$(CIFLIBAPI):	$(ALLOBJS)
		$(AR) $(AR_PUTFLAGS) $(CIFLIBAPI) $(ALLOBJS)
		$(RANLIB) $(CIFLIBAPI)
		@echo $(CIFLIBAPI) " is up to date."

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

#
#      making ciflib object files
#

$(OBJ)/ciflib-test-1.o: $(SRC)/ciflib-test-1.C
	$(CCC) $(C++FLAGS)  -c $(SRC)/ciflib-test-1.C -o $@

$(OBJ)/FileIo.o: $(SRC)/FileIo.C
	$(CCC) $(C++FLAGS) -c $(SRC)/FileIo.C -o $@

$(OBJ)/CifFileIo.o: $(SRC)/CifFileIo.C
	$(CCC) $(C++FLAGS) -c $(SRC)/CifFileIo.C -o $@

$(OBJ)/CifTree.o: $(SRC)/CifTree.C
	$(CCC) $(C++FLAGS) -c $(SRC)/CifTree.C -o $@

$(OBJ)/CifJoin.o: $(SRC)/CifJoin.C
	$(CCC) $(C++FLAGS) -c $(SRC)/CifJoin.C -o $@

$(OBJ)/CifAnon.o: $(SRC)/CifAnon.C
	$(CCC) $(C++FLAGS) -c $(SRC)/CifAnon.C -o $@

$(OBJ)/CifNameAttributes.o: $(SRC)/CifNameAttributes.C
	$(CCC) $(C++FLAGS) -c $(SRC)/CifNameAttributes.C -o $@

$(OBJ)/CifItemValue.o: $(SRC)/CifItemValue.C
	$(CCC) $(C++FLAGS) -c $(SRC)/CifItemValue.C -o $@

$(OBJ)/CifDataItem.o: $(SRC)/CifDataItem.C
	$(CCC) $(C++FLAGS) -c $(SRC)/CifDataItem.C -o $@

$(OBJ)/CifCategory.o: $(SRC)/CifCategory.C
	$(CCC) $(C++FLAGS) -c $(SRC)/CifCategory.C -o $@

$(OBJ)/CifDataBlock.o: $(SRC)/CifDataBlock.C
	$(CCC) $(C++FLAGS) -c $(SRC)/CifDataBlock.C -o $@

$(OBJ)/CifFile.o: $(SRC)/CifFile.C
	$(CCC) $(C++FLAGS) -c $(SRC)/CifFile.C -o $@

$(OBJ)/ciflib_interface.o: $(SRC)/ciflib_interface.C
	$(CCC) $(C++FLAGS) -c $(SRC)/ciflib_interface.C -o $@

$(OBJ)/ciflib_structure.o: $(SRC)/ciflib_structure.C
	$(CCC) $(C++FLAGS) -c $(SRC)/ciflib_structure.C -o $@

install: $(ALLTARGETS)
	$(INSTALL)  $(INSTALLOPTS) $(HFILES)      $(LIBINCLDIR)/.
	$(INSTALL)  $(INSTALLOPTS) $(LIBHFILES)   $(LIBINCLDIR)/.
	$(INSTALL)  $(INSTALLOPTS) $(CIFLIB)      $(INSTALLDIR)/.
	$(INSTALL)  $(INSTALLOPTS) $(CIFLIBAPI)   $(INSTALLDIR)/.

test:	all $(CIFLIB) $(TARGET1)
	@echo "Beginning CIFLIB test program --- Please be patient!\n"
	touch $(TEST)/ddl_core
	touch $(TEST)/cif_mm.dic
	touch $(TEST)/BDL001.cif
	$(TARGET1) -v  -ddl $(TEST)/ddl_core -dict $(TEST)/cif_mm.dic -f $(TEST)/BDL001.cif  > $(TEST)/test.out

clean:
	@rm -f core $(ALLOBJS) $(OBJECT1) $(TEST)/test.out 
	@rm -rf $(OBJ)/ii_files
	@rm -f $(ALLTARGETS)
	@rm -f $(CIFLIB) $(CIFLIBAPI)
	@cd ..; rm -f $(CIFLIB) $(CIFLIBAPI)
	@cd ..; rm -f $(HFILES) $(LIBHFILES)
	@rm -rf Template.DB

spotless:  clean

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

# DO NOT DELETE

CifCategory.o: ../include/CifCategory.h ../include/FileIo.h
CifCategory.o: /usr/include/sys/types.h /usr/include/standards.h
CifCategory.o: /usr/include/sgidefs.h /usr/include/sys/stat.h
CifCategory.o: /usr/include/malloc.h /usr/include/stdio.h
CifCategory.o: /usr/include/stdlib.h /usr/include/string.h
CifCategory.o: /usr/include/ctype.h /usr/include/stdarg.h
CifCategory.o: /usr/include/unistd.h ../include/cif_defs.h
CifCategory.o: ../include/cif_error.h ../include/ciflib_typedefs.h
CifCategory.o: ../include/CifAnon.h ../include/CifJoin.h
CifCategory.o: ../include/CifItemValue.h ../include/CifCategoryIndex.h
CifCategory.o: ../include/CifTree.h ../include/CifFileIo.h
CifCategory.o: ../include/CifDataItem.h ../include/CifNameAttributes.h
CifCategory.o: ../include/CifAlias.h ../include/CifDataBlock.h
CifDataBlock.o: ../include/CifDataBlock.h /usr/include/sys/types.h
CifDataBlock.o: /usr/include/standards.h /usr/include/sgidefs.h
CifDataBlock.o: /usr/include/sys/stat.h /usr/include/stdio.h
CifDataBlock.o: /usr/include/stdlib.h /usr/include/malloc.h
CifDataBlock.o: ../include/cif_defs.h ../include/cif_error.h
CifDataBlock.o: ../include/ciflib_typedefs.h ../include/CifFileIo.h
CifDataBlock.o: /usr/include/stdarg.h /usr/include/string.h
CifDataBlock.o: /usr/include/ctype.h ../include/FileIo.h
CifDataBlock.o: /usr/include/unistd.h ../include/CifAnon.h
CifDataBlock.o: ../include/CifJoin.h ../include/CifItemValue.h
CifDataBlock.o: ../include/CifCategoryIndex.h ../include/CifTree.h
CifDataBlock.o: ../include/CifAlias.h ../include/CifNameAttributes.h
CifDataBlock.o: ../include/CifDataItem.h ../include/CifCategory.h
CifDataBlock.o: ../include/cif_extern_global.h ../include/ciflib_structure.h
CifFile.o: ../include/CifFile.h /usr/include/stdio.h
CifFile.o: /usr/include/standards.h /usr/include/sgidefs.h
CifFile.o: /usr/include/stdlib.h /usr/include/sys/types.h
CifFile.o: /usr/include/sys/stat.h /usr/include/sys/dir.h
CifFile.o: ../include/cif_defs.h ../include/cif_error.h
CifFile.o: ../include/ciflib_typedefs.h ../include/CifAnon.h
CifFile.o: ../include/CifFileIo.h /usr/include/stdarg.h
CifFile.o: /usr/include/malloc.h /usr/include/string.h /usr/include/ctype.h
CifFile.o: ../include/FileIo.h /usr/include/unistd.h ../include/CifItemValue.h
CifFile.o: ../include/CifDataItem.h ../include/CifCategoryIndex.h
CifFile.o: ../include/CifNameAttributes.h ../include/CifAlias.h
CifFile.o: ../include/CifDataBlock.h ../include/CifJoin.h
CifFile.o: ../include/CifTree.h ../include/CifCategory.h
CifFile.o: ../include/cif_extern_global.h ../include/cif_error_global.h
CifFileIo.o: ../include/CifFileIo.h /usr/include/sys/types.h
CifFileIo.o: /usr/include/standards.h /usr/include/sgidefs.h
CifFileIo.o: /usr/include/sys/stat.h /usr/include/stdio.h
CifFileIo.o: /usr/include/stdlib.h /usr/include/stdarg.h
CifFileIo.o: /usr/include/malloc.h /usr/include/string.h
CifFileIo.o: /usr/include/ctype.h ../include/FileIo.h /usr/include/unistd.h
CifFileIo.o: ../include/cif_defs.h ../include/cif_error.h
CifFileIo.o: ../include/ciflib_typedefs.h ../include/CifAnon.h
CifFileIo.o: ../include/CifCategory.h ../include/CifJoin.h
CifFileIo.o: ../include/CifItemValue.h ../include/CifCategoryIndex.h
CifFileIo.o: ../include/CifTree.h ../include/CifDataItem.h
CifFileIo.o: ../include/CifNameAttributes.h ../include/CifAlias.h
CifFileIo.o: ../include/CifDataBlock.h
CifDataItem.o: ../include/CifDataItem.h /usr/include/stdio.h
CifDataItem.o: /usr/include/standards.h /usr/include/sgidefs.h
CifDataItem.o: ../include/FileIo.h /usr/include/sys/types.h
CifDataItem.o: /usr/include/sys/stat.h /usr/include/malloc.h
CifDataItem.o: /usr/include/stdlib.h /usr/include/string.h /usr/include/ctype.h
CifDataItem.o: /usr/include/stdarg.h /usr/include/unistd.h ../include/cif_defs.h
CifDataItem.o: ../include/cif_error.h ../include/ciflib_typedefs.h
CifDataItem.o: ../include/CifFileIo.h ../include/CifAnon.h
CifDataItem.o: ../include/CifCategoryIndex.h ../include/CifNameAttributes.h
CifDataItem.o: ../include/CifItemValue.h ../include/CifAlias.h
CifJoin.o: ../include/cif_error.h ../include/ciflib_typedefs.h
CifJoin.o: ../include/cif_defs.h ../include/CifJoin.h
CifJoin.o: ../include/CifItemValue.h /usr/include/stdio.h
CifJoin.o: /usr/include/standards.h /usr/include/sgidefs.h
CifJoin.o: /usr/include/stdlib.h /usr/include/ctype.h
CifJoin.o: ../include/CifCategoryIndex.h ../include/CifTree.h
CifJoin.o: ../include/CifCategory.h ../include/FileIo.h
CifJoin.o: /usr/include/sys/types.h /usr/include/sys/stat.h
CifJoin.o: /usr/include/malloc.h /usr/include/string.h /usr/include/stdarg.h
CifJoin.o: /usr/include/unistd.h ../include/CifAnon.h
CifJoin.o: ../include/CifFileIo.h ../include/CifDataItem.h
CifJoin.o: ../include/CifNameAttributes.h ../include/CifAlias.h
CifNameAttributes.o: ../include/CifNameAttributes.h /usr/include/stdlib.h
CifNameAttributes.o: /usr/include/standards.h /usr/include/sgidefs.h
CifNameAttributes.o: ../include/cif_defs.h ../include/CifItemValue.h
CifNameAttributes.o: /usr/include/stdio.h /usr/include/ctype.h
CifNameAttributes.o: ../include/cif_error.h ../include/ciflib_typedefs.h
CifNameAttributes.o: ../include/CifAlias.h
CifTree.o: ../include/CifCategory.h ../include/FileIo.h
CifTree.o: /usr/include/sys/types.h /usr/include/standards.h
CifTree.o: /usr/include/sgidefs.h /usr/include/sys/stat.h
CifTree.o: /usr/include/malloc.h /usr/include/stdio.h /usr/include/stdlib.h
CifTree.o: /usr/include/string.h /usr/include/ctype.h /usr/include/stdarg.h
CifTree.o: /usr/include/unistd.h ../include/cif_defs.h
CifTree.o: ../include/cif_error.h ../include/ciflib_typedefs.h
CifTree.o: ../include/CifAnon.h ../include/CifJoin.h
CifTree.o: ../include/CifItemValue.h ../include/CifCategoryIndex.h
CifTree.o: ../include/CifTree.h ../include/CifFileIo.h
CifTree.o: ../include/CifDataItem.h ../include/CifNameAttributes.h
CifTree.o: ../include/CifAlias.h ../include/CifDataBlock.h
CifAnon.o: /usr/include/stdlib.h /usr/include/standards.h
CifAnon.o: /usr/include/sgidefs.h ../include/CifAnon.h
CifAnon.o: ../include/cif_error.h ../include/ciflib_typedefs.h
CifAnon.o: ../include/cif_defs.h ../include/ciflib_interface.h
CifAnon.o: ../include/ciflib.h ../include/cif_extern_global.h
CifItemValue.o: ../include/CifItemValue.h /usr/include/stdio.h
CifItemValue.o: /usr/include/standards.h /usr/include/sgidefs.h
CifItemValue.o: /usr/include/stdlib.h /usr/include/ctype.h ../include/cif_defs.h
CifItemValue.o: ../include/cif_error.h ../include/ciflib_typedefs.h
CifItemValue.o: ../include/ciflib.h ../include/cif_extern_global.h
ciflib-test-1.o: /usr/include/stdlib.h /usr/include/standards.h
ciflib-test-1.o: /usr/include/sgidefs.h ../include/CifItemValue.h
ciflib-test-1.o: /usr/include/stdio.h /usr/include/ctype.h
ciflib-test-1.o: ../include/cif_defs.h ../include/cif_error.h
ciflib-test-1.o: ../include/ciflib_typedefs.h ../include/CifFile.h
ciflib-test-1.o: /usr/include/sys/types.h /usr/include/sys/stat.h
ciflib-test-1.o: /usr/include/sys/dir.h ../include/CifAnon.h
ciflib-test-1.o: ../include/CifFileIo.h /usr/include/stdarg.h
ciflib-test-1.o: /usr/include/malloc.h /usr/include/string.h
ciflib-test-1.o: ../include/FileIo.h /usr/include/unistd.h
ciflib-test-1.o: ../include/CifDataItem.h ../include/CifCategoryIndex.h
ciflib-test-1.o: ../include/CifNameAttributes.h ../include/CifAlias.h
ciflib-test-1.o: ../include/CifDataBlock.h ../include/CifJoin.h
ciflib-test-1.o: ../include/CifTree.h ../include/CifCategory.h
ciflib-test-1.o: ../include/ciflib_interface.h ../include/ciflib.h
ciflib-test-1.o: ../include/cif_extern_global.h ../include/ciflib_structure.h
ciflib-test-1.o: ../include/regex.h
ciflib_interface.o: /usr/include/stdlib.h /usr/include/standards.h
ciflib_interface.o: /usr/include/sgidefs.h ../include/CifItemValue.h
ciflib_interface.o: /usr/include/stdio.h /usr/include/ctype.h
ciflib_interface.o: ../include/cif_defs.h ../include/cif_error.h
ciflib_interface.o: ../include/ciflib_typedefs.h ../include/CifFile.h
ciflib_interface.o: /usr/include/sys/types.h /usr/include/sys/stat.h
ciflib_interface.o: /usr/include/sys/dir.h ../include/CifAnon.h
ciflib_interface.o: ../include/CifFileIo.h /usr/include/stdarg.h
ciflib_interface.o: /usr/include/malloc.h /usr/include/string.h
ciflib_interface.o: ../include/FileIo.h /usr/include/unistd.h
ciflib_interface.o: ../include/CifDataItem.h ../include/CifCategoryIndex.h
ciflib_interface.o: ../include/CifNameAttributes.h ../include/CifAlias.h
ciflib_interface.o: ../include/CifDataBlock.h ../include/CifJoin.h
ciflib_interface.o: ../include/CifTree.h ../include/CifCategory.h
ciflib_interface.o: ../include/ciflib_interface.h ../include/ciflib.h
ciflib_interface.o: ../include/cif_extern_global.h
ciflib_interface.o: ../include/ciflib_structure.h ../include/regex.h
ciflib_interface.o: ../include/cif_global.h
ciflib_structure.o: /usr/include/stdlib.h /usr/include/standards.h
ciflib_structure.o: /usr/include/sgidefs.h ../include/CifFile.h
ciflib_structure.o: /usr/include/stdio.h /usr/include/sys/types.h
ciflib_structure.o: /usr/include/sys/stat.h /usr/include/sys/dir.h
ciflib_structure.o: ../include/cif_defs.h ../include/cif_error.h
ciflib_structure.o: ../include/ciflib_typedefs.h ../include/CifAnon.h
ciflib_structure.o: ../include/CifFileIo.h /usr/include/stdarg.h
ciflib_structure.o: /usr/include/malloc.h /usr/include/string.h
ciflib_structure.o: /usr/include/ctype.h ../include/FileIo.h
ciflib_structure.o: /usr/include/unistd.h ../include/CifItemValue.h
ciflib_structure.o: ../include/CifDataItem.h ../include/CifCategoryIndex.h
ciflib_structure.o: ../include/CifNameAttributes.h ../include/CifAlias.h
ciflib_structure.o: ../include/CifDataBlock.h ../include/CifJoin.h
ciflib_structure.o: ../include/CifTree.h ../include/CifCategory.h
ciflib_structure.o: ../include/ciflib_structure.h
ciflib_structure.o: ../include/ciflib_interface.h ../include/ciflib.h
ciflib_structure.o: ../include/cif_extern_global.h
FileIo.o: ../include/FileIo.h /usr/include/sys/types.h
FileIo.o: /usr/include/standards.h /usr/include/sgidefs.h
FileIo.o: /usr/include/sys/stat.h /usr/include/malloc.h /usr/include/stdio.h
FileIo.o: /usr/include/stdlib.h /usr/include/string.h /usr/include/ctype.h
FileIo.o: /usr/include/stdarg.h /usr/include/unistd.h ../include/cif_defs.h
FileIo.o: ../include/cif_error.h ../include/ciflib_typedefs.h
