mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			1434 lines
		
	
	
	
		
			39 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			1434 lines
		
	
	
	
		
			39 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
****************
 | 
						|
Configure Python
 | 
						|
****************
 | 
						|
 | 
						|
.. highlight:: sh
 | 
						|
 | 
						|
Build Requirements
 | 
						|
==================
 | 
						|
 | 
						|
Features and minimum versions required to build CPython:
 | 
						|
 | 
						|
* 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.
 | 
						|
 | 
						|
* On Windows, Microsoft Visual Studio 2017 or later is required.
 | 
						|
 | 
						|
* Support for `IEEE 754 <https://en.wikipedia.org/wiki/IEEE_754>`_ floating
 | 
						|
  point numbers and `floating point Not-a-Number (NaN)
 | 
						|
  <https://en.wikipedia.org/wiki/NaN#Floating_point>`_.
 | 
						|
 | 
						|
* Support for threads.
 | 
						|
 | 
						|
* OpenSSL 1.1.1 is the minimum version and OpenSSL 3.0.9 is the recommended
 | 
						|
  minimum version for the :mod:`ssl` and :mod:`hashlib` extension modules.
 | 
						|
 | 
						|
* SQLite 3.15.2 for the :mod:`sqlite3` extension module.
 | 
						|
 | 
						|
* Tcl/Tk 8.5.12 for the :mod:`tkinter` module.
 | 
						|
 | 
						|
* Autoconf 2.71 and aclocal 1.16.4 are required to regenerate the
 | 
						|
  :file:`configure` script.
 | 
						|
 | 
						|
.. versionchanged:: 3.1
 | 
						|
   Tcl/Tk version 8.3.1 is now required.
 | 
						|
 | 
						|
.. versionchanged:: 3.5
 | 
						|
   On Windows, Visual Studio 2015 or later is now required.
 | 
						|
   Tcl/Tk version 8.4 is now required.
 | 
						|
 | 
						|
.. versionchanged:: 3.6
 | 
						|
   Selected C99 features are now required, like ``<stdint.h>`` and ``static
 | 
						|
   inline`` functions.
 | 
						|
 | 
						|
.. versionchanged:: 3.7
 | 
						|
   Thread support and OpenSSL 1.0.2 are now required.
 | 
						|
 | 
						|
.. versionchanged:: 3.10
 | 
						|
   OpenSSL 1.1.1 is now required.
 | 
						|
   Require SQLite 3.7.15.
 | 
						|
 | 
						|
.. versionchanged:: 3.11
 | 
						|
   C11 compiler, IEEE 754 and NaN support are now required.
 | 
						|
   On Windows, Visual Studio 2017 or later is required.
 | 
						|
   Tcl/Tk version 8.5.12 is now required for the :mod:`tkinter` module.
 | 
						|
 | 
						|
.. versionchanged:: 3.13
 | 
						|
   Autoconf 2.71, aclocal 1.16.4 and SQLite 3.15.2 are now required.
 | 
						|
 | 
						|
See also :pep:`7` "Style Guide for C Code" and :pep:`11` "CPython platform
 | 
						|
support".
 | 
						|
 | 
						|
 | 
						|
Generated files
 | 
						|
===============
 | 
						|
 | 
						|
To reduce build dependencies, Python source code contains multiple generated
 | 
						|
files. Commands to regenerate all generated files::
 | 
						|
 | 
						|
    make regen-all
 | 
						|
    make regen-stdlib-module-names
 | 
						|
    make regen-limited-abi
 | 
						|
    make regen-configure
 | 
						|
 | 
						|
The ``Makefile.pre.in`` file documents generated files, their inputs, and tools used
 | 
						|
to regenerate them. Search for ``regen-*`` make targets.
 | 
						|
 | 
						|
configure script
 | 
						|
----------------
 | 
						|
 | 
						|
The ``make regen-configure`` command regenerates the ``aclocal.m4`` file and
 | 
						|
the ``configure`` script using the ``Tools/build/regen-configure.sh`` shell
 | 
						|
script which uses an Ubuntu container to get the same tools versions and have a
 | 
						|
reproducible output.
 | 
						|
 | 
						|
The container is optional, the following command can be run locally::
 | 
						|
 | 
						|
    autoreconf -ivf -Werror
 | 
						|
 | 
						|
The generated files can change depending on the exact ``autoconf-archive``,
 | 
						|
``aclocal`` and ``pkg-config`` versions.
 | 
						|
 | 
						|
 | 
						|
.. _configure-options:
 | 
						|
 | 
						|
Configure Options
 | 
						|
=================
 | 
						|
 | 
						|
List all :file:`configure` script options using::
 | 
						|
 | 
						|
    ./configure --help
 | 
						|
 | 
						|
See also the :file:`Misc/SpecialBuilds.txt` in the Python source distribution.
 | 
						|
 | 
						|
General Options
 | 
						|
---------------
 | 
						|
 | 
						|
.. option:: --enable-loadable-sqlite-extensions
 | 
						|
 | 
						|
   Support loadable extensions in the :mod:`!_sqlite` extension module (default
 | 
						|
   is no) of the :mod:`sqlite3` module.
 | 
						|
 | 
						|
   See the :meth:`sqlite3.Connection.enable_load_extension` method of the
 | 
						|
   :mod:`sqlite3` module.
 | 
						|
 | 
						|
   .. versionadded:: 3.6
 | 
						|
 | 
						|
.. option:: --disable-ipv6
 | 
						|
 | 
						|
   Disable IPv6 support (enabled by default if supported), see the
 | 
						|
   :mod:`socket` module.
 | 
						|
 | 
						|
.. option:: --enable-big-digits=[15|30]
 | 
						|
 | 
						|
   Define the size in bits of Python :class:`int` digits: 15 or 30 bits.
 | 
						|
 | 
						|
   By default, the digit size is 30.
 | 
						|
 | 
						|
   Define the ``PYLONG_BITS_IN_DIGIT`` to ``15`` or ``30``.
 | 
						|
 | 
						|
   See :data:`sys.int_info.bits_per_digit <sys.int_info>`.
 | 
						|
 | 
						|
.. option:: --with-suffix=SUFFIX
 | 
						|
 | 
						|
   Set the Python executable suffix to *SUFFIX*.
 | 
						|
 | 
						|
   The default suffix is ``.exe`` on Windows and macOS (``python.exe``
 | 
						|
   executable), ``.js`` on Emscripten node, ``.html`` on Emscripten browser,
 | 
						|
   ``.wasm`` on WASI, and an empty string on other platforms (``python``
 | 
						|
   executable).
 | 
						|
 | 
						|
   .. versionchanged:: 3.11
 | 
						|
      The default suffix on WASM platform is one of ``.js``, ``.html``
 | 
						|
      or ``.wasm``.
 | 
						|
 | 
						|
.. option:: --with-tzpath=<list of absolute paths separated by pathsep>
 | 
						|
 | 
						|
   Select the default time zone search path for :const:`zoneinfo.TZPATH`.
 | 
						|
   See the :ref:`Compile-time configuration
 | 
						|
   <zoneinfo_data_compile_time_config>` of the :mod:`zoneinfo` module.
 | 
						|
 | 
						|
   Default: ``/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo``.
 | 
						|
 | 
						|
   See :data:`os.pathsep` path separator.
 | 
						|
 | 
						|
   .. versionadded:: 3.9
 | 
						|
 | 
						|
.. option:: --without-decimal-contextvar
 | 
						|
 | 
						|
   Build the ``_decimal`` extension module using a thread-local context rather
 | 
						|
   than a coroutine-local context (default), see the :mod:`decimal` module.
 | 
						|
 | 
						|
   See :const:`decimal.HAVE_CONTEXTVAR` and the :mod:`contextvars` module.
 | 
						|
 | 
						|
   .. versionadded:: 3.9
 | 
						|
 | 
						|
.. option:: --with-dbmliborder=<list of backend names>
 | 
						|
 | 
						|
   Override order to check db backends for the :mod:`dbm` module
 | 
						|
 | 
						|
   A valid value is a colon (``:``) separated string with the backend names:
 | 
						|
 | 
						|
   * ``ndbm``;
 | 
						|
   * ``gdbm``;
 | 
						|
   * ``bdb``.
 | 
						|
 | 
						|
