File spamassassin.spec of Package spamassassin
#
# spec file for package spamassassin
#
# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%bcond_without test
%define spd_version 2.61
%define sa_version 4.0.1
%define sa_float %(echo %{sa_version} | awk -F. '{ printf "%d.%03d%03d", $1, $2, $3 }')
%define perl_float %(echo %{perl_version} | awk -F. '{ printf "%d.%03d", $1, $2 }')
%define rules_revision 1916528
%define SPAMPD spampd-%{spd_version}
Name: spamassassin
Version: %{sa_version}
Release: 0
Summary: Extensible email filter which is used to identify spam
License: Apache-2.0
Group: Productivity/Networking/Email/Utilities
URL: https://spamassassin.apache.org/
Source0: https://downloads.apache.org/spamassassin/source/Mail-SpamAssassin-%{sa_version}.tar.bz2
Source1: https://downloads.apache.org/spamassassin/source/Mail-SpamAssassin-rules-%{sa_version}.r%{rules_revision}.tgz
Source3: https://github.com/mpaperno/spampd/archive/%{spd_version}.tar.gz#/%{SPAMPD}.tar.gz
Source10: local.cf
Source11: README.SUSE
Source12: sysconfig.spamd
Source14: sysconfig.spampd
Source15: timed-sa-update
Source16: spamd.service
Source17: spampd.service
Source18: sa-update.service
Source19: sa-update.timer
Source100: https://downloads.apache.org/spamassassin/source/Mail-SpamAssassin-%{sa_version}.tar.bz2.asc
Source101: https://downloads.apache.org/spamassassin/source/Mail-SpamAssassin-rules-%{sa_version}.r%{rules_revision}.tgz.asc
# Keyring downloaded from https://www.apache.org/dist/spamassassin/KEYS
Source102: spamassassin.keyring
Source103: %{name}-rpmlintrc
Patch1: patch-PgSQL
Patch2: patch-URIDNSBL
Patch6: bnc#582111.diff
Patch7: basic-lint-without-sandbox.patch
BuildRequires: pkgconfig(openssl)
BuildRequires: pkgconfig(zlib)
# optional, but want them for build (test)
BuildRequires: curl >= 7.2.14
BuildRequires: gpg
BuildRequires: netcfg
BuildRequires: re2c
BuildRequires: wget >= 1.8.2
#
Requires: re2c
Requires: spamassassin-spamc = %{sa_version}
Requires: (curl >= 7.2.14 or wget >= 1.8.2)
Requires: perl(Archive::Tar) >= 1.23
Requires: perl(Error)
Requires: perl(IO::Zlib) >= 1.04
Requires: perl(LWP)
Requires: perl(Mail::SpamAssassin) = %{sa_float}
Requires: perl(Net::Server::PreForkSimple)
Requires(post): %fillup_prereq
%{?systemd_ordering}
%description
spamassassin adds a header line that shows if the mail has been
determined spam or not. This way, you can decide what to do with the
mail within the scope of your own filtering rules in your MUA (Mail
User Agent, your mail program) or your LDA (Local Delivery Agent).
See the files in the documentation directory
%{_docdir}/spamassassin/ for more information on how to
use the filter.
%package spamc
Summary: Spammassassin Client
Group: Productivity/Networking/Email/Utilities
%description spamc
Spamc is the client to contact the spammassassin spamd daemon. It should
be used in place of "spamassassin" in scripts to process mail.
%package -n perl-Mail-SpamAssassin
Summary: Perl Modules For Using Spamassassin Within An Own Perl Script
Group: Development/Libraries/Perl
BuildRequires: perl(Archive::Tar) >= 1.23
BuildRequires: perl(Compress::Zlib)
BuildRequires: perl(DB_File)
BuildRequires: perl(Digest::SHA1)
BuildRequires: perl(Errno)
BuildRequires: perl(File::Copy) >= 2.02
BuildRequires: perl(File::Spec) >= 0.8
BuildRequires: perl(Getopt::Long) >= 2.32
BuildRequires: perl(HTML::Parser) >= 3.43
BuildRequires: perl(IO::Zlib) >= 1.04
BuildRequires: perl(MIME::Base64)
BuildRequires: perl(Mail::DKIM) >= 0.37
BuildRequires: perl(Net::DNS) >= 0.69
BuildRequires: perl(Net::SMTP)
BuildRequires: perl(NetAddr::IP) >= 4.010
BuildRequires: perl(Pod::Usage) >= 1.10
BuildRequires: perl(Sys::Hostname)
BuildRequires: perl(Test::More)
BuildRequires: perl(Time::HiRes)
BuildRequires: perl(Time::Local)
# required for tests
BuildRequires: perl(Devel::Cycle)
#BuildRequires: perl(Perl::Critic::Policy::Perlsecret)
BuildRequires: perl(Perl::Critic::Policy::TestingAndDebugging::ProhibitNoStrict)
BuildRequires: perl(Test::More)
BuildRequires: perl(Text::Diff)
# optional, but want them for build (test)
BuildRequires: perl(Archive::Zip)
BuildRequires: perl(BSD::Resource)
BuildRequires: perl(DBD::SQLite)
BuildRequires: perl(DBI)
BuildRequires: perl(Devel::Cycle)
BuildRequires: perl(Email::Address::XS)
BuildRequires: perl(Encode::Detect::Detector)
BuildRequires: perl(HTTP::Date)
BuildRequires: perl(IO::Socket::IP)
BuildRequires: perl(IO::Socket::SSL) >= 1.76
BuildRequires: perl(IO::String)
BuildRequires: perl(IP::Country::Fast)
BuildRequires: perl(LWP::UserAgent)
BuildRequires: perl(Mail::SPF) >= 2.001
BuildRequires: perl(Net::CIDR::Lite)
BuildRequires: perl(Net::Ident)
BuildRequires: perl(Net::LibIDN)
BuildRequires: perl(Net::Patricia) >= 1.16
BuildRequires: perl(Razor2::Client::Agent) >= 2.61
#
Requires: perl(Archive::Zip)
Requires: perl(Digest::SHA1)
Requires: perl(Errno)
Requires: perl(File::Copy) >= 2.02
Requires: perl(File::Spec) >= 0.8
Requires: perl(HTML::Parser) >= 3.43
Requires: perl(Mail::DKIM) >= 0.31
Requires: perl(Net::DNS) >= 0.69
Requires: perl(NetAddr::IP) >= 4.010
Requires: perl(Pod::Usage) >= 1.10
Requires: perl(Sys::Hostname)
Requires: perl(Time::HiRes)
Requires: perl(Time::Local)
Recommends: perl(Archive::Tar) >= 1.23
Recommends: perl(BSD::Resource)
Recommends: perl(Compress::Zlib)
Recommends: perl(DB_File)
Recommends: perl(Email::Address::XS)
Recommends: perl(Encode::Detect::Detector)
Recommends: perl(Getopt::Long) >= 2.32
Recommends: perl(HTTP::Date)
Recommends: perl(IO::Socket::IP)
Recommends: perl(IO::Socket::SSL) >= 1.76
Recommends: perl(IO::String)
Recommends: perl(IO::Zlib) >= 1.04
Recommends: perl(IP::Country::Fast)
Recommends: perl(LWP::UserAgent)
Recommends: perl(MIME::Base64)
Recommends: perl(Mail::DKIM) >= 0.37
Recommends: perl(Mail::SPF) >= 2.001
Recommends: perl(Net::CIDR::Lite)
Recommends: perl(Net::DNS) >= 0.58
Recommends: perl(Net::Ident)
Recommends: perl(Net::LibIDN)
Recommends: perl(Net::Patricia) >= 1.16
Recommends: perl(Net::SMTP)
Recommends: perl(Razor2::Client::Agent) >= 2.61
Recommends: perl(Test::More)
Suggests: perl(DBD::mysql)
Suggests: perl(DBI)
Suggests: perl(Geo::IP)
Suggests: perl(GeoIP2::Database::Reader)
Provides: perl-spamassassin = %{sa_version}
Obsoletes: perl-spamassassin < %{sa_version}
BuildArch: noarch
%{perl_requires}
%description -n perl-Mail-SpamAssassin
This package contains the perl modules for the spamassassin, including
the filter rules. This package is required for the package
"spamassassin", the commandline tool.
%prep
%setup -q -n Mail-SpamAssassin-%{sa_version} -a 3
tar -zxf %{SOURCE1} -C rules
%patch -P 1
%patch -P 2 -p1
%patch -P 6
%patch -P 7 -p1
cp %{SOURCE11} ./
%build
# Run substitutions in default rules
sed -i -e 's|@@CONTACT_ADDRESS@@|postmaster|g' \
-e 's|@@LOCAL_RULES_DIR@@|%{_sysconfdir}/mail/spamassassin|g' \
-e 's|@@VERSION@@|%{sa_float}|g' rules/*.cf
export CFLAGS="%{optflags}"
perl Makefile.PL INSTALLDIRS=vendor OPTIMIZE="%{optflags}" \
CONTACT_ADDRESS="postmaster" ENABLE_SSL="yes"
%make_build
%check
%if %{with test}
# Relax the crypto policies for the test-suite
export OPENSSL_SYSTEM_CIPHERS_OVERRIDE=xyz_nonexistent_file
export OPENSSL_CONF=''
%make_build -j1 test
%endif
%install
## perl-Mail-SpamAssassin stuff
%perl_make_install
%perl_process_packlist
%perl_gen_filelist
# remove %%{_bindir} from filelist
sed -i -e "/\/usr\/bin/d" %{name}.files
# package only %%{_mandir}/man3
sed -i -e "s,%{_mandir}/man?,%{_mandir}/man3," %{name}.files
#
## spamassassin stuff
install -D -m0755 %{SPAMPD}/spampd.pl %{buildroot}%{_sbindir}/spampd
install -m 0755 %{SOURCE15} %{buildroot}%{_sbindir}/
mv %{buildroot}%{_bindir}/spamd %{buildroot}%{_sbindir}/
install -d %{buildroot}%{_sysconfdir}/mail/spamassassin
install -m 0644 %{SOURCE10} %{buildroot}%{_sysconfdir}/mail/spamassassin/local.cf
ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rcspamd
ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rcspampd
install -D -m 0640 %{SOURCE12} %{buildroot}%{_fillupdir}/sysconfig.spamd
install -m 0640 %{SOURCE14} %{buildroot}%{_fillupdir}/
test -f %{buildroot}%{_datadir}/spamassassin/user_prefs.template || {
echo "MakeMaker is broken again..."
exit 1
}
## default rules
install -d %{buildroot}%{_datadir}/spamassassin
install -D -m 0644 rules/[0-9]*.cf %{buildroot}%{_datadir}/spamassassin
## systemd stuff
install -d %{buildroot}%{_unitdir}
install -D -m 644 %{SOURCE16} %{buildroot}%{_unitdir}
install -D -m 644 %{SOURCE17} %{buildroot}%{_unitdir}
install -D -m 644 %{SOURCE18} %{buildroot}%{_unitdir}
install -D -m 644 %{SOURCE19} %{buildroot}%{_unitdir}
%post
%service_add_post spamd.service spampd.service sa-update.timer
%{fillup_only -n spamd}
%{fillup_only -n spampd}
if [ $1 -gt 1 ]; then
# Package upgrade
for dir in $(ls -d %{_sharedstatedir}/%{name}/{,compiled/*/}[0-9\.]* 2>/dev/null); do
if [ "${dir##*/}" != "%{sa_float}" ]; then
rm -rf ${dir}
fi
done
find %{_sharedstatedir}/%{name} -type d -empty -delete 2>/dev/null || :
# Compile rules if Perl and/or spamassassin version changed
if [ ! -d %{_sharedstatedir}/%{name}/compiled/%{perl_float}/%{sa_float} ]; then
grep -q "^SPAM_SA_COMPILE.*yes.*" %{_sysconfdir}/sysconfig/spamd && %{_bindir}/sa-compile &> /dev/null || :
fi
fi
%pre
%service_add_pre spamd.service spampd.service sa-update.timer
%preun
%service_del_preun spamd.service spampd.service sa-update.timer
%postun
%service_del_postun spamd.service spampd.service sa-update.timer
if [ $1 -eq 0 ]; then
# Package removal
rm -rf %{_sharedstatedir}/%{name}
fi
%files
%defattr(-,root,root)
%doc spamd/README spamd/README.vpopmail spamd/PROTOCOL README.SUSE
%{_mandir}/man1/sa-*
%{_mandir}/man1/spamassassin*
%{_mandir}/man1/spamd.1*
%{_bindir}/sa-*
%{_bindir}/spamassassin
%{_sbindir}/*
%{_fillupdir}/sysconfig.spamd
%{_fillupdir}/sysconfig.spampd
%{_unitdir}/spamd.service
%{_unitdir}/spampd.service
%{_unitdir}/sa-update.service
%{_unitdir}/sa-update.timer
%ghost %{_sharedstatedir}/%{name}
%files spamc
%defattr(-,root,root)
%license LICENSE
%{_bindir}/spamc
%doc %{_mandir}/man1/spamc.1*
%files -n perl-Mail-SpamAssassin -f %{name}.files
%defattr(-,root,root)
%license LICENSE
%doc CREDITS Changes MANIFEST* NOTICE PACKAGING README
%doc TRADEMARK UPGRADE USAGE sample-nonspam.txt sample-spam.txt
%doc ldap sql
%dir %{_sysconfdir}/mail
%config(noreplace) %{_sysconfdir}/mail/spamassassin
%exclude %{perl_vendorarch}
%dir %{_datadir}/spamassassin
%{_datadir}/spamassassin/*
%changelog