File rspamd.spec of Package rspamd
%define realname rspamd
%define realver 3.6
%define srcext tar.gz
%bcond_with clang
# turn off the generation of debuginfo rpm (RH9) ??
%global debug_package %{nil}
# Common info
Name: %{realname}
Version: %{realver}
Release: wiz%{?extraver:0.}1%{?dist}
License: Apache-2.0
Group: Productivity/Networking/Email/Utilities
URL: https://rspamd.com/
Summary: Fast, free and open-source spam filtering system
# Build-time parameters
BuildRequires: cmake >= 3.12 ninja
%if %{with clang}
BuildRequires: clang
%else
BuildRequires: gcc-c++
%endif
BuildRequires: pkg-config perl ragel
BuildRequires: pkgconfig(luajit)
BuildRequires: pkgconfig(jemalloc)
BuildRequires: pkgconfig(glib-2.0) >= 2.28
BuildRequires: pcre2-devel
BuildRequires: pkgconfig(sqlite3)
BuildRequires: pkgconfig(icu-uc) pkgconfig(icu-io) pkgconfig(icu-i18n)
BuildRequires: pkgconfig(openssl)
BuildRequires: zlib-devel
BuildRequires: pkgconfig(libsodium) >= 1.0.0
BuildRequires: curl-devel
BuildRequires: libzstd-devel
BuildRequires: file%{?suse_version:-devel}
BuildRequires: systemd-rpm-macros
BuildRoot: %{_tmppath}/%{name}-root
Source: https://codeload.github.com/rspamd/rspamd/%{srcext}/refs/tags/%{realver}#/%{realname}-%{realver}%{?extraver}.%{srcext}
%description
Rspamd is an advanced spam filtering system that allows evaluation of messages
by a number of rules including regular expressions, statistical analysis and
custom services such as URL black lists. Each message is analysed by rspamd and
given a "spam score".
According to this spam score and the user's settings rspamd recommends an action
for the MTA to apply to the message- for example to pass, reject or add a header.
Rspamd is designed to process hundreds of messages per second simultaneously and
has a number of features available.
# Clang plugin
%if %{with clang}
%package clang
Group: Productivity/Networking/Email/Utilities
Summary: clang plugin for %{name}
Requires: %{name} = %{version}-%{release}
BuildRequires: llvm-devel clang-devel
%description clang
clang static analysing plugin for %{name}
%files clang
%defattr(-,root,root)
%{_libdir}/%{name}/librspamd-clang.so
%endif
# Preparation step (unpackung and patching if necessary)
%prep
%setup -q -n %{realname}-%{realver}%{?extraver}
### %{__sed} -ri 's/CMAKE_C_COMPILER_ID/CMAKE_CXX_COMPILER_ID/' clang-plugin/CMakeLists.txt
%build
_CFLAGS='%{optflags} %{?gcc_lto}'
_LDFLAGS='-Wl,-as-needed -Wl,--strip-all -Wl,-z,noexecstack -Wl,-z,now -Wl,-z,relro %{?gcc_lto}'
cmake -S . -B build \
-G Ninja \
-DCMAKE_INSTALL_PREFIX=%{_prefix} \
-DCMAKE_C_FLAGS="$_CFLAGS" \
-DCMAKE_CXX_FLAGS="$_CFLAGS" \
-DCMAKE_CXX_STANDARD=11 \
-DCMAKE_EXE_LINKER_FLAGS="$_LDFLAGS" \
-DCMAKE_MODULE_LINKER_FLAGS="$_LDFLAGS" \
-DCMAKE_SHARED_LINKER_FLAGS="$_LDFLAGS" \
-DCMAKE_VERBOSE_MAKEFILE=YES \
%if %{with clang}
-DCMAKE_C_COMPILER=%{_bindir}/clang \
-DCMAKE_CXX_COMPILER=%{_bindir}/clang++ \
-DENABLE_CLANG_PLUGIN=ON \
%endif
\
-DCONFDIR=%{_sysconfdir}/%{name} \
-DLIBDIR=%{_libdir}/%{name} \
-DMANDIR=%{_mandir} \
-DPLUGINSDIR=%{_datadir}/%{name} \
-DWWWDIR=%{_datadir}/%{name}/www \
\
-DRSPAMD_USER=mail \
-DRSPAMD_GROUP=mail \
-DWANT_SYSTEMD_UNITS=ON \
-DSYSTEMDDIR=%{_unitdir} \
-DENABLE_URL_INCLUDE=ON \
-DENABLE_PCRE2=ON \
-DENABLE_JEMALLOC=ON \
-DSYSTEM_ZSTD=ON
ninja -v -C build %{?_smp_mflags}
%install
DESTDIR=%{buildroot} ninja -v -C build install
%if %{with clang}
%{__install} -m0755 build/clang-plugin/librspamd-clang.so %{buildroot}%{_libdir}/%{name}/
%endif
%{__install} -d -m0755 %{buildroot}/var/lib/rspamd
%{__install} -d -m0755 %{buildroot}/var/log/rspamd
# Fix shebang
%{__sed} -ri '1 s|^.+$|#!%{_bindir}/perl|' %{buildroot}%{_bindir}/rspamd_stats
%clean
[ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot}
%files
%defattr(-,root,root)
%license LICENSE.md
%doc AUTHORS.md CONTRIBUTING.md README.md
%dir %{_sysconfdir}/%{name}/maps.d
%dir %{_sysconfdir}/%{name}/modules.d
%dir %{_sysconfdir}/%{name}/scores.d
%dir %{_sysconfdir}/%{name}
%config(noreplace) %{_sysconfdir}/%{name}/maps.d/*.inc
%config(noreplace) %{_sysconfdir}/%{name}/modules.d/*.conf
%config(noreplace) %{_sysconfdir}/%{name}/scores.d/*.conf
%config(noreplace) %{_sysconfdir}/%{name}/*.conf
%config(noreplace) %{_sysconfdir}/%{name}/*.inc
%{_bindir}/*
%dir %{_libdir}/%{name}
%{_libdir}/%{name}/librspamd-actrie.so
%{_libdir}/%{name}/librspamd-ev.so
%{_libdir}/%{name}/librspamd-kann.so
%{_libdir}/%{name}/librspamd-replxx.so
%{_libdir}/%{name}/librspamd-server.so
%{_datadir}/%{name}/
%if 0%{?_unitdir:1}
%{?_unitdir}/%{name}.service
%else
%{_initrddir}/%{name}
%config(noreplace) %{_sysconfdir}/logrotate.d/rspamd
%if "%{expand:%_vendor}" == "suse"
%{_sbindir}/rc%{name}
%endif
%endif
%dir %attr(0755,mail,mail) /var/lib/rspamd
%dir %attr(0755,mail,mail) /var/log/rspamd
%doc %{_mandir}/man1/*
%doc %{_mandir}/man8/*
%if 0%{?suse_version}
%pre
%{service_add_pre %{name}.service}
%{service_add_pre %{name}.socket}
%post
%{service_add_post %{name}.service}
%{service_add_post %{name}.socket}
%preun
%{service_del_preun %{name}.service}
%{service_del_preun %{name}.socket}
%postun
%{service_del_postun %{name}.service}
%{service_del_postun %{name}.socket}
%endif
%changelog