#!/usr/bin/make -f

# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

export DEB_BUILD_MAINT_OPTIONS = hardening=+all
DPKG_EXPORT_BUILDFLAGS = 1

include /usr/share/dpkg/architecture.mk
include /usr/share/dpkg/buildflags.mk
include /usr/share/dpkg/pkg-info.mk

# Enable parallel builds.
NUMJOBS = 1
ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
  NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
  MAKEFLAGS += -j$(NUMJOBS)
endif

# Modules not in the "main" kamailio package:
EXCLUDED_MODULES =

# Extra modules to skip, because they are not compilable now:
# - regardless if they go to the main kamailio package or to some module
#   package, they will be excluded from compile and install of all.
EXTRA_EXCLUDED_MODULES += bdb
EXTRA_EXCLUDED_MODULES += dbtext
EXTRA_EXCLUDED_MODULES += dnssec
EXTRA_EXCLUDED_MODULES += iptrtpproxy
EXTRA_EXCLUDED_MODULES += java
EXTRA_EXCLUDED_MODULES += mi_xmlrpc
EXTRA_EXCLUDED_MODULES += oracle
EXTRA_EXCLUDED_MODULES += pa
EXTRA_EXCLUDED_MODULES += purple

# Module groups that are packaged in seperate packages (with the name
# kamailio-$(group_name)-modules).
# Note: the order is important (should be in dependency order, the one
# on which other depend first)
PACKAGE_GROUPS += mysql
PACKAGE_GROUPS += postgres
PACKAGE_GROUPS += berkeley
PACKAGE_GROUPS += unixodbc
PACKAGE_GROUPS += radius
PACKAGE_GROUPS += presence
PACKAGE_GROUPS += ldap
PACKAGE_GROUPS += xml
PACKAGE_GROUPS += perl
PACKAGE_GROUPS += utils
PACKAGE_GROUPS += lua
PACKAGE_GROUPS += memcached
PACKAGE_GROUPS += carrierroute
PACKAGE_GROUPS += snmpstats
PACKAGE_GROUPS += xmpp
PACKAGE_GROUPS += cpl
PACKAGE_GROUPS += redis
PACKAGE_GROUPS += geoip
PACKAGE_GROUPS += geoip2
PACKAGE_GROUPS += sqlite
PACKAGE_GROUPS += ruby
PACKAGE_GROUPS += ims
PACKAGE_GROUPS += sctp
PACKAGE_GROUPS += tls
PACKAGE_GROUPS += outbound
PACKAGE_GROUPS += websocket
PACKAGE_GROUPS += autheph
PACKAGE_GROUPS += cnxcc
PACKAGE_GROUPS += erlang
PACKAGE_GROUPS += systemd
PACKAGE_GROUPS += phonenum
PACKAGE_GROUPS += mongodb
PACKAGE_GROUPS += rabbitmq
PACKAGE_GROUPS += python3
PACKAGE_GROUPS += mqtt
PACKAGE_GROUPS += lwsc
PACKAGE_GROUPS += nats

# Module groups to be packaged onto kamailio-extra-modules.
EXTRA_GROUPS += ev
EXTRA_GROUPS += gzcompress
EXTRA_GROUPS += jansson
EXTRA_GROUPS += uuid

# Mono not on all arches
ifneq ("$(wildcard /usr/share/mono/mono-archs.make)","")
PACKAGE_GROUPS += mono
else
EXCLUDED_MODULES += mono
endif

# libsecsipid not on all arches
ifneq ("$(wildcard /usr/share/doc/libsecsipid-dev/copyright)","")
PACKAGE_GROUPS += secsipid
else
EXCLUDED_MODULES += secsipid
endif

# FTBFS on kfreebsd
LINUX_MODULES += json
LINUX_MODULES += kazoo
ifeq ($(DEB_HOST_ARCH_OS),linux)
PACKAGE_GROUPS += $(LINUX_MODULES)
else
EXCLUDED_MODULES += $(LINUX_MODULES)
endif

# select radius lib
ifeq ($(shell [ -f /usr/include/radcli/radcli.h ] && echo 1 || echo 0),1)
export RADCLI = 1
else
export FREERADIUS = 1
endif

# FTBFS on powerpcspe because of AltiVec assumption #729635.
ifeq ($(DEB_HOST_ARCH),powerpcspe)
export NOALTIVEC = 1
endif

D = $(CURDIR)/debian/$(DEB_SOURCE)

# Name of libdir in the path for libraries (e.g., the multiarch triplet).
export LIBDIR ?= lib/$(DEB_HOST_MULTIARCH)

# Directories with possible duplicate libraries (that should be deleted
# from current module* packages).
DUP_LIBS_DIRS = $(D)/usr/$(LIBDIR)/kamailio \
                $(D)-db-modules/usr/$(LIBDIR)/kamailio

# CFLAGS + CPPFLAGS -> CC_EXTRA_OPTS
CC_EXTRA_OPTS := $(shell dpkg-buildflags --get CPPFLAGS)
CC_EXTRA_OPTS += $(shell dpkg-buildflags --get CFLAGS)
CXXFLAGS := $(shell dpkg-buildflags --get CXXFLAGS)
# LDFLAGS -> LD_EXTRA_OPTS
LD_EXTRA_OPTS := $(shell dpkg-buildflags --get LDFLAGS)

