#
#  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
PROJS      = ./..
INSTALLDIR = $(PROJS)/bin

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

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

LIBS    = $(LIBINSTDIR)/libciffileobj.a \
          $(LIBINSTDIR)/libtblindex.a \
          $(LIBINSTDIR)/libcifobj.a \
          $(LIBINSTDIR)/libistable.a \
          $(LIBINSTDIR)/libregex.a \
          $(LIBINSTDIR)/libcifstr.a \
          $(LIBINSTDIR)/libndbmisc.a

LIBSH   = $(LIBINSTDIR)/libndbhtml.a \
          $(LIBINSTDIR)/libciffileobj.a \
          $(LIBINSTDIR)/libtblindex.a \
          $(LIBINSTDIR)/libcifobj.a \
          $(LIBINSTDIR)/libistable.a \
          $(LIBINSTDIR)/libregex.a \
          $(LIBINSTDIR)/libcifstr.a \
          $(LIBINSTDIR)/libndbmisc.a

#----------------------------------------------------------------------------
#  Target definitions.
#----------------------------------------------------------------------------
NDBLIB  = $(LIB)/libconectadm.a
NDBLIB1 = $(LIB)/libconnect.a
NDBLIB2 = $(LIB)/libconnect1.a
NDBLIB3 = $(LIB)/libConnect.a
NDBLIB4 = $(LIB)/liberfutil.a
#
TARGET1 = $(BIN)/connect
TARGET2 = $(BIN)/add_bond_type
TARGET3 = $(BIN)/binary_main
TARGET4 = $(BIN)/graph_test
TARGET5 = $(BIN)/connect_test
TARGET6 = $(BIN)/ligand_search
TARGET7 = $(BIN)/connect_check
TARGET8 = $(BIN)/set_lock
TARGET9 = $(BIN)/check_lock
TARGET10= $(BIN)/id-search-cgi
TARGET11= $(BIN)/ligand-adding1-cgi
TARGET12= $(BIN)/ligand-adding-cgi
#
# Source files
#
SRCFILES = $(SRC)/adm_connect.C  \
			$(SRC)/connect2graph.C  \
			$(SRC)/connect_test.C  \
			$(SRC)/graph.C \
			$(SRC)/set_lock.C \
			$(SRC)/binary_main.C \
			$(SRC)/_connect.C \
			$(SRC)/connect_util.C \
			$(SRC)/graph_container.C \
			$(SRC)/bond_main.C \
			$(SRC)/connect_check.C \
			$(SRC)/graph_test.C \
			$(SRC)/check_lock.C \
			$(SRC)/connect_iolib.C \
			$(SRC)/erf_connect.C \
			$(SRC)/_index.C \
			$(SRC)/check_main.C \
			$(SRC)/connect_main.C \
			$(SRC)/erf_util.C \
			$(SRC)/ligand_search.C \
			$(SRC)/iupac_atom_name.C \
			$(SRC)/id-search-cgi.C \
			$(SRC)/ligand-adding1-cgi.C \
			$(SRC)/ligand-adding-cgi.C \
			$(SRC)/html-util.C
#
# All header files
#
ALLHFILES = $(INCL)/adm_connect.h \
			$(INCL)/connect_iolib.h \
			$(INCL)/erf_util.h \
                        $(INCL)/erf_util_global.h \
			$(INCL)/connect2graph.h  \
			$(INCL)/connect_util.h   \
			$(INCL)/graph_container.h  \
			$(INCL)/connect_check.h    \
			$(INCL)/graph.h \
			$(INCL)/_connect.h       \
			$(INCL)/erf_connect.h    \
			$(INCL)/_index.h \
			$(INCL)/iupac_atom_name.h \
			$(INCL)/iupac_atom_name_global.h \
			$(INCL)/html-util.h
#
# Template files
#
TMPFILES = $(INCL)/stack_value.C \
			$(INCL)/stack_value.h 
#
# Shared header files
#
HFILES = $(INCL)/_connect.h \
         $(INCL)/_index.h \
         $(INCL)/adm_connect.h \
         $(INCL)/connect_iolib.h \
         $(INCL)/connect_util.h \
         $(INCL)/erf_connect.h \
         $(INCL)/erf_util.h

HFILE1 = $(INCL)/_connect.h \
         $(INCL)/_index.h \
         $(INCL)/erf_connect.h \
         $(INCL)/erf_util.h

HFILE3 = $(INCL)/_connect.h \
         $(INCL)/_index.h \
         $(INCL)/connect_check.h \
         $(INCL)/connect_iolib.h \
         $(INCL)/erf_util.h

