3. Python konfigurieren
***********************


3.1. Voraussetzungen für den Build
==================================

Um CPython zu bauen, brauchst du:

* Einen C11-Compiler. Optionale C11-Funktionen werden nicht benötigt.

* Unter Windows wird Microsoft Visual Studio 2017 oder neuer benötigt.

* Unterstützung für Gleitkommazahlen nach IEEE 754 sowie für
  Not-a-Number (NaN) bei Gleitkommazahlen.

* Unterstützung für Threads.

Geändert in Version 3.5: Unter Windows wird jetzt Visual Studio 2015
oder neuer benötigt.

Geändert in Version 3.6: Ausgewählte C99-Funktionen wie "<stdint.h>"
und "static inline"-Funktionen werden jetzt benötigt.

Geändert in Version 3.7: Thread-Unterstützung wird jetzt benötigt.

Geändert in Version 3.11: Ein C11-Compiler sowie Unterstützung für
IEEE 754 und NaN werden jetzt benötigt. Unter Windows wird Visual
Studio 2017 oder neuer benötigt.

Siehe auch **PEP 7** „Style Guide for C Code“ und **PEP 11** „CPython
platform support“.


3.1.1. Voraussetzungen für optionale Module
-------------------------------------------

Einige *optionale Module* der Standardbibliothek setzen voraus, dass
Bibliotheken von Dritten für die Entwicklung installiert sind (zum
Beispiel müssen Headerdateien verfügbar sein).

Fehlende Voraussetzungen werden in der Ausgabe von "configure"
gemeldet. Module, die wegen fehlender Abhängigkeiten nicht gebaut
werden, stehen am Ende der Ausgabe von "make", manchmal unter einem
internen Namen, etwa "_ctypes" für das Modul "ctypes".

Wenn du einen CPython-Interpreter ohne die optionalen Module
weitergibst, ist es gute Praxis, die Benutzer darauf hinzuweisen — sie
erwarten im Allgemeinen, dass die Module der Standardbibliothek
verfügbar sind.

Die Abhängigkeiten zum Bauen der optionalen Module sind:

+-----------------------------------+-----------------------------------+-----------------------------------+
| Abhängigkeit                      | Mindestversion                    | Python-Modul                      |
|===================================|===================================|===================================|
| libbz2                            |                                   | "bz2"                             |
+-----------------------------------+-----------------------------------+-----------------------------------+
| libffi                            | 3.3.0 empfohlen                   | "ctypes"                          |
+-----------------------------------+-----------------------------------+-----------------------------------+
| liblzma                           |                                   | "lzma"                            |
+-----------------------------------+-----------------------------------+-----------------------------------+
| libmpdec                          | 2.5.0                             | "decimal" [1]                     |
+-----------------------------------+-----------------------------------+-----------------------------------+
| libreadline oder libedit [2]      |                                   | "readline"                        |
+-----------------------------------+-----------------------------------+-----------------------------------+
| libuuid                           |                                   | "_uuid" [3]                       |
+-----------------------------------+-----------------------------------+-----------------------------------+
| ncurses [4]                       |                                   | "curses"                          |
+-----------------------------------+-----------------------------------+-----------------------------------+
| OpenSSL                           | [6]                               | "ssl", "hashlib" [5]              |
+-----------------------------------+-----------------------------------+-----------------------------------+
| SQLite                            | 3.15.2                            | "sqlite3"                         |
+-----------------------------------+-----------------------------------+-----------------------------------+
| Tcl/Tk                            | 8.5.12                            | "tkinter", IDLE, "turtle"         |
+-----------------------------------+-----------------------------------+-----------------------------------+
| zlib                              | 1.2.2.1                           | "zlib", "gzip", "ensurepip"       |
+-----------------------------------+-----------------------------------+-----------------------------------+
| zstd                              | 1.4.5                             | "compression.zstd"                |
+-----------------------------------+-----------------------------------+-----------------------------------+

[1] Ist *libmpdec* nicht verfügbar, verwendet das Modul "decimal" eine
    Umsetzung in reinem Python. Einzelheiten unter "--with-system-
    libmpdec".

[2] Unter "--with-readline" steht, wie du das Backend für das Modul
    "readline" auswählst.

[3] Das Modul "uuid" verwendet "_uuid", um „sichere“ UUIDs zu
    erzeugen. Einzelheiten stehen in der Dokumentation des Moduls.

[4] Das Modul "curses" benötigt die Bibliothek "libncurses" oder
    "libncursesw". Das Modul "curses.panel" benötigt zusätzlich die
    Bibliothek "libpanel" oder "libpanelw".

[5] Ist OpenSSL nicht verfügbar, verwendet das Modul "hashlib"
    beiliegende Umsetzungen mehrerer Hashfunktionen. Unter "--with-
    builtin-hashlib-hashes" steht, wie du die Verwendung von OpenSSL
    *erzwingst*.

[6] OpenSSL 1.1.1 is the minimum possible version to build against,
    but the series is end-of-life and no longer receives public
    security fixes.  Use the latest patch release of a currently
    supported LTS release series (see the OpenSSL Roadmap), or the
    package provided by your operating system if available.  Other
    libraries that offer an API compatible with OpenSSL 1.1.1 or later
    may work, but are not officially supported.

Beachte, dass die Tabelle nicht alle optionalen Module enthält.
Insbesondere plattformspezifische Module wie "winreg" sind hier nicht
aufgeführt.

Siehe auch:

  * Der devguide enthält eine vollständige Liste der Abhängigkeiten,
    die zum Bauen aller Module nötig sind, sowie Anleitungen, wie du
    sie auf den verbreiteten Plattformen installierst.

  * "--with-system-expat" erlaubt das Bauen mit einer externen
    Bibliothek libexpat.

  * Optionen für Abhängigkeiten von Dritten

Geändert in Version 3.1: Für "tkinter" wird jetzt Tcl/Tk in Version
8.3.1 benötigt.

Geändert in Version 3.5: Für "tkinter" wird jetzt Tcl/Tk in Version
8.4 benötigt.

Geändert in Version 3.7: Für "hashlib" und "ssl" wird jetzt OpenSSL
1.0.2 benötigt.

Geändert in Version 3.10: Für "hashlib" und "ssl" wird jetzt OpenSSL
1.1.1 benötigt. Für "sqlite3" wird jetzt SQLite 3.7.15 benötigt.

Geändert in Version 3.11: Für "tkinter" wird jetzt Tcl/Tk in Version
8.5.12 benötigt.

Geändert in Version 3.13: Für "sqlite3" wird jetzt SQLite 3.15.2
benötigt.


3.2. Erzeugte Dateien
=====================

Um die Abhängigkeiten beim Bauen zu verringern, enthält der Python-
Quellcode mehrere erzeugte Dateien. Befehle, um alle erzeugten Dateien
neu zu erzeugen:

   make regen-all
   make regen-stdlib-module-names
   make regen-limited-abi
   make regen-configure

Die Datei "Makefile.pre.in" dokumentiert die erzeugten Dateien, ihre
Eingaben und die Werkzeuge, mit denen sie neu erzeugt werden. Suche
dort nach den make-Zielen "regen-*".


3.2.1. Das Skript configure
---------------------------

Der Befehl "make regen-configure" erzeugt die Datei "aclocal.m4" und
das Skript "configure" neu. Dazu verwendet er das Shell-Skript
"Tools/build/regen-configure.sh", das einen Ubuntu-Container nutzt, um
dieselben Werkzeugversionen zu erhalten und eine reproduzierbare
Ausgabe zu bekommen.

Der Container ist nicht zwingend, der folgende Befehl lässt sich auch
lokal ausführen:

   autoreconf -ivf -Werror

Die erzeugten Dateien können sich je nach den genauen Versionen der
verwendeten Werkzeuge unterscheiden. Der von CPython verwendete
Container enthält Autoconf 2.72, "aclocal" aus Automake 1.16.5 und
pkg-config 1.8.1.

Geändert in Version 3.13: Zum Neuerzeugen von "configure" werden jetzt
Autoconf 2.71 und aclocal 1.16.5 verwendet.

Geändert in Version 3.14: Zum Neuerzeugen von "configure" wird jetzt
Autoconf 2.72 verwendet.


3.3. Optionen von configure
===========================

Alle Optionen des Skripts "configure" listest du so auf:

   ./configure --help

Siehe auch "Misc/SpecialBuilds.txt" in der Python-Quelldistribution.


