cmake_minimum_required(VERSION 3.13)
project(vec
        VERSION 0.3.0
        LANGUAGES C)

set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)

option(VEC_ENABLE_CODE_COVERAGE "Enable code coverage for tests" OFF)

macro(configure_compiler TARGET_NAME)
    target_compile_features(${TARGET_NAME} PUBLIC c_std_99)
    if(MSVC)
        target_compile_options(${TARGET_NAME} PRIVATE /W4 /WX)
    else()
        target_compile_options(${TARGET_NAME} PRIVATE -Wall -Wextra -Wpedantic -Werror -Wunused-value)
    endif()
endmacro()

#
# vec library config
#
set(VEC_SOURCES src/vec.c src/vec.h src/vec_config_default.h)
add_library(vec STATIC ${VEC_SOURCES})
configure_compiler(vec)

#
# vec basic test suite config
#
set(VEC_TEST_SOURCES
        test/test_main.c
        test/test_mem.c
        test/test_stats.c
        test/test_vec_custom.c
        test/test_vec_fixed.c
        test/test_vec_functional.c
        test/test_vec_ops.c
        test/test_mem.c
        test/test_vec_mem_failures.c
        test/test_help.h
        test/vec_config_test.h)
add_executable(test_vec ${VEC_TEST_SOURCES} ${VEC_SOURCES})
configure_compiler(test_vec)
target_include_directories(test_vec PRIVATE src/ test/)
target_compile_definitions(test_vec PRIVATE VEC_CONFIG_H="vec_config_test.h")

if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
    message(STATUS "Setting build type to 'Debug' as none was specified.")
    set(CMAKE_BUILD_TYPE "Debug" CACHE
            STRING "Choose the type of build." FORCE)
    # Set the possible values of build type for cmake-gui
    set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
            "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
endif()

include(cmake/CodeCoverage.cmake)
if (VEC_ENABLE_CODE_COVERAGE AND GCOVR_PATH)
    message(STATUS "Code coverage support enabled")
    append_coverage_compiler_flags()
    setup_target_for_coverage_gcovr_xml(
            NAME coverage
            EXECUTABLE test_vec
            EXCLUDE "${PROJECT_SOURCE_DIR}/test/*")
else()
    message(STATUS "Code coverage support disabled")
endif()




# configure ctest
enable_testing()
add_test(NAME basics 
         COMMAND test_vec)