.. option:: --without-c-locale-coercion
 | 
						|
 | 
						|
   Disable C locale coercion to a UTF-8 based locale (enabled by default).
 | 
						|
 | 
						|
   Don't define the ``PY_COERCE_C_LOCALE`` macro.
 | 
						|
 | 
						|
   See :envvar:`PYTHONCOERCECLOCALE` and the :pep:`538`.
 | 
						|
 | 
						|
.. option:: --without-freelists
 | 
						|
 | 
						|
   Disable all freelists except the empty tuple singleton.
 | 
						|
 | 
						|
   .. versionadded:: 3.11
 | 
						|
 | 
						|
.. option:: --with-platlibdir=DIRNAME
 | 
						|
 | 
						|
   Python library directory name (default is ``lib``).
 | 
						|
 | 
						|
   Fedora and SuSE use ``lib64`` on 64-bit platforms.
 | 
						|
 | 
						|
   See :data:`sys.platlibdir`.
 | 
						|
 | 
						|
   .. versionadded:: 3.9
 | 
						|
 | 
						|
.. option:: --with-wheel-pkg-dir=PATH
 | 
						|
 | 
						|
   Directory of wheel packages used by the :mod:`ensurepip` module
 | 
						|
   (none by default).
 | 
						|
 | 
						|
   Some Linux distribution packaging policies recommend against bundling
 | 
						|
   dependencies. For example, Fedora installs wheel packages in the
 | 
						|
   ``/usr/share/python-wheels/`` directory and don't install the
 | 
						|
   :mod:`!ensurepip._bundled` package.
 | 
						|
 | 
						|
   .. versionadded:: 3.10
 | 
						|
 | 
						|
.. option:: --with-pkg-config=[check|yes|no]
 | 
						|
 | 
						|
   Whether configure should use :program:`pkg-config` to detect build
 | 
						|
   dependencies.
 | 
						|
 | 
						|
   * ``check`` (default): :program:`pkg-config` is optional
 | 
						|
   * ``yes``: :program:`pkg-config` is mandatory
 | 
						|
   * ``no``: configure does not use :program:`pkg-config` even when present
 | 
						|
 | 
						|
   .. versionadded:: 3.11
 | 
						|
 | 
						|
.. option:: --enable-pystats
 | 
						|
 | 
						|
   Turn on internal Python performance statistics gathering.
 | 
						|
 | 
						|
   By default, statistics gathering is off. Use ``python3 -X pystats`` command
 | 
						|
   or set ``PYTHONSTATS=1`` environment variable to turn on statistics
 | 
						|
   gathering at Python startup.
 | 
						|
 | 
						|
   At Python exit, dump statistics if statistics gathering was on and not
 | 
						|
   cleared.
 | 
						|
 | 
						|
   Effects:
 | 
						|
 | 
						|
   * Add :option:`-X pystats <-X>` command line option.
 | 
						|
   * Add :envvar:`!PYTHONSTATS` environment variable.
 | 
						|
   * Define the ``Py_STATS`` macro.
 | 
						|
   * Add functions to the :mod:`sys` module:
 | 
						|
 | 
						|
     * :func:`!sys._stats_on`: Turns on statistics gathering.
 | 
						|
     * :func:`!sys._stats_off`: Turns off statistics gathering.
 | 
						|
     * :func:`!sys._stats_clear`: Clears the statistics.
 | 
						|
     * :func:`!sys._stats_dump`: Dump statistics to file, and clears the statistics.
 | 
						|
 | 
						|
   The statistics will be dumped to a arbitrary (probably unique) file in
 | 
						|
   ``/tmp/py_stats/`` (Unix) or ``C:\temp\py_stats\`` (Windows). If that
 | 
						|
   directory does not exist, results will be printed on stderr.
 | 
						|
 | 
						|
   Use ``Tools/scripts/summarize_stats.py`` to read the stats.
 | 
						|
 | 
						|
   Statistics:
 | 
						|
 | 
						|
   * Opcode:
 | 
						|
 | 
						|
     * Specialization: success, failure, hit, deferred, miss, deopt, failures;
 | 
						|
     * Execution count;
 | 
						|
     * Pair count.
 | 
						|
 | 
						|
   * Call:
 | 
						|
 | 
						|
     * Inlined Python calls;
 | 
						|
     * PyEval calls;
 | 
						|
     * Frames pushed;
 | 
						|
     * Frame object created;
 | 
						|
     * Eval calls: vector, generator, legacy, function VECTORCALL, build class,
 | 
						|
       slot, function "ex", API, method.
 | 
						|
 | 
						|
   * Object:
 | 
						|
 | 
						|
     * incref and decref;
 | 
						|
     * interpreter incref and decref;
 | 
						|
     * allocations: all, 512 bytes, 4 kiB, big;
 | 
						|
     * free;
 | 
						|
     * to/from free lists;
 | 
						|
     * dictionary materialized/dematerialized;
 | 
						|
     * type cache;
 | 
						|
     * optimization attempts;
 | 
						|
     * optimization traces created/executed;
 | 
						|
     * uops executed.
 | 
						|
 | 
						|
   * Garbage collector:
 | 
						|
 | 
						|
     * Garbage collections;
 | 
						|
     * Objects visited;
 | 
						|
     * Objects collected.
 | 
						|
 | 
						|
   .. versionadded:: 3.11
 | 
						|
 | 
						|
.. _free-threading-build:
 | 
						|
 | 
						|
.. option:: --disable-gil
 | 
						|
 | 
						|
   Enables **experimental** support for running Python without the
 | 
						|
   :term:`global interpreter lock` (GIL): free threading build.
 | 
						|
 | 
						|
   Defines the ``Py_GIL_DISABLED`` macro and adds ``"t"`` to
 | 
						|
   :data:`sys.abiflags`.
 | 
						|
 | 
						|
   See :ref:`free-threaded-cpython` for more detail.
 | 
						|
 | 
						|
   .. versionadded:: 3.13
 | 
						|
 | 
						|
.. option:: PKG_CONFIG
 | 
						|
 | 
						|
   Path to ``pkg-config`` utility.
 | 
						|
 | 
						|
.. option:: PKG_CONFIG_LIBDIR
 | 
						|
.. option:: PKG_CONFIG_PATH
 | 
						|
 | 
						|
   ``pkg-config`` options.
 | 
						|
 | 
						|
 | 
						|
C compiler options
 | 
						|
------------------
 | 
						|
 | 
						|
.. option:: CC
 | 
						|
 | 
						|
   C compiler command.
 | 
						|
 | 
						|
.. option:: CFLAGS
 | 
						|
 | 
						|
   C compiler flags.
 | 
						|
 | 
						|
.. option:: CPP
 | 
						|
 | 
						|
   C preprocessor command.
 | 
						|
 | 
						|
.. option:: CPPFLAGS
 | 
						|
 | 
						|
   C preprocessor flags, e.g. :samp:`-I{include_dir}`.
 | 
						|
 | 
						|
 | 
						|
Linker options
 | 
						|
--------------
 | 
						|
 | 
						|
.. option:: LDFLAGS
 | 
						|
 | 
						|
   Linker flags, e.g. :samp:`-L{library_directory}`.
 | 
						|
 | 
						|
.. option:: LIBS
 | 
						|
 | 
						|
   Libraries to pass to the linker, e.g. :samp:`-l{library}`.
 | 
						|
 | 
						|
.. option:: MACHDEP
 | 
						|
 | 
						|
   Name for machine-dependent library files.
 | 
						|
 | 
						|
 | 
						|
Options for third-party dependencies
 | 
						|
------------------------------------
 | 
						|
 | 
						|
.. versionadded:: 3.11
 | 
						|
 | 
						|
.. option:: BZIP2_CFLAGS
 | 
						|
.. option:: BZIP2_LIBS
 | 
						|
 | 
						|
   C compiler and linker flags to link Python to ``libbz2``, used by :mod:`bz2`
 | 
						|
   module, overriding ``pkg-config``.
 | 
						|
 | 
						|
.. option:: CURSES_CFLAGS
 | 
						|
.. option:: CURSES_LIBS
 | 
						|
 | 
						|
   C compiler and linker flags for ``libncurses`` or ``libncursesw``, used by
 | 
						|
   :mod:`curses` module, overriding ``pkg-config``.
 | 
						|
 | 
						|
