b2b9af9df4213a5124a5242fe5cfa13a7cb10c11
[feed/packages.git] / mail / exim / Makefile
1 include $(TOPDIR)/rules.mk
2
3 PKG_NAME:=exim
4 PKG_VERSION:=4.96
5 PKG_RELEASE:=$(AUTORELEASE)
6
7 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
8 PKG_SOURCE_URL:=https://ftp.exim.org/pub/exim/exim4/
9 PKG_HASH:=299a56927b2eb3477daafd3c5bda02bc67e5c4e5898a7aeaf2740875278cf1a3
10 PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
11
12 PKG_LICENSE:=GPL-2.0-or-later
13 PKG_LICENSE_FILES:=LICENSE NOTICE
14 PKG_CPE_ID:=cpe:/a:exim:exim
15
16 PKG_CONFIG_DEPENDS:=\
17 CONFIG_BUILD_NLS \
18 CONFIG_PACKAGE_exim \
19 CONFIG_PACKAGE_exim-gnutls \
20 CONFIG_EXIM_GNUTLS_DANE \
21 CONFIG_PACKAGE_exim-openssl \
22 CONFIG_PACKAGE_exim-ldap \
23 CONFIG_PACKAGE_exim-lookup-mysql \
24 CONFIG_PACKAGE_exim-lookup-pgsql \
25 CONFIG_PACKAGE_exim-lookup-redis \
26 CONFIG_PACKAGE_exim-lookup-sqlite
27
28 PKG_BUILD_PARALLEL:=1
29
30 include $(INCLUDE_DIR)/package.mk
31 include $(INCLUDE_DIR)/host-build.mk
32 include $(INCLUDE_DIR)/nls.mk
33
34 LOOKUPS:= \
35 cdb \
36 dbmdb \
37 dnsdb \
38 json%+PACKAGE_exim-lookup-json:jansson \
39 mysql%+PACKAGE_exim-lookup-mysql:libmariadb \
40 passwd \
41 pgsql%+PACKAGE_exim-lookup-pgsql:libpq \
42 redis%+PACKAGE_exim-lookup-redis:libhiredis \
43 sqlite%+PACKAGE_exim-lookup-sqlite:libsqlite3
44
45 define Package/exim/Default
46 SECTION:=mail
47 CATEGORY:=Mail
48 DEPENDS:=+libdb47 +libpcre2 $(ICONV_DEPENDS) +BUILD_NLS:libidn2 +BUILD_NLS:libidn
49 TITLE:=Exim message transfer agent
50 URL:=http://www.exim.org/
51 USERID:=exim=42:exim=42
52 endef
53
54 define Package/exim
55 $(call Package/exim/Default)
56 VARIANT:=nossl
57 CONFLICTS:=exim-openssl exim-gnutls exim-ldap
58 endef
59
60 define Package/exim-gnutls
61 $(call Package/exim/Default)
62 TITLE+=(with GnuTLS)
63 VARIANT:=gnutls
64 DEPENDS+=+PACKAGE_exim-gnutls:libgnutls +EXIM_GNUTLS_DANE:libgnutls-dane
65 PROVIDES:=exim
66 CONFLICTS:=exim-openssl exim-ldap
67 endef
68 define Package/exim-openssl
69 $(call Package/exim/Default)
70 TITLE+=(with OpenSSL)
71 VARIANT:=openssl
72 DEPENDS+=+PACKAGE_exim-openssl:libopenssl
73 PROVIDES:=exim
74 CONFLICTS:=exim-ldap
75 endef
76
77 define Package/exim-ldap
78 $(call Package/exim/Default)
79 TITLE+=(with OpenSSL and OpenLDAP)
80 VARIANT:=ldap
81 DEPENDS+=+PACKAGE_exim-ldap:libopenssl +PACKAGE_exim-ldap:libsasl2 +PACKAGE_exim-ldap:libopenldap
82 PROVIDES:=exim
83 endef
84
85 define Package/exim/Default/description
86 Exim is a message transfer agent (MTA) developed at the University of
87 Cambridge for use on Unix systems connected to the Internet.
88 endef
89
90 define Package/exim/description
91 $(call Package/exim/Default/description)
92
93 This package provides Exim without TLS support.
94 endef
95
96 define Package/exim-gnutls/description
97 $(call Package/exim/Default/description)
98
99 This package provides Exim built with GnuTLS.
100 endef
101
102 define Package/exim-gnutls/config
103 config EXIM_GNUTLS_DANE
104 bool "exim-gnutls DANE support"
105 depends on PACKAGE_exim-gnutls
106 default n
107 help
108 Build exim-gnutls against libgnutls-dane for DANE support.
109 libgnutls-dane depends on libunbound which depends on libopenssl.
110 endef
111
112 define Package/exim-openssl/description
113 $(call Package/exim/Default/description)
114
115 This package provides Exim built with OpenSSL.
116 endef
117
118 define Package/exim-ldap/description
119 $(call Package/exim/Default/description)
120
121 This package provides Exim built with OpenSSL, OpenLDAP and Cyrus SASL.
122 endef
123
124 define LookupGen
125 define Package/exim-lookup-$(subst _,-,$(firstword $(subst %, ,$(1))))
126 SECTION:=mail
127 CATEGORY:=Mail
128 TITLE:=Exim lookup module $(firstword $(subst %, ,$(1)))
129 URL:=http://www.exim.org/
130 DEPENDS:=exim $(wordlist 2,$(words $(subst %, ,$(1))),$(subst %, ,$(1)))
131 endef
132 endef
133
134 $(foreach file,$(LOOKUPS),$(eval $(call LookupGen,$(file))))
135
136 define Package/exim/conffiles
137 /etc/exim/exim.conf
138 endef
139
140 HOST_CFLAGS += -std=c99
141 TARGET_CFLAGS += $(FPIC) -DNO_IP_OPTIONS -D_FILE_OFFSET_BITS=64
142
143 MAKE_VARS += build=Linux-$$(ARCH)
144 MAKE_FLAGS += AR="$$(TARGET_AR) r"
145 HOST_MAKE_VARS += build=Linux-$$(ARCH)
146
147 define Build/Configure
148 $(CP) $(PKG_BUILD_DIR)/src/EDITME $(PKG_BUILD_DIR)/Local/Makefile
149 echo "PID_FILE_PATH=/var/run/exim.pid" >> $(PKG_BUILD_DIR)/Local/Makefile
150 echo "BIN_DIRECTORY=/usr/sbin" >> $(PKG_BUILD_DIR)/Local/Makefile
151 $(SED) 's%CONFIGURE_FILE=/usr/exim/configure%CONFIGURE_FILE=/etc/exim/exim.conf%' $(PKG_BUILD_DIR)/Local/Makefile
152 $(SED) 's%# EXIM_GROUP=.*%EXIM_GROUP=42%' $(PKG_BUILD_DIR)/Local/Makefile
153 $(SED) 's%# EXIM_USER=.*%EXIM_USER=42%' $(PKG_BUILD_DIR)/Local/Makefile
154 $(SED) 's%# INCLUDE=.*%INCLUDE=-I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/usr/include%' $(PKG_BUILD_DIR)/Local/Makefile
155 $(SED) 's%# HAVE_IPV6=YES%HAVE_IPV6=YES%' $(PKG_BUILD_DIR)/Local/Makefile
156 $(SED) 's%# WITH_CONTENT_SCAN=yes%WITH_CONTENT_SCAN=yes%' $(PKG_BUILD_DIR)/Local/Makefile
157 $(SED) 's%# SUPPORT_MAILDIR=yes%SUPPORT_MAILDIR=yes%' $(PKG_BUILD_DIR)/Local/Makefile
158 $(SED) 's%# SUPPORT_MAILSTORE=yes%SUPPORT_MAILSTORE=yes%' $(PKG_BUILD_DIR)/Local/Makefile
159 $(SED) 's%# SUPPORT_MBX=yes%SUPPORT_MBX=yes%' $(PKG_BUILD_DIR)/Local/Makefile
160 # enable lookup modules
161 $(SED) 's%# LOOKUP_DSEARCH=yes%LOOKUP_DSEARCH=yes%' $(PKG_BUILD_DIR)/Local/Makefile
162 $(SED) 's%# TRANSPORT_LMTP=yes%TRANSPORT_LMTP=yes%' $(PKG_BUILD_DIR)/Local/Makefile
163 ifdef CONFIG_PACKAGE_exim-lookup-dbmdb
164 $(SED) 's%LOOKUP_DBM=yes%LOOKUP_DBM=2%' $(PKG_BUILD_DIR)/Local/Makefile
165 else
166 $(SED) 's%LOOKUP_DBM=yes%# LOOKUP_DBM=yes%' $(PKG_BUILD_DIR)/Local/Makefile
167 endif
168 ifdef CONFIG_PACKAGE_exim-lookup-dnsdb
169 $(SED) 's%LOOKUP_DNSDB=yes%LOOKUP_DNSDB=2%' $(PKG_BUILD_DIR)/Local/Makefile
170 else
171 $(SED) 's%LOOKUP_DNSDB=yes%# LOOKUP_DNSDB=yes%' $(PKG_BUILD_DIR)/Local/Makefile
172 endif
173 ifdef CONFIG_PACKAGE_exim-lookup-passwd
174 $(SED) 's%# LOOKUP_PASSWD=yes%LOOKUP_PASSWD=2%' $(PKG_BUILD_DIR)/Local/Makefile
175 endif
176 ifdef CONFIG_PACKAGE_exim-lookup-cdb
177 $(SED) 's%# LOOKUP_CDB=yes%LOOKUP_CDB=2%' $(PKG_BUILD_DIR)/Local/Makefile
178 endif
179 ifdef CONFIG_PACKAGE_exim-lookup-json
180 $(SED) 's%# LOOKUP_JSON=yes%LOOKUP_JSON=2\
181 \nLOOKUP_JSON_INCLUDE=-I$(STAGING_DIR)/usr/include\
182 \nLOOKUP_JSON_LIBS=-Wl,--no-as-needed -ljansson%' $(PKG_BUILD_DIR)/Local/Makefile
183 endif
184 ifdef CONFIG_PACKAGE_exim-lookup-pgsql
185 $(SED) 's%# LOOKUP_PGSQL=yes%LOOKUP_PGSQL=2\
186 \nLOOKUP_PGSQL_LIBS=-Wl,--no-as-needed -lpq%' $(PKG_BUILD_DIR)/Local/Makefile
187 endif
188 ifdef CONFIG_PACKAGE_exim-lookup-sqlite
189 $(SED) 's%# LOOKUP_SQLITE=yes%LOOKUP_SQLITE=2\
190 \nLOOKUP_SQLITE_LIBS=-Wl,--no-as-needed -lsqlite3%' $(PKG_BUILD_DIR)/Local/Makefile
191 endif
192 ifdef CONFIG_PACKAGE_exim-lookup-mysql
193 $(SED) 's%# LOOKUP_MYSQL=yes%LOOKUP_MYSQL=2\
194 \nLOOKUP_MYSQL_INCLUDE=-I$(STAGING_DIR)/usr/include/mysql\
195 \nLOOKUP_MYSQL_LIBS=-Wl,--no-as-needed -lmysqlclient%' $(PKG_BUILD_DIR)/Local/Makefile
196 endif
197 ifdef CONFIG_PACKAGE_exim-lookup-redis
198 $(SED) 's%# LOOKUP_REDIS=yes%LOOKUP_REDIS=2\
199 \nLOOKUP_REDIS_INCLUDE=-I$(STAGING_DIR)/usr/include/hiredis\
200 \nLOOKUP_REDIS_LIBS=-Wl,--no-as-needed -lhiredis%' $(PKG_BUILD_DIR)/Local/Makefile
201 endif
202
203 ifeq ($(CONFIG_BUILD_NLS),y)
204 $(SED) 's%# HAVE_ICONV=yes%HAVE_ICONV=yes%' $(PKG_BUILD_DIR)/Local/Makefile
205 $(SED) 's%# CFLAGS=-O -I/usr/local/include%CFLAGS=$(TARGET_CFLAGS) $(ICONV_CPPFLAGS)%' $(PKG_BUILD_DIR)/Local/Makefile
206 $(SED) 's%# EXTRALIBS_EXIM=-L/usr/local/lib -liconv%EXTRALIBS_EXIM=-export-dynamic -rdynamic $(ICONV_LDFLAGS) -liconv -ldl%' $(PKG_BUILD_DIR)/Local/Makefile
207 $(SED) 's%# SUPPORT_I18N_2008=yes%SUPPORT_I18N_2008=yes%' $(PKG_BUILD_DIR)/Local/Makefile
208 $(SED) 's%# LDFLAGS += -lidn -lidn2%LDFLAGS += -lidn -lidn2%' $(PKG_BUILD_DIR)/Local/Makefile
209 else
210 $(SED) 's%# HAVE_ICONV=yes%HAVE_ICONV=no%' $(PKG_BUILD_DIR)/Local/Makefile
211 endif
212
213 $(SED) 's%# AUTH_CRAM_MD5=yes%AUTH_CRAM_MD5=yes%' $(PKG_BUILD_DIR)/Local/Makefile
214 $(SED) 's%# AUTH_DOVECOT=yes%AUTH_DOVECOT=yes%' $(PKG_BUILD_DIR)/Local/Makefile
215 $(SED) 's%# AUTH_EXTERNAL=yes%AUTH_EXTERNAL=yes%' $(PKG_BUILD_DIR)/Local/Makefile
216 $(SED) 's%# AUTH_PLAINTEXT=yes%AUTH_PLAINTEXT=yes%' $(PKG_BUILD_DIR)/Local/Makefile
217 $(SED) 's%# AUTH_SPA=yes%AUTH_SPA=yes%' $(PKG_BUILD_DIR)/Local/Makefile
218
219 ifeq ($(BUILD_VARIANT),gnutls)
220 $(SED) 's%# USE_GNUTLS=yes%USE_GNUTLS=yes%' $(PKG_BUILD_DIR)/Local/Makefile
221 $(SED) 's%# TLS_INCLUDE=-I/usr/local/.*%TLS_INCLUDE=-I$(STAGING_DIR)/usr/include%' $(PKG_BUILD_DIR)/Local/Makefile
222 ifeq ($(CONFIG_EXIM_GNUTLS_DANE),y)
223 $(SED) 's%# TLS_LIBS=-lgnutls -lgnutls-dane%TLS_LIBS=-L$(STAGING_DIR)/usr/lib -lgnutls -lgnutls-dane%' $(PKG_BUILD_DIR)/Local/Makefile
224 else
225 $(SED) 's%SUPPORT_DANE=yes%# SUPPORT_DANE=yes%' $(PKG_BUILD_DIR)/Local/Makefile
226 $(SED) 's%# TLS_LIBS=-lgnutls -lgnutls-dane%TLS_LIBS=-L$(STAGING_DIR)/usr/lib -lgnutls%' $(PKG_BUILD_DIR)/Local/Makefile
227 endif
228 $(SED) 's%# AUTH_TLS=yes%AUTH_TLS=yes%' $(PKG_BUILD_DIR)/Local/Makefile
229 endif
230 ifneq ($(filter ldap openssl, $(BUILD_VARIANT)),)
231 $(SED) 's%# USE_OPENSSL=yes%USE_OPENSSL=yes%' $(PKG_BUILD_DIR)/Local/Makefile
232 $(SED) 's%# TLS_INCLUDE=-I/usr/local/.*%TLS_INCLUDE=-I$(STAGING_DIR)/usr/include%' $(PKG_BUILD_DIR)/Local/Makefile
233 $(SED) 's%# TLS_LIBS=-lssl -lcrypto%TLS_LIBS=-L$(STAGING_DIR)/usr/lib -lssl -lcrypto%' $(PKG_BUILD_DIR)/Local/Makefile
234 $(SED) 's%# AUTH_TLS=yes%AUTH_TLS=yes%' $(PKG_BUILD_DIR)/Local/Makefile
235 endif
236 ifeq ($(BUILD_VARIANT),ldap)
237 $(SED) 's%# LOOKUP_LDAP=yes%LOOKUP_LDAP=yes%' $(PKG_BUILD_DIR)/Local/Makefile
238 $(SED) 's%# LDAP_LIB_TYPE=OPENLDAP2%LDAP_LIB_TYPE=OPENLDAP2%' $(PKG_BUILD_DIR)/Local/Makefile
239 echo "LOOKUP_LIBS+=-lldap -llber" >> $(PKG_BUILD_DIR)/Local/Makefile
240 $(SED) 's%# AUTH_CYRUS_SASL=yes%AUTH_CYRUS_SASL=yes%' $(PKG_BUILD_DIR)/Local/Makefile
241 $(SED) 's%# AUTH_LIBS=-lsasl2%AUTH_LIBS=-lsasl2%' $(PKG_BUILD_DIR)/Local/Makefile
242 endif
243 ifeq ($(BUILD_VARIANT),nossl)
244 $(SED) 's%# DISABLE_TLS=yes%DISABLE_TLS=yes%' $(PKG_BUILD_DIR)/Local/Makefile
245 $(SED) 's%SUPPORT_DANE=yes%# SUPPORT_DANE=yes%' $(PKG_BUILD_DIR)/Local/Makefile
246 endif
247 $(SED) 's%# CFLAGS_DYNAMIC=-shared -rdynamic -fPIC%CFLAGS_DYNAMIC=-shared -rdynamic $(FPIC)%' $(PKG_BUILD_DIR)/Local/Makefile
248 $(SED) 's%# LOOKUP_MODULE_DIR=/usr/lib/exim/lookups/%LOOKUP_MODULE_DIR=/usr/lib/exim/lookups/%' $(PKG_BUILD_DIR)/Local/Makefile
249 $(SED) 's%#DLOPEN_LOCAL_SCAN=yes%DLOPEN_LOCAL_SCAN=yes%' $(PKG_BUILD_DIR)/Local/Makefile
250 $(call Build/Compile/Default,makefile)
251 $(CP) $(PKG_BUILD_DIR)/OS/os.h-Linux $(PKG_BUILD_DIR)/build-Linux-$(ARCH)/os.h
252 # overwrite types for cross-compile
253 # (is all the below true for glibc as well?)
254 echo '#include <inttypes.h>' >> $(PKG_BUILD_DIR)/build-Linux-$(ARCH)/os.h
255 echo '#define ip_options ip_opts' >> $(PKG_BUILD_DIR)/build-Linux-$(ARCH)/os.h
256 echo '#undef OFF_T_FMT' >> $(PKG_BUILD_DIR)/build-Linux-$(ARCH)/os.h
257 echo '#define OFF_T_FMT "%" PRId64' >> $(PKG_BUILD_DIR)/build-Linux-$(ARCH)/os.h
258 echo '#undef LONGLONG_T' >> $(PKG_BUILD_DIR)/build-Linux-$(ARCH)/os.h
259 echo '#define LONGLONG_T int64_t' >> $(PKG_BUILD_DIR)/build-Linux-$(ARCH)/os.h
260 echo '#ifndef NS_MAXMSG' >> $(PKG_BUILD_DIR)/build-Linux-$(ARCH)/os.h
261 echo '#define NS_MAXMSG 65535' >> $(PKG_BUILD_DIR)/build-Linux-$(ARCH)/os.h
262 echo '#endif' >> $(PKG_BUILD_DIR)/build-Linux-$(ARCH)/os.h
263 $(HOST_MAKE_VARS) $(MAKE) $(HOST_MAKE_FLAGS) $(HOST_MAKE_VARS) -C $(PKG_BUILD_DIR)/build-Linux-$(ARCH) macro_predef
264 endef
265
266 define Package/exim/conffiles
267 /etc/exim/
268 endef
269
270 Package/exim-gnutls/conffiles = $(Package/exim/conffiles)
271 Package/exim-openssl/conffiles = $(Package/exim/conffiles)
272 Package/exim-ldap/conffiles = $(Package/exim/conffiles)
273
274 define Package/exim/install
275 $(INSTALL_DIR) $(1)/usr/sbin
276 $(INSTALL_BIN) $(PKG_BUILD_DIR)/build-Linux-$(ARCH)/exim $(1)/usr/sbin
277 $(INSTALL_DIR) $(1)/etc/exim
278 $(INSTALL_DATA) $(PKG_BUILD_DIR)/src/configure.default $(1)/etc/exim/exim.conf
279 $(INSTALL_DIR) $(1)/etc/init.d
280 $(INSTALL_BIN) ./files/exim.init $(1)/etc/init.d/exim
281 $(INSTALL_DIR) $(1)/usr/lib/exim/lookups
282 endef
283
284 Package/exim-gnutls/install = $(Package/exim/install)
285 Package/exim-openssl/install = $(Package/exim/install)
286 Package/exim-ldap/install = $(Package/exim/install)
287
288 define LookupInstall
289 define Package/exim-lookup-$(subst _,-,$(firstword $(subst %, ,$(1))))/install
290 $(INSTALL_DIR) $$(1)/usr/lib/exim/lookups
291 $(INSTALL_BIN) \
292 $(PKG_BUILD_DIR)/build-Linux-$(ARCH)/lookups/$(firstword $(subst %, ,$(1))).so \
293 $$(1)/usr/lib/exim/lookups
294 endef
295 endef
296
297 $(foreach file,$(LOOKUPS),$(eval $(call LookupInstall,$(file))))
298
299 $(eval $(call BuildPackage,exim))
300 $(eval $(call BuildPackage,exim-gnutls))
301 $(eval $(call BuildPackage,exim-openssl))
302 $(eval $(call BuildPackage,exim-ldap))
303 $(foreach file,$(LOOKUPS),$(eval $(call BuildPackage,exim-lookup-$(subst _,-,$(firstword $(subst %, ,$(file)))))))