OUTNAME	= libnfproxy.a
BASEDIR	=.
OUTDIR	=./build
OBJDIR	=./build_tmp
SRCDIR	=$(BASEDIR)
OUTLIB	= $(OUTDIR)/$(OUTNAME)

SRC_LIST	=$(shell find $(SRCDIR) -maxdepth 2 -name "*.cpp")
OBJ_LIST	=$(addprefix $(OBJDIR)/,$(notdir $(addsuffix .o, $(basename $(SRC_LIST)))))
DEP_LIST	=$(OBJ_LIST:.o=.d)

# Sources may be located in subdirectories (find -maxdepth 2)
vpath %.cpp $(sort $(dir $(SRC_LIST)))

CXX	= g++
INCLUDES	=$(BASEDIR) $(BASEDIR)/../../../include $(BASEDIR)/.. $(BASEDIR)/../..
CPPFLAGS	= $(addprefix -I,$(INCLUDES))
DEPFLAGS	= -MMD -MP
# -U first: some toolchains predefine _FORTIFY_SOURCE
CXXFLAGS	= -std=gnu++11 -O2 -g -fPIC -pthread -Wall -Wextra -Wformat=2 -Werror=format-security \
		  -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong

LIBS		= 
LIB_DIR		=

AR = ar
ARFLAGS = rcs

ifeq ($(LOGS),1)
CPPFLAGS += -D_RELEASE_LOG -D_DEBUG
endif

ifeq ($(NO_IPV6_NAT),1)
CPPFLAGS += -DNO_IPV6_NAT
endif

ifeq ($(CHECK_DIR_OWNER),1)
CPPFLAGS += -DNFRULES_CHECK_DIR_OWNER
endif

ifeq ($(C_API),1)
CPPFLAGS += -D_C_API
endif

BUILD_CMD=  if [ -d "$$dir" ]; then \
	    (	cd $$dir && echo "making $$target in $$dir..." && \
		$(MAKE) TOP=.. DIR=$$dir $$target \
	    ) || exit 1; \
	    fi
RECURSIVE_BUILD_CMD=for dir in $(DIRS); do $(BUILD_CMD); done

.PHONY: all clean mkdirs

all: $(OUTLIB)

mkdirs: | $(OUTDIR) $(OBJDIR)

$(OUTDIR) $(OBJDIR):
	mkdir -p $@

clean: 
	rm -f $(OBJDIR)/*.o $(OBJDIR)/*.d
	rm -f $(OUTLIB)

$(OBJDIR)/%.o: %.cpp | $(OBJDIR)
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(DEPFLAGS) -o $@ -c $<

$(OUTLIB): $(OBJ_LIST) | $(OUTDIR)
	rm -f $@
	$(AR) $(ARFLAGS) $@ $(OBJ_LIST) 

-include $(DEP_LIST)
