nixpkgs/pkgs/servers/mail/dovecot/default.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

125 lines
4.4 KiB
Nix
Raw Normal View History

{ stdenv, lib, fetchurl, perl, pkg-config, systemd, openssl
, bzip2, zlib, lz4, inotify-tools, pam, libcap, coreutils
, clucene_core_2, icu, openldap, libsodium, libstemmer, cyrus_sasl
dovecot, opensmtpd: add link to test in `meta.tests` Rationale --------- Currently, tests are hard to discover. For instance, someone updating `dovecot` might not notice that the interaction of `dovecot` with `opensmtpd` is handled in the `opensmtpd.nix` test. And even for someone updating `opensmtpd`, it requires manual work to go check in `nixos/tests` whether there is actually a test, especially given not so many packages in `nixpkgs` have tests and this is thus most of the time useless. Finally, for the reviewer, it is much easier to check that the “Tested via one or more NixOS test(s)” has been checked if the file modified already includes the list of relevant tests. Implementation -------------- Currently, this commit only adds the metadata in the package. Each element of the `meta.tests` attribute is a derivation that, when it builds successfully, means the test has passed (ie. following the same convention as NixOS tests). Future Work ----------- In the future, the tools could be made aware of this `meta.tests` attribute, and for instance a `--with-tests` could be added to `nix-build` so that it also builds all the tests. Or a `--without-tests` to build without all the tests. @Profpatsch described in his NixCon talk such systems. Another thing that would help in the future would be the possibility to reasonably easily have cross-derivation nix tests without the whole NixOS VM stack. @7c6f434c already proposed such a system. This RFC currently handles none of these concerns. Only the addition of `meta.tests` as metadata to be used by maintainers to remember to run relevant tests.
2018-08-04 03:18:28 +00:00
, nixosTests
2022-07-06 14:28:45 +00:00
, fetchpatch
# Auth modules
, withMySQL ? false, libmysqlclient
, withPgSQL ? false, postgresql
, withSQLite ? true, sqlite
2021-06-21 14:18:51 +00:00
, withLua ? false, lua5_3
}:
stdenv.mkDerivation rec {
pname = "dovecot";
version = "2.3.21.1";
nativeBuildInputs = [ perl pkg-config ];
2018-01-28 03:37:29 +00:00
buildInputs =
[ openssl bzip2 zlib lz4 clucene_core_2 icu openldap libsodium libstemmer cyrus_sasl.dev ]
++ lib.optionals (stdenv.hostPlatform.isLinux) [ systemd pam libcap inotify-tools ]
++ lib.optional withMySQL libmysqlclient
++ lib.optional withPgSQL postgresql
2021-06-21 14:18:51 +00:00
++ lib.optional withSQLite sqlite
++ lib.optional withLua lua5_3;
src = fetchurl {
2021-03-04 23:33:21 +00:00
url = "https://dovecot.org/releases/${lib.versions.majorMinor version}/${pname}-${version}.tar.gz";
hash = "sha256-LZCheMQpdhEIi/farlSSo7w9WrYyjDoDLrQl0sJJCX4=";
};
2018-12-10 22:48:42 +00:00
enableParallelBuilding = true;
postPatch = ''
sed -i -E \
-e 's!/bin/sh\b!${stdenv.shell}!g' \
-e 's!([^[:alnum:]/_-])/bin/([[:alnum:]]+)\b!\1${coreutils}/bin/\2!g' \
-e 's!([^[:alnum:]/_-])(head|sleep|cat)\b!\1${coreutils}/bin/\2!g' \
src/lib-program-client/test-program-client-local.c
patchShebangs src/lib-smtp/test-bin/*.sh
sed -i -s -E 's!\bcat\b!${coreutils}/bin/cat!g' src/lib-smtp/test-bin/*.sh
patchShebangs src/config/settings-get.pl
# DES-encrypted passwords are not supported by NixPkgs anymore
sed '/test_password_scheme("CRYPT"/d' -i src/auth/test-libpassword.c
'' + lib.optionalString stdenv.hostPlatform.isLinux ''
export systemdsystemunitdir=$out/etc/systemd/system
'';
# We need this for sysconfdir, see remark below.
installFlags = [ "DESTDIR=$(out)" ];
postInstall = ''
cp -r $out/$out/* $out
rm -rf $out/$(echo "$out" | cut -d "/" -f2)
'';
patches = [
# Make dovecot look for plugins in /etc/dovecot/modules
# so we can symlink plugins from several packages there.
# The symlinking needs to be done in NixOS.
./2.3.x-module_dir.patch
2022-10-19 02:34:45 +00:00
# fix openssl 3.0 compatibility
(fetchpatch {
url = "https://salsa.debian.org/debian/dovecot/-/raw/debian/1%252.3.19.1+dfsg1-2/debian/patches/Support-openssl-3.0.patch";
hash = "sha256-PbBB1jIY3jIC8Js1NY93zkV0gISGUq7Nc67Ul5tN7sw=";
})
] ++ lib.optionals stdenv.hostPlatform.isDarwin [
2023-11-28 09:21:33 +00:00
# fix timespec calls
./timespec.patch
];
2012-07-30 16:58:54 +00:00
configureFlags = [
# It will hardcode this for /var/lib/dovecot.
# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=626211
2012-07-30 16:58:54 +00:00
"--localstatedir=/var"
# We need this so utilities default to reading /etc/dovecot/dovecot.conf file.
"--sysconfdir=/etc"
2012-07-30 16:58:54 +00:00
"--with-ldap"
"--with-ssl=openssl"
"--with-zlib"
"--with-bzlib"
2018-01-28 03:37:29 +00:00
"--with-lz4"
"--with-ldap"
"--with-lucene"
"--with-icu"
2018-12-10 22:48:42 +00:00
] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
"i_cv_epoll_works=${if stdenv.hostPlatform.isLinux then "yes" else "no"}"
"i_cv_posix_fallocate_works=${if stdenv.hostPlatform.isDarwin then "no" else "yes"}"
"i_cv_inotify_works=${if stdenv.hostPlatform.isLinux then "yes" else "no"}"
2018-12-10 22:48:42 +00:00
"i_cv_signed_size_t=no"
"i_cv_signed_time_t=yes"
"i_cv_c99_vsnprintf=yes"
"lib_cv_va_copy=yes"
"i_cv_mmap_plays_with_write=yes"
"i_cv_gmtime_max_time_t=${toString stdenv.hostPlatform.parsed.cpu.bits}"
"i_cv_signed_time_t=yes"
"i_cv_fd_passing=yes"
"lib_cv_va_copy=yes"
"lib_cv___va_copy=yes"
"lib_cv_va_val_copy=yes"
] ++ lib.optional stdenv.hostPlatform.isLinux "--with-systemd"
++ lib.optional stdenv.hostPlatform.isDarwin "--enable-static"
++ lib.optional withMySQL "--with-mysql"
++ lib.optional withPgSQL "--with-pgsql"
2021-06-21 14:18:51 +00:00
++ lib.optional withSQLite "--with-sqlite"
++ lib.optional withLua "--with-lua";
doCheck = !stdenv.hostPlatform.isDarwin;
2021-06-21 13:18:52 +00:00
meta = with lib; {
2020-03-08 07:02:20 +00:00
homepage = "https://dovecot.org/";
description = "Open source IMAP and POP3 email server written with security primarily in mind";
2021-06-21 13:18:52 +00:00
license = with licenses; [ mit publicDomain lgpl21Only bsd3 bsdOriginal ];
2023-08-16 15:42:35 +00:00
mainProgram = "dovecot";
maintainers = with maintainers; [ fpletz globin ] ++ teams.helsinki-systems.members;
2021-06-21 13:18:52 +00:00
platforms = platforms.unix;
};
passthru.tests = {
opensmtpd-interaction = nixosTests.opensmtpd;
inherit (nixosTests) dovecot;
};
}