#!/usr/bin/make -f

include /usr/share/dpkg/architecture.mk

export DEB_BUILD_MAINT_OPTIONS=hardening=+all

NON_COHERENT_DMA_ARCHS = alpha arc armel armhf hppa m68k sh4

dh_params = --with python3 --builddirectory=build-deb

%:
	dh $@ $(dh_params)

override_dh_auto_clean:
	dh_auto_clean
	rm -rf build-deb
	for package in ibverbs-providers libibverbs-dev rdma-core; do \
		test ! -e debian/$$package.install.backup || mv debian/$$package.install.backup debian/$$package.install; \
	done

# Upstream wishes to use CMAKE_BUILD_TYPE=Release, and ensures that has a
# sensible basis of options (eg no -O3, including -g). Debian specific options
# come from CFLAGS as usual.
#
# Upstream encourages the use of Ninja to build the source, convince dh to use
# it until someone writes native support for dh+cmake+ninja.
DH_AUTO_CONFIGURE := "--" \
	             "-GNinja" \
		     "-DDISTRO_FLAVOUR=Debian" \
		     "-DCMAKE_BUILD_TYPE=Release" \
		     "-DCMAKE_INSTALL_SYSCONFDIR:PATH=/etc" \
		     "-DCMAKE_INSTALL_SYSTEMD_SERVICEDIR:PATH=/lib/systemd/system" \
		     "-DCMAKE_INSTALL_INITDDIR:PATH=/etc/init.d" \
		     "-DCMAKE_INSTALL_LIBEXECDIR:PATH=/usr/lib" \
		     "-DCMAKE_INSTALL_SHAREDSTATEDIR:PATH=/var/lib" \
		     "-DCMAKE_INSTALL_RUNDIR:PATH=/run" \
		     "-DCMAKE_INSTALL_UDEV_RULESDIR:PATH=/lib/udev/rules.d" \
		     "-DCMAKE_INSTALL_PERLDIR:PATH=/usr/share/perl5" \
		     "-DENABLE_STATIC=1" \
		     $(EXTRA_CMAKE_FLAGS)

override_dh_auto_configure:
	if [ -e /usr/bin/python3 ]; then \
		dh_auto_configure $(DH_AUTO_CONFIGURE) \
				-DPYTHON_EXECUTABLE:PATH=/usr/bin/python3 \
				-DCMAKE_INSTALL_PYTHON_ARCH_LIB:PATH=/usr/lib/python3/dist-packages; \
	else \
		dh_auto_configure $(DH_AUTO_CONFIGURE) \
			        -DNO_PYVERBS=1; \
	fi


override_dh_auto_build:
	ninja -C build-deb -v

# upstream does not ship test cases
override_dh_auto_test:

override_dh_auto_install:
# Some providers are disabled on architectures that are not able to do coherent DMA
ifeq (,$(filter-out $(NON_COHERENT_DMA_ARCHS),$(DEB_HOST_ARCH)))
	for package in ibverbs-providers libibverbs-dev rdma-core; do \
		test -e debian/$$package.install.backup || cp debian/$$package.install debian/$$package.install.backup; \
	done
	sed -i '/efa\|mana\|mlx[45]/d' debian/ibverbs-providers.install debian/libibverbs-dev.install debian/rdma-core.install
endif
	DESTDIR=$(CURDIR)/debian/tmp ninja -C build-deb install

# The following files are not used on Debian (we ship our own sysvinit script)
INST_EXCLUDE := "etc/init.d/srpd" \
		"etc/init.d/ibacm" \
		"usr/sbin/run_srp_daemon" \
		"usr/sbin/srp_daemon.sh"
INST_EXCLUDE := $(addprefix -X,$(INST_EXCLUDE))
override_dh_install:
	if [ -e build-deb/python/pyverbs/__init__.py ]; then \
		dh_install --fail-missing $(INST_EXCLUDE); \
	else \
		dh_install -Npython3-pyverbs --fail-missing $(INST_EXCLUDE) --remaining-packages; \
	fi

# cmake installs the correct init scripts in the correct place, just setup the
# pre-postrms
override_dh_installinit:
	dh_installinit -prdma-core --onlyscripts --name=iwpmd
	dh_installinit --remaining-packages

override_dh_installsystemd:
	dh_installsystemd -pibacm --no-start ibacm.service
	dh_installsystemd -pibacm ibacm.socket
	dh_installsystemd --remaining-packages

# Provider plugin libaries are not shared libraries and do not belong in the
# shlibs file.
# librspreload is a LD_PRELOAD library and does not belong in the shlib files
SHLIBS_EXCLUDE = "/libibverbs/" "librspreload" "/ibacm/"
SHLIBS_EXCLUDE := $(addprefix --exclude=,$(SHLIBS_EXCLUDE))
override_dh_makeshlibs:
	dh_makeshlibs $(SHLIBS_EXCLUDE)

override_dh_strip:
	dh_strip -plibibmad5 --dbg-package=libibmad5-dbg
	dh_strip -plibibnetdisc5 --dbg-package=libibnetdisc5-dbg
	dh_strip -plibibumad3 --dbg-package=libibumad3-dbg
	dh_strip -plibibverbs1 --dbg-package=libibverbs1-dbg
	dh_strip -plibrdmacm1 --dbg-package=librdmacm1-dbg
	dh_strip --remaining-packages

# Upstream encourages the use of 'build' as the developer build output
# directory, allow that directory to be present and still allow dh to work.
.PHONY: build
build:
	dh $@ $(dh_params)
