commit:     e84672d896fcfa3b79dee31137843043a2af4e4e
Author:     Nicolas PARLANT <nicolas.parlant <AT> parhuet <DOT> fr>
AuthorDate: Wed Feb 11 10:50:01 2026 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon Feb 16 00:22:28 2026 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=e84672d8

net-mail/notmuch: add 0.40

upstream deprecated <emacs-27.1
make python optional

force gpg[reference] because freepg can't pass tests

rm gen_cond_dep for cffi because pypy is dropped
use gen_any_dep for sphinx and add dev-python/roman-numerals

test :
move deps for test in bdeps
make gdb optional
set CC/CFLAGS from env
use NOTMUCH_SKIP_TESTS to skip tests
unfilter T315-emacs, not reproduced in many env

Closes: https://bugs.gentoo.org/965637
Signed-off-by: Nicolas PARLANT <nicolas.parlant <AT> parhuet.fr>
Part-of: https://github.com/gentoo/gentoo/pull/45776
Signed-off-by: Sam James <sam <AT> gentoo.org>

 net-mail/notmuch/Manifest                          |   1 +
 .../notmuch/files/notmuch-0.40-fix_pointers.patch  |  24 ++
 .../notmuch/files/notmuch-0.40-pkg_config.patch    | 147 +++++++++++
 net-mail/notmuch/notmuch-0.40.ebuild               | 278 +++++++++++++++++++++
 4 files changed, 450 insertions(+)

diff --git a/net-mail/notmuch/Manifest b/net-mail/notmuch/Manifest
index 693d01ac211c..01b99640dfc1 100644
--- a/net-mail/notmuch/Manifest
+++ b/net-mail/notmuch/Manifest
@@ -1,2 +1,3 @@
 DIST database-v1.tar.xz 204876 BLAKE2B 
846a8d2f17edb61ed1c3d3c655becd1f60b4046772058706f13d516f65421a5105593660f1c556907bb2bb9607a3c2521243d1be07bffb70817ad3b8461680ca
 SHA512 
e2d87373e00b65756d7fea40c54fb236d7a37ce839145c3afd99ab26efdc17796e540c021e2c24e521df2d0a01ccbf918994f87a0d83235ff9b109a51555b3d0
 DIST notmuch-0.39.tar.xz 811448 BLAKE2B 
5d9a6fb28f17c45a8310f83c3ae70e63a5263b85565cfebae96f3054cb0b682164fced83d31176a6287cf9e18570dbeb114f50bc2cd4c0db41e744b8d7d1d15d
 SHA512 
a9864a6a8423c723d36df269dcc73c2987be63c6e328b818235d0604cb594e0e91ee7639ee99a4b867be4387a605abc187a3b458aa7b0e4fc3a1744c0c2daa69
+DIST notmuch-0.40.tar.xz 815476 BLAKE2B 
298fd9ed9768441b372d8c9697d72f183dda71cbd5e2dfdadac31fc9df0d5a4be7b4916e4dedbf57227c2fc7d855c1e1743d240d24de1c5734396ed386aa8187
 SHA512 
937c72c05b00520cc3dbc7db6282ad65a621c8e102fbcbac3c9d99061ae510741b13ef9cf5c6476ba8e7fa15a6905631159477a938d1369db6d9885780b90867

diff --git a/net-mail/notmuch/files/notmuch-0.40-fix_pointers.patch 
b/net-mail/notmuch/files/notmuch-0.40-fix_pointers.patch
new file mode 100644
index 000000000000..e522e5eb1130
--- /dev/null
+++ b/net-mail/notmuch/files/notmuch-0.40-fix_pointers.patch
@@ -0,0 +1,24 @@
+fix incompatible pointers (glibc-2.43 / musl)
+sent to ML
+--- a/notmuch-insert.c
++++ b/notmuch-insert.c
+@@ -115,7 +115,7 @@ mkdir_recursive (const void *ctx, const char *path, int 
mode)
+ {
+     struct stat st;
+     int r;
+-    char *parent = NULL, *slash;
++    const char *parent = NULL, *slash;
+ 
+     /* First check the common case: directory already exists. */
+     r = stat (path, &st);
+--- a/test/T560-lib-error.sh
++++ b/test/T560-lib-error.sh
+@@ -183,7 +183,7 @@ int main (int argc, char** argv)
+    }
+    stat = notmuch_database_index_file (db, "./nonexistent", NULL, NULL);
+    if (stat) {
+-       char *status_string = notmuch_database_status_string (db);
++       const char *status_string = notmuch_database_status_string (db);
+        if (status_string) fputs (status_string, stderr);
+    }
+ }

