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

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

#----------------------------------------------------------------------------
# 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.
#----------------------------------------------------------------------------
LIBS    = $(LIBINSTDIR)/libndbfilter.a \
          $(LIBINSTDIR)/libconnect.a \
          $(LIBINSTDIR)/libciffileobj.a \
          $(LIBINSTDIR)/libcifobj.a \
          $(LIBINSTDIR)/libistable.a \
          $(LIBINSTDIR)/libregex.a \
          $(LIBINSTDIR)/libtblindex.a \
          $(LIBINSTDIR)/libcifstr.a \
          $(LIBINSTDIR)/libndbmisc.a

NDBLIB  = $(LIB)/libvalidation.a

TARGET  = $(BIN)/validation-v8
#
# Shared header files
#
HFILES = $(INCL)/_validation.h \
         $(INCL)/atom.h \
         $(INCL)/align_standard.h \
         $(INCL)/base_information.h \
         $(INCL)/bond_angle_torsion.h \
         $(INCL)/check.h \
         $(INCL)/check_global.h \
         $(INCL)/class.h \
         $(INCL)/color_util.h \
         $(INCL)/contact.h \
         $(INCL)/datacheck.h \
         $(INCL)/gridcell.h \
         $(INCL)/list.h \
         $(INCL)/misc_util.h \
         $(INCL)/ndb_atlas.h \
         $(INCL)/ndb_atlas_text.h \
         $(INCL)/ndb_ring.h \
         $(INCL)/pair.h \
         $(INCL)/parser.h \
         $(INCL)/plot.h \
         $(INCL)/ps_util.h \
         $(INCL)/symop.h \
         $(INCL)/stereochemistry.h \
         $(INCL)/topology_global.h \
         $(INCL)/xtal.h

TESTFILES = $(TESTDIR)/1a02.pdb $(TESTDIR)/1f1t.pdb $(TESTDIR)/1f6i.pdb \
            $(TESTDIR)/1fdg.cif $(TESTDIR)/1fms.cif $(TESTDIR)/1a35.pdb \
            $(TESTDIR)/1f6c.pdb $(TESTDIR)/1fd5.cif $(TESTDIR)/1fix.cif \
            $(TESTDIR)/1fn1.cif $(TESTDIR)/test.sh

#
# Library object files
#
OBJ0       = $(OBJ)/valid_main.o
#
OBJS    = $(OBJ)/_validation.o \
          $(OBJ)/align_standard.o \
          $(OBJ)/atom.o \
          $(OBJ)/atomlist.o \
          $(OBJ)/base_information.o \
          $(OBJ)/bond_angle_torsion.o \
          $(OBJ)/check.o \
          $(OBJ)/color_util.o \
          $(OBJ)/contact.o \
          $(OBJ)/datacheck.o \
          $(OBJ)/gridcell.o \
          $(OBJ)/misc_util.o \
          $(OBJ)/na_classification.o \
          $(OBJ)/ndb_atlas.o \
          $(OBJ)/ndb_atlas_text.o \
          $(OBJ)/ndb_atlas_util.o \
          $(OBJ)/ndb_picture.o \
          $(OBJ)/ndb_ring.o \
          $(OBJ)/pack_contact.o \
          $(OBJ)/pair.o \
          $(OBJ)/parser.o \
          $(OBJ)/plot.o \
          $(OBJ)/plot_util.o \
          $(OBJ)/ps_util.o \
          $(OBJ)/ribbon_util.o \
          $(OBJ)/symop.o \
          $(OBJ)/stereochemistry.o \
          $(OBJ)/topology.o \
          $(OBJ)/validation.o \
          $(OBJ)/write_letter.o \
          $(OBJ)/xtal.o

OBJS1   = $(OBJ)/atom.o \
          $(OBJ)/atomlist.o \
          $(OBJ)/gridcell.o \
          $(OBJ)/pair.o \
          $(OBJ)/parser.o \
          $(OBJ)/symop.o \
          $(OBJ)/xtal.o
#
#
all:  $(NDBLIB) $(TARGET)

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

$(TARGET): $(LIBS) $(HFILES) $(NDBLIB) $(OBJ0)
	$(CCC) $(C++FLAGS) -o $@  $(OBJ0) $(NDBLIB) $(LIBS) $(LDFLAGS) -lm
