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

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


#----------------------------------------------------------------------------
#  Target definitions.
#----------------------------------------------------------------------------
NDBLIB  = $(LIB)/libndbfilter.a
NDBLIB1 = $(LIB)/liberfiolib.a
TARGET  = $(BIN)/filter_test
TARGET1 = $(BIN)/find_symmetry
TARGET2 = $(BIN)/check_symmetry

#
# Shared header files
#
HFILES = $(INCL)/_atom.h \
         $(INCL)/_atom_change.h \
         $(INCL)/_atom_change_global.h \
         $(INCL)/_chain.h \
         $(INCL)/_fileobj.h \
         $(INCL)/_fileobj_ioutil.h \
         $(INCL)/_molecule.h \
         $(INCL)/_residue.h \
         $(INCL)/align_util.h \
         $(INCL)/cry_util.h \
         $(INCL)/dict_exchange.h \
         $(INCL)/erf_iolib.h \
         $(INCL)/erf_iolib_global.h \
         $(INCL)/ndb_filterexitlib.h \
         $(INCL)/ndb_pack.h \
         $(INCL)/token_card.h \
         $(INCL)/util.h \
         $(INCL)/util_global.h \
         $(INCL)/util_general.h

HFILES1= $(INCL)/erf_iolib.h

#
# Library object files
#
OBJS    = $(OBJ)/_atom.o \
          $(OBJ)/_atom_change.o \
          $(OBJ)/_chain.o \
          $(OBJ)/_fileobj.o \
          $(OBJ)/_fileobj_ioutil.o \
          $(OBJ)/_fileobj_ndb_cif_iolib.o \
          $(OBJ)/_fileobj_ndb_pdb_iolib.o \
          $(OBJ)/_molecule.o \
          $(OBJ)/_residue.o \
          $(OBJ)/align_util.o \
          $(OBJ)/cry_util.o \
          $(OBJ)/dict_exchange.o \
          $(OBJ)/erf_iolib.o \
          $(OBJ)/filter_error.o \
          $(OBJ)/token_card.o \
          $(OBJ)/util.o \
          $(OBJ)/util_general.o 

OBJS2   = $(OBJ)/cry_util.o \
          $(OBJ)/erf_iolib.o \
          $(OBJ)/_fileobj_ioutil.o \
          $(OBJ)/token_card.o \
          $(OBJ)/util.o \
          $(OBJ)/util_general.o \
          $(OBJ)/_atom_change.o

OBJ1    = $(OBJ)/filter_test.o
OBJ2    = $(OBJ)/find_symmetry.o
OBJ3    = $(OBJ)/check_symmetry.o

CIFOBJCLIB = $(LIBINSTDIR)/libconnect.a $(LIBINSTDIR)/libciffileobj.a \
             $(LIBINSTDIR)/libistable.a $(LIBINSTDIR)/libtblindex.a  \
             $(LIBINSTDIR)/libcifobj.a $(LIBINSTDIR)/libcifstr.a $(LIBINSTDIR)/libndbmisc.a
#
#
all:	$(NDBLIB) $(NDBLIB1)
$(NDBLIB):	$(OBJS) $(HFILES)
		$(AR) $(AR_PUTFLAGS) $(NDBLIB) $(OBJS)
		$(RANLIB) $(NDBLIB)
		@echo $(NDBLIB) " is up to date."

$(NDBLIB1):	$(OBJS2) $(HFILES1)
		$(AR) $(AR_PUTFLAGS) $(NDBLIB1) $(OBJS2)
		$(RANLIB) $(NDBLIB1)
		@echo $(NDBLIB1) " is up to date."
#
# Creating object files ..
#
$(OBJ)/_atom.o: $(SRC)/_atom.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/_atom.C -o $@

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

install: $(NDBLIB) $(NDBLIB1) $(HFILES)
	$(INSTALL) -m 0440 $(INCL)/_atom.h $(LIBINCLDIR)/.
	$(INSTALL) -m 0440 $(INCL)/_chain.h $(LIBINCLDIR)/.
	$(INSTALL) -m 0440 $(INCL)/_fileobj.h $(LIBINCLDIR)/.
	$(INSTALL) -m 0440 $(INCL)/_fileobj_ioutil.h $(LIBINCLDIR)/.
	$(INSTALL) -m 0440 $(INCL)/_molecule.h $(LIBINCLDIR)/.
	$(INSTALL) -m 0440 $(INCL)/_residue.h $(LIBINCLDIR)/.
	$(INSTALL) -m 0440 $(INCL)/erf_iolib.h $(LIBINCLDIR)/.
	$(INSTALL) -m 0440 $(INCL)/cry_util.h $(LIBINCLDIR)/.
	$(INSTALL) -m 0440 $(INCL)/dict_exchange.h $(LIBINCLDIR)/.
	$(INSTALL) -m 0440 $(INCL)/ndb_filterexitlib.h $(LIBINCLDIR)/.
	$(INSTALL) -m 0440 $(INCL)/token_card.h $(LIBINCLDIR)/.
	$(INSTALL) -m 0440 $(INCL)/util.h $(LIBINCLDIR)/.
	$(INSTALL) -m 0440 $(INCL)/util_general.h $(LIBINCLDIR)/.
	$(INSTALL) $(INSTALLOPTS) $(NDBLIB) $(LIBINSTDIR)/.
	$(INSTALL) $(INSTALLOPTS) $(NDBLIB1) $(LIBINSTDIR)/.

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

test: $(TARGET) $(TARGET1) $(TARGET2)

$(TARGET): $(OBJ1) $(OBJS) $(CIFOBJCLIB) $(HFILES)
	$(CCC) $(C++FLAGS) -o $@  $(OBJ1) $(OBJS) $(CIFOBJCLIB) $(LDFLAGS) -lm

$(TARGET1): $(OBJ2) $(OBJS2)
	$(CCC) $(C++FLAGS) -o $@ $(OBJ2) $(OBJS2) $(CIFOBJCLIB) $(LDFLAGS) -lm

$(TARGET2): $(OBJ3) $(OBJS2)
	$(CCC) $(C++FLAGS) -o $@ $(OBJ3) $(OBJS2) $(CIFOBJCLIB) $(LDFLAGS) -lm

SRCFILES = $(SRC)/align_util.C \
			$(SRC)/find_symmetry.C \
			$(SRC)/_atom.C \
			$(SRC)/_fileobj.C \
			$(SRC)/_molecule.C \
			$(SRC)/_atom_change.C \
			$(SRC)/_fileobj_ioutil.C \
			$(SRC)/_chain.C \
			$(SRC)/_fileobj_ndb_cif_iolib.C  \
			$(SRC)/_residue.C \
			$(SRC)/check_symmetry.C \
			$(SRC)/token_card.C \
			$(SRC)/cry_util.C \
			$(SRC)/util.C \
			$(SRC)/_fileobj_ndb_pdb_iolib.C \
			$(SRC)/util_general.C \
			$(SRC)/dict_exchange.C   $(SRC)/filter_error.C \
			$(SRC)/erf_iolib.C       $(SRC)/filter_test.C


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)
	@cp Makefile $(EXPORT_DIR)