# https://wiki.debian.org/ReproducibleBuilds/
CC_EXTRA_OPTS += -DVERSION_NODATE

BUILD_MODULES   := $(addprefix build_,   $(PACKAGE_GROUPS) $(EXTRA_GROUPS))
INSTALL_MODULES := $(addprefix install_, $(PACKAGE_GROUPS))
INSTALL_EXTRA   := $(addprefix install_, $(EXTRA_GROUPS))

.PHONY: $(BUILD_MODULES) $(INSTALL_MODULES) $(INSTALL_EXTRA)
test_build_all-stamp: configure-stamp
	$(MAKE) all quiet=verbose
	touch test_build_all-stamp

$(BUILD_MODULES): test_build_all-stamp
	$(MAKE) every-module group_include="k$(subst build_,,$@)" quiet=verbose

test_install_all-stamp: test_build_all-stamp
	$(MAKE) install quiet=verbose LIBDIR=$(LIBDIR) group_include="kstandard"
	touch test_install_all-stamp

$(INSTALL_MODULES): test_install_all-stamp
	$(MAKE) install-modules-all \
	  quiet=verbose \
	  LIBDIR=$(LIBDIR) \
	  BASEDIR=$(D)-$(subst install_,,$@)-modules \
	  cfg_prefix=$(D)-$(subst install_,,$@)-modules \
	  doc-dir=share/doc/$(DEB_SOURCE)-$(subst install_,,$@)-modules \
	  group_include="k$(subst install_,,$@)"
	# Eliminate duplicate libs.
	for d in $(DUP_LIBS_DIRS); do \
	  test "$$d" != "$(D)-$${module}-modules/usr/$(LIBDIR)/kamailio" && \
	  for r in `find $$d -name 'lib*' | xargs`; do \
	    echo "removing $(subst install_,,$@) lib `basename $$r` present also in $$d"; \
	    rm -f $(D)-$(subst install_,,$@)-modules/usr/$(LIBDIR)/kamailio/`basename "$$r"`; \
	  done ; \
	done
	# clean empty dirs
	find $(D)-$(subst install_,,$@)-modules -depth -empty -type d -exec rmdir {} \;

$(INSTALL_EXTRA): test_install_all-stamp
	$(MAKE) install-modules-all \
	  quiet=verbose \
	  LIBDIR=$(LIBDIR) \
	  BASEDIR=$(D)-extra-modules \
	  cfg_prefix=$(D)-extra-modules \
	  doc-dir=share/doc/$(DEB_SOURCE)-extra-modules \
	  group_include="k$(subst install_,,$@)"
	# Eliminate duplicate extra libs.
	for d in $(DUP_LIBS_DIRS); do \
	  test "$$d" != "$(D)-extra-modules/usr/$(LIBDIR)/kamailio" && \
	  for r in `find $$d -name 'lib*' | xargs`; do \
	    echo "removing extra lib `basename $$r` present also in $$d"; \
	    rm -f $(D)-extra-modules/usr/$(LIBDIR)/kamailio/`basename "$$r"`; \
	  done ; \
	done
	# clean empty dirs
	find $(D)-extra-modules -depth -empty -type d -exec rmdir {} \;

%:
	dh $@

override_dh_auto_configure: configure-stamp
configure-stamp:
	$(MAKE) cfg \
	  quiet=verbose \
	  prefix=/usr \
	  cfg_prefix=$(D) \
	  cfg_target=/etc/kamailio/ \
	  FLAVOUR=kamailio \
	  BASEDIR=$(D) \
	  CC_EXTRA_OPTS="$(CC_EXTRA_OPTS)" \
	  LD_EXTRA_OPTS="$(LD_EXTRA_OPTS)" \
	  skip_modules="$(EXCLUDED_MODULES) $(EXTRA_EXCLUDED_MODULES)" \
	  group_include="kstandard"
	touch configure-stamp

override_dh_auto_build: $(BUILD_MODULES)

override_dh_auto_clean:
	if [ -r autover.h -a ! -r debian/autover.h ]; then cp -a autover.h debian/; fi
	dh_auto_clean -- maintainer-clean
	if [ -r debian/autover.h -a ! -r autover.h ]; then mv debian/autover.h .; fi
	rm -f configure-stamp test_build_all-stamp test_install_all-stamp

override_dh_auto_install: $(INSTALL_MODULES) $(INSTALL_EXTRA)
	# Move binaries of kamailio-berkeley-modules to kamailio-berkeley-bin.
	mkdir -p $(D)-berkeley-bin/usr/
	mv $(D)-berkeley-modules/usr/sbin \
	   $(D)-berkeley-bin/usr/
	# remove if empty
	-rm -r $(D)/usr/share/man/man7/

override_dh_installexamples:
	dh_installexamples -Xobsoleted -Xsr

override_dh_installchangelogs:
	dh_installchangelogs ChangeLog

override_dh_installdocs:
	dh_installdocs -A doc/misc/AUTHORS
