diff options
Diffstat (limited to 'app-crypt/gpgme')
-rw-r--r-- | app-crypt/gpgme/Manifest | 6 | ||||
-rw-r--r-- | app-crypt/gpgme/files/gpgme-1.16.0-fix-t-edit-sign-test.patch | 120 | ||||
-rw-r--r-- | app-crypt/gpgme/files/gpgme-1.16.0-glibc-2.34.patch | 33 | ||||
-rw-r--r-- | app-crypt/gpgme/files/gpgme-1.18.0-tests-start-stop-agent-use-command-v.patch | 27 | ||||
-rw-r--r-- | app-crypt/gpgme/files/gpgme-1.23.1-tests-gnupg-no-tofu.patch | 26 | ||||
-rw-r--r-- | app-crypt/gpgme/gpgme-1.16.0.ebuild | 119 | ||||
-rw-r--r-- | app-crypt/gpgme/gpgme-1.17.1.ebuild | 124 | ||||
-rw-r--r-- | app-crypt/gpgme/gpgme-1.23.2.ebuild | 227 |
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 +} |