nixpkgs/pkgs/servers/mail/exim/default.nix
Daniel Silverstone bb9143e01d
exim: Add pgsql, sqlite, json, and srs support
While disabled by default, this adds support for postgresql,
sqlite, and json lookups in exim.  Also this adds support for
enabling exim's sender-rewrite-scheme capability.

Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2024-03-09 10:03:16 +00:00

169 lines
6.1 KiB
Nix

{ coreutils, db, fetchurl, openssl, pcre2, perl, pkg-config, lib, stdenv
, libxcrypt
, procps, killall
, enableLDAP ? false, openldap
, enableMySQL ? false, libmysqlclient, zlib
, enablePgSQL ? false, postgresql
, enableSqlite ? false, sqlite
, enableAuthDovecot ? false, dovecot
, enablePAM ? false, pam
, enableSPF ? true, libspf2
, enableDMARC ? true, opendmarc
, enableRedis ? false, hiredis
, enableJSON ? false, jansson
, enableSRS ? false,
}:
let
perl' = perl.withPackages (p: with p; [ FileFcntlLock ]);
in stdenv.mkDerivation rec {
pname = "exim";
version = "4.97.1";
src = fetchurl {
url = "https://ftp.exim.org/pub/exim/exim4/${pname}-${version}.tar.xz";
hash = "sha256-vXggV1CaeTWTUIUoWQYm0YXqFgzjLLNL7aJi6Zzv36k=";
};
enableParallelBuilding = true;
nativeBuildInputs = [ pkg-config ];
buildInputs = [ coreutils db openssl perl' pcre2 libxcrypt ]
++ lib.optional enableLDAP openldap
++ lib.optionals enableMySQL [ libmysqlclient zlib ]
++ lib.optional enablePgSQL postgresql
++ lib.optionals enableSqlite [ sqlite sqlite.dev zlib ]
++ lib.optional enableAuthDovecot dovecot
++ lib.optional enablePAM pam
++ lib.optional enableSPF libspf2
++ lib.optional enableDMARC opendmarc
++ lib.optional enableRedis hiredis
++ lib.optional enableJSON jansson;
configurePhase = ''
runHook preConfigure
sed '
s:^\(BIN_DIRECTORY\)=.*:\1='"$out"'/bin:
s:^\(CONFIGURE_FILE\)=.*:\1=/etc/exim.conf:
s:^\(EXIM_USER\)=.*:\1=ref\:nobody:
s:^\(SPOOL_DIRECTORY\)=.*:\1=/exim-homeless-shelter:
s:^# \(TRANSPORT_LMTP\)=.*:\1=yes:
s:^# \(SUPPORT_MAILDIR\)=.*:\1=yes:
s:^EXIM_MONITOR=.*$:# &:
s:^\(FIXED_NEVER_USERS\)=root$:\1=0:
s:^# \(WITH_CONTENT_SCAN\)=.*:\1=yes:
s:^# \(AUTH_PLAINTEXT\)=.*:\1=yes:
s:^# \(USE_OPENSSL\)=.*:\1=yes:
s:^# \(USE_OPENSSL_PC=openssl\)$:\1:
s:^# \(LOG_FILE_PATH=syslog\)$:\1:
s:^# \(HAVE_IPV6=yes\)$:\1:
s:^# \(CHOWN_COMMAND\)=.*:\1=${coreutils}/bin/chown:
s:^# \(CHGRP_COMMAND\)=.*:\1=${coreutils}/bin/chgrp:
s:^# \(CHMOD_COMMAND\)=.*:\1=${coreutils}/bin/chmod:
s:^# \(MV_COMMAND\)=.*:\1=${coreutils}/bin/mv:
s:^# \(RM_COMMAND\)=.*:\1=${coreutils}/bin/rm:
s:^# \(TOUCH_COMMAND\)=.*:\1=${coreutils}/bin/touch:
s:^# \(PERL_COMMAND\)=.*:\1=${perl'}/bin/perl:
s:^# \(LOOKUP_DSEARCH=yes\)$:\1:
${lib.optionalString enableLDAP ''
s:^# \(LDAP_LIB_TYPE=OPENLDAP2\)$:\1:
s:^# \(LOOKUP_LDAP=yes\)$:\1:
s:^\(LOOKUP_LIBS\)=\(.*\):\1=\2 -lldap -llber:
s:^# \(LOOKUP_LIBS\)=.*:\1=-lldap -llber:
''}
${lib.optionalString enableMySQL ''
s:^# \(LOOKUP_MYSQL=yes\)$:\1:
s:^# \(LOOKUP_MYSQL_PC=libmysqlclient\)$:\1:
s:^\(LOOKUP_LIBS\)=\(.*\):\1=\2 -lmysqlclient -L${libmysqlclient}/lib/mysql -lssl -lm -lpthread -lz:
s:^# \(LOOKUP_LIBS\)=.*:\1=-lmysqlclient -L${libmysqlclient}/lib/mysql -lssl -lm -lpthread -lz:
s:^# \(LOOKUP_INCLUDE\)=.*:\1=-I${libmysqlclient.dev}/include/mysql/:
''}
${lib.optionalString enablePgSQL ''
s:^# \(LOOKUP_PGSQL=yes\)$:\1:
s:^\(LOOKUP_LIBS\)=\(.*\):\1=\2 -lpq -L${postgresql.lib}/lib:
s:^# \(LOOKUP_LIBS\)=.*:\1=-lpq -L${postgresql.lib}/lib:
s:^# \(LOOKUP_INCLUDE\)=.*:\1=-I${postgresql}/include:
''}
${lib.optionalString enableSqlite ''
s:^# \(LOOKUP_SQLITE=yes\)$:\1:
s:^# \(LOOKUP_SQLITE_PC=sqlite3\)$:\1:
s:^\(LOOKUP_LIBS\)=\(.*\):\1=\2 -lsqlite3 -L${sqlite}/lib:
s:^# \(LOOKUP_LIBS\)=.*:\1=-lsqlite3 -L${sqlite}/lib -lssl -lm -lpthread -lz:
s:^# \(LOOKUP_INCLUDE\)=.*:\1=-I${sqlite.dev}/include:
''}
${lib.optionalString enableAuthDovecot ''
s:^# \(AUTH_DOVECOT\)=.*:\1=yes:
''}
${lib.optionalString enableSRS ''
s:^# \(SUPPORT_SRS\)=.*:\1=yes:
''}
${lib.optionalString enablePAM ''
s:^# \(SUPPORT_PAM\)=.*:\1=yes:
s:^\(EXTRALIBS_EXIM\)=\(.*\):\1=\2 -lpam:
s:^# \(EXTRALIBS_EXIM\)=.*:\1=-lpam:
''}
${lib.optionalString enableSPF ''
s:^# \(SUPPORT_SPF\)=.*:\1=yes:
s:^# \(LDFLAGS += -lspf2\):\1:
''}
${lib.optionalString enableDMARC ''
s:^# \(SUPPORT_DMARC\)=.*:\1=yes:
s:^# \(LDFLAGS += -lopendmarc\):\1:
''}
${lib.optionalString enableRedis ''
s:^# \(LOOKUP_REDIS=yes\)$:\1:
s:^\(LOOKUP_LIBS\)=\(.*\):\1=\2 -lhiredis -L${hiredis}/lib/hiredis:
s:^# \(LOOKUP_LIBS\)=.*:\1=-lhiredis -L${hiredis}/lib/hiredis:
s:^\(LOOKUP_INCLUDE\)=\(.*\):\1=\2 -I${hiredis}/include/hiredis/:
s:^# \(LOOKUP_INCLUDE\)=.*:\1=-I${hiredis}/include/hiredis/:
''}
${lib.optionalString enableJSON ''
s:^# \(LOOKUP_JSON=yes\)$:\1:
s:^\(LOOKUP_LIBS\)=\(.*\):\1=\2 -ljansson -L${jansson}/lib:
s:^# \(LOOKUP_LIBS\)=.*:\1=-ljansson -L${jansson}/lib:
s:^\(LOOKUP_INCLUDE\)=\(.*\):\1=\2 -I${jansson}/include:
s:^# \(LOOKUP_INCLUDE\)=.*:\1=-I${jansson}/include:
''}
#/^\s*#.*/d
#/^\s*$/d
' < src/EDITME > Local/Makefile
{
echo EXIWHAT_PS_CMD=${procps}/bin/ps
echo EXIWHAT_MULTIKILL_CMD=${killall}/bin/killall
} >> Local/Makefile
runHook postConfigure
'';
installPhase = ''
runHook preInstall
mkdir -p $out/bin $out/share/man/man8
cp doc/exim.8 $out/share/man/man8
( cd build-Linux-*
cp exicyclog exim_checkaccess exim_dumpdb exim_lock exim_tidydb \
exipick exiqsumm exigrep exim_dbmbuild exim exim_fixdb eximstats \
exinext exiqgrep exiwhat \
$out/bin )
( cd $out/bin
for i in mailq newaliases rmail rsmtp runq sendmail; do
ln -s exim $i
done )
runHook postInstall
'';
meta = with lib; {
homepage = "https://exim.org/";
description = "A mail transfer agent (MTA)";
license = with licenses; [ gpl2Plus bsd3 ];
mainProgram = "exim";
platforms = platforms.linux;
maintainers = with maintainers; [ tv ] ++ teams.helsinki-systems.members;
changelog = "https://github.com/Exim/exim/blob/exim-${version}/doc/doc-txt/ChangeLog";
};
}