Skip to content

gh-93851: Fix all broken links in Doc/ #93853

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Jun 21, 2022
2 changes: 1 addition & 1 deletion Doc/distutils/apiref.rst
Original file line number Diff line number Diff line change
@@ -11,7 +11,7 @@ API Reference
and other APIs, makes the API consistent across different Python versions,
and is hence recommended over using ``distutils`` directly.

.. _New and changed setup.py arguments in setuptools: https://setuptools.readthedocs.io/en/latest/setuptools.html#new-and-changed-setup-keywords
.. _New and changed setup.py arguments in setuptools: https://web.archive.org/web/20210614192516/https://setuptools.pypa.io/en/stable/userguide/keywords.html

.. include:: ./_setuptools_disclaimer.rst

2 changes: 1 addition & 1 deletion Doc/faq/library.rst
Original file line number Diff line number Diff line change
@@ -670,7 +670,7 @@ A summary of available frameworks is maintained by Paul Boddie at
https://wiki.python.org/moin/WebProgramming\ .

Cameron Laird maintains a useful set of pages about Python web technologies at
http://phaseit.net/claird/comp.lang.python/web_python.
https://web.archive.org/web/20210224183619/http://phaseit.net/claird/comp.lang.python/web_python.


How can I mimic CGI form submission (METHOD=POST)?
2 changes: 1 addition & 1 deletion Doc/faq/programming.rst
Original file line number Diff line number Diff line change
@@ -56,7 +56,7 @@ Are there tools to help find bugs or perform static analysis?

Yes.

`Pylint <https://www.pylint.org/>`_ and
`Pylint <https://pylint.pycqa.org/en/latest/index.html>`_ and
`Pyflakes <https://github.com/PyCQA/pyflakes>`_ do basic checking that will
help you catch bugs sooner.

6 changes: 3 additions & 3 deletions Doc/howto/urllib2.rst
Original file line number Diff line number Diff line change
@@ -4,13 +4,13 @@
HOWTO Fetch Internet Resources Using The urllib Package
***********************************************************

:Author: `Michael Foord <http://www.voidspace.org.uk/python/index.shtml>`_
:Author: `Michael Foord <https://agileabstractions.com/>`_

.. note::

There is a French translation of an earlier revision of this
HOWTO, available at `urllib2 - Le Manuel manquant
<http://www.voidspace.org.uk/python/articles/urllib2_francais.shtml>`_.
<https://web.archive.org/web/20200910051922/http://www.voidspace.org.uk/python/articles/urllib2_francais.shtml>`_.



@@ -22,7 +22,7 @@ Introduction
You may also find useful the following article on fetching web resources
with Python:

* `Basic Authentication <http://www.voidspace.org.uk/python/articles/authentication.shtml>`_
* `Basic Authentication <https://web.archive.org/web/20201215133350/http://www.voidspace.org.uk/python/articles/authentication.shtml>`_

A tutorial on *Basic Authentication*, with examples in Python.

2 changes: 1 addition & 1 deletion Doc/installing/index.rst
Original file line number Diff line number Diff line change
@@ -214,7 +214,7 @@ It is possible that ``pip`` does not get installed by default. One potential fix
python -m ensurepip --default-pip

There are also additional resources for `installing pip.
<https://packaging.python.org/tutorials/installing-packages/#install-pip-setuptools-and-wheel>`__
<https://packaging.python.org/en/latest/tutorials/installing-packages/#ensure-pip-setuptools-and-wheel-are-up-to-date>`__


Installing binary extensions
2 changes: 1 addition & 1 deletion Doc/library/datetime.rst
Original file line number Diff line number Diff line change
@@ -2603,7 +2603,7 @@ Notes:
many other calendar systems.

