blob: 789627aa26f6ed894832f16099b0757ea2c47434 (
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
136
137
138
139
140
141
142
143
144
145
|
# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
# Note: please bump this together with mail-mta/sendmail and app-shells/smrsh
VERIFY_SIG_OPENPGP_KEY_PATH="/usr/share/openpgp-keys/sendmail.asc"
inherit toolchain-funcs verify-sig
# This library is part of sendmail, but it does not share the version number with it.
# In order to find the right libmilter version number, check SMFI_VERSION definition
# that can be found in ${S}/include/libmilter/mfapi.h (see also SM_LM_VRS_* defines).
# For example, version 1.0.1 has a SMFI_VERSION of 0x01000001.
#
# See check in src_prepare too.
SENDMAIL_VER=8.18.1
DESCRIPTION="The Sendmail Filter API (Milter)"
HOMEPAGE="https://www.proofpoint.com/us/products/email-protection/open-source-email-solution"
if [[ -n $(ver_cut 4 ${SENDMAIL_VER}) ]] ; then
# Snapshots have an extra version component (e.g. 8.17.1 vs 8.17.1.9)
SRC_URI="
https://ftp.sendmail.org/snapshots/sendmail.${SENDMAIL_VER}.tar.gz
verify-sig? ( https://ftp.sendmail.org/snapshots/sendmail.${SENDMAIL_VER}.tar.gz.sig )
"
fi
SRC_URI+="
https://ftp.sendmail.org/sendmail.${SENDMAIL_VER}.tar.gz
verify-sig? ( https://ftp.sendmail.org/sendmail.${SENDMAIL_VER}.tar.gz.sig )
"
SRC_URI+="
https://ftp.sendmail.org/past-releases/sendmail.${SENDMAIL_VER}.tar.gz
verify-sig? ( https://ftp.sendmail.org/past-releases/sendmail.${SENDMAIL_VER}.tar.gz.sig )
"
S="${WORKDIR}/sendmail-${SENDMAIL_VER}"
LICENSE="Sendmail"
# We increment _pN when a new sendmail tarball comes out and change the actual
# "main version" (1.0.2 at time of writing) when the version
# of libmilter included in the tarball changes.
# We used to use $(ver_cut 1-3) here (assuming ABI stability between sendmail
# versions) but that doesn't seem to apply for sendmail snapshots.
SLOT="0/${PV}"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
IUSE="poll"
BDEPEND="
sys-devel/m4
verify-sig? ( ~sec-keys/openpgp-keys-sendmail-20250220 )
"
# build system patch copied from sendmail ebuild
PATCHES=(
"${FILESDIR}"/sendmail-8.16.1-build-system.patch
"${FILESDIR}"/${PN}-sharedlib.patch
"${FILESDIR}"/${PN}-1.0.2_p3-c23-bool.patch
"${FILESDIR}"/${PN}-1.0.2_p4-systemd-socket-activation.patch
)
src_prepare() {
default
extract_version_from_source() {
# Extract "# define SMFI_VERSION 0x01000002" from include/libmilter/mfapi.h
local actual_libmilter_ver=$(grep -o -E -m 1 "0[xX][0-9a-fA-F]+" include/libmilter/mfapi.h)
# SM_LM_VRS_MAJOR(v) (((v) & 0x7f000000) >> 24)
local actual_libmilter_ver_major=$(((actual_libmilter_ver & 0x7f000000) >> 24))
# SM_LM_VRS_MINOR(v) (((v) & 0x007fff00) >> 8)
local actual_libmilter_ver_minor=$(((actual_libmilter_ver & 0x007fff00) >> 8))
# SM_LM_VRS_PLVL(v) ((v) & 0x0000007f)
local actual_libmilter_ver_plvl=$((actual_libmilter_ver & 0x0000007f))
einfo "Extracted version (hex): ${actual_libmilter_ver}"
einfo "Extracted version (major): ${actual_libmilter_ver_major}"
einfo "Extracted version (minor): ${actual_libmilter_ver_minor}"
einfo "Extracted version (plvl): ${actual_libmilter_ver_plvl}"
einfo "Extracted version (final): ${actual_libmilter_ver_major}.${actual_libmilter_ver_minor}.${actual_libmilter_ver_plvl}"
echo ${actual_libmilter_ver_major}.${actual_libmilter_ver_minor}.${actual_libmilter_ver_plvl}
}
local actual_libmilter_ver_final=$(extract_version_from_source)
if [[ $(ver_cut 1-3) != ${actual_libmilter_ver_final} ]] ; then
eerror "Ebuild version ${PV} does not match detected version ${actual_libmilter_ver_final}!"
eerror "Expected version: $(ver_cut 1-3)"
eerror "Detected version: ${actual_libmilter_ver_final}"
die "Package version ${PV} appears to be incorrect. Please check the source or rename the ebuild."
fi
local ENVDEF="-DNETUNIX -DNETINET -DNETINET6 -DHAS_GETHOSTBYNAME2=1"
use poll && ENVDEF+=" -DSM_CONF_POLL=1"
if use elibc_musl; then
ENVDEF+=" -DNEEDSGETIPNODE"
eapply "${FILESDIR}"/${PN}-musl-stack-size.patch
eapply "${FILESDIR}"/${PN}-musl-disable-cdefs.patch
fi
sed -e "s|@@CC@@|$(tc-getCC)|" \
-e "s|@@CFLAGS@@|${CFLAGS}|" \
-e "s|@@ENVDEF@@|${ENVDEF}|" \
-e "s|@@LDFLAGS@@|${LDFLAGS}|" \
"${FILESDIR}"/gentoo.config.m4 > devtools/Site/site.config.m4 \
|| die "failed to generate site.config.m4"
}
src_compile() {
emake -j1 -C libmilter AR="$(tc-getAR)" MILTER_SOVER=${PV}
}
src_install() {
dodir /usr/$(get_libdir)
local emakeargs=(
DESTDIR="${D}" LIBDIR="/usr/$(get_libdir)"
MANROOT=/usr/share/man/man
SBINOWN=root SBINGRP=0 UBINOWN=root UBINGRP=0
LIBOWN=root LIBGRP=0 GBINOWN=root GBINGRP=0
MANOWN=root MANGRP=0 INCOWN=root INCGRP=0
MSPQOWN=root CFOWN=root CFGRP=0
MILTER_SOVER="$(ver_cut 1-3)"
)
emake -C obj.*/libmilter "${emakeargs[@]}" install
dodoc libmilter/README
docinto html
dodoc -r libmilter/docs/.
if [[ ${PV} != $(ver_cut 1-3) ]] ; then
# Move the .so file to the more specific name so it becomes a chain like
# .so -> .so.1.0.2 -> .so.1.0.2_p2, otherwise ldconfig can get confused
# (bug #864563).
#
# See comment above ${SLOT} definition above.
mv "${ED}"/usr/$(get_libdir)/"${PN}.so.$(ver_cut 1-3)" "${ED}"/usr/$(get_libdir)/${PN}.so.${PV}
dosym ${PN}.so.${PV} /usr/$(get_libdir)/${PN}.so.$(ver_cut 1-3)
fi
find "${ED}" -name '*.a' -delete || die
}
|