db41258d16
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>
49 lines
1.8 KiB
Bash
Executable File
49 lines
1.8 KiB
Bash
Executable File
#!/bin/sh
|
|
# ---------------------------------------------------------------------------
|
|
# Prueft den Export-Mechanismus der Bibliothek Ende-zu-Ende:
|
|
#
|
|
# 1. libpda allein konfigurieren und bauen
|
|
# 2. in ein temporaeres Praefix installieren
|
|
# 3. examples/consumer/ DAGEGEN konfigurieren, bauen und laufen lassen
|
|
#
|
|
# Schritt 3 ist der eigentliche Test. Er benutzt find_package(pda) und weiss
|
|
# nichts vom Quellbaum -- genau wie ein fremdes Projekt. Wenn hier etwas
|
|
# bricht, ist install(EXPORT) oder pdaConfig.cmake.in falsch, und zwar auf
|
|
# eine Art, die im normalen Build NICHT auffaellt.
|
|
#
|
|
# Der uebliche Fehler, den genau dieses Skript faengt: ein
|
|
# target_include_directories ohne BUILD_INTERFACE/INSTALL_INTERFACE. Im
|
|
# Quellbaum laeuft alles, beim Benutzer zeigt der Pfad ins Leere.
|
|
# ---------------------------------------------------------------------------
|
|
set -eu
|
|
|
|
root=$(cd "$(dirname "$0")/.." && pwd)
|
|
work=${TMPDIR:-/tmp}/pda-install-check.$$
|
|
prefix="$work/prefix"
|
|
|
|
cleanup() { rm -rf "$work"; }
|
|
trap cleanup EXIT
|
|
|
|
echo "==> 1/3 libpda allein bauen"
|
|
cmake -S "$root/libpda" -B "$work/lib" -G Ninja \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DPDA_BUILD_TESTS=OFF \
|
|
-DCMAKE_INSTALL_PREFIX="$prefix" >/dev/null
|
|
cmake --build "$work/lib" >/dev/null
|
|
|
|
echo "==> 2/3 installieren nach $prefix"
|
|
cmake --install "$work/lib" >/dev/null
|
|
echo " installiert:"
|
|
find "$prefix" -type f | sed "s|$prefix| \$prefix|" | sort
|
|
|
|
echo "==> 3/3 examples/consumer gegen die INSTALLIERTE Bibliothek bauen"
|
|
cmake -S "$root/examples/consumer" -B "$work/consumer" -G Ninja \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DCMAKE_PREFIX_PATH="$prefix" >/dev/null
|
|
cmake --build "$work/consumer" >/dev/null
|
|
|
|
echo " Ausgabe des fremden Programms:"
|
|
"$work/consumer/consumer" | sed 's/^/ /'
|
|
|
|
echo "==> OK: find_package(pda) funktioniert."
|