HFILE4 = $(INCL)/erf_util.h
#
OBJ1    = $(OBJ)/connect_main.o
OBJ2    = $(OBJ)/bond_main.o
OBJ3    = $(OBJ)/binary_main.o
OBJ4    = $(OBJ)/graph_test.o
OBJ5    = $(OBJ)/connect_test.o
OBJ6    = $(OBJ)/ligand_search.o
OBJ7    = $(OBJ)/check_main.o
OBJ8    = $(OBJ)/set_lock.o
OBJ9    = $(OBJ)/check_lock.o
OBJ10   = $(OBJ)/id-search-cgi.o
OBJ11   = $(OBJ)/ligand-adding1-cgi.o
OBJ12   = $(OBJ)/ligand-adding-cgi.o
#
# Library object files
#
OBJS    = $(OBJ)/_connect.o \
          $(OBJ)/_index.o \
          $(OBJ)/adm_connect.o \
          $(OBJ)/connect_check.o \
          $(OBJ)/connect_iolib.o \
          $(OBJ)/connect_util.o \
          $(OBJ)/connect2graph.o \
          $(OBJ)/erf_connect.o \
          $(OBJ)/erf_util.o \
          $(OBJ)/graph.o \
          $(OBJ)/iupac_atom_name.o

OBJS1   = $(OBJ)/_connect.o \
          $(OBJ)/_index.o \
          $(OBJ)/connect_iolib.o \
          $(OBJ)/connect2graph.o \
          $(OBJ)/erf_connect.o \
          $(OBJ)/erf_util.o \
          $(OBJ)/graph.o \
          $(OBJ)/graph_container.o \
          $(OBJ)/iupac_atom_name.o

OBJS2   = $(OBJ)/_connect.o \
          $(OBJ)/_index.o \
          $(OBJ)/connect_check.o \
          $(OBJ)/connect_iolib.o \
          $(OBJ)/connect2graph.o \
          $(OBJ)/erf_connect.o \
          $(OBJ)/erf_util.o \
          $(OBJ)/graph.o \
          $(OBJ)/graph_container.o

OBJS3   = $(OBJ)/_connect.o \
          $(OBJ)/_index.o \
          $(OBJ)/connect_check.o \
          $(OBJ)/connect_iolib.o \
          $(OBJ)/erf_util.o

OBJS4   = $(OBJ)/_connect.o \
          $(OBJ)/_index.o \
          $(OBJ)/connect_check.o \
          $(OBJ)/connect_iolib.o \
          $(OBJ)/erf_connect.o \
          $(OBJ)/erf_util.o

OBJS5   = $(OBJ)/_index.o \
          $(OBJ)/erf_util.o

OBJS6   = $(OBJ)/html-util.o
#
#
all:	$(NDBLIB) $(NDBLIB1) $(NDBLIB4)

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

$(NDBLIB1):	$(OBJS1) $(HFILE1)
		$(AR) $(AR_PUTFLAGS) $(NDBLIB1) $(OBJS1)
		$(RANLIB) $(NDBLIB1)
		@echo $(NDBLIB1) " is up to date."

$(NDBLIB2):	$(OBJS2) $(HFILE1)
		$(AR) $(AR_PUTFLAGS) $(NDBLIB2) $(OBJS2)
		$(RANLIB) $(NDBLIB2)
		@echo $(NDBLIB2) " is up to date."

$(NDBLIB3):	$(OBJS3) $(HFILE3)
		$(AR) $(AR_PUTFLAGS) $(NDBLIB3) $(OBJS3)
		$(RANLIB) $(NDBLIB3)
		@echo $(NDBLIB3) " is up to date."

$(NDBLIB4):	$(OBJS5) $(HFILE4)
		$(AR) $(AR_PUTFLAGS) $(NDBLIB4) $(OBJS5)
		$(RANLIB) $(NDBLIB4)
		@echo $(NDBLIB4) " is up to date."
#
#  Making applications
#
$(TARGET1): $(LIBS) $(HFILES) $(NDBLIB) $(OBJ1)
	$(CCC) $(C++FLAGS) -o $@  $(OBJ1) $(NDBLIB) $(LIBS) $(LDFLAGS) -lm

$(TARGET2): $(LIBS) $(HFILES3) $(NDBLIB3) $(OBJ2)
	$(CCC) $(C++FLAGS) -o $@  $(OBJ2) $(NDBLIB3) $(LIBS) $(LDFLAGS) -lm

$(TARGET3): $(LIBS) $(OBJ3)
	$(CCC) $(C++FLAGS) -o $@  $(OBJ3) $(LIBS) $(LDFLAGS) -lm

$(TARGET4): $(LIBS) $(OBJ4) $(OBJS1)
	$(CCC) $(C++FLAGS) -o $@  $(OBJ4) $(OBJS1) $(LIBS) $(LDFLAGS) -lm

$(TARGET5): $(LIBS) $(OBJ5) $(OBJS1)
	$(CCC) $(C++FLAGS) -o $@  $(OBJ5) $(OBJS1) $(LIBS) $(LDFLAGS) -lm