.. option:: GDBM_CFLAGS
 | 
						|
.. option:: GDBM_LIBS
 | 
						|
 | 
						|
   C compiler and linker flags for ``gdbm``.
 | 
						|
 | 
						|
.. option:: LIBB2_CFLAGS
 | 
						|
.. option:: LIBB2_LIBS
 | 
						|
 | 
						|
   C compiler and linker flags for ``libb2`` (:ref:`BLAKE2 <hashlib-blake2>`),
 | 
						|
   used by :mod:`hashlib` module, overriding ``pkg-config``.
 | 
						|
 | 
						|
.. option:: LIBEDIT_CFLAGS
 | 
						|
.. option:: LIBEDIT_LIBS
 | 
						|
 | 
						|
   C compiler and linker flags for ``libedit``, used by :mod:`readline` module,
 | 
						|
   overriding ``pkg-config``.
 | 
						|
 | 
						|
.. option:: LIBFFI_CFLAGS
 | 
						|
.. option:: LIBFFI_LIBS
 | 
						|
 | 
						|
   C compiler and linker flags for ``libffi``, used by :mod:`ctypes` module,
 | 
						|
   overriding ``pkg-config``.
 | 
						|
 | 
						|
.. option:: LIBMPDEC_CFLAGS
 | 
						|
.. option:: LIBMPDEC_LIBS
 | 
						|
 | 
						|
   C compiler and linker flags for ``libmpdec``, used by :mod:`decimal` module,
 | 
						|
   overriding ``pkg-config``.
 | 
						|
 | 
						|
   .. note::
 | 
						|
 | 
						|
      These environment variables have no effect unless
 | 
						|
      :option:`--with-system-libmpdec` is specified.
 | 
						|
 | 
						|
.. option:: LIBLZMA_CFLAGS
 | 
						|
.. option:: LIBLZMA_LIBS
 | 
						|
 | 
						|
   C compiler and linker flags for ``liblzma``, used by :mod:`lzma` module,
 | 
						|
   overriding ``pkg-config``.
 | 
						|
 | 
						|
.. option:: LIBREADLINE_CFLAGS
 | 
						|
.. option:: LIBREADLINE_LIBS
 | 
						|
 | 
						|
   C compiler and linker flags for ``libreadline``, used by :mod:`readline`
 | 
						|
   module, overriding ``pkg-config``.
 | 
						|
 | 
						|
.. option:: LIBSQLITE3_CFLAGS
 | 
						|
.. option:: LIBSQLITE3_LIBS
 | 
						|
 | 
						|
   C compiler and linker flags for ``libsqlite3``, used by :mod:`sqlite3`
 | 
						|
   module, overriding ``pkg-config``.
 | 
						|
 | 
						|
.. option:: LIBUUID_CFLAGS
 | 
						|
.. option:: LIBUUID_LIBS
 | 
						|
 | 
						|
   C compiler and linker flags for ``libuuid``, used by :mod:`uuid` module,
 | 
						|
   overriding ``pkg-config``.
 | 
						|
 | 
						|
.. option:: PANEL_CFLAGS
 | 
						|
.. option:: PANEL_LIBS
 | 
						|
 | 
						|
   C compiler and Linker flags for PANEL, overriding ``pkg-config``.
 | 
						|
 | 
						|
   C compiler and linker flags for ``libpanel`` or ``libpanelw``, used by
 | 
						|
   :mod:`curses.panel` module, overriding ``pkg-config``.
 | 
						|
 | 
						|
.. option:: TCLTK_CFLAGS
 | 
						|
.. option:: TCLTK_LIBS
 | 
						|
 | 
						|
   C compiler and linker flags for TCLTK, overriding ``pkg-config``.
 | 
						|
 | 
						|
.. option:: ZLIB_CFLAGS
 | 
						|
.. option:: ZLIB_LIBS
 | 
						|
 | 
						|
   C compiler and linker flags for ``libzlib``, used by :mod:`gzip` module,
 | 
						|
   overriding ``pkg-config``.
 | 
						|
 | 
						|
 | 
						|
WebAssembly Options
 | 
						|
-------------------
 | 
						|
 | 
						|
.. option:: --with-emscripten-target=[browser|node]
 | 
						|
 | 
						|
   Set build flavor for ``wasm32-emscripten``.
 | 
						|
 | 
						|
   * ``browser`` (default): preload minimal stdlib, default MEMFS.
 | 
						|
   * ``node``: NODERAWFS and pthread support.
 | 
						|
 | 
						|
   .. versionadded:: 3.11
 | 
						|
 | 
						|
.. option:: --enable-wasm-dynamic-linking
 | 
						|
 | 
						|
   Turn on dynamic linking support for WASM.
 | 
						|
 | 
						|
   Dynamic linking enables ``dlopen``. File size of the executable
 | 
						|
   increases due to limited dead code elimination and additional features.
 | 
						|
 | 
						|
   .. versionadded:: 3.11
 | 
						|
 | 
						|
.. option:: --enable-wasm-pthreads
 | 
						|
 | 
						|
   Turn on pthreads support for WASM.
 | 
						|
 | 
						|
   .. versionadded:: 3.11
 | 
						|
 | 
						|
 | 
						|
Install Options
 | 
						|
---------------
 | 
						|
 | 
						|
.. option:: --prefix=PREFIX
 | 
						|
 | 
						|
   Install architecture-independent files in PREFIX. On Unix, it
 | 
						|
   defaults to :file:`/usr/local`.
 | 
						|
 | 
						|
   This value can be retrieved at runtime using :data:`sys.prefix`.
 | 
						|
 | 
						|
   As an example, one can use ``--prefix="$HOME/.local/"`` to install
 | 
						|
   a Python in its home directory.
 | 
						|
 | 
						|
.. option:: --exec-prefix=EPREFIX
 | 
						|
 | 
						|
   Install architecture-dependent files in EPREFIX, defaults to :option:`--prefix`.
 | 
						|
 | 
						|
   This value can be retrieved at runtime using :data:`sys.exec_prefix`.
 | 
						|
 | 
						|
.. option:: --disable-test-modules
 | 
						|
 | 
						|
   Don't build nor install test modules, like the :mod:`test` package or the
 | 
						|
   :mod:`!_testcapi` extension module (built and installed by default).
 | 
						|
 | 
						|
   .. versionadded:: 3.10
 | 
						|
 | 
						|
.. option:: --with-ensurepip=[upgrade|install|no]
 | 
						|
 | 
						|
   Select the :mod:`ensurepip` command run on Python installation:
 | 
						|
 | 
						|
   * ``upgrade`` (default): run ``python -m ensurepip --altinstall --upgrade``
 | 
						|
     command.
 | 
						|
   * ``install``: run ``python -m ensurepip --altinstall`` command;
 | 
						|
   * ``no``: don't run ensurepip;
 | 
						|
 | 
						|
   .. versionadded:: 3.6
 | 
						|
 | 
						|
 | 
						|
Performance options
 | 
						|
-------------------
 | 
						|
 | 
						|
Configuring Python using ``--enable-optimizations --with-lto`` (PGO + LTO) is
 | 
						|
recommended for best performance. The experimental ``--enable-bolt`` flag can
 | 
						|
also be used to improve performance.
 | 
						|
 | 
						|
.. option:: --enable-optimizations
 | 
						|
 | 
						|
   Enable Profile Guided Optimization (PGO) using :envvar:`PROFILE_TASK`
 | 
						|
   (disabled by default).
 | 
						|
 | 
						|
   The C compiler Clang requires ``llvm-profdata`` program for PGO. On
 | 
						|
   macOS, GCC also requires it: GCC is just an alias to Clang on macOS.
 | 
						|
 | 
						|
   Disable also semantic interposition in libpython if ``--enable-shared`` and
 | 
						|
   GCC is used: add ``-fno-semantic-interposition`` to the compiler and linker
 | 
						|
   flags.
 | 
						|
 | 
						|
   .. note::
 | 
						|
 | 
						|
      During the build, you may encounter compiler warnings about
 | 
						|
      profile data not being available for some source files.
 | 
						|
      These warnings are harmless, as only a subset of the code is exercised
 | 
						|
      during profile data acquisition.
 | 
						|
      To disable these warnings on Clang, manually suppress them by adding
 | 
						|
      ``-Wno-profile-instr-unprofiled`` to :envvar:`CFLAGS`.
 | 
						|
 | 
						|
   .. versionadded:: 3.6
 | 
						|
 | 
						|
   .. versionchanged:: 3.10
 | 
						|
      Use ``-fno-semantic-interposition`` on GCC.
 | 
						|
 | 
						|
