#!/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/buildflags.mk

ARCH := $(shell dpkg-architecture -qDEB_BUILD_ARCH)
ARCH_OS := $(shell dpkg-architecture -qDEB_BUILD_ARCH_OS)
BUILDDIR := builddir
DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
DEB_HOST_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
DEB_BUILD_GNU_SYSTEM ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_SYSTEM)
DEBVERSION := $(shell dpkg-parsechangelog | awk '/^Version: / { print $$2 }' | sed 's/^.*-//' )
DEB_SOURCE_PACKAGE ?= $(strip $(shell egrep '^Source: ' debian/control | cut -f 2 -d ':'))
DEB_VERSION ?= $(shell dpkg-parsechangelog | egrep '^Version:' | cut -f 2 -d ' ')
DEB_NOEPOCH_VERSION ?= $(shell echo $(DEB_VERSION) | cut -d: -f2-)
DEB_UPSTREAM_VERSION ?= $(shell echo $(DEB_NOEPOCH_VERSION) | sed 's/-[^-]*$$//')
DEB_UPSTREAM_VERSION_MAJOR_MINOR := $(shell echo $(DEB_UPSTREAM_VERSION) | sed -r -n 's/^([0-9]+\.[0-9]+).*/\1/p')
DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
DISTRIBUTION := $(shell lsb_release -i -s)
RELEASE := $(shell lsb_release -r -s)
TMP:=$(CURDIR)/debian/tmp


export MYSQL_BUILD_CC=$(DEB_HOST_GNU_TYPE)-gcc
export MYSQL_BUILD_CXX=$(DEB_HOST_GNU_TYPE)-g++

# Parallel build support as adviced
# 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)))
    # Even though at later point the MAKEFLAGS variable will end up
    # having the -j option without a parameter, in test builds it has been
    # confirmed that the NUMJOBS really doeas has an effect via MAKEFLAGS magic.
    # MAKEFLAGS magic will later also add the -jobserver option.
    MAKEFLAGS += -j $(NUMJOBS)
endif

# This is removed in mysql-5.6 and a candidate for removal in MariaDB too
USE_ASSEMBLER:=--enable-assembler
ifneq (,$(filter $(ARCH), i386 kfreebsd-i386 hurd-i386))
    TAOCRYPT_OPT="-DTAOCRYPT_DISABLE_X86ASM"
endif

# Disable TokuDB since it causes test failures
CMAKEFLAGS += -DWITHOUT_TOKUDB=true

# Skip Mroonga if arch is not amd64
ifneq ($(ARCH), amd64)
    CMAKEFLAGS += -DWITHOUT_MROONGA=true
endif

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

MAKE_TEST_TARGET:=test-force
ifneq ($(findstring fulltest,$(DEB_BUILD_OPTIONS)),)
# make test-bt is the testsuite run by the MySQL build team
# before a release, but it is long
    MAKE_TEST_TARGET:=test-bt
endif

ifneq (,$(filter $(ARCH), amd64 kfreebsd-amd64 i386 kfreebsd-i386 ia64 s390 s390x))
    TESTSUITE_FAIL_CMD:=exit 1
else
    TESTSUITE_FAIL_CMD:=true
endif


override_dh_auto_clean:
	@echo "RULES.$@"
	dh_testdir
	dh_testroot
	[ ! -d mysql-test/var ] || rm -rf mysql-test/var
	rm -rf $(BUILDDIR)
	debconf-updatepo # Update po-files when clean runs before each build

override_dh_prep:
        # Don't clean /tmp/ away, it is needed by all binary packages

