EXE=
TOOLBASE=
SRCONLY=
HDRONLY = 
COMPILE_ANY_CHANGE = 
VERSION = 0.0.1
PATH_TO_BASE=../..
BIN_DIR=$(PATH_TO_BASE)/src/bin

# Makefile.tool needs to define:
#   EXE - the executable name
#   TOOLBASE - the base filename for files with .h & .cpp versions
#   SRCONLY - any cpp files without headers.
#   HDRONLY - any header files without cpp
#   COMPILE_ANY_CHANGE - any files that should be compiled if any of the
#                        files change.  These files MUST also be
#                        included in TOOLBASE or SRCONLY.  Here they are
#                        just the base name without the extension.
#   VERSION - if not 0.0.1
#   PATH_TO_BASE if it is not ../..
#   BIN_DIR if it is not ../../src/bin
#   USER_INCLUDES if any additional directories need to be included to pick up
#                 header files (example: USER_INCLUDES=-ImyDir1 -ImyDir2)
include Makefile.tool

# Must be after the include of Makefile.tool since it uses PATH_TO_BASE
include $(PATH_TO_BASE)/Makefile.include

TOOLHDR = $(TOOLBASE:=.h) $(HDRONLY)
TOOLSRC = $(TOOLBASE:=.cpp) $(SRCONLY)
TOOLOBJ = $(TOOLSRC:.cpp=.o)
LIBRARY = $(USER_LIBS) $(REQ_LIBS)
OBJECTS=$(patsubst %,$(OBJDIR)/%,$(TOOLOBJ))
ALWAYS_COMP_OBJ = $(patsubst %,$(OBJDIR)/%,$(COMPILE_ANY_CHANGE:=.o))

# make everything
all : $(EXE)

# dependencies for executables
$(EXE) : $(LIBRARY) $(OBJECTS)
	$(CXX) $(CFLAGS) -o $(BIN_DIR)/$@ $(OBJECTS) $(LIBRARY) -lm -lz -lssl

$(OBJECTS): $(TOOLHDR) | $(OBJDIR)

$(OBJDIR):
	mkdir $(OBJDIR)

clean :
	-rm -f $(OBJDIR)/*.o $(BIN_DIR)/$(EXE) *~
	if test -d $(TEST_DIR); \
        then \
	$(MAKE) $(PARALLEL_MAKE) -C $(TEST_DIR) OPTFLAG="$(OPTFLAG)" --no-print-directory $@; \
        fi

test : all
	if test -d $(TEST_DIR); \
        then \
        $(MAKE) $(PARALLEL_MAKE) -C $(TEST_DIR) OPTFLAG="$(OPTFLAG)" --no-print-directory $@; \
        fi

$(ALWAYS_COMP_OBJ):  $(COMPILE_ANY_CHANGE:=.cpp)  $(filter-out $(ALWAYS_COMP_OBJ),$(OBJECTS))
	$(CXX) $(CFLAGS) -o $@ -c  $(*F).cpp -DVERSION="\"$(VERSION)\""

$(OBJDIR)/%.o: %.c
	$(CXX) $(CFLAGS) -o $@ -c $<

$(OBJDIR)/%.o: %.cpp 
	$(CXX) $(CFLAGS) -o $@ -c $< -DVERSION="\"$(VERSION)\""

.SUFFIXES : .cpp .c .o .X.o $(SUFFIXES)

DFLAGS=-Y

cleandepend:
	        makedepend -fMakefile.tool -- $(DFLAGS) --

depend:
	        makedepend -fMakefile.tool -- $(DFLAGS) -- $(TOOLSRC) >/dev/null 2>&1

