diff options
Diffstat (limited to 'debian/rules')
-rwxr-xr-x | debian/rules | 318 |
1 files changed, 99 insertions, 219 deletions
diff --git a/debian/rules b/debian/rules index 1f88b3f4847..6919fcc14b4 100755 --- a/debian/rules +++ b/debian/rules @@ -1,182 +1,132 @@ #!/usr/bin/make -f export DH_VERBOSE=1 -export DEB_BUILD_HARDENING=1 -PACKAGE=mariadb-10.2 +# 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 -include /usr/share/dpatch/dpatch.make - -TMP=$(CURDIR)/debian/tmp/ - -ARCH = $(shell dpkg-architecture -qDEB_BUILD_ARCH) -ARCH_OS = $(shell dpkg-architecture -qDEB_BUILD_ARCH_OS) -DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) +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) -DEBVERSION = $(shell dpkg-parsechangelog | awk '/^Version: / { print $$2 }' | sed 's/^.*-//' ) - +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 -DISTRIBUTION = $(shell lsb_release -i -s) -RELEASE = $(shell lsb_release -r -s) - -MAKE_J = -j$(shell if [ -f /proc/cpuinfo ] ; then grep -c processor.* /proc/cpuinfo ; else echo 1 ; fi) -ifeq (${MAKE_J}, -j0) - MAKE_J = -j1 -endif +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 - -USE_ASSEMBLER=--enable-assembler - -BUILDDIR = builddir -builddir = $(BUILDDIR) - -# This causes seg11 crashes if LDAP is used for groups in /etc/nsswitch.conf -# so it is disabled by default although, according to MySQL, it brings >10% -# performance gain if enabled. See #299382. -ifeq ($(STATIC_MYSQLD), 1) - USE_STATIC_MYSQLD=--with-mysqld-ldflags=-all-static +# Ignore test suite exit code on unstable platforms +ifneq (,$(filter $(ARCH), mips mipsel)) + TESTSUITE_FAIL_CMD:=true +else + TESTSUITE_FAIL_CMD:=exit 1 endif -configure: patch configure-stamp -configure-stamp: - @echo "RULES.$@" - dh_testdir - -ifneq ($(ARCH_OS),hurd) - if [ ! -d /proc/self ]; then echo "/proc IS NEEDED" 1>&2; exit 1; fi +# Skip TokuDB if arch is not amd64 +ifneq ($(ARCH), amd64) + CMAKEFLAGS += -DWITHOUT_TOKUDB=true endif - ( test -d $(builddir) || mkdir $(builddir) ) && cd $(builddir) && \ - sh -c 'PATH=$${MYSQL_BUILD_PATH:-"/usr/lib/ccache:/usr/local/bin:/usr/bin:/bin"} \ - CC=$${MYSQL_BUILD_CC:-gcc} \ - CFLAGS=$${MYSQL_BUILD_CFLAGS:-"-O2 -fno-omit-frame-pointer -g -pipe -Wall -Wno-uninitialized"} \ - CXX=$${MYSQL_BUILD_CXX:-g++} \ - CXXFLAGS=$${MYSQL_BUILD_CXXFLAGS:-"-O2 -fno-omit-frame-pointer -g -pipe -Wall -Wno-uninitialized"} \ - cmake .. \ - -DMYSQL_SERVER_SUFFIX="-$(DEBVERSION)" \ - -DBUILD_CONFIG=mysql_release \ - -DCOMPILATION_COMMENT="mariadb.org binary distribution" \ - -DSYSTEM_TYPE="debian-linux-gnu" \ - -DDEB=ubuntu' - - touch $@ - -build: build-stamp +# Add support for verbose builds +MAKEFLAGS += VERBOSE=1 -build-stamp: configure +override_dh_auto_clean: @echo "RULES.$@" dh_testdir - - cd $(builddir) && $(MAKE) $(MAKE_J) $(AM_EXTRA_MAKEFLAGS) - -ifeq ($(findstring nocheck,$(DEB_BUILD_OPTIONS)),) - if [ ! -f testsuite-stamp ] ; then \ - cd $(builddir)/mysql-test && ./mtr --force --mem --parallel=$(NUMJOBS) --skip-rpl --suite=main; \ - fi -endif - - touch testsuite-stamp - - touch build-stamp - -clean: clean-patched unpatch - rm -rf debian/patched -clean-patched: - @echo "RULES.clean-patched" - dh_testdir dh_testroot - rm -f configure-stamp* - rm -f build-stamp* - rm -f testsuite-stamp - # - [ ! -f Makefile ] || $(MAKE) clean [ ! -d mysql-test/var ] || rm -rf mysql-test/var - # rm -rf $(BUILDDIR) + debconf-updatepo # Update po-files when clean runs before each build - debconf-updatepo - dh_clean -v - +override_dh_prep: + # Don't clean /tmp/ away, it is needed by all binary packages -install: build +override_dh_auto_configure: @echo "RULES.$@" dh_testdir - dh_testroot - dh_clean -k - dh_installdirs - # some self written manpages which hopefully - # gets overwritten sooner or later with upstreams - mkdir -p $(TMP)/usr/share/man/man1/ - mkdir -p $(TMP)/usr/share/man/man8/ - cp debian/additions/*.1 $(TMP)/usr/share/man/man1/ - mkdir -p $(TMP)/etc/mysql/conf.d/ - cp debian/additions/mysqld_safe_syslog.cnf $(TMP)/etc/mysql/conf.d/ + # 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 - # make install (trailing slash needed for innobase) - cd $(builddir) && $(MAKE) install DESTDIR=$(TMP)/ - # - # After installing, remove rpath to make lintian happy. - set +e; \ - find ./debian/tmp/ -type f -print0 \ - | xargs -0 --no-run-if-empty chrpath -k 2>/dev/null \ - | fgrep RPATH= \ - | cut -d: -f 1 \ - | xargs --no-run-if-empty chrpath -d; \ - set -e + 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 $@ - # libmysqlclient-dev: forgotten header file since 3.23.25? - cp $(BUILDDIR)/include/my_config.h $(TMP)/usr/include/mysql/ - cp include/my_dir.h $(TMP)/usr/include/mysql/ +# 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 $@ - # mysql-common: We provide our own version of this package for - # completeness, but we can use an existing version; mariadb-specic - # stuff is in mariadb-common - install -d $(TMP)/etc/mysql - install -m 0644 debian/additions/my.cnf $(TMP)/etc/mysql/my.cnf +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 - # mariadb-common: MariaDB-specific config stuff. - install -d $(TMP)/etc/mysql/conf.d - install -m 0644 debian/additions/mariadb.cnf $(TMP)/etc/mysql/conf.d/mariadb.cnf +override_dh_auto_install: + @echo "RULES.$@" + dh_testdir + dh_testroot - # mariadb-client - install -m 0755 debian/additions/mysqlreport $(TMP)/usr/bin/ - install -m 0755 debian/additions/innotop/innotop $(TMP)/usr/bin/ - install -m 0644 debian/additions/innotop/innotop.1 $(TMP)/usr/share/man/man1/ + # 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 - # mariadb-server - install -m 0755 $(BUILDDIR)/scripts/mysqld_safe $(TMP)/usr/bin/mysqld_safe - mkdir -p $(TMP)/usr/share/doc/mariadb-server-10.2/examples - # We have a sane my.cnf, cruft not needed (remove my-*.cnf and config-*.cnf) - # $(TMP)/usr/share/mysql/*cnf $(TMP)/usr/share/doc/mariadb-server-10.2/examples/ - rm -vf $(TMP)/usr/share/mysql/my-*.cnf \ - $(TMP)/usr/share/mysql/config-*.cnf \ - $(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 -9 > $(TMP)/usr/share/doc/mariadb-server-10.2/mysqld.sym.gz - install -m 0755 debian/additions/echo_stderr $(TMP)/usr/share/mysql/ - install -m 0755 debian/additions/debian-start $(TMP)/etc/mysql/ - install -m 0755 debian/additions/debian-start.inc.sh $(TMP)/usr/share/mysql/ + # 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 - install -m 0644 $(builddir)/Docs/INFO_SRC $(TMP)/usr/share/doc/mariadb-server-10.2/INFO_SRC - install -m 0644 $(builddir)/Docs/INFO_BIN $(TMP)/usr/share/doc/mariadb-server-10.2/INFO_BIN + # make install + cd $(BUILDDIR) && $(MAKE) install DESTDIR=$(TMP) - # mariadb-test - mv $(TMP)/usr/mysql-test $(TMP)/usr/share/mysql + # 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/; \ @@ -185,98 +135,28 @@ install: build 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; - # install AppArmor profile + # 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 - autorm=debian/autorm-file; \ - rm -f $$autorm; \ - ignore=''; \ - for p in $$MARIADB_OPTIONAL_DEBS; do \ - p=mariadb-$$p; \ - dh_movefiles --package=$$p || echo "../$$p*.deb" >> $$autorm; \ - ignore="$$ignore --no-package=$$p"; \ - done; \ - sh -c "dh_movefiles $$ignore" - -# Build architecture-independent files here. -binary-indep: build install - @echo "RULES.binary-indep" - dh_testdir -i - dh_testroot -i - dh_installdebconf -i - dh_installdocs -i - dh_installexamples -i - dh_installmenu -i - dh_installlogrotate -i - dh_installinit -i - dh_installcron -i - dh_installman -i - dh_installinfo -i - dh_installlogcheck -i - dh_installchangelogs -i - dh_link -i - dh_compress -i - dh_fixperms -i - dh_installdeb -i - dh_perl -i - dh_gencontrol -i - dh_md5sums -i - dh_builddeb -i - -# Build architecture-dependent files here. -binary-arch: build install - @echo "RULES.binary-arch" - dh_testdir - dh_testroot + touch $@ - dh_installdebconf -a - dh_installdocs -a - dh_installexamples -a - dh_installmenu -a - dh_installlogrotate -a --name mysql-server - if [ -x /usr/bin/dh_systemd_enable -a -f debian/mariadb-server-10.2/lib/systemd/system/mariadb.service ]; then dh_systemd_enable -pmariadb-server-10.2 mariadb.service; fi - if [ -x /usr/bin/dh_systemd_enable -a -f debian/mariadb-server-10.2/lib/systemd/system/mariadb@.service ]; then dh_systemd_enable --no-enable -pmariadb-server-10.2 mariadb@.service; fi - # Start mysql in runlevel 19 before 20 where apache, proftpd etc gets - # started which might depend on a running database server. - dh_installinit -a --name=mysql -- defaults 19 21 - if [ -x /usr/bin/dh_systemd_start -a -f debian/mariadb-server-10.2/lib/systemd/system/mariadb.service ]; then dh_systemd_start -pmariadb-server-10.2 --restart-after-upgrade mariadb.service; fi - dh_installcron -a --name mysql-server - dh_installman -a - dh_installinfo -a - dh_installlogcheck -a - dh_installchangelogs -a - dh_strip -a - dh_link -a # .so muss nach .so.1.2.3 installier werden! - dh_compress -a --exclude=INFO_BIN - dh_fixperms -a - dh_makeshlibs -a - dh_makeshlibs -plibmariadbclient18 -V'libmariadbclient18 (>= 5.5.1-1)' - dh_installdeb -a - dh_perl -a - dh_shlibdeps -a -l debian/libmariadbclient18/usr/lib -L libmariadbclient18 - dh_gencontrol -a - dh_md5sums -a - dh_builddeb -a +override_dh_installlogrotate-arch: + dh_installlogrotate --name mysql-server -source diff: - @echo >&2 'source and diff are obsolete - use dpkg-source -b'; false +# 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 -binary: binary-indep binary-arch +override_dh_installcron-arch: + dh_installcron --name mysql-server get-orig-source: - @wget -nv -T10 -t3 \ - -O /tmp/mysql-$(DEB_UPSTREAM_VERSION).tar.gz \ - http://ftp.gwdg.de/pub/misc/mysql/Downloads/MySQL-$(DEB_UPSTREAM_VERSION_MAJOR_MINOR)/mysql-$(DEB_UPSTREAM_VERSION).tar.gz - @tar xfz /tmp/mysql-$(DEB_UPSTREAM_VERSION).tar.gz -C /tmp - @rm -rf /tmp/mysql-$(DEB_UPSTREAM_VERSION)/Docs - @rm -rf /tmp/mysql-$(DEB_UPSTREAM_VERSION)/debian - @mv /tmp/mysql-$(DEB_UPSTREAM_VERSION) /tmp/$(DEB_SOURCE_PACKAGE)-$(DEB_UPSTREAM_VERSION).orig - @cd /tmp ; tar czf $(DEB_SOURCE_PACKAGE)_$(DEB_UPSTREAM_VERSION).orig.tar.gz $(DEB_SOURCE_PACKAGE)-$(DEB_UPSTREAM_VERSION).orig - @rm -f /tmp/mysql-$(DEB_UPSTREAM_VERSION).tar.gz - @rm -rf /tmp/$(DEB_SOURCE_PACKAGE)-$(DEB_UPSTREAM_VERSION).orig + uscan --force-download --verbose -.PHONY: clean clean-patched configure build binary binary-indep binary-arch install patch unpatch +%: + dh $@ --parallel # vim: ts=8 |