.. envvar:: PROFILE_TASK
 | 
						|
 | 
						|
   Environment variable used in the Makefile: Python command line arguments for
 | 
						|
   the PGO generation task.
 | 
						|
 | 
						|
   Default: ``-m test --pgo --timeout=$(TESTTIMEOUT)``.
 | 
						|
 | 
						|
   .. versionadded:: 3.8
 | 
						|
 | 
						|
   .. versionchanged:: 3.13
 | 
						|
      Task failure is no longer ignored silently.
 | 
						|
 | 
						|
.. option:: --with-lto=[full|thin|no|yes]
 | 
						|
 | 
						|
   Enable Link Time Optimization (LTO) in any build (disabled by default).
 | 
						|
 | 
						|
   The C compiler Clang requires ``llvm-ar`` for LTO (``ar`` on macOS), as well
 | 
						|
   as an LTO-aware linker (``ld.gold`` or ``lld``).
 | 
						|
 | 
						|
   .. versionadded:: 3.6
 | 
						|
 | 
						|
   .. versionadded:: 3.11
 | 
						|
      To use ThinLTO feature, use ``--with-lto=thin`` on Clang.
 | 
						|
 | 
						|
   .. versionchanged:: 3.12
 | 
						|
      Use ThinLTO as the default optimization policy on Clang if the compiler accepts the flag.
 | 
						|
 | 
						|
.. option:: --enable-bolt
 | 
						|
 | 
						|
   Enable usage of the `BOLT post-link binary optimizer
 | 
						|
   <https://github.com/llvm/llvm-project/tree/main/bolt>`_ (disabled by
 | 
						|
   default).
 | 
						|
 | 
						|
   BOLT is part of the LLVM project but is not always included in their binary
 | 
						|
   distributions. This flag requires that ``llvm-bolt`` and ``merge-fdata``
 | 
						|
   are available.
 | 
						|
 | 
						|
   BOLT is still a fairly new project so this flag should be considered
 | 
						|
   experimental for now. Because this tool operates on machine code its success
 | 
						|
   is dependent on a combination of the build environment + the other
 | 
						|
   optimization configure args + the CPU architecture, and not all combinations
 | 
						|
   are supported.
 | 
						|
   BOLT versions before LLVM 16 are known to crash BOLT under some scenarios.
 | 
						|
   Use of LLVM 16 or newer for BOLT optimization is strongly encouraged.
 | 
						|
 | 
						|
   The :envvar:`!BOLT_INSTRUMENT_FLAGS` and :envvar:`!BOLT_APPLY_FLAGS`
 | 
						|
   :program:`configure` variables can be defined to override the default set of
 | 
						|
   arguments for :program:`llvm-bolt` to instrument and apply BOLT data to
 | 
						|
   binaries, respectively.
 | 
						|
 | 
						|
   .. versionadded:: 3.12
 | 
						|
 | 
						|
.. option:: BOLT_APPLY_FLAGS
 | 
						|
 | 
						|
   Arguments to ``llvm-bolt`` when creating a `BOLT optimized binary
 | 
						|
   <https://github.com/facebookarchive/BOLT>`_.
 | 
						|
 | 
						|
   .. versionadded:: 3.12
 | 
						|
 | 
						|
.. option:: BOLT_INSTRUMENT_FLAGS
 | 
						|
 | 
						|
   Arguments to ``llvm-bolt`` when instrumenting binaries.
 | 
						|
 | 
						|
   .. versionadded:: 3.12
 | 
						|
 | 
						|
.. option:: --with-computed-gotos
 | 
						|
 | 
						|
   Enable computed gotos in evaluation loop (enabled by default on supported
 | 
						|
   compilers).
 | 
						|
 | 
						|
.. option:: --without-mimalloc
 | 
						|
 | 
						|
   Disable the fast mimalloc allocator :ref:`mimalloc <mimalloc>`
 | 
						|
   (enabled by default).
 | 
						|
 | 
						|
   See also :envvar:`PYTHONMALLOC` environment variable.
 | 
						|
 | 
						|
.. option:: --without-pymalloc
 | 
						|
 | 
						|
   Disable the specialized Python memory allocator :ref:`pymalloc <pymalloc>`
 | 
						|
   (enabled by default).
 | 
						|
 | 
						|
   See also :envvar:`PYTHONMALLOC` environment variable.
 | 
						|
 | 
						|
.. option:: --without-doc-strings
 | 
						|
 | 
						|
   Disable static documentation strings to reduce the memory footprint (enabled
 | 
						|
   by default). Documentation strings defined in Python are not affected.
 | 
						|
 | 
						|
   Don't define the ``WITH_DOC_STRINGS`` macro.
 | 
						|
 | 
						|
   See the ``PyDoc_STRVAR()`` macro.
 | 
						|
 | 
						|
.. option:: --enable-profiling
 | 
						|
 | 
						|
   Enable C-level code profiling with ``gprof`` (disabled by default).
 | 
						|
 | 
						|
.. option:: --with-strict-overflow
 | 
						|
 | 
						|
   Add ``-fstrict-overflow`` to the C compiler flags (by default we add
 | 
						|
   ``-fno-strict-overflow`` instead).
 | 
						|
 | 
						|
 | 
						|
.. _debug-build:
 | 
						|
 | 
						|
Python Debug Build
 | 
						|
------------------
 | 
						|
 | 
						|
A debug build is Python built with the :option:`--with-pydebug` configure
 | 
						|
option.
 | 
						|
 | 
						|
Effects of a debug build:
 | 
						|
 | 
						|
* Display all warnings by default: the list of default warning filters is empty
 | 
						|
  in the :mod:`warnings` module.
 | 
						|
* Add ``d`` to :data:`sys.abiflags`.
 | 
						|
* Add :func:`!sys.gettotalrefcount` function.
 | 
						|
* Add :option:`-X showrefcount <-X>` command line option.
 | 
						|
* Add :option:`-d` command line option and :envvar:`PYTHONDEBUG` environment
 | 
						|
  variable to debug the parser.
 | 
						|
* Add support for the ``__lltrace__`` variable: enable low-level tracing in the
 | 
						|
  bytecode evaluation loop if the variable is defined.
 | 
						|
* Install :ref:`debug hooks on memory allocators <default-memory-allocators>`
 | 
						|
  to detect buffer overflow and other memory errors.
 | 
						|
* Define ``Py_DEBUG`` and ``Py_REF_DEBUG`` macros.
 | 
						|
* Add runtime checks: code surrounded by ``#ifdef Py_DEBUG`` and ``#endif``.
 | 
						|
  Enable ``assert(...)`` and ``_PyObject_ASSERT(...)`` assertions: don't set
 | 
						|
  the ``NDEBUG`` macro (see also the :option:`--with-assertions` configure
 | 
						|
  option). Main runtime checks:
 | 
						|
 | 
						|
  * Add sanity checks on the function arguments.
 | 
						|
  * Unicode and int objects are created with their memory filled with a pattern
 | 
						|
    to detect usage of uninitialized objects.
 | 
						|
  * Ensure that functions which can clear or replace the current exception are
 | 
						|
    not called with an exception raised.
 | 
						|
  * Check that deallocator functions don't change the current exception.
 | 
						|
  * The garbage collector (:func:`gc.collect` function) runs some basic checks
 | 
						|
    on objects consistency.
 | 
						|
  * The :c:macro:`!Py_SAFE_DOWNCAST()` macro checks for integer underflow and
 | 
						|
    overflow when downcasting from wide types to narrow types.
 | 
						|
 | 
						|
See also the :ref:`Python Development Mode <devmode>` and the
 | 
						|
:option:`--with-trace-refs` configure option.
 | 
						|
 | 
						|
.. versionchanged:: 3.8
 | 
						|
   Release builds and debug builds are now ABI compatible: defining the
 | 
						|
   ``Py_DEBUG`` macro no longer implies the ``Py_TRACE_REFS`` macro (see the
 | 
						|
   :option:`--with-trace-refs` option).
 | 
						|
 | 
						|
 | 
						|
