Skip to content

gh-95913: Edit, link and sort 3.11 WhatsNew Build section #98588

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 2 commits into from
Oct 24, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
124 changes: 67 additions & 57 deletions Doc/whatsnew/3.11.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1818,31 +1818,66 @@ Porting notes for the C API are
Build Changes
=============

* Building Python now requires a C11 compiler. Optional C11 features are not
required.
(Contributed by Victor Stinner in :issue:`46656`.)

* Building Python now requires support of IEEE 754 floating point numbers.
(Contributed by Victor Stinner in :issue:`46917`.)
* CPython now has :pep:`11` :pep:`Tier 3 support <11#tier-3>` for
cross compiling to the `WebAssembly <https://webassembly.org/>`_ platforms
`Emscripten <https://emscripten.org/>`_
(``wasm32-unknown-emscripten``, i.e. Python in the browser)
and `WebAssembly System Interface (WASI) <https://wasi.dev/>`_
(``wasm32-unknown-wasi``).
The effort is inspired by previous work like `Pyodide <https://pyodide.org/>`_.
These platforms provide a limited subset of POSIX APIs; Python standard
libraries features and modules related to networking, processes, threading,
signals, mmap, and users/groups are not available or don't work.
(Emscripten contributed by Christian Heimes and Ethan Smith in :gh:`84461`
and WASI contributed by Christian Heimes in :gh:`90473`;
platforms promoted in :gh:`95085`)

* Building Python now requires:

* A `C11 <https://en.cppreference.com/w/c/11>`_ compiler.
`Optional C11 features
<https://en.wikipedia.org/wiki/C11_(C_standard_revision)#Optional_features>`_
are not required.
(Contributed by Victor Stinner in :issue:`46656`.)

* Support for `IEEE 754 <https://en.wikipedia.org/wiki/IEEE_754>`_
floating point numbers.
(Contributed by Victor Stinner in :issue:`46917`.)

* Support for `floating point Not-a-Number (NaN)
<https://en.wikipedia.org/wiki/NaN#Floating_point>`_,
as the :c:macro:`!Py_NO_NAN` macro has been removed.
(Contributed by Victor Stinner in :issue:`46656`.)

* A `C99 <https://en.cppreference.com/w/c/99>`_
``<math.h>`` header file providing the
:c:func:`!copysign`, :c:func:`!hypot`, :c:func:`!isfinite`,
:c:func:`!isinf`, :c:func:`!isnan`, and :c:func:`!round` functions
(contributed by Victor Stinner in :issue:`45440`);
and a :c:data:`!NAN` constant or the :c:func:`!__builtin_nan` function
(Contributed by Victor Stinner in :issue:`46640`).
Comment on lines +1835 to +1858
Copy link
Member

Choose a reason for hiding this comment

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

  • NaNs are part of IEEE 754, and the math functions are part of C11, so mentioning the earlier changes are redundant now.
  • This is specific to CPython.
Suggested change
* Building Python now requires:
* A `C11 <https://en.cppreference.com/w/c/11>`_ compiler.
`Optional C11 features
<https://en.wikipedia.org/wiki/C11_(C_standard_revision)#Optional_features>`_
are not required.
(Contributed by Victor Stinner in :issue:`46656`.)
* Support for `IEEE 754 <https://en.wikipedia.org/wiki/IEEE_754>`_
floating point numbers.
(Contributed by Victor Stinner in :issue:`46917`.)
* Support for `floating point Not-a-Number (NaN)
<https://en.wikipedia.org/wiki/NaN#Floating_point>`_,
as the :c:macro:`!Py_NO_NAN` macro has been removed.
(Contributed by Victor Stinner in :issue:`46656`.)
* A `C99 <https://en.cppreference.com/w/c/99>`_
``<math.h>`` header file providing the
:c:func:`!copysign`, :c:func:`!hypot`, :c:func:`!isfinite`,
:c:func:`!isinf`, :c:func:`!isnan`, and :c:func:`!round` functions
(contributed by Victor Stinner in :issue:`45440`);
and a :c:data:`!NAN` constant or the :c:func:`!__builtin_nan` function
(Contributed by Victor Stinner in :issue:`46640`).
* Building CPython now requires:
* A `C11 <https://en.cppreference.com/w/c/11>`_ compiler and standard library.
`Optional C11 features
<https://en.wikipedia.org/wiki/C11_(C_standard_revision)#Optional_features>`_
are not required.
(Contributed by Victor Stinner in :issue:`46656`,
:issue:`45440`, :issue:`46640`.)
* Support for `IEEE 754 <https://en.wikipedia.org/wiki/IEEE_754>`_
floating point numbers.
(Contributed by Victor Stinner in :issue:`46917`.)
* The :c:macro:`!Py_NO_NAN` macro has been removed.
Since CPython now requires IEEE 754 floats, NaN values are always available.
(Contributed by Victor Stinner in :issue:`46656`.)

