mirror of
https://github.com/MariaDB/server.git
synced 2026-04-20 15:25:33 +02:00
For Debian the rules file is the main makefile and assuming that a upstream makefile will mangle the Debian packaging files creates false alerts from static analysis tools and other problems.
170 lines
6.1 KiB
Makefile
Executable file
170 lines
6.1 KiB
Makefile
Executable file
#!/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_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
|
|
DEB_BUILD_GNU_SYSTEM ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_SYSTEM)
|
|
DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
|
|
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
|
|
|
|
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
|
|
ifneq (,$(filter $(ARCH), mips mipsel))
|
|
TESTSUITE_FAIL_CMD:=true
|
|
else
|
|
TESTSUITE_FAIL_CMD:=exit 1
|
|
endif
|
|
|
|
# Skip TokuDB if arch is not amd64
|
|
ifneq ($(ARCH), amd64)
|
|
CMAKEFLAGS += -DWITHOUT_TOKUDB=true
|
|
endif
|
|
|
|
# Add support for verbose builds
|
|
MAKEFLAGS += VERBOSE=1
|
|
|
|
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
|
|
|
|
# Versioned symbols are only available on Linux.
|
|
# Remove symbols file on kFreeBSD builds so that
|
|
# dpkg-gensymbols will not fail the build.
|
|
ifneq (,$(filter $(ARCH), kfreebsd-i386 kfreebsd-amd64))
|
|
rm debian/libmariadbclient18.symbols
|
|
endif
|
|
|
|
mkdir -p $(BUILDDIR) && cd $(BUILDDIR) && \
|
|
sh -c 'PATH=$${MYSQL_BUILD_PATH:-"/usr/lib/ccache:/usr/local/bin:/usr/bin:/bin"} \
|
|
CC=${CC} \
|
|
CXX=${CXX} \
|
|
cmake -DCMAKE_INSTALL_PREFIX=/usr \
|
|
$(CMAKEFLAGS) \
|
|
-DCOMPILATION_COMMENT="mariadb.org binary distribution" \
|
|
-DMYSQL_SERVER_SUFFIX="-$(DEBVERSION)" \
|
|
-DSYSTEM_TYPE="debian-$(DEB_BUILD_GNU_SYSTEM)" \
|
|
-DCMAKE_SYSTEM_PROCESSOR=$(DEB_BUILD_ARCH) \
|
|
-DBUILD_CONFIG=mysql_release \
|
|
-DINSTALL_LIBDIR=lib/$(DEB_HOST_MULTIARCH) \
|
|
-DINSTALL_PLUGINDIR=lib/mysql/plugin \
|
|
-DINSTALL_MYSQLTESTDIR=share/mysql/mysql-test \
|
|
-DDEB=$(DISTRIBUTION) ..'
|
|
touch $@
|
|
|
|
# This is needed, otherwise 'make test' will run before binaries have been built
|
|
override_dh_auto_build:
|
|
@echo "RULES.$@"
|
|
# Print build env info to help debug builds on different platforms
|
|
dpkg-architecture
|
|
cd $(BUILDDIR) && $(MAKE)
|
|
touch $@
|
|
|
|
override_dh_auto_test:
|
|
@echo "RULES.$@"
|
|
dh_testdir
|
|
# Skip unstable tests if such are defined for arch
|
|
[ ! -f debian/unstable-tests.$(ARCH) ] || cat debian/unstable-tests.$(ARCH) >> mysql-test/unstable-tests
|
|
# Run testsuite
|
|
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
|
|
cd $(BUILDDIR)/mysql-test && ./mtr --force --mem --parallel=$(NUMJOBS) --skip-rpl --suite=main --skip-test-list=unstable-tests || $(TESTSUITE_FAIL_CMD) ;
|
|
endif
|
|
|
|
override_dh_auto_install:
|
|
@echo "RULES.$@"
|
|
dh_testdir
|
|
dh_testroot
|
|
|
|
# If TokuDB plugin was not built skip the package
|
|
[ -f $(BUILDDIR)/storage/tokudb/ha_tokudb.so ] || sed -i -e "/Package: mariadb-plugin-tokudb/,+12d" debian/control
|
|
|
|
# If Mroonga plugin was not built skip the package
|
|
[ -f $(BUILDDIR)/storage/mroonga/ha_mroonga.so ] || sed -i -e "/Package: mariadb-plugin-mroonga/,+11d" debian/control
|
|
|
|
# If libthrift-dev was available (manually installed, as it is
|
|
# not in Debian) and ha_cassandra.so was thus built, create package,
|
|
# otherwise skip it.
|
|
[ -f $(BUILDDIR)/storage/cassandra/ha_cassandra.so ] || sed -i -e "/Package: mariadb-plugin-cassandra/,+14d" debian/control
|
|
|
|
# If Spider plugin was not built skip the package
|
|
[ -f $(BUILDDIR)/storage/spider/ha_spider.so ] || sed -i -e "/Package: mariadb-plugin-spider/,+12d" debian/control
|
|
|
|
# make install
|
|
cd $(BUILDDIR) && $(MAKE) install DESTDIR=$(TMP)
|
|
|
|
# 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-10.2/mysqld.sym.gz
|
|
|
|
# For 5.0 -> 10.2 transition
|
|
d=$(TMP)/usr/share/mysql-common/internal-use-only/; \
|
|
mkdir -p $$d; \
|
|
cp debian/mariadb-server-10.2.mysql.init $$d/_etc_init.d_mysql; \
|
|
cp debian/mariadb-server-10.2.mysql-server.logrotate $$d/_etc_logrotate.d_mysql-server; \
|
|
cp debian/additions/debian-start $$d/_etc_mysql_debian-start;
|
|
|
|
# rename and install AppArmor profile
|
|
install -D -m 644 debian/apparmor-profile $(TMP)/etc/apparmor.d/usr.sbin.mysqld
|
|
# install Apport hook
|
|
install -D -m 644 debian/mariadb-server-10.2.py $(TMP)/usr/share/apport/package-hooks/source_mariadb-10.2.py
|
|
|
|
touch $@
|
|
|
|
override_dh_installlogrotate-arch:
|
|
dh_installlogrotate --name mysql-server
|
|
|
|
# Start mysql 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=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
|