# File:  Makefile

#
# Builds a executable target in the platform specific bin directory...
#
#----------------------------------------------------------------------------
# Project specific path defintions.
#----------------------------------------------------------------------------
INSTALLDIR  = ../lib
LIBINCLDIR  = ../include

PROJDIR    = .

SRC        = $(PROJDIR)/src
INCL       = $(PROJDIR)/include
PLATDIR    = $(PROJDIR)
OBJ        = $(PROJDIR)/obj
BIN        = $(PROJDIR)/bin
LIB        = $(PROJDIR)/lib
TEST       = $(PLATDIR)/test
#OPT=-g
#----------------------------------------------------------------------------
# LINCLUDES and LDEFINES are appended to CFLAGS and C++FLAGS
#----------------------------------------------------------------------------
#LDEFINES    = -DNO_RANGE_CHECK  -DDEBUG
LDEFINES     = -DNO_RANGE_CHECK 
LINCLUDES      =  -I$(INCL) -I$(LIBINCLDIR) 

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

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

TARGET1       = $(BIN)/LOtest1
TARGET2       = $(BIN)/LOtest2
TARGET3       = $(BIN)/LOtest3
TARGET4       = $(BIN)/LOtest4
TARGET5       = $(BIN)/LOtest5
TARGET6       = $(BIN)/cifloader


ALLTARGETS =  $(OBJS)  $(TARGET1) $(TARGET2)  $(TARGET3) $(TARGET4) \
		$(TARGET5) $(TARGET6)

#
#      List of header and object files
#

HFILES = $(INCL)/CifSchemaMap.h
OBJS   = $(OBJ)/CifSchemaMap.o

OBJ1 = $(OBJ)/LOtest1.o
OBJ2 = $(OBJ)/LOtest2.o
OBJ3 = $(OBJ)/LOtest3.o
OBJ4 = $(OBJ)/LOtest4.o
OBJ5 = $(OBJ)/LOtest5.o
OBJ6 = $(OBJ)/cifloader.o

SCHEMAMAPLIB=$(LIB)/libcifschemamap.a
#

FILEOBJLIB = $(INSTALLDIR)/libciffileobj.a
CIFLIB     = $(INSTALLDIR)/libcifstr.a
CIFOBJCLIB = $(INSTALLDIR)/libcifobj.a $(INSTALLDIR)/libtblindex.a  $(INSTALLDIR)/libistable.a  $(INSTALLDIR)/libndbmisc.a 

#
#      Targets
#

all: $(SCHEMAMAPLIB) $(ALLTARGETS)
#

$(SCHEMAMAPLIB): $(OBJS) $(SRC)/CifSchemaMap.C $(INCL)/CifSchemaMap.h 
	$(AR) $(AR_PUTFLAGS) $(SCHEMAMAPLIB) $(OBJS)
	$(RANLIB) $(SCHEMAMAPLIB)	
	@echo $(SCHEMAMAPLIB) " is up to date."

#
$(TARGET1): $(OBJ1) $(FILEOBJLIB) $(CIFLIB) $(CIFOBJCLIB) $(SCHEMAMAPLIB)
	$(CCC) $(C++FLAGS) -o $@  $(OBJ1) $(FILEOBJLIB) $(CIFLIB) $(CIFOBJCLIB) $(LDFLAGS) -lm $(MALLOCLIB)

$(TARGET2): $(OBJ2) $(FILEOBJLIB) $(CIFLIB) $(CIFOBJCLIB) $(SCHEMAMAPLIB)
	$(CCC) $(C++FLAGS) -o $@  $(OBJ2) $(FILEOBJLIB) $(CIFLIB) $(CIFOBJCLIB) $(LDFLAGS) -lm $(MALLOCLIB)