3.3.1. Allgemeine Optionen
--------------------------

--enable-loadable-sqlite-extensions

   Unterstützt ladbare Erweiterungen im Erweiterungsmodul "_sqlite"
   des Moduls "sqlite3" (Vorgabe ist nein).

   Siehe die Methode "sqlite3.Connection.enable_load_extension()" des
   Moduls "sqlite3".

   Added in version 3.6.

--disable-ipv6

   Schaltet die Unterstützung für IPv6 ab (standardmäßig
   eingeschaltet, sofern unterstützt), siehe das Modul "socket".

--enable-big-digits=[15|30]

   Legt die Größe der Ziffern von Python-"int" in Bit fest: 15 oder 30
   Bit.

   Standardmäßig beträgt die Zifferngröße 30.

   Setzt "PYLONG_BITS_IN_DIGIT" auf "15" oder "30".

   Siehe "sys.int_info.bits_per_digit".

--with-suffix=SUFFIX

   Setzt das Suffix der ausführbaren Python-Datei auf *SUFFIX*.

   Das Standardsuffix ist ".exe" unter Windows und macOS (ausführbare
   Datei "python.exe"), ".js" bei Emscripten node, ".html" bei
   Emscripten browser, ".wasm" bei WASI und eine leere Zeichenkette
   auf den übrigen Plattformen (ausführbare Datei "python").

   Geändert in Version 3.11: Das Standardsuffix auf der WASM-Plattform
   ist eines von ".js", ".html" oder ".wasm".

--with-tzpath=<list of absolute paths separated by pathsep>

   Wählt den Standard-Suchpfad für Zeitzonen für "zoneinfo.TZPATH".
   Siehe die Konfiguration zur Übersetzungszeit des Moduls "zoneinfo".

   Vorgabe: "/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zon
   einfo:/etc/zoneinfo".

   Siehe den Pfadtrenner "os.pathsep".

   Added in version 3.9.

--without-decimal-contextvar

   Baut das Erweiterungsmodul "_decimal" mit einem Thread-lokalen
   Kontext anstelle eines Coroutine-lokalen Kontexts (Vorgabe), siehe
   das Modul "decimal".

   Siehe "decimal.HAVE_CONTEXTVAR" und das Modul "contextvars".

   Added in version 3.9.

--with-dbmliborder=<list of backend names>

   Überschreibt die Reihenfolge, in der die Datenbank-Backends für das
   Modul "dbm" geprüft werden

   Ein gültiger Wert ist eine mit Doppelpunkt (":") getrennte
   Zeichenkette mit den Namen der Backends:

   * "ndbm";

   * "gdbm";

   * "bdb".

--without-c-locale-coercion

   Schaltet die Angleichung der C-Locale an eine UTF-8-basierte Locale
   ab (standardmäßig eingeschaltet).

   Definiert das Makro "PY_COERCE_C_LOCALE" nicht.

   Siehe "PYTHONCOERCECLOCALE" und **PEP 538**.

--with-platlibdir=DIRNAME

   Name des Verzeichnisses der Python-Bibliothek (Vorgabe ist "lib").

   Fedora und SuSE verwenden auf 64-Bit-Plattformen "lib64".

   Siehe "sys.platlibdir".

   Added in version 3.9.

--with-wheel-pkg-dir=PATH

   Verzeichnis der Wheel-Pakete, die das Modul "ensurepip" verwendet
   (standardmäßig keines).

   Die Paketierungsrichtlinien einiger Linux-Distributionen empfehlen,
   Abhängigkeiten nicht beizulegen. Fedora installiert Wheel-Pakete
   zum Beispiel im Verzeichnis "/usr/share/python-wheels/" und
   installiert das Paket "ensurepip._bundled" nicht.

   Added in version 3.10.

--with-pkg-config=[check|yes|no]

   Ob configure **pkg-config** verwenden soll, um die Abhängigkeiten
   für den Build zu erkennen.

   * "check" (Vorgabe): **pkg-config** ist optional

   * "yes": **pkg-config** ist zwingend

   * "no": configure verwendet **pkg-config** nicht, selbst wenn es
     vorhanden ist

   Added in version 3.11.

--with-missing-stdlib-config=FILE

   Pfad zu einer JSON-Konfigurationsdatei mit eigenen Fehlermeldungen
   für fehlende Module der *Standardbibliothek*.

   Diese Option ist für Python-Distributoren gedacht, die
   distributionsspezifische Hinweise geben möchten, wenn Benutzer auf
   Module der Standardbibliothek stoßen, die fehlen oder getrennt
   paketiert sind.

   Die JSON-Datei sollte Namen fehlender Module auf eigene
   Fehlermeldungen abbilden. Wenn deine Distribution zum Beispiel
   "tkinter" und "_tkinter" getrennt paketiert und "_gdbm" aus
   rechtlichen Gründen ausschließt, könnte die Konfiguration Folgendes
   enthalten:

      {
          "_gdbm": "The '_gdbm' module is not available in this distribution",
          "tkinter": "Install the python-tk package to use tkinter",
          "_tkinter": "Install the python-tk package to use tkinter",
      }

   Added in version 3.15.

--enable-pystats

   Schaltet die interne Erfassung von Leistungsdaten in Python ein.

   Standardmäßig ist die Erfassung aus. Mit dem Befehl "python3 -X
   pystats" oder der Umgebungsvariablen "PYTHONSTATS=1" schaltest du
   die Erfassung beim Start von Python ein.

   Beim Beenden von Python werden die Daten ausgegeben, sofern die
   Erfassung eingeschaltet war und die Daten nicht gelöscht wurden.

   Wirkung:

   * Fügt die Befehlszeilenoption "-X pystats" hinzu.

   * Fügt die Umgebungsvariable "PYTHONSTATS" hinzu.

   * Definiert das Makro "Py_STATS".

   * Fügt dem Modul "sys" Funktionen hinzu:

     * "sys._stats_on()": Schaltet die Erfassung ein.

     * "sys._stats_off()": Schaltet die Erfassung aus.

     * "sys._stats_clear()": Löscht die Daten.

     * "sys._stats_dump()": Gibt die Daten in eine Datei aus und
       löscht sie.

   Die Daten werden in eine beliebige (wahrscheinlich eindeutige)
   Datei in "/tmp/py_stats/" (Unix) beziehungsweise
   "C:\temp\py_stats\" (Windows) ausgegeben. Existiert dieses
   Verzeichnis nicht, werden die Ergebnisse auf stderr ausgegeben.

   Zum Lesen der Daten verwende "Tools/scripts/summarize_stats.py".

   Daten:

   * Opcode:

     * Spezialisierung: success, failure, hit, deferred, miss, deopt,
       failures;

     * Ausführungszahl;

     * Paarzahl.

   * Aufruf:

     * Inline eingesetzte Python-Aufrufe;

     * PyEval-Aufrufe;

     * Auf den Stapel gelegte Frames;

     * Erzeugte Frame-Objekte;

     * Eval-Aufrufe: vector, generator, legacy, function VECTORCALL,
       build class, slot, function „ex“, API, method.

   * Objekt:

     * incref und decref;

     * incref und decref des Interpreters;

     * Allokationen: alle, 512 Bytes, 4 kiB, groß;

     * Freigaben;

     * in und aus Freelists;

     * Wörterbuch materialisiert/dematerialisiert;

     * Typ-Cache;

     * Optimierungsversuche;

     * erzeugte und ausgeführte Optimierungs-Traces;

     * ausgeführte uops.

   * Garbage Collector:

     * Durchläufe der Garbage Collection;

     * besuchte Objekte;

     * eingesammelte Objekte.

   Added in version 3.11.

--disable-gil

   Schaltet die Unterstützung dafür ein, Python ohne den *global
   interpreter lock* (GIL) zu betreiben: *free-threaded build*.

   Definiert das Makro "Py_GIL_DISABLED" und fügt ""t"" zu
   "sys.abiflags" hinzu.

   Mehr dazu steht unter Free-Threaded CPython.

   Added in version 3.13.

