nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 coreutils,
3 db,
4 fetchurl,
5 openssl,
6 pcre2,
7 perl,
8 pkg-config,
9 lib,
10 stdenv,
11 libxcrypt,
12 procps,
13 killall,
14 enableLDAP ? false,
15 openldap,
16 enableMySQL ? false,
17 libmysqlclient,
18 zlib,
19 enablePgSQL ? false,
20 libpq,
21 enableSqlite ? false,
22 sqlite,
23 enableAuthDovecot ? false,
24 dovecot,
25 enablePAM ? false,
26 pam,
27 enableSPF ? true,
28 libspf2,
29 enableDMARC ? true,
30 opendmarc,
31 enableRedis ? false,
32 hiredis,
33 enableJSON ? false,
34 jansson,
35 enableSRS ? false,
36}:
37let
38 perl' = perl.withPackages (p: with p; [ FileFcntlLock ]);
39in
40stdenv.mkDerivation rec {
41 pname = "exim";
42 version = "4.99.1";
43
44 src = fetchurl {
45 url = "https://ftp.exim.org/pub/exim/exim4/${pname}-${version}.tar.xz";
46 hash = "sha256-6ulnvUml+HmTO4xuyIwwR1ocZkYjITXzfwW1XbxONEc=";
47 };
48
49 enableParallelBuilding = true;
50
51 nativeBuildInputs = [ pkg-config ];
52 buildInputs = [
53 coreutils
54 db
55 openssl
56 perl'
57 pcre2
58 libxcrypt
59 ]
60 ++ lib.optional enableLDAP openldap
61 ++ lib.optionals enableMySQL [
62 libmysqlclient
63 zlib
64 ]
65 ++ lib.optional enablePgSQL libpq
66 ++ lib.optionals enableSqlite [
67 sqlite
68 sqlite.dev
69 zlib
70 ]
71 ++ lib.optional enableAuthDovecot dovecot
72 ++ lib.optional enablePAM pam
73 ++ lib.optional enableSPF libspf2
74 ++ lib.optional enableDMARC opendmarc
75 ++ lib.optional enableRedis hiredis
76 ++ lib.optional enableJSON jansson;
77
78 configurePhase = ''
79 runHook preConfigure
80
81 sed '
82 s:^\(BIN_DIRECTORY\)=.*:\1='"$out"'/bin:
83 s:^\(CONFIGURE_FILE\)=.*:\1=/etc/exim.conf:
84 s:^\(EXIM_USER\)=.*:\1=ref\:nobody:
85 s:^\(SPOOL_DIRECTORY\)=.*:\1=/exim-homeless-shelter:
86 s:^# \(TRANSPORT_LMTP\)=.*:\1=yes:
87 s:^# \(SUPPORT_MAILDIR\)=.*:\1=yes:
88 s:^EXIM_MONITOR=.*$:# &:
89 s:^\(FIXED_NEVER_USERS\)=root$:\1=0:
90 s:^# \(WITH_CONTENT_SCAN\)=.*:\1=yes:
91 s:^# \(AUTH_PLAINTEXT\)=.*:\1=yes:
92 s:^# \(USE_OPENSSL\)=.*:\1=yes:
93 s:^# \(USE_OPENSSL_PC=openssl\)$:\1:
94 s:^# \(LOG_FILE_PATH=syslog\)$:\1:
95 s:^# \(HAVE_IPV6=yes\)$:\1:
96 s:^# \(CHOWN_COMMAND\)=.*:\1=${coreutils}/bin/chown:
97 s:^# \(CHGRP_COMMAND\)=.*:\1=${coreutils}/bin/chgrp:
98 s:^# \(CHMOD_COMMAND\)=.*:\1=${coreutils}/bin/chmod:
99 s:^# \(MV_COMMAND\)=.*:\1=${coreutils}/bin/mv:
100 s:^# \(RM_COMMAND\)=.*:\1=${coreutils}/bin/rm:
101 s:^# \(TOUCH_COMMAND\)=.*:\1=${coreutils}/bin/touch:
102 s:^# \(PERL_COMMAND\)=.*:\1=${perl'}/bin/perl:
103 s:^# \(LOOKUP_DSEARCH=yes\)$:\1:
104 ${lib.optionalString enableLDAP ''
105 s:^# \(LDAP_LIB_TYPE=OPENLDAP2\)$:\1:
106 s:^# \(LOOKUP_LDAP=yes\)$:\1:
107 s:^\(LOOKUP_LIBS\)=\(.*\):\1=\2 -lldap -llber:
108 s:^# \(LOOKUP_LIBS\)=.*:\1=-lldap -llber:
109 ''}
110 ${lib.optionalString enableMySQL ''
111 s:^# \(LOOKUP_MYSQL=yes\)$:\1:
112 s:^# \(LOOKUP_MYSQL_PC=libmysqlclient\)$:\1:
113 s:^\(LOOKUP_LIBS\)=\(.*\):\1=\2 -lmysqlclient -L${libmysqlclient}/lib/mysql -lssl -lm -lpthread -lz:
114 s:^# \(LOOKUP_LIBS\)=.*:\1=-lmysqlclient -L${libmysqlclient}/lib/mysql -lssl -lm -lpthread -lz:
115 s:^# \(LOOKUP_INCLUDE\)=.*:\1=-I${libmysqlclient.dev}/include/mysql/:
116 ''}
117 ${lib.optionalString enablePgSQL ''
118 s:^# \(LOOKUP_PGSQL=yes\)$:\1:
119 s:^\(LOOKUP_LIBS\)=\(.*\):\1=\2 -lpq -L${libpq}/lib:
120 s:^# \(LOOKUP_LIBS\)=.*:\1=-lpq -L${libpq}/lib:
121 ''}
122 ${lib.optionalString enableSqlite ''
123 s:^# \(LOOKUP_SQLITE=yes\)$:\1:
124 s:^# \(LOOKUP_SQLITE_PC=sqlite3\)$:\1:
125 s:^\(LOOKUP_LIBS\)=\(.*\):\1=\2 -lsqlite3 -L${sqlite}/lib:
126 s:^# \(LOOKUP_LIBS\)=.*:\1=-lsqlite3 -L${sqlite}/lib -lssl -lm -lpthread -lz:
127 s:^# \(LOOKUP_INCLUDE\)=.*:\1=-I${sqlite.dev}/include:
128 ''}
129 ${lib.optionalString enableAuthDovecot ''
130 s:^# \(AUTH_DOVECOT\)=.*:\1=yes:
131 ''}
132 ${lib.optionalString enableSRS ''
133 s:^# \(SUPPORT_SRS\)=.*:\1=yes:
134 ''}
135 ${lib.optionalString enablePAM ''
136 s:^# \(SUPPORT_PAM\)=.*:\1=yes:
137 s:^\(EXTRALIBS_EXIM\)=\(.*\):\1=\2 -lpam:
138 s:^# \(EXTRALIBS_EXIM\)=.*:\1=-lpam:
139 ''}
140 ${lib.optionalString enableSPF ''
141 s:^# \(SUPPORT_SPF\)=.*:\1=yes:
142 s:^# \(LDFLAGS += -lspf2\):\1:
143 ''}
144 ${lib.optionalString enableDMARC ''
145 s:^# \(SUPPORT_DMARC\)=.*:\1=yes:
146 s:^# \(LDFLAGS += -lopendmarc\):\1:
147 ''}
148 ${lib.optionalString enableRedis ''
149 s:^# \(LOOKUP_REDIS=yes\)$:\1:
150 s:^\(LOOKUP_LIBS\)=\(.*\):\1=\2 -lhiredis -L${hiredis}/lib/hiredis:
151 s:^# \(LOOKUP_LIBS\)=.*:\1=-lhiredis -L${hiredis}/lib/hiredis:
152 s:^\(LOOKUP_INCLUDE\)=\(.*\):\1=\2 -I${hiredis}/include/hiredis/:
153 s:^# \(LOOKUP_INCLUDE\)=.*:\1=-I${hiredis}/include/hiredis/:
154 ''}
155 ${lib.optionalString enableJSON ''
156 s:^# \(LOOKUP_JSON=yes\)$:\1:
157 s:^\(LOOKUP_LIBS\)=\(.*\):\1=\2 -ljansson -L${jansson}/lib:
158 s:^# \(LOOKUP_LIBS\)=.*:\1=-ljansson -L${jansson}/lib:
159 s:^\(LOOKUP_INCLUDE\)=\(.*\):\1=\2 -I${jansson}/include:
160 s:^# \(LOOKUP_INCLUDE\)=.*:\1=-I${jansson}/include:
161 ''}
162 #/^\s*#.*/d
163 #/^\s*$/d
164 ' < src/EDITME > Local/Makefile
165
166 {
167 echo EXIWHAT_PS_CMD=${procps}/bin/ps
168 echo EXIWHAT_MULTIKILL_CMD=${killall}/bin/killall
169 } >> Local/Makefile
170
171 runHook postConfigure
172 '';
173
174 installPhase = ''
175 runHook preInstall
176
177 mkdir -p $out/bin $out/share/man/man8
178 cp doc/exim.8 $out/share/man/man8
179
180 ( cd build-Linux-*
181 cp exicyclog exim_checkaccess exim_dumpdb exim_lock exim_tidydb \
182 exipick exiqsumm exigrep exim_dbmbuild exim exim_fixdb eximstats \
183 exinext exiqgrep exiwhat \
184 $out/bin )
185
186 ( cd $out/bin
187 for i in mailq newaliases rmail rsmtp runq sendmail; do
188 ln -s exim $i
189 done )
190
191 runHook postInstall
192 '';
193
194 meta = {
195 homepage = "https://exim.org/";
196 description = "Mail transfer agent (MTA)";
197 license = with lib.licenses; [
198 gpl2Plus
199 bsd3
200 ];
201 mainProgram = "exim";
202 platforms = lib.platforms.linux;
203 maintainers = with lib.maintainers; [
204 das_j
205 helsinki-Jo
206 tv
207 ];
208 changelog = "https://github.com/Exim/exim/blob/exim-${version}/doc/doc-txt/ChangeLog";
209 };
210}