summaryrefslogtreecommitdiff
blob: b53f7b58ddfee41052528ca6cec6a6466179afb4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

inherit flag-o-matic toolchain-funcs prefix

DESCRIPTION="Mail delivery agent/filter"
HOMEPAGE="http://www.procmail.org/"
SRC_URI="http://www.procmail.org/${P}.tar.gz"

LICENSE="|| ( Artistic GPL-2 )"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos"
IUSE="mbox selinux"

DEPEND="
	acct-group/mail
	virtual/mta
"
RDEPEND="
	${DEPEND}
	selinux? ( sec-policy/selinux-procmail )
"

src_prepare() {
	# disable flock, using both fcntl and flock style locking
	# doesn't work with NFS with 2.6.17+ kernels, bug #156493

	sed -e "s|/\*#define NO_flock_LOCK|#define NO_flock_LOCK|" \
		-i config.h || die "sed failed"

	if ! use mbox ; then
		echo "# Use maildir-style mailbox in user's home directory" > "${S}"/procmailrc || die
		echo 'DEFAULT=$HOME/.maildir/' >> "${S}"/procmailrc || die
		cd "${S}" || die
		eapply "${FILESDIR}/gentoo-maildir3.diff"
	else
		echo '# Use mbox-style mailbox in /var/spool/mail' > "${S}"/procmailrc || die
		echo 'DEFAULT=${EPREFIX}/var/spool/mail/$LOGNAME' >> "${S}"/procmailrc || die
	fi

	# Do not use lazy bindings on lockfile and procmail
	if [[ ${CHOST} != *-darwin* ]]; then
		eapply -p0 "${FILESDIR}/${PN}-lazy-bindings.diff"
	fi

	# Fix for bug #102340
	eapply -p0 "${FILESDIR}/${PN}-comsat-segfault.diff"

	# Fix for bug #119890
	eapply -p0 "${FILESDIR}/${PN}-maxprocs-fix.diff"

	# Prefixify config.h
	eapply -p0 "${FILESDIR}"/${PN}-prefix.patch
	eprefixify config.h Makefile src/autoconf src/recommend.c

	# Fix for bug #200006
	eapply "${FILESDIR}/${PN}-pipealloc.diff"

	# Fix for bug #270551
	eapply "${FILESDIR}/${PN}-3.22-glibc-2.10.patch"

	# Fix security bugs #522114 and #638108
	eapply "${FILESDIR}/${PN}-3.22-CVE-2014-3618.patch"
	eapply "${FILESDIR}/${PN}-3.22-CVE-2017-16844.patch"

	eapply "${FILESDIR}/${PN}-3.22-crash-fix.patch"

	eapply_user
}

src_compile() {
	# bug #875251, bug #896052
	append-flags -std=gnu89
	# bug #859517
	filter-lto

	# -finline-functions (implied by -O3) leaves strstr() in an infinite loop.
	# To work around this, we append -fno-inline-functions to CFLAGS
	# Since GCC 4.7 we also need -fno-ipa-cp-clone (bug #466552)
	# If it's clang, ignore -fno-ipa-cp-clone, as clang doesn't support this
	append-flags -fno-inline-functions
	tc-is-clang || append-flags -fno-ipa-cp-clone

	sed -e "s|CFLAGS0 = -O|CFLAGS0 = ${CFLAGS}|" \
		-e "s|LDFLAGS0= -s|LDFLAGS0 = ${LDFLAGS}|" \
		-e "s|LOCKINGTEST=__defaults__|#LOCKINGTEST=__defaults__|" \
		-e "s|#LOCKINGTEST=/tmp|LOCKINGTEST=/tmp|" \
		-i Makefile || die "sed failed"

	emake CC="$(tc-getCC)"
}

src_install() {
	cd "${S}"/new || die
	insinto /usr/bin
	insopts -m 6755
	doins procmail

	doins lockfile
	fowners root:mail /usr/bin/lockfile
	fperms 2755 /usr/bin/lockfile

	dobin formail mailstat
	insopts -m 0644

	doman *.1 *.5

	cd "${S}" || die
	dodoc FAQ FEATURES HISTORY INSTALL KNOWN_BUGS README

	insinto /etc
	doins procmailrc

	docinto examples
	dodoc examples/*
}

pkg_postinst() {
	if ! use mbox ; then
		elog "Starting with mail-filter/procmail-3.22-r9 you'll need to ensure"
		elog "that you configure a mail storage location using DEFAULT in"
		elog "/etc/procmailrc, for example:"
		elog "\tDEFAULT=\$HOME/.maildir/"
	fi
	if has sfperms ${FEATURES}; then
		ewarn "FEATURES=sfperms removes the read-bit for others from"
		ewarn "  /usr/bin/procmail"
		ewarn "  /usr/bin/lockfile"
		ewarn "If you use procmail from an MTA like Exim, you need to"
		ewarn "re-add the read-bit or avoid the MTA checking the binary"
		ewarn "exists."
	fi
}