cmake_minimum_required(VERSION 3.16)

project(VapourFundamentals)

include(VapourFundamentals.cmake)

set(VAPOUR_CXX_VERSION "17" CACHE STRING "Which C++ version to use (17 by default)")

if(VapourFundamentals_SOURCES)
    add_library(${PROJECT_NAME} ${VapourFundamentals_SOURCES})
    set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD ${VAPOUR_CXX_VERSION})
    set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
    set(ProjectType PUBLIC)
else()
    add_library(${PROJECT_NAME} INTERFACE)
    set(ProjectType INTERFACE)
endif()

target_include_directories(${PROJECT_NAME} ${ProjectType}
    $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:include>)

if(NOT TARGET PajladaSerialize)
    if(EXISTS ${CMAKE_SOURCE_DIR}/external/serialize)
        add_subdirectory(${CMAKE_SOURCE_DIR}/external/serialize external-serialize)
    else()
        add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/external/serialize external-serialize)
    endif()
endif()

if(NOT TARGET VapourDebug)
    if(EXISTS ${CMAKE_SOURCE_DIR}/internal/debug)
        add_subdirectory(${CMAKE_SOURCE_DIR}/internal/debug vapour-debug)
    else()
        add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/internal/debug vapour-debug)
    endif()
endif()

if(NOT TARGET Boost::headers)
    find_package(Boost 1.73.0 REQUIRED)
endif()

target_link_libraries(${PROJECT_NAME} ${ProjectType} PajladaSerialize)
target_link_libraries(${PROJECT_NAME} ${ProjectType} VapourDebug)
target_link_libraries(${PROJECT_NAME} ${ProjectType} Boost::headers)
target_link_libraries(${PROJECT_NAME} ${ProjectType} stdc++fs)

target_include_directories(${PROJECT_NAME} ${ProjectType} ${CMAKE_CURRENT_LIST_DIR}/external/concurrentqueue)

set(CLANG_TIDY_HEADER_FILTER "${CMAKE_CURRENT_LIST_DIR}/include")
include(${CMAKE_SOURCE_DIR}/internal/cmake/VapourClangTidy.cmake OPTIONAL)
