1 # Copyright 1999-2020 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
6 inherit flag-o-matic pam systemd toolchain-funcs
9 MY_SRC="${PN}-${MY_PV}"
10 MY_URI="ftp://ftp.porcupine.org/mirrors/postfix-release/official"
13 DESCRIPTION="A fast and secure drop-in replacement for sendmail"
14 HOMEPAGE="http://www.postfix.org/"
15 SRC_URI="${MY_URI}/${MY_SRC}.tar.gz"
17 LICENSE="|| ( IBM EPL-2.0 )"
19 KEYWORDS="~alpha amd64 arm ~hppa ~ia64 ~mips ppc ppc64 ~s390 ~sparc x86"
20 IUSE="+berkdb cdb dovecot-sasl +eai hardened ldap ldap-bind libressl lmdb memcached mbox mysql nis pam postgres sasl selinux sqlite ssl"
22 DEPEND=">=dev-libs/libpcre-3.4
24 berkdb? ( >=sys-libs/db-3.2:* )
25 cdb? ( || ( >=dev-db/tinycdb-0.76 >=dev-db/cdb-0.75-r4 ) )
26 eai? ( dev-libs/icu:= )
27 ldap? ( net-nds/openldap )
28 ldap-bind? ( net-nds/openldap[sasl] )
29 lmdb? ( >=dev-db/lmdb-0.9.11 )
30 mysql? ( dev-db/mysql-connector-c:0= )
31 nis? ( net-libs/libnsl )
33 postgres? ( dev-db/postgresql:* )
34 sasl? ( >=dev-libs/cyrus-sasl-2 )
35 sqlite? ( dev-db/sqlite:3 )
37 !libressl? ( dev-libs/openssl:0= )
38 libressl? ( >=dev-libs/libressl-2.9.1:0= )
45 memcached? ( net-misc/memcached )
57 !<mail-mta/ssmtp-2.64-r2
58 !>=mail-mta/ssmtp-2.64-r2[mta]
60 selinux? ( sec-policy/selinux-postfix )"
62 REQUIRED_USE="ldap-bind? ( ldap sasl )"
64 S="${WORKDIR}/${MY_SRC}"
67 "${FILESDIR}/${PN}-libressl-certkey.patch"
68 "${FILESDIR}/${PN}-libressl-server.patch"
69 "${FILESDIR}/${PN}-glibc230.patch"
70 "${FILESDIR}/${PN}-gcc10.patch"
75 sed -i -e "/^#define ALIAS_DB_MAP/s|:/etc/aliases|:/etc/mail/aliases|" \
76 src/util/sys_defs.h || die "sed failed"
77 # change default paths to better comply with portage standard paths
78 sed -i -e "s:/usr/local/:/usr/:g" conf/master.cf || die "sed failed"
82 for name in CDB LDAP LMDB MYSQL PCRE PGSQL SDBM SQLITE
84 local AUXLIBS_${name}=""
87 # Make sure LDFLAGS get passed down to the executables.
88 local mycc="-DHAS_PCRE" mylibs="${LDFLAGS} -ldl"
89 AUXLIBS_PCRE="$(pcre-config --libs)"
91 use pam && mylibs="${mylibs} -lpam"
94 mycc="${mycc} -DHAS_LDAP"
95 AUXLIBS_LDAP="-lldap -llber"
99 mycc="${mycc} -DHAS_MYSQL $(mysql_config --include)"
100 AUXLIBS_MYSQL="$(mysql_config --libs)"
103 if use postgres; then
104 mycc="${mycc} -DHAS_PGSQL -I$(pg_config --includedir)"
105 AUXLIBS_PGSQL="-L$(pg_config --libdir) -lpq"
109 mycc="${mycc} -DHAS_SQLITE"
110 AUXLIBS_SQLITE="-lsqlite3 -lpthread"
114 mycc="${mycc} -DUSE_TLS"
115 mylibs="${mylibs} -lssl -lcrypto"
119 mycc="${mycc} -DHAS_LMDB"
120 AUXLIBS_LMDB="-llmdb -lpthread"
124 mycc="${mycc} -DNO_EAI"
127 # broken. and "in other words, not supported" by upstream.
128 # Use inet_protocols setting in main.cf
130 # mycc="${mycc} -DNO_IPV6"
134 if use dovecot-sasl; then
135 # Set dovecot as default.
136 mycc="${mycc} -DDEF_SASL_SERVER=\\\"dovecot\\\""
138 if use ldap-bind; then
139 mycc="${mycc} -DUSE_LDAP_SASL"
141 mycc="${mycc} -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl"
142 mylibs="${mylibs} -lsasl2"
143 elif use dovecot-sasl; then
144 mycc="${mycc} -DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\\\"dovecot\\\""
148 mycc="${mycc} -DNO_NIS"
151 if ! use berkdb; then
152 mycc="${mycc} -DNO_DB"
154 # change default hash format from Berkeley DB to cdb
155 mycc="${mycc} -DDEF_DB_TYPE=\\\"cdb\\\""
160 mycc="${mycc} -DHAS_CDB -I/usr/include/cdb"
161 # Tinycdb is preferred.
162 if has_version dev-db/tinycdb ; then
163 einfo "Building with dev-db/tinycdb"
166 einfo "Building with dev-db/cdb"
167 CDB_PATH="/usr/$(get_libdir)"
168 for i in cdb.a alloc.a buffer.a unix.a byte.a ; do
169 AUXLIBS_CDB="${AUXLIBS_CDB} ${CDB_PATH}/${i}"
174 # Robin H. Johnson <robbat2@gentoo.org> 17/Nov/2006
175 # Fix because infra boxes hit 2Gb .db files that fail a 32-bit fstat signed check.
176 mycc="${mycc} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
179 # Workaround for bug #76512
180 if use hardened; then
181 [[ "$(gcc-version)" == "3.4" ]] && replace-flags -O? -Os
184 # Remove annoying C++ comment style warnings - bug #378099
185 append-flags -Wno-comment
187 sed -i -e "/^RANLIB/s/ranlib/$(tc-getRANLIB)/g" "${S}"/makedefs
188 sed -i -e "/^AR/s/ar/$(tc-getAR)/g" "${S}"/makedefs
190 emake makefiles shared=yes dynamicmaps=no pie=yes \
191 shlib_directory="/usr/$(get_libdir)/postfix/MAIL_VERSION" \
192 DEBUG="" CC="$(tc-getCC)" OPT="${CFLAGS}" CCARGS="${mycc}" AUXLIBS="${mylibs}" \
193 AUXLIBS_CDB="${AUXLIBS_CDB}" AUXLIBS_LDAP="${AUXLIBS_LDAP}" \
194 AUXLIBS_LMDB="${AUXLIBS_LMDB}" AUXLIBS_MYSQL="${AUXLIBS_MYSQL}" \
195 AUXLIBS_PCRE="${AUXLIBS_PCRE}" AUXLIBS_PGSQL="${AUXLIBS_PGSQL}" \
196 AUXLIBS_SQLITE="${AUXLIBS_SQLITE}"
200 LD_LIBRARY_PATH="${S}/lib" \
201 /bin/sh postfix-install \
203 install_root="${D}" \
204 config_directory="/etc/postfix" \
205 manpage_directory="/usr/share/man" \
206 command_directory="/usr/sbin" \
207 mailq_path="/usr/bin/mailq" \
208 newaliases_path="/usr/bin/newaliases" \
209 sendmail_path="/usr/sbin/sendmail" \
210 || die "postfix-install failed"
212 # Fix spool removal on upgrade
214 keepdir /var/spool/postfix
216 # Install rmail for UUCP, closes bug #19127
217 dobin auxiliary/rmail/rmail
219 # Provide another link for legacy FSH
220 dosym ../sbin/sendmail /usr/$(get_libdir)/sendmail
222 # Install qshape, posttls-finger and collate
223 dobin auxiliary/qshape/qshape.pl
224 doman man/man1/qshape.1
225 dobin bin/posttls-finger
226 doman man/man1/posttls-finger.1
227 dobin auxiliary/collate/collate.pl
228 newdoc auxiliary/collate/README README.collate
230 # Performance tuning tools and their manuals
231 dosbin bin/smtp-{source,sink} bin/qmqp-{source,sink}
232 doman man/man1/smtp-{source,sink}.1 man/man1/qmqp-{source,sink}.1
234 # Set proper permissions on required files/directories
235 keepdir /var/lib/postfix
236 fowners -R postfix:postfix /var/lib/postfix
237 fperms 0750 /var/lib/postfix
238 fowners root:postdrop /usr/sbin/post{drop,queue}
239 fperms 02755 /usr/sbin/post{drop,queue}
242 keepdir /etc/postfix/postfix-files.d
244 mypostconf="mail_spool_directory=/var/spool/mail"
246 mypostconf="home_mailbox=.maildir/"
248 LD_LIBRARY_PATH="${S}/lib" \
249 "${D}"/usr/sbin/postconf -c "${D}"/etc/postfix \
250 -e ${mypostconf} || die "postconf failed"
253 newins "${FILESDIR}"/smtp.pass saslpass
254 fperms 600 /etc/postfix/saslpass
256 newinitd "${FILESDIR}"/postfix.rc6.${RC_VER} postfix
257 # do not start mysql/postgres unnecessarily - bug #359913
258 use mysql || sed -i -e "s/mysql //" "${D}/etc/init.d/postfix"
259 use postgres || sed -i -e "s/postgresql //" "${D}/etc/init.d/postfix"
261 dodoc *README COMPATIBILITY HISTORY PORTING RELEASE_NOTES*
262 mv "${S}"/examples "${D}"/usr/share/doc/${PF}/
263 # postfix set-permissions expects uncompressed man files
264 docompress -x /usr/share/man
266 pamd_mimic_system smtp auth account
270 newins "${FILESDIR}"/smtp.sasl smtpd.conf
274 insinto /usr/include/postfix
277 if has_version mail-mta/postfix; then
278 # let the sysadmin decide when to change the compatibility_level
279 sed -i -e /^compatibility_level/"s/^/#/" "${D}"/etc/postfix/main.cf || die
282 systemd_dounit "${FILESDIR}/${PN}.service"
286 if has_version '<mail-mta/postfix-3.4'; then
288 elog "Postfix-3.4 introduces a new master.cf service 'postlog'"
289 elog "with type 'unix-dgram' that is used by the new postlogd(8) daemon."
290 elog "Before backing out to an older Postfix version, edit the master.cf"
291 elog "file and remove the postlog entry."
297 if [[ ! -e /etc/mail/aliases.db ]] ; then
299 ewarn "You must edit /etc/mail/aliases to suit your needs"
300 ewarn "and then run /usr/bin/newaliases. Postfix will not"
301 ewarn "work correctly without it."
305 # check and fix file permissions
306 "${EROOT}"/usr/sbin/postfix set-permissions
310 if "${EROOT}"/usr/sbin/postfix tls all-default-client; then
311 elog "To configure client side TLS settings:"
312 elog "${EROOT}"/usr/sbin/postfix tls enable-client
314 if "${EROOT}"/usr/sbin/postfix tls all-default-server; then
315 elog "To configure server side TLS settings:"
316 elog "${EROOT}"/usr/sbin/postfix tls enable-server