--enable-experimental-jit=[no|yes|yes-off|interpreter]

   Gibt an, wie der experimentelle Just-in-time-Compiler eingebunden
   wird.

   * "no": Baut den JIT nicht.

   * "yes": Schaltet den JIT ein. Um ihn zur Laufzeit abzuschalten,
     setze die Umgebungsvariable "PYTHON_JIT=0".

   * "yes-off": Baut den JIT, schaltet ihn aber standardmäßig ab. Um
     ihn zur Laufzeit einzuschalten, setze die Umgebungsvariable
     "PYTHON_JIT=1".

   * "interpreter": Schaltet den „JIT-Interpreter“ ein (nur nützlich
     für die Fehlersuche am JIT selbst). Um ihn zur Laufzeit
     abzuschalten, setze die Umgebungsvariable "PYTHON_JIT=0".

   "--enable-experimental-jit=no" ist das Standardverhalten, wenn die
   Option nicht angegeben wird, und "--enable-experimental-jit" ist
   die Kurzform für "--enable-experimental-jit=yes". Mehr dazu steht
   in "Tools/jit/README.md", auch wie du die nötigen Abhängigkeiten
   für die Bauzeit installierst.

   Bemerkung:

     Wenn du CPython mit eingeschaltetem JIT baust, stelle sicher,
     dass auf deinem System Python 3.11 oder neuer installiert ist.

   Added in version 3.13.

PKG_CONFIG

   Pfad zum Werkzeug "pkg-config".

PKG_CONFIG_LIBDIR

PKG_CONFIG_PATH

   Optionen von "pkg-config".

--disable-epoll

   Baut ohne "epoll", das heißt, "select.epoll()" ist nicht vorhanden,
   selbst wenn das System eine Funktion *epoll_create* bereitstellt.
   Das lässt sich auf Systemen verwenden, auf denen *epoll_create*
   oder *epoll_create1* verfügbar, aber mit der Linux-Semantik nicht
   verträglich ist.

   Added in version 3.15.


3.3.2. Optionen des C-Compilers
-------------------------------

CC

   Befehl des C-Compilers.

CFLAGS

   Flags des C-Compilers.

CPP

   Befehl des C-Präprozessors.

CPPFLAGS

   Flags des C-Präprozessors, etwa "-I*include_dir*".


3.3.3. Optionen des Linkers
---------------------------

LDFLAGS

   Linker-Flags, etwa "-L*library_directory*".

LIBS

   Bibliotheken, die an den Linker übergeben werden, etwa
   "-l*library*".

MACHDEP

   Name für maschinenabhängige Bibliotheksdateien.


3.3.4. Optionen für Abhängigkeiten von Dritten
----------------------------------------------

Added in version 3.11.

BZIP2_CFLAGS

BZIP2_LIBS

   C-Compiler- und Linker-Flags, um Python gegen "libbz2" zu linken,
   verwendet vom Modul "bz2", überschreibt "pkg-config".

CURSES_CFLAGS

CURSES_LIBS

   C-Compiler- und Linker-Flags für "libncurses" oder "libncursesw",
   verwendet vom Modul "curses", überschreibt "pkg-config".

GDBM_CFLAGS

GDBM_LIBS

   C-Compiler- und Linker-Flags für "gdbm".

LIBEDIT_CFLAGS

LIBEDIT_LIBS

   C-Compiler- und Linker-Flags für "libedit", verwendet vom Modul
   "readline", überschreibt "pkg-config".

LIBFFI_CFLAGS

LIBFFI_LIBS

   C-Compiler- und Linker-Flags für "libffi", verwendet vom Modul
   "ctypes", überschreibt "pkg-config".

LIBMPDEC_CFLAGS

LIBMPDEC_LIBS

   C-Compiler- und Linker-Flags für "libmpdec", verwendet vom Modul
   "decimal", überschreibt "pkg-config".

   Bemerkung:

     Diese Umgebungsvariablen haben keine Wirkung, sofern nicht "--
     with-system-libmpdec" angegeben ist.

LIBLZMA_CFLAGS

LIBLZMA_LIBS

   C-Compiler- und Linker-Flags für "liblzma", verwendet vom Modul
   "lzma", überschreibt "pkg-config".

LIBREADLINE_CFLAGS

LIBREADLINE_LIBS

   C-Compiler- und Linker-Flags für "libreadline", verwendet vom Modul
   "readline", überschreibt "pkg-config".

LIBSQLITE3_CFLAGS

LIBSQLITE3_LIBS

   C-Compiler- und Linker-Flags für "libsqlite3", verwendet vom Modul
   "sqlite3", überschreibt "pkg-config".

LIBUUID_CFLAGS

LIBUUID_LIBS

   C-Compiler- und Linker-Flags für "libuuid", verwendet vom Modul
   "uuid", überschreibt "pkg-config".

LIBZSTD_CFLAGS

LIBZSTD_LIBS

   C-Compiler- und Linker-Flags für "libzstd", verwendet vom Modul
   "compression.zstd", überschreibt "pkg-config".

   Added in version 3.14.

PANEL_CFLAGS

PANEL_LIBS

   C-Compiler- und Linker-Flags für PANEL, überschreibt "pkg-config".

   C-Compiler- und Linker-Flags für "libpanel" oder "libpanelw",
   verwendet vom Modul "curses.panel", überschreibt "pkg-config".

TCLTK_CFLAGS

TCLTK_LIBS

   C-Compiler- und Linker-Flags für TCLTK, überschreibt "pkg-config".

ZLIB_CFLAGS

ZLIB_LIBS

   C-Compiler- und Linker-Flags für "libzlib", verwendet vom Modul
   "gzip", überschreibt "pkg-config".


3.3.5. WebAssembly-Optionen
---------------------------

--enable-wasm-dynamic-linking

   Schaltet die Unterstützung für dynamisches Linken bei WASM ein.

   Dynamisches Linken ermöglicht "dlopen". Die Dateigröße der
   ausführbaren Datei wächst, weil toter Code nur begrenzt entfernt
   werden kann und zusätzliche Funktionen hinzukommen.

   Added in version 3.11.

--enable-wasm-pthreads

   Schaltet die Unterstützung für pthreads bei WASM ein.

   Added in version 3.11.


3.3.6. Optionen für die Installation
------------------------------------

--prefix=PREFIX

   Installiert architekturunabhängige Dateien in PREFIX. Unter Unix
   ist die Vorgabe "/usr/local".

   Dieser Wert lässt sich zur Laufzeit über "sys.prefix" abrufen.

   Mit "--prefix="$HOME/.local/"" lässt sich Python zum Beispiel im
   eigenen Benutzerverzeichnis installieren.

--exec-prefix=EPREFIX

   Installiert architekturabhängige Dateien in EPREFIX, Vorgabe ist "
   --prefix".

   Dieser Wert lässt sich zur Laufzeit über "sys.exec_prefix" abrufen.

--disable-test-modules

   Baut und installiert die Testmodule nicht, etwa das Paket "test"
   oder das Erweiterungsmodul "_testcapi" (werden standardmäßig gebaut
   und installiert).

   Added in version 3.10.

--with-ensurepip=[upgrade|install|no]

   Wählt den Befehl von "ensurepip", der bei der Python-Installation
   ausgeführt wird:

   * "upgrade" (Vorgabe): führt "python -m ensurepip --altinstall
     --upgrade" aus.

   * "install": führt "python -m ensurepip --altinstall" aus;

   * "no": führt ensurepip nicht aus;

   Added in version 3.6.


3.3.7. Optionen für die Leistung
--------------------------------

Für die beste Leistung wird empfohlen, Python mit "--enable-
optimizations --with-lto" (PGO + LTO) zu konfigurieren. Auch das
experimentelle Flag "--enable-bolt" lässt sich verwenden, um die
Leistung zu verbessern.

--enable-optimizations

   Schaltet Profile Guided Optimization (PGO) über "PROFILE_TASK" ein
   (standardmäßig abgeschaltet).

   Der C-Compiler Clang benötigt für PGO das Programm "llvm-profdata".
   Unter macOS benötigt es auch GCC, denn GCC ist dort nur ein anderer
   Name für Clang.

   Schaltet außerdem die semantische Interposition in libpython ab,
   wenn "--enable-shared" und GCC verwendet werden: fügt "-fno-
   semantic-interposition" zu den Compiler- und Linker-Flags hinzu.

   Bemerkung:

     Beim Bauen können Compiler-Warnungen auftreten, dass für einige
     Quelldateien keine Profildaten vorliegen. Diese Warnungen sind
     harmlos, weil beim Erfassen der Profildaten nur ein Teil des
     Codes durchlaufen wird. Um sie bei Clang abzuschalten,
     unterdrücke sie von Hand, indem du "-Wno-profile-instr-
     unprofiled" zu "CFLAGS" hinzufügst.

   Added in version 3.6.

   Geändert in Version 3.10: Verwendet "-fno-semantic-interposition"
   bei GCC.

