# ---------------------------------------------------------------------------
# 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()
