commit:     3d45966959c715c7f966c51cfdbf717512ce6555
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Mon Jan  5 02:53:22 2026 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon Jan  5 03:09:38 2026 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3d459669

net-libs/ldns: drop 1.8.3-r3, 1.8.4

Signed-off-by: Sam James <sam <AT> gentoo.org>

 net-libs/ldns/Manifest                             |   1 -
 .../ldns/files/ldns-1.8.3-configure-strict.patch   | 139 ---------------------
 net-libs/ldns/files/ldns-1.8.3-docs.patch          |  95 --------------
 net-libs/ldns/files/ldns-1.8.3-swig-4.2.0.patch    | 101 ---------------
 net-libs/ldns/ldns-1.8.3-r3.ebuild                 |  99 ---------------
 net-libs/ldns/ldns-1.8.4.ebuild                    |  89 -------------
 6 files changed, 524 deletions(-)

diff --git a/net-libs/ldns/Manifest b/net-libs/ldns/Manifest
index f0e40820ef79..64862969c2c7 100644
--- a/net-libs/ldns/Manifest
+++ b/net-libs/ldns/Manifest
@@ -1,2 +1 @@
-DIST ldns-1.8.3.tar.gz 1299856 BLAKE2B 
2250445da3beec76c96fbb5cbc00f8d6a5bb6ed5867da7f23511d46ac73d6101303eb6ad85def426b7f9287f6a629a95117bcfa6eb46b775d07ed84048162c7f
 SHA512 
c318747bd975ade389d048680b80495fb083b46507d8dcea7d4d42c75823f56a35b438dcc5320803d39583e5a1e515a51686f7f9010c061a6e8199e1a5505ae9
 DIST ldns-1.8.4.tar.gz 1301058 BLAKE2B 
26003c816c380a58c441f70cb2ea37b7e1402383bc35fbaceae1668af5f591f4cdd04e9ef90655a87ef2ec505a06c1d5c802ed2a80414464ef2e89f4349b995c
 SHA512 
3ee26289bfe587fb19b7441412917d7f7197e385cc1329847c1ae707650709a1ccef7d4a645bd85da89effad95715ec868ef312e5f336d3fe2e408e8109439fc

