Subject: bug#27708: [PROPOSED] Simplify configuration of HAVE_GNUTLS3 etc.

From: Eli Zaretskii <[email-masked]>
Date: Sat, 15 Jul 2017 22:22:14 +0300

> From: Ted Zlatanov <[email-masked]>
> Cc: Paul Eggert <[email-masked]>,  [email-masked]
> Date: Sat, 15 Jul 2017 15:11:01 -0400
> 
> On Sat, 15 Jul 2017 19:33:40 +0300 Eli Zaretskii <[email-masked]> wrote: 
> 
> EZ> If we want to support the new APIs only starting with GnuTLS 3.4.0,
> EZ> then this is a step in the right direction.  But is that the intent?
> EZ> Most of the functions we need are available in much older versions,
> EZ> and others since 3.2.0.  Only a few appeared in 3.4.0.  So it might
> EZ> also make sense to make our code more fine-grained, not less, if we
> EZ> want to make as many of these APIs available on as many platforms as
> EZ> possible.
> 
> EZ> But I'm not sure what was Ted's intent, and what we want as a project.
> 
> Exactly, and I replied on emacs-devel in the same vein. I'd like to
> ensure people on 3.2.x have as much functionality as possible because
> they may not be able to upgrade quickly.

I see your point, but in that case the code needs "more work", since
in quite a few places the Lisp primitives you wrote mix up functions
available in very old GnuTLS versions with one or two that are only
available in latest versions.  To be able to support older versions of
the library, we need graceful degradation, and that hasn't been coded.
All we can easily do with the current code is return nil instead of
useful information, but that doesn't strike me as "graceful".

> A good starting point is
> https://www.gnutls.org/manual/html_node/Cryptographic-API.html which
> will show the ebb and flow of the API since the 2.x versions.

Alas, the GnuTLS manual doesn't say for each function in what version
it was introduced, it does so only for some of them.