#!/usr/bin/make -f

export DH_VERBOSE=1

# enable Debian Hardening
# see: https://wiki.debian.org/Hardening
export DEB_BUILD_MAINT_OPTIONS = hardening=+all,-pie
DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/default.mk

BUILDDIR := builddir
DEB_VERSION_REVISION := $(shell echo '$(DEB_VERSION)' | sed -e 's/^.*-//')
MARIADB_SERIES := $(shell echo '$(DEB_VERSION_UPSTREAM)' | sed -e 's/\.[0-9]*$$//')
TMP:=$(CURDIR)/debian/tmp

GENERATED_SOURCES=$(shell find debian/ -name '*@MARIADB_SERIES@*')
GENERATED_FILES=$(shell echo $(GENERATED_SOURCES) | sed -e 's/@MARIADB_SERIES@/$(MARIADB_SERIES)/g')

CC := $(DEB_HOST_GNU_TYPE)-gcc
CXX := $(DEB_HOST_GNU_TYPE)-g++

# Parallel build support as advised
# at https://www.debian.org/doc/debian-policy/ch-source.html#s-debianrules-options
ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
    NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
    MAKEFLAGS += -j $(NUMJOBS)
else
    # NUMJOBS cannot be empty as it is used as a parameter to mtr, default to 1.
    NUMJOBS = 1
endif

# Ignore test suite exit code on unstable platforms
ifeq ($(DEB_HOST_ARCH),$(filter $(DEB_HOST_ARCH),mips mipsel alpha powerpc sh4 s390x hurd-i386))
    TESTSUITE_FAIL_CMD:=true
else
    TESTSUITE_FAIL_CMD:=exit 1
endif

ifeq (32,$(DEB_HOST_ARCH_BITS))
    CMAKEFLAGS += -DWITHOUT_ROCKSDB=true
endif

# Skip TokuDB if arch is not amd64 (also disable for kfreebsd-amd64 as it FTBFS)
# Skipped on the x32 ABI too; untested, but unlikely to work given i386 is not
# supported.
ifneq ($(DEB_HOST_ARCH),amd64)
    CMAKEFLAGS += -DWITHOUT_TOKUDB=true
endif

# Disable jemalloc on mips* due to #843926
ifneq (,$(filter $(DEB_HOST_ARCH), mips mipsel mips64 mips64el))
    CMAKEFLAGS += -DWITH_JEMALLOC=no
endif

# Add support for verbose builds
MAKEFLAGS += VERBOSE=1

override_dh_auto_clean: generated-files
	rm -rf mysql-test/var
	rm -f storage/mroonga/mysql-test/mroonga/storage/r/information_schema_plugins.result
	rm -f storage/mroonga/mysql-test/mroonga/storage/r/variable_version.result
	rm -f debian/mariadb-server-$(MARIADB_SERIES).mariadb.service
	rm -f debian/mariadb-server-$(MARIADB_SERIES).mariadb@.service
	rm -rf $(BUILDDIR)

	[ ! -f debian/mysql-test-unstable-tests.orig ] || \
	    mv debian/mysql-test-unstable-tests.orig mysql-test/unstable-tests

	debconf-updatepo # Update po-files when clean runs before each build
	rm -f $(GENERATED_FILES)

override_dh_auto_build:
	cd $(BUILDDIR) && ninja -j $(NUMJOBS)

override_dh_auto_configure:
	mkdir -p $(BUILDDIR) && cd $(BUILDDIR) && \
	PATH=$${MYSQL_BUILD_PATH:-"/usr/local/bin:/usr/bin:/bin"} \
	CC=$(CC) \
	CXX=$(CXX) \
	cmake \
	    -G Ninja -DCMAKE_MAKE_PROGRAM=/usr/bin/ninja \
	    -DCMAKE_INSTALL_PREFIX=/usr \
	    $(CMAKEFLAGS) \
	    -DAWS_SDK_EXTERNAL_PROJECT=OFF \
	    -DWITH_SSL=bundled \
	    -DCOMPILATION_COMMENT="$(DEB_VENDOR) $(DEB_DISTRIBUTION)" \
	    -DMYSQL_SERVER_SUFFIX="-$(DEB_VERSION_REVISION)" \
	    -DSYSTEM_TYPE="debian-$(DEB_HOST_GNU_SYSTEM)" \
	    -DCMAKE_SYSTEM_PROCESSOR=$(DEB_HOST_ARCH) \
	    -DBUILD_CONFIG=mysql_release \
	    -DINSTALL_LIBDIR=lib/$(DEB_HOST_MULTIARCH) \
	    -DINSTALL_PLUGINDIR=lib/$(DEB_HOST_MULTIARCH)/mariadb3/plugin \
	    -DINSTALL_MYSQLTESTDIR=share/mysql/mysql-test \
	    -DPLUGIN_AUTH_SOCKET=STATIC \
	    -DDEB=$(DEB_VENDOR) ..