$(TARGET6): $(LIBS) $(OBJ6) $(NDBLIB2)
	$(CCC) $(C++FLAGS) -o $@  $(OBJ6) $(NDBLIB2) $(LIBS) $(LDFLAGS) -lm

$(TARGET7): $(LIBS) $(OBJ7) $(OBJS4)
	$(CCC) $(C++FLAGS) -o $@  $(OBJ7) $(OBJS4) $(LIBS) $(LDFLAGS) -lm

$(TARGET8): $(OBJ8)
	$(CCC) $(C++FLAGS) -o $@  $(OBJ8) $(LIBINSTDIR)/libndbmisc.a $(LDFLAGS) -lm

$(TARGET9): $(OBJ9)
	$(CCC) $(C++FLAGS) -o $@  $(OBJ9) $(LIBINSTDIR)/libndbmisc.a $(LDFLAGS) -lm

$(TARGET10): $(LIBSH) $(HFILES) $(NDBLIB) $(OBJ10) $(OBJS6)
	$(CCC) $(C++FLAGS) -o $@  $(OBJ10) $(OBJS6) $(NDBLIB) $(LIBSH) $(LDFLAGS) -lm

$(TARGET11): $(LIBSH) $(HFILES) $(NDBLIB) $(OBJ11) $(OBJS6)
	$(CCC) $(C++FLAGS) -o $@  $(OBJ11) $(OBJS6) $(NDBLIB) $(LIBSH) $(LDFLAGS) -lm

$(TARGET12): $(LIBSH) $(HFILES) $(NDBLIB) $(OBJ12) $(OBJS6)
	$(CCC) $(C++FLAGS) -o $@  $(OBJ12) $(OBJS6) $(NDBLIB) $(LIBSH) $(LDFLAGS) -lm
#
# Creating object files ..
#
$(OBJ)/_connect.o: $(SRC)/_connect.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/_connect.C -o $@

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

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

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

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

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

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

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

$(OBJ)/connect_check.o: $(SRC)/connect_check.C
	$(CCC) $(C++FLAGS_NONANSI) -c  $(SRC)/connect_check.C -o $@

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

test: $(TARGET4) $(TARGET5)

install: $(NDBLIB1) $(NDBLIB2) $(TARGET1) $(TARGET2) $(TARGET3) $(TARGET6) \
         $(TARGET7) $(TARGET8) $(TARGET9) $(TARGET10) $(TARGET11) $(TARGET12) $(NDBLIB4)
	$(INSTALL) $(INSTALLOPTS) $(NDBLIB1) $(LIBINSTDIR)/.
	$(INSTALL) $(INSTALLOPTS) $(NDBLIB2) $(LIBINSTDIR)/.
	$(INSTALL) $(INSTALLOPTS) $(NDBLIB4) $(LIBINSTDIR)/.
	$(INSTALL) -m 440 $(INCL)/_connect.h $(LIBINCLDIR)/.
	$(INSTALL) -m 440 $(INCL)/_index.h $(LIBINCLDIR)/.
	$(INSTALL) -m 440 $(INCL)/connect_check.h $(LIBINCLDIR)/.
	$(INSTALL) -m 440 $(INCL)/connect_iolib.h $(LIBINCLDIR)/.
	$(INSTALL) -m 440 $(INCL)/connect2graph.h $(LIBINCLDIR)/.
	$(INSTALL) -m 440 $(INCL)/erf_connect.h $(LIBINCLDIR)/.
	$(INSTALL) -m 440 $(INCL)/erf_util.h $(LIBINCLDIR)/.
	$(INSTALL) -m 440 $(INCL)/graph.h $(LIBINCLDIR)/.
	$(INSTALL) -m 440 $(INCL)/graph_container.h $(LIBINCLDIR)/.
	$(INSTALL) -m 440 $(INCL)/iupac_atom_name.h $(LIBINCLDIR)/.
	cp $(TARGET1) $(INSTALLDIR)/.
	cp $(TARGET2) $(INSTALLDIR)/.
	cp $(TARGET3) $(INSTALLDIR)/.
	cp $(TARGET6) $(INSTALLDIR)/.

clean :
	@rm -f core; rm -f $(OBJ)/*.o $(NDBLIB) $(NDBLIB1) $(NDBLIB2) \
$(NDBLIB3) $(NDBLIB4)
	@rm -rf $(OBJ)/ii_files
	@rm -rf Template.DB


export:
	mkdir -p $(EXPORT_DIR)
	@cd $(EXPORT_DIR); mkdir -p $(INCL)
	$(EXPORT) $(EXPORT_LIST) $(ALLHFILES) $(EXPORT_DIR)/$(INCL)
	$(EXPORT) $(EXPORT_LIST) $(TMPFILES) $(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)
	@cp Makefile $(EXPORT_DIR)