diff --git a/net-mail/notmuch/files/notmuch-0.40-pkg_config.patch 
b/net-mail/notmuch/files/notmuch-0.40-pkg_config.patch
new file mode 100644
index 000000000000..b58e0e3be965
--- /dev/null
+++ b/net-mail/notmuch/files/notmuch-0.40-pkg_config.patch
@@ -0,0 +1,147 @@
+https://git.notmuchmail.org/git?p=notmuch;a=commit;h=2ddff9923e09e379bce30cdb0f620b56fa7cea5e
+use PKG_CONFIG from env
+--- a/configure
++++ b/configure
+@@ -95,6 +95,7 @@ CPPFLAGS=${CPPFLAGS:-}
+ CXXFLAGS_for_sh=${CXXFLAGS:-${CFLAGS}}
+ CXXFLAGS=${CXXFLAGS:-\$(CFLAGS)}
+ LDFLAGS=${LDFLAGS:-}
++PKG_CONFIG=${PKG_CONFIG:-pkg-config}
+ XAPIAN_CONFIG=${XAPIAN_CONFIG:-}
+ PYTHON=${PYTHON:-}
+ RUBY=${RUBY:-ruby}
+@@ -463,7 +464,7 @@ EOF
+     exit 1
+ fi
+ 
+-if pkg-config --version > /dev/null 2>&1; then
++if ${PKG_CONFIG} --version > /dev/null 2>&1; then
+     have_pkg_config=1
+ else
+     have_pkg_config=0
+@@ -496,11 +497,11 @@ fi
+ GMIME_MINVER=3.0.3
+ 
+ printf "Checking for GMime development files (>= $GMIME_MINVER)... "
+-if pkg-config --exists "gmime-3.0 >= $GMIME_MINVER"; then
++if ${PKG_CONFIG} --exists "gmime-3.0 >= $GMIME_MINVER"; then
+     printf "Yes.\n"
+     have_gmime=1
+-    gmime_cflags=$(pkg-config --cflags gmime-3.0)
+-    gmime_ldflags=$(pkg-config --libs gmime-3.0)
++    gmime_cflags=$(${PKG_CONFIG} --cflags gmime-3.0)
++    gmime_ldflags=$(${PKG_CONFIG} --libs gmime-3.0)
+ 
+     printf "Checking for GMime session key extraction support... "
+ 
+@@ -553,7 +554,7 @@ version of GPGME.
+ Please try to rebuild your version of GMime against a more recent
+ version of GPGME (at least GPGME 1.8.0).
+ EOF
+-      if GPGME_VERS="$(pkg-config --modversion gpgme || gpgme-config 
--version)"; then
++      if GPGME_VERS="$(${PKG_CONFIG} --modversion gpgme || gpgme-config 
--version)"; then
+           printf 'Your current GPGME development version is: %s\n' 
"$GPGME_VERS"
+       else
+           printf 'You do not have the GPGME development libraries 
installed.\n'
+@@ -627,7 +628,7 @@ EOF
+       else
+           gmime_x509_cert_validity=0
+           printf "No.\n"
+-          if pkg-config --exists "gmime-3.0 >= 3.2.7"; then
++          if ${PKG_CONFIG} --exists "gmime-3.0 >= 3.2.7"; then
+               cat <<EOF
+ *** Error: GMime fails to calculate X.509 certificate validity, and
+ is later than 3.2.7, which should have fixed this issue.
+@@ -736,7 +737,7 @@ fi
+ # function that only exists as of 2.22, (g_array_unref)
+ printf "Checking for Glib development files (>= 2.22)... "
+ have_glib=0
+-if pkg-config --exists 'glib-2.0 >= 2.22'; then
++if ${PKG_CONFIG} --exists 'glib-2.0 >= 2.22'; then
+     printf "Yes.\n"
+     have_glib=1
+     # these are included in gmime cflags and ldflags
+@@ -747,7 +748,7 @@ else
+     errors=$((errors + 1))
+ fi
+ 
+-if ! pkg-config --exists zlib; then
++if ! ${PKG_CONFIG} --exists zlib; then
+   ${CC} -o compat/gen_zlib_pc "$srcdir"/compat/gen_zlib_pc.c >/dev/null 2>&1 
&&
+   compat/gen_zlib_pc > compat/zlib.pc &&
+   PKG_CONFIG_PATH=${PKG_CONFIG_PATH:+$PKG_CONFIG_PATH:}compat &&
+@@ -757,22 +758,22 @@ fi
+ 
+ printf "Checking for zlib (>= 1.2.5.2)... "
+ have_zlib=0
+-if pkg-config --atleast-version=1.2.5.2 zlib; then
++if ${PKG_CONFIG} --atleast-version=1.2.5.2 zlib; then
+     printf "Yes.\n"
+     have_zlib=1
+-    zlib_cflags=$(pkg-config --cflags zlib)
+-    zlib_ldflags=$(pkg-config --libs zlib)
++    zlib_cflags=$(${PKG_CONFIG} --cflags zlib)
++    zlib_ldflags=$(${PKG_CONFIG} --libs zlib)
+ else
+     printf "No.\n"
+     errors=$((errors + 1))
+ fi
+ 
+ printf "Checking for talloc development files... "
+-if pkg-config --exists talloc; then
++if ${PKG_CONFIG} --exists talloc; then
+     printf "Yes.\n"
+     have_talloc=1
+-    talloc_cflags=$(pkg-config --cflags talloc)
+-    talloc_ldflags=$(pkg-config --libs talloc)
++    talloc_cflags=$(${PKG_CONFIG} --cflags talloc)
++    talloc_ldflags=$(${PKG_CONFIG} --libs talloc)
+ else
+     printf "No.\n"
+     have_talloc=0
+@@ -837,7 +838,7 @@ if [ $have_python3 -eq 1 ]; then
+     printf "(%s)\n" $python3_version
+ 
+     printf "Checking for python $python3_version development files..."
+-    if pkg-config --exists "python-$python3_version"; then
++    if ${PKG_CONFIG} --exists "python-$python3_version"; then
+       have_python3_dev=1
+       printf "Yes.\n"
+     else
+@@ -873,10 +874,10 @@ if [ $have_python3_dev -eq 1 ]; then
+ fi
+ 
+ printf "Checking for valgrind development files... "
+-if pkg-config --exists valgrind; then
++if ${PKG_CONFIG} --exists valgrind; then
+     printf "Yes.\n"
+     have_valgrind=1
+-    valgrind_cflags=$(pkg-config --cflags valgrind)
++    valgrind_cflags=$(${PKG_CONFIG} --cflags valgrind)
+ else
+     printf "No (but that's fine).\n"
+     have_valgrind=0
+@@ -884,7 +885,7 @@ else
+ fi
+ 
+ printf "Checking for bash-completion (>= 1.90)... "
+-if pkg-config --atleast-version=1.90 bash-completion; then
++if ${PKG_CONFIG} --atleast-version=1.90 bash-completion; then
+     printf "Yes.\n"
+ else
+     printf "No (will not install bash completion).\n"
+@@ -892,11 +893,11 @@ else
+ fi
+ 
+ printf "Checking for sfsexp... "
+-if pkg-config --exists sfsexp; then
++if ${PKG_CONFIG} --exists sfsexp; then
+     printf "Yes.\n"
+     have_sfsexp=1
+-    sfsexp_cflags=$(pkg-config --cflags sfsexp)
+-    sfsexp_ldflags=$(pkg-config --libs sfsexp)
++    sfsexp_cflags=$(${PKG_CONFIG} --cflags sfsexp)
++    sfsexp_ldflags=$(${PKG_CONFIG} --libs sfsexp)
+ else
+     printf "No (will not enable s-expression queries).\n"
+     have_sfsexp=0

