Squashed 'third_party/rawrtc/re/' content from commit f3163ce8b

Change-Id: I6a235e6ac0f03269d951026f9d195da05c40fdab
git-subtree-dir: third_party/rawrtc/re
git-subtree-split: f3163ce8b526a13b35ef71ce4dd6f43585064d8a
diff --git a/mk/re.mk b/mk/re.mk
new file mode 100644
index 0000000..3347945
--- /dev/null
+++ b/mk/re.mk
@@ -0,0 +1,829 @@
+#
+# re.mk - common make rules
+#
+# Copyright (C) 2010 Creytiv.com
+#
+# Imported variables:
+#
+#   ARCH           Target architecture
+#   CC             Compiler
+#   CROSS_COMPILE  Cross-compiler prefix (optional)
+#   EXTRA_CFLAGS   Extra compiler flags appended to CFLAGS
+#   EXTRA_LFLAGS   Extra linker flags appended to LFLAGS
+#   GCOV           If non-empty, enable GNU Coverage testing
+#   GPROF          If non-empty, enable GNU Profiling
+#   OPT_SIZE       If non-empty, optimize for size
+#   OPT_SPEED      If non-empty, optimize for speed
+#   PROJECT        Project name
+#   RELEASE        Release build
+#   SYSROOT        System root of library and include files
+#   SYSROOT_ALT    Alternative system root of library and include files
+#   USE_OPENSSL    If non-empty, link to libssl library
+#   USE_ZLIB       If non-empty, link to libz library
+#   VERSION        Version number
+#
+# Exported variables:
+#
+#   APP_LFLAGS     Linker flags for applications using modules
+#   BIN_SUFFIX     Suffix for binary executables
+#   CC             Compiler
+#   CCACHE         Compiler ccache tool
+#   CFLAGS         Compiler flags
+#   DFLAGS         Dependency generator flags
+#   LFLAGS         Common linker flags
+#   LIBS           Libraries to link against
+#   LIB_SUFFIX     Suffix for shared libraries
+#   MOD_LFLAGS     Linker flags for dynamic modules
+#   MOD_SUFFIX     Suffix for dynamic modules
+#   SH_LFLAGS      Linker flags for shared libraries
+#   USE_TLS        Defined if TLS is available
+#   USE_DTLS       Defined if DTLS is available
+#
+
+
+ifneq ($(RELEASE),)
+CFLAGS  += -DRELEASE
+OPT_SPEED=1
+endif
+
+
+# Default system root
+ifeq ($(SYSROOT),)
+SYSROOT := /usr
+endif
+
+# Alternative Systemroot
+ifeq ($(SYSROOT_ALT),)
+SYSROOT_ALT := $(shell [ -d /sw/include ] && echo "/sw")
+endif
+ifeq ($(SYSROOT_ALT),)
+SYSROOT_ALT := $(shell [ -d /opt/local/include ] && echo "/opt/local")
+endif
+
+ifneq ($(SYSROOT_ALT),)
+CFLAGS  += -I$(SYSROOT_ALT)/include
+LFLAGS  += -L$(SYSROOT_ALT)/lib
+endif
+
+
+##############################################################################
+#
+# Compiler section
+#
+# find compiler name & version
+
+ifeq ($(CC),)
+	CC := gcc
+endif
+ifeq ($(CC),cc)
+	CC := gcc
+endif
+LD := $(CC)
+CC_LONGVER := $(shell if $(CC) -v 2>/dev/null; then \
+						$(CC) -v 2>&1 ;\
+					else \
+						$(CC) -V 2>&1 ; \
+					fi )
+
+# find-out the compiler's name
+
+ifneq (,$(findstring gcc, $(CC_LONGVER)))
+	CC_NAME := gcc
+	CC_VER := $(word 1,$(CC)) $(shell $(CC) - --version|head -n 1|\
+		cut -d" " -f 3|\
+		sed -e 's/^.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/'\
+		-e 's/^[^0-9].*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/')
+	# sun sed is a little brain damaged => this complicated expression
+	MKDEP := $(CC) -MM
+	#transform gcc version into 2.9x, 3.x or 4.x
+	CC_SHORTVER := $(shell echo "$(CC_VER)" | cut -d" " -f 2| \
+			 sed -e 's/[^0-9]*-\(.*\)/\1/'| \
+			 sed -e 's/2\.9.*/2.9x/' -e 's/3\.[0-3]\..*/3.0/' -e \
+			 	's/3\.[0-3]/3.0/' -e 's/3\.[4-9]\..*/3.4/' -e\
+				's/3\.[4-9]/3.4/' -e 's/4\.[0-9]\..*/4.x/' -e\
+				's/4\.[0-9]/4.x/' )
+endif
+
+ifeq ($(CC_NAME),)
+ifneq (,$(findstring clang, $(CC_LONGVER)))
+	CC_NAME := clang
+	CC_SHORTVER := $(shell echo "$(CC_LONGVER)"|head -n 1| \
+		sed -e 's/.*version \([0-9]\.[0-9]\).*/\1/g' )
+	CC_VER := $(CC) $(CC_SHORTVER)
+	MKDEP := $(CC) -MM
+endif
+endif
+
+ifeq ($(CC_NAME),)
+ifneq (, $(findstring Sun, $(CC_LONGVER)))
+	CC_NAME := suncc
+	CC_SHORTVER := $(shell echo "$(CC_LONGVER)"|head -n 1| \
+					sed -e 's/.*\([0-9]\.[0-9]\).*/\1/g' )
+	CC_VER := $(CC) $(CC_SHORTVER)
+	MKDEP  := $(CC) -xM1
+endif
+endif
+
+ifeq ($(CC_NAME),)
+ifneq (, $(findstring Intel(R) C++ Compiler, $(CC_LONGVER)))
+	# very nice: gcc compatible
+	CC_NAME := icc
+	CC_FULLVER := $(shell echo "$(CC_LONGVER)"|head -n 1| \
+			sed -e 's/.*Version \([0-9]\.[0-9]\.[0-9]*\).*/\1/g')
+	CC_SHORTVER := $(shell echo "$(CC_FULLVER)" | cut -d. -f1,2 )
+	CC_VER := $(CC) $(CC_FULLVER)
+	MKDEP  := $(CC) -MM
+endif
+endif
+
+
+ifeq (,$(CC_NAME))
+#not found
+	CC_NAME     := $(CC)
+	CC_SHORTVER := unknown
+	CC_VER      := unknown
+	MKDEP       := gcc -MM
+$(warning	Unknown compiler $(CC)\; supported compilers: \
+			gcc, clang, sun cc, intel icc )
+endif
+
+
+# Compiler warning flags
+CFLAGS	+= -Wall
+CFLAGS	+= -Wmissing-declarations
+CFLAGS	+= -Wmissing-prototypes
+CFLAGS	+= -Wstrict-prototypes
+CFLAGS	+= -Wbad-function-cast
+CFLAGS	+= -Wsign-compare
+CFLAGS	+= -Wnested-externs
+CFLAGS	+= -Wshadow
+CFLAGS	+= -Waggregate-return
+CFLAGS	+= -Wcast-align
+
+
+ifeq ($(CC_SHORTVER),4.x)
+CFLAGS	+= -Wextra
+CFLAGS	+= -Wold-style-definition
+CFLAGS	+= -Wdeclaration-after-statement
+endif
+
+CFLAGS  += -g
+ifneq ($(OPT_SPEED),)
+CFLAGS  += -O3  # Optimize for speed - takes longer to compile!
+OPTIMIZE := 1
+endif
+ifneq ($(OPT_SIZE),)
+CFLAGS  += -Os  # Optimize for size - takes longer to compile!
+OPTIMIZE := 1
+endif
+
+ifneq ($(OPTIMIZE),)
+CFLAGS	+= -Wuninitialized
+ifneq ($(CC_SHORTVER), 2.9x)
+CFLAGS	+= -Wno-strict-aliasing
+endif
+endif
+
+# Compiler dependency flags
+ifeq ($(CC_SHORTVER), 2.9x)
+	DFLAGS		= -MD
+else
+	DFLAGS		= -MD -MF $(@:.o=.d) -MT $@
+endif
+
+
+##############################################################################
+#
+# OS section
+#
+
+MACHINE   := $(shell $(CC) -dumpmachine)
+
+ifeq ($(CROSS_COMPILE),)
+OS        := $(shell uname -s | sed -e s/SunOS/solaris/ | tr "[A-Z]" "[a-z]")
+endif
+
+
+ifneq ($(strip $(filter i386-mingw32 i486-mingw32 i586-mingw32msvc \
+	i686-w64-mingw32 x86_64-w64-mingw32 mingw32, \
+	$(MACHINE))),)
+	OS   := win32
+ifeq ($(MACHINE), mingw32)
+	CROSS_COMPILE :=
+endif
+endif
+
+
+# default
+LIB_SUFFIX	:= .so
+MOD_SUFFIX	:= .so
+BIN_SUFFIX	:=
+
+ifeq ($(OS),solaris)
+	CFLAGS		+= -fPIC -DSOLARIS
+	LIBS		+= -ldl -lresolv -lsocket -lnsl
+	LFLAGS		+= -fPIC
+	SH_LFLAGS	+= -G
+	MOD_LFLAGS	+=
+	APP_LFLAGS	+=
+	AR		:= ar
+	AFLAGS		:= cru
+endif
+ifeq ($(OS),linux)
+	CFLAGS		+= -fPIC -DLINUX
+	LIBS		+= -ldl
+	LFLAGS		+= -fPIC
+	SH_LFLAGS	+= -shared
+	MOD_LFLAGS	+=
+	APP_LFLAGS	+= -rdynamic
+	AR		:= ar
+	AFLAGS		:= crD
+endif
+ifeq ($(OS),gnu)
+	CFLAGS		+= -fPIC -DGNU
+	LIBS		+= -ldl
+	LFLAGS		+= -fPIC
+	SH_LFLAGS	+= -shared
+	MOD_LFLAGS	+=
+	APP_LFLAGS	+= -rdynamic
+	AR		:= ar
+	AFLAGS		:= cru
+endif
+ifeq ($(OS),darwin)
+	CFLAGS		+= -fPIC -dynamic -DDARWIN
+ifneq (,$(findstring Apple, $(CC_LONGVER)))
+	CFLAGS		+= -Wshorten-64-to-32
+endif
+	DFLAGS		:= -MD
+	LIBS		+= -lresolv
+	LFLAGS		+= -fPIC
+	SH_LFLAGS	+= -dynamiclib
+ifeq ($(CC_NAME),gcc)
+	SH_LFLAGS	+= -dylib
+endif
+ifneq ($(VERSION),)
+	SH_LFLAGS	+= -current_version $(VERSION)
+	SH_LFLAGS	+= -compatibility_version $(VERSION)
+endif
+	MOD_LFLAGS	+= -undefined dynamic_lookup
+	APP_LFLAGS	+=
+	AR		:= ar
+	AFLAGS		:= cru
+	LIB_SUFFIX	:= .dylib
+	HAVE_KQUEUE	:= 1
+endif
+ifeq ($(OS),netbsd)
+	CFLAGS		+= -fPIC -DNETBSD
+	LFLAGS		+= -fPIC
+	SH_LFLAGS	+= -shared
+	MOD_LFLAGS	+=
+	APP_LFLAGS	+= -rdynamic
+	AR		:= ar
+	AFLAGS		:= cru
+	HAVE_KQUEUE	:= 1
+endif
+ifeq ($(OS),freebsd)
+	CFLAGS		+= -fPIC -DFREEBSD
+	LFLAGS		+= -fPIC
+	SH_LFLAGS	+= -shared
+	MOD_LFLAGS	+=
+	APP_LFLAGS	+= -rdynamic
+	AR		:= ar
+	AFLAGS		:= cru
+	HAVE_KQUEUE	:= 1
+endif
+ifeq ($(OS),gnu/kfreebsd)
+	CFLAGS		+= -fPIC -DKFREEBSD -D_GNU_SOURCE
+	LFLAGS		+= -fPIC
+	SH_LFLAGS	+= -shared
+	MOD_LFLAGS	+=
+	APP_LFLAGS	+= -rdynamic
+	AR		:= ar
+	AFLAGS		:= cru
+	HAVE_KQUEUE	:= 1
+endif
+ifeq ($(OS),dragonfly)
+	CFLAGS		+= -fPIC -DDRAGONFLY
+	LFLAGS		+= -fPIC
+	SH_LFLAGS	+= -shared
+	MOD_LFLAGS	+=
+	APP_LFLAGS	+= -rdynamic
+	AR		:= ar
+	AFLAGS		:= cru
+	HAVE_KQUEUE	:= 1
+endif
+ifeq ($(OS),openbsd)
+	CFLAGS		+= -fPIC -DOPENBSD
+	LFLAGS		+= -fPIC
+	SH_LFLAGS	+= -shared
+	MOD_LFLAGS	+=
+	APP_LFLAGS	+= -rdynamic
+	AR		:= ar
+	AFLAGS		:= cru
+	HAVE_KQUEUE	:= 1
+	HAVE_ARC4RANDOM	:= 1
+endif
+ifeq ($(OS),win32)
+	CFLAGS		+= -DWIN32 -D_WIN32_WINNT=0x0501 -D__ssize_t_defined
+	LIBS		+= -lwsock32 -lws2_32 -liphlpapi
+	LFLAGS		+=
+	SH_LFLAGS	+= -shared
+	MOD_LFLAGS	+=
+	APP_LFLAGS	+= -Wl,--export-all-symbols
+	AR		:= ar
+	AFLAGS		:= cru
+	CROSS_COMPILE	?= $(MACHINE)-
+	RANLIB		:= $(CROSS_COMPILE)ranlib
+	LIB_SUFFIX	:= .dll
+	MOD_SUFFIX	:= .dll
+	BIN_SUFFIX	:= .exe
+	SYSROOT		:= /usr/$(MACHINE)/
+endif
+
+CFLAGS	+= -DOS=\"$(OS)\"
+
+ifeq ($(CC_SHORTVER),2.9x)
+CFLAGS  += -Wno-long-long
+else
+CFLAGS  += -std=c99
+PEDANTIC := 1
+endif # CC_SHORTVER
+
+ifneq ($(PEDANTIC),)
+CFLAGS  += -pedantic
+endif
+
+
+ifeq ($(OS),)
+$(warning Could not detect OS)
+endif
+
+
+##############################################################################
+#
+# Architecture section
+#
+
+
+ifeq ($(ARCH),)
+ifeq ($(CC_NAME),$(filter $(CC_NAME),gcc clang))
+PREDEF	:= $(shell $(CC) -dM -E -x c $(EXTRA_CFLAGS) $(CFLAGS) /dev/null)
+
+ifneq ($(strip $(filter i386 __i386__ __i386 _M_IX86 __X86__ _X86_, \
+	$(PREDEF))),)
+ARCH	:= i386
+endif
+
+ifneq ($(strip $(filter __i486__,$(PREDEF))),)
+ARCH	:= i486
+endif
+
+ifneq ($(strip $(filter __i586__,$(PREDEF))),)
+ARCH	:= i586
+endif
+
+ifneq ($(strip $(filter __i686__ ,$(PREDEF))),)
+ARCH	:= i686
+endif
+
+ifneq ($(strip $(filter __amd64__ __amd64 __x86_64__ __x86_64, \
+	$(PREDEF))),)
+ARCH	:= x86_64
+endif
+
+ifneq ($(strip $(filter __arm__ __thumb__,$(PREDEF))),)
+
+ifneq ($(strip $(filter __ARM_ARCH_6__,$(PREDEF))),)
+ARCH	:= arm6
+else
+ARCH	:= arm
+endif
+
+endif
+
+ifneq ($(strip $(filter __arm64__ ,$(PREDEF))),)
+ARCH   := arm64
+endif
+
+ifneq ($(strip $(filter __mips__ __mips, $(PREDEF))),)
+ARCH	:= mips
+endif
+
+ifneq ($(strip $(filter __powerpc __powerpc__ __POWERPC__ __ppc__ \
+	_ARCH_PPC, $(PREDEF))),)
+ARCH	:= ppc
+endif
+
+ifneq ($(strip $(filter __ppc64__ _ARCH_PPC64 , $(PREDEF))),)
+ARCH	:= ppc64
+endif
+
+ifneq ($(strip $(filter __sparc__ __sparc __sparcv8 , $(PREDEF))),)
+
+ifneq ($(strip $(filter __sparcv9 __sparc_v9__ , $(PREDEF))),)
+ARCH	:= sparc64
+else
+ARCH	:= sparc
+endif
+
+endif
+
+endif
+endif
+
+
+ifeq ($(ARCH),)
+$(warning Could not detect ARCH)
+endif
+
+
+CFLAGS	+= -DARCH=\"$(ARCH)\"
+
+ifeq ($(ARCH),mipsel)
+CFLAGS += -march=mips32
+endif
+
+
+##############################################################################
+#
+# External libraries section
+#
+
+USE_OPENSSL := $(shell [ -f $(SYSROOT)/include/openssl/ssl.h ] || \
+	[ -f $(SYSROOT)/local/include/openssl/ssl.h ] || \
+	[ -f $(SYSROOT_ALT)/include/openssl/ssl.h ] && echo "yes")
+
+ifneq ($(USE_OPENSSL),)
+CFLAGS  += -DUSE_OPENSSL -DUSE_TLS
+LIBS    += -lssl -lcrypto
+USE_TLS := yes
+
+USE_OPENSSL_DTLS := $(shell [ -f $(SYSROOT)/include/openssl/dtls1.h ] || \
+	[ -f $(SYSROOT)/local/include/openssl/dtls1.h ] || \
+	[ -f $(SYSROOT_ALT)/include/openssl/dtls1.h ] && echo "yes")
+
+USE_OPENSSL_SRTP := $(shell [ -f $(SYSROOT)/include/openssl/srtp.h ] || \
+	[ -f $(SYSROOT)/local/include/openssl/srtp.h ] || \
+	[ -f $(SYSROOT_ALT)/include/openssl/srtp.h ] && echo "yes")
+
+ifneq ($(USE_OPENSSL_DTLS),)
+CFLAGS  += -DUSE_OPENSSL_DTLS -DUSE_DTLS
+USE_DTLS := yes
+endif
+
+ifneq ($(USE_OPENSSL_SRTP),)
+CFLAGS  += -DUSE_OPENSSL_SRTP -DUSE_DTLS_SRTP
+USE_DTLS_SRTP := yes
+endif
+
+USE_OPENSSL_AES		:= yes
+USE_OPENSSL_HMAC	:= yes
+
+endif
+
+
+USE_ZLIB    := $(shell [ -f $(SYSROOT)/include/zlib.h ] || \
+	[ -f $(SYSROOT)/local/include/zlib.h ] || \
+	[ -f $(SYSROOT_ALT)/include/zlib.h ] && echo "yes")
+
+ifneq ($(USE_ZLIB),)
+CFLAGS  += -DUSE_ZLIB
+LIBS    += -lz
+endif
+
+
+ifneq ($(OS),win32)
+
+HAVE_PTHREAD    := $(shell [ -f $(SYSROOT)/include/pthread.h ] && echo "1")
+ifneq ($(HAVE_PTHREAD),)
+HAVE_PTHREAD_RWLOCK := 1
+CFLAGS  += -DHAVE_PTHREAD
+HAVE_LIBPTHREAD := 1
+ifneq ($(HAVE_LIBPTHREAD),)
+LIBS	+= -lpthread
+endif
+endif
+
+ifneq ($(ARCH),mipsel)
+HAVE_GETIFADDRS := $(shell [ -f $(SYSROOT)/include/ifaddrs.h ] && echo "1")
+ifneq ($(HAVE_GETIFADDRS),)
+CFLAGS  += -DHAVE_GETIFADDRS
+endif
+endif
+
+HAVE_STRERROR_R	:= 1
+ifneq ($(HAVE_STRERROR_R),)
+CFLAGS += -DHAVE_STRERROR_R
+endif
+
+endif
+
+HAVE_GETOPT     := $(shell [ -f $(SYSROOT)/include/getopt.h ] && echo "1")
+ifneq ($(HAVE_GETOPT),)
+CFLAGS  += -DHAVE_GETOPT
+endif
+HAVE_INTTYPES_H := $(shell [ -f $(SYSROOT)/include/inttypes.h ] && echo "1")
+ifneq ($(HAVE_INTTYPES_H),)
+CFLAGS  += -DHAVE_INTTYPES_H
+endif
+HAVE_NET_ROUTE_H := $(shell [ -f $(SYSROOT)/include/net/route.h ] && echo "1")
+ifneq ($(HAVE_NET_ROUTE_H),)
+CFLAGS  += -DHAVE_NET_ROUTE_H
+endif
+HAVE_SYS_SYSCTL_H := \
+	$(shell [ -f $(SYSROOT)/include/sys/sysctl.h ] || \
+		[ -f $(SYSROOT)/include/$(MACHINE)/sys/sysctl.h ] \
+		&& echo "1")
+ifneq ($(HAVE_SYS_SYSCTL_H),)
+CFLAGS  += -DHAVE_SYS_SYSCTL_H
+endif
+
+CFLAGS  += -DHAVE_STDBOOL_H
+
+HAVE_INET6      := 1
+ifneq ($(HAVE_INET6),)
+CFLAGS  += -DHAVE_INET6
+endif
+
+ifeq ($(OS),win32)
+CFLAGS  += -DHAVE_SELECT
+CFLAGS  += -DHAVE_IO_H
+else
+HAVE_SYSLOG  := $(shell [ -f $(SYSROOT)/include/syslog.h ] && echo "1")
+HAVE_DLFCN_H := $(shell [ -f $(SYSROOT)/include/dlfcn.h ] && echo "1")
+ifneq ($(OS),darwin)
+HAVE_EPOLL   := $(shell [ -f $(SYSROOT)/include/sys/epoll.h ] || \
+			[ -f $(SYSROOT)/include/$(MACHINE)/sys/epoll.h ] \
+			&& echo "1")
+endif
+
+HAVE_RESOLV := $(shell [ -f $(SYSROOT)/include/resolv.h ] && echo "1")
+
+ifneq ($(HAVE_RESOLV),)
+CFLAGS  += -DHAVE_RESOLV
+endif
+ifneq ($(HAVE_SYSLOG),)
+CFLAGS  += -DHAVE_SYSLOG
+endif
+
+HAVE_INET_NTOP := 1
+
+CFLAGS  += -DHAVE_FORK
+
+ifneq ($(HAVE_INET_NTOP),)
+CFLAGS  += -DHAVE_INET_NTOP
+endif
+CFLAGS  += -DHAVE_PWD_H
+ifneq ($(OS),darwin)
+CFLAGS  += -DHAVE_POLL	# Darwin: poll() does not support devices
+HAVE_INET_PTON := 1
+endif
+ifneq ($(HAVE_INET_PTON),)
+CFLAGS  += -DHAVE_INET_PTON
+endif
+CFLAGS  += -DHAVE_SELECT -DHAVE_SELECT_H
+CFLAGS  += -DHAVE_SETRLIMIT
+CFLAGS  += -DHAVE_SIGNAL
+CFLAGS  += -DHAVE_SYS_TIME_H
+ifneq ($(HAVE_EPOLL),)
+CFLAGS  += -DHAVE_EPOLL
+endif
+ifneq ($(HAVE_KQUEUE),)
+CFLAGS  += -DHAVE_KQUEUE
+endif
+CFLAGS  += -DHAVE_UNAME
+CFLAGS  += -DHAVE_UNISTD_H
+CFLAGS  += -DHAVE_STRINGS_H
+endif
+
+ifneq ($(HAVE_ARC4RANDOM),)
+CFLAGS  += -DHAVE_ARC4RANDOM
+endif
+
+
+##############################################################################
+#
+# Misc tools section
+#
+CCACHE	:= $(shell [ -e /usr/bin/ccache ] 2>/dev/null \
+	|| [ -e /opt/local/bin/ccache ] \
+	&& echo "ccache")
+CFLAGS  += -DVERSION=\"$(VERSION)\"
+CFLAGS  += \
+	-DVER_MAJOR=$(VER_MAJOR) \
+	-DVER_MINOR=$(VER_MINOR) \
+	-DVER_PATCH=$(VER_PATCH)
+
+
+# Enable gcov Coverage testing
+#
+# - generated during build: .gcno files
+# - generated during exec:  .gcda files
+#
+ifneq ($(GCOV),)
+CFLAGS += -fprofile-arcs -ftest-coverage
+LFLAGS += -fprofile-arcs -ftest-coverage
+# Disable ccache
+CCACHE :=
+endif
+
+# gprof - GNU Profiling
+#
+# - generated during exec:  gmon.out
+#
+ifneq ($(GPROF),)
+CFLAGS += -pg
+LFLAGS += -pg
+# Disable ccache
+CCACHE :=
+endif
+
+CC	:= $(CCACHE) $(CC)
+CFLAGS	+= $(EXTRA_CFLAGS)
+LFLAGS	+= $(EXTRA_LFLAGS)
+
+BUILD   := build-$(ARCH)
+
+
+default:	all
+
+.PHONY: distclean
+distclean:
+	@rm -rf build* *core*
+	@rm -f *stamp $(BIN)
+	@rm -f `find . -name "*.[oda]"` `find . -name "*.so"`
+	@rm -f `find . -name "*~"` `find . -name "\.\#*"`
+	@rm -f `find . -name "*.orig"` `find . -name "*.rej"`
+	@rm -f `find . -name "*.previous"` `find . -name "*.gcov"`
+	@rm -f `find . -name "*.exe"` `find . -name "*.dll"`
+	@rm -f `find . -name "*.dylib"`
+
+.PHONY: info
+info:
+	@echo "info - $(PROJECT) version $(VERSION)"
+	@echo "  MODULES:       $(MODULES)"
+#	@echo "  SRCS:          $(SRCS)"
+	@echo "  MACHINE:       $(MACHINE)"
+	@echo "  ARCH:          $(ARCH)"
+	@echo "  OS:            $(OS)"
+	@echo "  BUILD:         $(BUILD)"
+	@echo "  CCACHE:        $(CCACHE)"
+	@echo "  CC:            $(CC_NAME) $(CC_SHORTVER)"
+	@echo "  CFLAGS:        $(CFLAGS)"
+	@echo "  DFLAGS:        $(DFLAGS)"
+	@echo "  LFLAGS:        $(LFLAGS)"
+	@echo "  SH_LFLAGS:     $(SH_LFLAGS)"
+	@echo "  MOD_LFLAGS:    $(MOD_LFLAGS)"
+	@echo "  APP_LFLAGS:    $(APP_LFLAGS)"
+	@echo "  LIBS:          $(LIBS)"
+	@echo "  LIBRE_MK:      $(LIBRE_MK)"
+	@echo "  LIBRE_INC:     $(LIBRE_INC)"
+	@echo "  LIBRE_SO:      $(LIBRE_SO)"
+	@echo "  USE_OPENSSL:   $(USE_OPENSSL)"
+	@echo "  USE_OPENSSL_AES:   $(USE_OPENSSL_AES)"
+	@echo "  USE_OPENSSL_HMAC:  $(USE_OPENSSL_HMAC)"
+	@echo "  USE_TLS:       $(USE_TLS)"
+	@echo "  USE_DTLS:      $(USE_DTLS)"
+	@echo "  USE_DTLS_SRTP: $(USE_DTLS_SRTP)"
+	@echo "  USE_ZLIB:      $(USE_ZLIB)"
+	@echo "  GCOV:          $(GCOV)"
+	@echo "  GPROF:         $(GPROF)"
+	@echo "  CROSS_COMPILE: $(CROSS_COMPILE)"
+	@echo "  SYSROOT:       $(SYSROOT)"
+	@echo "  SYSROOT_ALT:   $(SYSROOT_ALT)"
+	@echo "  LIB_SUFFIX:    $(LIB_SUFFIX)"
+	@echo "  MOD_SUFFIX:    $(MOD_SUFFIX)"
+	@echo "  BIN_SUFFIX:    $(BIN_SUFFIX)"
+
+
+##############################################################################
+#
+# Packaging section
+#
+TAR_SRC   := $(PROJECT)-$(VERSION)
+
+release:
+	@rm -rf ../$(TAR_SRC)
+	@svn export . ../$(TAR_SRC)
+	@if [ -f ../$(TAR_SRC)/mk/exclude ]; then \
+		cat ../$(TAR_SRC)/mk/exclude \
+			| sed 's|^|../$(TAR_SRC)/|' | xargs -t rm -rf ; \
+		rm -f ../$(TAR_SRC)/mk/exclude ; \
+	fi
+	@cd .. && rm -f $(TAR_SRC).tar.gz \
+		&& tar -zcf $(TAR_SRC).tar.gz $(TAR_SRC) \
+		&& echo "created release tarball `pwd`/$(TAR_SRC).tar.gz"
+
+tar:
+	@rm -rf ../$(TAR_SRC)
+	@svn export . ../$(TAR_SRC)
+	@cd .. && rm -f $(TAR_SRC).tar.gz \
+		&& tar -zcf $(TAR_SRC).tar.gz $(TAR_SRC) \
+		&& echo "created source tarball `pwd`/$(TAR_SRC).tar.gz"
+
+
+git_release:
+	git archive --format=tar --prefix=$(PROJECT)-$(VERSION)/ v$(VERSION) \
+		| gzip > ../$(PROJECT)-$(VERSION).tar.gz
+
+
+git_snapshot:
+	git archive --format=tar --prefix=$(PROJECT)-$(VERSION)/ HEAD \
+		| gzip > ../$(PROJECT)-$(VERSION).tar.gz
+
+
+# Debian
+.PHONY: deb
+deb:
+	dpkg-buildpackage -rfakeroot
+
+.PHONY: debclean
+debclean:
+	@rm -rf build-stamp configure-stamp debian/files debian/$(PROJECT) \
+		debian/lib$(PROJECT) debian/lib$(PROJECT)-dev debian/tmp \
+		debian/.debhelper debian/*.debhelper debian/*.debhelper.log \
+		debian/*.substvars
+
+# RPM
+RPM := $(shell [ -d /usr/src/rpm ] 2>/dev/null && echo "rpm")
+ifeq ($(RPM),)
+RPM := $(shell [ -d /usr/src/redhat ] 2>/dev/null && echo "redhat")
+endif
+.PHONY: rpm
+rpm:    tar
+	sudo cp ../$(PROJECT)-$(VERSION).tar.gz /usr/src/$(RPM)/SOURCES
+	sudo rpmbuild -ba rpm/$(PROJECT).spec
+
+
+##############################################################################
+#
+# Library and header files location section - in prioritised order
+#
+# - relative path
+# - local installation
+# - system installation
+#
+
+LIBRE_PATH := ../re
+
+# Include path
+LIBRE_INC := $(shell [ -f $(LIBRE_PATH)/include/re.h ] && \
+	echo "$(LIBRE_PATH)/include")
+ifeq ($(LIBRE_INC),)
+LIBRE_INC := $(shell [ -f /usr/local/include/re/re.h ] && \
+	echo "/usr/local/include/re")
+endif
+ifeq ($(LIBRE_INC),)
+LIBRE_INC := $(shell [ -f /usr/include/re/re.h ] && echo "/usr/include/re")
+endif
+
+# Library path
+LIBRE_SO  := $(shell [ -f $(LIBRE_PATH)/libre$(LIB_SUFFIX) ] \
+	&& echo "$(LIBRE_PATH)")
+ifeq ($(LIBRE_SO),)
+LIBRE_SO  := $(shell [ -f /usr/local/lib/libre$(LIB_SUFFIX) ] \
+	&& echo "/usr/local/lib")
+endif
+ifeq ($(LIBRE_SO),)
+LIBRE_SO  := $(shell [ -f /usr/lib/libre$(LIB_SUFFIX) ] && echo "/usr/lib")
+endif
+ifeq ($(LIBRE_SO),)
+LIBRE_SO  := $(shell [ -f /usr/lib64/libre$(LIB_SUFFIX) ] && echo "/usr/lib64")
+endif
+
+
+###############################################################################
+#
+# Clang section
+#
+
+CLANG_OPTIONS := -Iinclude -I$(LIBRE_INC) $(CFLAGS)
+CLANG_IGNORE  :=
+CLANG_SRCS    += $(filter-out $(CLANG_IGNORE), $(patsubst %,src/%,$(SRCS)))
+
+clang:
+	@clang --analyze $(CLANG_OPTIONS) $(CLANG_SRCS)
+	@rm -f *.plist
+
+
+###############################################################################
+#
+# Documentation section
+#
+DOX_DIR=../$(PROJECT)-dox
+DOX_TAR=$(PROJECT)-dox-$(VERSION)
+
+$(DOX_DIR):
+	@mkdir $@
+
+$(DOX_DIR)/Doxyfile: mk/Doxyfile Makefile
+	@cp $< $@
+	@perl -pi -e 's/PROJECT_NUMBER\s*=.*/PROJECT_NUMBER = $(VERSION)/' \
+	$(DOX_DIR)/Doxyfile
+
+.PHONY:
+dox:	$(DOX_DIR) $(DOX_DIR)/Doxyfile
+	@doxygen $(DOX_DIR)/Doxyfile 2>&1 | grep -v DEBUG_ ; true
+	@cd .. && rm -f $(DOX_TAR).tar.gz && \
+	tar -zcf $(DOX_TAR).tar.gz $(PROJECT)-dox > /dev/null && \
+	echo "Doxygen docs in `pwd`/$(DOX_TAR).tar.gz"