1
0
python-mailman/python-mailman.spec
Andreas Schneider e28ada2a2b Accepting request 1123459 from home:darix:branches:devel:languages:python:mailman
- make it easier to notice to keep buildrequires and runtime
  requires version limits in sync. This will also help us to notice
  early when the version of other libraries do not match the
  requires encoded in the source code.

OBS-URL: https://build.opensuse.org/request/show/1123459
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:mailman/python-mailman?expand=0&rev=88
2023-11-06 08:24:27 +00:00

307 lines
12 KiB
RPMSpec

#
# spec file
#
# Copyright (c) 2023 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/
#
# keep in sync with setup.py
%global aiosmtpd_min_version 1.4.3
# normally it would be 1.6.2,!=1.7.0 but to avoid super comlex constructs in the spec file ... lets go with the version that we have in TW
%global alembic_min_version 1.12
%global authheaders_min_version 0.15.2
%global authres_min_version 1.0.1
%global click_min_version 8.0.0
%global dnspython_min_version 1.14.0
%global falcon_min_version 3.0.0
%global flufl_bounce_min_version 4.0
%global flufl_i18n_min_version 3.2
%global flufl_lock_min_version 5.1
%global python_dateutil_min_version 2.0
%global sqlalchemy_min_version 1.4.0
%global zope_interface_min_version 5.0
%define mailman_user mailman
%define mailman_group mailman
%define mailman_name mailman
%define mailman_homedir %{_localstatedir}/lib/%{mailman_name}
%define mailman_logdir %{_localstatedir}/log/%{mailman_name}
%define mailman_spooldir %{_localstatedir}/spool/%{mailman_name}
%define mailman_rundir %{_rundir}/%{mailman_name}
%define mailman_lockdir %{_rundir}/lock/%{mailman_name}
%global mailman_services %{mailman_name}.service %{mailman_name}-digests.service %{mailman_name}-digests.timer %{mailman_name}-notify.service %{mailman_name}-notify.timer
%global flavor @BUILD_FLAVOR@%{nil}
%if "%{flavor}" == "test"
%define psuffix -test
%bcond_without test
%else
%define psuffix %{nil}
%bcond_with test
%endif
%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150500
# Newest python supported by mailman is Python 3.11
# See https://gitlab.com/mailman/mailman/-/blob/master/src/mailman/docs/NEWS.rst
%define pythons python311
%define mypython python311
%define mypython_sitelib %{python311_sitelib}
%else
%{?!python_module:%define python_module() python3-%{**}}
%define pythons python3
%define mypython python3
%define mypython_sitelib %{python3_sitelib}
%endif
Name: python-mailman%{psuffix}
Version: 3.3.9
Release: 0
Summary: A Mailing List Manager
Group: Productivity/Networking/Email/Mailinglists
License: GPL-3.0-only
URL: https://www.list.org
Source0: https://files.pythonhosted.org/packages/source/m/mailman/mailman-%{version}.tar.gz
#
Source10: mailman.cfg
Source11: mailman.service
Source12: mailman-tmpfiles.conf
Source13: mailman.logrotate
#
Source20: mailman-digests.service
Source21: mailman-digests.timer
Source22: mailman-notify.service
Source23: mailman-notify.timer
#
Source30: README.SUSE.md
Source31: python-mailman.rpmlintrc
#
Source100: https://gitlab.com/mailman/mailman/-/raw/master/src/mailman/testing/ssl_test_cert.crt
Source101: https://gitlab.com/mailman/mailman/-/raw/master/src/mailman/testing/ssl_test_key.key
#
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
%if 0%{?suse_version} >= 1550
# use the real python3 primary for rpm pythondistdeps.py
BuildRequires: python3-packaging
%endif
BuildArch: noarch
%if %{with test}
BuildRequires: %{python_module flufl.testing}
BuildRequires: %{python_module nose2}
BuildRequires: %{python_module pytest}
BuildRequires: mailman3 = %{version}
%endif
%description
Mailman is a mailing list manager from the GNU project.
%package -n mailman3
Summary: A mailing list manager
Requires: %{mypython}-SQLAlchemy >= %{sqlalchemy_min_version}
Requires: %{mypython}-aiosmtpd >= %{aiosmtpd_min_version}
Requires: %{mypython}-alembic >= %{alembic_min_version}
Requires: %{mypython}-atpublic
Requires: %{mypython}-authheaders >= %{authheaders_min_version}
Requires: %{mypython}-authres >= %{authres_min_version}
Requires: %{mypython}-click >= %{click_min_version}
Requires: %{mypython}-dnspython >= %{dnspython_min_version}
Requires: %{mypython}-falcon > %{falcon_min_version}
Requires: %{mypython}-flufl.bounce >= %{flufl_bounce_min_version}
Requires: %{mypython}-flufl.i18n >= %{flufl_i18n_min_version}
Requires: %{mypython}-flufl.lock >= %{flufl_lock_min_version}
Requires: %{mypython}-gunicorn
Requires: %{mypython}-importlib-resources >= 1.1.0
Requires: %{mypython}-lazr.config
Requires: %{mypython}-passlib
Requires: %{mypython}-psycopg2
Requires: %{mypython}-python-dateutil >= %{python_dateutil_min_version}
Requires: %{mypython}-requests
Requires: %{mypython}-setuptools
Requires: %{mypython}-zope.component
Requires: %{mypython}-zope.configuration
Requires: %{mypython}-zope.event
Requires: %{mypython}-zope.interface >= %{zope_interface_min_version}
Requires: logrotate
Requires(pre): /usr/sbin/groupadd
Requires(post): update-alternatives
Requires(postun):update-alternatives
Provides: mailman = %{version}
%if "%{expand:%%%{mypython}_provides}" == "python3"
Provides: python3-mailman = %{version}-%{release}
%endif
Obsoletes: python3-mailman < %{version}-%{release}
# help in replacing any previously installed multiflavor package back to the unprefixed package
Provides: %{mypython}-mailman = %{version}-%{release}
Obsoletes: %{mypython}-mailman < %{version}-%{release}
%description -n mailman3
Mailman is a mailing list manager from the GNU project.
%prep
%autosetup -p1 -n mailman-%{version}
# https://gitlab.com/mailman/mailman/-/issues/704
cp %{SOURCE100} src/mailman/testing/
cp %{SOURCE101} src/mailman/testing/
cp %{SOURCE30} .
%build
sed -i 's:/sbin:%{_prefix}/bin:' src/mailman/config/mailman.cfg
%if 0%{?suse_version} > 1500
pushd src/mailman
for i in $(grep -r '^from importlib_resources' | sed 's/\(.*\.py\):.*/\1/'); do
line=$(grep '^from importlib_resources' $i)
what_import=$(echo $line | sed 's:.* import ::')
sed -i "s@^\(from importlib_resources.*\)@try:\n from importlib.resources import $what_import\nexcept ImportError:\n \1\n@" $i;
done
popd
sed '/importlib_resources/d' -i src/mailman.egg-info/requires.txt setup.py
%endif
%python_build
./generate_mo.sh
%install
%if !%{with test}
%python_install
%python_expand %fdupes %{buildroot}%{$python_sitelib}
install -d -m 0755 \
%{buildroot}%{_sysconfdir} \
%{buildroot}%{_sysconfdir}/%{mailman_name}.d \
%{buildroot}%{_tmpfilesdir} \
%{buildroot}%{_sbindir} \
%{buildroot}%{_unitdir} \
%{buildroot}%{mailman_homedir} \
%{buildroot}%{mailman_homedir}/data \
%{buildroot}%{mailman_rundir} \
%{buildroot}%{mailman_lockdir} \
%{buildroot}%{mailman_logdir} \
%{buildroot}%{mailman_spooldir}
%if 0%{?suse_version} > 1500
install -d -m 0755 %{buildroot}%{_distconfdir}/logrotate.d
install -m 0644 %{SOURCE13} %{buildroot}%{_distconfdir}/logrotate.d/%{mailman_name}
sed -i 's,@LOGDIR@,%{mailman_logdir},g;s,@BINDIR@,%{_bindir},g' \
%{buildroot}%{_distconfdir}/logrotate.d/%{mailman_name}
%else
install -d -m 0755 %{buildroot}%{_sysconfdir}/logrotate.d
install -m 0644 %{SOURCE13} %{buildroot}%{_sysconfdir}/logrotate.d/%{mailman_name}
sed -i 's,@LOGDIR@,%{mailman_logdir},g;s,@BINDIR@,%{_bindir},g' \
%{buildroot}%{_sysconfdir}/logrotate.d/%{mailman_name}
%endif
install -m 0640 %{SOURCE10} %{buildroot}%{_sysconfdir}/%{mailman_name}.cfg
install -m 0644 %{SOURCE11} %{buildroot}%{_unitdir}/%{mailman_name}.service
install -m 0644 %{SOURCE12} %{buildroot}%{_tmpfilesdir}/%{mailman_name}.conf
install -m 0644 %{SOURCE20} %{buildroot}%{_unitdir}/%{mailman_name}-digests.service
install -m 0644 %{SOURCE21} %{buildroot}%{_unitdir}/%{mailman_name}-digests.timer
install -m 0644 %{SOURCE22} %{buildroot}%{_unitdir}/%{mailman_name}-notify.service
install -m 0644 %{SOURCE23} %{buildroot}%{_unitdir}/%{mailman_name}-notify.timer
ln -s /sbin/service %{buildroot}%{_sbindir}/rc%{mailman_name}
ln -s /sbin/service %{buildroot}%{_sbindir}/rc%{mailman_name}-digests
ln -s /sbin/service %{buildroot}%{_sbindir}/rc%{mailman_name}-notify
%endif
%check
%if %{with test}
export LANG=C.UTF-8
%if 0%{?suse_version} <= 1500
# mailman.rest.tests.test_wsgiapp.TestSupportedContentType
# AssertionError: 'application/json; charset=UTF-8' != 'application/json'
rm src/mailman/rest/tests/test_wsgiapp.py
%endif
# doctest fails miserably
find -name '*.rst' -exec rm {} \;
# used to have ports 902{4,5}
rm src/mailman/mta/tests/test_aliases.py
# PermissionError: [Errno 13] Permission denied: '/usr/bin/master'
rm src/mailman/core/tests/test_logging.py
# PermissionError: [Errno 13] Permission denied: '/usr/bin/master'
rm src/mailman/commands/tests/test_cli_control.py
# https://gitlab.com/mailman/mailman/issues/654
rm src/mailman/commands/tests/test_cli_create.py
# do not use well known ports 9024 and 9025
sed -i "s:\(902\):4\1:" src/mailman/testing/testing.cfg
#
%python_exec -m nose2 -v
%endif
%if !%{with test}
%pre -n mailman3
getent group %{mailman_group} >/dev/null || \
%{_sbindir}/groupadd -r %{mailman_group}
getent passwd %{mailman_user} >/dev/null || \
%{_sbindir}/useradd -r -g %{mailman_group} -s /sbin/nologin \
-c "mailman daemon user" -d %{mailman_homedir} %{mailman_user}
%{_sbindir}/usermod -g %{mailman_group} %{mailman_user} >/dev/null
%service_add_pre %{mailman_services}
%if 0%{?suse_version} > 1500
# Prepare for migration to /usr/etc; save any old .rpmsave
for i in logrotate.d/%{mailman_name} ; do
test -f %{_sysconfdir}/${i}.rpmsave && mv -v %{_sysconfdir}/${i}.rpmsave %{_sysconfdir}/${i}.rpmsave.old ||:
done
%endif
%if 0%{?suse_version} > 1500
%posttrans -n mailman3
# Migration to /usr/etc, restore just created .rpmsave
for i in logrotate.d/%{mailman_name} ; do
test -f %{_sysconfdir}/${i}.rpmsave && mv -v %{_sysconfdir}/${i}.rpmsave %{_sysconfdir}/${i} ||:
done
%endif
%post -n mailman3
%tmpfiles_create %{_tmpfilesdir}/%{mailman_name}.conf
%service_add_post %{mailman_services}
%preun -n mailman3
%service_del_preun %{mailman_services}
%postun -n mailman3
%service_del_postun %{mailman_services}
%files -n mailman3
%doc README.rst README.SUSE.md src/mailman/docs/NEWS.rst
%license COPYING
%{_sbindir}/rc%{mailman_name}*
%{_bindir}/runner
%{_bindir}/mailman
%{_bindir}/master
%{mypython_sitelib}/mailman
%{mypython_sitelib}/mailman-%{version}*-info
%{_unitdir}/%{mailman_name}.service
%{_unitdir}/%{mailman_name}-digests.service
%{_unitdir}/%{mailman_name}-digests.timer
%{_unitdir}/%{mailman_name}-notify.service
%{_unitdir}/%{mailman_name}-notify.timer
%{_tmpfilesdir}/%{mailman_name}.conf
%config(noreplace) %attr(640,root,mailman) %{_sysconfdir}/mailman.cfg
%if 0%{?suse_version} > 1500
%{_distconfdir}/logrotate.d/%{mailman_name}
%else
%config(noreplace) %{_sysconfdir}/logrotate.d/%{mailman_name}
%endif
%dir %attr(750,root,mailman) %{_sysconfdir}/%{mailman_name}.d
%dir %attr(750,mailman,mailman) %{mailman_homedir}
%dir %attr(770,mailman,mail) %{mailman_homedir}/data
%dir %attr(750,mailman,mailman) %{mailman_spooldir}
%dir %attr(750,mailman,mailman) %{mailman_logdir}
%ghost %dir %{mailman_rundir}
%ghost %dir %{_rundir}/lock
%ghost %dir %{mailman_lockdir}
%endif
%changelog