override_dh_auto_configure:
	@echo "RULES.$@"
	dh_testdir

	( test -d $(BUILDDIR) || mkdir $(BUILDDIR) ) && cd $(BUILDDIR) && \
	sh -c  'PATH=$${MYSQL_BUILD_PATH:-"/usr/local/bin:/usr/bin:/bin"} \
	    	CC=$${MYSQL_BUILD_CC:-gcc} \
		CFLAGS=$${MYSQL_BUILD_CFLAGS:-"-O2 -DBIG_JOINS=1 -fno-strict-aliasing ${TAOCRYPT_OPT}"} \
	    	CXX=$${MYSQL_BUILD_CXX:-g++} \
	    	CXXFLAGS=$${MYSQL_BUILD_CXXFLAGS:-"-O3 -DBIG_JOINS=1 -felide-constructors -fno-exceptions -fno-rtti -fno-strict-aliasing ${TAOCRYPT_OPT}"} \
	    cmake -DCMAKE_INSTALL_PREFIX=/usr \
	    $(CMAKEFLAGS) \
	    -DWITH_SSL=bundled \
	    -DCOMPILATION_COMMENT="($(DISTRIBUTION))" \
	    -DMYSQL_SERVER_SUFFIX="-$(DEBVERSION)" \
	    -DSYSTEM_TYPE="debian-$(DEB_BUILD_GNU_SYSTEM)" \
	    -DBUILD_CONFIG=mysql_release \
	    -DINSTALL_LIBDIR=lib/$(DEB_HOST_MULTIARCH) \
	    -DINSTALL_PLUGINDIR=lib/mysql/plugin \
	    -DDEB=1 ..'
	touch $@

# This is needed, otherwise 'make test' will run before binaries have been built
override_dh_auto_build:
	@echo "RULES.$@"
	@echo "MAKEFLAGS: $(value MAKEFLAGS)"
	cd $(BUILDDIR) && $(MAKE)
	touch $@

override_dh_auto_test:
	@echo "RULES.$@"
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
	cd $(BUILDDIR) && $(MAKE) $(MAKE_TEST_TARGET) || $(TESTSUITE_FAIL_CMD) ;
endif

override_dh_auto_install:
	@echo "RULES.$@"
	dh_testdir
	dh_testroot

	# If TokuDB plugin was built add it to the server install list.
	[ ! -f $(BUILDDIR)/storage/tokudb/ha_tokudb.so ] || echo 'usr/lib/mysql/plugin/ha_tokudb.so\netc/mysql/conf.d/tokudb.cnf\nusr/bin/tokuftdump\nusr/share/doc/mariadb-server-10.0/README.md' >> debian/mariadb-server-10.0.install

	# If Mroonga plugin was built add it to the server install list.
	[ ! -f $(BUILDDIR)/storage/mroonga/ha_mroonga.so ] || echo 'usr/lib/mysql/plugin/ha_mroonga.so' >> debian/mariadb-server-10.0.install

	# If libthrift-dev was available (manually installed, as it is
	# not in Debian) and ha_cassandra.so was thus built add it to
	# the server install list.
	[ ! -f $(BUILDDIR)/storage/cassandra/ha_cassandra.so ] || echo 'usr/lib/mysql/plugin/ha_cassandra.so' >> debian/mariadb-server-10.0.install

	# make install
	cd $(BUILDDIR) && $(MAKE) install DESTDIR=$(TMP)

	# mariadb-server
	# INBO_BIN is generated at build time and must thus be installed like this
	install -D -m 0644 $(BUILDDIR)/Docs/INFO_BIN $(TMP)/usr/share/doc/mariadb-server-10.0/INFO_BIN
	rm -vf $(TMP)/usr/share/mysql/mi_test_all* \
	       $(TMP)/usr/share/mysql/mysql-log-rotate \
	       $(TMP)/usr/share/mysql/mysql.server \
	       $(TMP)/usr/share/mysql/binary-configure
	nm -n $(BUILDDIR)/sql/mysqld |gzip -n -9 > $(TMP)/usr/share/doc/mariadb-server-10.0/mysqld.sym.gz

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

	# rename and install Apport hook
	install -D -m 644 debian/mariadb-server-10.0.py $(TMP)/usr/share/apport/package-hooks/source_mariadb-10.0.py

	# mariadb-test
	mv $(TMP)/usr/mysql-test $(TMP)/usr/share/mysql

	touch $@

override_dh_installlogrotate-arch:
	dh_installlogrotate --name mysql-server

# Start mysql in runlevel 19 before 20 where apache, proftpd etc gets
# started which might depend on a running database server.
override_dh_installinit-arch:
	dh_installinit --name=mysql -- defaults 19 21

override_dh_installcron-arch:
	dh_installcron --name mysql-server

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

%:
	dh $@ --parallel

# vim: ts=8