#
# Creating object files ..
#
$(OBJ)/_validation.o: $(SRC)/_validation.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/_validation.C -o $@
$(OBJ)/align_standard.o: $(SRC)/align_standard.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/align_standard.C -o $@
$(OBJ)/atom.o: $(SRC)/atom.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/atom.C -o $@
$(OBJ)/atomlist.o: $(SRC)/atomlist.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/atomlist.C -o $@
$(OBJ)/base_information.o: $(SRC)/base_information.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/base_information.C -o $@
$(OBJ)/bond_angle_torsion.o: $(SRC)/bond_angle_torsion.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/bond_angle_torsion.C -o $@
$(OBJ)/check.o: $(SRC)/check.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/check.C -o $@
$(OBJ)/color_util.o: $(SRC)/color_util.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/color_util.C -o $@
$(OBJ)/contact.o: $(SRC)/contact.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/contact.C -o $@
$(OBJ)/datacheck.o: $(SRC)/datacheck.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/datacheck.C -o $@
$(OBJ)/gridcell.o: $(SRC)/gridcell.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/gridcell.C -o $@
$(OBJ)/misc_util.o: $(SRC)/misc_util.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/misc_util.C -o $@
$(OBJ)/na_classification.o: $(SRC)/na_classification.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/na_classification.C -o $@
$(OBJ)/ndb_atlas.o: $(SRC)/ndb_atlas.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/ndb_atlas.C -o $@
$(OBJ)/ndb_atlas_text.o: $(SRC)/ndb_atlas_text.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/ndb_atlas_text.C -o $@
$(OBJ)/ndb_atlas_util.o: $(SRC)/ndb_atlas_util.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/ndb_atlas_util.C -o $@
$(OBJ)/ndb_picture.o: $(SRC)/ndb_picture.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/ndb_picture.C -o $@
$(OBJ)/ndb_ring.o: $(SRC)/ndb_ring.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/ndb_ring.C -o $@
$(OBJ)/pack_contact.o: $(SRC)/pack_contact.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/pack_contact.C -o $@
$(OBJ)/pair.o: $(SRC)/pair.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/pair.C -o $@
$(OBJ)/parser.o  : $(SRC)/parser.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/parser.C -o $@
$(OBJ)/plot.o  : $(SRC)/plot.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/plot.C -o $@
$(OBJ)/plot_util.o  : $(SRC)/plot_util.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/plot_util.C -o $@
$(OBJ)/ps_util.o  : $(SRC)/ps_util.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/ps_util.C -o $@
$(OBJ)/ribbon_util.o  : $(SRC)/ribbon_util.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/ribbon_util.C -o $@
$(OBJ)/symop.o  : $(SRC)/symop.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/symop.C -o $@
$(OBJ)/stereochemistry.o  : $(SRC)/stereochemistry.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/stereochemistry.C -o $@
$(OBJ)/topology.o  : $(SRC)/topology.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/topology.C -o $@
$(OBJ)/valid_main.o: $(SRC)/valid_main.C
	$(CCC) $(C++FLAGS_NONANSI) -c  $(SRC)/valid_main.C -o $@
$(OBJ)/validation.o: $(SRC)/validation.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/validation.C -o $@
$(OBJ)/write_letter.o: $(SRC)/write_letter.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/write_letter.C -o $@
$(OBJ)/xtal.o: $(SRC)/xtal.C
	$(CCC) $(C++FLAGS) -c  $(SRC)/xtal.C -o $@

#
test: all
	@sh -c 'cd $(TESTDIR); ./test.sh'

install: $(NDBLIB) $(HFILES) $(TARGET)
	$(INSTALL) -m 0440 $(INCL)/_validation.h $(LIBINCLDIR)/.
	$(INSTALL) -m 0440 $(INCL)/bond_angle_torsion.h $(LIBINCLDIR)/.
	$(INSTALL) -m 0440 $(INCL)/check.h $(LIBINCLDIR)/.
	$(INSTALL) -m 0440 $(INCL)/contact.h $(LIBINCLDIR)/.
	$(INSTALL) -m 0440 $(INCL)/plot.h $(LIBINCLDIR)/.
	$(INSTALL) -m 0440 $(INCL)/color_util.h $(LIBINCLDIR)/.
	$(INSTALL) -m 0440 $(INCL)/misc_util.h $(LIBINCLDIR)/.
	$(INSTALL) $(INSTALLOPTS) $(NDBLIB) $(LIBINSTDIR)/.
	cp $(TARGET) $(INSTALLDIR)/.

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

ALLHFILES = $(INCL)/atom.h \
            $(INCL)/align_standard.h \
				$(INCL)/_cindex.h \
				$(INCL)/misc_util.h   \
				$(INCL)/plot_util.h \
				$(INCL)/base_information.h  \
				$(INCL)/class.h  \
                                $(INCL)/datacheck.h \
				$(INCL)/ndb_atlas.h \
				$(INCL)/ps_util.h \
				$(INCL)/color_util.h  \
				$(INCL)/ndb_atlas_text.h  \
				$(INCL)/_seqnum.h \
				$(INCL)/contact.h     \
				$(INCL)/ndb_ring.h        \
				$(INCL)/stereochemistry.h \
				$(INCL)/bond_angle_torsion.h  \
				$(INCL)/pair.h \
				$(INCL)/symop.h \
				$(INCL)/_bpindex.h \
				$(INCL)/gridcell.h \
				$(INCL)/parameter.h  \
				$(INCL)/topology_global.h \
				$(INCL)/check_global.h \
				$(INCL)/list.h \
				$(INCL)/parser.h \
				$(INCL)/_validation.h\
				$(INCL)/check.h \
				$(INCL)/map.h \
				$(INCL)/plot.h  \
				$(INCL)/xtal.h 

SRCFILES  = $(SRC)/atom.C \
				$(SRC)/color_util.C \
				$(SRC)/ndb_ring.C \
				$(SRC)/topology.C \
				$(SRC)/atomlist.C \
				$(SRC)/contact.C \
				$(SRC)/pack_contact.C \
				$(SRC)/base_information.C \
				$(SRC)/pair.C \
				$(SRC)/_validation.C \
				$(SRC)/gridcell.C \
				$(SRC)/parser.C \
				$(SRC)/validation.C \
				$(SRC)/misc_util.C \
				$(SRC)/plot.C \
				$(SRC)/valid_main.C \
				$(SRC)/na_classification.C \
				$(SRC)/plot_util.C  \
				$(SRC)/ndb_atlas.C \
				$(SRC)/ps_util.C  \
				$(SRC)/write_letter.C \
				$(SRC)/bond_angle_torsion.C \
				$(SRC)/ndb_atlas_text.C     \
				$(SRC)/ribbon_util.C      \
				$(SRC)/xtal.C \
				$(SRC)/check.C   \
				$(SRC)/datacheck.C   \
				$(SRC)/ndb_atlas_util.C     \
				$(SRC)/stereochemistry.C \
				$(SRC)/ndb_picture.C \
				$(SRC)/symop.C \
                                $(SRC)/align_standard.C


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

