postfix: Add SQLite support
[feed/packages.git] / mail / postfix / Makefile
1 #
2 # Copyright (C) 2014-2015 OpenWrt.org
3 #
4 # This is free software, licensed under the GNU General Public License v2.
5 # See /LICENSE for more information.
6 #
7
8 include $(TOPDIR)/rules.mk
9
10 PKG_NAME:=postfix
11 PKG_RELEASE:=2
12 PKG_SOURCE_URL:=ftp://ftp.porcupine.org/mirrors/postfix-release/official/
13 PKG_VERSION:=3.1.4
14 PKG_MD5SUM:=878a059d92ee3b093d7d3e97248c915d
15 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
16 PKG_MAINTAINER:=Denis Shulyaka <Shulyaka@gmail.com>
17 PKG_LICENSE:=IPL-1.0
18 PKG_LICENSE_FILES:=LICENSE
19 PKG_BUILD_DEPENDS:=+POSTFIX_CDB:tinycdb
20
21 include $(INCLUDE_DIR)/package.mk
22
23 define Package/postfix
24 SECTION:=mail
25 CATEGORY:=Mail
26 TITLE:=Postfix Mail Transmit Agent
27 URL:=http://www.postfix.org/
28 DEPENDS:=+POSTFIX_TLS:libopenssl +POSTFIX_SASL:libsasl2 +POSTFIX_LDAP:libopenldap +POSTFIX_DB:libdb47 +POSTFIX_SQLITE:libsqlite3 +POSTFIX_EAI:icu +libpcre
29 endef
30
31 define Package/postfix/description
32 Postfix is Wietse Venema's mailer that started life as an alternative to the widely-used Sendmail program. Postfix attempts to be fast, easy to administer, and secure, while at the same time being sendmail compatible enough to not upset existing users. Thus, the outside has a sendmail-ish flavor, but the inside is completely different.
33 endef
34
35 define Package/postfix/config
36 menu "Select postfix build options"
37 config POSTFIX_TLS
38 bool "TLS support"
39 default y
40 help
41 Implements TLS support in postfix (using OpenSSL).
42 config POSTFIX_SASL
43 bool "SASL support"
44 default y
45 help
46 Implements SASL support in postfix (using Cyrus SASL).
47 config POSTFIX_LDAP
48 bool "LDAP support"
49 default y
50 help
51 Implements LDAP support in postfix (using OpenLDAP).
52 config POSTFIX_DB
53 bool "BerkeleyDB support"
54 default n
55 help
56 Implements support for btree files using Berkeley DB. Note that hash files support is not compiled into Berkeley DB OpenWRT distribution
57 config POSTFIX_CDB
58 bool "CDB support"
59 default y
60 help
61 Implements support for cdb files using tinycdb
62 config POSTFIX_SQLITE
63 bool "SQLITE support"
64 default y
65 help
66 Implements support for SQLite3 DB
67 config POSTFIX_EAI
68 bool "SMTPUTF8 support"
69 default n
70 help
71 Enable Postfix support for Email Address Internationalization
72 (EAI) as defined in RFC 6531 (SMTPUTF8 extension), RFC 6532
73 (Internationalized email headers) and RFC 6533
74 (Internationalized delivery status notifications).
75 Since version 3.0, Postfix fully supports UTF-8 email
76 addresses and UTF-8 message header values.
77 endmenu
78 endef
79
80 CCARGS=-DNO_NIS
81 AUXLIBS=-L$(STAGING_DIR)/usr/lib
82 default_database_type=cdb
83
84 ifdef CONFIG_POSTFIX_TLS
85 CCARGS+=-DUSE_TLS
86 AUXLIBS+=-lssl -lcrypto
87 endif
88
89 ifdef CONFIG_POSTFIX_SASL
90 CCARGS+=-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I$(STAGING_DIR)/usr/include/sasl
91 AUXLIBS+=-lsasl2
92 endif
93
94 ifdef CONFIG_POSTFIX_LDAP
95 CCARGS+=-DHAS_LDAP
96 AUXLIBS+=-lldap -llber
97 endif
98
99 ifdef CONFIG_POSTFIX_CDB
100 CCARGS+=-DHAS_CDB
101 AUXLIBS+=-lcdb
102 endif
103
104 ifdef CONFIG_POSTFIX_DB
105 AUXLIBS+=-ldb
106 CCARGS+=-DHAS_DB
107 ifndef CONFIG_POSTFIX_CDB
108 default_database_type=btree
109 endif
110 else
111 CCARGS+=-DNO_DB
112 endif
113
114 ifdef CONFIG_POSTFIX_SQLITE
115 CCARGS+=-DHAS_SQLITE -I$(STAGING_DIR)/usr/include/
116 AUXLIBS+=-L$(STAGING_DIR)/usr/lib -lsqlite3 -lpthread
117 endif
118
119 ifdef CONFIG_POSTFIX_EAI
120 AUXLIBS+=-licuuc
121 CCARGS+=-DHAS_EAI
122 smtputf8_conf = yes
123 else
124 CCARGS+=-DNO_EAI
125 smtputf8_conf = no
126 endif
127
128 CCARGS+=-DDEF_DB_TYPE=\"$(default_database_type)\"
129
130 config_directory=/etc/postfix# also add this to postfix init file
131 sample_directory=/etc/postfix
132 command_directory=/usr/sbin
133 daemon_directory=/usr/libexec/postfix
134 data_directory=/usr/var/lib/postfix
135 queue_directory=/usr/var/spool/postfix
136 mail_spool_directory=/usr/var/mail
137 html_directory=no
138 manpage_directory=no
139 readme_directory=no
140 sendmail_path=/usr/sbin/sendmail
141 newaliases_path=/usr/bin/newaliases
142 mailq_path=/usr/bin/mailq
143 shlib_directory=/usr/lib/postfix
144 meta_directory=/etc/postfix
145
146 ln_suffix=.postfix
147 ln_old_suffix=.old
148
149 define Package/postfix/conffiles
150 $(config_directory)/main.cf
151 $(config_directory)/master.cf
152 $(config_directory)/aliases
153 $(config_directory)/virtual
154 endef
155
156 define Build/Configure
157 if [ "$(CONFIG_POSTFIX_DB)" = "" -a "$(CONFIG_POSTFIX_CDB)" = "" ]; then\
158 echo "Build error: You must select at least one of the DB types";\
159 exit 1;\
160 fi
161
162 cd $(PKG_BUILD_DIR); $(MAKE) makefiles CCARGS='$(CCARGS)' $(TARGET_CONFIGURE_OPTS) AUXLIBS="$(AUXLIBS)"
163 endef
164
165 # Steps to regenerate files/main.cf.default:
166 #
167 # 1. Compile the package with current file
168 # 2. Execute the following command on target device:
169 # postconf -d > /tmp/main.cf.new
170 # 3. Transfer /tmp/main.cf.new file to the build system
171 # 4. Execute the following command:
172 # cat /tmp/main.cf.new | ( echo '# DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE'; echo '# TEXT HERE JUST SHOWS DEFAULT SETTINGS BUILT INTO POSTFIX.'; echo '#'; grep -v ^alias_maps\ = |grep -v ^alias_database\ = |grep -v ^command_directory\ = |grep -v ^config_directory\ = |grep -v ^daemon_directory\ = |grep -v ^data_directory\ = |grep -v ^default_database_type\ = |grep -v ^html_directory\ = |grep -v ^mail_spool_directory\ = |grep -v ^mailq_path\ = |grep -v ^manpage_directory\ = |grep -v ^meta_directory\ = |grep -v ^mydomain\ = |grep -v ^myhostname\ = |grep -v ^mynetworks\ = |grep -v ^mynetworks_style\ = |grep -v ^newaliases_path\ = |grep -v ^queue_directory\ = |grep -v ^readme_directory\ = |grep -v ^sample_directory\ = |grep -v ^sendmail_path\ = |grep -v ^shlib_directory\ = |grep -v ^smtputf8_enable\ = |grep -v ^virtual_maps\ = |grep -v ^process_id\ = ) > files/main.cf.default
173 # 5. Done. Now you can rebuild the package with new main.cf.default.
174 #
175
176 define Build/Compile
177 # Currently postfix has a bug with Makefiles that CCARGS are not passed to the compiler, so we are copying them to CC as a workaround
178 cd $(PKG_BUILD_DIR); $(MAKE) $(TARGET_CONFIGURE_OPTS) CC='$(TARGET_CC) $(CCARGS)'
179 cp ./files/main.cf.default $(PKG_BUILD_DIR)/conf/main.cf.default
180 echo "default_database_type = $(default_database_type)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
181 echo "alias_database = $(default_database_type):$(config_directory)/aliases" >> $(PKG_BUILD_DIR)/conf/main.cf.default
182 echo "alias_maps = $(default_database_type):$(config_directory)/aliases" >> $(PKG_BUILD_DIR)/conf/main.cf.default
183 echo "virtual_maps = $(default_database_type):$(config_directory)/virtual" >> $(PKG_BUILD_DIR)/conf/main.cf.default
184 echo "sendmail_path = $(sendmail_path)$(ln_suffix)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
185 echo "newaliases_path = $(newaliases_path)$(ln_suffix)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
186 echo "mailq_path = $(mailq_path)$(ln_suffix)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
187 echo "html_directory = $(html_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
188 echo "manpage_directory = $(manpage_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
189 echo "sample_directory = $(sample_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
190 echo "readme_directory = $(readme_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
191 echo "command_directory = $(command_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
192 echo "daemon_directory = $(daemon_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
193 echo "data_directory = $(data_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
194 echo "queue_directory = $(queue_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
195 echo "config_directory = $(config_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
196 echo "mail_spool_directory = $(mail_spool_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
197 echo "shlib_directory = $(shlib_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
198 echo "meta_directory = $(meta_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
199 echo "smtputf8_enable = $(smtputf8_conf)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
200 endef
201
202 define Package/postfix/install
203 cd $(PKG_BUILD_DIR); $(MAKE) install_root=$(1) command_directory=$(command_directory) daemon_directory=$(daemon_directory) data_directory=$(data_directory) html_directory=$(html_directory) mail_owner=postfix mailq_path=$(mailq_path)$(ln_suffix) manpage_directory=$(manpage_directory) newaliases_path=$(newaliases_path)$(ln_suffix) queue_directory=$(queue_directory) readme_directory=$(readme_directory) sendmail_path=$(sendmail_path)$(ln_suffix) setgid_group=postdrop sample_directory=$(sample_directory) config_directory=$(config_directory) shlib_directory=$(shlib_directory) meta_directory=$(meta_directory) mail_version=$(PKG_VERSION) non-interactive-package
204 $(INSTALL_DIR) $(1)$(mail_spool_directory)
205 $(INSTALL_DIR) $(1)/etc/init.d/
206 $(INSTALL_BIN) ./files/postfix.init $(1)/etc/init.d/postfix
207 endef
208
209 define Package/postfix/postinst
210 #!/bin/sh
211
212 if [ -f "$${IPKG_INSTROOT}$(sendmail_path)" -a "$$(readlink "$${IPKG_INSTROOT}$(sendmail_path)")" != "$(sendmail_path)$(ln_suffix)" ]; then
213 mv "$${IPKG_INSTROOT}$(sendmail_path)" "$${IPKG_INSTROOT}$(sendmail_path)$(ln_old_suffix)"
214 echo "Warning: $${IPKG_INSTROOT}$(sendmail_path) saved as $${IPKG_INSTROOT}$(sendmail_path)$(ln_old_suffix)"
215 fi
216 if [ ! -f "$${IPKG_INSTROOT}$(sendmail_path)" ]; then
217 ln -s "$${IPKG_INSTROOT}$(sendmail_path)$(ln_suffix)" "$(sendmail_path)"
218 fi
219
220 if [ -f "$${IPKG_INSTROOT}$(newaliases_path)" -a "$$(readlink "$${IPKG_INSTROOT}$(newaliases_path)")" != "$(newaliases_path)$(ln_suffix)" ]; then
221 mv "$${IPKG_INSTROOT}$(newaliases_path)" "$${IPKG_INSTROOT}$(newaliases_path)$(ln_old_suffix)"
222 echo "Warning: $${IPKG_INSTROOT}$(newaliases_path) saved as $${IPKG_INSTROOT}$(newaliases_path)$(ln_old_suffix)"
223 fi
224 if [ ! -f "$${IPKG_INSTROOT}$(newaliases_path)" ]; then
225 ln -s "$${IPKG_INSTROOT}$(newaliases_path)$(ln_suffix)" "$(newaliases_path)"
226 fi
227
228 if [ -f "$${IPKG_INSTROOT}$(mailq_path)" -a "$$(readlink "$${IPKG_INSTROOT}$(mailq_path)")" != "$(mailq_path)$(ln_suffix)" ]; then
229 mv "$${IPKG_INSTROOT}$(mailq_path)" "$${IPKG_INSTROOT}$(mailq_path)$(ln_old_suffix)"
230 echo "Warning: $${IPKG_INSTROOT}$(mailq_path) saved as $${IPKG_INSTROOT}$(mailq_path)$(ln_old_suffix)"
231 fi
232 if [ ! -f "$(mailq_path)" ]; then
233 ln -s "$${IPKG_INSTROOT}$(mailq_path)$(ln_suffix)" "$(mailq_path)"
234 fi
235
236 grep -qc main\.cf "$${IPKG_INSTROOT}"/etc/sysupgrade.conf >/dev/null || echo "$(config_directory)/main.cf" >> "$${IPKG_INSTROOT}"/etc/sysupgrade.conf
237 grep -qc master\.cf "$${IPKG_INSTROOT}"/etc/sysupgrade.conf >/dev/null || echo "$(config_directory)/master.cf" >> "$${IPKG_INSTROOT}"/etc/sysupgrade.conf
238 grep -qc aliases "$${IPKG_INSTROOT}"/etc/sysupgrade.conf >/dev/null || echo "$(config_directory)/aliases" >> "$${IPKG_INSTROOT}"/etc/sysupgrade.conf
239 grep -qc virtual "$${IPKG_INSTROOT}"/etc/sysupgrade.conf >/dev/null || echo "$(config_directory)/virtual" >> "$${IPKG_INSTROOT}"/etc/sysupgrade.conf
240
241 touch "$${IPKG_INSTROOT}$(config_directory)"/opkg_postinst
242
243 if [ -z "$${IPKG_INSTROOT}" ]; then
244 ps | grep "postfix/master" | grep -cvq grep >/dev/null && /etc/init.d/postfix restart
245 fi
246
247 endef
248
249 define Package/postfix/prerm
250 #!/bin/sh
251 ps | grep "postfix/master" | grep -cvq grep >/dev/null && postfix stop
252 /etc/init.d/postfix disable
253 endef
254
255 define Package/postfix/postrm
256 #!/bin/sh
257 rm -f $${IPKG_INSTROOT}$(config_directory)/aliases.cdb $${IPKG_INSTROOT}$(config_directory)/aliases.db $${IPKG_INSTROOT}$(data_directory)/master.lock
258
259 rm -f $${IPKG_INSTROOT}$(config_directory)/virtual.cdb $${IPKG_INSTROOT}$(config_directory)/virtual.db
260
261 rm -f "$${IPKG_INSTROOT}$(sendmail_path)" "$${IPKG_INSTROOT}$(newaliases_path)" "$${IPKG_INSTROOT}$(mailq_path)"
262
263 if [ -f "$${IPKG_INSTROOT}$(sendmail_path)$(ln_old_suffix)" ]; then
264 mv "$${IPKG_INSTROOT}$(sendmail_path)$(ln_old_suffix)" "$${IPKG_INSTROOT}$(sendmail_path)"
265 echo "Warning: $${IPKG_INSTROOT}$(sendmail_path) restored from $${IPKG_INSTROOT}$(sendmail_path)$(ln_old_suffix)"
266 fi
267 if [ -f "$${IPKG_INSTROOT}$(newaliases_path)$(ln_old_suffix)" ]; then
268 mv "$${IPKG_INSTROOT}$(newaliases_path)$(ln_old_suffix)" "$${IPKG_INSTROOT}$(newaliases_path)"
269 echo "Warning: $${IPKG_INSTROOT}$(newaliases_path) restored from $${IPKG_INSTROOT}$(newaliases_path)$(ln_old_suffix)"
270 fi
271 if [ -f "$${IPKG_INSTROOT}$(mailq_path)$(ln_old_suffix)" ]; then
272 mv "$${IPKG_INSTROOT}$(mailq_path)$(ln_old_suffix)" "$${IPKG_INSTROOT}$(mailq_path)"
273 echo "Warning: $${IPKG_INSTROOT}$(mailq_path) restored from $${IPKG_INSTROOT}$(mailq_path)$(ln_old_suffix)"
274 fi
275 endef
276
277 $(eval $(call BuildPackage,postfix))