override_dh_auto_test:
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
	# Skip unstable tests if such are defined for arch
	cp mysql-test/unstable-tests debian/mysql-test-unstable-tests.orig
	[ ! -f debian/unstable-tests.$(DEB_HOST_ARCH) ] || cat debian/unstable-tests.$(DEB_HOST_ARCH) >> mysql-test/unstable-tests
	# Run testsuite
	cd $(BUILDDIR)/mysql-test && ./mtr --force --testcase-timeout=30 --suite-timeout=540 --retry=3 --parallel=$(NUMJOBS) --skip-test-list=unstable-tests  || $(TESTSUITE_FAIL_CMD) ;
endif

override_dh_auto_install: generated-files
	cd $(BUILDDIR) && DESTDIR=$(CURDIR)/debian/tmp ninja -j $(NUMJOBS) install

	# Delete runnable files we don't want to have in the test data package.
	# This avoids triggering multiple Lintian errors.
	rm -rf $(TMP)/usr/share/mysql/mysql-test/plugin/tokudb/tokudb/*.py
	rm -rf $(TMP)/usr/share/mysql/mysql-test/plugin/tokudb/tokudb/t/*.py

	# Delete compat libmysqlclient.* and libmysqlclient_r.* libraries
	rm -f $(TMP)/usr/lib/$(DEB_HOST_MULTIARCH)/libmysqlclient_r.* \
	      $(TMP)/usr/lib/$(DEB_HOST_MULTIARCH)/libmysqlclient.*

	# nm numeric soft is not enough, therefore extra sort in command
	# to satisfy Debian reproducible build requirements
	nm --defined-only $(BUILDDIR)/sql/mysqld | LC_ALL=C sort | gzip -n -9 > $(TMP)/usr/share/doc/mariadb-server-$(MARIADB_SERIES)/mysqld.sym.gz

	# rename and install AppArmor profile
	install -D -m 644 debian/apparmor-profile $(TMP)/etc/apparmor.d/usr.sbin.mysqld

override_dh_installlogrotate-arch:
	dh_installlogrotate --name mariadb

override_dh_systemd_enable:
	dh_systemd_enable --name=mariadb
	dh_systemd_enable --no-enable --name=mariadb@

# Start mariadb at sequence number 19 before 20 where apache, proftpd etc gets
# started which might depend on a running database server.
override_dh_installinit-arch:
	dh_installinit --name=mariadb -- defaults 19 21
	dh_systemd_start --no-restart-after-upgrade

override_dh_installcron-arch:
	dh_installcron --name mariadb

get-orig-source:
	uscan --force-download --verbose

%: prepared-files
%:
	dh $@ -B$(BUILDDIR) --parallel --with systemd --fail-missing -Xtrace_example.so


generated-files: $(GENERATED_FILES)

$(GENERATED_FILES): $(GENERATED_SOURCES)
	for in in $(GENERATED_SOURCES); do \
	  out=$$(echo $$in | sed -e 's/@MARIADB_SERIES@/$(MARIADB_SERIES)/g'); \
	  sed -e 's/@MARIADB_SERIES@/$(MARIADB_SERIES)/g' \
	    < "$$in" \
	    > "$$out"; \
	  chmod --reference="$$in" "$$out"; \
	done

prepared-files: debian/control debian/tests/control debian/po/templates.pot debian/po/POTFILES.in debian/watch debian/not-installed
	wrap-and-sort -a

debian/control: debian/control.in debian/rules debian/changelog
	sed -e "s/@MARIADB_SERIES@/$(MARIADB_SERIES)/g" >$@ <debian/control.in

debian/tests/control: debian/tests/control.in debian/rules debian/changelog
	sed -e "s/@MARIADB_SERIES@/$(MARIADB_SERIES)/g" >$@ <debian/tests/control.in

debian/po/templates.pot: debian/po/templates.pot.in debian/rules debian/changelog
	sed -e "s/@MARIADB_SERIES@/$(MARIADB_SERIES)/g" >$@ <debian/po/templates.pot.in

debian/po/POTFILES.in: debian/po/POTFILES.in.in debian/rules debian/changelog
	sed -e "s/@MARIADB_SERIES@/$(MARIADB_SERIES)/g" >$@ <debian/po/POTFILES.in.in

debian/watch: debian/watch.in debian/rules debian/changelog
	sed -e "s/@MARIADB_SERIES@/$(MARIADB_SERIES)/g" >$@ <debian/watch.in

debian/not-installed: debian/not-installed.in debian/rules debian/changelog
	sed -e "s/@MARIADB_SERIES@/$(MARIADB_SERIES)/g" >$@ <debian/not-installed.in

.PHONY: get-orig-source prepared-files generated-files $(GENERATED_FILES)

# vim: ts=8
