da43859b97
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>
51 lines
2.4 KiB
CMake
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()
|