| **************** |
| 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.5 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.5 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:: --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:`whatsnew313-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 :ref:`mimalloc <mimalloc>` allocator |
| (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. |
| |
| .. option:: --disable-safety |
| |
| Disable compiler options that are `recommended by OpenSSF`_ for security reasons with no performance overhead. |
| If this option is not enabled, CPython will be built based on safety compiler options with no slow down. |
| When this option is enabled, CPython will not be built with the compiler options listed below. |
| |
| The following compiler options are disabled with :option:`!--disable-safety`: |
| |
| * `-fstack-protector-strong`_: Enable run-time checks for stack-based buffer overflows. |
| * `-Wtrampolines`_: Enable warnings about trampolines that require executable stacks. |
| |
| .. _recommended by OpenSSF: https://github.com/ossf/wg-best-practices-os-developers/blob/main/docs/Compiler-Hardening-Guides/Compiler-Options-Hardening-Guide-for-C-and-C++.md |
| .. _-fstack-protector-strong: https://github.com/ossf/wg-best-practices-os-developers/blob/main/docs/Compiler-Hardening-Guides/Compiler-Options-Hardening-Guide-for-C-and-C++.md#enable-run-time-checks-for-stack-based-buffer-overflows |
| .. _-Wtrampolines: https://github.com/ossf/wg-best-practices-os-developers/blob/main/docs/Compiler-Hardening-Guides/Compiler-Options-Hardening-Guide-for-C-and-C++.md#enable-warning-about-trampolines-that-require-executable-stacks |
| |
| .. versionadded:: 3.14 |
| |
| .. option:: --enable-slower-safety |
| |
| Enable compiler options that are `recommended by OpenSSF`_ for security reasons which require overhead. |
| If this option is not enabled, CPython will not be built based on safety compiler options which performance impact. |
| When this option is enabled, CPython will be built with the compiler options listed below. |
| |
| The following compiler options are enabled with :option:`!--enable-slower-safety`: |
| |
| * `-D_FORTIFY_SOURCE=3`_: Fortify sources with compile- and run-time checks for unsafe libc usage and buffer overflows. |
| |
| .. _-D_FORTIFY_SOURCE=3: https://github.com/ossf/wg-best-practices-os-developers/blob/main/docs/Compiler-Hardening-Guides/Compiler-Options-Hardening-Guide-for-C-and-C++.md#fortify-sources-for-unsafe-libc-usage-and-buffer-overflows |
| |
| .. versionadded:: 3.14 |
| |
| |
| 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``). |
| |
| .. option:: --with-app-store-compliance |
| .. option:: --with-app-store-compliance=PATCH-FILE |
| |
| The Python standard library contains strings that are known to trigger |
| automated inspection tool errors when submitted for distribution by |
| the macOS and iOS App Stores. If enabled, this option will apply the list of |
| patches that are known to correct app store compliance. A custom patch |
| file can also be specified. This option is disabled by default. |
| |
| .. versionadded:: 3.13 |
| |
| 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 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 without GUI tests. Variables: |
| |
| * ``TESTOPTS``: additional regrtest command-line options. |
| * ``TESTPYTHONOPTS``: additional Python command-line options. |
| * ``TESTTIMEOUT``: timeout in seconds (default: 10 minutes). |
| |
| |
| make ci |
| ^^^^^^^ |
| |
| This is similar to ``make test``, but uses the ``-ugui`` to also run GUI tests. |
| |
| .. versionadded:: 3.14 |
| |
| |
| 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. |