cmake_minimum_required(VERSION 3.20)

project(hdk-grid 
  VERSION 0.0.1
  LANGUAGES CXX
)

# Note: The src/ directory contains Doxygen documentation-only .cpp files.
# This is a header-only library; src/ files are not compiled into any targets.

option(HDK_TESTS "Build hdk-grid tests" OFF)
# No examples for grid at the moment

add_library(hdk-grid INTERFACE)
if(NOT TARGET hdk::hdk-grid)
  add_library(hdk::hdk-grid ALIAS hdk-grid)
endif()
target_compile_features(hdk-grid INTERFACE cxx_std_17)

target_include_directories(
  hdk-grid
  INTERFACE
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:include>
)

if(HDK_TESTS)
  add_subdirectory(test)
endif()

include(GNUInstallDirs)
include(CMakePackageConfigHelpers)

install(TARGETS hdk-grid
  EXPORT hdk-gridTargets
  COMPONENT hdk-grid_dev
)

install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
  COMPONENT hdk-grid_dev
)

install(EXPORT hdk-gridTargets
  FILE hdk-gridTargets.cmake
  NAMESPACE hdk::
  DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/hdk-grid
  COMPONENT hdk-grid_dev
)

configure_package_config_file(
  ${CMAKE_CURRENT_SOURCE_DIR}/cmake/hdk-gridConfig.cmake.in
  ${CMAKE_CURRENT_BINARY_DIR}/hdk-gridConfig.cmake
  INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/hdk-grid
)

write_basic_package_version_file(
  ${CMAKE_CURRENT_BINARY_DIR}/hdk-gridConfigVersion.cmake
  VERSION ${PROJECT_VERSION}
  COMPATIBILITY SameMajorVersion
)

install(FILES
  ${CMAKE_CURRENT_BINARY_DIR}/hdk-gridConfig.cmake
  ${CMAKE_CURRENT_BINARY_DIR}/hdk-gridConfigVersion.cmake
  DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/hdk-grid
  COMPONENT hdk-grid_dev
)

# Install metadata files for release package
install(FILES
  ${CMAKE_CURRENT_SOURCE_DIR}/README.md
  ${CMAKE_CURRENT_SOURCE_DIR}/../CHANGELOG.md
  DESTINATION ${CMAKE_INSTALL_DOCDIR}/hdk-grid
  COMPONENT hdk-grid_release
  OPTIONAL
)

# Documentation Policy
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/HDKDocumentationPolicy.cmake)

# CPack Packaging Policy
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/HDKPackaging.cmake)

# TODO: Link to dependencies if we need but keep them minimal and optional.

# DIRS important for coverage filtering
list(APPEND HDK_COVERAGE_DIRS
  ${CMAKE_CURRENT_SOURCE_DIR}/include
)