PROFILE_TASK

   Im Makefile verwendete Umgebungsvariable: die Python-
   Befehlszeilenargumente für die Aufgabe, die das Profil erzeugt.

   Vorgabe: "-m test --pgo --timeout=$(TESTTIMEOUT)".

   Added in version 3.8.

   Geändert in Version 3.13: Ein Fehlschlag der Aufgabe wird nicht
   mehr stillschweigend übergangen.

--with-lto=[full|thin|no|yes]

   Schaltet Link Time Optimization (LTO) in jedem Build ein
   (standardmäßig abgeschaltet).

   Der C-Compiler Clang benötigt für LTO "llvm-ar" (unter macOS "ar")
   sowie einen LTO-fähigen Linker ("ld.gold" oder "lld").

   Added in version 3.6.

   Added in version 3.11: Um ThinLTO zu verwenden, nimm bei Clang "--
   with-lto=thin".

   Geändert in Version 3.12: Verwendet ThinLTO bei Clang als
   Standardvorgehen für die Optimierung, sofern der Compiler das Flag
   annimmt.

--enable-bolt

   Schaltet die Verwendung des BOLT post-link binary optimizer ein
   (standardmäßig abgeschaltet).

   BOLT ist Teil des LLVM-Projekts, aber nicht immer in dessen
   Binärdistributionen enthalten. Dieses Flag setzt voraus, dass
   "llvm-bolt" und "merge-fdata" verfügbar sind.

   BOLT ist noch ein recht junges Projekt, dieses Flag sollte daher
   vorläufig als experimentell gelten. Weil das Werkzeug auf
   Maschinencode arbeitet, hängt sein Erfolg von der Kombination aus
   Bauumgebung, den übrigen Optimierungsargumenten von configure und
   der CPU-Architektur ab, und nicht alle Kombinationen werden
   unterstützt. Von BOLT-Versionen vor LLVM 16 ist bekannt, dass BOLT
   in manchen Fällen abstürzt. Für die Optimierung mit BOLT wird LLVM
   16 oder neuer dringend empfohlen.

   Mit den **configure**-Variablen "BOLT_INSTRUMENT_FLAGS" und
   "BOLT_APPLY_FLAGS" lässt sich der Standardsatz an Argumenten für
   **llvm-bolt** überschreiben, mit denen Binärdateien instrumentiert
   beziehungsweise BOLT-Daten auf sie angewandt werden.

   Added in version 3.12.

BOLT_APPLY_FLAGS

   Argumente für "llvm-bolt" beim Erzeugen einer mit BOLT optimierten
   Binärdatei.

   Added in version 3.12.

BOLT_INSTRUMENT_FLAGS

   Argumente für "llvm-bolt" beim Instrumentieren von Binärdateien.

   Added in version 3.12.

--with-computed-gotos

   Schaltet berechnete gotos in der Auswertungsschleife ein (auf
   unterstützten Compilern standardmäßig eingeschaltet).