Debug options
 | 
						|
-------------
 | 
						|
 | 
						|
.. option:: --with-pydebug
 | 
						|
 | 
						|
   :ref:`Build Python in debug mode <debug-build>`: define the ``Py_DEBUG``
 | 
						|
   macro (disabled by default).
 | 
						|
 | 
						|
.. option:: --with-trace-refs
 | 
						|
 | 
						|
   Enable tracing references for debugging purpose (disabled by default).
 | 
						|
 | 
						|
   Effects:
 | 
						|
 | 
						|
   * Define the ``Py_TRACE_REFS`` macro.
 | 
						|
   * Add :func:`!sys.getobjects` function.
 | 
						|
   * Add :envvar:`PYTHONDUMPREFS` environment variable.
 | 
						|
 | 
						|
   The :envvar:`PYTHONDUMPREFS` environment variable can be used to dump
 | 
						|
   objects and reference counts still alive at Python exit.
 | 
						|
 | 
						|
   :ref:`Statically allocated objects <static-types>` are not traced.
 | 
						|
 | 
						|
   .. versionadded:: 3.8
 | 
						|
 | 
						|
   .. versionchanged:: 3.13
 | 
						|
      This build is now ABI compatible with release build and :ref:`debug build
 | 
						|
      <debug-build>`.
 | 
						|
 | 
						|
.. option:: --with-assertions
 | 
						|
 | 
						|
   Build with C assertions enabled (default is no): ``assert(...);`` and
 | 
						|
   ``_PyObject_ASSERT(...);``.
 | 
						|
 | 
						|
   If set, the ``NDEBUG`` macro is not defined in the :envvar:`OPT` compiler
 | 
						|
   variable.
 | 
						|
 | 
						|
   See also the :option:`--with-pydebug` option (:ref:`debug build
 | 
						|
   <debug-build>`) which also enables assertions.
 | 
						|
 | 
						|
   .. versionadded:: 3.6
 | 
						|
 | 
						|
.. option:: --with-valgrind
 | 
						|
 | 
						|
   Enable Valgrind support (default is no).
 | 
						|
 | 
						|
.. option:: --with-dtrace
 | 
						|
 | 
						|
   Enable DTrace support (default is no).
 | 
						|
 | 
						|
   See :ref:`Instrumenting CPython with DTrace and SystemTap
 | 
						|
   <instrumentation>`.
 | 
						|
 | 
						|
   .. versionadded:: 3.6
 | 
						|
 | 
						|
.. option:: --with-address-sanitizer
 | 
						|
 | 
						|
   Enable AddressSanitizer memory error detector, ``asan`` (default is no).
 | 
						|
 | 
						|
   .. versionadded:: 3.6
 | 
						|
 | 
						|
.. option:: --with-memory-sanitizer
 | 
						|
 | 
						|
   Enable MemorySanitizer allocation error detector, ``msan`` (default is no).
 | 
						|
 | 
						|
   .. versionadded:: 3.6
 | 
						|
 | 
						|
.. option:: --with-undefined-behavior-sanitizer
 | 
						|
 | 
						|
   Enable UndefinedBehaviorSanitizer undefined behaviour detector, ``ubsan``
 | 
						|
   (default is no).
 | 
						|
 | 
						|
   .. versionadded:: 3.6
 | 
						|
 | 
						|
.. option:: --with-thread-sanitizer
 | 
						|
 | 
						|
   Enable ThreadSanitizer data race detector, ``tsan``
 | 
						|
   (default is no).
 | 
						|
 | 
						|
   .. versionadded:: 3.13
 | 
						|
 | 
						|
 | 
						|
Linker options
 | 
						|
--------------
 | 
						|
 | 
						|
.. option:: --enable-shared
 | 
						|
 | 
						|
   Enable building a shared Python library: ``libpython`` (default is no).
 | 
						|
 | 
						|
.. option:: --without-static-libpython
 | 
						|
 | 
						|
   Do not build ``libpythonMAJOR.MINOR.a`` and do not install ``python.o``
 | 
						|
   (built and enabled by default).
 | 
						|
 | 
						|
   .. versionadded:: 3.10
 | 
						|
 | 
						|
 | 
						|
Libraries options
 | 
						|
-----------------
 | 
						|
 | 
						|
.. option:: --with-libs='lib1 ...'
 | 
						|
 | 
						|
   Link against additional libraries (default is no).
 | 
						|
 | 
						|
.. option:: --with-system-expat
 | 
						|
 | 
						|
   Build the :mod:`!pyexpat` module using an installed ``expat`` library
 | 
						|
   (default is no).
 | 
						|
 | 
						|
.. option:: --with-system-libmpdec
 | 
						|
 | 
						|
   Build the ``_decimal`` extension module using an installed ``mpdecimal``
 | 
						|
   library, see the :mod:`decimal` module (default is yes).
 | 
						|
 | 
						|
   .. versionadded:: 3.3
 | 
						|
 | 
						|
   .. versionchanged:: 3.13
 | 
						|
      Default to using the installed ``mpdecimal`` library.
 | 
						|
 | 
						|
   .. deprecated-removed:: 3.13 3.15
 | 
						|
      A copy of the ``mpdecimal`` library sources will no longer be distributed
 | 
						|
      with Python 3.15.
 | 
						|
 | 
						|
   .. seealso:: :option:`LIBMPDEC_CFLAGS` and :option:`LIBMPDEC_LIBS`.
 | 
						|
 | 
						|
.. option:: --with-readline=readline|editline
 | 
						|
 | 
						|
   Designate a backend library for the :mod:`readline` module.
 | 
						|
 | 
						|
   * readline: Use readline as the backend.
 | 
						|
   * editline: Use editline as the backend.
 | 
						|
 | 
						|
   .. versionadded:: 3.10
 | 
						|
 | 
						|
.. option:: --without-readline
 | 
						|
 | 
						|
   Don't build the :mod:`readline` module (built by default).
 | 
						|
 | 
						|
   Don't define the ``HAVE_LIBREADLINE`` macro.
 | 
						|
 | 
						|
   .. versionadded:: 3.10
 | 
						|
 | 
						|
.. option:: --with-libm=STRING
 | 
						|
 | 
						|
   Override ``libm`` math library to *STRING* (default is system-dependent).
 | 
						|
 | 
						|
.. option:: --with-libc=STRING
 | 
						|
 | 
						|
   Override ``libc`` C library to *STRING* (default is system-dependent).
 | 
						|
 | 
						|
.. option:: --with-openssl=DIR
 | 
						|
 | 
						|
   Root of the OpenSSL directory.
 | 
						|
 | 
						|
   .. versionadded:: 3.7
 | 
						|
 | 
						|
.. option:: --with-openssl-rpath=[no|auto|DIR]
 | 
						|
 | 
						|
   Set runtime library directory (rpath) for OpenSSL libraries:
 | 
						|
 | 
						|
   * ``no`` (default): don't set rpath;
 | 
						|
   * ``auto``: auto-detect rpath from :option:`--with-openssl` and
 | 
						|
     ``pkg-config``;
 | 
						|
   * *DIR*: set an explicit rpath.
 | 
						|
 | 
						|
   .. versionadded:: 3.10
 | 
						|
 | 
						|
 | 
						|
Security Options
 | 
						|
----------------
 | 
						|
 | 
						|
.. option:: --with-hash-algorithm=[fnv|siphash13|siphash24]
 | 
						|
 | 
						|
   Select hash algorithm for use in ``Python/pyhash.c``:
 | 
						|
 | 
						|
   * ``siphash13`` (default);
 | 
						|
   * ``siphash24``;
 | 
						|
   * ``fnv``.
 | 
						|
 | 
						|
   .. versionadded:: 3.4
 | 
						|
 | 
						|
   .. versionadded:: 3.11
 | 
						|
      ``siphash13`` is added and it is the new default.
 | 
						|
 | 
						|
