2 # Copyright (C) 2014-2015 OpenWrt.org
4 # This is free software, licensed under the GNU General Public License v2.
5 # See /LICENSE for more information.
8 include $(TOPDIR
)/rules.mk
12 PKG_SOURCE_URL
:=ftp
://ftp.porcupine.org
/mirrors
/postfix-release
/official
/
14 PKG_MD5SUM
:=878a059d92ee3b093d7d3e97248c915d
15 PKG_SOURCE
:=$(PKG_NAME
)-$(PKG_VERSION
).
tar.gz
16 PKG_MAINTAINER
:=Denis Shulyaka
<Shulyaka@gmail.com
>
18 PKG_LICENSE_FILES
:=LICENSE
19 PKG_BUILD_DEPENDS
:=+POSTFIX_CDB
:tinycdb
21 include $(INCLUDE_DIR
)/package.mk
23 define Package
/postfix
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
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.
35 define Package/postfix/config
36 menu "Select postfix build options"
41 Implements TLS support in postfix (using OpenSSL).
46 Implements SASL support in postfix (using Cyrus SASL).
51 Implements LDAP support in postfix (using OpenLDAP).
53 bool "BerkeleyDB support"
56 Implements support for btree files using Berkeley DB. Note that hash files support is not compiled into Berkeley DB OpenWRT distribution
61 Implements support for cdb files using tinycdb
66 Implements support for SQLite3 DB
68 bool "SMTPUTF8 support"
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.
81 AUXLIBS=-L$(STAGING_DIR)/usr/lib
82 default_database_type=cdb
84 ifdef CONFIG_POSTFIX_TLS
86 AUXLIBS+=-lssl -lcrypto
89 ifdef CONFIG_POSTFIX_SASL
90 CCARGS+=-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I$(STAGING_DIR)/usr/include/sasl
94 ifdef CONFIG_POSTFIX_LDAP
96 AUXLIBS+=-lldap -llber
99 ifdef CONFIG_POSTFIX_CDB
104 ifdef CONFIG_POSTFIX_DB
107 ifndef CONFIG_POSTFIX_CDB
108 default_database_type=btree
114 ifdef CONFIG_POSTFIX_SQLITE
115 CCARGS+=-DHAS_SQLITE -I$(STAGING_DIR)/usr/include/
116 AUXLIBS+=-L$(STAGING_DIR)/usr/lib -lsqlite3 -lpthread
119 ifdef CONFIG_POSTFIX_EAI
128 CCARGS+=-DDEF_DB_TYPE=\"$(default_database_type)\"
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
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
149 define Package/postfix/conffiles
150 $(config_directory)/main.cf
151 $(config_directory)/master.cf
152 $(config_directory)/aliases
153 $(config_directory)/virtual
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";\
162 cd $(PKG_BUILD_DIR); $(MAKE) makefiles CCARGS='$(CCARGS
)' $(TARGET_CONFIGURE_OPTS) AUXLIBS="$(AUXLIBS)"
165 # Steps to regenerate files/main.cf.default:
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.
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
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
209 define Package
/postfix
/postinst
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)"
216 if
[ ! -f
"$${IPKG_INSTROOT}$(sendmail_path)" ]; then
217 ln
-s
"$${IPKG_INSTROOT}$(sendmail_path)$(ln_suffix)" "$(sendmail_path)"
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)"
224 if
[ ! -f
"$${IPKG_INSTROOT}$(newaliases_path)" ]; then
225 ln
-s
"$${IPKG_INSTROOT}$(newaliases_path)$(ln_suffix)" "$(newaliases_path)"
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)"
232 if
[ ! -f
"$(mailq_path)" ]; then
233 ln
-s
"$${IPKG_INSTROOT}$(mailq_path)$(ln_suffix)" "$(mailq_path)"
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
241 touch
"$${IPKG_INSTROOT}$(config_directory)"/opkg_postinst
243 if
[ -z
"$${IPKG_INSTROOT}" ]; then
244 ps | grep
"postfix/master" | grep
-cvq grep
>/dev
/null
&& /etc
/init.d
/postfix restart
249 define Package
/postfix
/prerm
251 ps | grep
"postfix/master" | grep
-cvq grep
>/dev
/null
&& postfix stop
252 /etc
/init.d
/postfix disable
255 define Package
/postfix
/postrm
257 rm -f
$${IPKG_INSTROOT}$(config_directory
)/aliases.cdb
$${IPKG_INSTROOT}$(config_directory
)/aliases.db
$${IPKG_INSTROOT}$(data_directory
)/master.lock
259 rm -f
$${IPKG_INSTROOT}$(config_directory
)/virtual.cdb
$${IPKG_INSTROOT}$(config_directory
)/virtual.db
261 rm -f
"$${IPKG_INSTROOT}$(sendmail_path)" "$${IPKG_INSTROOT}$(newaliases_path)" "$${IPKG_INSTROOT}$(mailq_path)"
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)"
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)"
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)"
277 $(eval
$(call BuildPackage
,postfix
))