.. [#] See R. H. van Gent's `guide to the mathematics of the ISO 8601 calendar
<https://www.staff.science.uu.nl/~gent0113/calendar/isocalendar.htm>`_
<https://web.archive.org/web/20220531051136/https://webspace.science.uu.nl/~gent0113/calendar/isocalendar.htm>`_
for a good explanation.

.. [#] Passing ``datetime.strptime('Feb 29', '%b %d')`` will fail since ``1900`` is not a leap year.
2 changes: 1 addition & 1 deletion Doc/library/hashlib.rst
Original file line number Diff line number Diff line change
@@ -668,7 +668,7 @@ function:
hash function used in the protocol summarily stops this type of attack.

(`The Skein Hash Function Family
<http://www.skein-hash.info/sites/default/files/skein1.3.pdf>`_,
<https://www.schneier.com/wp-content/uploads/2016/02/skein.pdf>`_,
p. 21)

BLAKE2 can be personalized by passing bytes to the *person* argument::
2 changes: 1 addition & 1 deletion Doc/library/html.entities.rst
Original file line number Diff line number Diff line change
@@ -44,4 +44,4 @@ This module defines four dictionaries, :data:`html5`,

.. rubric:: Footnotes

.. [#] See https://html.spec.whatwg.org/multipage/syntax.html#named-character-references
.. [#] See https://html.spec.whatwg.org/multipage/named-characters.html#named-character-references
2 changes: 1 addition & 1 deletion Doc/library/importlib.metadata.rst
Original file line number Diff line number Diff line change
@@ -136,7 +136,7 @@ Inspect the resolved entry point::
The ``group`` and ``name`` are arbitrary values defined by the package author
and usually a client will wish to resolve all entry points for a particular
group. Read `the setuptools docs
<https://setuptools.readthedocs.io/en/latest/setuptools.html#dynamic-discovery-of-services-and-plugins>`_
<https://setuptools.pypa.io/en/latest/userguide/entry_point.html>`_
for more information on entry points, their definition, and usage.

*Compatibility Note*
2 changes: 1 addition & 1 deletion Doc/library/importlib.resources.rst
Original file line number Diff line number Diff line change
@@ -4,7 +4,7 @@
.. module:: importlib.resources
:synopsis: Package resource reading, opening, and access

**Source code:** :source:`Lib/importlib/resources.py`
**Source code:** :source:`Lib/importlib/resources/__init__.py`
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note to myself: leave it out while backporting.


--------------

2 changes: 1 addition & 1 deletion Doc/library/math.rst
Original file line number Diff line number Diff line change
@@ -578,7 +578,7 @@ Special functions

The :func:`erf` function can be used to compute traditional statistical
functions such as the `cumulative standard normal distribution
<https://en.wikipedia.org/wiki/Normal_distribution#Cumulative_distribution_function>`_::
<https://en.wikipedia.org/wiki/Normal_distribution#Cumulative_distribution_functions>`_::

def phi(x):
'Cumulative distribution function for the standard normal distribution'
2 changes: 1 addition & 1 deletion Doc/library/os.rst
Original file line number Diff line number Diff line change
@@ -4318,7 +4318,7 @@ written in Python, such as a mail server's external command delivery program.
:attr:`!children_system`, and :attr:`!elapsed` in that order.

See the Unix manual page
:manpage:`times(2)` and :manpage:`times(3)` manual page on Unix or `the GetProcessTimes MSDN
:manpage:`times(2)` and `times(3) <https://www.freebsd.org/cgi/man.cgi?time(3)>`_ manual page on Unix or `the GetProcessTimes MSDN
<https://docs.microsoft.com/windows/win32/api/processthreadsapi/nf-processthreadsapi-getprocesstimes>`_
on Windows. On Windows, only :attr:`!user` and :attr:`!system` are known; the other attributes are zero.

5 changes: 2 additions & 3 deletions Doc/library/pathlib.rst
Original file line number Diff line number Diff line change
@@ -328,14 +328,13 @@ Pure paths provide the following methods and properties:
.. note::

This behavior conforms to *The Open Group Base Specifications Issue 6*,
paragraph `4.11 *Pathname Resolution* <xbd_path_resolution>`_:
paragraph `4.11 Pathname Resolution
<https://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11>`_:

*"A pathname that begins with two successive slashes may be interpreted in
an implementation-defined manner, although more than two leading slashes
shall be treated as a single slash."*

.. xbd_path_resolution: https://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11

.. data:: PurePath.anchor

The concatenation of the drive and root::
2 changes: 1 addition & 1 deletion Doc/library/signal.rst
Original file line number Diff line number Diff line change
@@ -95,7 +95,7 @@ The signal module defines three enums:

:class:`enum.IntEnum` collection the constants :const:`SIG_BLOCK`, :const:`SIG_UNBLOCK` and :const:`SIG_SETMASK`.

Availability: Unix. See the man page :manpage:`sigprocmask(3)` and
Availability: Unix. See the man page :manpage:`sigprocmask(2)` and
:manpage:`pthread_sigmask(3)` for further information.

.. versionadded:: 3.5
4 changes: 2 additions & 2 deletions Doc/library/ssl.rst
Original file line number Diff line number Diff line change
@@ -1910,7 +1910,7 @@ to speed up repeated connections from the same clients.
.. method:: SSLContext.session_stats()

Get statistics about the SSL sessions created or managed by this context.
A dictionary is returned which maps the names of each `piece of information <https://www.openssl.org/docs/man1.1.1/ssl/SSL_CTX_sess_number.html>`_ to their
A dictionary is returned which maps the names of each `piece of information <https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_sess_number.html>`_ to their
numeric values. For example, here is the total number of hits and misses
in the session cache since the context was created::

@@ -2704,7 +2704,7 @@ enabled when negotiating a SSL session is possible through the
:meth:`SSLContext.set_ciphers` method. Starting from Python 3.2.3, the
ssl module disables certain weak ciphers by default, but you may want
to further restrict the cipher choice. Be sure to read OpenSSL's documentation
about the `cipher list format <https://www.openssl.org/docs/manmaster/man1/ciphers.html#CIPHER-LIST-FORMAT>`_.
about the `cipher list format <https://www.openssl.org/docs/man1.1.1/man1/ciphers.html#CIPHER-LIST-FORMAT>`_.
If you want to check which ciphers are enabled by a given cipher list, use
:meth:`SSLContext.get_ciphers` or the ``openssl ciphers`` command on your
system.
4 changes: 2 additions & 2 deletions Doc/library/statistics.rst
Original file line number Diff line number Diff line change
@@ -798,7 +798,7 @@ of applications in statistics.
Compute the inverse cumulative distribution function, also known as the
`quantile function <https://en.wikipedia.org/wiki/Quantile_function>`_
or the `percent-point
<https://www.statisticshowto.datasciencecentral.com/inverse-distribution-function/>`_
<https://web.archive.org/web/20190203145224/https://www.statisticshowto.datasciencecentral.com/inverse-distribution-function/>`_
function. Mathematically, it is written ``x : P(X <= x) = p``.

Finds the value *x* of the random variable *X* such that the
@@ -947,7 +947,7 @@ probability that the Python room will stay within its capacity limits?
Normal distributions commonly arise in machine learning problems.

Wikipedia has a `nice example of a Naive Bayesian Classifier
<https://en.wikipedia.org/wiki/Naive_Bayes_classifier#Sex_classification>`_.
<https://en.wikipedia.org/wiki/Naive_Bayes_classifier#Person_classification>`_.
The challenge is to predict a person's gender from measurements of normally
distributed features including height, weight, and foot size.

2 changes: 1 addition & 1 deletion Doc/library/struct.rst
Original file line number Diff line number Diff line change
@@ -467,6 +467,6 @@ The :mod:`struct` module also defines the following type:

.. _half precision format: https://en.wikipedia.org/wiki/Half-precision_floating-point_format

.. _ieee 754 standard: https://en.wikipedia.org/wiki/IEEE_floating_point#IEEE_754-2008
.. _ieee 754 standard: https://en.wikipedia.org/wiki/IEEE_754-2008_revision

.. _IETF RFC 1700: https://tools.ietf.org/html/rfc1700
2 changes: 1 addition & 1 deletion Doc/library/unittest.mock.rst
Original file line number Diff line number Diff line change
@@ -1944,7 +1944,7 @@ Both patch_ and patch.object_ correctly patch and restore descriptors: class
methods, static methods and properties. You should patch these on the *class*
rather than an instance. They also work with *some* objects
that proxy attribute access, like the `django settings object
<http://www.voidspace.org.uk/python/weblog/arch_d7_2010_12_04.shtml#e1198>`_.
<https://web.archive.org/web/20200603181648/http://www.voidspace.org.uk/python/weblog/arch_d7_2010_12_04.shtml#e1198>`_.


MagicMock and magic method support
6 changes: 3 additions & 3 deletions Doc/license.rst
Original file line number Diff line number Diff line change
@@ -626,9 +626,9 @@ strtod and dtoa
The file :file:`Python/dtoa.c`, which supplies C functions dtoa and
strtod for conversion of C doubles to and from strings, is derived
from the file of the same name by David M. Gay, currently available
from http://www.netlib.org/fp/. The original file, as retrieved on
March 16, 2009, contains the following copyright and licensing
notice::
from https://web.archive.org/web/20220517033456/http://www.netlib.org/fp/dtoa.c.
The original file, as retrieved on March 16, 2009, contains the following
copyright and licensing notice::

/****************************************************************
*
4 changes: 4 additions & 0 deletions Doc/tools/templates/download.html
Original file line number Diff line number Diff line change
@@ -3,6 +3,10 @@
{% if daily is defined %}
{% set dlbase = pathto('archives', 1) %}
{% else %}
{#
The link below returns HTTP 404 until the first related alpha release.
This is expected; use daily documentation builds for CPython development.
#}
{% set dlbase = 'https://docs.python.org/ftp/python/doc/' + release %}
{% endif %}

2 changes: 1 addition & 1 deletion Doc/using/unix.rst
Original file line number Diff line number Diff line change
@@ -69,7 +69,7 @@ Building Python
If you want to compile CPython yourself, first thing you should do is get the
`source <https://www.python.org/downloads/source/>`_. You can download either the
latest release's source or just grab a fresh `clone
<https://devguide.python.org/setup/#getting-the-source-code>`_. (If you want
<https://devguide.python.org/setup/#get-the-source-code>`_. (If you want
to contribute patches, you will need a clone.)

The build process consists of the usual commands::
2 changes: 1 addition & 1 deletion Doc/using/venv-create.inc
Original file line number Diff line number Diff line change
@@ -17,7 +17,7 @@ re-used.
.. deprecated:: 3.6
``pyvenv`` was the recommended tool for creating virtual environments for
Python 3.3 and 3.4, and is `deprecated in Python 3.6
<https://docs.python.org/dev/whatsnew/3.6.html#deprecated-features>`_.
<https://docs.python.org/dev/whatsnew/3.6.html#id8>`_.
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The link now points to an exact changelog line instead of the whole section.


.. versionchanged:: 3.5
The use of ``venv`` is now recommended for creating virtual environments.
10 changes: 6 additions & 4 deletions Doc/using/windows.rst
Original file line number Diff line number Diff line change
@@ -513,9 +513,11 @@ key features:
Popular scientific modules (such as numpy, scipy and pandas) and the
``conda`` package manager.

`Canopy <https://www.enthought.com/product/canopy/>`_
A "comprehensive Python analysis environment" with editors and other
development tools.
`Enthought Deployment Manager <https://www.enthought.com/edm/>`_
"The Next Generation Python Environment and Package Manager".

Previously Enthought provided Canopy, but it `reached end of life in 2016
<https://support.enthought.com/hc/en-us/articles/360038600051-Canopy-GUI-end-of-life-transition-to-the-Enthought-Deployment-Manager-EDM-and-Visual-Studio-Code>`_.

`WinPython <https://winpython.github.io/>`_
Windows-specific distribution with prebuilt scientific packages and
@@ -1170,7 +1172,7 @@ Compiling Python on Windows
If you want to compile CPython yourself, first thing you should do is get the
`source <https://www.python.org/downloads/source/>`_. You can download either the
latest release's source or just grab a fresh `checkout
<https://devguide.python.org/setup/#getting-the-source-code>`_.
<https://devguide.python.org/setup/#get-the-source-code>`_.

The source tree contains a build solution and project files for Microsoft
Visual Studio, which is the compiler used to build the official Python
7 changes: 5 additions & 2 deletions Doc/whatsnew/2.1.rst
Original file line number Diff line number Diff line change
@@ -542,8 +542,11 @@ PEP 241: Metadata in Python Packages

A common complaint from Python users is that there's no single catalog of all
the Python modules in existence. T. Middleton's Vaults of Parnassus at
http://www.vex.net/parnassus/ are the largest catalog of Python modules, but
registering software at the Vaults is optional, and many people don't bother.
``www.vex.net/parnassus/`` (retired in February 2009, `available in the
Internet Archive Wayback Machine
<https://web.archive.org/web/20090130140102/http://www.vex.net/parnassus/>`_)
was the largest catalog of Python modules, but
registering software at the Vaults is optional, and many people did not bother.

As a first small step toward fixing the problem, Python software packaged using
the Distutils :command:`sdist` command will include a file named
8 changes: 4 additions & 4 deletions Doc/whatsnew/2.5.rst
Original file line number Diff line number Diff line change
@@ -551,7 +551,7 @@ exhausted.
https://en.wikipedia.org/wiki/Coroutine
The Wikipedia entry for coroutines.

http://www.sidhe.org/~dan/blog/archives/000178.html
https://web.archive.org/web/20160321211320/http://www.sidhe.org/~dan/blog/archives/000178.html
An explanation of coroutines from a Perl point of view, written by Dan Sugalski.

.. ======================================================================
@@ -1746,8 +1746,8 @@ modules, now that :mod:`ctypes` is included with core Python.

.. seealso::

http://starship.python.net/crew/theller/ctypes/
The ctypes web page, with a tutorial, reference, and FAQ.
https://web.archive.org/web/20180410025338/http://starship.python.net/crew/theller/ctypes/
The pre-stdlib ctypes web page, with a tutorial, reference, and FAQ.

The documentation for the :mod:`ctypes` module.

@@ -2065,7 +2065,7 @@ up a server takes only a few lines of code::

.. seealso::

http://www.wsgi.org
https://web.archive.org/web/20160331090247/http://wsgi.readthedocs.org/en/latest/
A central web site for WSGI-related resources.

:pep:`333` - Python Web Server Gateway Interface v1.0
2 changes: 1 addition & 1 deletion Doc/whatsnew/2.6.rst
Original file line number Diff line number Diff line change
@@ -176,7 +176,7 @@ Hosting of the Python bug tracker is kindly provided by
of Stellenbosch, South Africa. Martin von Löwis put a
lot of effort into importing existing bugs and patches from
SourceForge; his scripts for this import operation are at
http://svn.python.org/view/tracker/importer/ and may be useful to
``http://svn.python.org/view/tracker/importer/`` and may be useful to
other projects wishing to move from SourceForge to Roundup.

.. seealso::
4 changes: 2 additions & 2 deletions Doc/whatsnew/2.7.rst
Original file line number Diff line number Diff line change
@@ -1545,7 +1545,7 @@ changes, or look through the Subversion logs for all the details.
*ciphers* argument that's a string listing the encryption algorithms
to be allowed; the format of the string is described
`in the OpenSSL documentation
<https://www.openssl.org/docs/manmaster/man1/ciphers.html#CIPHER-LIST-FORMAT>`__.
<https://www.openssl.org/docs/man1.0.2/man1/ciphers.html>`__.
(Added by Antoine Pitrou; :issue:`8322`.)

Another change makes the extension load all of OpenSSL's ciphers and
@@ -2001,7 +2001,7 @@ module is imported or used.

.. seealso::

http://www.voidspace.org.uk/python/articles/unittest2.shtml
https://web.archive.org/web/20210619163128/http://www.voidspace.org.uk/python/articles/unittest2.shtml
Describes the new features, how to use them, and the
rationale for various design decisions. (By Michael Foord.)

8 changes: 5 additions & 3 deletions Doc/whatsnew/3.2.rst
Original file line number Diff line number Diff line change
@@ -1647,7 +1647,7 @@ for secure (encrypted, authenticated) internet connections:
* The :func:`ssl.wrap_socket` constructor function now takes a *ciphers*
argument. The *ciphers* string lists the allowed encryption algorithms using
the format described in the `OpenSSL documentation
<https://www.openssl.org/docs/manmaster/man1/ciphers.html#CIPHER-LIST-FORMAT>`__.
<https://www.openssl.org/docs/man1.0.2/man1/ciphers.html#CIPHER-LIST-FORMAT>`__.

* When linked against recent versions of OpenSSL, the :mod:`ssl` module now
supports the Server Name Indication extension to the TLS protocol, allowing
@@ -2593,10 +2593,12 @@ Changes to Python's build process and to the C API include:
longer used and it had never been documented (:issue:`8837`).

There were a number of other small changes to the C-API. See the
:source:`Misc/NEWS` file for a complete list.
Misc/NEWS <https://github.com/python/cpython/blob/v3.2.6/Misc/NEWS>`_
Copy link
Member Author

@arhadthedev arhadthedev Jun 21, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Misc/NEWS <https://github.com/python/cpython/blob/v3.2.6/Misc/NEWS>`_
`Misc/NEWS <https://github.com/python/cpython/blob/v3.2.6/Misc/NEWS>`_

For some reason, gh-94078 backport is the only one that caught this typo.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Possibly because it was using the old docs checker script as opposed to Sphinx-Lint. Could you verify whether the latest Sphinx-Lint 0.6.6 catches this case, and if not, could you report it upstream? Thanks!

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, it really isn't great that we're regressing from using a dedicated role to hardcoded links...but hopefully the new suite of roles we're developing for this will replace this.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you verify whether the latest Sphinx-Lint 0.6.6 catches this case [...]

I ran sphinx-lint 0.6.7 and it caught the typo successfully:

C:\Users\oleg\Documents\dev\notmine\cpython>sphinx-lint Doc/whatsnew/3.2.rst
Doc/whatsnew/3.2.rst:54: missing backtick before hyperlink reference: 'Misc/NEWS <https://github.com/python/cpython/blob/v3.2.6/Misc/NEWS>`_'. (hyperlink-reference-missing-backtick)

So I hope that adoption of sphinx-lint will eliminate such sporadic discoveries.

file for a complete list.

Also, there were a number of updates to the Mac OS X build, see
:source:`Mac/BuildScript/README.txt` for details. For users running a 32/64-bit
`Mac/BuildScript/README.txt <https://github.com/python/cpython/blob/v3.2.6/Mac/BuildScript/README.txt>`_
for details. For users running a 32/64-bit
build, there is a known problem with the default Tcl/Tk on Mac OS X 10.6.
Accordingly, we recommend installing an updated alternative such as
`ActiveState Tcl/Tk 8.5.9 <https://www.activestate.com/activetcl/downloads>`_\.
3 changes: 2 additions & 1 deletion Doc/whatsnew/3.6.rst
Original file line number Diff line number Diff line change
@@ -2117,7 +2117,8 @@ API and Feature Removals
platform specific ``Lib/plat-*/`` directories, but were chronically out of
date, inconsistently available across platforms, and unmaintained. The
script that created these modules is still available in the source
distribution at :source:`Tools/scripts/h2py.py`.
distribution at `Tools/scripts/h2py.py
<https://github.com/python/cpython/blob/v3.6.15/Tools/scripts/h2py.py>`_.

* The deprecated ``asynchat.fifo`` class has been removed.

3 changes: 2 additions & 1 deletion Doc/whatsnew/3.7.rst
Original file line number Diff line number Diff line change
@@ -2120,7 +2120,8 @@ Platform Support Removals
of other LTS Linux releases (e.g. RHEL/CentOS 7.5, SLES 12-SP3), use OpenSSL
1.0.2 or later, and remain supported in the default build configuration.

CPython's own :source:`CI configuration file <.travis.yml>` provides an
CPython's own `CI configuration file
<https://github.com/python/cpython/blob/v3.7.13/.travis.yml>`_ provides an
example of using the SSL
:source:`compatibility testing infrastructure <Tools/ssl/multissltests.py>` in
CPython's test suite to build and link against OpenSSL 1.1.0 rather than an