project (test)

find_package (GTest REQUIRED)
find_package (Threads REQUIRED)

file (GLOB TESTSOURCES "${PROJECT_SOURCE_DIR}/*.cpp")
# create the driver archive
get_filename_component(test_main ${PROJECT_SOURCE_DIR}/test_main.cpp ABSOLUTE)
get_filename_component(test_wrappers ${PROJECT_SOURCE_DIR}/test_wrappers.cpp ABSOLUTE)
list (REMOVE_ITEM TESTSOURCES ${test_main})
list (REMOVE_ITEM TESTSOURCES ${test_wrappers})

include_directories (${GTEST_INCLUDE_DIRS})
include_directories ("${PROJECT_SOURCE_DIR}/../inc")
include_directories ("${PROJECT_SOURCE_DIR}/../src")

set (test_flags "-Wl,--wrap,open")

if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
    set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -Wno-write-strings")
    set(CMAKE_C_FLAGS  "${CMAKE_C_FLAGS} -Wno-write-strings")
    set (COVERAGE_LCOV_EXCLUDES '/usr/*' '${PROJECT_SOURCE_DIR}/*')
endif()

foreach (test_file ${TESTSOURCES})
    get_filename_component (test_prog ${test_file} NAME_WE)
    add_executable (${test_prog} ${test_main} ${test_wrappers} ${test_file})
    target_link_libraries (${test_prog} ${TMF8805_LIB} ${GTEST_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${RT_LIB} ${test_flags})
    add_test (${test_prog} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${test_prog})
    list (APPEND test_list ${test_prog})
    if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
        # setup individual coverage executables
        SETUP_TARGET_FOR_COVERAGE_LCOV (NAME ${test_prog}_coverage EXECUTABLE ${test_prog} DEPENDENCIES ${test_prog})
    endif()
endforeach()

if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
    # setup global test coverage executable
    SETUP_TARGET_FOR_COVERAGE_LCOV (NAME ${PROJECT_NAME}_coverage EXECUTABLE ctest DEPENDENCIES ${test_list})
endif()
