xref: /third_party/python/Doc/using/configure.rst (revision 7db96d56)
17db96d56Sopenharmony_ci****************
27db96d56Sopenharmony_ciConfigure Python
37db96d56Sopenharmony_ci****************
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ci.. _configure-options:
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ciConfigure Options
87db96d56Sopenharmony_ci=================
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ciList all ``./configure`` script options using::
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ci    ./configure --help
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ciSee also the :file:`Misc/SpecialBuilds.txt` in the Python source distribution.
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ciGeneral Options
177db96d56Sopenharmony_ci---------------
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_ci.. cmdoption:: --enable-loadable-sqlite-extensions
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ci   Support loadable extensions in the :mod:`_sqlite` extension module (default
227db96d56Sopenharmony_ci   is no).
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ci   See the :meth:`sqlite3.Connection.enable_load_extension` method of the
257db96d56Sopenharmony_ci   :mod:`sqlite3` module.
267db96d56Sopenharmony_ci
277db96d56Sopenharmony_ci   .. versionadded:: 3.6
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ci.. cmdoption:: --disable-ipv6
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ci   Disable IPv6 support (enabled by default if supported), see the
327db96d56Sopenharmony_ci   :mod:`socket` module.
337db96d56Sopenharmony_ci
347db96d56Sopenharmony_ci.. cmdoption:: --enable-big-digits=[15|30]
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_ci   Define the size in bits of Python :class:`int` digits: 15 or 30 bits.
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ci   By default, the digit size is 30.
397db96d56Sopenharmony_ci
407db96d56Sopenharmony_ci   Define the ``PYLONG_BITS_IN_DIGIT`` to ``15`` or ``30``.
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_ci   See :data:`sys.int_info.bits_per_digit <sys.int_info>`.
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ci.. cmdoption:: --with-cxx-main
457db96d56Sopenharmony_ci.. cmdoption:: --with-cxx-main=COMPILER
467db96d56Sopenharmony_ci
477db96d56Sopenharmony_ci   Compile the Python ``main()`` function and link Python executable with C++
487db96d56Sopenharmony_ci   compiler: ``$CXX``, or *COMPILER* if specified.
497db96d56Sopenharmony_ci
507db96d56Sopenharmony_ci.. cmdoption:: --with-suffix=SUFFIX
517db96d56Sopenharmony_ci
527db96d56Sopenharmony_ci   Set the Python executable suffix to *SUFFIX*.
537db96d56Sopenharmony_ci
547db96d56Sopenharmony_ci   The default suffix is ``.exe`` on Windows and macOS (``python.exe``
557db96d56Sopenharmony_ci   executable), ``.js`` on Emscripten node, ``.html`` on Emscripten browser,
567db96d56Sopenharmony_ci   ``.wasm`` on WASI, and an empty string on other platforms (``python``
577db96d56Sopenharmony_ci   executable).
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_ci   .. versionchanged:: 3.11
607db96d56Sopenharmony_ci      The default suffix on WASM platform is one of ``.js``, ``.html``
617db96d56Sopenharmony_ci      or ``.wasm``.
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_ci.. cmdoption:: --with-tzpath=<list of absolute paths separated by pathsep>
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ci   Select the default time zone search path for :data:`zoneinfo.TZPATH`.
667db96d56Sopenharmony_ci   See the :ref:`Compile-time configuration
677db96d56Sopenharmony_ci   <zoneinfo_data_compile_time_config>` of the :mod:`zoneinfo` module.
687db96d56Sopenharmony_ci
697db96d56Sopenharmony_ci   Default: ``/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo``.
707db96d56Sopenharmony_ci
717db96d56Sopenharmony_ci   See :data:`os.pathsep` path separator.
727db96d56Sopenharmony_ci
737db96d56Sopenharmony_ci   .. versionadded:: 3.9
747db96d56Sopenharmony_ci
757db96d56Sopenharmony_ci.. cmdoption:: --without-decimal-contextvar
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci   Build the ``_decimal`` extension module using a thread-local context rather
787db96d56Sopenharmony_ci   than a coroutine-local context (default), see the :mod:`decimal` module.
797db96d56Sopenharmony_ci
807db96d56Sopenharmony_ci   See :data:`decimal.HAVE_CONTEXTVAR` and the :mod:`contextvars` module.
817db96d56Sopenharmony_ci
827db96d56Sopenharmony_ci   .. versionadded:: 3.9
837db96d56Sopenharmony_ci
847db96d56Sopenharmony_ci.. cmdoption:: --with-dbmliborder=<list of backend names>
857db96d56Sopenharmony_ci
867db96d56Sopenharmony_ci   Override order to check db backends for the :mod:`dbm` module
877db96d56Sopenharmony_ci
887db96d56Sopenharmony_ci   A valid value is a colon (``:``) separated string with the backend names:
897db96d56Sopenharmony_ci
907db96d56Sopenharmony_ci   * ``ndbm``;
917db96d56Sopenharmony_ci   * ``gdbm``;
927db96d56Sopenharmony_ci   * ``bdb``.
937db96d56Sopenharmony_ci
947db96d56Sopenharmony_ci.. cmdoption:: --without-c-locale-coercion
957db96d56Sopenharmony_ci
967db96d56Sopenharmony_ci   Disable C locale coercion to a UTF-8 based locale (enabled by default).
977db96d56Sopenharmony_ci
987db96d56Sopenharmony_ci   Don't define the ``PY_COERCE_C_LOCALE`` macro.
997db96d56Sopenharmony_ci
1007db96d56Sopenharmony_ci   See :envvar:`PYTHONCOERCECLOCALE` and the :pep:`538`.
1017db96d56Sopenharmony_ci
1027db96d56Sopenharmony_ci.. cmdoption:: --with-platlibdir=DIRNAME
1037db96d56Sopenharmony_ci
1047db96d56Sopenharmony_ci   Python library directory name (default is ``lib``).
1057db96d56Sopenharmony_ci
1067db96d56Sopenharmony_ci   Fedora and SuSE use ``lib64`` on 64-bit platforms.
1077db96d56Sopenharmony_ci
1087db96d56Sopenharmony_ci   See :data:`sys.platlibdir`.
1097db96d56Sopenharmony_ci
1107db96d56Sopenharmony_ci   .. versionadded:: 3.9
1117db96d56Sopenharmony_ci
1127db96d56Sopenharmony_ci.. cmdoption:: --with-wheel-pkg-dir=PATH
1137db96d56Sopenharmony_ci
1147db96d56Sopenharmony_ci   Directory of wheel packages used by the :mod:`ensurepip` module
1157db96d56Sopenharmony_ci   (none by default).
1167db96d56Sopenharmony_ci
1177db96d56Sopenharmony_ci   Some Linux distribution packaging policies recommend against bundling
1187db96d56Sopenharmony_ci   dependencies. For example, Fedora installs wheel packages in the
1197db96d56Sopenharmony_ci   ``/usr/share/python-wheels/`` directory and don't install the
1207db96d56Sopenharmony_ci   :mod:`ensurepip._bundled` package.
1217db96d56Sopenharmony_ci
1227db96d56Sopenharmony_ci   .. versionadded:: 3.10
1237db96d56Sopenharmony_ci
1247db96d56Sopenharmony_ci.. cmdoption:: --with-pkg-config=[check|yes|no]
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_ci   Whether configure should use :program:`pkg-config` to detect build
1277db96d56Sopenharmony_ci   dependencies.
1287db96d56Sopenharmony_ci
1297db96d56Sopenharmony_ci   * ``check`` (default): :program:`pkg-config` is optional
1307db96d56Sopenharmony_ci   * ``yes``: :program:`pkg-config` is mandatory
1317db96d56Sopenharmony_ci   * ``no``: configure does not use :program:`pkg-config` even when present
1327db96d56Sopenharmony_ci
1337db96d56Sopenharmony_ci   .. versionadded:: 3.11
1347db96d56Sopenharmony_ci
1357db96d56Sopenharmony_ci.. cmdoption:: --enable-pystats
1367db96d56Sopenharmony_ci
1377db96d56Sopenharmony_ci   Turn on internal statistics gathering.
1387db96d56Sopenharmony_ci
1397db96d56Sopenharmony_ci   The statistics will be dumped to a arbitrary (probably unique) file in
1407db96d56Sopenharmony_ci   ``/tmp/py_stats/``, or ``C:\temp\py_stats\`` on Windows.
1417db96d56Sopenharmony_ci
1427db96d56Sopenharmony_ci   Use ``Tools/scripts/summarize_stats.py`` to read the stats.
1437db96d56Sopenharmony_ci
1447db96d56Sopenharmony_ci   .. versionadded:: 3.11
1457db96d56Sopenharmony_ci
1467db96d56Sopenharmony_ciWebAssembly Options
1477db96d56Sopenharmony_ci-------------------
1487db96d56Sopenharmony_ci
1497db96d56Sopenharmony_ci.. cmdoption:: --with-emscripten-target=[browser|node]
1507db96d56Sopenharmony_ci
1517db96d56Sopenharmony_ci   Set build flavor for ``wasm32-emscripten``.
1527db96d56Sopenharmony_ci
1537db96d56Sopenharmony_ci   * ``browser`` (default): preload minimal stdlib, default MEMFS.
1547db96d56Sopenharmony_ci   * ``node``: NODERAWFS and pthread support.
1557db96d56Sopenharmony_ci
1567db96d56Sopenharmony_ci   .. versionadded:: 3.11
1577db96d56Sopenharmony_ci
1587db96d56Sopenharmony_ci.. cmdoption:: --enable-wasm-dynamic-linking
1597db96d56Sopenharmony_ci
1607db96d56Sopenharmony_ci   Turn on dynamic linking support for WASM.
1617db96d56Sopenharmony_ci
1627db96d56Sopenharmony_ci   Dynamic linking enables ``dlopen``. File size of the executable
1637db96d56Sopenharmony_ci   increases due to limited dead code elimination and additional features.
1647db96d56Sopenharmony_ci
1657db96d56Sopenharmony_ci   .. versionadded:: 3.11
1667db96d56Sopenharmony_ci
1677db96d56Sopenharmony_ci.. cmdoption:: --enable-wasm-pthreads
1687db96d56Sopenharmony_ci
1697db96d56Sopenharmony_ci   Turn on pthreads support for WASM.
1707db96d56Sopenharmony_ci
1717db96d56Sopenharmony_ci   .. versionadded:: 3.11
1727db96d56Sopenharmony_ci
1737db96d56Sopenharmony_ci
1747db96d56Sopenharmony_ciInstall Options
1757db96d56Sopenharmony_ci---------------
1767db96d56Sopenharmony_ci
1777db96d56Sopenharmony_ci.. cmdoption:: --prefix=PREFIX
1787db96d56Sopenharmony_ci
1797db96d56Sopenharmony_ci   Install architecture-independent files in PREFIX. On Unix, it
1807db96d56Sopenharmony_ci   defaults to :file:`/usr/local`.
1817db96d56Sopenharmony_ci
1827db96d56Sopenharmony_ci   This value can be retrived at runtime using :data:`sys.prefix`.
1837db96d56Sopenharmony_ci
1847db96d56Sopenharmony_ci   As an example, one can use ``--prefix="$HOME/.local/"`` to install
1857db96d56Sopenharmony_ci   a Python in its home directory.
1867db96d56Sopenharmony_ci
1877db96d56Sopenharmony_ci.. cmdoption:: --exec-prefix=EPREFIX
1887db96d56Sopenharmony_ci
1897db96d56Sopenharmony_ci   Install architecture-dependent files in EPREFIX, defaults to :option:`--prefix`.
1907db96d56Sopenharmony_ci
1917db96d56Sopenharmony_ci   This value can be retrived at runtime using :data:`sys.exec_prefix`.
1927db96d56Sopenharmony_ci
1937db96d56Sopenharmony_ci.. cmdoption:: --disable-test-modules
1947db96d56Sopenharmony_ci
1957db96d56Sopenharmony_ci   Don't build nor install test modules, like the :mod:`test` package or the
1967db96d56Sopenharmony_ci   :mod:`_testcapi` extension module (built and installed by default).
1977db96d56Sopenharmony_ci
1987db96d56Sopenharmony_ci   .. versionadded:: 3.10
1997db96d56Sopenharmony_ci
2007db96d56Sopenharmony_ci.. cmdoption:: --with-ensurepip=[upgrade|install|no]
2017db96d56Sopenharmony_ci
2027db96d56Sopenharmony_ci   Select the :mod:`ensurepip` command run on Python installation:
2037db96d56Sopenharmony_ci
2047db96d56Sopenharmony_ci   * ``upgrade`` (default): run ``python -m ensurepip --altinstall --upgrade``
2057db96d56Sopenharmony_ci     command.
2067db96d56Sopenharmony_ci   * ``install``: run ``python -m ensurepip --altinstall`` command;
2077db96d56Sopenharmony_ci   * ``no``: don't run ensurepip;
2087db96d56Sopenharmony_ci
2097db96d56Sopenharmony_ci   .. versionadded:: 3.6
2107db96d56Sopenharmony_ci
2117db96d56Sopenharmony_ci
2127db96d56Sopenharmony_ciPerformance options
2137db96d56Sopenharmony_ci-------------------
2147db96d56Sopenharmony_ci
2157db96d56Sopenharmony_ciConfiguring Python using ``--enable-optimizations --with-lto`` (PGO + LTO) is
2167db96d56Sopenharmony_cirecommended for best performance.
2177db96d56Sopenharmony_ci
2187db96d56Sopenharmony_ci.. cmdoption:: --enable-optimizations
2197db96d56Sopenharmony_ci
2207db96d56Sopenharmony_ci   Enable Profile Guided Optimization (PGO) using :envvar:`PROFILE_TASK`
2217db96d56Sopenharmony_ci   (disabled by default).
2227db96d56Sopenharmony_ci
2237db96d56Sopenharmony_ci   The C compiler Clang requires ``llvm-profdata`` program for PGO. On
2247db96d56Sopenharmony_ci   macOS, GCC also requires it: GCC is just an alias to Clang on macOS.
2257db96d56Sopenharmony_ci
2267db96d56Sopenharmony_ci   Disable also semantic interposition in libpython if ``--enable-shared`` and
2277db96d56Sopenharmony_ci   GCC is used: add ``-fno-semantic-interposition`` to the compiler and linker
2287db96d56Sopenharmony_ci   flags.
2297db96d56Sopenharmony_ci
2307db96d56Sopenharmony_ci   .. versionadded:: 3.6
2317db96d56Sopenharmony_ci
2327db96d56Sopenharmony_ci   .. versionchanged:: 3.10
2337db96d56Sopenharmony_ci      Use ``-fno-semantic-interposition`` on GCC.
2347db96d56Sopenharmony_ci
2357db96d56Sopenharmony_ci.. envvar:: PROFILE_TASK
2367db96d56Sopenharmony_ci
2377db96d56Sopenharmony_ci   Environment variable used in the Makefile: Python command line arguments for
2387db96d56Sopenharmony_ci   the PGO generation task.
2397db96d56Sopenharmony_ci
2407db96d56Sopenharmony_ci   Default: ``-m test --pgo --timeout=$(TESTTIMEOUT)``.
2417db96d56Sopenharmony_ci
2427db96d56Sopenharmony_ci   .. versionadded:: 3.8
2437db96d56Sopenharmony_ci
2447db96d56Sopenharmony_ci.. cmdoption:: --with-lto=[full|thin|no|yes]
2457db96d56Sopenharmony_ci
2467db96d56Sopenharmony_ci   Enable Link Time Optimization (LTO) in any build (disabled by default).
2477db96d56Sopenharmony_ci
2487db96d56Sopenharmony_ci   The C compiler Clang requires ``llvm-ar`` for LTO (``ar`` on macOS), as well
2497db96d56Sopenharmony_ci   as an LTO-aware linker (``ld.gold`` or ``lld``).
2507db96d56Sopenharmony_ci
2517db96d56Sopenharmony_ci   .. versionadded:: 3.6
2527db96d56Sopenharmony_ci
2537db96d56Sopenharmony_ci   .. versionadded:: 3.11
2547db96d56Sopenharmony_ci      To use ThinLTO feature, use ``--with-lto=thin`` on Clang.
2557db96d56Sopenharmony_ci
2567db96d56Sopenharmony_ci.. cmdoption:: --with-computed-gotos
2577db96d56Sopenharmony_ci
2587db96d56Sopenharmony_ci   Enable computed gotos in evaluation loop (enabled by default on supported
2597db96d56Sopenharmony_ci   compilers).
2607db96d56Sopenharmony_ci
2617db96d56Sopenharmony_ci.. cmdoption:: --without-pymalloc
2627db96d56Sopenharmony_ci
2637db96d56Sopenharmony_ci   Disable the specialized Python memory allocator :ref:`pymalloc <pymalloc>`
2647db96d56Sopenharmony_ci   (enabled by default).
2657db96d56Sopenharmony_ci
2667db96d56Sopenharmony_ci   See also :envvar:`PYTHONMALLOC` environment variable.
2677db96d56Sopenharmony_ci
2687db96d56Sopenharmony_ci.. cmdoption:: --without-doc-strings
2697db96d56Sopenharmony_ci
2707db96d56Sopenharmony_ci   Disable static documentation strings to reduce the memory footprint (enabled
2717db96d56Sopenharmony_ci   by default). Documentation strings defined in Python are not affected.
2727db96d56Sopenharmony_ci
2737db96d56Sopenharmony_ci   Don't define the ``WITH_DOC_STRINGS`` macro.
2747db96d56Sopenharmony_ci
2757db96d56Sopenharmony_ci   See the ``PyDoc_STRVAR()`` macro.
2767db96d56Sopenharmony_ci
2777db96d56Sopenharmony_ci.. cmdoption:: --enable-profiling
2787db96d56Sopenharmony_ci
2797db96d56Sopenharmony_ci   Enable C-level code profiling with ``gprof`` (disabled by default).
2807db96d56Sopenharmony_ci
2817db96d56Sopenharmony_ci
2827db96d56Sopenharmony_ci.. _debug-build:
2837db96d56Sopenharmony_ci
2847db96d56Sopenharmony_ciPython Debug Build
2857db96d56Sopenharmony_ci------------------
2867db96d56Sopenharmony_ci
2877db96d56Sopenharmony_ciA debug build is Python built with the :option:`--with-pydebug` configure
2887db96d56Sopenharmony_cioption.
2897db96d56Sopenharmony_ci
2907db96d56Sopenharmony_ciEffects of a debug build:
2917db96d56Sopenharmony_ci
2927db96d56Sopenharmony_ci* Display all warnings by default: the list of default warning filters is empty
2937db96d56Sopenharmony_ci  in the :mod:`warnings` module.
2947db96d56Sopenharmony_ci* Add ``d`` to :data:`sys.abiflags`.
2957db96d56Sopenharmony_ci* Add :func:`sys.gettotalrefcount` function.
2967db96d56Sopenharmony_ci* Add :option:`-X showrefcount <-X>` command line option.
2977db96d56Sopenharmony_ci* Add :envvar:`PYTHONTHREADDEBUG` environment variable.
2987db96d56Sopenharmony_ci* Add support for the ``__lltrace__`` variable: enable low-level tracing in the
2997db96d56Sopenharmony_ci  bytecode evaluation loop if the variable is defined.
3007db96d56Sopenharmony_ci* Install :ref:`debug hooks on memory allocators <default-memory-allocators>`
3017db96d56Sopenharmony_ci  to detect buffer overflow and other memory errors.
3027db96d56Sopenharmony_ci* Define ``Py_DEBUG`` and ``Py_REF_DEBUG`` macros.
3037db96d56Sopenharmony_ci* Add runtime checks: code surrounded by ``#ifdef Py_DEBUG`` and ``#endif``.
3047db96d56Sopenharmony_ci  Enable ``assert(...)`` and ``_PyObject_ASSERT(...)`` assertions: don't set
3057db96d56Sopenharmony_ci  the ``NDEBUG`` macro (see also the :option:`--with-assertions` configure
3067db96d56Sopenharmony_ci  option). Main runtime checks:
3077db96d56Sopenharmony_ci
3087db96d56Sopenharmony_ci  * Add sanity checks on the function arguments.
3097db96d56Sopenharmony_ci  * Unicode and int objects are created with their memory filled with a pattern
3107db96d56Sopenharmony_ci    to detect usage of uninitialized objects.
3117db96d56Sopenharmony_ci  * Ensure that functions which can clear or replace the current exception are
3127db96d56Sopenharmony_ci    not called with an exception raised.
3137db96d56Sopenharmony_ci  * Check that deallocator functions don't change the current exception.
3147db96d56Sopenharmony_ci  * The garbage collector (:func:`gc.collect` function) runs some basic checks
3157db96d56Sopenharmony_ci    on objects consistency.
3167db96d56Sopenharmony_ci  * The :c:macro:`Py_SAFE_DOWNCAST()` macro checks for integer underflow and
3177db96d56Sopenharmony_ci    overflow when downcasting from wide types to narrow types.
3187db96d56Sopenharmony_ci
3197db96d56Sopenharmony_ciSee also the :ref:`Python Development Mode <devmode>` and the
3207db96d56Sopenharmony_ci:option:`--with-trace-refs` configure option.
3217db96d56Sopenharmony_ci
3227db96d56Sopenharmony_ci.. versionchanged:: 3.8
3237db96d56Sopenharmony_ci   Release builds and debug builds are now ABI compatible: defining the
3247db96d56Sopenharmony_ci   ``Py_DEBUG`` macro no longer implies the ``Py_TRACE_REFS`` macro (see the
3257db96d56Sopenharmony_ci   :option:`--with-trace-refs` option), which introduces the only ABI
3267db96d56Sopenharmony_ci   incompatibility.
3277db96d56Sopenharmony_ci
3287db96d56Sopenharmony_ci
3297db96d56Sopenharmony_ciDebug options
3307db96d56Sopenharmony_ci-------------
3317db96d56Sopenharmony_ci
3327db96d56Sopenharmony_ci.. cmdoption:: --with-pydebug
3337db96d56Sopenharmony_ci
3347db96d56Sopenharmony_ci   :ref:`Build Python in debug mode <debug-build>`: define the ``Py_DEBUG``
3357db96d56Sopenharmony_ci   macro (disabled by default).
3367db96d56Sopenharmony_ci
3377db96d56Sopenharmony_ci.. cmdoption:: --with-trace-refs
3387db96d56Sopenharmony_ci
3397db96d56Sopenharmony_ci   Enable tracing references for debugging purpose (disabled by default).
3407db96d56Sopenharmony_ci
3417db96d56Sopenharmony_ci   Effects:
3427db96d56Sopenharmony_ci
3437db96d56Sopenharmony_ci   * Define the ``Py_TRACE_REFS`` macro.
3447db96d56Sopenharmony_ci   * Add :func:`sys.getobjects` function.
3457db96d56Sopenharmony_ci   * Add :envvar:`PYTHONDUMPREFS` environment variable.
3467db96d56Sopenharmony_ci
3477db96d56Sopenharmony_ci   This build is not ABI compatible with release build (default build) or debug
3487db96d56Sopenharmony_ci   build (``Py_DEBUG`` and ``Py_REF_DEBUG`` macros).
3497db96d56Sopenharmony_ci
3507db96d56Sopenharmony_ci   .. versionadded:: 3.8
3517db96d56Sopenharmony_ci
3527db96d56Sopenharmony_ci.. cmdoption:: --with-assertions
3537db96d56Sopenharmony_ci
3547db96d56Sopenharmony_ci   Build with C assertions enabled (default is no): ``assert(...);`` and
3557db96d56Sopenharmony_ci   ``_PyObject_ASSERT(...);``.
3567db96d56Sopenharmony_ci
3577db96d56Sopenharmony_ci   If set, the ``NDEBUG`` macro is not defined in the :envvar:`OPT` compiler
3587db96d56Sopenharmony_ci   variable.
3597db96d56Sopenharmony_ci
3607db96d56Sopenharmony_ci   See also the :option:`--with-pydebug` option (:ref:`debug build
3617db96d56Sopenharmony_ci   <debug-build>`) which also enables assertions.
3627db96d56Sopenharmony_ci
3637db96d56Sopenharmony_ci   .. versionadded:: 3.6
3647db96d56Sopenharmony_ci
3657db96d56Sopenharmony_ci.. cmdoption:: --with-valgrind
3667db96d56Sopenharmony_ci
3677db96d56Sopenharmony_ci   Enable Valgrind support (default is no).
3687db96d56Sopenharmony_ci
3697db96d56Sopenharmony_ci.. cmdoption:: --with-dtrace
3707db96d56Sopenharmony_ci
3717db96d56Sopenharmony_ci   Enable DTrace support (default is no).
3727db96d56Sopenharmony_ci
3737db96d56Sopenharmony_ci   See :ref:`Instrumenting CPython with DTrace and SystemTap
3747db96d56Sopenharmony_ci   <instrumentation>`.
3757db96d56Sopenharmony_ci
3767db96d56Sopenharmony_ci   .. versionadded:: 3.6
3777db96d56Sopenharmony_ci
3787db96d56Sopenharmony_ci.. cmdoption:: --with-address-sanitizer
3797db96d56Sopenharmony_ci
3807db96d56Sopenharmony_ci   Enable AddressSanitizer memory error detector, ``asan`` (default is no).
3817db96d56Sopenharmony_ci
3827db96d56Sopenharmony_ci   .. versionadded:: 3.6
3837db96d56Sopenharmony_ci
3847db96d56Sopenharmony_ci.. cmdoption:: --with-memory-sanitizer
3857db96d56Sopenharmony_ci
3867db96d56Sopenharmony_ci   Enable MemorySanitizer allocation error detector, ``msan`` (default is no).
3877db96d56Sopenharmony_ci
3887db96d56Sopenharmony_ci   .. versionadded:: 3.6
3897db96d56Sopenharmony_ci
3907db96d56Sopenharmony_ci.. cmdoption:: --with-undefined-behavior-sanitizer
3917db96d56Sopenharmony_ci
3927db96d56Sopenharmony_ci   Enable UndefinedBehaviorSanitizer undefined behaviour detector, ``ubsan``
3937db96d56Sopenharmony_ci   (default is no).
3947db96d56Sopenharmony_ci
3957db96d56Sopenharmony_ci   .. versionadded:: 3.6
3967db96d56Sopenharmony_ci
3977db96d56Sopenharmony_ci
3987db96d56Sopenharmony_ciLinker options
3997db96d56Sopenharmony_ci--------------
4007db96d56Sopenharmony_ci
4017db96d56Sopenharmony_ci.. cmdoption:: --enable-shared
4027db96d56Sopenharmony_ci
4037db96d56Sopenharmony_ci   Enable building a shared Python library: ``libpython`` (default is no).
4047db96d56Sopenharmony_ci
4057db96d56Sopenharmony_ci.. cmdoption:: --without-static-libpython
4067db96d56Sopenharmony_ci
4077db96d56Sopenharmony_ci   Do not build ``libpythonMAJOR.MINOR.a`` and do not install ``python.o``
4087db96d56Sopenharmony_ci   (built and enabled by default).
4097db96d56Sopenharmony_ci
4107db96d56Sopenharmony_ci   .. versionadded:: 3.10
4117db96d56Sopenharmony_ci
4127db96d56Sopenharmony_ci
4137db96d56Sopenharmony_ciLibraries options
4147db96d56Sopenharmony_ci-----------------
4157db96d56Sopenharmony_ci
4167db96d56Sopenharmony_ci.. cmdoption:: --with-libs='lib1 ...'
4177db96d56Sopenharmony_ci
4187db96d56Sopenharmony_ci   Link against additional libraries (default is no).
4197db96d56Sopenharmony_ci
4207db96d56Sopenharmony_ci.. cmdoption:: --with-system-expat
4217db96d56Sopenharmony_ci
4227db96d56Sopenharmony_ci   Build the :mod:`pyexpat` module using an installed ``expat`` library
4237db96d56Sopenharmony_ci   (default is no).
4247db96d56Sopenharmony_ci
4257db96d56Sopenharmony_ci.. cmdoption:: --with-system-ffi
4267db96d56Sopenharmony_ci
4277db96d56Sopenharmony_ci   Build the :mod:`_ctypes` extension module using an installed ``ffi``
4287db96d56Sopenharmony_ci   library, see the :mod:`ctypes` module (default is system-dependent).
4297db96d56Sopenharmony_ci
4307db96d56Sopenharmony_ci.. cmdoption:: --with-system-libmpdec
4317db96d56Sopenharmony_ci
4327db96d56Sopenharmony_ci   Build the ``_decimal`` extension module using an installed ``mpdec``
4337db96d56Sopenharmony_ci   library, see the :mod:`decimal` module (default is no).
4347db96d56Sopenharmony_ci
4357db96d56Sopenharmony_ci   .. versionadded:: 3.3
4367db96d56Sopenharmony_ci
4377db96d56Sopenharmony_ci.. cmdoption:: --with-readline=editline
4387db96d56Sopenharmony_ci
4397db96d56Sopenharmony_ci   Use ``editline`` library for backend of the :mod:`readline` module.
4407db96d56Sopenharmony_ci
4417db96d56Sopenharmony_ci   Define the ``WITH_EDITLINE`` macro.
4427db96d56Sopenharmony_ci
4437db96d56Sopenharmony_ci   .. versionadded:: 3.10
4447db96d56Sopenharmony_ci
4457db96d56Sopenharmony_ci.. cmdoption:: --without-readline
4467db96d56Sopenharmony_ci
4477db96d56Sopenharmony_ci   Don't build the :mod:`readline` module (built by default).
4487db96d56Sopenharmony_ci
4497db96d56Sopenharmony_ci   Don't define the ``HAVE_LIBREADLINE`` macro.
4507db96d56Sopenharmony_ci
4517db96d56Sopenharmony_ci   .. versionadded:: 3.10
4527db96d56Sopenharmony_ci
4537db96d56Sopenharmony_ci.. cmdoption:: --with-libm=STRING
4547db96d56Sopenharmony_ci
4557db96d56Sopenharmony_ci   Override ``libm`` math library to *STRING* (default is system-dependent).
4567db96d56Sopenharmony_ci
4577db96d56Sopenharmony_ci.. cmdoption:: --with-libc=STRING
4587db96d56Sopenharmony_ci
4597db96d56Sopenharmony_ci   Override ``libc`` C library to *STRING* (default is system-dependent).
4607db96d56Sopenharmony_ci
4617db96d56Sopenharmony_ci.. cmdoption:: --with-openssl=DIR
4627db96d56Sopenharmony_ci
4637db96d56Sopenharmony_ci   Root of the OpenSSL directory.
4647db96d56Sopenharmony_ci
4657db96d56Sopenharmony_ci   .. versionadded:: 3.7
4667db96d56Sopenharmony_ci
4677db96d56Sopenharmony_ci.. cmdoption:: --with-openssl-rpath=[no|auto|DIR]
4687db96d56Sopenharmony_ci
4697db96d56Sopenharmony_ci   Set runtime library directory (rpath) for OpenSSL libraries:
4707db96d56Sopenharmony_ci
4717db96d56Sopenharmony_ci   * ``no`` (default): don't set rpath;
4727db96d56Sopenharmony_ci   * ``auto``: auto-detect rpath from :option:`--with-openssl` and
4737db96d56Sopenharmony_ci     ``pkg-config``;
4747db96d56Sopenharmony_ci   * *DIR*: set an explicit rpath.
4757db96d56Sopenharmony_ci
4767db96d56Sopenharmony_ci   .. versionadded:: 3.10
4777db96d56Sopenharmony_ci
4787db96d56Sopenharmony_ci
4797db96d56Sopenharmony_ciSecurity Options
4807db96d56Sopenharmony_ci----------------
4817db96d56Sopenharmony_ci
4827db96d56Sopenharmony_ci.. cmdoption:: --with-hash-algorithm=[fnv|siphash13|siphash24]
4837db96d56Sopenharmony_ci
4847db96d56Sopenharmony_ci   Select hash algorithm for use in ``Python/pyhash.c``:
4857db96d56Sopenharmony_ci
4867db96d56Sopenharmony_ci   * ``siphash13`` (default);
4877db96d56Sopenharmony_ci   * ``siphash24``;
4887db96d56Sopenharmony_ci   * ``fnv``.
4897db96d56Sopenharmony_ci
4907db96d56Sopenharmony_ci   .. versionadded:: 3.4
4917db96d56Sopenharmony_ci
4927db96d56Sopenharmony_ci   .. versionadded:: 3.11
4937db96d56Sopenharmony_ci      ``siphash13`` is added and it is the new default.
4947db96d56Sopenharmony_ci
4957db96d56Sopenharmony_ci.. cmdoption:: --with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2
4967db96d56Sopenharmony_ci
4977db96d56Sopenharmony_ci   Built-in hash modules:
4987db96d56Sopenharmony_ci
4997db96d56Sopenharmony_ci   * ``md5``;
5007db96d56Sopenharmony_ci   * ``sha1``;
5017db96d56Sopenharmony_ci   * ``sha256``;
5027db96d56Sopenharmony_ci   * ``sha512``;
5037db96d56Sopenharmony_ci   * ``sha3`` (with shake);
5047db96d56Sopenharmony_ci   * ``blake2``.
5057db96d56Sopenharmony_ci
5067db96d56Sopenharmony_ci   .. versionadded:: 3.9
5077db96d56Sopenharmony_ci
5087db96d56Sopenharmony_ci.. cmdoption:: --with-ssl-default-suites=[python|openssl|STRING]
5097db96d56Sopenharmony_ci
5107db96d56Sopenharmony_ci   Override the OpenSSL default cipher suites string:
5117db96d56Sopenharmony_ci
5127db96d56Sopenharmony_ci   * ``python`` (default): use Python's preferred selection;
5137db96d56Sopenharmony_ci   * ``openssl``: leave OpenSSL's defaults untouched;
5147db96d56Sopenharmony_ci   * *STRING*: use a custom string
5157db96d56Sopenharmony_ci
5167db96d56Sopenharmony_ci   See the :mod:`ssl` module.
5177db96d56Sopenharmony_ci
5187db96d56Sopenharmony_ci   .. versionadded:: 3.7
5197db96d56Sopenharmony_ci
5207db96d56Sopenharmony_ci   .. versionchanged:: 3.10
5217db96d56Sopenharmony_ci
5227db96d56Sopenharmony_ci      The settings ``python`` and *STRING* also set TLS 1.2 as minimum
5237db96d56Sopenharmony_ci      protocol version.
5247db96d56Sopenharmony_ci
5257db96d56Sopenharmony_cimacOS Options
5267db96d56Sopenharmony_ci-------------
5277db96d56Sopenharmony_ci
5287db96d56Sopenharmony_ciSee ``Mac/README.rst``.
5297db96d56Sopenharmony_ci
5307db96d56Sopenharmony_ci.. cmdoption:: --enable-universalsdk
5317db96d56Sopenharmony_ci.. cmdoption:: --enable-universalsdk=SDKDIR
5327db96d56Sopenharmony_ci
5337db96d56Sopenharmony_ci   Create a universal binary build. *SDKDIR* specifies which macOS SDK should
5347db96d56Sopenharmony_ci   be used to perform the build (default is no).
5357db96d56Sopenharmony_ci
5367db96d56Sopenharmony_ci.. cmdoption:: --enable-framework
5377db96d56Sopenharmony_ci.. cmdoption:: --enable-framework=INSTALLDIR
5387db96d56Sopenharmony_ci
5397db96d56Sopenharmony_ci   Create a Python.framework rather than a traditional Unix install. Optional
5407db96d56Sopenharmony_ci   *INSTALLDIR* specifies the installation path (default is no).
5417db96d56Sopenharmony_ci
5427db96d56Sopenharmony_ci.. cmdoption:: --with-universal-archs=ARCH
5437db96d56Sopenharmony_ci
5447db96d56Sopenharmony_ci   Specify the kind of universal binary that should be created. This option is
5457db96d56Sopenharmony_ci   only valid when :option:`--enable-universalsdk` is set.
5467db96d56Sopenharmony_ci
5477db96d56Sopenharmony_ci   Options:
5487db96d56Sopenharmony_ci
5497db96d56Sopenharmony_ci   * ``universal2``;
5507db96d56Sopenharmony_ci   * ``32-bit``;
5517db96d56Sopenharmony_ci   * ``64-bit``;
5527db96d56Sopenharmony_ci   * ``3-way``;
5537db96d56Sopenharmony_ci   * ``intel``;
5547db96d56Sopenharmony_ci   * ``intel-32``;
5557db96d56Sopenharmony_ci   * ``intel-64``;
5567db96d56Sopenharmony_ci   * ``all``.
5577db96d56Sopenharmony_ci
5587db96d56Sopenharmony_ci.. cmdoption:: --with-framework-name=FRAMEWORK
5597db96d56Sopenharmony_ci
5607db96d56Sopenharmony_ci   Specify the name for the python framework on macOS only valid when
5617db96d56Sopenharmony_ci   :option:`--enable-framework` is set (default: ``Python``).
5627db96d56Sopenharmony_ci
5637db96d56Sopenharmony_ci
5647db96d56Sopenharmony_ciCross Compiling Options
5657db96d56Sopenharmony_ci-----------------------
5667db96d56Sopenharmony_ci
5677db96d56Sopenharmony_ciCross compiling, also known as cross building, can be used to build Python
5687db96d56Sopenharmony_cifor another CPU architecture or platform. Cross compiling requires a Python
5697db96d56Sopenharmony_ciinterpreter for the build platform. The version of the build Python must match
5707db96d56Sopenharmony_cithe version of the cross compiled host Python.
5717db96d56Sopenharmony_ci
5727db96d56Sopenharmony_ci.. cmdoption:: --build=BUILD
5737db96d56Sopenharmony_ci
5747db96d56Sopenharmony_ci   configure for building on BUILD, usually guessed by :program:`config.guess`.
5757db96d56Sopenharmony_ci
5767db96d56Sopenharmony_ci.. cmdoption:: --host=HOST
5777db96d56Sopenharmony_ci
5787db96d56Sopenharmony_ci   cross-compile to build programs to run on HOST (target platform)
5797db96d56Sopenharmony_ci
5807db96d56Sopenharmony_ci.. cmdoption:: --with-build-python=path/to/python
5817db96d56Sopenharmony_ci
5827db96d56Sopenharmony_ci   path to build ``python`` binary for cross compiling
5837db96d56Sopenharmony_ci
5847db96d56Sopenharmony_ci   .. versionadded:: 3.11
5857db96d56Sopenharmony_ci
5867db96d56Sopenharmony_ci.. cmdoption:: CONFIG_SITE=file
5877db96d56Sopenharmony_ci
5887db96d56Sopenharmony_ci   An environment variable that points to a file with configure overrides.
5897db96d56Sopenharmony_ci
5907db96d56Sopenharmony_ci   Example *config.site* file::
5917db96d56Sopenharmony_ci
5927db96d56Sopenharmony_ci      # config.site-aarch64
5937db96d56Sopenharmony_ci      ac_cv_buggy_getaddrinfo=no
5947db96d56Sopenharmony_ci      ac_cv_file__dev_ptmx=yes
5957db96d56Sopenharmony_ci      ac_cv_file__dev_ptc=no
5967db96d56Sopenharmony_ci
5977db96d56Sopenharmony_ci
5987db96d56Sopenharmony_ciCross compiling example::
5997db96d56Sopenharmony_ci
6007db96d56Sopenharmony_ci   CONFIG_SITE=config.site-aarch64 ../configure \
6017db96d56Sopenharmony_ci       --build=x86_64-pc-linux-gnu \
6027db96d56Sopenharmony_ci       --host=aarch64-unknown-linux-gnu \
6037db96d56Sopenharmony_ci       --with-build-python=../x86_64/python
6047db96d56Sopenharmony_ci
6057db96d56Sopenharmony_ci
6067db96d56Sopenharmony_ciPython Build System
6077db96d56Sopenharmony_ci===================
6087db96d56Sopenharmony_ci
6097db96d56Sopenharmony_ciMain files of the build system
6107db96d56Sopenharmony_ci------------------------------
6117db96d56Sopenharmony_ci
6127db96d56Sopenharmony_ci* :file:`configure.ac` => :file:`configure`;
6137db96d56Sopenharmony_ci* :file:`Makefile.pre.in` => :file:`Makefile` (created by :file:`configure`);
6147db96d56Sopenharmony_ci* :file:`pyconfig.h` (created by :file:`configure`);
6157db96d56Sopenharmony_ci* :file:`Modules/Setup`: C extensions built by the Makefile using
6167db96d56Sopenharmony_ci  :file:`Module/makesetup` shell script;
6177db96d56Sopenharmony_ci* :file:`setup.py`: C extensions built using the :mod:`distutils` module.
6187db96d56Sopenharmony_ci
6197db96d56Sopenharmony_ciMain build steps
6207db96d56Sopenharmony_ci----------------
6217db96d56Sopenharmony_ci
6227db96d56Sopenharmony_ci* C files (``.c``) are built as object files (``.o``).
6237db96d56Sopenharmony_ci* A static ``libpython`` library (``.a``) is created from objects files.
6247db96d56Sopenharmony_ci* ``python.o`` and the static ``libpython`` library are linked into the
6257db96d56Sopenharmony_ci  final ``python`` program.
6267db96d56Sopenharmony_ci* C extensions are built by the Makefile (see :file:`Modules/Setup`)
6277db96d56Sopenharmony_ci  and ``python setup.py build``.
6287db96d56Sopenharmony_ci
6297db96d56Sopenharmony_ciMain Makefile targets
6307db96d56Sopenharmony_ci---------------------
6317db96d56Sopenharmony_ci
6327db96d56Sopenharmony_ci* ``make``: Build Python with the standard library.
6337db96d56Sopenharmony_ci* ``make platform:``: build the ``python`` program, but don't build the
6347db96d56Sopenharmony_ci  standard library extension modules.
6357db96d56Sopenharmony_ci* ``make profile-opt``: build Python using Profile Guided Optimization (PGO).
6367db96d56Sopenharmony_ci  You can use the configure :option:`--enable-optimizations` option to make
6377db96d56Sopenharmony_ci  this the default target of the ``make`` command (``make all`` or just
6387db96d56Sopenharmony_ci  ``make``).
6397db96d56Sopenharmony_ci* ``make buildbottest``: Build Python and run the Python test suite, the same
6407db96d56Sopenharmony_ci  way than buildbots test Python. Set ``TESTTIMEOUT`` variable (in seconds)
6417db96d56Sopenharmony_ci  to change the test timeout (1200 by default: 20 minutes).
6427db96d56Sopenharmony_ci* ``make install``: Build and install Python.
6437db96d56Sopenharmony_ci* ``make regen-all``: Regenerate (almost) all generated files;
6447db96d56Sopenharmony_ci  ``make regen-stdlib-module-names`` and ``autoconf`` must be run separately
6457db96d56Sopenharmony_ci  for the remaining generated files.
6467db96d56Sopenharmony_ci* ``make clean``: Remove built files.
6477db96d56Sopenharmony_ci* ``make distclean``: Same than ``make clean``, but remove also files created
6487db96d56Sopenharmony_ci  by the configure script.
6497db96d56Sopenharmony_ci
6507db96d56Sopenharmony_ciC extensions
6517db96d56Sopenharmony_ci------------
6527db96d56Sopenharmony_ci
6537db96d56Sopenharmony_ciSome C extensions are built as built-in modules, like the ``sys`` module.
6547db96d56Sopenharmony_ciThey are built with the ``Py_BUILD_CORE_BUILTIN`` macro defined.
6557db96d56Sopenharmony_ciBuilt-in modules have no ``__file__`` attribute::
6567db96d56Sopenharmony_ci
6577db96d56Sopenharmony_ci    >>> import sys
6587db96d56Sopenharmony_ci    >>> sys
6597db96d56Sopenharmony_ci    <module 'sys' (built-in)>
6607db96d56Sopenharmony_ci    >>> sys.__file__
6617db96d56Sopenharmony_ci    Traceback (most recent call last):
6627db96d56Sopenharmony_ci      File "<stdin>", line 1, in <module>
6637db96d56Sopenharmony_ci    AttributeError: module 'sys' has no attribute '__file__'
6647db96d56Sopenharmony_ci
6657db96d56Sopenharmony_ciOther C extensions are built as dynamic libraries, like the ``_asyncio`` module.
6667db96d56Sopenharmony_ciThey are built with the ``Py_BUILD_CORE_MODULE`` macro defined.
6677db96d56Sopenharmony_ciExample on Linux x86-64::
6687db96d56Sopenharmony_ci
6697db96d56Sopenharmony_ci    >>> import _asyncio
6707db96d56Sopenharmony_ci    >>> _asyncio
6717db96d56Sopenharmony_ci    <module '_asyncio' from '/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'>
6727db96d56Sopenharmony_ci    >>> _asyncio.__file__
6737db96d56Sopenharmony_ci    '/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'
6747db96d56Sopenharmony_ci
6757db96d56Sopenharmony_ci:file:`Modules/Setup` is used to generate Makefile targets to build C extensions.
6767db96d56Sopenharmony_ciAt the beginning of the files, C extensions are built as built-in modules.
6777db96d56Sopenharmony_ciExtensions defined after the ``*shared*`` marker are built as dynamic libraries.
6787db96d56Sopenharmony_ci
6797db96d56Sopenharmony_ciThe :file:`setup.py` script only builds C extensions as shared libraries using
6807db96d56Sopenharmony_cithe :mod:`distutils` module.
6817db96d56Sopenharmony_ci
6827db96d56Sopenharmony_ciThe :c:macro:`PyAPI_FUNC()`, :c:macro:`PyAPI_API()` and
6837db96d56Sopenharmony_ci:c:macro:`PyMODINIT_FUNC()` macros of :file:`Include/pyport.h` are defined
6847db96d56Sopenharmony_cidifferently depending if the ``Py_BUILD_CORE_MODULE`` macro is defined:
6857db96d56Sopenharmony_ci
6867db96d56Sopenharmony_ci* Use ``Py_EXPORTED_SYMBOL`` if the ``Py_BUILD_CORE_MODULE`` is defined
6877db96d56Sopenharmony_ci* Use ``Py_IMPORTED_SYMBOL`` otherwise.
6887db96d56Sopenharmony_ci
6897db96d56Sopenharmony_ciIf the ``Py_BUILD_CORE_BUILTIN`` macro is used by mistake on a C extension
6907db96d56Sopenharmony_cibuilt as a shared library, its ``PyInit_xxx()`` function is not exported,
6917db96d56Sopenharmony_cicausing an :exc:`ImportError` on import.
6927db96d56Sopenharmony_ci
6937db96d56Sopenharmony_ci
6947db96d56Sopenharmony_ciCompiler and linker flags
6957db96d56Sopenharmony_ci=========================
6967db96d56Sopenharmony_ci
6977db96d56Sopenharmony_ciOptions set by the ``./configure`` script and environment variables and used by
6987db96d56Sopenharmony_ci``Makefile``.
6997db96d56Sopenharmony_ci
7007db96d56Sopenharmony_ciPreprocessor flags
7017db96d56Sopenharmony_ci------------------
7027db96d56Sopenharmony_ci
7037db96d56Sopenharmony_ci.. envvar:: CONFIGURE_CPPFLAGS
7047db96d56Sopenharmony_ci
7057db96d56Sopenharmony_ci   Value of :envvar:`CPPFLAGS` variable passed to the ``./configure`` script.
7067db96d56Sopenharmony_ci
7077db96d56Sopenharmony_ci   .. versionadded:: 3.6
7087db96d56Sopenharmony_ci
7097db96d56Sopenharmony_ci.. envvar:: CPPFLAGS
7107db96d56Sopenharmony_ci
7117db96d56Sopenharmony_ci   (Objective) C/C++ preprocessor flags, e.g. ``-I<include dir>`` if you have
7127db96d56Sopenharmony_ci   headers in a nonstandard directory ``<include dir>``.
7137db96d56Sopenharmony_ci
7147db96d56Sopenharmony_ci   Both :envvar:`CPPFLAGS` and :envvar:`LDFLAGS` need to contain the shell's
7157db96d56Sopenharmony_ci   value for setup.py to be able to build extension modules using the
7167db96d56Sopenharmony_ci   directories specified in the environment variables.
7177db96d56Sopenharmony_ci
7187db96d56Sopenharmony_ci.. envvar:: BASECPPFLAGS
7197db96d56Sopenharmony_ci
7207db96d56Sopenharmony_ci   .. versionadded:: 3.4
7217db96d56Sopenharmony_ci
7227db96d56Sopenharmony_ci.. envvar:: PY_CPPFLAGS
7237db96d56Sopenharmony_ci
7247db96d56Sopenharmony_ci   Extra preprocessor flags added for building the interpreter object files.
7257db96d56Sopenharmony_ci
7267db96d56Sopenharmony_ci   Default: ``$(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS)``.
7277db96d56Sopenharmony_ci
7287db96d56Sopenharmony_ci   .. versionadded:: 3.2
7297db96d56Sopenharmony_ci
7307db96d56Sopenharmony_ciCompiler flags
7317db96d56Sopenharmony_ci--------------
7327db96d56Sopenharmony_ci
7337db96d56Sopenharmony_ci.. envvar:: CC
7347db96d56Sopenharmony_ci
7357db96d56Sopenharmony_ci   C compiler command.
7367db96d56Sopenharmony_ci
7377db96d56Sopenharmony_ci   Example: ``gcc -pthread``.
7387db96d56Sopenharmony_ci
7397db96d56Sopenharmony_ci.. envvar:: MAINCC
7407db96d56Sopenharmony_ci
7417db96d56Sopenharmony_ci   C compiler command used to build the ``main()`` function of programs like
7427db96d56Sopenharmony_ci   ``python``.
7437db96d56Sopenharmony_ci
7447db96d56Sopenharmony_ci   Variable set by the :option:`--with-cxx-main` option of the configure
7457db96d56Sopenharmony_ci   script.
7467db96d56Sopenharmony_ci
7477db96d56Sopenharmony_ci   Default: ``$(CC)``.
7487db96d56Sopenharmony_ci
7497db96d56Sopenharmony_ci.. envvar:: CXX
7507db96d56Sopenharmony_ci
7517db96d56Sopenharmony_ci   C++ compiler command.
7527db96d56Sopenharmony_ci
7537db96d56Sopenharmony_ci   Used if the :option:`--with-cxx-main` option is used.
7547db96d56Sopenharmony_ci
7557db96d56Sopenharmony_ci   Example: ``g++ -pthread``.
7567db96d56Sopenharmony_ci
7577db96d56Sopenharmony_ci.. envvar:: CFLAGS
7587db96d56Sopenharmony_ci
7597db96d56Sopenharmony_ci   C compiler flags.
7607db96d56Sopenharmony_ci
7617db96d56Sopenharmony_ci.. envvar:: CFLAGS_NODIST
7627db96d56Sopenharmony_ci
7637db96d56Sopenharmony_ci   :envvar:`CFLAGS_NODIST` is used for building the interpreter and stdlib C
7647db96d56Sopenharmony_ci   extensions.  Use it when a compiler flag should *not* be part of the
7657db96d56Sopenharmony_ci   distutils :envvar:`CFLAGS` once Python is installed (:issue:`21121`).
7667db96d56Sopenharmony_ci
7677db96d56Sopenharmony_ci   In particular, :envvar:`CFLAGS` should not contain:
7687db96d56Sopenharmony_ci
7697db96d56Sopenharmony_ci   * the compiler flag ``-I`` (for setting the search path for include files).
7707db96d56Sopenharmony_ci     The ``-I`` flags are processed from left to right, and any flags in
7717db96d56Sopenharmony_ci     :envvar:`CFLAGS` would take precedence over user- and package-supplied ``-I``
7727db96d56Sopenharmony_ci     flags.
7737db96d56Sopenharmony_ci
7747db96d56Sopenharmony_ci   * hardening flags such as ``-Werror`` because distributions cannot control
7757db96d56Sopenharmony_ci     whether packages installed by users conform to such heightened
7767db96d56Sopenharmony_ci     standards.
7777db96d56Sopenharmony_ci
7787db96d56Sopenharmony_ci   .. versionadded:: 3.5
7797db96d56Sopenharmony_ci
7807db96d56Sopenharmony_ci.. envvar:: EXTRA_CFLAGS
7817db96d56Sopenharmony_ci
7827db96d56Sopenharmony_ci   Extra C compiler flags.
7837db96d56Sopenharmony_ci
7847db96d56Sopenharmony_ci.. envvar:: CONFIGURE_CFLAGS
7857db96d56Sopenharmony_ci
7867db96d56Sopenharmony_ci   Value of :envvar:`CFLAGS` variable passed to the ``./configure``
7877db96d56Sopenharmony_ci   script.
7887db96d56Sopenharmony_ci
7897db96d56Sopenharmony_ci   .. versionadded:: 3.2
7907db96d56Sopenharmony_ci
7917db96d56Sopenharmony_ci.. envvar:: CONFIGURE_CFLAGS_NODIST
7927db96d56Sopenharmony_ci
7937db96d56Sopenharmony_ci   Value of :envvar:`CFLAGS_NODIST` variable passed to the ``./configure``
7947db96d56Sopenharmony_ci   script.
7957db96d56Sopenharmony_ci
7967db96d56Sopenharmony_ci   .. versionadded:: 3.5
7977db96d56Sopenharmony_ci
7987db96d56Sopenharmony_ci.. envvar:: BASECFLAGS
7997db96d56Sopenharmony_ci
8007db96d56Sopenharmony_ci   Base compiler flags.
8017db96d56Sopenharmony_ci
8027db96d56Sopenharmony_ci.. envvar:: OPT
8037db96d56Sopenharmony_ci
8047db96d56Sopenharmony_ci   Optimization flags.
8057db96d56Sopenharmony_ci
8067db96d56Sopenharmony_ci.. envvar:: CFLAGS_ALIASING
8077db96d56Sopenharmony_ci
8087db96d56Sopenharmony_ci   Strict or non-strict aliasing flags used to compile ``Python/dtoa.c``.
8097db96d56Sopenharmony_ci
8107db96d56Sopenharmony_ci   .. versionadded:: 3.7
8117db96d56Sopenharmony_ci
8127db96d56Sopenharmony_ci.. envvar:: CCSHARED
8137db96d56Sopenharmony_ci
8147db96d56Sopenharmony_ci   Compiler flags used to build a shared library.
8157db96d56Sopenharmony_ci
8167db96d56Sopenharmony_ci   For example, ``-fPIC`` is used on Linux and on BSD.
8177db96d56Sopenharmony_ci
8187db96d56Sopenharmony_ci.. envvar:: CFLAGSFORSHARED
8197db96d56Sopenharmony_ci
8207db96d56Sopenharmony_ci   Extra C flags added for building the interpreter object files.
8217db96d56Sopenharmony_ci
8227db96d56Sopenharmony_ci   Default: ``$(CCSHARED)`` when :option:`--enable-shared` is used, or an empty
8237db96d56Sopenharmony_ci   string otherwise.
8247db96d56Sopenharmony_ci
8257db96d56Sopenharmony_ci.. envvar:: PY_CFLAGS
8267db96d56Sopenharmony_ci
8277db96d56Sopenharmony_ci   Default: ``$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)``.
8287db96d56Sopenharmony_ci
8297db96d56Sopenharmony_ci.. envvar:: PY_CFLAGS_NODIST
8307db96d56Sopenharmony_ci
8317db96d56Sopenharmony_ci   Default: ``$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal``.
8327db96d56Sopenharmony_ci
8337db96d56Sopenharmony_ci   .. versionadded:: 3.5
8347db96d56Sopenharmony_ci
8357db96d56Sopenharmony_ci.. envvar:: PY_STDMODULE_CFLAGS
8367db96d56Sopenharmony_ci
8377db96d56Sopenharmony_ci   C flags used for building the interpreter object files.
8387db96d56Sopenharmony_ci
8397db96d56Sopenharmony_ci   Default: ``$(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED)``.
8407db96d56Sopenharmony_ci
8417db96d56Sopenharmony_ci   .. versionadded:: 3.7
8427db96d56Sopenharmony_ci
8437db96d56Sopenharmony_ci.. envvar:: PY_CORE_CFLAGS
8447db96d56Sopenharmony_ci
8457db96d56Sopenharmony_ci   Default: ``$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE``.
8467db96d56Sopenharmony_ci
8477db96d56Sopenharmony_ci   .. versionadded:: 3.2
8487db96d56Sopenharmony_ci
8497db96d56Sopenharmony_ci.. envvar:: PY_BUILTIN_MODULE_CFLAGS
8507db96d56Sopenharmony_ci
8517db96d56Sopenharmony_ci   Compiler flags to build a standard library extension module as a built-in
8527db96d56Sopenharmony_ci   module, like the :mod:`posix` module.
8537db96d56Sopenharmony_ci
8547db96d56Sopenharmony_ci   Default: ``$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN``.
8557db96d56Sopenharmony_ci
8567db96d56Sopenharmony_ci   .. versionadded:: 3.8
8577db96d56Sopenharmony_ci
8587db96d56Sopenharmony_ci.. envvar:: PURIFY
8597db96d56Sopenharmony_ci
8607db96d56Sopenharmony_ci   Purify command. Purify is a memory debugger program.
8617db96d56Sopenharmony_ci
8627db96d56Sopenharmony_ci   Default: empty string (not used).
8637db96d56Sopenharmony_ci
8647db96d56Sopenharmony_ci
8657db96d56Sopenharmony_ciLinker flags
8667db96d56Sopenharmony_ci------------
8677db96d56Sopenharmony_ci
8687db96d56Sopenharmony_ci.. envvar:: LINKCC
8697db96d56Sopenharmony_ci
8707db96d56Sopenharmony_ci   Linker command used to build programs like ``python`` and ``_testembed``.
8717db96d56Sopenharmony_ci
8727db96d56Sopenharmony_ci   Default: ``$(PURIFY) $(MAINCC)``.
8737db96d56Sopenharmony_ci
8747db96d56Sopenharmony_ci.. envvar:: CONFIGURE_LDFLAGS
8757db96d56Sopenharmony_ci
8767db96d56Sopenharmony_ci   Value of :envvar:`LDFLAGS` variable passed to the ``./configure`` script.
8777db96d56Sopenharmony_ci
8787db96d56Sopenharmony_ci   Avoid assigning :envvar:`CFLAGS`, :envvar:`LDFLAGS`, etc. so users can use
8797db96d56Sopenharmony_ci   them on the command line to append to these values without stomping the
8807db96d56Sopenharmony_ci   pre-set values.
8817db96d56Sopenharmony_ci
8827db96d56Sopenharmony_ci   .. versionadded:: 3.2
8837db96d56Sopenharmony_ci
8847db96d56Sopenharmony_ci.. envvar:: LDFLAGS_NODIST
8857db96d56Sopenharmony_ci
8867db96d56Sopenharmony_ci   :envvar:`LDFLAGS_NODIST` is used in the same manner as
8877db96d56Sopenharmony_ci   :envvar:`CFLAGS_NODIST`.  Use it when a linker flag should *not* be part of
8887db96d56Sopenharmony_ci   the distutils :envvar:`LDFLAGS` once Python is installed (:issue:`35257`).
8897db96d56Sopenharmony_ci
8907db96d56Sopenharmony_ci   In particular, :envvar:`LDFLAGS` should not contain:
8917db96d56Sopenharmony_ci
8927db96d56Sopenharmony_ci   * the compiler flag ``-L`` (for setting the search path for libraries).
8937db96d56Sopenharmony_ci     The ``-L`` flags are processed from left to right, and any flags in
8947db96d56Sopenharmony_ci     :envvar:`LDFLAGS` would take precedence over user- and package-supplied ``-L``
8957db96d56Sopenharmony_ci     flags.
8967db96d56Sopenharmony_ci
8977db96d56Sopenharmony_ci.. envvar:: CONFIGURE_LDFLAGS_NODIST
8987db96d56Sopenharmony_ci
8997db96d56Sopenharmony_ci   Value of :envvar:`LDFLAGS_NODIST` variable passed to the ``./configure``
9007db96d56Sopenharmony_ci   script.
9017db96d56Sopenharmony_ci
9027db96d56Sopenharmony_ci   .. versionadded:: 3.8
9037db96d56Sopenharmony_ci
9047db96d56Sopenharmony_ci.. envvar:: LDFLAGS
9057db96d56Sopenharmony_ci
9067db96d56Sopenharmony_ci   Linker flags, e.g. ``-L<lib dir>`` if you have libraries in a nonstandard
9077db96d56Sopenharmony_ci   directory ``<lib dir>``.
9087db96d56Sopenharmony_ci
9097db96d56Sopenharmony_ci   Both :envvar:`CPPFLAGS` and :envvar:`LDFLAGS` need to contain the shell's
9107db96d56Sopenharmony_ci   value for setup.py to be able to build extension modules using the
9117db96d56Sopenharmony_ci   directories specified in the environment variables.
9127db96d56Sopenharmony_ci
9137db96d56Sopenharmony_ci.. envvar:: LIBS
9147db96d56Sopenharmony_ci
9157db96d56Sopenharmony_ci   Linker flags to pass libraries to the linker when linking the Python
9167db96d56Sopenharmony_ci   executable.
9177db96d56Sopenharmony_ci
9187db96d56Sopenharmony_ci   Example: ``-lrt``.
9197db96d56Sopenharmony_ci
9207db96d56Sopenharmony_ci.. envvar:: LDSHARED
9217db96d56Sopenharmony_ci
9227db96d56Sopenharmony_ci   Command to build a shared library.
9237db96d56Sopenharmony_ci
9247db96d56Sopenharmony_ci   Default: ``@LDSHARED@ $(PY_LDFLAGS)``.
9257db96d56Sopenharmony_ci
9267db96d56Sopenharmony_ci.. envvar:: BLDSHARED
9277db96d56Sopenharmony_ci
9287db96d56Sopenharmony_ci   Command to build ``libpython`` shared library.
9297db96d56Sopenharmony_ci
9307db96d56Sopenharmony_ci   Default: ``@BLDSHARED@ $(PY_CORE_LDFLAGS)``.
9317db96d56Sopenharmony_ci
9327db96d56Sopenharmony_ci.. envvar:: PY_LDFLAGS
9337db96d56Sopenharmony_ci
9347db96d56Sopenharmony_ci   Default: ``$(CONFIGURE_LDFLAGS) $(LDFLAGS)``.
9357db96d56Sopenharmony_ci
9367db96d56Sopenharmony_ci.. envvar:: PY_LDFLAGS_NODIST
9377db96d56Sopenharmony_ci
9387db96d56Sopenharmony_ci   Default: ``$(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST)``.
9397db96d56Sopenharmony_ci
9407db96d56Sopenharmony_ci   .. versionadded:: 3.8
9417db96d56Sopenharmony_ci
9427db96d56Sopenharmony_ci.. envvar:: PY_CORE_LDFLAGS
9437db96d56Sopenharmony_ci
9447db96d56Sopenharmony_ci   Linker flags used for building the interpreter object files.
9457db96d56Sopenharmony_ci
9467db96d56Sopenharmony_ci   .. versionadded:: 3.8
947