cmake_minimum_required(VERSION 3.10)
project(lidarlib VERSION 1.0.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(NOT CMAKE_BUILD_TYPE)
  set(CMAKE_BUILD_TYPE Release)
endif()

find_package(Threads REQUIRED)

option(BUILD_SHARED_LIBS "Build shared (.so) libraries instead of static" ON)

set(LIDARLIB_SOURCES
    src/olei_lidar.cpp
    src/sick_lidar.cpp
    src/espe_lidar.cpp
    src/lidar_config.cpp
)

add_library(lidarlib ${LIDARLIB_SOURCES})
set_target_properties(lidarlib PROPERTIES
    VERSION ${PROJECT_VERSION}
    SOVERSION ${PROJECT_VERSION_MAJOR}
    POSITION_INDEPENDENT_CODE ON
)
target_include_directories(lidarlib PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:include>
)
target_link_libraries(lidarlib PUBLIC Threads::Threads)

option(LIDARLIB_BUILD_EXAMPLES "Build example/demo binaries" ON)
if(LIDARLIB_BUILD_EXAMPLES)
  add_executable(example examples/example.cpp)
  target_link_libraries(example PRIVATE lidarlib)

  add_executable(test_dual examples/test_dual.cpp)
  target_link_libraries(test_dual PRIVATE lidarlib)

  add_executable(sick_example examples/sick_example.cpp)
  target_link_libraries(sick_example PRIVATE lidarlib)

  add_executable(nanoscan_example examples/nanoscan_example.cpp)
  target_link_libraries(nanoscan_example PRIVATE lidarlib)

  add_executable(espe_example examples/espe_example.cpp)
  target_link_libraries(espe_example PRIVATE lidarlib)

  add_executable(lidar_app examples/lidar_app.cpp)
  target_link_libraries(lidar_app PRIVATE lidarlib)
endif()

# install + find_package() support
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)

install(TARGETS lidarlib
    EXPORT lidarlibTargets
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

install(EXPORT lidarlibTargets
    FILE lidarlibTargets.cmake
    NAMESPACE lidarlib::
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/lidarlib
)

configure_package_config_file(
    cmake/lidarlibConfig.cmake.in
    ${CMAKE_CURRENT_BINARY_DIR}/lidarlibConfig.cmake
    INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/lidarlib
)
write_basic_package_version_file(
    ${CMAKE_CURRENT_BINARY_DIR}/lidarlibConfigVersion.cmake
    VERSION ${PROJECT_VERSION}
    COMPATIBILITY SameMajorVersion
)
install(FILES
    ${CMAKE_CURRENT_BINARY_DIR}/lidarlibConfig.cmake
    ${CMAKE_CURRENT_BINARY_DIR}/lidarlibConfigVersion.cmake
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/lidarlib
)
