Files
playground/third_party/CMakeLists.txt
T
paulhorn da43859b97 feat: Projektstruktur nach P1204R0
Layout, Build und Konventionen analog zu mydb und cxx_scaffold_cli:
Header und Quellen nebeneinander in playground/, Unit-Tests als
.test.c/.test.cpp daneben, Integrationstests in tests/.

Geruest-Module counter (C, Unity) und notebook (C++, doctest) zeigen
jede Regel einmal an lauffaehigem Code.

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

51 lines
2.4 KiB
CMake

# ---------------------------------------------------------------------------
# Vendorter Fremdcode.
#
# Bewusst NICHT ueber FetchContent/CPM: die Dateien liegen als lesbarer Quellcode
# im Repo, der Build braucht kein Netz, und auf dem Ubuntu-Server gibt es keine
# Ueberraschung. Die Dateien werden von Hand aktualisiert, siehe VERSIONS.
#
# Zwei Dinge gelten hier anders als im restlichen Projekt:
# * SYSTEM-Includes -- Warnungen aus fremden Headern interessieren uns nicht.
# * KEIN playground_warnings -- -Wconversion auf unity.c ergibt nur Rauschen.
# ---------------------------------------------------------------------------
# ---- Unity (C) ------------------------------------------------------------
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/unity/unity.c")
add_library(unity STATIC unity/unity.c)
target_include_directories(unity SYSTEM PUBLIC
"${CMAKE_CURRENT_SOURCE_DIR}/unity")
# Unity gibt pro Test eine Zeile "<datei>:<zeile>:<testname>:PASS|FAIL:" aus.
# Genau dieses Format parst der neotest-unity-Adapter, um einzelne Tests
# rot/gruen zu faerben -- CTest selbst kennt nur die ganze Executable.
#
# UNITY_OUTPUT_COLOR wird hier NICHT definiert: Unity prueft nur, OB das
# Makro definiert ist, nicht welchen Wert es hat. "UNITY_OUTPUT_COLOR=0"
# schaltet die Farben also ein und schiebt ANSI-Sequenzen mitten in die
# PASS/FAIL-Zeilen.
target_compile_definitions(unity PUBLIC UNITY_INCLUDE_DOUBLE)
endif()
# ---- doctest (C++) --------------------------------------------------------
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/doctest/doctest.h")
add_library(doctest INTERFACE)
target_include_directories(doctest SYSTEM INTERFACE
"${CMAKE_CURRENT_SOURCE_DIR}")
# doctest_discover_tests(). Ruft die Test-Executable beim Build mit
# --list-test-cases auf und legt EINEN CTest-Eintrag pro TEST_CASE an.
# Ohne das sieht neotest-ctest nur einen einzigen groben Eintrag und kann
# keine Testnamen auf Quellzeilen abbilden.
#
# function() ist in CMake global sichtbar, sobald sie einmal definiert
# wurde -- der Aufruf im uebergeordneten CMakeLists.txt funktioniert also.
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/doctest/doctest.cmake")
include("${CMAKE_CURRENT_SOURCE_DIR}/doctest/doctest.cmake")
else()
message(WARNING "doctest/doctest.cmake fehlt -- siehe third_party/README.md")
endif()
endif()