Files
paulhorn db41258d16 feat: PDA als libpda + pda nach P1204R0
Ersetzt das Geruest (counter/notebook) durch ein echtes Beispiel und teilt
es in zwei eigenstaendige Projekte, wie P1204R0 es fuer Bibliothek plus
Programm verlangt.

libpda: textfile (C, Datei-I/O und Feld-Escaping), calculator
(Recursive-Descent-Parser mit std::expected), contact, editor, explorer.
Exportiert pda::pda ueber install(EXPORT) und ist per find_package(pda)
benutzbar.

pda: Shell ohne Ein-/Ausgabe (execute() gibt Text zurueck, deshalb ohne
Terminal testbar), REPL und Stapelbetrieb in main.cpp.

examples/consumer und tools/check-install.sh pruefen die Export-Kette
Ende-zu-Ende: installieren, dann ein fremdes Projekt dagegen bauen.

docs/CMAKE.md erklaert das Target-Modell, PUBLIC/PRIVATE/INTERFACE,
Generator-Ausdruecke, install/export und Symbolsichtbarkeit an diesem
Projekt.

71 Tests gruen unter Homebrew-clang 22, Apple clang und GCC 16, statisch
und shared, mit und ohne ASan/UBSan.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-30 16:39:35 +02:00

1.7 KiB

ADR 0001 — Toolchain und Projektstruktur

  • Status: akzeptiert
  • Datum: 2026-08-30

Kontext

playground soll ein Ort zum Ausprobieren sein, aber kein Ort, an dem jedes Mal neu über Verzeichnisnamen, Include-Form und Testablage entschieden wird. Die bestehenden Projekte mydb und cxx_scaffold_cli haben diese Fragen bereits beantwortet.

Entscheidung

Struktur nach P1204R0, Build- und Stilkonfiguration von mydb übernommen (.clang-format, .clang-tidy, .clangd, .editorconfig, CMakePresets.json, cmake/), Makro- und Target-Präfix auf PDA_/pda_ umgestellt.

Zwei Abweichungen vom Hausstandard, beide in 0002 begründet: die Aufteilung in zwei Projekte und das daraus folgende cmake/ProjectDefaults.cmake, das die Grundeinstellungen aus dem CMakeLists.txt herauszieht, damit beide Teilprojekte sie teilen können.

Die vendorten Abhängigkeiten (Unity 2.7.0, doctest 2.5.3) wurden aus mydb/third_party/ kopiert statt neu geholt — damit sind die Versionen über alle Projekte hinweg identisch.

Konsequenzen

Ein Wechsel zwischen den Projekten kostet keine Umgewöhnung, und ein hier erprobtes Modul lässt sich unverändert in ein anderes Projekt heben.

Der Preis ist Duplikation: eine Änderung am Hausstandard muss in jedem Repo einzeln nachgezogen werden. Das war schon vor diesem Repo so; cxx_scaffold_cli ist der Ort, an dem eine gemeinsame Vorlage entstehen müsste.

Offen bleibt, dass docs/CONVENTIONS.md in mydb ein check_style.sh und ein tools/vendor.sh beschreibt, die in keinem der Repos existieren. In der playground-Fassung sind diese Verweise entfernt; tools/ enthält hier stattdessen check-install.sh, das tatsächlich existiert und läuft.