PycURL (http://pycurl.io/), operating in a multi-threaded environment that is Python, must include thread locking callbacks that depend on the SSL/TLS backend that is being used by libcurl.
In order to include the right callbacks PycURL attempts to detect said SSL/TLS backend during build time. This detection used to look at which libraries listed in curl-config --libs; then OpenSSL changed their library names, then these libraries ceased to be shown in curl-config --libs (and they wouldn't be if libcurl is statically linked against them), and so on and so forth. One of the PycURL build options loads libcurl.so and queries it for its SSL backend via ssl_version in version info structure.
By now there is an extensive collection of code in PycURL attempting this SSL/TLS backend detection and it is far from working in all cases. In fact my recommendation to PycURL packagers would be to explicitly specify the backend given their knowledge of how libcurl is built on their system.
I would like libcurl to expose the SSL/TLS backend it is built against in an easy to use fashion. I imagine that exposing it in some fashion in curl-config --features or exposing the version string as given in ssl_version via a new flag to curl-config are viable options from the users' standpoint.
Note: using libcurl does not require curl binary to exist, hence curl --version does not satisfy the request in this issue.
Note 2: some kind of a Windows solution to this issue will probably be good to have too, although the Windows build process for PycURL builds libcurl and all of its dependencies from source every time and therefore knows which SSL backend libcurl uses, and this is unlikely to ever change.
Drop everything that uses automatic libcurl SSL backend
detection. The automatic detection does not work all the time
(curl/curl#2128) and now that
there are configurations for all SSL backends using the
default one is less necessary.
Do not test against libcurl that ships with ubuntu, as
it does not appear to support HTTP 2.
Test all SSL backends with 2.7 and 3.6.
Drop Python 3.1.
some kind of a Windows solution to this issue will probably be good to have too
Yes, the windows environment completely lacks a curl-config alternative, but I don't know what we can do about that... Ideas are welcome. Generate and build a binary executable that works the same way?