# -*- Makefile -*-

HERE    	=       .
BINDIR		=	./bin

AT	=       @
DOLLAR  = 	$$

CD	=	$(AT)cd
CP	=	$(AT)cp
ECHO	=	@echo
CAT	=	$(AT)cat
IF	=	$(AT)if
LN	=	$(AT)ln
MKDIR	=	$(AT)mkdir
MV	=	$(AT)mv
SED	=	$(AT)sed
RM	=	$(AT)rm
TOUCH	=	$(AT)touch
CHMOD	=	$(AT)chmod
DATE    =       $(AT)date
PERL	=	$(AT)perl
THRIFT	=	$(ZBINDIR)/thrift
AR	=	$(AT)ar
ARFLAGS	=	rcs

CC	=	$(AT)gcc
CXX	=	$(AT)g++
FPIC	=	-fPIC

INCLUDES	=	-I$(HERE) -I$(HERE)/../.. \
			-I$(HERE)/../../external/include

CXX_INCLUDES	=	$(INCLUDES)

CWARN		=	-Wall -Wno-sign-compare -Wno-unused-variable
CXXWARN		=	$(CWARN) -Wno-deprecated -Woverloaded-virtual

CPP_DEPFLAGS		=	-MM -MG -MP $(CXX_INCLUDES) -MT "$(@:.d=.o)"
CPP_INLINE_DEPFLAGS	=	-MMD -MP -MT "$(@)" -MF $(@:.o=.T)
COMMON_CFLAGS		=	-g -std=gnu99 -D_GNU_SOURCE=1 \
				-D_REENTRANT $(CPP_INLINE_DEPFLAGS) \
				$(INCLUDES) $(FPIC) $(CWARN)

COMMON_CXXFLAGS		=	-g $(CPP_INLINE_DEPFLAGS) $(CXX_INCLUDES) \
				$(FPIC) $(CXXWARN)

DBG_CFLAGS		=	$(COMMON_CFLAGS) -DDEBUG_MODE=1
DBG_CXXFLAGS		=	$(COMMON_CXXFLAGS) -DDEBUG_MODE=1
OPTIMIZATION_FLAGS	=	-O3
OPT_CFLAGS		=	$(COMMON_CFLAGS) -DNDEBUG \
				$(OPTIMIZATION_FLAGS) -fno-omit-frame-pointer
OPT_CXXFLAGS		=	$(COMMON_CXXFLAGS) -DNDEBUG \
				$(OPTIMIZATION_FLAGS) -fno-omit-frame-pointer
COMMON_LDFLAGS		=	-g $(FPIC) -Wl,--eh-frame-hdr -L$(ZLIBDIR) -lm
DBG_LDFLAGS		=	$(COMMON_LDFLAGS)
OPT_LDFLAGS		=	$(COMMON_LDFLAGS) -O3 -fno-omit-frame-pointer

COMM_FLEX_FLAGS         =       -d
OPT_FLEXFLAGS           =       $(COMM_FLEX_FLAGS)
DBG_FLEXFLAGS           =       $(COMM_FLEX_FLAGS) -t


ifneq ($(strip $(NOBOOST)),)
  EXTRA_CFLAGS		=	-DZI_NO_BOOST
  EXTRA_CXXFLAGS	=	-DZI_NO_BOOST
  EXTRA_LDFLAGS		=	-DZI_NO_BOOST
endif


ifneq ($(strip $(OPT)),)
  CFLAGS	=	$(OPT_CFLAGS) $(EXTRA_CFLAGS)
  CXXFLAGS	=	$(OPT_CXXFLAGS) $(EXTRA_CXXFLAGS)
  LDFLAGS	=	$(OPT_LDFLAGS) $(EXTRA_LDFLAGS)
else
  CFLAGS	=	$(DBG_CFLAGS) $(EXTRA_CFLAGS)
  CXXFLAGS	=	$(DBG_CXXFLAGS) $(EXTRA_CXXFLAGS)
  LDFLAGS	=	$(DBG_LDFLAGS) $(EXTRA_LDFLAGS)
endif



# dependency files for c++
$(BINDIR)/%.d: ../%.cpp
	$(MKDIR) -p $(dir $@)
	$(CXX) $(CPP_DEPFLAGS) -MF $@ $<

# dependency files for c++
$(BINDIR)/%.d: ./%.cpp
	$(MKDIR) -p $(dir $@)
	$(CXX) $(CPP_DEPFLAGS) -MF $@ $<

# c++
$(BINDIR)/%.o: ../%.cpp
	$(ECHO) "[CXX] compiling $<"
	$(MKDIR) -p $(dir $@)
	$(CXX) -c $(CXXFLAGS) -DZUNIT_NOT_STANDALONE -o $@ $<
	$(MV) -f "$(@:.o=.T)" "$(@:.o=.d)"

# c++
$(BINDIR)/%.o: ./%.cpp
	$(ECHO) "[CXX] compiling $<"
	$(MKDIR) -p $(dir $@)
	$(CXX) -c $(CXXFLAGS) -DZUNIT_NOT_STANDALONE -o $@ $<
	$(MV) -f "$(@:.o=.T)" "$(@:.o=.d)"

.PHONY: all
all:

.PHONY: tidy
tidy:
	$(ECHO) Tidy...
	$(AT)touch ../tmp.tmp~
	$(AT)touch ..//tmp.tmp#
	$(AT)find ../ | grep "~$$" | xargs rm -rf
	$(AT)find ../ | grep "#"   | xargs rm -rf

.PHONY: clean
clean:
	$(ECHO) Cleaning...
	$(RM) -rf $(BINDIR) $(GENDIR)

.PHONY: remake
remake: clean all

.PHONY: runtests
runtests:
