* Removed unused `.package`-option. * Added explicit postgresql support. * Create a new meta-package for mailman to make sure each component has the **same** python and packages can be downgraded if needed (e.g. psycopg2 or sqlalchemy) without interfering with `pythonPackages` in any way. * Document why certain python overrides are needed. Closes #170035 Closes #158424main
parent
977df9de2e
commit
72a14ea563
@ -1,95 +1,30 @@ |
|||||||
{ lib, buildPythonPackage, fetchPypi, fetchpatch, pythonOlder, python3, postfix, lynx |
{ newScope, lib, python3 }: |
||||||
}: |
|
||||||
|
|
||||||
let |
let |
||||||
# Mailman does not support sqlalchemy >= 1.4 https://gitlab.com/mailman/mailman/-/issues/845 |
callPackage = newScope self; |
||||||
pythonOverride = python3.override { |
|
||||||
packageOverrides = self: super: { |
|
||||||
alembic = super.alembic.overridePythonAttrs (oldAttrs: { |
|
||||||
# does not find tests |
|
||||||
doCheck = false; |
|
||||||
}); |
|
||||||
sqlalchemy = super.sqlalchemy.overridePythonAttrs (oldAttrs: rec { |
|
||||||
version = "1.3.24"; |
|
||||||
src = oldAttrs.src.override { |
|
||||||
inherit version; |
|
||||||
hash = "sha256-67t3fL+TEjWbiXv4G6ANrg9ctp+6KhgmXcwYpvXvdRk="; |
|
||||||
}; |
|
||||||
# does not find tests |
|
||||||
doCheck = false; |
|
||||||
}); |
|
||||||
}; |
|
||||||
}; |
|
||||||
in |
|
||||||
|
|
||||||
buildPythonPackage rec { |
self = lib.makeExtensible (self: { |
||||||
pname = "mailman"; |
python3 = callPackage ./python.nix { inherit python3; }; |
||||||
version = "3.3.5"; |
|
||||||
disabled = pythonOlder "3.6"; |
|
||||||
|
|
||||||
src = fetchPypi { |
hyperkitty = callPackage ./hyperkitty.nix { }; |
||||||
inherit pname version; |
|
||||||
sha256 = "12mgxs1ndhdjjkydx48b95na9k9h0disfqgrr6wxx7vda6dqvcwz"; |
|
||||||
}; |
|
||||||
|
|
||||||
propagatedBuildInputs = with pythonOverride.pkgs; [ |
mailman = callPackage ./package.nix { }; |
||||||
aiosmtpd |
|
||||||
alembic |
|
||||||
authheaders |
|
||||||
click |
|
||||||
dnspython |
|
||||||
falcon |
|
||||||
flufl_bounce |
|
||||||
flufl_i18n |
|
||||||
flufl_lock |
|
||||||
gunicorn |
|
||||||
importlib-resources |
|
||||||
lazr_config |
|
||||||
passlib |
|
||||||
requests |
|
||||||
sqlalchemy |
|
||||||
zope_component |
|
||||||
zope_configuration |
|
||||||
]; |
|
||||||
|
|
||||||
patches = [ |
mailman-hyperkitty = callPackage ./mailman-hyperkitty.nix { }; |
||||||
(fetchpatch { |
|
||||||
url = "https://gitlab.com/mailman/mailman/-/commit/4b206e2a5267a0e17f345fd7b2d957122ba57566.patch"; |
|
||||||
sha256 = "06axmrn74p81wvcki36c7gfj5fp5q15zxz2yl3lrvijic7hbs4n2"; |
|
||||||
}) |
|
||||||
(fetchpatch { |
|
||||||
url = "https://gitlab.com/mailman/mailman/-/commit/9613154f3c04fa2383fbf017031ef263c291418d.patch"; |
|
||||||
sha256 = "0vyw87s857vfxbf7kihwb6w094xyxmxbi1bpdqi3ybjamjycp55r"; |
|
||||||
}) |
|
||||||
./log-stderr.patch |
|
||||||
]; |
|
||||||
|
|
||||||
postPatch = '' |
postorius = callPackage ./postorius.nix { }; |
||||||
substituteInPlace setup.py \ |
|
||||||
--replace "alembic>=1.6.2,<1.7" "alembic>=1.6.2" |
|
||||||
|
|
||||||
substituteInPlace src/mailman/config/postfix.cfg \ |
web = callPackage ./web.nix { }; |
||||||
--replace /usr/sbin/postmap ${postfix}/bin/postmap |
|
||||||
substituteInPlace src/mailman/config/schema.cfg \ |
|
||||||
--replace /usr/bin/lynx ${lynx}/bin/lynx |
|
||||||
''; |
|
||||||
|
|
||||||
# Mailman assumes that those scripts in $out/bin are Python scripts. Wrapping |
buildEnv = { web ? self.web |
||||||
# them in shell code breaks this assumption. Use the wrapped version (see |
, mailman ? self.mailman |
||||||
# wrapped.nix) if you need the CLI (rather than the Python library). |
, mailman-hyperkitty ? self.mailman-hyperkitty |
||||||
# |
, withHyperkitty ? false |
||||||
# This gives a properly wrapped 'mailman' command plus an interpreter that |
}: |
||||||
# has all the necessary search paths to execute unwrapped 'master' and |
self.python3.withPackages |
||||||
# 'runner' scripts. |
(ps: |
||||||
dontWrapPythonPrograms = true; |
[ web mailman ps.psycopg2 ] |
||||||
|
++ lib.optional withHyperkitty mailman-hyperkitty); |
||||||
# requires flufl.testing, which the upstream has archived |
}); |
||||||
doCheck = false; |
|
||||||
|
|
||||||
meta = { |
in self |
||||||
homepage = "https://www.gnu.org/software/mailman/"; |
|
||||||
description = "Free software for managing electronic mail discussion and newsletter lists"; |
|
||||||
license = lib.licenses.gpl3Plus; |
|
||||||
maintainers = with lib.maintainers; [ qyliss ]; |
|
||||||
}; |
|
||||||
} |
|
||||||
|
@ -1,15 +1,9 @@ |
|||||||
{ lib |
{ lib |
||||||
, buildPythonPackage |
, python3 |
||||||
, fetchPypi |
|
||||||
, mailman |
, mailman |
||||||
, mock |
|
||||||
, nose2 |
|
||||||
, python |
|
||||||
, pythonOlder |
|
||||||
, requests |
|
||||||
, zope_interface |
|
||||||
}: |
}: |
||||||
|
|
||||||
|
with python3.pkgs; |
||||||
buildPythonPackage rec { |
buildPythonPackage rec { |
||||||
pname = "mailman-hyperkitty"; |
pname = "mailman-hyperkitty"; |
||||||
version = "1.2.0"; |
version = "1.2.0"; |
@ -0,0 +1,76 @@ |
|||||||
|
{ lib, fetchpatch, python3, postfix, lynx |
||||||
|
}: |
||||||
|
|
||||||
|
with python3.pkgs; |
||||||
|
|
||||||
|
buildPythonPackage rec { |
||||||
|
pname = "mailman"; |
||||||
|
version = "3.3.5"; |
||||||
|
disabled = pythonOlder "3.6"; |
||||||
|
|
||||||
|
src = fetchPypi { |
||||||
|
inherit pname version; |
||||||
|
sha256 = "12mgxs1ndhdjjkydx48b95na9k9h0disfqgrr6wxx7vda6dqvcwz"; |
||||||
|
}; |
||||||
|
|
||||||
|
propagatedBuildInputs = with python3.pkgs; [ |
||||||
|
aiosmtpd |
||||||
|
alembic |
||||||
|
authheaders |
||||||
|
click |
||||||
|
dnspython |
||||||
|
falcon |
||||||
|
flufl_bounce |
||||||
|
flufl_i18n |
||||||
|
flufl_lock |
||||||
|
gunicorn |
||||||
|
importlib-resources |
||||||
|
lazr_config |
||||||
|
passlib |
||||||
|
requests |
||||||
|
sqlalchemy |
||||||
|
zope_component |
||||||
|
zope_configuration |
||||||
|
]; |
||||||
|
|
||||||
|
patches = [ |
||||||
|
(fetchpatch { |
||||||
|
url = "https://gitlab.com/mailman/mailman/-/commit/4b206e2a5267a0e17f345fd7b2d957122ba57566.patch"; |
||||||
|
sha256 = "06axmrn74p81wvcki36c7gfj5fp5q15zxz2yl3lrvijic7hbs4n2"; |
||||||
|
}) |
||||||
|
(fetchpatch { |
||||||
|
url = "https://gitlab.com/mailman/mailman/-/commit/9613154f3c04fa2383fbf017031ef263c291418d.patch"; |
||||||
|
sha256 = "0vyw87s857vfxbf7kihwb6w094xyxmxbi1bpdqi3ybjamjycp55r"; |
||||||
|
}) |
||||||
|
./log-stderr.patch |
||||||
|
]; |
||||||
|
|
||||||
|
postPatch = '' |
||||||
|
substituteInPlace setup.py \ |
||||||
|
--replace "alembic>=1.6.2,<1.7" "alembic>=1.6.2" |
||||||
|
|
||||||
|
substituteInPlace src/mailman/config/postfix.cfg \ |
||||||
|
--replace /usr/sbin/postmap ${postfix}/bin/postmap |
||||||
|
substituteInPlace src/mailman/config/schema.cfg \ |
||||||
|
--replace /usr/bin/lynx ${lynx}/bin/lynx |
||||||
|
''; |
||||||
|
|
||||||
|
# Mailman assumes that those scripts in $out/bin are Python scripts. Wrapping |
||||||
|
# them in shell code breaks this assumption. Use the wrapped version (see |
||||||
|
# wrapped.nix) if you need the CLI (rather than the Python library). |
||||||
|
# |
||||||
|
# This gives a properly wrapped 'mailman' command plus an interpreter that |
||||||
|
# has all the necessary search paths to execute unwrapped 'master' and |
||||||
|
# 'runner' scripts. |
||||||
|
dontWrapPythonPrograms = true; |
||||||
|
|
||||||
|
# requires flufl.testing, which the upstream has archived |
||||||
|
doCheck = false; |
||||||
|
|
||||||
|
meta = { |
||||||
|
homepage = "https://www.gnu.org/software/mailman/"; |
||||||
|
description = "Free software for managing electronic mail discussion and newsletter lists"; |
||||||
|
license = lib.licenses.gpl3Plus; |
||||||
|
maintainers = with lib.maintainers; [ qyliss ma27 ]; |
||||||
|
}; |
||||||
|
} |
@ -0,0 +1,30 @@ |
|||||||
|
{ python3 }: |
||||||
|
|
||||||
|
python3.override { |
||||||
|
packageOverrides = self: super: { |
||||||
|
# does not find tests |
||||||
|
alembic = super.alembic.overridePythonAttrs (oldAttrs: { |
||||||
|
doCheck = false; |
||||||
|
}); |
||||||
|
# Needed by mailman, see https://gitlab.com/mailman/mailman/-/issues/964 |
||||||
|
sqlalchemy = super.sqlalchemy.overridePythonAttrs (oldAttrs: rec { |
||||||
|
version = "1.3.24"; |
||||||
|
src = super.fetchPypi { |
||||||
|
inherit version; |
||||||
|
inherit (oldAttrs) pname; |
||||||
|
sha256 = "06bmxzssc66cblk1hamskyv5q3xf1nh1py3vi6dka4lkpxy7gfzb"; |
||||||
|
}; |
||||||
|
# does not find tests |
||||||
|
doCheck = false; |
||||||
|
}); |
||||||
|
# Fixes `AssertionError: database connection isn't set to UTC` |
||||||
|
psycopg2 = super.psycopg2.overridePythonAttrs (a: (rec { |
||||||
|
version = "2.8.6"; |
||||||
|
src = super.fetchPypi { |
||||||
|
inherit version; |
||||||
|
inherit (a) pname; |
||||||
|
sha256 = "fb23f6c71107c37fd667cb4ea363ddeb936b348bbd6449278eb92c189699f543"; |
||||||
|
}; |
||||||
|
})); |
||||||
|
}; |
||||||
|
} |
@ -1,20 +0,0 @@ |
|||||||
{ runCommand, lib, makeWrapper, python3 |
|
||||||
, archivers ? [ python3.pkgs.mailman-hyperkitty ] |
|
||||||
}: |
|
||||||
|
|
||||||
let |
|
||||||
inherit (python3.pkgs) makePythonPath mailman; |
|
||||||
in |
|
||||||
|
|
||||||
runCommand "${mailman.name}-wrapped" { |
|
||||||
inherit (mailman) meta; |
|
||||||
nativeBuildInputs = [ makeWrapper ]; |
|
||||||
passthru = mailman.passthru // { unwrapped = mailman; }; |
|
||||||
} '' |
|
||||||
mkdir -p "$out/bin" |
|
||||||
cd "${mailman}/bin" |
|
||||||
for exe in *; do |
|
||||||
makeWrapper "${mailman}/bin/$exe" "$out/bin/$exe" \ |
|
||||||
--set PYTHONPATH ${makePythonPath ([ mailman ] ++ archivers)} |
|
||||||
done |
|
||||||
'' |
|
Loading…
Reference in new issue