# SPDX-License-Identifier: MPL-2.0
#
# Brique processus commune : lancement et supervision d'un processus enfant
# (ex-supervisor du Studio host, ADR 0009). Utilisée par le Studio host, le Core
# (lancement du processus de rendu) et le rendu lui-même.

add_library(sequa_process
    src/process.cpp)
add_library(sequa::process ALIAS sequa_process)

target_include_directories(sequa_process
    PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
target_compile_features(sequa_process PUBLIC cxx_std_20)

# Aucune bibliothèque système à lier à part Windows.h (kernel32 est implicite) ;
# bcrypt et shell32 ne servent qu'à random et aux autres briques du host.

sequa_target_defaults(sequa_process)

if(SEQUA_BUILD_TESTS)
    # Processus enfant de test : écrit, attend, sort avec un code donné.
    add_executable(sequa_process_test_child tests/test_child.cpp)
    if(WIN32)
        target_link_libraries(sequa_process_test_child PRIVATE shell32)
    endif()
    sequa_target_defaults(sequa_process_test_child)

    add_executable(sequa_process_tests
        tests/main.cpp
        tests/test_process.cpp)
    target_link_libraries(sequa_process_tests PRIVATE sequa::process doctest::doctest)
    target_compile_definitions(sequa_process_tests PRIVATE
        SEQUA_TEST_CHILD="$<TARGET_FILE:sequa_process_test_child>")
    add_dependencies(sequa_process_tests sequa_process_test_child)
    sequa_target_defaults(sequa_process_tests)
    doctest_discover_tests(sequa_process_tests)
endif()