.. option:: --with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2
 | 
						|
 | 
						|
   Built-in hash modules:
 | 
						|
 | 
						|
   * ``md5``;
 | 
						|
   * ``sha1``;
 | 
						|
   * ``sha256``;
 | 
						|
   * ``sha512``;
 | 
						|
   * ``sha3`` (with shake);
 | 
						|
   * ``blake2``.
 | 
						|
 | 
						|
   .. versionadded:: 3.9
 | 
						|
 | 
						|
.. option:: --with-ssl-default-suites=[python|openssl|STRING]
 | 
						|
 | 
						|
   Override the OpenSSL default cipher suites string:
 | 
						|
 | 
						|
   * ``python`` (default): use Python's preferred selection;
 | 
						|
   * ``openssl``: leave OpenSSL's defaults untouched;
 | 
						|
   * *STRING*: use a custom string
 | 
						|
 | 
						|
   See the :mod:`ssl` module.
 | 
						|
 | 
						|
   .. versionadded:: 3.7
 | 
						|
 | 
						|
   .. versionchanged:: 3.10
 | 
						|
 | 
						|
      The settings ``python`` and *STRING* also set TLS 1.2 as minimum
 | 
						|
      protocol version.
 | 
						|
 | 
						|
macOS Options
 | 
						|
-------------
 | 
						|
 | 
						|
See :source:`Mac/README.rst`.
 | 
						|
 | 
						|
.. option:: --enable-universalsdk
 | 
						|
.. option:: --enable-universalsdk=SDKDIR
 | 
						|
 | 
						|
   Create a universal binary build. *SDKDIR* specifies which macOS SDK should
 | 
						|
   be used to perform the build (default is no).
 | 
						|
 | 
						|
.. option:: --enable-framework
 | 
						|
.. option:: --enable-framework=INSTALLDIR
 | 
						|
 | 
						|
   Create a Python.framework rather than a traditional Unix install. Optional
 | 
						|
   *INSTALLDIR* specifies the installation path (default is no).
 | 
						|
 | 
						|
.. option:: --with-universal-archs=ARCH
 | 
						|
 | 
						|
   Specify the kind of universal binary that should be created. This option is
 | 
						|
   only valid when :option:`--enable-universalsdk` is set.
 | 
						|
 | 
						|
   Options:
 | 
						|
 | 
						|
   * ``universal2``;
 | 
						|
   * ``32-bit``;
 | 
						|
   * ``64-bit``;
 | 
						|
   * ``3-way``;
 | 
						|
   * ``intel``;
 | 
						|
   * ``intel-32``;
 | 
						|
   * ``intel-64``;
 | 
						|
   * ``all``.
 | 
						|
 | 
						|
.. option:: --with-framework-name=FRAMEWORK
 | 
						|
 | 
						|
   Specify the name for the python framework on macOS only valid when
 | 
						|
   :option:`--enable-framework` is set (default: ``Python``).
 | 
						|
 | 
						|
iOS Options
 | 
						|
-----------
 | 
						|
 | 
						|
See :source:`iOS/README.rst`.
 | 
						|
 | 
						|
.. option:: --enable-framework=INSTALLDIR
 | 
						|
 | 
						|
   Create a Python.framework. Unlike macOS, the *INSTALLDIR* argument
 | 
						|
   specifying the installation path is mandatory.
 | 
						|
 | 
						|
.. option:: --with-framework-name=FRAMEWORK
 | 
						|
 | 
						|
   Specify the name for the framework (default: ``Python``).
 | 
						|
 | 
						|
 | 
						|
Cross Compiling Options
 | 
						|
-----------------------
 | 
						|
 | 
						|
Cross compiling, also known as cross building, can be used to build Python
 | 
						|
for another CPU architecture or platform. Cross compiling requires a Python
 | 
						|
interpreter for the build platform. The version of the build Python must match
 | 
						|
the version of the cross compiled host Python.
 | 
						|
 | 
						|
.. option:: --build=BUILD
 | 
						|
 | 
						|
   configure for building on BUILD, usually guessed by :program:`config.guess`.
 | 
						|
 | 
						|
.. option:: --host=HOST
 | 
						|
 | 
						|
   cross-compile to build programs to run on HOST (target platform)
 | 
						|
 | 
						|
.. option:: --with-build-python=path/to/python
 | 
						|
 | 
						|
   path to build ``python`` binary for cross compiling
 | 
						|
 | 
						|
   .. versionadded:: 3.11
 | 
						|
 | 
						|
.. option:: CONFIG_SITE=file
 | 
						|
 | 
						|
   An environment variable that points to a file with configure overrides.
 | 
						|
 | 
						|
   Example *config.site* file:
 | 
						|
 | 
						|
   .. code-block:: ini
 | 
						|
 | 
						|
      # config.site-aarch64
 | 
						|
      ac_cv_buggy_getaddrinfo=no
 | 
						|
      ac_cv_file__dev_ptmx=yes
 | 
						|
      ac_cv_file__dev_ptc=no
 | 
						|
 | 
						|
.. option:: HOSTRUNNER
 | 
						|
 | 
						|
   Program to run CPython for the host platform for cross-compilation.
 | 
						|
 | 
						|
   .. versionadded:: 3.11
 | 
						|
 | 
						|
 | 
						|
Cross compiling example::
 | 
						|
 | 
						|
   CONFIG_SITE=config.site-aarch64 ../configure \
 | 
						|
       --build=x86_64-pc-linux-gnu \
 | 
						|
       --host=aarch64-unknown-linux-gnu \
 | 
						|
       --with-build-python=../x86_64/python
 | 
						|
 | 
						|
 | 
						|
Python Build System
 | 
						|
===================
 | 
						|
 | 
						|
Main files of the build system
 | 
						|
------------------------------
 | 
						|
 | 
						|
* :file:`configure.ac` => :file:`configure`;
 | 
						|
* :file:`Makefile.pre.in` => :file:`Makefile` (created by :file:`configure`);
 | 
						|
* :file:`pyconfig.h` (created by :file:`configure`);
 | 
						|
* :file:`Modules/Setup`: C extensions built by the Makefile using
 | 
						|
  :file:`Module/makesetup` shell script;
 | 
						|
 | 
						|
Main build steps
 | 
						|
----------------
 | 
						|
 | 
						|
* C files (``.c``) are built as object files (``.o``).
 | 
						|
* A static ``libpython`` library (``.a``) is created from objects files.
 | 
						|
* ``python.o`` and the static ``libpython`` library are linked into the
 | 
						|
  final ``python`` program.
 | 
						|
* C extensions are built by the Makefile (see :file:`Modules/Setup`).
 | 
						|
 | 
						|
Main Makefile targets
 | 
						|
---------------------
 | 
						|
 | 
						|
make
 | 
						|
^^^^
 | 
						|
 | 
						|
For the most part, when rebuilding after editing some code or
 | 
						|
refreshing your checkout from upstream, all you need to do is execute
 | 
						|
