#! /usr/bin/make -f

# for SOURCE_DATE_EPOCH
include /usr/share/dpkg/pkg-info.mk
DATE_MONTH_YEAR=$(shell env LC_TIME=C.utf8 date --utc --date=@${SOURCE_DATE_EPOCH} +"%B %Y")

# retrieve the first part of the upstream version matching [0-9.]+
VERSION_UPSTREAM = $(shell dpkg-parsechangelog -SVersion | sed 's/\([0-9.]\+\).*/\1/')

# for DEB_HOST_GNU_TYPE
include /usr/share/dpkg/architecture.mk

export DEB_BUILD_MAINT_OPTIONS=hardening=+all
DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/buildflags.mk

# On mips and mipsel, each process is limited to 2 GB of memory. Because
# gcc manages its memory badly, it will randomly run out of memory. As a
# workaround we force the garbage collector to drop memory more aggressively.
#
# See Debian bug #849657 and
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79030
ifneq (,$(filter $(DEB_HOST_ARCH), mips mipsel))
  export DEB_CXXFLAGS_MAINT_APPEND+=--param ggc-min-expand=5
endif

BUILDDIR=$(CURDIR)/obj-$(DEB_HOST_GNU_TYPE)

%:
	dh $@ --builddirectory=$(BUILDDIR)

# override disabled by default rpath - we need to find libvcmi.so with it:
override_dh_auto_configure:
	ln -s /usr/src/googletest/googletest test/googletest
	dh_auto_configure -- \
		-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=ON \
		-DCMAKE_INSTALL_RPATH=/usr/lib/$(DEB_HOST_MULTIARCH)/vcmi \
		-DCMAKE_BUILD_RPATH_USE_ORIGIN=ON \
		-DBIN_DIR=games \
		-DFORCE_BUNDLED_FL=OFF \
		-DENABLE_GITVERSION=OFF \
		-DENABLE_TEST=0

execute_before_dh_auto_build:
	# cmake checking for compiler flags without setting CPPFLAGS
	# False positive from blhc. See #994422
	@echo 'blhc: ignore-line-regexp: /usr/(bin|lib)/(ccache/)?c\+\+ -std=gnu\+\+17 -dM -E -c /usr/share/cmake-[0-9.]+/Modules/CMakeCXXCompilerABI.cpp .*'

execute_before_dh_installman:
ifeq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
	# native build
	# verify that the contents of debian/*.1 files are up-to-date
	#
	# we have to set HOME to a temporary directory when running vcmiserver because
	#  - when running vcmiserver it wants to create $HOME/.config/vcmi,
	#    $HOME/.cache/vcmi and $HOME/.local/share/vcmi/Saves
	#  - sbuild uses the non-existing path /sbuild-nonexistent and the vcmiserver
	#    invocation would fail because it cannot create it
	#  - we don't want to touch the home directory of the user running dpkg-buildpackage
	HOME=$(BUILDDIR) help2man --version-string=$(VERSION_UPSTREAM) --include=debian/vcmiserver.1.in --output=vcmiserver.1 $(BUILDDIR)/bin/vcmiserver
	HOME=$(BUILDDIR) QT_QPA_PLATFORM=minimal help2man --version-string=$(VERSION_UPSTREAM) --include=debian/vcmieditor.1.in --output=vcmieditor.1 $(BUILDDIR)/bin/vcmieditor
	help2man --version-string=$(VERSION_UPSTREAM) --include=debian/vcmiclient.1.in --output=vcmiclient.1 $(BUILDDIR)/bin/vcmiclient
	# Prepend the first line and replace version string before comparing
	set -e; for bin in server editor client; do \
		{ \
			awk 'NR == 1 && /DO NOT MODIFY THIS FILE!  It was generated by help2man/ { print }' vcmi$$bin.1; \
			sed 's/@@VERSION@@/$(VERSION_UPSTREAM)/;s/@@DATE@@/$(DATE_MONTH_YEAR)/' debian/vcmi$$bin.1; \
		} | diff -u - vcmi$$bin.1; \
	done
endif
	# if this was a cross-build, we can just use the cached debian/*.1 files
	# if this was a native build, we verified their contents above
	set -e; for bin in server editor client; do \
		sed 's/@@VERSION@@/$(VERSION_UPSTREAM)/;s/@@DATE@@/$(DATE_MONTH_YEAR)/' debian/vcmi$$bin.1 > vcmi$$bin.1; \
	done
	# vcmibuilder is a shell script so we can run this even when cross-building
	help2man --version-string=$(VERSION_UPSTREAM) --include=debian/vcmibuilder.1.in --output=vcmibuilder.1 $(CURDIR)/vcmibuilder

override_dh_auto_install:
	dh_auto_install --destdir=debian/vcmi

execute_after_dh_auto_clean:
	# test/googletest is either an empty directory from the upstream
	# tarball or a symlink we created
	rmdir test/googletest || rm -f test/googletest
