cmake_minimum_required(VERSION 3.8)

project(ilg-demo VERSION 1.0 LANGUAGES CXX)			# Название проекта

option(USE_SHARED_ILG "Create with shared ILGuard otherwise static" ON)
option(USE_PKGCONFIG "Use PkgConfig to connect the library" OFF)

set(SOURCE_FILES 
    main.cpp 
    CMainWindow.cpp 
    CConverterDialog.cpp 
    CControllerDialog.cpp 
    CLockDialog.cpp
    CScheduleDialog.cpp
    CTimeZoneDialog.cpp
    CKeysDialog.cpp
    CKeyDialog.cpp
    CFireDialog.cpp
    CSecurityDialog.cpp
    CEcDialog.cpp
    CEventsDialog.cpp
    CMonitorDialog.cpp
    CProgressDialog.cpp
    CAppSettings.cpp 
    utils.cpp
    ../ilg_cpp_helpers.cpp)

add_executable(${PROJECT_NAME} ${SOURCE_FILES})

include(GNUInstallDirs)

set(CMAKE_INSTALL_PREFIX "/usr" CACHE STRING " " FORCE )

find_package(PkgConfig REQUIRED)
pkg_check_modules(GTKMM REQUIRED IMPORTED_TARGET gtkmm-4.0)

# Find and link library
# find_library(ILGUARD NAMES ilguard PATHS ${CMAKE_BINARY_DIR})
if(USE_PKGCONFIG)
    if(PROJECT_IS_TOP_LEVEL)
        find_package(PkgConfig REQUIRED)

        if(USE_SHARED_ILG)
            pkg_check_modules(ILGUARD REQUIRED IMPORTED_TARGET ilguard)
        else()
            # pkg_check_modules(ILGUARD STATIC REQUIRED IMPORTED_TARGET ilguard)
            # Включаем режим статики для pkg_check_modules
            set(old_static ${PKG_CONFIG_ARGN})
            set(PKG_CONFIG_ARGN "--static") # Добавляет флаг --static ко всем вызовам
            pkg_check_modules(ILGUARD REQUIRED IMPORTED_TARGET ilguard)
            # Возвращаем настройки обратно
            set(PKG_CONFIG_ARGN ${old_static})
        endif(USE_SHARED_ILG)
    endif(PROJECT_IS_TOP_LEVEL)
    target_link_libraries(${PROJECT_NAME} PRIVATE 
        PkgConfig::ILGUARD
        PkgConfig::GTKMM)
else()
    if(PROJECT_IS_TOP_LEVEL)
        find_package(ilguard REQUIRED)
    endif()
    target_link_libraries(${PROJECT_NAME} 
        ilguard::ilguard
        PkgConfig::GTKMM)
endif(USE_PKGCONFIG)

target_compile_definitions(${PROJECT_NAME} PRIVATE $<$<CONFIG:DEBUG>:_DEBUG>)
if(NOT USE_SHARED_ILG)
    target_compile_definitions(${PROJECT_NAME} PRIVATE ILG_STATIC_DEFINE)
endif()
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17)

if(PROJECT_IS_TOP_LEVEL)
    install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR})
    # Настройка и установка ярлыка в меню приложений (название ярлыка должно совпадать с id приложения)
    configure_file(org.ilguard.Demo.desktop.in org.ilguard.Demo.desktop @ONLY)
    install(
        FILES "${CMAKE_CURRENT_BINARY_DIR}/org.ilguard.Demo.desktop" 
        DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications")

    # Общие данные
    set(CPACK_PACKAGE_NAME ${PROJECT_NAME})
    set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
    # Название поставщика пакета
    set(CPACK_PACKAGE_VENDOR "Iron Logic")
    set(CPACK_PACKAGE_DESCRIPTION "Демонстрационная программа SDK Guard")
    set(CPACK_PACKAGE_HOMEPAGE_URL "https://ironlogic.ru/il_new.nsf/htm/ru_sdk-guard")
    set(CPACK_PACKAGE_CONTACT "Поддержка SDK Guard <support@ironlogic.ru>")
    set(CPACK_PROJECT_NAME "SDK Guard")

    set(CPACK_DEBIAN_PACKAGE_DEPENDS "libilguard1, libgtkmm-4.0-0 (>= 4.8.0)")
    set(CPACK_RPM_PACKAGE_REQUIRES "libilguard1, gtkmm4.0 >= 4.8.0")

    set(CPACK_GENERATOR "DEB;RPM"  CACHE STRING "Default packaging generators.")

    include(CPack)

endif()

