cmake_minimum_required(VERSION 3.20)

# Use the fancy version substitution
project(cmake-cpputest-template
    VERSION 0.1.0
    DESCRIPTION "template for cmake + cpputest"
    LANGUAGES   C CXX
)
enable_testing()

set(TARGET_GROUP production CACHE STRING "Group to build")

if(MSVC OR MSYS OR MINGW)
    message("### SETUP FOR WINDOWS ###")
    add_definitions(-DWINDOWS)
else()
    message("### SETUP FOR UNIX ###")
    add_definitions(-DUNIX)
endif()

# For being able to used LSP
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

# Request C 17 standard features
set(CMAKE_C_STANDARD 17)
set(CMAKE_C_STANDARD_REQUIRED True)
set(CMAKE_C_FLAGS "-Wall -Werror -Wpedantic")

# SETUP THE CXX flags for .cpp
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_CXX_FLAGS "-Wall -Werror -Wpedantic")



# #######################################
# TESTING STUFF 
# #######################################


if (UNIT_TESTING)
    
    #Allows usage of preprossor stuff in your files.
    add_compile_definitions(UNIT_TESTING=1)
    if(DEFINED ENV{CPPUTEST_HOME})
        message(STATUS "Using CppUTest home: $ENV{CPPUTEST_HOME}")
        set(CPPUTEST_INCLUDE_DIRS $ENV{CPPUTEST_HOME}/include)
        set(CPPUTEST_LIBRARIES $ENV{CPPUTEST_HOME}/lib)
        set(CPPUTEST_LDFLAGS CppUTest CppUTestExt)
    else()
        find_package(PkgConfig REQUIRED)
        pkg_search_module(CPPUTEST REQUIRED cpputest>=3.8)
        message(STATUS "Found CppUTest version ${CPPUTEST_VERSION}")
    endif()

    # Diagnostic Messages for Multi-Platform testing.
    message(STATUS "CPPUTEST_LIBRARY_DIRS: ${CPPUTEST_LIBRARY_DIRS}")
    message(STATUS "CPPUTEST_INCLUDE_DIRS: ${CPPUTEST_INCLUDE_DIRS}" )
    message(STATUS "CPPUTEST_LIBRARIES: ${CPPUTEST_LIBRARIES}" )

    include_directories(${CPPUTEST_INCLUDE_DIRS})
    link_directories(${CPPUTEST_LIBRARY_DIRS})
    
    add_subdirectory(tests)

endif()

# #######################################
# PROJECT SPECIFIC 
# #######################################


include_directories(
    ./inc
)

add_subdirectory(src)