``make``, which (per Make's semantics) builds the default target, the
 | 
						|
first one defined in the Makefile.  By tradition (including in the
 | 
						|
CPython project) this is usually the ``all`` target. The
 | 
						|
``configure`` script expands an ``autoconf`` variable,
 | 
						|
``@DEF_MAKE_ALL_RULE@`` to describe precisely which targets ``make
 | 
						|
all`` will build. The three choices are:
 | 
						|
 | 
						|
* ``profile-opt`` (configured with ``--enable-optimizations``)
 | 
						|
* ``build_wasm`` (configured with ``--with-emscripten-target``)
 | 
						|
* ``build_all`` (configured without explicitly using either of the others)
 | 
						|
 | 
						|
Depending on the most recent source file changes, Make will rebuild
 | 
						|
any targets (object files and executables) deemed out-of-date,
 | 
						|
including running ``configure`` again if necessary. Source/target
 | 
						|
dependencies are many and maintained manually however, so Make
 | 
						|
sometimes doesn't have all the information necessary to correctly
 | 
						|
detect all targets which need to be rebuilt.  Depending on which
 | 
						|
targets aren't rebuilt, you might experience a number of problems. If
 | 
						|
you have build or test problems which you can't otherwise explain,
 | 
						|
``make clean && make`` should work around most dependency problems, at
 | 
						|
the expense of longer build times.
 | 
						|
 | 
						|
 | 
						|
make platform
 | 
						|
^^^^^^^^^^^^^
 | 
						|
 | 
						|
Build the ``python`` program, but don't build the standard library
 | 
						|
extension modules. This generates a file named ``platform`` which
 | 
						|
contains a single line describing the details of the build platform,
 | 
						|
e.g., ``macosx-14.3-arm64-3.12`` or ``linux-x86_64-3.13``.
 | 
						|
 | 
						|
 | 
						|
make profile-opt
 | 
						|
^^^^^^^^^^^^^^^^
 | 
						|
 | 
						|
Build Python using profile-guided optimization (PGO).  You can use the
 | 
						|
configure :option:`--enable-optimizations` option to make this the
 | 
						|
default target of the ``make`` command (``make all`` or just
 | 
						|
``make``).
 | 
						|
 | 
						|
 | 
						|
 | 
						|
make clean
 | 
						|
^^^^^^^^^^
 | 
						|
 | 
						|
Remove built files.
 | 
						|
 | 
						|
 | 
						|
make distclean
 | 
						|
^^^^^^^^^^^^^^
 | 
						|
 | 
						|
In addition to the the work done by ``make clean``, remove files
 | 
						|
created by the configure script.  ``configure`` will have to be run
 | 
						|
before building again. [#]_
 | 
						|
 | 
						|
 | 
						|
make install
 | 
						|
^^^^^^^^^^^^
 | 
						|
 | 
						|
Build the ``all`` target and install Python.
 | 
						|
 | 
						|
 | 
						|
make test
 | 
						|
^^^^^^^^^
 | 
						|
 | 
						|
Build the ``all`` target and run the Python test suite with the
 | 
						|
``--fast-ci`` option. Variables:
 | 
						|
 | 
						|
* ``TESTOPTS``: additional regrtest command-line options.
 | 
						|
* ``TESTPYTHONOPTS``: additional Python command-line options.
 | 
						|
* ``TESTTIMEOUT``: timeout in seconds (default: 10 minutes).
 | 
						|
 | 
						|
 | 
						|
make buildbottest
 | 
						|
^^^^^^^^^^^^^^^^^
 | 
						|
 | 
						|
This is similar to ``make test``, but uses the ``--slow-ci``
 | 
						|
option and default timeout of 20 minutes, instead of ``--fast-ci`` option.
 | 
						|
 | 
						|
 | 
						|
make regen-all
 | 
						|
^^^^^^^^^^^^^^
 | 
						|
 | 
						|
Regenerate (almost) all generated files. These include (but are not
 | 
						|
limited to) bytecode cases, and parser generator file.
 | 
						|
``make regen-stdlib-module-names`` and ``autoconf`` must be run
 | 
						|
separately for the remaining `generated files <#generated-files>`_.
 | 
						|
 | 
						|
 | 
						|
C extensions
 | 
						|
------------
 | 
						|
 | 
						|
Some C extensions are built as built-in modules, like the ``sys`` module.
 | 
						|
They are built with the ``Py_BUILD_CORE_BUILTIN`` macro defined.
 | 
						|
Built-in modules have no ``__file__`` attribute:
 | 
						|
 | 
						|
.. code-block:: pycon
 | 
						|
 | 
						|
    >>> import sys
 | 
						|
    >>> sys
 | 
						|
    <module 'sys' (built-in)>
 | 
						|
    >>> sys.__file__
 | 
						|
    Traceback (most recent call last):
 | 
						|
      File "<stdin>", line 1, in <module>
 | 
						|
    AttributeError: module 'sys' has no attribute '__file__'
 | 
						|
 | 
						|
Other C extensions are built as dynamic libraries, like the ``_asyncio`` module.
 | 
						|
They are built with the ``Py_BUILD_CORE_MODULE`` macro defined.
 | 
						|
Example on Linux x86-64:
 | 
						|
 | 
						|
.. code-block:: pycon
 | 
						|
 | 
						|
    >>> import _asyncio
 | 
						|
    >>> _asyncio
 | 
						|
    <module '_asyncio' from '/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'>
 | 
						|
    >>> _asyncio.__file__
 | 
						|
    '/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'
 | 
						|
 | 
						|
:file:`Modules/Setup` is used to generate Makefile targets to build C extensions.
 | 
						|
At the beginning of the files, C extensions are built as built-in modules.
 | 
						|
Extensions defined after the ``*shared*`` marker are built as dynamic libraries.
 | 
						|
 | 
						|
The :c:macro:`!PyAPI_FUNC()`, :c:macro:`!PyAPI_DATA()` and
 | 
						|
:c:macro:`PyMODINIT_FUNC` macros of :file:`Include/exports.h` are defined
 | 
						|
differently depending if the ``Py_BUILD_CORE_MODULE`` macro is defined:
 | 
						|
 | 
						|
* Use ``Py_EXPORTED_SYMBOL`` if the ``Py_BUILD_CORE_MODULE`` is defined
 | 
						|
* Use ``Py_IMPORTED_SYMBOL`` otherwise.
 | 
						|
 | 
						|
If the ``Py_BUILD_CORE_BUILTIN`` macro is used by mistake on a C extension
 | 
						|
built as a shared library, its :samp:`PyInit_{xxx}()` function is not exported,
 | 
						|
causing an :exc:`ImportError` on import.
 | 
						|
 | 
						|
 | 
						|
Compiler and linker flags
 | 
						|
=========================
 | 
						|
 | 
						|
Options set by the ``./configure`` script and environment variables and used by
 | 
						|
``Makefile``.
 | 
						|
 | 
						|
Preprocessor flags
 | 
						|
------------------
 | 
						|
 | 
						|
.. envvar:: CONFIGURE_CPPFLAGS
 | 
						|
 | 
						|
   Value of :envvar:`CPPFLAGS` variable passed to the ``./configure`` script.
 | 
						|
 | 
						|
   .. versionadded:: 3.6
 | 
						|
 | 
						|
.. envvar:: CPPFLAGS
 | 
						|
 | 
						|
   (Objective) C/C++ preprocessor flags, e.g. :samp:`-I{include_dir}` if you have
 | 
						|
   headers in a nonstandard directory *include_dir*.
 | 
						|
 | 
						|
   Both :envvar:`CPPFLAGS` and :envvar:`LDFLAGS` need to contain the shell's
 | 
						|
   value to be able to build extension modules using the
 | 
						|
   directories specified in the environment variables.
 | 
						|
 | 
						|
.. envvar:: BASECPPFLAGS
 | 
						|
 | 
						|
   .. versionadded:: 3.4
 | 
						|
 | 
						|
.. envvar:: PY_CPPFLAGS
 | 
						|
 | 
						|
   Extra preprocessor flags added for building the interpreter object files.
 | 
						|
 | 
						|
   Default: ``$(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS)``.
 | 
						|
 | 
						|
   .. versionadded:: 3.2
 | 
						|
 | 
						|
Compiler flags
 | 
						|
--------------
 | 
						|
 | 
						|
.. envvar:: CC
 | 
						|
 | 
						|
   C compiler command.
 | 
						|
 | 
						|
   Example: ``gcc -pthread``.
 | 
						|
 | 
						|
.. envvar:: CXX
 | 
						|
 | 
						|
   C++ compiler command.
 | 
						|
 | 
						|
   Example: ``g++ -pthread``.
 | 
						|
 | 
						|
.. envvar:: CFLAGS
 | 
						|
 | 
						|
   C compiler flags.
 | 
						|
 | 
						|
.. envvar:: CFLAGS_NODIST
 | 
						|
 | 
						|
   :envvar:`CFLAGS_NODIST` is used for building the interpreter and stdlib C
 | 
						|
   extensions.  Use it when a compiler flag should *not* be part of
 | 
						|
   :envvar:`CFLAGS` once Python is installed (:gh:`65320`).
 | 
						|
 | 
						|
   In particular, :envvar:`CFLAGS` should not contain:
 | 
						|
 | 
						|
   * the compiler flag ``-I`` (for setting the search path for include files).
 | 
						|
     The ``-I`` flags are processed from left to right, and any flags in
 | 
						|
     :envvar:`CFLAGS` would take precedence over user- and package-supplied ``-I``
 | 
						|
     flags.
 | 
						|
 | 
						|
   * hardening flags such as ``-Werror`` because distributions cannot control
 | 
						|
     whether packages installed by users conform to such heightened
 | 
						|
     standards.
 | 
						|
 | 
						|
   .. versionadded:: 3.5
 | 
						|
 | 
						|
.. envvar:: COMPILEALL_OPTS
 | 
						|
 | 
						|
   Options passed to the :mod:`compileall` command line when building PYC files
 | 
						|
   in ``make install``. Default: ``-j0``.
 | 
						|
 | 
						|
   .. versionadded:: 3.12
 | 
						|
 | 
						|
.. envvar:: EXTRA_CFLAGS
 | 
						|
 | 
						|
   Extra C compiler flags.
 | 
						|
 | 
						|
.. envvar:: CONFIGURE_CFLAGS
 | 
						|
 | 
						|
   Value of :envvar:`CFLAGS` variable passed to the ``./configure``
 | 
						|
   script.
 | 
						|
 | 
						|
   .. versionadded:: 3.2
 | 
						|
 | 
						|
.. envvar:: CONFIGURE_CFLAGS_NODIST
 | 
						|
 | 
						|
   Value of :envvar:`CFLAGS_NODIST` variable passed to the ``./configure``
 | 
						|
   script.
 | 
						|
 | 
						|
   .. versionadded:: 3.5
 | 
						|
 | 
						|
.. envvar:: BASECFLAGS
 | 
						|
 | 
						|
   Base compiler flags.
 | 
						|
 | 
						|
.. envvar:: OPT
 | 
						|
 | 
						|
   Optimization flags.
 | 
						|
 | 
						|
.. envvar:: CFLAGS_ALIASING
 | 
						|
 | 
						|
   Strict or non-strict aliasing flags used to compile ``Python/dtoa.c``.
 | 
						|
 | 
						|
   .. versionadded:: 3.7
 | 
						|
 | 
						|
.. envvar:: CCSHARED
 | 
						|
 | 
						|
   Compiler flags used to build a shared library.
 | 
						|
 | 
						|
   For example, ``-fPIC`` is used on Linux and on BSD.
 | 
						|
 | 
						|
.. envvar:: CFLAGSFORSHARED
 | 
						|
 | 
						|
   Extra C flags added for building the interpreter object files.
 | 
						|
 | 
						|
   Default: ``$(CCSHARED)`` when :option:`--enable-shared` is used, or an empty
 | 
						|
   string otherwise.
 | 
						|
 | 
						|
.. envvar:: PY_CFLAGS
 | 
						|
 | 
						|
   Default: ``$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)``.
 | 
						|
 | 
						|
.. envvar:: PY_CFLAGS_NODIST
 | 
						|
 | 
						|
   Default: ``$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal``.
 | 
						|
 | 
						|
   .. versionadded:: 3.5
 | 
						|
 | 
						|
.. envvar:: PY_STDMODULE_CFLAGS
 | 
						|
 | 
						|
   C flags used for building the interpreter object files.
 | 
						|
 | 
						|
   Default: ``$(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED)``.
 | 
						|
 | 
						|
   .. versionadded:: 3.7
 | 
						|
 | 
						|
.. envvar:: PY_CORE_CFLAGS
 | 
						|
 | 
						|
   Default: ``$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE``.
 | 
						|
 | 
						|
   .. versionadded:: 3.2
 | 
						|
 | 
						|
.. envvar:: PY_BUILTIN_MODULE_CFLAGS
 | 
						|
 | 
						|
   Compiler flags to build a standard library extension module as a built-in
 | 
						|
   module, like the :mod:`posix` module.
 | 
						|
 | 
						|
   Default: ``$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN``.
 | 
						|
 | 
						|
   .. versionadded:: 3.8
 | 
						|
 | 
						|
.. envvar:: PURIFY
 | 
						|
 | 
						|
   Purify command. Purify is a memory debugger program.
 | 
						|
 | 
						|
   Default: empty string (not used).
 | 
						|
 | 
						|
 | 
						|
Linker flags
 | 
						|
------------
 | 
						|
 | 
						|
.. envvar:: LINKCC
 | 
						|
 | 
						|
   Linker command used to build programs like ``python`` and ``_testembed``.
 | 
						|
 | 
						|
   Default: ``$(PURIFY) $(CC)``.
 | 
						|
 | 
						|
.. envvar:: CONFIGURE_LDFLAGS
 | 
						|
 | 
						|
   Value of :envvar:`LDFLAGS` variable passed to the ``./configure`` script.
 | 
						|
 | 
						|
   Avoid assigning :envvar:`CFLAGS`, :envvar:`LDFLAGS`, etc. so users can use
 | 
						|
   them on the command line to append to these values without stomping the
 | 
						|
   pre-set values.
 | 
						|
 | 
						|
   .. versionadded:: 3.2
 | 
						|
 | 
						|
.. envvar:: LDFLAGS_NODIST
 | 
						|
 | 
						|
   :envvar:`LDFLAGS_NODIST` is used in the same manner as
 | 
						|
   :envvar:`CFLAGS_NODIST`.  Use it when a linker flag should *not* be part of
 | 
						|
   :envvar:`LDFLAGS` once Python is installed (:gh:`65320`).
 | 
						|
 | 
						|
   In particular, :envvar:`LDFLAGS` should not contain:
 | 
						|
 | 
						|
   * the compiler flag ``-L`` (for setting the search path for libraries).
 | 
						|
     The ``-L`` flags are processed from left to right, and any flags in
 | 
						|
     :envvar:`LDFLAGS` would take precedence over user- and package-supplied ``-L``
 | 
						|
     flags.
 | 
						|
 | 
						|
.. envvar:: CONFIGURE_LDFLAGS_NODIST
 | 
						|
 | 
						|
   Value of :envvar:`LDFLAGS_NODIST` variable passed to the ``./configure``
 | 
						|
   script.
 | 
						|
 | 
						|
   .. versionadded:: 3.8
 | 
						|
 | 
						|
.. envvar:: LDFLAGS
 | 
						|
 | 
						|
   Linker flags, e.g. :samp:`-L{lib_dir}` if you have libraries in a nonstandard
 | 
						|
   directory *lib_dir*.
 | 
						|
 | 
						|
   Both :envvar:`CPPFLAGS` and :envvar:`LDFLAGS` need to contain the shell's
 | 
						|
   value to be able to build extension modules using the
 | 
						|
   directories specified in the environment variables.
 | 
						|
 | 
						|
.. envvar:: LIBS
 | 
						|
 | 
						|
   Linker flags to pass libraries to the linker when linking the Python
 | 
						|
   executable.
 | 
						|
 | 
						|
   Example: ``-lrt``.
 | 
						|
 | 
						|
.. envvar:: LDSHARED
 | 
						|
 | 
						|
   Command to build a shared library.
 | 
						|
 | 
						|
   Default: ``@LDSHARED@ $(PY_LDFLAGS)``.
 | 
						|
 | 
						|
.. envvar:: BLDSHARED
 | 
						|
 | 
						|
   Command to build ``libpython`` shared library.
 | 
						|
 | 
						|
   Default: ``@BLDSHARED@ $(PY_CORE_LDFLAGS)``.
 | 
						|
 | 
						|
.. envvar:: PY_LDFLAGS
 | 
						|
 | 
						|
   Default: ``$(CONFIGURE_LDFLAGS) $(LDFLAGS)``.
 | 
						|
 | 
						|
.. envvar:: PY_LDFLAGS_NODIST
 | 
						|
 | 
						|
   Default: ``$(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST)``.
 | 
						|
 | 
						|
   .. versionadded:: 3.8
 | 
						|
 | 
						|
.. envvar:: PY_CORE_LDFLAGS
 | 
						|
 | 
						|
   Linker flags used for building the interpreter object files.
 | 
						|
 | 
						|
   .. versionadded:: 3.8
 | 
						|
 | 
						|
 | 
						|
.. rubric:: Footnotes
 | 
						|
 | 
						|
.. [#] ``git clean -fdx`` is an even more extreme way to "clean" your
 | 
						|
   checkout. It removes all files not known to Git.
 | 
						|
   When bug hunting using ``git bisect``, this is
 | 
						|
   `recommended between probes <https://github.com/python/cpython/issues/114505#issuecomment-1907021718>`_
 | 
						|
   to guarantee a completely clean build. **Use with care**, as it
 | 
						|
   will delete all files not checked into Git, including your
 | 
						|
   new, uncommitted work.
 |