$(TARGET3): $(OBJ3) $(FILEOBJLIB) $(CIFLIB) $(CIFOBJCLIB) $(SCHEMAMAPLIB)
	$(CCC) $(C++FLAGS) -o $@  $(OBJ3) $(OBJS) $(FILEOBJLIB) $(CIFLIB) $(CIFOBJCLIB) $(LDFLAGS) -lm $(MALLOCLIB)

$(TARGET4): $(OBJ4) $(FILEOBJLIB) $(CIFLIB) $(CIFOBJCLIB) $(SCHEMAMAPLIB)
	$(CCC) $(C++FLAGS) -o $@  $(OBJ4) $(OBJS) $(FILEOBJLIB) $(CIFLIB) $(CIFOBJCLIB) $(LDFLAGS) -lm $(MALLOCLIB)

$(TARGET5): $(OBJ5) $(FILEOBJLIB) $(CIFLIB) $(CIFOBJCLIB) $(SCHEMAMAPLIB)
	$(CCC) $(C++FLAGS) -o $@  $(OBJ5) $(OBJS) $(FILEOBJLIB) $(CIFLIB) $(CIFOBJCLIB) $(LDFLAGS) -lm $(MALLOCLIB)

$(TARGET6): $(OBJ6) $(FILEOBJLIB) $(CIFLIB) $(CIFOBJCLIB) $(SCHEMAMAPLIB)
	$(CCC) $(C++FLAGS) -o $@  $(OBJ6) $(OBJS) $(FILEOBJLIB) $(CIFLIB) $(CIFOBJCLIB) $(LDFLAGS) -lm $(MALLOCLIB)

#
#

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

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

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

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

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

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

#
$(OBJ)/CifSchemaMap.o: $(SRC)/CifSchemaMap.C $(INCL)/CifSchemaMap.h
	$(CCC) $(C++FLAGS_NONANSI) $(INCLS) -c $(SRC)/CifSchemaMap.C -o $@


test: $(ALLTARGETS)   $(CIFLIB)
#
#	@echo 'Running Test 2 ** Results stored in $(TEST)' 
#	@$(TARGET2)
#
#	@echo 'Running Test 1 ** Results stored in $(TEST)' 
#	@$(TARGET1)
#
	@echo 'Running Test ** Results stored in $(TEST)' 
	@sh -c 'cd $(TEST); ./Test-loader.csh 2>&1 | tee test.out'


install: $(ALLTARGETS) $(SCHEMAMAPLIB)
	$(INSTALL) -m 0444 $(HFILES)     $(LIBINCLDIR)/.
	$(INSTALL) -m 0444 $(SCHEMAMAPLIB) $(INSTALLDIR)/.

clean :
	@rm -f $(ALLTARGETS)
	@rm -f $(SCHEMAMAPLIB)
	@rm -f core $(OBJS)
	@rm -f $(OBJ)/*.o
	@rm -rf $(OBJ)/ii_files
	@rm -rf Template.DB

spotless: clean
#
SRCFILES = $(SRC)/cifloader.C \
			$(SRC)/CifSchemaMap.C

SRCTESTFILES = $(SRC)/LOtest1.C \
				$(SRC)/LOtest2.C \
				$(SRC)/LOtest3.C \
				$(SRC)/LOtest4.C \
				$(SRC)/LOtest5.C

TESTFILES = $(TEST)/1h9k.cif  \
            $(TEST)/ref_schema_map_external.cif  \
            $(TEST)/Test-loader.csh

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)
	$(EXPORT) $(EXPORT_LIST) $(SRCTESTFILES) $(EXPORT_DIR)/$(SRC)
	@cd $(EXPORT_DIR); mkdir -p $(BIN)
	@cd $(EXPORT_DIR); mkdir -p $(TEST)
	@cp $(TESTFILES) $(EXPORT_DIR)/$(TEST)
	@cd $(EXPORT_DIR); mkdir -p $(LIB)
	@cd $(EXPORT_DIR); mkdir -p $(OBJ)
	@cp Makefile $(EXPORT_DIR)