diff --git a/net-libs/ldns/files/ldns-1.8.3-configure-strict.patch 
b/net-libs/ldns/files/ldns-1.8.3-configure-strict.patch
deleted file mode 100644
index 37b809585a9b..000000000000
--- a/net-libs/ldns/files/ldns-1.8.3-configure-strict.patch
+++ /dev/null
@@ -1,139 +0,0 @@
-https://github.com/NLnetLabs/ldns/commit/59af7359ed744327aaf0deb2e6ac90fe9e191ba6
-
-From 59af7359ed744327aaf0deb2e6ac90fe9e191ba6 Mon Sep 17 00:00:00 2001
-From: Sam James <[email protected]>
-Date: Sat, 19 Nov 2022 01:31:57 +0000
-Subject: [PATCH] acx_nlnetlabs.m4: fix -Wstrict-prototypes
-
-Fix -Wstrict-prototypes as it's easy to do and avoids future warnings. Noticed
-when doing Clang 16 / GCC 14 / C23 work.
-
-For more information, see LWN.net [0] or LLVM's Discourse [1], the Gentoo wiki 
[2],
-or the (new) c-std-porting mailing list [3].
-
-[0] https://lwn.net/Articles/913505/
-[1] 
https://discourse.llvm.org/t/configure-script-breakage-with-the-new-werror-implicit-function-declaration/65213
-[2] https://wiki.gentoo.org/wiki/Modern_C_porting
-[3] hosted at lists.linux.dev.
-
-Signed-off-by: Sam James <[email protected]>
---- a/acx_nlnetlabs.m4
-+++ b/acx_nlnetlabs.m4
-@@ -183,7 +183,7 @@ dnl cache=`echo $1 | sed 'y%.=/+- %___p__%'`
- AC_CACHE_VAL(cv_prog_cc_flag_needed_$cache,
- [
- echo '$2' > conftest.c
--echo 'void f(){}' >>conftest.c
-+echo 'void f(void){}' >>conftest.c
- if test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then
- eval "cv_prog_cc_flag_needed_$cache=no"
- else
-@@ -229,7 +229,7 @@ dnl DEPFLAG: set to flag that generates dependencies.
- AC_DEFUN([ACX_DEPFLAG],
- [
- AC_MSG_CHECKING([$CC dependency flag])
--echo 'void f(){}' >conftest.c
-+echo 'void f(void){}' >conftest.c
- if test "`$CC -MM conftest.c 2>&1`" = "conftest.o: conftest.c"; then
-       DEPFLAG="-MM"
- else 
-@@ -268,7 +268,7 @@ ACX_CHECK_COMPILER_FLAG_NEEDED($C99FLAG -D__EXTENSIONS__ 
-D_BSD_SOURCE -D_DEFAUL
- #include <getopt.h>
- #endif
- 
--int test() {
-+int test(void) {
-       int a;
-       char **opts = NULL;
-       struct timeval tv;
-@@ -305,7 +305,7 @@ ACX_CHECK_COMPILER_FLAG_NEEDED($C99FLAG -D__EXTENSIONS__ 
-D_BSD_SOURCE -D_DEFAUL
- #include <getopt.h>
- #endif
- 
--int test() {
-+int test(void) {
-       int a;
-       char **opts = NULL;
-       struct timeval tv;
-@@ -331,7 +331,7 @@ ACX_CHECK_COMPILER_FLAG_NEEDED($C99FLAG,
- [
- #include <stdbool.h>
- #include <ctype.h>
--int test() {
-+int test(void) {
-         int a = 0;
-         return a;
- }
-@@ -341,7 +341,7 @@ ACX_CHECK_COMPILER_FLAG_NEEDED(-D_BSD_SOURCE 
-D_DEFAULT_SOURCE,
- [
- #include <ctype.h>
- 
--int test() {
-+int test(void) {
-         int a;
-         a = isascii(32);
-         return a;
-@@ -352,7 +352,7 @@ ACX_CHECK_COMPILER_FLAG_NEEDED(-D_GNU_SOURCE,
- [
- #include <netinet/in.h>
- 
--int test() {
-+int test(void) {
-         struct in6_pktinfo inf;
-       int a = (int)sizeof(inf);
-         return a;
-@@ -366,7 +366,7 @@ ACX_CHECK_COMPILER_FLAG_NEEDED(-D_GNU_SOURCE -D_FRSRESGID,
- [
- #include <unistd.h>
- 
--int test() {
-+int test(void) {
-       int a = setresgid(0,0,0);
-       a = setresuid(0,0,0);
-         return a;
-@@ -381,7 +381,7 @@ ACX_CHECK_COMPILER_FLAG_NEEDED(-D_POSIX_C_SOURCE=200112,
- #endif
- #include <netdb.h>
- 
--int test() {
-+int test(void) {
-         int a = 0;
-         char *t;
-         time_t time = 0;
-@@ -409,7 +409,7 @@ ACX_CHECK_COMPILER_FLAG_NEEDED(-D__EXTENSIONS__,
- #include <getopt.h>
- #endif
- 
--int test() {
-+int test(void) {
-         int a;
-         char **opts = NULL;
-         struct timeval tv;
-@@ -809,7 +809,7 @@ dnl try to see if an additional _LARGEFILE_SOURCE 1 is 
needed to get fseeko
- ACX_CHECK_COMPILER_FLAG_NEEDED(-D_LARGEFILE_SOURCE=1,
- [
- #include <stdio.h>
--int test() {
-+int test(void) {
-         int a = fseeko(stdin, 0, 0);
-         return a;
- }
-@@ -834,7 +834,7 @@ char* (*f) () = getaddrinfo;
- #ifdef __cplusplus
- }
- #endif
--int main() {
-+int main(void) {
-         ;
-         return 0;
- }
-@@ -898,7 +898,7 @@ cache=`echo $1 | sed 'y%.=/+-%___p_%'`
- AC_CACHE_VAL(cv_cc_deprecated_$cache,
- [
- echo '$3' >conftest.c
--echo 'void f(){ $2 }' >>conftest.c
-+echo 'void f(void){ $2 }' >>conftest.c
- if test -z "`$CC $CPPFLAGS $CFLAGS -c conftest.c 2>&1 | grep -e deprecated -e 
unavailable`"; then
- eval "cv_cc_deprecated_$cache=no"
- else
-

diff --git a/net-libs/ldns/files/ldns-1.8.3-docs.patch 
b/net-libs/ldns/files/ldns-1.8.3-docs.patch
deleted file mode 100644
index 6b4e7582a441..000000000000
--- a/net-libs/ldns/files/ldns-1.8.3-docs.patch
+++ /dev/null
@@ -1,95 +0,0 @@
-https://bugs.gentoo.org/892065
-https://github.com/NLnetLabs/ldns/commit/5d5c95a947d98dd292ba81e95ca90ba6aeccb1d0
-
-From 5d5c95a947d98dd292ba81e95ca90ba6aeccb1d0 Mon Sep 17 00:00:00 2001
-From: Willem Toorop <[email protected]>
-Date: Mon, 5 Sep 2022 10:01:18 +0200
-Subject: [PATCH] Fix building documentation in build directory.
-
-Thanks Michael Tokarev
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -270,7 +270,7 @@ doxygen:
-       @if test ! -e doc/header.html ; then \
-               $(INSTALL) -c -m 644 $(srcdir)/doc/header.html doc/ ; \
-       fi ;
--      $(doxygen) $(srcdir)/libdns.doxygen
-+      $(doxygen) libdns.doxygen
- 
- doc: manpages $(doxygen)
-       @$(INSTALL) -d doc
---- a/ldns/net.h.in
-+++ b/ldns/net.h.in
-@@ -91,13 +91,12 @@ int ldns_tcp_bgsend(ldns_buffer *qbin, const struct 
sockaddr_storage *to, sockle
- 
- /**
-  * Sends a buffer to an ip using tcp and return the response as a ldns_pkt
-- * \param[in] qbin the ldns_buffer to be send
-+ * \param[out] result packet with the answer
-  * \param[in] qbin the ldns_buffer to be send
-  * \param[in] to the ip addr to send to
-  * \param[in] tolen length of the ip addr
-  * \param[in] timeout the timeout value for the network
-  * \param[out] answersize size of the packet
-- * \param[out] result packet with the answer
-  * \return status
-  */
- ldns_status ldns_tcp_send(uint8_t **result, ldns_buffer *qbin, const struct 
sockaddr_storage *to, socklen_t tolen, struct timeval timeout, size_t 
*answersize);
---- a/libdns.doxygen.in
-+++ b/libdns.doxygen.in
-@@ -51,7 +51,7 @@ PROJECT_BRIEF          =
- # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
- # the logo to the output directory.
- 
--PROJECT_LOGO           = doc/images/LogoInGradientBar2-y100.png
-+PROJECT_LOGO           = @srcdir@/doc/images/LogoInGradientBar2-y100.png
- 
- # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
- # into which the generated documentation will be written. If a relative path 
is
-@@ -854,12 +854,12 @@ WARN_LOGFILE           =
- # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
- # Note: If this tag is empty the current directory is searched.
- 
--INPUT                  = . \
--                         ldns/ \
--                         doc/ \
--                         examples/ldns-mx.c \
--                         examples/ldns-read-zone.c \
--                         examples/ldns-signzone.c
-+INPUT                  = ldns/ \
-+                         @srcdir@/doc/ \
-+                         @srcdir@/examples/ldns-mx.c \
-+                         @srcdir@/examples/ldns-read-zone.c \
-+                         @srcdir@/examples/ldns-signzone.c \
-+                         @srcdir@
- 
- # This tag can be used to specify the character encoding of the source files
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen 
uses
-@@ -936,7 +936,7 @@ EXCLUDE_SYMBOLS        =
- # that contain example code fragments that are included (see the \include
- # command).
- 
--EXAMPLE_PATH           = examples
-+EXAMPLE_PATH           = @srcdir@/examples
- 
- # If the value of the EXAMPLE_PATH tag contains directories, you can use the
- # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
-@@ -956,7 +956,7 @@ EXAMPLE_RECURSIVE      = NO
- # that contain images that are to be included in the documentation (see the
- # \image command).
- 
--IMAGE_PATH             = doc/images
-+IMAGE_PATH             = @srcdir@/doc/images
- 
- # The INPUT_FILTER tag can be used to specify a program that doxygen should
- # invoke to filter for each input file. Doxygen will invoke the filter program
-@@ -1798,7 +1798,7 @@ COMPACT_LATEX          = NO
- # The default value is: a4.
- # This tag requires that the tag GENERATE_LATEX is set to YES.
- 
--PAPER_TYPE             = a4wide
-+PAPER_TYPE             = a4
- 
- # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package 
names
- # that should be included in the LaTeX output. The package can be specified 
just
-

diff --git a/net-libs/ldns/files/ldns-1.8.3-swig-4.2.0.patch 
b/net-libs/ldns/files/ldns-1.8.3-swig-4.2.0.patch
deleted file mode 100644
index 8165371d53bb..000000000000
--- a/net-libs/ldns/files/ldns-1.8.3-swig-4.2.0.patch
+++ /dev/null
@@ -1,101 +0,0 @@
-https://bugs.gentoo.org/921302
-https://github.com/NLnetLabs/ldns/pull/232
-https://github.com/NLnetLabs/ldns/pull/233
-
-From daf38095763f758c77be538da25c267dc5cb73c8 Mon Sep 17 00:00:00 2001
-From: Florian Weimer <[email protected]>
-Date: Fri, 26 Jan 2024 11:30:39 +0100
-Subject: [PATCH] SWIG_Python_str_AsChar removal in SWIG 4.2.0
-
-The replacement, SWIG_PyUnicode_AsUTF8AndSize, has different
-memory management requirements.
----
- contrib/python/ldns_rdf.i | 21 +++++++++++++++++++--
- 1 file changed, 19 insertions(+), 2 deletions(-)
-
-diff --git a/contrib/python/ldns_rdf.i b/contrib/python/ldns_rdf.i
-index 5d7448fd..60daf1a7 100644
---- a/contrib/python/ldns_rdf.i
-+++ b/contrib/python/ldns_rdf.i
-@@ -56,7 +56,11 @@
-  */
- %typemap(arginit, noblock=1) const ldns_rdf *
- {
-+#if SWIG_VERSION >= 0x040200
-+  PyObject *$1_bytes = NULL;
-+#else
-   char *$1_str = NULL;
-+#endif
- }
- 
- /*
-@@ -66,11 +70,17 @@
- %typemap(in, noblock=1) const ldns_rdf * (void* argp, $1_ltype tmp = 0, int 
res)
- {
-   if (Python_str_Check($input)) {
-+    const char *argstr;
-+#if SWIG_VERSION >= 0x040200
-+    argstr = SWIG_PyUnicode_AsUTF8AndSize($input, NULL, &$1_bytes);
-+#else
-     $1_str = SWIG_Python_str_AsChar($input);
--    if ($1_str == NULL) {
-+    argstr = $1_str;
-+#endif
-+    if (argstr == NULL) {
-       %argument_fail(SWIG_TypeError, "char *", $symname, $argnum);
-     }
--    tmp = ldns_dname_new_frm_str($1_str);
-+    tmp = ldns_dname_new_frm_str(argstr);
-     if (tmp == NULL) {
-       %argument_fail(SWIG_TypeError, "char *", $symname, $argnum);
-     }
-@@ -90,10 +100,17 @@
-  */
- %typemap(freearg, noblock=1) const ldns_rdf *
- {
-+#if SWIG_VERSION >= 0x040200
-+  if ($1_bytes != NULL) {
-+    /* Is not NULL only when a conversion form string occurred. */
-+    Py_XDECREF($1_bytes);
-+  }
-+#else
-   if ($1_str != NULL) {
-     /* Is not NULL only when a conversion form string occurred. */
-     SWIG_Python_str_DelForPy3($1_str); /* Is a empty macro for Python < 3. */
-   }
-+#endif
- }
- 
- %nodefaultctor ldns_struct_rdf; /* No default constructor. */
-
-From f91f61e10be595a6a46845112aaed7da24551bf9 Mon Sep 17 00:00:00 2001
-From: Florian Weimer <[email protected]>
-Date: Fri, 26 Jan 2024 11:57:03 +0100
-Subject: [PATCH] 32-bit compatibility for Python SWIG bindings
-
-The ssize_t type can be int instead of long, and the pointer
-types are incompatible.
----
- contrib/python/ldns.i | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/contrib/python/ldns.i b/contrib/python/ldns.i
-index 881ba5e85..b4a740820 100644
---- a/contrib/python/ldns.i
-+++ b/contrib/python/ldns.i
-@@ -99,12 +99,14 @@
- %typemap(in, noblock=1) (ssize_t)
- {
-   int $1_res = 0;
--  $1_res = SWIG_AsVal_long($input, &$1);
-+  long val;
-+  $1_res = SWIG_AsVal_long($input, &val);
-   if (!SWIG_IsOK($1_res)) {
-     SWIG_exception_fail(SWIG_ArgError($1_res), "in method '"
-       "$symname" "', argument " "$argnum" " of type '"
-       "$type""'");
-   }
-+  $1 = val;
- }
- 
- 

diff --git a/net-libs/ldns/ldns-1.8.3-r3.ebuild 
b/net-libs/ldns/ldns-1.8.3-r3.ebuild
deleted file mode 100644
index fac54b2e7b43..000000000000
--- a/net-libs/ldns/ldns-1.8.3-r3.ebuild
+++ /dev/null
@@ -1,99 +0,0 @@
-# Copyright 1999-2025 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-PYTHON_COMPAT=( python3_{10..12} )
-inherit autotools python-single-r1 multilib-minimal
-
-DESCRIPTION="A library with the aim to simplify DNS programming in C"
-HOMEPAGE="https://www.nlnetlabs.nl/projects/ldns/about/";
-SRC_URI="https://www.nlnetlabs.nl/downloads/${PN}/${P}.tar.gz";
-
-LICENSE="BSD"
-SLOT="0/3"
-KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~m68k ~mips ppc ppc64 ~riscv 
~s390 ~sparc x86 ~x64-macos ~x64-solaris"
-IUSE="doc examples python static-libs"
-REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
-RESTRICT="test" # missing test directory
-
-BDEPEND="
-       python? (
-               ${PYTHON_DEPS}
-               dev-lang/swig
-               $(python_gen_cond_dep 'dev-python/setuptools[${PYTHON_USEDEP}]')
-       )
-       doc? ( app-text/doxygen )
-"
-DEPEND="
-       python? ( ${PYTHON_DEPS} )
-       >=dev-libs/openssl-1.1.1l-r1:0=[${MULTILIB_USEDEP},static-libs?]
-       examples? ( net-libs/libpcap )
-"
-RDEPEND="
-       ${DEPEND}
-"
-
-# False positive, always fails, bug #898658
-QA_CONFIG_IMPL_DECL_SKIP+=(
-       ioctlsocket
-)
-
-MULTILIB_CHOST_TOOLS=(
-       /usr/bin/ldns-config
-)
-
-PATCHES=(
-       "${FILESDIR}/ldns-1.8.1-pkgconfig.patch"
-       "${FILESDIR}/${P}-docs.patch"
-       "${FILESDIR}/${P}-configure-strict.patch"
-       "${FILESDIR}/${PN}-1.8.3-swig-4.2.0.patch"
-)
-
-pkg_setup() {
-       use python && python-single-r1_pkg_setup
-}
-
-src_prepare() {
-       default
-
-       # Drop after 1.8.3
-       eautoreconf
-}
-
-multilib_src_configure() {
-       ECONF_SOURCE="${S}" econf \
-               $(use_enable static-libs static) \
-               $(multilib_native_use_with python pyldns) \
-               $(multilib_native_use_with python pyldnsx) \
-               --with-ssl="${EPREFIX}"/usr \
-               $(multilib_native_with drill) \
-               $(multilib_native_use_with examples) \
-               --disable-rpath
-}
-
-multilib_src_compile() {
-       default
-
-       if multilib_is_native_abi && use doc ; then
-               emake doxygen
-       fi
-}
-
-multilib_src_install() {
-       default
-
-       if multilib_is_native_abi && use doc ; then
-               dodoc -r doc/html
-       fi
-}
-
-multilib_src_install_all() {
-       dodoc Changelog README*
-
-       find "${D}" -name '*.la' -delete || die
-       use python && python_optimize
-
-       insinto /usr/share/vim/vimfiles/ftdetect
-       doins libdns.vim
-}

diff --git a/net-libs/ldns/ldns-1.8.4.ebuild b/net-libs/ldns/ldns-1.8.4.ebuild
deleted file mode 100644
index ed2c70125600..000000000000
--- a/net-libs/ldns/ldns-1.8.4.ebuild
+++ /dev/null
@@ -1,89 +0,0 @@
-# Copyright 1999-2025 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-PYTHON_COMPAT=( python3_{10..13} )
-inherit python-single-r1 multilib-minimal
-
-DESCRIPTION="A library with the aim to simplify DNS programming in C"
-HOMEPAGE="https://www.nlnetlabs.nl/projects/ldns/about/";
-SRC_URI="https://www.nlnetlabs.nl/downloads/${PN}/${P}.tar.gz";
-
-LICENSE="BSD"
-SLOT="0/3"
-KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~m68k ~mips ppc ppc64 ~riscv 
~s390 ~sparc x86 ~x64-macos ~x64-solaris"
-IUSE="doc examples python static-libs"
-REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
-RESTRICT="test" # missing test directory
-
-BDEPEND="
-       python? (
-               ${PYTHON_DEPS}
-               dev-lang/swig
-               $(python_gen_cond_dep 'dev-python/setuptools[${PYTHON_USEDEP}]')
-       )
-       doc? ( app-text/doxygen )
-"
-DEPEND="
-       python? ( ${PYTHON_DEPS} )
-       >=dev-libs/openssl-1.1.1l-r1:0=[${MULTILIB_USEDEP},static-libs?]
-       examples? ( net-libs/libpcap )
-"
-RDEPEND="
-       ${DEPEND}
-"
-
-# False positive, always fails, bug #898658
-QA_CONFIG_IMPL_DECL_SKIP+=(
-       ioctlsocket
-)
-
-MULTILIB_CHOST_TOOLS=(
-       /usr/bin/ldns-config
-)
-
-PATCHES=(
-       "${FILESDIR}/ldns-1.8.1-pkgconfig.patch"
-)
-
-pkg_setup() {
-       use python && python-single-r1_pkg_setup
-}
-
-multilib_src_configure() {
-       ECONF_SOURCE="${S}" econf \
-               $(use_enable static-libs static) \
-               $(multilib_native_use_with python pyldns) \
-               $(multilib_native_use_with python pyldnsx) \
-               --with-ssl="${EPREFIX}"/usr \
-               $(multilib_native_with drill) \
-               $(multilib_native_use_with examples) \
-               --disable-rpath
-}
-
-multilib_src_compile() {
-       default
-
-       if multilib_is_native_abi && use doc ; then
-               emake doxygen
-       fi
-}
-
-multilib_src_install() {
-       default
-
-       if multilib_is_native_abi && use doc ; then
-               dodoc -r doc/html
-       fi
-}
-
-multilib_src_install_all() {
-       dodoc Changelog README*
-
-       find "${D}" -name '*.la' -delete || die
-       use python && python_optimize
-
-       insinto /usr/share/vim/vimfiles/ftdetect
-       doins libdns.vim
-}

Reply via email to