diff --git a/net-mail/notmuch/notmuch-0.40.ebuild 
b/net-mail/notmuch/notmuch-0.40.ebuild
new file mode 100644
index 000000000000..f7a73e80f994
--- /dev/null
+++ b/net-mail/notmuch/notmuch-0.40.ebuild
@@ -0,0 +1,278 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_OPTIONAL=1
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{12..14} )
+NEED_EMACS=27.1
+
+inherit bash-completion-r1 desktop distutils-r1 elisp-common flag-o-matic 
pax-utils toolchain-funcs xdg-utils
+
+DESCRIPTION="Thread-based e-mail indexer, supporting quick search and tagging"
+HOMEPAGE="https://notmuchmail.org/";
+SRC_URI="
+       https://notmuchmail.org/releases/${P}.tar.xz
+       test? ( 
https://notmuchmail.org/releases/test-databases/database-v1.tar.xz )
+"
+
+LICENSE="GPL-3"
+# Sub-slot corresponds to major wersion of libnotmuch.so.X.Y. Bump of Y is
+# meant to be binary backward compatible.
+SLOT="0/5"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~ppc64 ~riscv ~x86 ~x64-macos"
+IUSE="apidoc emacs mutt nmbug python test"
+REQUIRED_USE="
+       python? ( ${PYTHON_REQUIRED_USE} )
+       nmbug? ( python )
+       test? ( emacs python )
+"
+RESTRICT="!test? ( test )"
+
+BDEPEND="
+       app-arch/xz-utils[extra-filters(+)]
+       sys-apps/texinfo
+       virtual/pkgconfig
+       $(python_gen_any_dep '
+               dev-python/roman-numerals[${PYTHON_USEDEP}]
+               dev-python/sphinx[${PYTHON_USEDEP}]
+       ')
+       apidoc? (
+               app-text/doxygen
+               dev-lang/perl
+       )
+       python? (
+               ${PYTHON_DEPS}
+               ${DISTUTILS_DEPS}
+               test? ( dev-python/pytest[${PYTHON_USEDEP}] )
+       )
+       test? (
+               app-misc/dtach
+               app-shells/bash
+               dev-libs/openssl
+               sys-process/parallel
+               debug? ( dev-debug/gdb[python] )
+               emacs? ( >=app-editors/emacs-${NEED_EMACS}:*[libxml2] )
+       )
+"
+DEPEND="
+       || (
+               app-alternatives/gpg[reference]
+               app-alternatives/gpg[freepg(-)]
+       )
+       dev-libs/glib:2
+       >=dev-libs/gmime-3.2.7:3.0[crypt]
+       >=dev-libs/xapian-1.4.0:=
+       sys-libs/talloc
+       virtual/zlib:=
+       emacs? ( >=app-editors/emacs-${NEED_EMACS}:* )
+       python? (
+               ${PYTHON_DEPS}
+               dev-python/cffi[${PYTHON_USEDEP}]
+       )
+"
+RDEPEND="
+       ${DEPEND}
+       mutt? (
+               dev-perl/File-Which
+               dev-perl/Mail-Box
+               dev-perl/MailTools
+               dev-perl/Term-ReadLine-Gnu
+               virtual/perl-Digest-SHA
+               virtual/perl-File-Path
+               virtual/perl-Getopt-Long
+               dev-perl/Pod-Parser
+       )
+       nmbug? ( dev-vcs/git )
+"
+
+SITEFILE="50${PN}-gentoo.el"
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-0.39-no-compress-man-pages.patch
+       # sent to ML
+       "${FILESDIR}"/${PN}-0.40-fix_pointers.patch
+       # applied in master
+       "${FILESDIR}"/${P}-pkg_config.patch
+)
+
+python_check_deps() {
+       python_has_version "dev-python/roman-numerals[${PYTHON_USEDEP}]" &&
+       python_has_version "dev-python/sphinx[${PYTHON_USEDEP}]"
+}
+
+pkg_setup() {
+       use emacs && elisp-check-emacs-version
+       # always called for sphinx
+       python_setup
+}
+
+src_unpack() {
+       unpack "${P}".tar.xz
+
+       if use test; then
+               mkdir -p "${S}"/test/test-databases || die
+               cp "${DISTDIR}"/database-v1.tar.xz "${S}"/test/test-databases/ 
|| die
+       fi
+}
+
+src_prepare() {
+       default
+
+       use python && distutils-r1_src_prepare
+
+       rm bindings/python-cffi/tox.ini || die
+       mv contrib/notmuch-mutt/README contrib/notmuch-mutt/README-mutt || die
+
+       # Non-autoconf configure
+       [[ ${CHOST} == *-solaris* ]] && append-ldflags '-lnsl' '-lsocket'
+}
+
+src_configure() {
+       tc-export CC CXX PKG_CONFIG
+
+       local myconf=(
+               --bashcompletiondir="$(get_bashcompdir)"
+               --emacslispdir="${EPREFIX}/${SITELISP}/${PN}"
+               --emacsetcdir="${EPREFIX}/${SITEETC}/${PN}"
+               --without-desktop
+               --without-ruby
+               --with-docs # man pages, info pages
+               --zshcompletiondir="${EPREFIX}/usr/share/zsh/site-functions"
+               $(use_with apidoc api-docs)
+               $(use_with emacs)
+       )
+
+       # FIXME:
+       # Checking for GMime session key extraction support... * ACCESS DENIED: 
open_wr: /dev/bus/usb/001/011
+       # notmuch configure compiles a program _check_session_keys.c, inline in 
./configure script
+       # gmime/gpg/scdaemon tries to open usb devices in GMime test
+       # we pretend to allow it, without actually allowing it to read or write.
+       # https://bugs.gentoo.org/821328
+       addpredict /dev/bus/usb
+
+       econf "${myconf[@]}"
+}
+
+python_compile() {
+       pushd bindings/python-cffi > /dev/null || die
+       distutils-r1_python_compile
+       popd > /dev/null || die
+}
+
+src_compile() {
+       emake V=1
+       use python && distutils-r1_src_compile
+       use mutt && emake -C contrib/notmuch-mutt notmuch-mutt.1
+}
+
+python_test() {
+       pushd bindings/python-cffi > /dev/null || die
+       rm -rf notmuch2 || die
+       epytest tests
+       local ret=${?}
+       popd > /dev/null || die
+       return ${ret}
+}
+
+src_test() {
+       local skip_tests=(
+               # 953833, skip test for debugging symbols
+               T000-basic.12
+               # line wrapping in the output
+               T310-emacs.61
+               # make gdb optional
+               $(usev !debug T380-atomicity)
+               # We run pytest via eclass phasefunc, so delete upstream 
launcher
+               T391-python-cffi
+               # disabled
+               T395-ruby
+       )
+       local mytestargs=(
+               TEST_CC="${CC}"
+               TEST_CFLAGS="${CFLAGS}"
+               V=1
+               OPTIONS="--verbose --tee"
+               NOTMUCH_SKIP_TESTS="${skip_tests[*]}"
+       )
+       local test_failures=()
+       local -x LD_LIBRARY_PATH="${S}/lib"
+       pax-mark -m notmuch
+       nonfatal emake test "${mytestargs[@]}" || test_failures+=( "'emake 
tests'" )
+       pax-mark -ze notmuch
+
+       # Both lib and bin needed for testsuite
+       if use python; then
+               PATH="${S}:${PATH}" nonfatal distutils-r1_src_test || 
test_failures+=( "'python tests'" )
+       fi
+
+       [[ ${test_failures} ]] && die "Tests failed: ${test_failures[*]}"
+}
+
+python_install() {
+       pushd bindings/python-cffi > /dev/null || die
+       distutils-r1_python_install
+       popd > /dev/null || die
+}
+
+src_install() {
+       default
+
+       use python && distutils-r1_src_install
+
+       if use apidoc; then
+               # Rename overly generic manpage to avoid clashes
+               mv doc/_build/man/man3/{,notmuch-}deprecated.3 || die
+       fi
+
+       if use emacs; then
+               elisp-site-file-install "${FILESDIR}/${SITEFILE}" || die
+               domenu emacs/notmuch-emacs-mua.desktop
+       fi
+
+       if use nmbug; then
+               # TODO: those guys need proper deps
+               python_fix_shebang devel/nmbug/notmuch-report
+               dobin devel/nmbug/notmuch-report
+       fi
+
+       if use mutt; then
+               pushd contrib/notmuch-mutt > /dev/null || die
+               dobin notmuch-mutt
+               # This manpage is built by pod2man
+               doman notmuch-mutt.1
+               insinto /etc/mutt
+               doins notmuch-mutt.rc
+               dodoc README-mutt
+               popd > /dev/null || die
+       fi
+
+       local DOCS=( README{,.rst} INSTALL NEWS )
+       einstalldocs
+}
+
+pkg_preinst() {
+       local _rcfile="/etc/mutt/notmuch-mutt.rc"
+       if use mutt && ! [[ -e "${EROOT}"${_rcfile} ]]; then
+               elog "To enable notmuch support in mutt, add the following line"
+               elog "to your mutt config file:"
+               elog ""
+               elog "  source ${_rcfile}"
+       fi
+}
+
+pkg_postinst() {
+       if use emacs; then
+               elisp-site-regen
+               xdg_desktop_database_update
+       fi
+}
+
+pkg_postrm() {
+       if use emacs; then
+               elisp-site-regen
+               xdg_desktop_database_update
+       fi
+}

Reply via email to