summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app-crypt/gpgme')
-rw-r--r--app-crypt/gpgme/Manifest6
-rw-r--r--app-crypt/gpgme/files/gpgme-1.16.0-fix-t-edit-sign-test.patch120
-rw-r--r--app-crypt/gpgme/files/gpgme-1.16.0-glibc-2.34.patch33
-rw-r--r--app-crypt/gpgme/files/gpgme-1.18.0-tests-start-stop-agent-use-command-v.patch27
-rw-r--r--app-crypt/gpgme/files/gpgme-1.23.1-tests-gnupg-no-tofu.patch26
-rw-r--r--app-crypt/gpgme/gpgme-1.16.0.ebuild119
-rw-r--r--app-crypt/gpgme/gpgme-1.17.1.ebuild124
-rw-r--r--app-crypt/gpgme/gpgme-1.23.2.ebuild227
8 files changed, 282 insertions, 400 deletions
diff --git a/app-crypt/gpgme/Manifest b/app-crypt/gpgme/Manifest
index 1b3f13117b3a..dc87e8b9a1dc 100644
--- a/app-crypt/gpgme/Manifest
+++ b/app-crypt/gpgme/Manifest
@@ -1,4 +1,2 @@
-DIST gpgme-1.16.0.tar.bz2 1718913 BLAKE2B da55e695b148e949a1c0770d0298d7a8c9f87d7a1f9e45d380f8c13c472bd44cb4266adb9a113e2b1dcc2596291744f48fdf998ff2de876059d89d184dc87f3a SHA512 69487be69612e9bf0221ff56ae687248bd13635db1b7087130e93c1670e38f3c810bbca17723555c04fe207976c35871bbc3da005179ce099504321cf33636e4
-DIST gpgme-1.16.0.tar.bz2.sig 119 BLAKE2B abf363142f67a005d1a4c13c2d3d944d0fd449e2297ad5a853fc145e106757e639b5bf5c23de6475055578633e12d8dc7d11ebb689ee6c74283c7cfe28058e65 SHA512 0c230b55bb0b24af85cd6df9e6be6ef8245d29af0fb8348fe044979ab75250987fafbd709d1898852a23df99fb16dd61b0b2bc6a821ed1c1b9aadd86182e5b9a
-DIST gpgme-1.17.1.tar.bz2 1747692 BLAKE2B 44cf9309cbad038f23aa7c5c77fd85be23faf3d8e1eb7abdb87a737ad1ade1ee269a95ce618dba327bbd06e6f4b2a91e2446744ee08f09ea6fb3b2dad44431c5 SHA512 e6399c3de1e430e38f2692bf5ec0c02ecb36ea3dbb56ff29dc3a438a5be4900a77a0559dc5b673dc1ffbff5e7f589e548e19176b2644fe8f63e00c6b9181b920
-DIST gpgme-1.17.1.tar.bz2.sig 119 BLAKE2B 31832424c0e029dc520d3302a71b086d9fcb044c74344cc0fb4b6c6a02d0dd840e62e7eb60acfaf004e6f3650d58436b58e645ef2a50b948ecaf3ca162bf577a SHA512 e1a4213d0d39f2efd0d5c007a0449c76bd650e76e002a9acb673eef0579912db06d844df11a4f7cb821e1d8468d2d6c1303f1c5d915a5c3c9cb5abacfbd004fc
+DIST gpgme-1.23.2.tar.bz2 1836904 BLAKE2B 563e470e861c7cc64ecb3e8dd0a0ed8436bc0867105093abcec09f4d1e1dd95cbf64c8161cf8500b9842583b57f6583efff63e5111234e36fda1e6fbedce2f78 SHA512 6cfcd07e81a93de240582de5a46545420cee93d1f27fe20ea2c983780fdd3036b69fdba073cf549d68a20791e189bf4b3cdde14a43f912d2ab9ef3414c83ac75
+DIST gpgme-1.23.2.tar.bz2.sig 238 BLAKE2B fafba6e2f1f34c53fa3f7e05953298132f7b046048660b9f2df5bc11ccb9694b581117ca78883a8f4ca9af060397a39f3132a3711be1cd28183b7c2f8f93a8b7 SHA512 65b7cdd4ce06bb0b15b13033d226423380338efdcb47ffc3f33780a92973453053f8f59b12a3f37e392e773bdd207a7420c25aa3a210c15eec45b7bfef6e891e
diff --git a/app-crypt/gpgme/files/gpgme-1.16.0-fix-t-edit-sign-test.patch b/app-crypt/gpgme/files/gpgme-1.16.0-fix-t-edit-sign-test.patch
deleted file mode 100644
index 6a5a7c0707c4..000000000000
--- a/app-crypt/gpgme/files/gpgme-1.16.0-fix-t-edit-sign-test.patch
+++ /dev/null
@@ -1,120 +0,0 @@
-https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gpgme.git;a=commitdiff;h=81a33ea5e1b86d586b956e893a5b25c4cd41c969;hp=e8e055e682f8994d62012574e1c8d862ca72a35d
-https://dev.gnupg.org/T5509
-https://bugs.gentoo.org/827898
-
-From: =?utf8?q?Ingo=20Kl=C3=B6cker?= <dev@ingo-kloecker.de>
-Date: Sat, 26 Jun 2021 18:02:47 +0200
-Subject: [PATCH 1/1] core: Fix use-after-free issue in test
-
-* tests/gpg/t-edit-sign.c (sign_key, verify_key_signature): New.
-(main): Factored out signing and verifying the result.
---
-
-Factoring the two steps of the test into different functions fixes the
-use-after-free issue that was caused by accidentaly using a variable
-of the first step in the second step.
-
-GnuPG-bug-id: 5509
---- a/tests/gpg/t-edit-sign.c
-+++ b/tests/gpg/t-edit-sign.c
-@@ -107,31 +107,19 @@ interact_fnc (void *opaque, const char *status, const char *args, int fd)
- }
-
-
--int
--main (int argc, char **argv)
-+void
-+sign_key (const char *key_fpr, const char *signer_fpr)
- {
- gpgme_ctx_t ctx;
- gpgme_error_t err;
- gpgme_data_t out = NULL;
-- const char *signer_fpr = "A0FF4590BB6122EDEF6E3C542D727CC768697734"; /* Alpha Test */
- gpgme_key_t signing_key = NULL;
-- const char *key_fpr = "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2"; /* Bravo Test */
- gpgme_key_t key = NULL;
-- gpgme_key_t signed_key = NULL;
-- gpgme_user_id_t signed_uid = NULL;
-- gpgme_key_sig_t key_sig = NULL;
- char *agent_info;
-- int mode;
--
-- (void)argc;
-- (void)argv;
--
-- init_gpgme (GPGME_PROTOCOL_OpenPGP);
-
- err = gpgme_new (&ctx);
- fail_if_err (err);
-
-- /* Sign the key */
- agent_info = getenv("GPG_AGENT_INFO");
- if (!(agent_info && strchr (agent_info, ':')))
- gpgme_set_passphrase_cb (ctx, passphrase_cb, 0);
-@@ -159,8 +147,23 @@ main (int argc, char **argv)
- gpgme_data_release (out);
- gpgme_key_unref (key);
- gpgme_key_unref (signing_key);
-+ gpgme_release (ctx);
-+}
-+
-+
-+void
-+verify_key_signature (const char *key_fpr, const char *signer_keyid)
-+{
-+ gpgme_ctx_t ctx;
-+ gpgme_error_t err;
-+ gpgme_key_t signed_key = NULL;
-+ gpgme_user_id_t signed_uid = NULL;
-+ gpgme_key_sig_t key_sig = NULL;
-+ int mode;
-+
-+ err = gpgme_new (&ctx);
-+ fail_if_err (err);
-
-- /* Verify the key signature */
- mode = gpgme_get_keylist_mode (ctx);
- mode |= GPGME_KEYLIST_MODE_SIGS;
- err = gpgme_set_keylist_mode (ctx, mode);
-@@ -168,7 +171,7 @@ main (int argc, char **argv)
- err = gpgme_get_key (ctx, key_fpr, &signed_key, 0);
- fail_if_err (err);
-
-- signed_uid = key->uids;
-+ signed_uid = signed_key->uids;
- if (!signed_uid)
- {
- fprintf (stderr, "Signed key has no user IDs\n");
-@@ -180,7 +183,7 @@ main (int argc, char **argv)
- exit (1);
- }
- key_sig = signed_uid->signatures->next;
-- if (strcmp ("2D727CC768697734", key_sig->keyid))
-+ if (strcmp (signer_keyid, key_sig->keyid))
- {
- fprintf (stderr, "Unexpected key ID in second user ID sig: %s\n",
- key_sig->keyid);
-@@ -196,6 +199,23 @@ main (int argc, char **argv)
-
- gpgme_key_unref (signed_key);
- gpgme_release (ctx);
-+}
-+
-+
-+int
-+main (int argc, char **argv)
-+{
-+ const char *signer_fpr = "A0FF4590BB6122EDEF6E3C542D727CC768697734"; /* Alpha Test */
-+ const char *signer_keyid = signer_fpr + strlen(signer_fpr) - 16;
-+ const char *key_fpr = "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2"; /* Bravo Test */
-+
-+ (void)argc;
-+ (void)argv;
-+
-+ init_gpgme (GPGME_PROTOCOL_OpenPGP);
-+
-+ sign_key (key_fpr, signer_fpr);
-+ verify_key_signature (key_fpr, signer_keyid);
-
- return 0;
- }
diff --git a/app-crypt/gpgme/files/gpgme-1.16.0-glibc-2.34.patch b/app-crypt/gpgme/files/gpgme-1.16.0-glibc-2.34.patch
deleted file mode 100644
index f328e4540ae3..000000000000
--- a/app-crypt/gpgme/files/gpgme-1.16.0-glibc-2.34.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-https://bugs.gentoo.org/803557
-https://dev.gnupg.org/T5587
-
-From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-Date: Sun, 5 Sep 2021 00:05:00 +0200
-Subject: [PATCH] src/posix-io.c: fix build with glibc >= 2.34
-
-Fix the following build failure with glibc >= 2.34 raised because
-closefrom doesn't return an int but a void since its addition with
-https://github.com/bminor/glibc/commit/607449506f197cc9514408908f41f22537a47a8c
-
-```
-posix-io.c: In function '_gpgme_io_spawn':
-posix-io.c:577:23: error: void value not ignored as it ought to be
- 577 | while ((i = closefrom (fd)) && errno == EINTR)
- | ^
-```
-
-Fixes:
- - http://autobuild.buildroot.org/results/b11094ddd35263071b7dd453a6590c5b684026ff
-
-Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
---- a/src/posix-io.c
-+++ b/src/posix-io.c
-@@ -570,7 +570,7 @@ _gpgme_io_spawn (const char *path, char *const argv[], unsigned int flags,
- if (fd_list[i].fd > fd)
- fd = fd_list[i].fd;
- fd++;
--#if defined(__sun) || defined(__FreeBSD__)
-+#if defined(__sun) || defined(__FreeBSD__) || (defined (__GLIBC__) && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 34)
- closefrom (fd);
- max_fds = fd;
- #else /*!__sun */
diff --git a/app-crypt/gpgme/files/gpgme-1.18.0-tests-start-stop-agent-use-command-v.patch b/app-crypt/gpgme/files/gpgme-1.18.0-tests-start-stop-agent-use-command-v.patch
new file mode 100644
index 000000000000..aeae35f45636
--- /dev/null
+++ b/app-crypt/gpgme/files/gpgme-1.18.0-tests-start-stop-agent-use-command-v.patch
@@ -0,0 +1,27 @@
+Sent upstream to gnupg-devel@ but not yet in archive.
+
+From: Sam James <sam@gentoo.org>
+Date: Mon, 15 Aug 2022 19:29:06 +0100
+Subject: [PATCH] tests/start-stop-agent: use 'command -v' instead of 'which'
+
+`which` is an external command which isn't required by POSIX.
+
+Debian and other distributions (like Gentoo!) are looking
+to drop it from their base set of packages.
+
+Switch to `command -v` which should always work instead.
+
+Note we already use `command -v` at the start of this test anyway.
+
+Signed-off-by: Sam James <sam@gentoo.org>
+--- a/tests/start-stop-agent
++++ b/tests/start-stop-agent
+@@ -15,7 +15,7 @@ fi
+
+ GPG_AGENT_INFO=
+ export GPG_AGENT_INFO
+-GPG_AGENT=$(which gpg-agent)
++GPG_AGENT=$(command -v gpg-agent)
+
+ token=$(echo "gpgme-$(pwd)" | tr ' ' '_')
+
diff --git a/app-crypt/gpgme/files/gpgme-1.23.1-tests-gnupg-no-tofu.patch b/app-crypt/gpgme/files/gpgme-1.23.1-tests-gnupg-no-tofu.patch
new file mode 100644
index 000000000000..831f68c8ea18
--- /dev/null
+++ b/app-crypt/gpgme/files/gpgme-1.23.1-tests-gnupg-no-tofu.patch
@@ -0,0 +1,26 @@
+https://dev.gnupg.org/T6778
+--- a/lang/python/tests/support.py
++++ b/lang/python/tests/support.py
+@@ -46,13 +46,15 @@ def is_gpg_version(version):
+
+
+ def have_tofu_support(ctx, some_uid):
+- keys = list(
+- ctx.keylist(
+- some_uid,
+- mode=(gpg.constants.keylist.mode.LOCAL |
+- gpg.constants.keylist.mode.WITH_TOFU)))
+- return len(keys) > 0
+-
++ try:
++ keys = list(
++ ctx.keylist(
++ some_uid,
++ mode=(gpg.constants.keylist.mode.LOCAL |
++ gpg.constants.keylist.mode.WITH_TOFU)))
++ return len(keys) > 0
++ except gpg.errors.GPGMEError:
++ return False
+
+ # Skip the Python tests for GnuPG < 2.1.12. Prior versions do not
+ # understand the command line flags that we assume exist. C.f. issue
diff --git a/app-crypt/gpgme/gpgme-1.16.0.ebuild b/app-crypt/gpgme/gpgme-1.16.0.ebuild
deleted file mode 100644
index 7a84df5e6d29..000000000000
--- a/app-crypt/gpgme/gpgme-1.16.0.ebuild
+++ /dev/null
@@ -1,119 +0,0 @@
-# Copyright 1999-2022 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=7
-
-PYTHON_COMPAT=( python3_{8..10} )
-DISTUTILS_OPTIONAL=1
-VERIFY_SIG_OPENPGP_KEY_PATH="${BROOT}"/usr/share/openpgp-keys/gnupg.asc
-
-inherit distutils-r1 flag-o-matic libtool qmake-utils toolchain-funcs verify-sig
-
-DESCRIPTION="GnuPG Made Easy is a library for making GnuPG easier to use"
-HOMEPAGE="http://www.gnupg.org/related_software/gpgme"
-SRC_URI="mirror://gnupg/gpgme/${P}.tar.bz2
- verify-sig? ( mirror://gnupg/gpgme/${P}.tar.bz2.sig )"
-
-LICENSE="GPL-2 LGPL-2.1"
-SLOT="1/11" # subslot = soname major version
-KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
-IUSE="common-lisp static-libs +cxx python qt5"
-
-# Note: On each bump, update dep bounds on each version from configure.ac!
-RDEPEND=">=app-crypt/gnupg-2
- >=dev-libs/libassuan-2.5.3:=
- >=dev-libs/libgpg-error-1.36:=
- python? ( ${PYTHON_DEPS} )
- qt5? ( dev-qt/qtcore:5 )"
- #doc? ( app-doc/doxygen[dot] )
-DEPEND="${RDEPEND}
- qt5? ( dev-qt/qttest:5 )"
-BDEPEND="python? ( dev-lang/swig )
- verify-sig? ( sec-keys/openpgp-keys-gnupg )"
-
-REQUIRED_USE="qt5? ( cxx ) python? ( ${PYTHON_REQUIRED_USE} )"
-
-PATCHES=(
- "${FILESDIR}"/${P}-glibc-2.34.patch
- "${FILESDIR}"/${P}-fix-t-edit-sign-test.patch
-)
-
-do_python() {
- if use python; then
- pushd "lang/python" > /dev/null || die
- top_builddir="../.." srcdir="." CPP="$(tc-getCPP)" distutils-r1_src_${EBUILD_PHASE}
- popd > /dev/null
- fi
-}
-
-pkg_setup() {
- addpredict /run/user/$(id -u)/gnupg
-
- local MAX_WORKDIR=66
- if [[ "${#WORKDIR}" -gt "${MAX_WORKDIR}" ]]; then
- ewarn "Disabling tests as WORKDIR '${WORKDIR}' is longer than ${MAX_WORKDIR} which will fail tests"
- SKIP_TESTS=1
- fi
-}
-
-src_prepare() {
- default
- elibtoolize
-
- # Make best effort to allow longer PORTAGE_TMPDIR
- # as usock limitation fails build/tests
- ln -s "${P}" "${WORKDIR}/b"
- S="${WORKDIR}/b"
-}
-
-src_configure() {
- local languages=()
- use common-lisp && languages+=( "cl" )
- use cxx && languages+=( "cpp" )
- if use qt5; then
- languages+=( "qt" )
- #use doc ||
- export DOXYGEN=true
- export MOC="$(qt5_get_bindir)/moc"
- fi
-
- econf \
- $([[ -n "${SKIP_TESTS}" ]] && echo "--disable-gpg-test --disable-gpgsm-test") \
- --enable-languages="${languages[*]}" \
- $(use_enable static-libs static)
-
- use python && make -C lang/python prepare
-
- do_python
-}
-
-src_compile() {
- default
- do_python
-}
-
-src_test() {
- [[ -z "${SKIP_TESTS}" ]] || return
-
- default
- if use python; then
- test_python() {
- emake -C lang/python/tests check \
- PYTHON=${EPYTHON} \
- PYTHONS=${EPYTHON} \
- TESTFLAGS="--python-libdir=${BUILD_DIR}/lib"
- }
- python_foreach_impl test_python
- fi
-}
-
-src_install() {
- default
- do_python
- find "${ED}" -type f -name '*.la' -delete || die
-
- # backward compatibility for gentoo
- # in the past we had slots
- dodir /usr/include/gpgme
- dosym ../gpgme.h /usr/include/gpgme/gpgme.h
-}
diff --git a/app-crypt/gpgme/gpgme-1.17.1.ebuild b/app-crypt/gpgme/gpgme-1.17.1.ebuild
deleted file mode 100644
index c70a73811293..000000000000
--- a/app-crypt/gpgme/gpgme-1.17.1.ebuild
+++ /dev/null
@@ -1,124 +0,0 @@
-# Copyright 1999-2022 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-PYTHON_COMPAT=( python3_{8..10} )
-DISTUTILS_OPTIONAL=1
-VERIFY_SIG_OPENPGP_KEY_PATH="${BROOT}"/usr/share/openpgp-keys/gnupg.asc
-
-inherit distutils-r1 libtool qmake-utils toolchain-funcs verify-sig
-
-DESCRIPTION="GnuPG Made Easy is a library for making GnuPG easier to use"
-HOMEPAGE="http://www.gnupg.org/related_software/gpgme"
-SRC_URI="mirror://gnupg/gpgme/${P}.tar.bz2
- verify-sig? ( mirror://gnupg/gpgme/${P}.tar.bz2.sig )"
-
-LICENSE="GPL-2 LGPL-2.1"
-# Please check ABI on each bump, even if SONAMEs didn't change: bug #833355
-# Use e.g. app-portage/iwdevtools integration with dev-libs/libabigail's abidiff.
-# Subslot: SONAME of each: <libgpgme.libgpgmepp.libqgpgme>
-SLOT="1/11.6.15"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
-IUSE="common-lisp static-libs +cxx python qt5 test"
-RESTRICT="!test? ( test )"
-
-# Note: On each bump, update dep bounds on each version from configure.ac!
-RDEPEND=">=app-crypt/gnupg-2
- >=dev-libs/libassuan-2.5.3:=
- >=dev-libs/libgpg-error-1.36:=
- python? ( ${PYTHON_DEPS} )
- qt5? ( dev-qt/qtcore:5 )"
- #doc? ( app-doc/doxygen[dot] )
-DEPEND="${RDEPEND}
- test? (
- qt5? ( dev-qt/qttest:5 )
- )"
-BDEPEND="python? ( dev-lang/swig )
- verify-sig? ( sec-keys/openpgp-keys-gnupg )"
-
-REQUIRED_USE="qt5? ( cxx ) python? ( ${PYTHON_REQUIRED_USE} )"
-
-do_python() {
- if use python; then
- pushd "lang/python" > /dev/null || die
- top_builddir="../.." srcdir="." CPP="$(tc-getCPP)" distutils-r1_src_${EBUILD_PHASE}
- popd > /dev/null || die
- fi
-}
-
-src_prepare() {
- default
-
- elibtoolize
-
- # bug #697456
- addpredict /run/user/$(id -u)/gnupg
-
- local MAX_WORKDIR=66
- if use test && [[ "${#WORKDIR}" -gt "${MAX_WORKDIR}" ]]; then
- eerror "Unable to run tests as WORKDIR='${WORKDIR}' is longer than ${MAX_WORKDIR} which causes failure!"
- die "Could not run tests as requested with too-long WORKDIR."
- fi
-
- # Make best effort to allow longer PORTAGE_TMPDIR
- # as usock limitation fails build/tests
- ln -s "${P}" "${WORKDIR}/b" || die
- S="${WORKDIR}/b"
-}
-
-src_configure() {
- local languages=()
-
- use common-lisp && languages+=( "cl" )
- use cxx && languages+=( "cpp" )
- if use qt5; then
- languages+=( "qt" )
- #use doc ||
- export DOXYGEN=true
- export MOC="$(qt5_get_bindir)/moc"
- fi
-
- # bug #811933 for libassuan prefix
- econf \
- $(use test || echo "--disable-gpgconf-test --disable-gpg-test --disable-gpgsm-test --disable-g13-test") \
- --enable-languages="${languages[*]}" \
- --with-libassuan-prefix="${ESYSROOT}"/usr \
- $(use_enable static-libs static)
-
- use python && emake -C lang/python prepare
-
- do_python
-}
-
-src_compile() {
- default
- do_python
-}
-
-src_test() {
- default
-
- if use python; then
- test_python() {
- emake -C lang/python/tests check \
- PYTHON=${EPYTHON} \
- PYTHONS=${EPYTHON} \
- TESTFLAGS="--python-libdir=${BUILD_DIR}/lib"
- }
- python_foreach_impl test_python
- fi
-}
-
-src_install() {
- default
-
- do_python
-
- find "${ED}" -type f -name '*.la' -delete || die
-
- # Backward compatibility for gentoo
- # (in the past, we had slots)
- dodir /usr/include/gpgme
- dosym ../gpgme.h /usr/include/gpgme/gpgme.h
-}
diff --git a/app-crypt/gpgme/gpgme-1.23.2.ebuild b/app-crypt/gpgme/gpgme-1.23.2.ebuild
new file mode 100644
index 000000000000..933a0672a758
--- /dev/null
+++ b/app-crypt/gpgme/gpgme-1.23.2.ebuild
@@ -0,0 +1,227 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Maintainers should:
+# 1. Join the "Gentoo" project at https://dev.gnupg.org/project/view/27/
+# 2. Subscribe to release tasks like https://dev.gnupg.org/T6159
+# (find the one for the current release then subscribe to it +
+# any subsequent ones linked within so you're covered for a while.)
+
+DISTUTILS_EXT=1
+DISTUTILS_OPTIONAL=1
+PYTHON_COMPAT=( python3_{10..12} )
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/gnupg.asc
+
+# in-source builds are not supported:
+# * https://dev.gnupg.org/T6313#166339
+# * https://dev.gnupg.org/T6673#174545
+inherit distutils-r1 libtool flag-o-matic multibuild qmake-utils toolchain-funcs verify-sig
+
+DESCRIPTION="GnuPG Made Easy is a library for making GnuPG easier to use"
+HOMEPAGE="https://www.gnupg.org/related_software/gpgme"
+SRC_URI="
+ mirror://gnupg/gpgme/${P}.tar.bz2
+ verify-sig? ( mirror://gnupg/gpgme/${P}.tar.bz2.sig )
+"
+
+LICENSE="GPL-2 LGPL-2.1"
+# Please check ABI on each bump, even if SONAMEs didn't change: bug #833355
+# Use e.g. app-portage/iwdevtools integration with dev-libs/libabigail's abidiff.
+# Subslot: SONAME of each: <libgpgme.libgpgmepp.libqgpgme.FUDGE>
+# Bump FUDGE if a release is made which breaks ABI without changing SONAME.
+# (Reset to 0 if FUDGE != 0 if libgpgme/libgpgmepp/libqpggme change.)
+SLOT="1/11.6.15.2"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
+IUSE="common-lisp static-libs +cxx python qt5 qt6 test"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="
+ qt5? ( cxx )
+ qt6? ( cxx )
+ python? ( ${PYTHON_REQUIRED_USE} )
+"
+
+# - On each bump, update dep bounds on each version from configure.ac!
+RDEPEND="
+ >=app-crypt/gnupg-2
+ >=dev-libs/libassuan-2.5.3:=
+ >=dev-libs/libgpg-error-1.46-r1:=
+ python? ( ${PYTHON_DEPS} )
+ qt5? ( dev-qt/qtcore:5 )
+ qt6? ( dev-qt/qtbase:6 )
+"
+DEPEND="
+ ${RDEPEND}
+ test? (
+ qt5? ( dev-qt/qttest:5 )
+ )
+"
+#doc? ( app-text/doxygen[dot] )
+BDEPEND="
+ $(python_gen_cond_dep '
+ dev-python/setuptools[${PYTHON_USEDEP}]
+ ' python3_12)
+ python? ( dev-lang/swig )
+ verify-sig? ( sec-keys/openpgp-keys-gnupg )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-1.18.0-tests-start-stop-agent-use-command-v.patch
+ "${FILESDIR}"/${PN}-1.23.1-tests-gnupg-no-tofu.patch
+)
+
+src_prepare() {
+ default
+
+ elibtoolize
+
+ # bug #697456
+ addpredict /run/user/$(id -u)/gnupg
+
+ local MAX_WORKDIR=66
+ if use test && [[ "${#WORKDIR}" -gt "${MAX_WORKDIR}" ]]; then
+ eerror "Unable to run tests as WORKDIR='${WORKDIR}' is longer than ${MAX_WORKDIR} which causes failure!"
+ die "Could not run tests as requested with too-long WORKDIR."
+ fi
+
+ # Make best effort to allow longer PORTAGE_TMPDIR
+ # as usock limitation fails build/tests
+ ln -s "${P}" "${WORKDIR}/b" || die
+ S="${WORKDIR}/b"
+
+ # Qt 5 and Qt 6 are mutually exclusive in the gpgme build. We don't have
+ # to do three builds (normal, qt5, qt6), and we can instead just
+ # do normal+qt5 or normal+qt6. For now, we pessimise qt6 by making it
+ # be a separate build, but in time, we can swap it so qt5 has to be
+ # the separate one so some build time gets saved in the common case.
+ MULTIBUILD_VARIANTS=(
+ base
+ $(usev qt6 qt6)
+ )
+
+ gpgme_create_builddir() {
+ mkdir -p "${BUILD_DIR}" || die
+ }
+
+ multibuild_foreach_variant gpgme_create_builddir
+}
+
+src_configure() {
+ multibuild_foreach_variant gpgme_src_configure
+}
+
+gpgme_src_configure() {
+ # bug #847955
+ append-lfs-flags
+
+ cd "${BUILD_DIR}" || die
+
+ local languages=()
+
+ case ${MULTIBUILD_VARIANT} in
+ base)
+ languages=(
+ $(usev common-lisp 'cl')
+ $(usev cxx 'cpp')
+ $(usev qt5 'qt5')
+ )
+
+ if use qt5; then
+ #use doc ||
+ export DOXYGEN=true
+ export MOC="$(qt5_get_bindir)/moc"
+ fi
+
+ ;;
+ *)
+ # Sanity check for refactoring, the non-base variant is only for Qt 6
+ use qt6 || die "Non-base variant shouldn't be built without Qt 6! Please report at bugs.gentoo.org."
+
+ languages=(
+ cpp
+ qt6
+ )
+
+ export MOC="$(qt6_get_libdir)/qt6/libexec/moc"
+
+ ;;
+ esac
+
+ local myeconfargs=(
+ $(use test || echo "--disable-gpgconf-test --disable-gpg-test --disable-gpgsm-test --disable-g13-test")
+ --enable-languages="${languages[*]}"
+ $(use_enable static-libs static)
+ )
+
+ ECONF_SOURCE="${S}" econf "${myeconfargs[@]}"
+
+ if [[ ${MULTIBUILD_VARIANT} == base ]] && use python ; then
+ emake -C lang/python prepare
+
+ pushd lang/python > /dev/null || die
+ top_builddir="../.." srcdir="${S}/lang/python" CPP="$(tc-getCPP)" distutils-r1_src_configure
+ popd > /dev/null || die
+ fi
+}
+
+src_compile() {
+ multibuild_foreach_variant gpgme_src_compile
+}
+
+gpgme_src_compile() {
+ cd "${BUILD_DIR}" || die
+
+ emake
+
+ if [[ ${MULTIBUILD_VARIANT} == base ]] && use python ; then
+ pushd lang/python > /dev/null || die
+ top_builddir="../.." srcdir="${S}/lang/python" CPP="$(tc-getCPP)" distutils-r1_src_compile
+ popd > /dev/null || die
+ fi
+}
+
+src_test() {
+ multibuild_foreach_variant gpgme_src_test
+}
+
+gpgme_src_test() {
+ cd "${BUILD_DIR}" || die
+
+ emake check
+
+ if [[ ${MULTIBUILD_VARIANT} == base ]] && use python ; then
+ distutils-r1_src_test
+ fi
+}
+
+python_test() {
+ emake -C lang/python/tests check \
+ PYTHON=${EPYTHON} \
+ PYTHONS=${EPYTHON} \
+ TESTFLAGS="--python-libdir=${BUILD_DIR}/lib"
+}
+
+src_install() {
+ einstalldocs
+ multibuild_foreach_variant gpgme_src_install
+}
+
+gpgme_src_install() {
+ cd "${BUILD_DIR}" || die
+
+ emake DESTDIR="${D}" install
+
+ if [[ ${MULTIBUILD_VARIANT} == base ]] && use python ; then
+ pushd lang/python > /dev/null || die
+ top_builddir="../.." srcdir="${S}/lang/python" CPP="$(tc-getCPP)" distutils-r1_src_install
+ popd > /dev/null || die
+ fi
+
+ find "${ED}" -type f -name '*.la' -delete || die
+
+ # Backward compatibility for gentoo
+ # (in the past, we had slots)
+ dodir /usr/include/gpgme
+ dosym -r /usr/include/gpgme.h /usr/include/gpgme/gpgme.h
+}