cmake_minimum_required(VERSION 3.16)

project(wayviewer VERSION 0.1.0 LANGUAGES CXX)

include(GNUInstallDirs)

if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
    set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
endif()

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

find_package(PkgConfig REQUIRED)
pkg_check_modules(SDL2 REQUIRED IMPORTED_TARGET sdl2)
pkg_check_modules(LIBVNCCLIENT REQUIRED IMPORTED_TARGET libvncclient)
include(CTest)

add_executable(wayviewer
    src/input.cpp
    src/main.cpp
    src/options.cpp
    src/sdl_app.cpp
    src/ui_prompt.cpp
    src/viewer_state.cpp
    src/vnc_client.cpp
)

target_compile_options(wayviewer PRIVATE
    -Wall
    -Wextra
    -Wpedantic
)

target_link_libraries(wayviewer PRIVATE
    PkgConfig::SDL2
    PkgConfig::LIBVNCCLIENT
)

configure_file(
    packaging/wayviewer.desktop.in
    ${CMAKE_CURRENT_BINARY_DIR}/wayviewer.desktop
    @ONLY
)

install(TARGETS wayviewer RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/wayviewer.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)

if(BUILD_TESTING)
    add_executable(wayviewer_input_tests
        tests/input_tests.cpp
        src/input.cpp
    )

    target_link_libraries(wayviewer_input_tests PRIVATE
        PkgConfig::SDL2
        PkgConfig::LIBVNCCLIENT
    )

    add_test(NAME input_mapping COMMAND wayviewer_input_tests)
endif()
