cmake_minimum_required(VERSION 3.10)

# Название проекта
project(ansiblegui)

# Указываем минимальную версию CMake
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_INSTALL_RPATH "$ORIGIN")
set(CMAKE_BUILD_WITH_INSTALL_INSTALL_RPATH TRUE)

# Находим необходимые библиотеки
find_package(Qt5 COMPONENTS Widgets Concurrent REQUIRED)
find_package(yaml-cpp REQUIRED)
find_package(spdlog REQUIRED)
find_package(libssh REQUIRED)

# Указываем, где находятся исходные файлы
set(SOURCES
    mainwindow.cpp
    sshmanager.cpp
    playbookmanager.cpp
    uimanager.cpp
    resources.qrc
    main.cpp
)

# Указываем, где находятся заголовочные файлы
set(HEADERS
    mainwindow.h
    sshmanager.h
    playbookmanager.h
    uimanager.h
)

# Добавляем исполняемый файл
add_executable(ansiblegui ${SOURCES} ${HEADERS})

# Подключаем необходимые библиотеки
target_link_libraries(ansiblegui
    Qt5::Widgets
    Qt5::Concurrent
    yaml-cpp
    spdlog::spdlog
    ssh
)

# Указываем, где находятся заголовочные файлы
target_include_directories(ansiblegui PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})

# Указываем, где находятся заголовочные файлы библиотек
target_include_directories(ansiblegui PRIVATE ${Qt5Widgets_INCLUDE_DIRS})
target_include_directories(ansiblegui PRIVATE ${yaml-cpp_INCLUDE_DIRS})
target_include_directories(ansiblegui PRIVATE ${spdlog_INCLUDE_DIRS})
target_include_directories(ansiblegui PRIVATE ${LIBSSH_INCLUDE_DIRS})

# Установка исполняемого файла
install(TARGETS ansiblegui DESTINATION bin)

# Установка иконок
install(FILES icons/app_icon_16.png DESTINATION share/icons/hicolor/16x16/apps RENAME ansiblegui.png)
install(FILES icons/app_icon_32.png DESTINATION share/icons/hicolor/32x32/apps RENAME ansiblegui.png)
install(FILES icons/app_icon_64.png DESTINATION share/icons/hicolor/64x64/apps RENAME ansiblegui.png)

# Установка .desktop файла
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/ansiblegui.desktop DESTINATION share/applications)

# Добавляем цель uninstall
if(NOT TARGET uninstall)
    configure_file(
        "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
        "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
        IMMEDIATE @ONLY)

    add_custom_target(uninstall
        COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
endif()
