From 1a95a71658ee6c667423f427359a3af507f3ab50 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Fri, 17 Feb 2023 19:53:21 +0000 Subject: [PATCH] [Minor] Rework debian packages build system --- debian/control | 23 +++++++++++++++++--- debian/rules | 58 +++++++++++++++++++++++++++++++++++--------------- 2 files changed, 61 insertions(+), 20 deletions(-) diff --git a/debian/control b/debian/control index 97211dbc6..46fcff85d 100644 --- a/debian/control +++ b/debian/control @@ -6,10 +6,7 @@ Build-Depends: cmake, debhelper (>= 10), libcurl4-openssl-dev, libglib2.0-dev, - libhyperscan-dev [amd64 i386], libicu-dev, - libjemalloc-dev, - libluajit-5.1-dev [amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64 ppc64el] | liblua5.1-dev, libmagic-dev, libpcre2-dev, libsodium-dev, @@ -26,15 +23,35 @@ Vcs-Browser: https://github.com/vstakhov/rspamd Package: rspamd Architecture: any +Conflicts: rspamd-asan +Provides: rspamd Depends: adduser, lsb-base, ca-certificates, ${misc:Depends}, ${shlibs:Depends} Description: Rapid spam filtering system Rspamd is a rapid, modular and lightweight spam filter. It is designed to work with big amount of mail and can be easily extended with own filters written in Lua. +Package: rspamd-asan +Architecture: any +Conflicts: rspamd +Provides: rspamd +Depends: adduser, lsb-base, ca-certificates, ${misc:Depends}, ${shlibs:Depends} +Description: Rapid spam filtering system + Rspamd is a rapid, modular and lightweight spam filter. It is designed to work + with big amount of mail and can be easily extended with own filters written in + Lua. This package is build with no compile optimisations and with ASAN library + to be used when there is a need to debug Rspamd. + Package: rspamd-dbg Architecture: any Section: debug Depends: rspamd (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends} Description: debugging symbols for rspamd This package contains the debugging symbols for rspamd. + +Package: rspamd-dbg-asan +Architecture: any +Section: debug +Depends: rspamd-asan (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends} +Description: debugging symbols for rspamd-asan + This package contains the debugging symbols for rspamd-asan. diff --git a/debian/rules b/debian/rules index f702e46de..f4c922447 100755 --- a/debian/rules +++ b/debian/rules @@ -5,26 +5,39 @@ export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed export ASAN_OPTIONS=detect_leaks=0 DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH) +builddir = debian/build/flavor- +FLAVORS = release asan +CONFIG_asan = -DCMAKE_BUILD_TYPE=Debug -DSANITIZE=address -DENABLE_LTO=OFF +CONFIG_release = -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_LTO=ON ifneq ($(filter $(DEB_HOST_ARCH),amd64 armel armhf i386 mips mips64el mipsel ppc64 ppc64el),) - ENABLE_LUAJIT := ON + ENABLE_LUAJIT := -DENABLE_LUAJIT=ON -DLUA_ROOT=/luajit-build else - ENABLE_LUAJIT := OFF + ENABLE_LUAJIT := -DENABLE_LUAJIT=OFF endif # Can be filled by a build system EXTRA_ARGS := +ENABLE_JEMALLOC := -DENABLE_JEMALLOC=OFF -ifneq ($(filter $(DEB_HOST_ARCH),amd64 i386),) +ifneq ($(filter $(DEB_HOST_ARCH),amd64 i386 arm64),) +ifeq ($(filter $(DEB_HOST_ARCH),arm64),) + ENABLE_JEMALLOC := -DENABLE_JEMALLOC=ON + ENABLE_HYPERSCAN := -DENABLE_HYPERSCAN=ON -DHYPERSCAN_ROOT_DIR=/vectorscan +else ENABLE_HYPERSCAN := -DENABLE_HYPERSCAN=ON +endif else - ENABLE_HYPERSCAN := + ENABLE_HYPERSCAN := -DENABLE_HYPERSCAN=OFF endif + %: dh $@ --with systemd --parallel -override_dh_auto_configure: - dh_auto_configure -- -DCONFDIR=/etc/rspamd \ +override_dh_auto_configure: $(patsubst %,configure_%,$(FLAVORS)) +configure_%: + mkdir -p $(builddir)$* + cd $(builddir)$* && cmake ../../../ -DCONFDIR=/etc/rspamd -DCMAKE_C_COMPILER=clang-16 -DCMAKE_CXX_COMPILER=clang++-16 \ -DMANDIR=/usr/share/man \ -DRUNDIR=/run/rspamd \ -DDBDIR=/var/lib/rspamd \ @@ -33,11 +46,9 @@ override_dh_auto_configure: -DLIBDIR=/usr/lib/rspamd \ -DINCLUDEDIR=/usr/include \ -DSYSTEMDDIR=/lib/systemd/system \ - -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_INSTALL_PREFIX:PATH=/usr \ -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \ - -DENABLE_LTO=ON \ -DDEBIAN_BUILD=1 \ - -DENABLE_JEMALLOC=ON \ -DENABLE_PCRE2=ON \ -DENABLE_LUAJIT=$(ENABLE_LUAJIT) \ -DENABLE_LIBUNWIND=ON \ @@ -45,20 +56,33 @@ override_dh_auto_configure: -DENABLE_STATIC_LIBCXX=OFF \ -DENABLE_LIBCXX=OFF \ $(ENABLE_HYPERSCAN) \ + $(ENABLE_LUAJIT) \ + $(ENABLE_JEMALLOC) \ + $(CONFIG_$*) \ $(EXTRA_ARGS) -override_dh_strip: - dh_strip --dbg-package=rspamd-dbg +override_dh_auto_build: $(patsubst %,build_%,$(FLAVORS)) +build_%: + dh_auto_build --sourcedirectory=$(builddir)$* + +override_dh_strip: $(patsubst %,strip_%,$(FLAVORS)) +strip_%: + if [ "$*" = "asan" ]; then \ + dh_strip --dbg-package=rspamd-dbg-asan ; \ + else \ + dh_strip --dbg-package=rspamd-dbg ; \ + fi override_dh_makeshlibs: dh_makeshlibs -Xrspamd-actrie -override_dh_auto_install: - dh_auto_install --destdir=debian/rspamd - -override_dh_auto_clean: - dh_auto_clean - rm -f src/modules.c +override_dh_auto_install: $(patsubst %,install_%,$(FLAVORS)) +install_%: + if [ "$*" = "asan" ]; then \ + cd $(builddir)$* && make install DESTDIR=../../../debian/rspamd-asan ; \ + else \ + cd $(builddir)$* && make install DESTDIR=../../../debian/rspamd ; \ + fi override_dh_fixperms: dh_fixperms -- 2.39.5