Copy link
Member

Choose a reason for hiding this comment

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

Ah, too late. No big deal.

Copy link
Member Author

Choose a reason for hiding this comment

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

Sorry about that. I was wondering about it, but I wanted to be conservative with my initial changes since I wasn't 100% sure. I can submit a PR for you (with you co-authored on the commit) to apply it going forward, or you can if you prefer.

Copy link
Member

Choose a reason for hiding this comment

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

Go ahead. I might get to it later, as my task list shrinks.

Copy link
Member Author

Choose a reason for hiding this comment

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

Wait, your task list actually shrinks? It seems as if by invisible dark energy that my task list is perpetually expanding...

In any case, I went ahead and opened this as PR #98781, thanks.


* The :mod:`tkinter` package now requires `Tcl/Tk <https://www.tcl.tk>`_
version 8.5.12 or newer.
(Contributed by Serhiy Storchaka in :issue:`46996`.)

* CPython can now be built with the ThinLTO option via ``--with-lto=thin``.
(Contributed by Dong-hee Na and Brett Holman in :issue:`44340`.)
* Build dependencies, compiler flags, and linker flags for most stdlib
extension modules are now detected by :program:`configure`. libffi, libnsl,
libsqlite3, zlib, bzip2, liblzma, libcrypt, Tcl/Tk, and uuid flags
are detected by `pkg-config
<https://www.freedesktop.org/wiki/Software/pkg-config/>`_ (when available).
:mod:`tkinter` now requires a pkg-config command
to detect development settings for `Tcl/Tk`_ headers and libraries.
(Contributed by Christian Heimes and Erlend Egeberg Aasland in
:issue:`45847`, :issue:`45747`, and :issue:`45763`.)

* libpython is no longer linked against libcrypt.
(Contributed by Mike Gilbert in :issue:`45433`.)

* Building Python now requires a C99 ``<math.h>`` header file providing
the following functions: ``copysign()``, ``hypot()``, ``isfinite()``,
``isinf()``, ``isnan()``, ``round()``.
(Contributed by Victor Stinner in :issue:`45440`.)

* Building Python now requires a C99 ``<math.h>`` header file providing
a ``NAN`` constant, or the ``__builtin_nan()`` built-in function.
(Contributed by Victor Stinner in :issue:`46640`.)

* Building Python now requires support for floating point Not-a-Number (NaN):
remove the ``Py_NO_NAN`` macro.
(Contributed by Victor Stinner in :issue:`46656`.)
* CPython can now be built with the
`ThinLTO <https://clang.llvm.org/docs/ThinLTO.html>`_ option
via passing ``thin`` to :option:`--with-lto`, i.e. ``--with-lto=thin``.
(Contributed by Dong-hee Na and Brett Holman in :issue:`44340`.)

* Freelists for object structs can now be disabled. A new :program:`configure`
option :option:`!--without-freelists` can be used to disable all freelists
Expand All @@ -1851,55 +1886,30 @@ Build Changes

