cmake_minimum_required(VERSION 3.25.2)

project(Di CXX)

add_library(di INTERFACE)
add_library(Di::di ALIAS di)

target_include_directories(
    di INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:include>
)

file(GLOB_RECURSE headers CONFIGURE_DEPENDS *.h)
target_sources(
    di
    INTERFACE FILE_SET
              HEADERS
              TYPE
              HEADERS
              BASE_DIRS
              include
              FILES
              ${headers}
)

target_compile_options(di INTERFACE -std=gnu++26)
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
    target_compile_options(di INTERFACE -fsized-deallocation)
endif()

# This is needed to make header set verification work with clang. It would be best remove this if possible.
if(CMAKE_SYSTEM_NAME STREQUAL "Iros")
    target_compile_definitions(di INTERFACE DI_NO_USE_STD DI_CUSTOM_ASSERT_HANDLER)
endif()

target_compile_options(di INTERFACE -fno-exceptions -fno-rtti)

install(
    TARGETS di
    EXPORT DiConfig
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib
    RUNTIME DESTINATION bin
    INCLUDES
    DESTINATION include
    FILE_SET HEADERS
)
install(
    EXPORT DiConfig
    FILE DiConfig.cmake
    NAMESPACE Di::
    DESTINATION lib/cmake/Di
)

if(IROS_BuildTests)
    add_subdirectory(tests)
endif()
