# USE_OT     : enable the OpenTracing filter
# OT_DEBUG   : compile the OpenTracing filter in debug mode
# OT_INC     : force the include path to libopentracing-c-wrapper
# OT_LIB     : force the lib path to libopentracing-c-wrapper
# OT_RUNPATH : add libopentracing-c-wrapper RUNPATH to haproxy executable

OT_DEFINE    =
OT_CFLAGS    =
OT_LDFLAGS   =
OT_DEBUG_EXT =
OTC_WRAPPER  = opentracing-c-wrapper

ifneq ($(OT_DEBUG),)
OT_DEBUG_EXT = _dbg
OT_DEFINE    = -DDEBUG_OT
endif

ifeq ($(OT_INC),)
OT_CFLAGS = $(shell pkg-config --silence-errors --cflags $(OTC_WRAPPER)$(OT_DEBUG_EXT))
else
ifneq ($(wildcard $(OT_INC)/$(OTC_WRAPPER)/.*),)
OT_CFLAGS = -I$(OT_INC) $(if $(OT_DEBUG),-DOTC_DBG_MEM)
endif
endif

ifeq ($(OT_CFLAGS),)
$(error OpenTracing C wrapper : can't find headers)
endif

ifeq ($(OT_LIB),)
OT_LDFLAGS = $(shell pkg-config --silence-errors --libs $(OTC_WRAPPER)$(OT_DEBUG_EXT))
else
ifneq ($(wildcard $(OT_LIB)/lib$(OTC_WRAPPER).*),)
OT_LDFLAGS = -L$(OT_LIB) -l$(OTC_WRAPPER)$(OT_DEBUG_EXT)
ifneq ($(OT_RUNPATH),)
OT_LDFLAGS += -Wl,--rpath,$(OT_LIB)
endif
endif
endif

ifeq ($(OT_LDFLAGS),)
$(error OpenTracing C wrapper : can't find library)
endif

OPTIONS_OBJS += \
	addons/ot/src/cli.o         \
	addons/ot/src/conf.o        \
	addons/ot/src/event.o       \
	addons/ot/src/filter.o      \
	addons/ot/src/group.o       \
	addons/ot/src/http.o        \
	addons/ot/src/opentracing.o \
	addons/ot/src/parser.o      \
	addons/ot/src/pool.o        \
	addons/ot/src/scope.o       \
	addons/ot/src/util.o        \
	addons/ot/src/vars.o

OPTIONS_CFLAGS  += $(OT_CFLAGS) -Iaddons/ot/include
OPTIONS_LDFLAGS += $(OT_LDFLAGS)
OPTIONS_CFLAGS  += $(OT_DEFINE)