* ``Modules/Setup`` and ``Modules/makesetup`` have been improved and tied up.
Extension modules can now be built through ``makesetup``. All except some
test modules can be linked statically into main binary or library.
test modules can be linked statically into a main binary or library.
(Contributed by Brett Cannon and Christian Heimes in :issue:`45548`,
:issue:`45570`, :issue:`45571`, and :issue:`43974`.)

* Build dependencies, compiler flags, and linker flags for most stdlib
extension modules are now detected by :program:`configure`. libffi, libnsl,
libsqlite3, zlib, bzip2, liblzma, libcrypt, Tcl/Tk, and uuid flags
are detected by ``pkg-config`` (when available). :mod:`tkinter` now
requires ``pkg-config`` command to detect development settings for Tcl/Tk
headers and libraries.
(Contributed by Christian Heimes and Erlend Egeberg Aasland in
:issue:`45847`, :issue:`45747`, and :issue:`45763`.)

.. note::
Use the environment variables :envvar:`TCLTK_CFLAGS` and
:envvar:`TCLTK_LIBS` to manually specify the location of Tcl/Tk headers
and libraries. The :program:`configure` options ``--with-tcltk-includes``
and ``--with-tcltk-libs`` have been removed.
Use the environment variables :envvar:`!TCLTK_CFLAGS` and
:envvar:`!TCLTK_LIBS` to manually specify the location of Tcl/Tk headers
and libraries. The :program:`configure` options
:option:`!--with-tcltk-includes` and :option:`!--with-tcltk-libs`
have been removed.

On RHEL 7 and CentOS 7 the development packages do not provide ``tcl.pc``
and ``tk.pc``, use :envvar:`TCLTK_LIBS="-ltk8.5 -ltkstub8.5 -ltcl8.5"`.
and ``tk.pc``; use ``TCLTK_LIBS="-ltk8.5 -ltkstub8.5 -ltcl8.5"``.
The directory ``Misc/rhel7`` contains ``.pc`` files and instructions
how to build Python with RHEL 7's and CentOS 7's Tcl/Tk and OpenSSL.

* CPython now has :pep:`11` tier 3 support for cross compiling to WebAssembly
platform ``wasm32-unknown-emscripten`` (Python in the browser). The effort
is inspired by previous work like `Pyodide <https://pyodide.org/>`_.
Emscripten provides a limited subset of POSIX APIs. Python standard
libraries features and modules related to networking, processes, threading,
signals, mmap, and users/groups are not available or don't work.
(Contributed by Christian Heimes and Ethan Smith in :gh:`84461`,
promoted in :gh:`95085`)

* CPython now has :pep:`11` tier 3 support for cross compiling to WebAssembly
platform ``wasm32-unknown-wasi`` (WebAssembly System Interface). Like on
Emscripten, only a subset of Python's standard library is available on WASI.
(Contributed by Christian Heimes in :gh:`90473`, promoted in :gh:`95085`)
on how to build Python with RHEL 7's and CentOS 7's Tcl/Tk and OpenSSL.

* CPython will now use 30-bit digits by default for the Python :class:`int`
implementation. Previously, the default was to use 30-bit digits on platforms
with ``SIZEOF_VOID_P >= 8``, and 15-bit digits otherwise. It's still possible
to explicitly request use of 15-bit digits via either the
``--enable-big-digits`` option to the configure script or (for Windows) the
``PYLONG_BITS_IN_DIGIT`` variable in ``PC/pyconfig.h``, but this option may
be removed at some point in the future. (Contributed by Mark Dickinson in
:issue:`45569`.)

* The :mod:`tkinter` package now requires Tcl/Tk version 8.5.12 or newer.
(Contributed by Serhiy Storchaka in :issue:`46996`.)
:option:`--enable-big-digits` option to the configure script
or (for Windows) the ``PYLONG_BITS_IN_DIGIT`` variable in ``PC/pyconfig.h``,
but this option may be removed at some point in the future.
(Contributed by Mark Dickinson in :issue:`45569`.)


.. _whatsnew311-c-api:
Expand Down