From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <gentoo-commits+bounces-1427334-garchives=archives.gentoo.org@lists.gentoo.org>
Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80])
	(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
	 key-exchange X25519 server-signature RSA-PSS (2048 bits))
	(No client certificate requested)
	by finch.gentoo.org (Postfix) with ESMTPS id 01707158094
	for <garchives@archives.gentoo.org>; Sat, 13 Aug 2022 19:24:48 +0000 (UTC)
Received: from pigeon.gentoo.org (localhost [127.0.0.1])
	by pigeon.gentoo.org (Postfix) with SMTP id 03E0EE0769;
	Sat, 13 Aug 2022 19:24:47 +0000 (UTC)
Received: from smtp.gentoo.org (dev.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4])
	(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
	 key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
	(No client certificate requested)
	by pigeon.gentoo.org (Postfix) with ESMTPS id DD356E0769
	for <gentoo-commits@lists.gentoo.org>; Sat, 13 Aug 2022 19:24:46 +0000 (UTC)
Received: from oystercatcher.gentoo.org (unknown [IPv6:2a01:4f8:202:4333:225:90ff:fed9:fc84])
	(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
	 key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
	(No client certificate requested)
	by smtp.gentoo.org (Postfix) with ESMTPS id A7B73340F68
	for <gentoo-commits@lists.gentoo.org>; Sat, 13 Aug 2022 19:24:44 +0000 (UTC)
Received: from localhost.localdomain (localhost [IPv6:::1])
	by oystercatcher.gentoo.org (Postfix) with ESMTP id E1A8B55B
	for <gentoo-commits@lists.gentoo.org>; Sat, 13 Aug 2022 19:24:42 +0000 (UTC)
From: "Sam James" <sam@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Content-Transfer-Encoding: 8bit
Content-type: text/plain; charset=UTF-8
Reply-To: gentoo-dev@lists.gentoo.org, "Sam James" <sam@gentoo.org>
Message-ID: <1660418653.f67f7c6453fdd128489ea675935302099d66c1f5.sam@gentoo>
Subject: [gentoo-commits] repo/gentoo:master commit in: mail-filter/libmilter/
X-VCS-Repository: repo/gentoo
X-VCS-Files: mail-filter/libmilter/libmilter-1.0.2_p2-r1.ebuild mail-filter/libmilter/libmilter-1.0.2_p3-r2.ebuild
X-VCS-Directories: mail-filter/libmilter/
X-VCS-Committer: sam
X-VCS-Committer-Name: Sam James
X-VCS-Revision: f67f7c6453fdd128489ea675935302099d66c1f5
X-VCS-Branch: master
Date: Sat, 13 Aug 2022 19:24:42 +0000 (UTC)
Precedence: bulk
List-Post: <mailto:gentoo-commits@lists.gentoo.org>
List-Help: <mailto:gentoo-commits+help@lists.gentoo.org>
List-Unsubscribe: <mailto:gentoo-commits+unsubscribe@lists.gentoo.org>
List-Subscribe: <mailto:gentoo-commits+subscribe@lists.gentoo.org>
List-Id: Gentoo Linux mail <gentoo-commits.gentoo.org>
X-BeenThere: gentoo-commits@lists.gentoo.org
X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply
X-Archives-Salt: 6b9d8103-43be-4908-9e1e-657eb7aba5f4
X-Archives-Hash: a7ca05731b90ac5c1aac4f02dbfb9afc

commit:     f67f7c6453fdd128489ea675935302099d66c1f5
Author:     Thomas Bracht Laumann Jespersen <t <AT> laumann <DOT> xyz>
AuthorDate: Thu Aug 11 07:26:28 2022 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sat Aug 13 19:24:13 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=f67f7c64

mail-filter/libmilter: fix symlink order

The extra symlink setup in src_install would produce something like:

    libmilter.so -> libmilter.so.1.0.2
    libmilter.so.1.0.2_p2 -> libmilter.so.1.0.2

but from reading ldconfig(8) it reads as if the links should go from
least specific to most specific versions, so in a chain like this:

    libmilter.so -> libmilter.so.1.0.2 -> libmilter.so.1.0.2_p2

Swapping the shared object and symlink fixes the referenced bugs.

Closes: https://bugs.gentoo.org/863455
Closes: https://bugs.gentoo.org/863407
Closes: https://bugs.gentoo.org/862642
Closes: https://bugs.gentoo.org/863578
Closes: https://bugs.gentoo.org/863575
Closes: https://bugs.gentoo.org/863572
Closes: https://bugs.gentoo.org/863581
Closes: https://bugs.gentoo.org/864563
Signed-off-by: Thomas Bracht Laumann Jespersen <t <AT> laumann.xyz>
Closes: https://github.com/gentoo/gentoo/pull/26819
Signed-off-by: Sam James <sam <AT> gentoo.org>

 mail-filter/libmilter/libmilter-1.0.2_p2-r1.ebuild |  94 ++++++++++++++
 mail-filter/libmilter/libmilter-1.0.2_p3-r2.ebuild | 136 +++++++++++++++++++++
 2 files changed, 230 insertions(+)

diff --git a/mail-filter/libmilter/libmilter-1.0.2_p2-r1.ebuild b/mail-filter/libmilter/libmilter-1.0.2_p2-r1.ebuild
new file mode 100644
index 000000000000..2cfbdff9b282
--- /dev/null
+++ b/mail-filter/libmilter/libmilter-1.0.2_p2-r1.ebuild
@@ -0,0 +1,94 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+# Note: please bump this together with mail-mta/sendmail
+
+inherit toolchain-funcs
+
+# 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.
+SENDMAIL_VER=8.17.1
+
+DESCRIPTION="The Sendmail Filter API (Milter)"
+HOMEPAGE="http://www.sendmail.org/"
+SRC_URI="ftp://ftp.sendmail.org/pub/sendmail/sendmail.${SENDMAIL_VER}.tar.gz"
+S="${WORKDIR}/sendmail-${SENDMAIL_VER}"
+
+LICENSE="Sendmail"
+# We increment _pN when a new sendmail tarball comes out
+# We change the actual "main version" (1.0.2 at time of writing) when the version
+# of libmilter included in the tarball changes.
+SLOT="0/$(ver_cut 1-3)"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="ipv6 poll"
+
+RDEPEND="!<mail-mta/sendmail-8.16.1"
+
+# build system patch copied from sendmail ebuild
+PATCHES=(
+	"${FILESDIR}"/sendmail-8.16.1-build-system.patch
+	"${FILESDIR}"/${PN}-sharedlib.patch
+)
+
+src_prepare() {
+	default
+
+	local ENVDEF="-DNETUNIX -DNETINET -DHAS_GETHOSTBYNAME2=1"
+
+	use ipv6 && ENVDEF+=" -DNETINET6"
+	use poll && ENVDEF+=" -DSM_CONF_POLL=1"
+
+	if use elibc_musl; then
+		use ipv6 && 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
+}

diff --git a/mail-filter/libmilter/libmilter-1.0.2_p3-r2.ebuild b/mail-filter/libmilter/libmilter-1.0.2_p3-r2.ebuild
new file mode 100644
index 000000000000..52860f138132
--- /dev/null
+++ b/mail-filter/libmilter/libmilter-1.0.2_p3-r2.ebuild
@@ -0,0 +1,136 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Note: please bump this together with mail-mta/sendmail
+
+inherit toolchain-funcs
+
+# 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.17.1.9
+
+DESCRIPTION="The Sendmail Filter API (Milter)"
+HOMEPAGE="https://www.sendmail.org/"
+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
+		ftp://ftp.sendmail.org/pub/sendmail/snapshots/sendmail.${SENDMAIL_VER}.tar.gz"
+else
+	SRC_URI="https://ftp.sendmail.org/sendmail.${SENDMAIL_VER}.tar.gz
+		ftp://ftp.sendmail.org/pub/sendmail/sendmail.${SENDMAIL_VER}.tar.gz"
+fi
+
+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 ~ia64 ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="ipv6 poll"
+
+RDEPEND="!<mail-mta/sendmail-8.16.1"
+
+# build system patch copied from sendmail ebuild
+PATCHES=(
+	"${FILESDIR}"/sendmail-8.16.1-build-system.patch
+	"${FILESDIR}"/${PN}-sharedlib.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 -DHAS_GETHOSTBYNAME2=1"
+
+	use ipv6 && ENVDEF+=" -DNETINET6"
+	use poll && ENVDEF+=" -DSM_CONF_POLL=1"
+
+	if use elibc_musl; then
+		use ipv6 && 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
+}