--with-tail-call-interp

   Schaltet Interpreter mit Tail Calls in CPython ein. Wenn
   eingeschaltet, wird dringend empfohlen, auch PGO einzuschalten ("--
   enable-optimizations"). Diese Option setzt insbesondere einen
   C-Compiler mit richtiger Tail-Call-Unterstützung und der
   Aufrufkonvention preserve_none voraus. Clang 19 und neuer
   unterstützt das zum Beispiel.

   Added in version 3.14.

--without-frame-pointers

   Schaltet Frame-Pointer ab, die standardmäßig eingeschaltet sind
   (siehe **PEP 831**).

   Standardmäßig hängt der Build Flags zum Erzeugen von Frame- oder
   Backchain-Pointern an "BASECFLAGS" an:

   * "-fno-omit-frame-pointer" und/oder "-mno-omit-leaf-frame-pointer"
     werden hinzugefügt, wenn der Compiler sie unterstützt.

   * "-marm" und/oder "-mno-thumb" wird auf 32-Bit-ARM hinzugefügt,
     sofern unterstützt,

   * auf s390x-Plattformen wird, sofern unterstützt, *stattdessen*
     "-mbackchain" anstelle der obigen Frame-Pointer-Flags
     hinzugefügt.

   * auf ppc64le-Plattformen sind keine Compiler-Flags nötig, weil das
     Power-ABI verlangt, dass Compiler standardmäßig eine Backchain
     führen.

   Frame-Pointer erlauben es Profilern, Debuggern und Werkzeugen zur
   Systemverfolgung ("perf", "eBPF", "dtrace", "gdb"), den
   C-Aufrufstapel ohne DWARF-Metadaten abzulaufen. Die Flags werden
   über "sysconfig" an C-Erweiterungen von Dritten weitergegeben. Auf
   Compilern, die sie nicht kennen, überspringt der Build sie
   stillschweigend.

   Nachgelagerte Paketierer und Autoren nativer Bibliotheken, die mit
   eigenen Bausystemen gebaut werden, sollten dieselben Flags setzen,
   damit die Unwind-Kette über alle nativen Frames hinweg nicht reißt.

   Added in version 3.15.

--without-mimalloc

   Schaltet den schnellen Allokator mimalloc ab (standardmäßig
   eingeschaltet).

   Diese Option lässt sich nicht zusammen mit "--disable-gil"
   verwenden, weil der *free-threaded* Build mimalloc benötigt.

   Siehe auch die Umgebungsvariable "PYTHONMALLOC".

--without-pymalloc

   Schaltet den spezialisierten Python-Speicherallokator pymalloc ab
   (standardmäßig eingeschaltet).

   Siehe auch die Umgebungsvariable "PYTHONMALLOC".

--with-pymalloc-hugepages

   Schaltet die Unterstützung großer Speicherseiten für die Arenen von
   pymalloc ein (standardmäßig abgeschaltet). Wenn eingeschaltet,
   wächst die Arenengröße auf 64-Bit-Plattformen auf 2 MiB, und die
   Arenen werden mit "MAP_HUGETLB" (Linux) beziehungsweise
   "MEM_LARGE_PAGES" (Windows) belegt, mit automatischem Rückfall auf
   gewöhnliche Seiten.

   Selbst wenn mit dieser Option kompiliert wurde, werden große
   Speicherseiten zur Laufzeit **nicht** verwendet, solange die
   Umgebungsvariable "PYTHON_PYMALLOC_HUGEPAGES" nicht auf "1" gesetzt
   ist. Diese ausdrückliche Zustimmung ist nötig, weil große
   Speicherseiten

   * unter Linux Risiken tragen: Ist der Vorrat an großen
     Speicherseiten erschöpft, liefern Seitenfehler (auch Copy-on-
     Write-Fehler nach "os.fork()") ein "SIGBUS" und beenden den
     Prozess.

   * unter Windows ein besonderes Recht brauchen. Einzelheiten stehen
     in der Windows-Dokumentation zu großen Speicherseiten. Python
     schlägt beim Start fehl, wenn der Benutzer das nötige Recht
     SeLockMemoryPrivilege nicht besitzt.

   Das Skript configure prüft, ob die Plattform "MAP_HUGETLB"
   unterstützt, und gibt eine Warnung aus, wenn es nicht verfügbar
   ist.

   Verwende unter Windows das Flag "--pymalloc-hugepages" mit
   "build.bat" oder setze die MSBuild-Eigenschaft
   "UsePymallocHugepages".

   Added in version 3.15.

--without-doc-strings

   Schaltet statische Dokumentationszeichenketten ab, um den
   Speicherbedarf zu verringern (standardmäßig eingeschaltet). In
   Python definierte Dokumentationszeichenketten sind davon nicht
   betroffen.

   Definiert das Makro "WITH_DOC_STRINGS" nicht.

   Siehe das Makro "PyDoc_STRVAR()".

--enable-profiling

   Schaltet die Profilierung von Code auf C-Ebene mit "gprof" ein
   (standardmäßig abgeschaltet).

--with-strict-overflow

   Fügt "-fstrict-overflow" zu den Flags des C-Compilers hinzu
   (standardmäßig fügen wir stattdessen "-fno-strict-overflow" hinzu).

--without-remote-debug

   Schaltet die in **PEP 768** beschriebene Unterstützung für
   Fernfehlersuche ab (standardmäßig eingeschaltet). Ist dieses Flag
   angegeben, wird der Code nicht kompiliert, der es dem Interpreter
   erlaubt, die Ausführung einer Python-Datei in einem getrennten
   Prozess anzustoßen, wie in **PEP 768** beschrieben. Das betrifft
   sowohl die Möglichkeit, Code zur Ausführung einzuplanen, als auch
   die, Code zur Ausführung zu empfangen.

   Py_REMOTE_DEBUG

      Dieses Makro ist standardmäßig definiert, sofern Python nicht
      mit "--without-remote-debug" konfiguriert wurde.

      Beachte, dass die Fernfehlersuche auch bei definiertem Makro
      möglicherweise nicht verfügbar ist, etwa auf einer
      unverträglichen Plattform.

   Added in version 3.14.


3.3.8. Debug-Build von Python
-----------------------------

Ein Debug-Build ist ein Python, das mit der configure-Option "--with-
pydebug" gebaut wurde.

Wirkung eines Debug-Builds:

* Zeigt standardmäßig alle Warnungen an: die Liste der Standard-
  Warnfilter im Modul "warnings" ist leer.

* Fügt "d" zu "sys.abiflags" hinzu.

* Fügt die Funktion "sys.gettotalrefcount()" hinzu.

* Fügt die Befehlszeilenoption "-X showrefcount" hinzu.

* Fügt die Befehlszeilenoption "-d" und die Umgebungsvariable
  "PYTHONDEBUG" hinzu, um den Parser zu untersuchen.

* Fügt Unterstützung für die Variable "__lltrace__" hinzu: schaltet
  die Verfolgung auf niedriger Ebene in der Bytecode-
  Auswertungsschleife ein, wenn die Variable definiert ist.

* Installiert Debug-Haken an den Speicherallokatoren, um
  Pufferüberläufe und andere Speicherfehler zu erkennen.

* Definiert die Makros "Py_DEBUG" und "Py_REF_DEBUG".

* Fügt Laufzeitprüfungen hinzu: Code, der von "#ifdef Py_DEBUG" und
  "#endif" umgeben ist. Schaltet die Zusicherungen "assert(...)" und
  "_PyObject_ASSERT(...)" ein, indem das Makro "NDEBUG" nicht gesetzt
  wird (siehe auch die configure-Option "--with-assertions"). Die
  wichtigsten Laufzeitprüfungen:

  * Fügt Plausibilitätsprüfungen der Funktionsargumente hinzu.

  * Unicode- und int-Objekte werden mit einem Muster im Speicher
    erzeugt, damit die Verwendung nicht initialisierter Objekte
    auffällt.

  * Stellt sicher, dass Funktionen, die die aktuelle Ausnahme löschen
    oder ersetzen können, nicht bei ausgelöster Ausnahme aufgerufen
    werden.

  * Prüft, dass Freigabefunktionen die aktuelle Ausnahme nicht
    verändern.

  * Der Garbage Collector (Funktion "gc.collect()") führt einige
    grundlegende Prüfungen der Objektkonsistenz durch.

  * Das Makro "Py_SAFE_DOWNCAST()" prüft auf Unter- und Überlauf von
    Ganzzahlen, wenn von breiten auf schmale Typen herabgecastet wird.

Siehe auch den Entwicklungsmodus von Python und die configure-Option "
--with-trace-refs".

Geändert in Version 3.8: Release-Builds sind nun ABI-verträglich mit
Debug-Builds: das Definieren des Makros "Py_DEBUG" zieht das Makro
"Py_TRACE_REFS" nicht mehr nach sich (siehe die Option "--with-trace-
refs"). Debug-Builds legen allerdings weiterhin mehr Symbole offen als
Release-Builds, und Code, der gegen einen Debug-Build gebaut wurde,
ist nicht zwangsläufig mit einem Release-Build verträglich.


3.3.9. Debug-Optionen
---------------------

--with-pydebug

   Baut Python im Debug-Modus: definiert das Makro "Py_DEBUG"
   (standardmäßig abgeschaltet).

--with-trace-refs

   Schaltet die Verfolgung von Referenzen zur Fehlersuche ein
   (standardmäßig abgeschaltet).

   Wirkung:

   * Definiert das Makro "Py_TRACE_REFS".

   * Fügt die Funktion "sys.getobjects()" hinzu.

   * Fügt die Umgebungsvariable "PYTHONDUMPREFS" hinzu.

   Mit der Umgebungsvariablen "PYTHONDUMPREFS" lassen sich Objekte und
   Referenzzähler ausgeben, die beim Beenden von Python noch leben.

   Statisch belegte Objekte werden nicht verfolgt.

   Added in version 3.8.

   Geändert in Version 3.13: Dieser Build ist nun ABI-verträglich mit
   dem Release-Build und dem Debug-Build.

--with-assertions

   Baut mit eingeschalteten C-Zusicherungen (Vorgabe ist nein):
   "assert(...);" und "_PyObject_ASSERT(...);".

   Wenn gesetzt, wird das Makro "NDEBUG" in der Compiler-Variablen
   "OPT" nicht definiert.

   Siehe auch die Option "--with-pydebug" (Debug-Build), die
   Zusicherungen ebenfalls einschaltet.

   Added in version 3.6.

--with-valgrind

   Schaltet die Unterstützung für Valgrind ein (Vorgabe ist nein).

--with-dtrace

   Schaltet die Unterstützung für DTrace ein (Vorgabe ist nein).

   Siehe CPython mit DTrace und SystemTap instrumentieren.

   Added in version 3.6.

--with-address-sanitizer

   Schaltet den Speicherfehlersucher AddressSanitizer ein, "asan"
   (Vorgabe ist nein). Um die Erkennungsfähigkeiten von ASan zu
   verbessern, verbindest du das vielleicht noch mit "--without-
   pymalloc", um den spezialisierten Allokator für kleine Objekte
   abzuschalten, dessen Belegungen ASan nicht verfolgt.

   Added in version 3.6.

--with-memory-sanitizer

   Schaltet den Belegungsfehlersucher MemorySanitizer ein, "msan"
   (Vorgabe ist nein).

   MSan reports false positives for memory initialized by libraries
   that are not built with MSan, so either build all dependencies with
   MSan or disable the extension modules that use them in
   "Modules/Setup.local".

   Added in version 3.6.

--with-undefined-behavior-sanitizer

   Schaltet den Sucher für undefiniertes Verhalten
   UndefinedBehaviorSanitizer ein, "ubsan" (Vorgabe ist nein).

   Added in version 3.6.

--with-thread-sanitizer

   Schaltet den Wettlaufsucher ThreadSanitizer ein, "tsan" (Vorgabe
   ist nein).

   Added in version 3.13.


3.3.10. Optionen des Linkers
----------------------------

--enable-shared

   Schaltet das Bauen einer gemeinsam genutzten Python-Bibliothek ein:
   "libpython" (Vorgabe ist nein).

--without-static-libpython

   Baut "libpythonMAJOR.MINOR.a" nicht und installiert "python.o"
   nicht (wird standardmäßig gebaut und eingeschaltet).

   Added in version 3.10.

--enable-static-libpython-for-interpreter

   Linkt die Binärdatei des Python-Interpreters ("python3") nicht
   gegen die gemeinsam genutzte Python-Bibliothek, sondern statisch
   gegen "libpython", als wäre "--enable-shared" nicht verwendet
   worden — baut die gemeinsam genutzte "libpython" aber weiterhin
   (zur Verwendung durch andere Programme).

   Diese Option bewirkt nichts, wenn "--enable-shared" nicht verwendet
   wird.

   Standardmäßig wird (bei Verwendung von "-enable-shared") der
   Python-Interpreter gegen die gebaute gemeinsam genutzte Bibliothek
   gelinkt.

   Added in version 3.15.


3.3.11. Optionen für Bibliotheken
---------------------------------

--with-libs='lib1 ...'

   Linkt gegen zusätzliche Bibliotheken (Vorgabe ist nein).

--with-system-expat

   Baut das Modul "pyexpat" mit einer installierten "expat"-Bibliothek
   (Vorgabe ist nein).

--with-system-libmpdec

   Baut das Erweiterungsmodul "_decimal" mit einer installierten
   "mpdecimal"-Bibliothek, siehe das Modul "decimal" (Vorgabe ist ja).

   Added in version 3.3.

   Geändert in Version 3.13: Verwendet standardmäßig die installierte
   "mpdecimal"-Bibliothek.

   Geändert in Version 3.15: Eine beiliegende Kopie der Bibliothek
   wird nicht mehr stillschweigend gewählt, wenn keine installierte
   "mpdecimal"-Bibliothek gefunden wird. Nur in Python 3.15 lässt sie
   sich noch ausdrücklich mit "--with-system-libmpdec=no" oder "--
   without-system-libmpdec" auswählen.

   Veraltet seit Version 3.13, wird in Version 3.16 entfernt: Eine
   Kopie der Quellen der "mpdecimal"-Bibliothek wird mit Python 3.16
   nicht mehr ausgeliefert.

   Siehe auch: "LIBMPDEC_CFLAGS" and "LIBMPDEC_LIBS".

--with-readline=readline|editline

   Bestimmt eine Backend-Bibliothek für das Modul "readline".

   * readline: Verwendet readline als Backend.

   * editline: Verwendet editline als Backend.

   Added in version 3.10.

--without-readline

   Baut das Modul "readline" nicht (wird standardmäßig gebaut).

   Definiert das Makro "HAVE_LIBREADLINE" nicht.

   Added in version 3.10.

--with-libm=STRING

   Überschreibt die Mathematikbibliothek "libm" mit *STRING* (Vorgabe
   ist systemabhängig).

--with-libc=STRING

   Überschreibt die C-Bibliothek "libc" mit *STRING* (Vorgabe ist
   systemabhängig).

--with-openssl=DIR

   Wurzelverzeichnis von OpenSSL.

   Added in version 3.7.

--with-openssl-rpath=[no|auto|DIR]

   Legt das Laufzeit-Bibliotheksverzeichnis (rpath) für die OpenSSL-
   Bibliotheken fest:

   * "no" (Vorgabe): setzt keinen rpath;

   * "auto": ermittelt den rpath selbsttätig aus "--with-openssl" und
     "pkg-config";

   * *DIR*: setzt einen ausdrücklichen rpath.

   Added in version 3.10.


3.3.12. Sicherheitsoptionen
---------------------------

--with-hash-algorithm=[fnv|siphash13|siphash24]

   Wählt den Hash-Algorithmus für die Verwendung in "Python/pyhash.c":

   * "siphash13" (default);

   * "siphash24";

   * "fnv".

   Added in version 3.4.

   Added in version 3.11: "siphash13" kam hinzu und ist die neue
   Vorgabe.

--with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2

   Integrierte Hash-Module:

   * "md5";

   * "sha1";

   * "sha256";

   * "sha512";

   * "sha3" (mit shake);

   * "blake2".

   Added in version 3.9.

--with-ssl-default-suites=[python|openssl|STRING]

   Überschreibt die Zeichenkette der Standard-Cipher-Suites von
   OpenSSL:

   * "python" (Vorgabe): verwendet die von Python bevorzugte Auswahl;

   * "openssl": lässt die Vorgaben von OpenSSL unangetastet;

   * *STRING*: verwendet eine eigene Zeichenkette

   Siehe das Modul "ssl".

   Added in version 3.7.

   Geändert in Version 3.10: Die Einstellungen "python" und *STRING*
   setzen zusätzlich TLS 1.2 als niedrigste Protokollversion.

--disable-safety

   Schaltet Compiler-Optionen ab, die die OpenSSF aus
   Sicherheitsgründen empfiehlt (siehe recommended by OpenSSF) und die
   keine Leistungseinbuße mit sich bringen. Ist diese Option nicht
   eingeschaltet, wird CPython mit sicherheitsrelevanten Compiler-
   Optionen gebaut, die es nicht verlangsamen. Ist sie eingeschaltet,
   wird CPython ohne die unten aufgeführten Compiler-Optionen gebaut.

   Mit "--disable-safety" werden die folgenden Compiler-Optionen
   abgeschaltet:

   * -fstack-protector-strong: Schaltet Laufzeitprüfungen auf
     Pufferüberläufe im Stapel ein.

   * -Wtrampolines: Schaltet Warnungen über Trampoline ein, die
     ausführbare Stapel benötigen.

   Added in version 3.14.

--enable-slower-safety

   Schaltet Compiler-Optionen ein, die die OpenSSF aus
   Sicherheitsgründen empfiehlt (siehe recommended by OpenSSF) und die
   Mehraufwand verursachen. Ist diese Option nicht eingeschaltet, wird
   CPython ohne die sicherheitsrelevanten Compiler-Optionen gebaut,
   die die Leistung beeinträchtigen. Ist sie eingeschaltet, wird
   CPython mit den unten aufgeführten Compiler-Optionen gebaut.

   Mit "--enable-slower-safety" werden die folgenden Compiler-Optionen
   eingeschaltet:

   * -D_FORTIFY_SOURCE=3: Härtet die Quellen mit Prüfungen zur
     Übersetzungs- und Laufzeit gegen unsichere Verwendung der libc
     und gegen Pufferüberläufe.

   Added in version 3.14.


3.3.13. macOS-Optionen
----------------------

Siehe Mac/README.rst.

--enable-universalsdk

--enable-universalsdk=SDKDIR

   Erzeugt einen Build als universelle Binärdatei. *SDKDIR* gibt an,
   welches macOS-SDK für den Build verwendet werden soll (Vorgabe ist
   nein).

--enable-framework

--enable-framework=INSTALLDIR

   Erzeugt ein Python.framework anstelle einer herkömmlichen Unix-
   Installation. Das optionale *INSTALLDIR* gibt den Installationspfad
   an (Vorgabe ist nein).

--with-universal-archs=ARCH

   Gibt an, welche Art universeller Binärdatei erzeugt werden soll.
   Diese Option ist nur gültig, wenn "--enable-universalsdk" gesetzt
   ist.

   Optionen:

   * "universal2" (x86-64 und arm64);

   * "32-bit" (PPC und i386);

   * "64-bit" (PPC64 und x86-64);

   * "3-way" (i386, PPC und x86-64);

   * "intel" (i386 und x86-64);

   * "intel-32" (i386);

   * "intel-64" (x86-64);

   * "all" (PPC, i386, PPC64 und x86-64).

   Beachte, dass die Werte für diesen Konfigurationspunkt *nicht*
   dieselben sind wie die Bezeichner für universelle Binär-Wheels
   unter macOS. Einzelheiten zu den unter macOS verwendeten Plattform-
   Verträglichkeits-Tags stehen im Python Packaging User Guide

--with-framework-name=FRAMEWORK

   Gibt den Namen des Python-Frameworks unter macOS an, nur gültig,
   wenn "--enable-framework" gesetzt ist (Vorgabe: "Python").

--with-app-store-compliance

--with-app-store-compliance=PATCH-FILE

   Die Python-Standardbibliothek enthält Zeichenketten, von denen
   bekannt ist, dass sie bei der Einreichung für den macOS- und iOS-
   App-Store Fehler automatischer Prüfwerkzeuge auslösen. Ist diese
   Option eingeschaltet, wendet sie die Liste der Patches an, von
   denen bekannt ist, dass sie die Vorgaben der App-Stores erfüllen.
   Eine eigene Patch-Datei lässt sich ebenfalls angeben. Diese Option
   ist standardmäßig abgeschaltet.

   Added in version 3.13.


3.3.14. iOS-Optionen
--------------------

Siehe Platforms/Apple/iOS/README.md.

--enable-framework=INSTALLDIR

   Erzeugt ein Python.framework. Anders als unter macOS ist das
   Argument *INSTALLDIR*, das den Installationspfad angibt, zwingend.

--with-framework-name=FRAMEWORK

   Gibt den Namen des Frameworks an (Vorgabe: "Python").


3.3.15. Optionen für das Cross-Kompilieren
------------------------------------------

Mit Cross-Kompilieren, auch Cross-Bauen genannt, lässt sich Python für
eine andere CPU-Architektur oder Plattform bauen. Cross-Kompilieren
setzt einen Python-Interpreter für die Bauplattform voraus. Die
Version des bauenden Python muss zur Version des cross-kompilierten
Ziel-Python passen.

--build=BUILD

   konfiguriert für das Bauen auf BUILD, wird üblicherweise von
   **config.guess** erraten.

--host=HOST

   cross-kompiliert, um Programme zu bauen, die auf HOST (der
   Zielplattform) laufen

--with-build-python=path/to/python

   Pfad zur ausführbaren "python"-Datei des Builds für das Cross-
   Kompilieren

   Added in version 3.11.

CONFIG_SITE=file

   Eine Umgebungsvariable, die auf eine Datei mit Überschreibungen für
   configure verweist.

   Beispiel für eine Datei *config.site*:

      # config.site-aarch64
      ac_cv_buggy_getaddrinfo=no
      ac_cv_file__dev_ptmx=yes
      ac_cv_file__dev_ptc=no

HOSTRUNNER

   Programm, mit dem CPython für die Zielplattform beim Cross-
   Kompilieren ausgeführt wird.

   Added in version 3.11.

Beispiel für Cross-Kompilieren:

   CONFIG_SITE=config.site-aarch64 ../configure \
       --build=x86_64-pc-linux-gnu \
       --host=aarch64-unknown-linux-gnu \
       --with-build-python=../x86_64/python


3.4. Das Bausystem von Python
=============================


3.4.1. Die wichtigsten Dateien des Bausystems
---------------------------------------------

* "configure.ac" => "configure";

* "Makefile.pre.in" => "Makefile" (von "configure" erzeugt);

* "pyconfig.h" (von "configure" erzeugt);

* "Modules/Setup": C-Erweiterungen, die das Makefile mit dem Shell-
  Skript "Module/makesetup" baut;


3.4.2. Die wichtigsten Bauschritte
----------------------------------

* C-Dateien (".c") werden zu Objektdateien (".o") gebaut.

* Aus den Objektdateien wird eine statische "libpython"-Bibliothek
  (".a") erzeugt.

* "python.o" und die statische "libpython"-Bibliothek werden zum
  endgültigen Programm "python" gelinkt.

* C-Erweiterungen baut das Makefile (siehe "Modules/Setup").


3.4.3. Die wichtigsten Makefile-Ziele
-------------------------------------


3.4.3.1. make
~~~~~~~~~~~~~

Wenn du nach einer Codeänderung oder einem Auffrischen deines
Checkouts von Upstream neu baust, genügt meist "make". Das baut (gemäß
der Semantik von Make) das Standardziel, nämlich das erste im Makefile
definierte. Herkömmlich — auch im CPython-Projekt — ist das
üblicherweise das Ziel "all". Das Skript "configure" setzt eine
"autoconf"-Variable "@DEF_MAKE_ALL_RULE@" ein, die genau beschreibt,
welche Ziele "make all" baut. Es gibt drei Möglichkeiten:

* "profile-opt" (konfiguriert mit "--enable-optimizations")

* "build_wasm" (gewählt, wenn die Zielplattform auf "wasm32-wasi*"
  oder "wasm32-emscripten" passt)

* "build_all" (konfiguriert, ohne eines der beiden anderen
  ausdrücklich zu verwenden)

Je nach den letzten Änderungen an den Quelldateien baut Make alle
Ziele (Objektdateien und ausführbare Dateien) neu, die es für veraltet
hält, und ruft bei Bedarf auch "configure" erneut auf. Die
Abhängigkeiten zwischen Quellen und Zielen sind allerdings zahlreich
und werden von Hand gepflegt, Make hat daher manchmal nicht alle
Angaben, um zuverlässig alle neu zu bauenden Ziele zu erkennen. Je
nachdem, welche Ziele nicht neu gebaut werden, können verschiedene
Probleme auftreten. Wenn du Bau- oder Testprobleme hast, die du nicht
anders erklären kannst, umgeht "make clean && make" die meisten
Abhängigkeitsprobleme — auf Kosten längerer Bauzeiten.


3.4.3.2. make platform
~~~~~~~~~~~~~~~~~~~~~~

Baut das Programm "python", aber nicht die Erweiterungsmodule der
Standardbibliothek. Dabei entsteht eine Datei namens "platform", die
in einer einzigen Zeile die Einzelheiten der Bauplattform beschreibt,
etwa "macosx-14.3-arm64-3.12" oder "linux-x86_64-3.13".


3.4.3.3. make profile-opt
~~~~~~~~~~~~~~~~~~~~~~~~~

Baut Python mit profilgeführter Optimierung (PGO). Mit der configure-
Option "--enable-optimizations" machst du das zum Standardziel des
Befehls "make" ("make all" oder einfach "make").


3.4.3.4. make clean
~~~~~~~~~~~~~~~~~~~

Entfernt die gebauten Dateien.


3.4.3.5. make distclean
~~~~~~~~~~~~~~~~~~~~~~~

Entfernt zusätzlich zu dem, was "make clean" tut, die vom Skript
configure erzeugten Dateien. "configure" muss dann vor dem nächsten
Bauen erneut ausgeführt werden. [7]


3.4.3.6. make install
~~~~~~~~~~~~~~~~~~~~~

Baut das Ziel "all" und installiert Python.


3.4.3.7. make test
~~~~~~~~~~~~~~~~~~

Baut das Ziel "all" und führt die Python-Testsammlung mit der Option "
--fast-ci" ohne die GUI-Tests aus. Variablen:

* "TESTOPTS": zusätzliche Befehlszeilenoptionen für regrtest.

* "TESTPYTHONOPTS": zusätzliche Befehlszeilenoptionen für Python.

* "TESTTIMEOUT": Zeitgrenze in Sekunden (Vorgabe: 10 Minuten).


3.4.3.8. make ci
~~~~~~~~~~~~~~~~

Entspricht "make test", verwendet aber "-ugui", um auch die GUI-Tests
auszuführen.

Added in version 3.14.


3.4.3.9. make buildbottest
~~~~~~~~~~~~~~~~~~~~~~~~~~

Entspricht "make test", verwendet aber die Option "--slow-ci" und eine
Standard-Zeitgrenze von 20 Minuten anstelle der Option "--fast-ci".


3.4.3.10. make regen-all
~~~~~~~~~~~~~~~~~~~~~~~~

Erzeugt (fast) alle erzeugten Dateien neu. Dazu gehören unter anderem
die Bytecode-Fälle und die Datei des Parsergenerators. "make regen-
stdlib-module-names" und "autoconf" müssen für die übrigen erzeugten
Dateien getrennt ausgeführt werden.


3.4.4. C-Erweiterungen
----------------------

Einige C-Erweiterungen werden als integrierte Module gebaut, etwa das
Modul "sys". Sie werden mit definiertem Makro "Py_BUILD_CORE_BUILTIN"
gebaut. Integrierte Module haben kein Attribut "__file__":

   >>> 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__'

Andere C-Erweiterungen werden als dynamische Bibliotheken gebaut, etwa
das Modul "_asyncio". Sie werden mit definiertem Makro
"Py_BUILD_CORE_MODULE" gebaut. Beispiel unter Linux x86-64:

   >>> 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'

"Modules/Setup" dient dazu, Makefile-Ziele zum Bauen der
C-Erweiterungen zu erzeugen. Am Anfang der Datei werden
C-Erweiterungen als integrierte Module gebaut. Erweiterungen, die nach
der Marke "*shared*" definiert sind, werden als dynamische
Bibliotheken gebaut.

Die Makros "PyAPI_FUNC()", "PyAPI_DATA()" und "PyMODINIT_FUNC" aus
"Include/exports.h" werden unterschiedlich definiert, je nachdem, ob
das Makro "Py_BUILD_CORE_MODULE" definiert ist:

* Verwendet "Py_EXPORTED_SYMBOL", wenn "Py_BUILD_CORE_MODULE"
  definiert ist

* Verwendet andernfalls "Py_IMPORTED_SYMBOL".

Wird das Makro "Py_BUILD_CORE_BUILTIN" versehentlich bei einer
C-Erweiterung verwendet, die als gemeinsam genutzte Bibliothek gebaut
wird, wird deren Funktion "PyInit_*xxx*()" nicht exportiert, was beim
Import einen "ImportError" auslöst.


3.5. Compiler- und Linker-Flags
===============================

Optionen, die das Skript "./configure" und Umgebungsvariablen setzen
und die das "Makefile" verwendet.


3.5.1. Flags des Präprozessors
------------------------------

CONFIGURE_CPPFLAGS

   Wert der Variablen "CPPFLAGS", der an das Skript "./configure"
   übergeben wird.

   Added in version 3.6.

CPPFLAGS

   Flags des (Objective-)C/C++-Präprozessors, etwa "-I*include_dir*",
   wenn deine Headerdateien in einem nicht standardmäßigen Verzeichnis
   *include_dir* liegen.

   Sowohl "CPPFLAGS" als auch "LDFLAGS" müssen den Wert aus der Shell
   enthalten, damit sich Erweiterungsmodule mit den in den
   Umgebungsvariablen angegebenen Verzeichnissen bauen lassen.

BASECPPFLAGS

   Added in version 3.4.

PY_CPPFLAGS

   Zusätzliche Präprozessor-Flags, die beim Bauen der Objektdateien
   des Interpreters hinzugefügt werden.

   Vorgabe: "$(BASECPPFLAGS) -I. -I$(srcdir)/Include
   $(CONFIGURE_CPPFLAGS) $(CPPFLAGS)".

   Added in version 3.2.


3.5.2. Compiler-Flags
---------------------

CC

   Befehl des C-Compilers.

   Beispiel: "gcc -pthread".

CXX

   Befehl des C++-Compilers.

   Beispiel: "g++ -pthread".

CFLAGS

   Flags des C-Compilers.

CFLAGS_NODIST

   "CFLAGS_NODIST" dient dem Bauen des Interpreters und der
   C-Erweiterungen der Standardbibliothek. Verwende es, wenn ein
   Compiler-Flag nach der Installation von Python *nicht* Teil von
   "CFLAGS" sein soll (gh-65320).

   Insbesondere sollte "CFLAGS" nicht enthalten:

   * das Compiler-Flag "-I" (das den Suchpfad für Include-Dateien
     setzt). Die "-I"-Flags werden von links nach rechts verarbeitet,
     Flags in "CFLAGS" hätten daher Vorrang vor "-I"-Flags, die
     Benutzer oder Pakete mitgeben.

   * Härtungsflags wie "-Werror", weil Distributionen nicht steuern
     können, ob von Benutzern installierte Pakete solchen verschärften
     Maßstäben entsprechen.

   Added in version 3.5.

COMPILEALL_OPTS

   Optionen, die beim Erzeugen der PYC-Dateien in "make install" an
   die Befehlszeile von "compileall" übergeben werden. Vorgabe: "-j0".

   Added in version 3.12.

EXTRA_CFLAGS

   Zusätzliche Flags für den C-Compiler.

CONFIGURE_CFLAGS

   Wert der Variablen "CFLAGS", der an das Skript "./configure"
   übergeben wird.

   Added in version 3.2.

CONFIGURE_CFLAGS_NODIST

   Wert der Variablen "CFLAGS_NODIST", der an das Skript "./configure"
   übergeben wird.

   Added in version 3.5.

BASECFLAGS

   Grundlegende Compiler-Flags.

OPT

   Optimierungsflags.

CFLAGS_ALIASING

   Flags für strenges oder nicht strenges Aliasing, mit denen
   "Python/dtoa.c" kompiliert wird.

   Added in version 3.7.

CFLAGS_CEVAL

   Flags, mit denen "Python/ceval.c" kompiliert wird.

   Added in version 3.14.5.

CCSHARED

   Compiler-Flags zum Bauen einer gemeinsam genutzten Bibliothek.

   Unter Linux und BSD wird zum Beispiel "-fPIC" verwendet.

CFLAGSFORSHARED

   Zusätzliche C-Flags, die beim Bauen der Objektdateien des
   Interpreters hinzugefügt werden.

   Vorgabe: "$(CCSHARED)", wenn "--enable-shared" verwendet wird,
   andernfalls eine leere Zeichenkette.

PY_CFLAGS

   Vorgabe: "$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS)
   $(EXTRA_CFLAGS)".

PY_CFLAGS_NODIST

   Vorgabe: "$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST)
   -I$(srcdir)/Include/internal".

   Added in version 3.5.

PY_STDMODULE_CFLAGS

   C-Flags, mit denen die Objektdateien des Interpreters gebaut
   werden.

   Vorgabe: "$(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS)
   $(CFLAGSFORSHARED)".

   Added in version 3.7.

PY_CORE_CFLAGS

   Vorgabe: "$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE".

   Added in version 3.2.

PY_BUILTIN_MODULE_CFLAGS

   Compiler-Flags, um ein Erweiterungsmodul der Standardbibliothek als
   integriertes Modul zu bauen, etwa das Modul "posix".

   Vorgabe: "$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN".

   Added in version 3.8.

PURIFY

   Befehl für Purify. Purify ist ein Programm zur Speicherfehlersuche.

   Vorgabe: leere Zeichenkette (nicht verwendet).


3.5.3. Linker-Flags
-------------------

LINKCC

   Linker-Befehl, mit dem Programme wie "python" und "_testembed"
   gebaut werden.

   Vorgabe: "$(PURIFY) $(CC)".

CONFIGURE_LDFLAGS

   Wert der Variablen "LDFLAGS", der an das Skript "./configure"
   übergeben wird.

   Vermeide es, "CFLAGS", "LDFLAGS" und so weiter zuzuweisen, damit
   Benutzer sie auf der Befehlszeile verwenden können, um etwas an
   diese Werte anzuhängen, ohne die vorbelegten Werte zu zertreten.

   Added in version 3.2.

LDFLAGS_NODIST

   "LDFLAGS_NODIST" wird genauso verwendet wie "CFLAGS_NODIST".
   Verwende es, wenn ein Linker-Flag nach der Installation von Python
   *nicht* Teil von "LDFLAGS" sein soll (gh-65320).

   Insbesondere sollte "LDFLAGS" nicht enthalten:

   * das Compiler-Flag "-L" (das den Suchpfad für Bibliotheken setzt).
     Die "-L"-Flags werden von links nach rechts verarbeitet, Flags in
     "LDFLAGS" hätten daher Vorrang vor "-L"-Flags, die Benutzer oder
     Pakete mitgeben.

CONFIGURE_LDFLAGS_NODIST

   Wert der Variablen "LDFLAGS_NODIST", der an das Skript
   "./configure" übergeben wird.

   Added in version 3.8.

LDFLAGS

   Linker-Flags, etwa "-L*lib_dir*", wenn deine Bibliotheken in einem
   nicht standardmäßigen Verzeichnis *lib_dir* liegen.

   Sowohl "CPPFLAGS" als auch "LDFLAGS" müssen den Wert aus der Shell
   enthalten, damit sich Erweiterungsmodule mit den in den
   Umgebungsvariablen angegebenen Verzeichnissen bauen lassen.

   Verwende bitte "EXE_LDFLAGS", wenn die angegebenen Linker-Flags nur
   für ausführbare Dateien gelten, etwa das Flag "-pie" von GCC.

LIBS

   Linker-Flags, um dem Linker beim Linken der ausführbaren Python-
   Datei Bibliotheken zu übergeben.

   Beispiel: "-lrt".

LDSHARED

   Befehl zum Bauen einer gemeinsam genutzten Bibliothek.

   Vorgabe: "@LDSHARED@ $(PY_LDFLAGS)".

BLDSHARED

   Befehl zum Bauen der gemeinsam genutzten Bibliothek "libpython".

   Vorgabe: "@BLDSHARED@ $(PY_CORE_LDFLAGS)".

PY_LDFLAGS

   Vorgabe: "$(CONFIGURE_LDFLAGS) $(LDFLAGS)".

PY_LDFLAGS_NODIST

   Vorgabe: "$(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST)".

   Added in version 3.8.

PY_CORE_LDFLAGS

   Linker-Flags, mit denen die Objektdateien des Interpreters gebaut
   werden.

   Added in version 3.8.

EXE_LDFLAGS

   Linker-Flags, mit denen ausführbare Ziele wie der Interpreter
   gebaut werden. Wenn angegeben, wird "PY_CORE_EXE_LDFLAGS" anstelle
   von "PY_CORE_LDFLAGS" verwendet.

   Added in version 3.15.

CONFIGURE_EXE_LDFLAGS

   Wert der Variablen "EXE_LDFLAGS", der an das Skript "./configure"
   übergeben wird.

   Added in version 3.15.

PY_CORE_EXE_LDFLAGS

   Linker-Flags, mit denen der Interpreter und die ausführbaren Ziele
   gebaut werden.

   Vorgabe: "$(PY_CORE_LDFLAGS)"

   Added in version 3.15.

-[ Fußnoten ]-

[7] "git clean -fdx" ist eine noch radikalere Art, deinen Checkout
    „aufzuräumen“. Es entfernt alle Dateien, die Git nicht kennt. Bei
    der Fehlersuche mit "git bisect" ist das zwischen den Proben
    empfohlen, um einen vollständig sauberen Build zu garantieren.
    **Mit Vorsicht verwenden**, denn es löscht alle Dateien, die nicht
    in Git eingecheckt sind, auch deine neue, nicht committete Arbeit.
