cmake_minimum_required(VERSION 3.14)
project(odomety VERSION 0.1.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

include(GNUInstallDirs)

find_package(Boost REQUIRED)

add_library(odom_differential
  src/odom_differential.cpp
)
target_include_directories(odom_differential
  PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
    ${Boost_INCLUDE_DIRS}
)
target_compile_options(odom_differential PRIVATE -Wall -Wextra -Wpedantic)

add_executable(odomety_demo
  src/main.cpp
)
target_link_libraries(odomety_demo PRIVATE odom_differential)
target_compile_options(odomety_demo PRIVATE -Wall -Wextra -Wpedantic)

enable_testing()

add_executable(odomety_test
  test/odom_differential_test.cpp
)
target_link_libraries(odomety_test PRIVATE odom_differential)
target_compile_options(odomety_test PRIVATE -Wall -Wextra -Wpedantic)

add_test(NAME odom_differential_test COMMAND odomety_test)

# ---------------------------------------------------------------------------
# Install
# ---------------------------------------------------------------------------
install(TARGETS odom_differential odomety_demo
  EXPORT odometyTargets
  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)

install(DIRECTORY include/
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
  FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp"
)

install(EXPORT odometyTargets
  FILE odometyTargets.cmake
  NAMESPACE odomety::
  DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/odomety
)

include(CMakePackageConfigHelpers)
write_basic_package_version_file(
  "${CMAKE_CURRENT_BINARY_DIR}/odometyConfigVersion.cmake"
  VERSION ${PROJECT_VERSION}
  COMPATIBILITY SameMajorVersion
)

file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/odometyConfig.cmake"
"include(CMakeFindDependencyMacro)
find_dependency(Boost REQUIRED)
include(\"\${CMAKE_CURRENT_LIST_DIR}/odometyTargets.cmake\")
")

install(FILES
  "${CMAKE_CURRENT_BINARY_DIR}/odometyConfig.cmake"
  "${CMAKE_CURRENT_BINARY_DIR}/odometyConfigVersion.cmake"
  DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/odomety
)
