#!/usr/bin/make -f

include /usr/share/dpkg/default.mk
include debian/opts.mk

export DPKG_GENSYMBOLS_CHECK_LEVEL = 4

# see FEATURE AREAS in dpkg-buildflags(1)
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
include /usr/share/dpkg/buildflags.mk

%:
	dh $@ -Bbuild-$(DEB_HOST_ARCH) --with python3 --with pkgkde_symbolshelper

# Enable verbose debugging output from the testsuite
export MIR_SERVER_LOGGING = on
override_dh_auto_test-arch:
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
ifeq ($(filter mipsel riscv64,$(DEB_HOST_ARCH)),)
ifeq ($(DEB_HOST_ARCH_ENDIAN),little)
	-GTEST_OUTPUT=xml:./ dh_auto_build -- ARGS="-V" ptest
else
	echo "Testsuite disabled on $(DEB_HOST_ARCH) due to lack of big-endian support."
endif
else
	echo "Testsuite disabled on $(DEB_HOST_ARCH) due to timeouts / slow CPU processing."
endif
else
	echo "Testsuite disabled due to DEB_BUILD_OPTIONS=\"$(DEB_BUILD_OPTIONS)\""
endif

override_dh_auto_test-indep:
	echo "Testsuite not run during arch:all builds."

COMMON_CONFIGURE_OPTIONS = \
  -DCMAKE_INSTALL_LIBEXECDIR="lib/$(DEB_HOST_MULTIARCH)/mir"\
  -DMIR_BUILD_INTERPROCESS_TESTS=OFF\
  -DMIR_FATAL_COMPILE_WARNINGS=OFF\
  -DMIR_ENABLE_WLCS_TESTS=OFF \

ifeq ($(filter noopt,$(DEB_BUILD_OPTIONS)),noopt)
	COMMON_CONFIGURE_OPTIONS += -DMIR_LINK_TIME_OPTIMIZATION=OFF
else
  # Disable LTO, due to failing to build
  ifneq (,$(filter $(DEB_HOST_ARCH),mips64el ppc64 s390x))
	COMMON_CONFIGURE_OPTIONS += -DMIR_LINK_TIME_OPTIMIZATION=OFF
  else
	COMMON_CONFIGURE_OPTIONS += -DMIR_LINK_TIME_OPTIMIZATION=ON
  endif
endif

ifneq (,$(filter noinsttest,$(DEB_BUILD_PROFILES)))
	COMMON_CONFIGURE_OPTIONS += -DMIR_ENABLE_TESTS=OFF
endif

# Don't use "gold" linker 16.04 , due to failing to build on ppc64le
ifneq ($(filter xenial,$(DEB_DISTRIBUTION)),)
	COMMON_CONFIGURE_OPTIONS += -DMIR_USE_LD=ld
endif

# see, if this prevents from build failures on some exotic architectures (like e.g. mips64el):
COMMON_CONFIGURE_OPTIONS += -DMIR_USE_LD=ld

$(info COMMON_CONFIGURE_OPTIONS: ${COMMON_CONFIGURE_OPTIONS})

ifneq ($(filter amd64 i386,$(DEB_HOST_ARCH)),)
  AVAILABLE_PLATFORMS=mesa-kms\;mesa-x11\;wayland\;eglstream-kms
else
	AVAILABLE_PLATFORMS=mesa-kms\;mesa-x11\;wayland
endif

override_dh_auto_configure:
ifneq ($(filter armhf,$(DEB_HOST_ARCH)),)
	dh_auto_configure -- \
	  $(COMMON_CONFIGURE_OPTIONS) \
	  -DMIR_RUN_ACCEPTANCE_TESTS=OFF \
	  -DMIR_RUN_INTEGRATION_TESTS=OFF \
	  -DMIR_PLATFORM=$(AVAILABLE_PLATFORMS) \
	  $(OVERRIDE_CONFIGURE_OPTIONS)
else
	dh_auto_configure -- \
	  $(COMMON_CONFIGURE_OPTIONS) \
	  -DMIR_PLATFORM=$(AVAILABLE_PLATFORMS) \
	  $(OVERRIDE_CONFIGURE_OPTIONS)
endif
	# Run cmake again to pick up wlcs tests, because reasons?
	cmake build-$(DEB_HOST_ARCH)

# binary-only builds still need the doc files, otherwise the
# install target fails
override_dh_auto_build-arch: override_dh_auto_build-indep
	dh_auto_build

# Only build the docs when we need them
override_dh_auto_build-indep:
	dh_auto_build -- doc

override_dh_auto_install-indep:
	dh_auto_build -- DESTDIR=$(CURDIR)/debian/tmp doc-install
ifeq (,$(filter noinsttest,$(DEB_BUILD_PROFILES)))
	dh_auto_build -- DESTDIR=$(CURDIR)/debian/tmp py-install
endif

# Reconstruct the MirAL version
MIRAL_VERSION_MAJOR = $(shell perl -n -e '/^set\(MIRAL_VERSION_MAJOR ([0-9]*)\)$$/ && print $$1' src/CMakeLists.txt)
MIRAL_VERSION_MINOR = $(shell perl -n -e '/^set\(MIRAL_VERSION_MINOR ([0-9]*)\)$$/ && print $$1' src/CMakeLists.txt)
MIRAL_VERSION_PATCH = $(shell perl -n -e '/^set\(MIRAL_VERSION_PATCH ([0-9]*)\)$$/ && print $$1' src/CMakeLists.txt)
MIRAL_RELEASE=$(MIRAL_VERSION_MAJOR).$(MIRAL_VERSION_MINOR).$(MIRAL_VERSION_PATCH)
MIRAL_VERSION=$(MIRAL_RELEASE).$(DEB_VERSION)

# TODO: we'll use a symbol file once mir is abi stable
override_dh_makeshlibs:
	dh_makeshlibs -Nlibmiral3 -V -Nmir-test-tools
	# libmiral3 *has* a symbols file, so we don't need to -V it!
	dh_makeshlibs -plibmiral3 -- -v$(MIRAL_RELEASE)

override_dh_install:
# Nothing outside Mir should link to libmirprotobuf directly.
# Delete the symlink so that --fail-missing doesn't think we've missed it
# accidentally.
	-rm debian/tmp/usr/lib/*/libmirprotobuf.so

	-find debian/tmp/usr/share/doc/mir-doc/html/ -name "*.md5" -delete
	dh_install

# Get rid of duplicate files and replace them by symlinks
	rdfind -makesymlinks true "$(CURDIR)/debian/mir-doc/usr/share/doc/mir-doc/"
	symlinks -rc "$(CURDIR)/debian/mir-doc/usr/share/doc/mir-doc/"



override_dh_missing:
	dh_missing --fail-missing

# Don't try to strip libraries used as test data
override_dh_strip:
	dh_strip -Xmir-test-data

# Don't try to find dependencies of libraries used as test data
override_dh_shlibdeps:
	dh_shlibdeps -Xmir-test-data

override_dh_gencontrol:
	dh_gencontrol -Nlibmiral3 -Nlibmiral-dev
	dh_gencontrol -plibmiral3 -plibmiral-dev -- -v$(MIRAL_VERSION) -V'libmiral3:Version=$(MIRAL_VERSION)'

get-orig-source:
	uscan --noconf --force-download --rename --download-current-version --repack --destdir=..