################################################################################
# Makefile for TASTE (Testability Analysis SuiTE)
################################################################################

############################ application name ##################################

APP_NAME=taste

########################### compiler settings ##################################

CXX=@g++ 
CXXFLAGS=-ansi -pedantic -Wall -c 

########################### directory settings #################################

SRC_DIR_TASTE=src
SRC_DIR_EXPREV=src/expressionevaluator
SRC_DIR_GETPOT=src/getpot
SRC_DIR_STRTOK=src/stringtokenizer

EXM_DIR=examples
BIN_DIR=objects
LIB_DIR=lib
MAN_DIR=manuals
EXE_DIR=.

.PHONY: lib clean archive 

############################### build data #####################################

o_lib_files=$(BIN_DIR)/error.o $(BIN_DIR)/fileio.o $(BIN_DIR)/misc.o $(BIN_DIR)/model.o $(BIN_DIR)/StringTokenizer.o $(BIN_DIR)/ExpressionEvaluator.o
o_files=$(o_lib_files) $(BIN_DIR)/main.o 

$(APP_NAME): $(BIN_DIR)/main.o $(BIN_DIR)/error.o $(BIN_DIR)/fileio.o $(BIN_DIR)/misc.o $(BIN_DIR)/model.o $(BIN_DIR)/StringTokenizer.o $(BIN_DIR)/ExpressionEvaluator.o $(LIB_DIR)/$(APP_NAME).a
	@echo ... building "'"$(APP_NAME)"'" binary file
	$(CXX) $(SRC_DIR_TASTE)/main.cc $(LIB_DIR)/$(APP_NAME).a -o $(APP_NAME)

$(LIB_DIR)/$(APP_NAME).a:
	@echo ... building "'"$(APP_NAME).a"'" library
	@ar -r $(LIB_DIR)/$(APP_NAME).a $(o_lib_files) 

$(BIN_DIR)/error.o: $(SRC_DIR_TASTE)/error.cc $(SRC_DIR_TASTE)/error.h
	@echo ... building object files
	${CXX} ${CXXFLAGS} $(SRC_DIR_TASTE)/error.cc -o $(BIN_DIR)/error.o

$(BIN_DIR)/ExpressionEvaluator.o: $(SRC_DIR_EXPREV)/ExpressionEvaluator.cc $(SRC_DIR_EXPREV)/ExpressionEvaluator.h
	${CXX} ${CXXFLAGS} $(SRC_DIR_EXPREV)/ExpressionEvaluator.cc  -o $(BIN_DIR)/ExpressionEvaluator.o

$(BIN_DIR)/fileio.o: $(SRC_DIR_TASTE)/fileio.cc $(SRC_DIR_TASTE)/fileio.h 
	${CXX} ${CXXFLAGS} $(SRC_DIR_TASTE)/fileio.cc -o $(BIN_DIR)/fileio.o

$(BIN_DIR)/misc.o: $(SRC_DIR_TASTE)/misc.cc $(SRC_DIR_TASTE)/misc.h
	${CXX} ${CXXFLAGS} $(SRC_DIR_TASTE)/misc.cc -o $(BIN_DIR)/misc.o

$(BIN_DIR)/model.o: $(SRC_DIR_TASTE)/model.cc $(SRC_DIR_TASTE)/model.h $(SRC_DIR_TASTE)/defs.h $(SRC_DIR_TASTE)/fileio.h
	${CXX} ${CXXFLAGS} $(SRC_DIR_TASTE)/model.cc -o $(BIN_DIR)/model.o

$(BIN_DIR)/main.o: $(SRC_DIR_TASTE)/main.cc $(SRC_DIR_TASTE)/model.h $(SRC_DIR_TASTE)/defs.h $(SRC_DIR_TASTE)/fileio.h $(SRC_DIR_TASTE)/error.h
	${CXX} ${CXXFLAGS} $(SRC_DIR_TASTE)/main.cc -o $(BIN_DIR)/main.o

$(BIN_DIR)/StringTokenizer.o: $(SRC_DIR_STRTOK)/StringTokenizer.cc $(SRC_DIR_STRTOK)/StringTokenizer.h 
	${CXX} ${CXXFLAGS} $(SRC_DIR_STRTOK)/StringTokenizer.cc -o $(BIN_DIR)/StringTokenizer.o

clean:
	@echo ... cleaning non-source data 
	@rm -f $(BIN_DIR)/*.o 
	@rm -f *.core
	@rm -f $(APP_NAME)
	@rm -f $(APP_NAME).tar.gz
	@rm -f $(EXM_DIR)/*.htm
	@rm -f $(EXM_DIR)/*.html
	@rm -f $(EXM_DIR)/*.txt
	@rm -f $(EXM_DIR)/*.tex
	@rm -f $(EXM_DIR)/*.pdf
	@rm -f $(EXM_DIR)/*.log
	@rm -f $(EXM_DIR)/*.aux
	@rm -f $(LIB_DIR)/*.a

archive:
	@echo ... making $(APP_NAME).tar.gz archive 
	@tar -czf $(APP_NAME).tar.gz *
