Makefile (12432B)
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))