cmake_minimum_required(VERSION 3.20)
project(kirmes_c_tests LANGUAGES C)

# Find required packages
find_package(cmocka REQUIRED)

# Set C standard
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)

# Get root dir
find_program(GIT NAMES git)
execute_process(
    COMMAND ${GIT} rev-parse --show-toplevel
    OUTPUT_VARIABLE ROOT_DIR
    OUTPUT_STRIP_TRAILING_WHITESPACE
)

# Get host tuple for paths
find_program(RUSTC NAMES rustc)
execute_process(
    COMMAND ${RUSTC} --print host-tuple
    OUTPUT_VARIABLE HOST_TUPLE
    OUTPUT_STRIP_TRAILING_WHITESPACE
)

# Set paths for Kirmes library
set(KIRMES_INCLUDE_DIR "${ROOT_DIR}/target/${HOST_TUPLE}/debug/include")
set(KIRMES_LIB_DIR "${ROOT_DIR}/target/${HOST_TUPLE}/debug")

# Test executables
set(TEST_TARGETS
    test_user_api
    test_async_user_api
    test_group_api
    test_async_group_api
    test_membership_api
    test_async_membership_api
)

# Enable testing
enable_testing()

foreach(TEST_TARGET ${TEST_TARGETS})
    add_executable(${TEST_TARGET}
        c/${TEST_TARGET}.c
    )

    target_link_libraries(${TEST_TARGET}
        kirmes
        cmocka::cmocka
    )

    target_include_directories(${TEST_TARGET}
        PRIVATE
            ${KIRMES_INCLUDE_DIR})

    target_link_directories(${TEST_TARGET}
        PRIVATE
            ${KIRMES_LIB_DIR})

    add_test(NAME ${TEST_TARGET} COMMAND ${TEST_TARGET})

    set_tests_properties(${TEST_TARGET} PROPERTIES
        ENVIRONMENT "LD_LIBRARY_PATH=${KIRMES_LIB_DIR}:$ENV{LD_LIBRARY_PATH}"
    )
endforeach()
