cmake_minimum_required(VERSION 3.20)

file(READ "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" OPTOSKY_VERSION_TEXT)
string(STRIP "${OPTOSKY_VERSION_TEXT}" OPTOSKY_VERSION_TEXT)

project(optosky VERSION "${OPTOSKY_VERSION_TEXT}" LANGUAGES C CXX)

include(GNUInstallDirs)

option(BUILD_SHARED_LIBS "Build Optosky as a shared library" ON)
option(OPTOSKY_BUILD_EXAMPLES "Build Optosky public examples and tools" ON)
option(OPTOSKY_BUILD_GUI "Build the Dear ImGui Optosky desktop GUI" OFF)
option(OPTOSKY_GUI_BUILD_APP "Build the optosky_gui executable" ON)
option(OPTOSKY_GUI_USE_SYSTEM_GLFW "Use a system glfw3 package for the GUI" ON)
option(OPTOSKY_GUI_USE_SYSTEM_NFD "Use a system Native File Dialog Extended package for the GUI" OFF)
option(OPTOSKY_GUI_VENDOR_NFD "Use vendored Native File Dialog Extended source" ON)
option(OPTOSKY_ENABLE_WERROR "Treat warnings as errors for Optosky sources" OFF)

set(BUILD_TESTING OFF CACHE BOOL "Build tests" FORCE)
set(OPTOSKY_BUILD_TESTS OFF CACHE BOOL "Build Optosky tests" FORCE)
set(OPTOSKY_BUILD_PACKAGE_TESTS OFF CACHE BOOL "Build Optosky package smoke tests" FORCE)
set(OPTOSKY_ENABLE_DETERMINISTIC_TEST_BACKEND OFF CACHE BOOL "Build the deterministic test backend" FORCE)
set(OPTOSKY_GUI_VENDOR_GLFW OFF CACHE BOOL "Use vendored GLFW source" FORCE)
set(OPTOSKY_GUI_INSTALL_DESKTOP_INTEGRATION OFF CACHE BOOL "Install Linux desktop integration files" FORCE)

add_subdirectory(driver)

if(OPTOSKY_BUILD_GUI)
    add_subdirectory(gui)
endif()

install(FILES
    docs/API.md
    docs/BUILD.md
    docs/DEPENDENCIES.md
    docs/SDK.md
    docs/THIRD-PARTY-NOTICES.md
    DESTINATION ${CMAKE_INSTALL_DOCDIR}
    COMPONENT public_docs
)

install(FILES LICENSE.txt
    DESTINATION ${CMAKE_INSTALL_DATADIR}/licenses/optosky
    COMPONENT licenses
)

if(UNIX AND NOT APPLE AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/support/udev/60-optosky.rules")
    install(FILES support/udev/60-optosky.rules
        DESTINATION lib/udev/rules.d
        COMPONENT udev
    )
endif()
